From 0069bb0b95e4386c7fe71906abb88498668b3e9e Mon Sep 17 00:00:00 2001 From: Syping Date: Mon, 9 Oct 2017 08:35:48 +0200 Subject: [PATCH 001/359] latest changes from gta5sync --- .gitattributes | 27 + .travis.yml | 27 +- AboutDialog.cpp | 246 ++--- AboutDialog.h | 88 +- AboutDialog.ui | 204 ++-- AppEnv.cpp | 333 +++--- AppEnv.h | 92 +- CrewDatabase.cpp | 248 +++-- CrewDatabase.h | 96 +- DatabaseThread.cpp | 572 +++++----- DatabaseThread.h | 106 +- ExportDialog.cpp | 96 +- ExportDialog.h | 92 +- ExportDialog.ui | 452 ++++---- ExportThread.cpp | 369 +++---- ExportThread.h | 112 +- GlobalString.cpp | 174 ++- GlobalString.h | 70 +- IconLoader.cpp | 90 +- IconLoader.h | 63 +- ImportDialog.cpp | 409 +++---- ImportDialog.h | 122 +-- ImportDialog.ui | 426 ++++---- MapPreviewDialog.cpp | 76 ++ MapPreviewDialog.h | 41 + MapPreviewDialog.ui | 71 ++ OptionsDialog.cpp | 896 ++++++++-------- OptionsDialog.h | 158 +-- OptionsDialog.ui | 1012 +++++++++--------- PictureDialog.cpp | 1433 +++++++++++++------------ PictureDialog.h | 256 ++--- PictureDialog.ui | 508 ++++----- PictureExport.cpp | 622 +++++------ PictureExport.h | 70 +- ProfileDatabase.cpp | 137 +-- ProfileDatabase.h | 88 +- ProfileInterface.cpp | 344 +++++- ProfileInterface.h | 241 +++-- ProfileInterface.ui | 488 ++++----- ProfileLoader.cpp | 209 ++-- ProfileLoader.h | 104 +- ProfileWidget.cpp | 127 +-- ProfileWidget.h | 91 +- SavegameCopy.cpp | 200 ++-- SavegameCopy.h | 64 +- SavegameData.cpp | 239 ++--- SavegameData.h | 90 +- SavegameDialog.cpp | 106 +- SavegameDialog.h | 58 +- SavegameDialog.ui | 179 ++-- SavegameWidget.cpp | 525 ++++----- SavegameWidget.h | 162 ++- SavegameWidget.ui | 270 ++--- SidebarGenerator.cpp | 122 +-- SidebarGenerator.h | 64 +- SnapmaticEditor.cpp | 680 ++++++------ SnapmaticEditor.h | 138 +-- SnapmaticEditor.ui | 496 ++++----- SnapmaticPicture.cpp | 2050 +++++++++++++++++++----------------- SnapmaticPicture.h | 308 +++--- SnapmaticWidget.cpp | 676 ++++++------ SnapmaticWidget.h | 202 ++-- SnapmaticWidget.ui | 338 +++--- StandardPaths.cpp | 256 ++--- StandardPaths.h | 82 +- StringParser.cpp | 156 +-- StringParser.h | 76 +- TranslationClass.cpp | 543 ++++++++++ TranslationClass.h | 63 ++ UserInterface.cpp | 1081 +++++++++---------- UserInterface.h | 189 ++-- UserInterface.ui | 702 ++++++------ config.h | 262 +++-- gta5view.pro | 368 ++++--- lang/gta5sync_no.qm | Bin 0 -> 23 bytes lang/gta5sync_no.ts | 1619 ++++++++++++++++++++++++++++ main.cpp | 696 ++++-------- qjson4/QJsonArray | 2 +- qjson4/QJsonArray.cpp | 820 +++++++-------- qjson4/QJsonArray.h | 278 ++--- qjson4/QJsonDocument | 2 +- qjson4/QJsonDocument.cpp | 834 +++++++-------- qjson4/QJsonDocument.h | 206 ++-- qjson4/QJsonObject | 2 +- qjson4/QJsonObject.cpp | 644 +++++------ qjson4/QJsonObject.h | 242 ++--- qjson4/QJsonParseError | 2 +- qjson4/QJsonParseError.cpp | 128 +-- qjson4/QJsonParseError.h | 120 +-- qjson4/QJsonParser.cpp | 910 ++++++++-------- qjson4/QJsonParser.h | 162 +-- qjson4/QJsonRoot | 2 +- qjson4/QJsonRoot.h | 90 +- qjson4/QJsonValue | 2 +- qjson4/QJsonValue.cpp | 782 +++++++------- qjson4/QJsonValue.h | 240 ++--- qjson4/QJsonValueRef | 2 +- qjson4/QJsonValueRef.cpp | 456 ++++---- qjson4/QJsonValueRef.h | 158 +-- res/960x536.png | Bin 48000 -> 19532 bytes res/app.qrc | 5 + res/app.rc | 72 +- res/global.de.ini | 204 ++-- res/global.en.ini | 206 ++-- res/global.es.ini | 214 ++-- res/global.fr.ini | 206 ++-- res/global.ja.ini | 212 ++-- res/global.zh.ini | 208 ++-- res/gta5sync_de.qm | Bin 30448 -> 32293 bytes res/gta5sync_de.ts | 876 +++++++++------ res/gta5sync_en_US.qm | Bin 0 -> 18703 bytes res/gta5sync_en_US.ts | 1619 ++++++++++++++++++++++++++++ res/gta5sync_fr.qm | Bin 29475 -> 27241 bytes res/gta5sync_fr.ts | 834 +++++++++------ res/gta5sync_ru.qm | Bin 29918 -> 27502 bytes res/gta5sync_ru.ts | 842 +++++++++------ res/mappreview.jpg | Bin 0 -> 207939 bytes res/pointmaker-16.png | Bin 0 -> 352 bytes res/pointmaker-24.png | Bin 0 -> 444 bytes res/pointmaker-32.png | Bin 0 -> 611 bytes res/pointmaker-8.png | Bin 0 -> 244 bytes res/qtbase_en_GB.qm | Bin 0 -> 941 bytes res/tr_g5p.qrc | 1 + res/tr_qt5.qrc | 1 + uimod/UiModLabel.cpp | 150 +-- uimod/UiModLabel.h | 106 +- uimod/UiModWidget.cpp | 152 +-- uimod/UiModWidget.h | 94 +- 128 files changed, 20971 insertions(+), 15661 deletions(-) create mode 100644 .gitattributes create mode 100644 MapPreviewDialog.cpp create mode 100644 MapPreviewDialog.h create mode 100644 MapPreviewDialog.ui create mode 100644 TranslationClass.cpp create mode 100644 TranslationClass.h create mode 100644 lang/gta5sync_no.qm create mode 100644 lang/gta5sync_no.ts create mode 100644 res/gta5sync_en_US.qm create mode 100644 res/gta5sync_en_US.ts create mode 100644 res/mappreview.jpg create mode 100644 res/pointmaker-16.png create mode 100644 res/pointmaker-24.png create mode 100644 res/pointmaker-32.png create mode 100644 res/pointmaker-8.png create mode 100644 res/qtbase_en_GB.qm diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..41f4538 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,27 @@ +# Auto detect text files and perform LF normalization +* text=auto eol=lf + +# Development files +*.cpp text eol=lf +*.h text eol=lf +*.ui text eol=lf +*.qrc text eol=lf + +# Development resources +*.ini text eol=lf + +# Linux development files +*.desktop text eol=lf + +# Windows development files +*.rc text eol=crlf +*.exe.manifest text eol=crlf + +# Binary files +*.png binary +*.jpg binary +*.qm binary +*.ico binary +*.icns binary +*.xcf binary +*.g5e binary diff --git a/.travis.yml b/.travis.yml index 5ea857e..0a356bb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ sudo: required language: cpp env: -- PACKAGE_VERSION="1.4.0" +- PACKAGE_VERSION="1.5.0" before_install: - test -n $CC && unset CC @@ -12,27 +12,42 @@ before_install: install: - sudo apt-get update -qq - - sudo apt-get install -qq checkinstall dpkg-dev g++ gcc qtbase5-dev qt5-qmake + - sudo apt-get install -qq checkinstall dpkg-dev g++ gcc qtbase5-dev qt5-qmake qttranslations5-l10n libqt4-dev before_script: - - export INSTALL_ROOT=/usr - if [ `git name-rev --tags --name-only $(git rev-parse HEAD)` == "undefined" ]; then export APPLICATION_VERSION="$PACKAGE_VERSION.$TRAVIS_BUILD_NUMBER"; else export APPLICATION_VERSION=`git name-rev --tags --name-only $(git rev-parse HEAD)`; fi - echo "gta5view build version is $APPLICATION_VERSION" - mkdir build - mkdir package + - chmod -x res/gta5sync_*.qm res/gta5view.desktop res/gta5view.png - cd build + - mkdir qt4 + - cd qt4 - echo "Grand Theft Auto V Snapmatic and Savegame viewer" > ./description-pak + - cd .. + - mkdir qt5 + - cd qt5 + - echo "Grand Theft Auto V Snapmatic and Savegame viewer" > ./description-pak + - cd .. script: - - qmake -qt=5 "DEFINES+=GTA5SYNC_BUILDTYPE=\\\\\\\"Release\\\\\\\"" "DEFINES+=GTA5SYNC_DAILYB=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" ../gta5view.pro + - cd qt5 + - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --pkgname=gta5view --pkgversion=$APPLICATION_VERSION --pkgrelease=travis1 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5 --pakdir=../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view --pkgversion=$APPLICATION_VERSION --pkgrelease=travis1 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view-qt4 --replaces=gta5view-qt4 --pakdir=../../package + - cd .. + - cd qt4 + - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - make -j 4 + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$APPLICATION_VERSION --pkgrelease=travis1 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view --replaces=gta5view --pakdir=../../package + - cd .. deploy: provider: releases api_key: secure: "o7VneEz1aHfdVwZvOZLfopf6uJWNrFsZaBvunTmXFzpmNFhlNS1qwqgMUkIA2yBRbZ3wIzVs4vfwIHv7W9yE/PqK+AYL+R8+AwKGrwlgT4HqJNuk6VM/LNJ6GwT/qkQuaoOVw29bUjmzzgIRdHmw53SlJv6Hh1VE8HphlTT//aex6nCfcFhUZ0BETdZDWz5FSHwL3NalUoqfKfQrJeky5RXzCyCANQC2tKt0bV46GaWIgWrDo2KCTNqPtRWWf5GDmnkXE5IYRMQ3mXvO9iYh0v5Y2jo4PiXGUiFUU6Z3aAWFAiPdGclrBO697cf3lCTzDMhuCETR153qFYsLShUlFf61ITAmCeHAWETjZDri0lmPONo3GoNB6alGfYEA51qw14kXakrTpICtTJj7gw/gtUYOabW6hrzmieNzMBIy62RikDPjyakFnuwW2qNHRlD65e0jYv+6nCpb6E+OV16Ysh1zhV2vTfpfzVmSuyu2J+ELqXD3OZCXRSPpDIih9UQ8335p8FBji6jHORcgym/TRgdgRmENibh8tLzWp+UjpWHuWfcpvZgOskjfwU0iDMCayMJ7tDpOhXHcAhDRnd6XRIiOJ5YZCzflj2nEwmt3YUd7DwXS/AU+WHOmcNQBjXBxF/FJa35XXcy3HKJM5TTKqtph3medo30us5yXHeG6NNg=" - file: "../package/gta5view_$APPLICATION_VERSION-travis1_amd64.deb" + file_glob: true + file: "../package/gta5view*.deb" skip_cleanup: true on: tags: true diff --git a/AboutDialog.cpp b/AboutDialog.cpp index a7bdb51..bf2d4ed 100755 --- a/AboutDialog.cpp +++ b/AboutDialog.cpp @@ -1,121 +1,125 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include -#include "AboutDialog.h" -#include "ui_AboutDialog.h" -#include "AppEnv.h" -#include "config.h" - -AboutDialog::AboutDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::AboutDialog) -{ - // Set Window Flags - setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); - - // Build Strings - QString appVersion = qApp->applicationVersion(); - QString buildType = GTA5SYNC_BUILDTYPE; - buildType.replace("_", " "); - QString projectBuild = GTA5SYNC_BUILDDATETIME; - QString buildStr = GTA5SYNC_BUILDSTRING; - - // Additional Content - QString usingStr = tr("Using %1 %2", "Exp. Using libmyfuck"); - QString translatedByStr = tr("Translated by %1", "Exp. Translated by Syping"); - QString translatedByVal = tr("NAME_OF_TRANSLATOR", "Your Name (The person behind your screen looking at this text!)"); - QString translatorProfile = tr("TRANSLATOR_PROFILE", "mailto: http:// https:// Exp. https://github.com/Syping/"); - QString additionalContent = ""; - if (translatedByVal != "NAME_OF_TRANSLATOR") - { - if (translatorProfile != "TRANSLATOR_PROFILE") - { - additionalContent.append(translatedByStr.arg(QString("%2").arg(translatorProfile, translatedByVal))); - } - else - { - additionalContent.append(translatedByStr.arg(translatedByVal)); - } - } -#ifdef WITH_LIBJPEGTURBO // DONT USE IT FOR NOW - bool additionalContentClip = false; - if (!additionalContent.isEmpty()) - { - additionalContentClip = true; - additionalContent.append(" ("); - } - additionalContent.append(usingStr.arg("libjpegturbo", WITH_LIBJPEGTURBO)); - if (additionalContentClip) - { - additionalContent.append(")"); - } -#else - Q_UNUSED(usingStr) -#endif - - // Project Description -#ifdef GTA5SYNC_ENABLED - QString projectDes = tr("A project for viewing and sync Grand Theft Auto V Snapmatic
\nPictures and Savegames"); -#else - QString projectDes = tr("A project for viewing Grand Theft Auto V Snapmatic
\nPictures and Savegames"); -#endif - - // Copyright Description - QString copyrightDes1 = tr("Copyright © %2 %3"); - copyrightDes1 = copyrightDes1.arg(GTA5SYNC_APPVENDORLINK, GTA5SYNC_APPVENDOR, GTA5SYNC_COPYRIGHT); - QString copyrightDes2 = tr("%1 is licensed under GNU GPLv3"); - copyrightDes2 = copyrightDes2.arg(GTA5SYNC_APPSTR); - QString copyrightDesA; - if (!additionalContent.isEmpty()) - { - copyrightDesA = copyrightDes1 % "
" % additionalContent % "
" % copyrightDes2; - } - else - { - copyrightDesA = copyrightDes1 % "
" % copyrightDes2; - } - - // Setup User Interface - ui->setupUi(this); - aboutStr = ui->labAbout->text(); - titleStr = this->windowTitle(); - ui->labAbout->setText(aboutStr.arg(GTA5SYNC_APPSTR, projectDes, appVersion % " (" % buildType % ")", projectBuild, buildStr, qVersion(), copyrightDesA)); - this->setWindowTitle(titleStr.arg(GTA5SYNC_APPSTR)); - - if (QIcon::hasThemeIcon("dialog-close")) - { - ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); - } - - // DPI calculation - qreal screenRatio = AppEnv::screenRatio(); - if (!additionalContent.isEmpty()) - { - resize(375 * screenRatio, 270 * screenRatio); - } - else - { - resize(375 * screenRatio, 260 * screenRatio); - } -} - -AboutDialog::~AboutDialog() -{ - delete ui; -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include +#include "AboutDialog.h" +#include "ui_AboutDialog.h" +#include "AppEnv.h" +#include "config.h" + +AboutDialog::AboutDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::AboutDialog) +{ + // Set Window Flags + setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); + + // Build Strings + QString appVersion = qApp->applicationVersion(); + QString buildType = tr(GTA5SYNC_BUILDTYPE); + buildType.replace("_", " "); + QString projectBuild = GTA5SYNC_BUILDDATETIME; + QString buildStr = GTA5SYNC_BUILDSTRING; + + // Translator Comments + //: Using specific library, example Using libmyfuck + QString usingStr = tr("Using %1 %2"); + //: Translated by translator, example Translated by Syping + QString translatedByStr = tr("Translated by %1"); + //: Enter your name there + QString translatedByVal = tr("NAME_OF_TRANSLATOR"); + //: Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage + QString translatorProfile = tr("TRANSLATOR_PROFILE"); + QString additionalContent = ""; + if (translatedByVal != "NAME_OF_TRANSLATOR") + { + if (translatorProfile != "TRANSLATOR_PROFILE") + { + additionalContent += translatedByStr.arg(QString("%2").arg(translatorProfile, translatedByVal)); + } + else + { + additionalContent += translatedByStr.arg(translatedByVal); + } + } +#ifdef WITH_LIBJPEGTURBO // DONT USE IT FOR NOW + bool additionalContentClip = false; + if (!additionalContent.isEmpty()) + { + additionalContentClip = true; + additionalContent += " ("; + } + additionalContent += usingStr.arg("libjpegturbo", WITH_LIBJPEGTURBO); + if (additionalContentClip) + { + additionalContent += ")"; + } +#else + Q_UNUSED(usingStr) +#endif + + // Project Description +#ifdef GTA5SYNC_ENABLED + QString projectDes = tr("A project for viewing and sync Grand Theft Auto V Snapmatic
\nPictures and Savegames"); +#else + QString projectDes = tr("A project for viewing Grand Theft Auto V Snapmatic
\nPictures and Savegames"); +#endif + + // Copyright Description + QString copyrightDes1 = tr("Copyright © %2 %3"); + copyrightDes1 = copyrightDes1.arg(GTA5SYNC_APPVENDORLINK, GTA5SYNC_APPVENDOR, GTA5SYNC_COPYRIGHT); + QString copyrightDes2 = tr("%1 is licensed under GNU GPLv3"); + copyrightDes2 = copyrightDes2.arg(GTA5SYNC_APPSTR); + QString copyrightDesA; + if (!additionalContent.isEmpty()) + { + copyrightDesA = copyrightDes1 % "
" % additionalContent % "
" % copyrightDes2; + } + else + { + copyrightDesA = copyrightDes1 % "
" % copyrightDes2; + } + + // Setup User Interface + ui->setupUi(this); + aboutStr = ui->labAbout->text(); + titleStr = this->windowTitle(); + ui->labAbout->setText(aboutStr.arg(GTA5SYNC_APPSTR, projectDes, appVersion % " (" % buildType % ")", projectBuild, buildStr, qVersion(), copyrightDesA)); + this->setWindowTitle(titleStr.arg(GTA5SYNC_APPSTR)); + + if (QIcon::hasThemeIcon("dialog-close")) + { + ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); + } + + // DPI calculation + qreal screenRatio = AppEnv::screenRatio(); + if (!additionalContent.isEmpty()) + { + resize(375 * screenRatio, 270 * screenRatio); + } + else + { + resize(375 * screenRatio, 260 * screenRatio); + } +} + +AboutDialog::~AboutDialog() +{ + delete ui; +} diff --git a/AboutDialog.h b/AboutDialog.h index ef78bd5..a160ae9 100755 --- a/AboutDialog.h +++ b/AboutDialog.h @@ -1,44 +1,44 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef ABOUTDIALOG_H -#define ABOUTDIALOG_H - -#include - -namespace Ui { -class AboutDialog; -} - -class AboutDialog : public QDialog -{ - Q_OBJECT - -public: - explicit AboutDialog(QWidget *parent = 0); - ~AboutDialog(); - -private slots: - -private: - Ui::AboutDialog *ui; - QString aboutStr; - QString titleStr; -}; - -#endif // ABOUTDIALOG_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef ABOUTDIALOG_H +#define ABOUTDIALOG_H + +#include + +namespace Ui { +class AboutDialog; +} + +class AboutDialog : public QDialog +{ + Q_OBJECT + +public: + explicit AboutDialog(QWidget *parent = 0); + ~AboutDialog(); + +private slots: + +private: + Ui::AboutDialog *ui; + QString aboutStr; + QString titleStr; +}; + +#endif // ABOUTDIALOG_H diff --git a/AboutDialog.ui b/AboutDialog.ui index d44926d..9419485 100755 --- a/AboutDialog.ui +++ b/AboutDialog.ui @@ -1,102 +1,102 @@ - - - AboutDialog - - - - 0 - 0 - 375 - 260 - - - - About %1 - - - true - - - - - - - 0 - 0 - - - - <span style=" font-weight:600;">%1</span><br/> -<br/> -%2<br/> -<br/> -Version %3<br/> -Created on %4<br/> -Built with Qt %5<br/> -Running with Qt %6<br/> -<br/> -%7 - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - false - - - true - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - &Close - - - - - - - - - - - cmdClose - clicked() - AboutDialog - close() - - - 327 - 228 - - - 187 - 124 - - - - - + + + AboutDialog + + + + 0 + 0 + 375 + 260 + + + + About %1 + + + true + + + + + + + 0 + 0 + + + + <span style=" font-weight:600;">%1</span><br/> +<br/> +%2<br/> +<br/> +Version %3<br/> +Created on %4<br/> +Built with Qt %5<br/> +Running with Qt %6<br/> +<br/> +%7 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + false + + + true + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + &Close + + + + + + + + + + + cmdClose + clicked() + AboutDialog + close() + + + 327 + 228 + + + 187 + 124 + + + + + diff --git a/AppEnv.cpp b/AppEnv.cpp index c1449f8..cab453a 100755 --- a/AppEnv.cpp +++ b/AppEnv.cpp @@ -1,155 +1,178 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "config.h" -#include "AppEnv.h" -#include "StringParser.h" -#include "StandardPaths.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -using namespace std; - -AppEnv::AppEnv() -{ - -} - -// Folder Stuff - -QString AppEnv::getGameFolder(bool *ok) -{ - QDir dir; - QString GTAV_FOLDER = QString::fromUtf8(qgetenv("GTAV_FOLDER")); - if (GTAV_FOLDER != "") - { - dir.setPath(GTAV_FOLDER); - if (dir.exists()) - { - if (ok != NULL) *ok = true; - qputenv("GTAV_FOLDER", dir.absolutePath().toUtf8()); - return dir.absolutePath(); - } - } - - QString GTAV_defaultFolder = StandardPaths::documentsLocation() + QDir::separator() + "Rockstar Games" + QDir::separator() + "GTA V"; - QString GTAV_returnFolder = GTAV_defaultFolder; - - QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); - settings.beginGroup("dir"); - bool forceDir = settings.value("force", false).toBool(); - GTAV_returnFolder = settings.value("dir", GTAV_defaultFolder).toString(); - settings.endGroup(); - - if (forceDir) - { - dir.setPath(GTAV_returnFolder); - if (dir.exists()) - { - if (ok != 0) *ok = true; - qputenv("GTAV_FOLDER", dir.absolutePath().toUtf8()); - return dir.absolutePath(); - } - } - - dir.setPath(GTAV_defaultFolder); - if (dir.exists()) - { - if (ok != 0) *ok = true; - qputenv("GTAV_FOLDER", dir.absolutePath().toUtf8()); - return dir.absolutePath(); - } - - if (!forceDir) - { - dir.setPath(GTAV_returnFolder); - if (dir.exists()) - { - if (ok != 0) *ok = true; - qputenv("GTAV_FOLDER", dir.absolutePath().toUtf8()); - return dir.absolutePath(); - } - } - - if (ok != 0) *ok = false; - return ""; -} - -bool AppEnv::setGameFolder(QString gameFolder) -{ - QDir dir; - dir.setPath(gameFolder); - if (dir.exists()) - { - qputenv("GTAV_FOLDER", dir.absolutePath().toUtf8()); - return true; - } - return false; -} - -QString AppEnv::getLangFolder() -{ - return StringParser::convertBuildedString(QString::fromUtf8(GTA5SYNC_LANG)); -} - -QString AppEnv::getPluginsFolder() -{ - return StringParser::convertBuildedString(QString::fromUtf8(GTA5SYNC_PLUG)); -} - -// Web Stuff - -QByteArray AppEnv::getUserAgent() -{ - return QString("Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0 %1/%2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER).toUtf8(); -} - -// QUrl AppEnv::getCrewFetchingUrl(QString crewID) -// { -// return QUrl(QString("https://socialclub.rockstargames.com/reference/crewfeed/%1").arg(crewID)); -// } - -QUrl AppEnv::getCrewFetchingUrl(QString crewID) -{ - return QUrl(QString("https://socialclub.rockstargames.com/crew/%1/%1").arg(crewID)); -} - -QUrl AppEnv::getPlayerFetchingUrl(QString crewID, QString pageNumber) -{ - return QUrl(QString("https://socialclub.rockstargames.com/crewsapi/GetMembersList?crewId=%1&pageNumber=%2").arg(crewID, pageNumber)); -} - -qreal AppEnv::screenRatio() -{ -#if QT_VERSION >= 0x050000 - qreal dpi = QGuiApplication::primaryScreen()->logicalDotsPerInch(); -#else - qreal dpi = qApp->desktop()->logicalDpiX(); -#endif -#ifdef Q_OS_MAC - return (dpi / 72); -#else - return (dpi / 96); -#endif -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "config.h" +#include "AppEnv.h" +#include "StringParser.h" +#include "StandardPaths.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; + +AppEnv::AppEnv() +{ + +} + +// Folder Stuff + +QString AppEnv::getGameFolder(bool *ok) +{ + QDir dir; + QString GTAV_FOLDER = QString::fromUtf8(qgetenv("GTAV_FOLDER")); + if (GTAV_FOLDER != "") + { + dir.setPath(GTAV_FOLDER); + if (dir.exists()) + { + if (ok != NULL) *ok = true; + qputenv("GTAV_FOLDER", dir.absolutePath().toUtf8()); + return dir.absolutePath(); + } + } + + QString GTAV_defaultFolder = StandardPaths::documentsLocation() % QDir::separator() % "Rockstar Games" % QDir::separator() % "GTA V"; + QString GTAV_returnFolder = GTAV_defaultFolder; + + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("dir"); + bool forceDir = settings.value("force", false).toBool(); + GTAV_returnFolder = settings.value("dir", GTAV_defaultFolder).toString(); + settings.endGroup(); + + if (forceDir) + { + dir.setPath(GTAV_returnFolder); + if (dir.exists()) + { + if (ok != 0) *ok = true; + qputenv("GTAV_FOLDER", dir.absolutePath().toUtf8()); + return dir.absolutePath(); + } + } + + dir.setPath(GTAV_defaultFolder); + if (dir.exists()) + { + if (ok != 0) *ok = true; + qputenv("GTAV_FOLDER", dir.absolutePath().toUtf8()); + return dir.absolutePath(); + } + + if (!forceDir) + { + dir.setPath(GTAV_returnFolder); + if (dir.exists()) + { + if (ok != 0) *ok = true; + qputenv("GTAV_FOLDER", dir.absolutePath().toUtf8()); + return dir.absolutePath(); + } + } + + if (ok != 0) *ok = false; + return ""; +} + +bool AppEnv::setGameFolder(QString gameFolder) +{ + QDir dir; + dir.setPath(gameFolder); + if (dir.exists()) + { + qputenv("GTAV_FOLDER", dir.absolutePath().toUtf8()); + return true; + } + return false; +} + +QString AppEnv::getExLangFolder() +{ + return StringParser::convertBuildedString(GTA5SYNC_LANG); +} + +QString AppEnv::getInLangFolder() +{ +#ifdef GTA5SYNC_QCONF +#ifdef GTA5SYNC_INLANG + return StringParser::convertBuildedString(GTA5SYNC_INLANG); +#else + return StringParser::convertBuildedString(GTA5SYNC_SHARE % QLatin1String("SEPARATOR:APPNAME:SEPARATOR:translations")); +#endif +#else +#ifdef GTA5SYNC_INLANG + return StringParser::convertBuildedString(GTA5SYNC_INLANG); +#else + return QString(":/tr"); +#endif +#endif +} + +QString AppEnv::getPluginsFolder() +{ + return StringParser::convertBuildedString(GTA5SYNC_PLUG); +} + +// Web Stuff + +QByteArray AppEnv::getUserAgent() +{ + return QString("Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0 %1/%2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER).toUtf8(); +} + +// QUrl AppEnv::getCrewFetchingUrl(QString crewID) +// { +// return QUrl(QString("https://socialclub.rockstargames.com/reference/crewfeed/%1").arg(crewID)); +// } + +QUrl AppEnv::getCrewFetchingUrl(QString crewID) +{ + return QUrl(QString("https://socialclub.rockstargames.com/crew/%1/%1").arg(crewID)); +} + +QUrl AppEnv::getPlayerFetchingUrl(QString crewID, QString pageNumber) +{ + return QUrl(QString("https://socialclub.rockstargames.com/crewsapi/GetMembersList?crewId=%1&pageNumber=%2").arg(crewID, pageNumber)); +} + +QUrl AppEnv::getPlayerFetchingUrl(QString crewID, int pageNumber) +{ + return getPlayerFetchingUrl(crewID, QString::number(pageNumber)); +} + +qreal AppEnv::screenRatio() +{ +#if QT_VERSION >= 0x050000 + qreal dpi = QGuiApplication::primaryScreen()->logicalDotsPerInch(); +#else + qreal dpi = qApp->desktop()->logicalDpiX(); +#endif +#ifdef Q_OS_MAC + return (dpi / 72); +#else + return (dpi / 96); +#endif +} diff --git a/AppEnv.h b/AppEnv.h index 332b6e1..21a8e7b 100755 --- a/AppEnv.h +++ b/AppEnv.h @@ -1,45 +1,47 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef APPENV_H -#define APPENV_H - -#include -#include - -class AppEnv -{ -public: - AppEnv(); - - // Folder Stuff - static QString getGameFolder(bool *ok = 0); - static bool setGameFolder(QString gameFolder); - static QString getLangFolder(); - static QString getPluginsFolder(); - - // Web Stuff - static QByteArray getUserAgent(); - static QUrl getCrewFetchingUrl(QString crewID); - static QUrl getPlayerFetchingUrl(QString crewID, QString pageNumber); - - // Screen Stuff - static qreal screenRatio(); -}; - -#endif // APPENV_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef APPENV_H +#define APPENV_H + +#include +#include + +class AppEnv +{ +public: + AppEnv(); + + // Folder Stuff + static QString getGameFolder(bool *ok = 0); + static bool setGameFolder(QString gameFolder); + static QString getExLangFolder(); + static QString getInLangFolder(); + static QString getPluginsFolder(); + + // Web Stuff + static QByteArray getUserAgent(); + static QUrl getCrewFetchingUrl(QString crewID); + static QUrl getPlayerFetchingUrl(QString crewID, QString pageNumber); + static QUrl getPlayerFetchingUrl(QString crewID, int pageNumber); + + // Screen Stuff + static qreal screenRatio(); +}; + +#endif // APPENV_H diff --git a/CrewDatabase.cpp b/CrewDatabase.cpp index 11e3a97..a1b4919 100755 --- a/CrewDatabase.cpp +++ b/CrewDatabase.cpp @@ -1,83 +1,165 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "StandardPaths.h" -#include "CrewDatabase.h" -#include "config.h" -#include -#include - -CrewDatabase::CrewDatabase(QObject *parent) : QObject(parent) -{ - QDir dir; - dir.mkpath(StandardPaths::dataLocation()); - dir.setPath(StandardPaths::dataLocation()); - QString dirPath = dir.absolutePath(); - QString defaultConfPath = dirPath + QDir::separator() + "crews.ini"; - - QSettings confPathSettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); - confPathSettings.beginGroup("Database"); - QString confPathFile = confPathSettings.value("Crews", defaultConfPath).toString(); - confPathSettings.endGroup(); - - crewDB = new QSettings(confPathFile, QSettings::IniFormat); - crewDB->beginGroup("Crews"); -} - -CrewDatabase::~CrewDatabase() -{ - crewDB->endGroup(); - delete crewDB; -} - -QStringList CrewDatabase::getCrews() -{ - QStringList compatibleCrewList = crewDB->childKeys(); - crewDB->endGroup(); - crewDB->beginGroup("CrewList"); - QStringList crewIDs = crewDB->value("IDs", QStringList()).toStringList(); - crewIDs.append(compatibleCrewList); - crewIDs.removeDuplicates(); - crewDB->endGroup(); - crewDB->beginGroup("Crews"); - return crewIDs; -} - -QString CrewDatabase::getCrewName(int crewID) -{ - QString crewStr = crewDB->value(QString::number(crewID), crewID).toString(); - if (crewID == 0) crewStr = tr("No Crew", ""); - return crewStr; -} - -void CrewDatabase::setCrewName(int crewID, QString crewName) -{ - crewDB->setValue(QString::number(crewID), crewName); -} - -void CrewDatabase::addCrew(int crewID) -{ - QStringList crews = getCrews(); - crews.append(QString::number(crewID)); - crews.removeDuplicates(); - crewDB->endGroup(); - crewDB->beginGroup("CrewList"); - crewDB->setValue("IDs", crews); - crewDB->endGroup(); - crewDB->beginGroup("Crews"); -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "StandardPaths.h" +#include "CrewDatabase.h" +#include "config.h" +#include +#include +#include +#include +#include + +CrewDatabase::CrewDatabase(QObject *parent) : QObject(parent) +{ + QDir dir; + dir.mkpath(StandardPaths::dataLocation()); + dir.setPath(StandardPaths::dataLocation()); + QString dirPath = dir.absolutePath(); + QString defaultConfPath = dirPath % QDir::separator() % "crews.ini"; + + QSettings confPathSettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + confPathSettings.beginGroup("Database"); + QString confPathFile = confPathSettings.value("Crews", defaultConfPath).toString(); + confPathSettings.endGroup(); + + crewDB = new QSettings(confPathFile, QSettings::IniFormat); + crewDB->beginGroup("Crews"); + + addProcess = false; +} + +CrewDatabase::~CrewDatabase() +{ + crewDB->endGroup(); + delete crewDB; +} + +QStringList CrewDatabase::getCrews() +{ + QMutexLocker locker(&mutex); +#ifdef GTA5SYNC_DEBUG + qDebug() << "getCrews"; +#endif + return getCrews_p(); +} + +QStringList CrewDatabase::getCrews_p() +{ +#ifdef GTA5SYNC_DEBUG + qDebug() << "getCrews_p"; +#endif + QStringList compatibleCrewList = getCompatibleCrews_p(); + crewDB->endGroup(); + crewDB->beginGroup("CrewList"); + QStringList crewIDs = crewDB->value("IDs", QStringList()).toStringList(); + crewIDs += compatibleCrewList; + crewIDs.removeDuplicates(); + crewDB->endGroup(); + crewDB->beginGroup("Crews"); + return crewIDs; +} + +QStringList CrewDatabase::getCompatibleCrews() +{ + QMutexLocker locker(&mutex); +#ifdef GTA5SYNC_DEBUG + qDebug() << "getCompatibleCrews"; +#endif + return getCompatibleCrews_p(); +} + +QStringList CrewDatabase::getCompatibleCrews_p() +{ +#ifdef GTA5SYNC_DEBUG + qDebug() << "getCompatibleCrews_p"; +#endif + return crewDB->childKeys(); +} + +QString CrewDatabase::getCrewName(int crewID) +{ + QMutexLocker locker(&mutex); +#ifdef GTA5SYNC_DEBUG + qDebug() << "getCrewName" << crewID; +#endif + QString crewStr = crewDB->value(QString::number(crewID), crewID).toString(); + if (crewID == 0) crewStr = tr("No Crew", ""); + return crewStr; +} + +void CrewDatabase::setCrewName(int crewID, QString crewName) +{ + QMutexLocker locker(&mutex); +#ifdef GTA5SYNC_DEBUG + qDebug() << "setCrewName" << crewID << crewName; +#endif + crewDB->setValue(QString::number(crewID), crewName); +} + +void CrewDatabase::addCrew(int crewID) +{ + QMutexLocker locker(&mutex); +#ifdef GTA5SYNC_DEBUG + qDebug() << "addCrew" << crewID; +#endif + QStringList crews = getCrews_p(); + crews += QString::number(crewID); + crews.removeDuplicates(); + crewDB->endGroup(); + crewDB->beginGroup("CrewList"); + crewDB->setValue("IDs", crews); + crewDB->endGroup(); + crewDB->beginGroup("Crews"); +} + +bool CrewDatabase::isCompatibleCrew(QString crewNID) +{ + QMutexLocker locker(&mutex); +#ifdef GTA5SYNC_DEBUG + qDebug() << "isCompatibleCrew" << crewNID; +#endif + return crewDB->contains(crewNID); +} + +bool CrewDatabase::isCompatibleCrew(int crewID) +{ + QMutexLocker locker(&mutex); +#ifdef GTA5SYNC_DEBUG + qDebug() << "isCompatibleCrew" << crewID; +#endif + return crewDB->contains(QString::number(crewID)); +} + +void CrewDatabase::setAddingCrews(bool addingCrews) +{ + QMutexLocker locker(&mutex); +#ifdef GTA5SYNC_DEBUG + qDebug() << "setAddingCrews" << addingCrews; +#endif + addProcess = addingCrews; +} + +bool CrewDatabase::isAddingCrews() +{ + QMutexLocker locker(&mutex); +#ifdef GTA5SYNC_DEBUG + qDebug() << "isAddingCrews"; +#endif + return addProcess; +} diff --git a/CrewDatabase.h b/CrewDatabase.h index 471b236..b5c7ee0 100755 --- a/CrewDatabase.h +++ b/CrewDatabase.h @@ -1,43 +1,53 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef CREWDATABASE_H -#define CREWDATABASE_H - -#include -#include -#include - -class CrewDatabase : public QObject -{ - Q_OBJECT -public: - explicit CrewDatabase(QObject *parent = 0); - void setCrewName(int crewID, QString crewName); - QString getCrewName(int crewID); - QStringList getCrews(); - ~CrewDatabase(); - -private: - QSettings *crewDB; - -public slots: - void addCrew(int crewID); -}; - -#endif // CREWDATABASE_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef CREWDATABASE_H +#define CREWDATABASE_H + +#include +#include +#include +#include + +class CrewDatabase : public QObject +{ + Q_OBJECT +public: + explicit CrewDatabase(QObject *parent = 0); + QString getCrewName(int crewID); + QStringList getCompatibleCrews(); + QStringList getCrews(); + void setAddingCrews(bool addingCrews); + bool isCompatibleCrew(QString crewNID); + bool isCompatibleCrew(int crewID); + bool isAddingCrews(); + ~CrewDatabase(); + +private: + mutable QMutex mutex; + bool addProcess; + QSettings *crewDB; + QStringList getCrews_p(); + QStringList getCompatibleCrews_p(); + +public slots: + void setCrewName(int crewID, QString crewName); + void addCrew(int crewID); +}; + +#endif // CREWDATABASE_H diff --git a/DatabaseThread.cpp b/DatabaseThread.cpp index 0b090d0..4e7d90d 100755 --- a/DatabaseThread.cpp +++ b/DatabaseThread.cpp @@ -1,296 +1,276 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "DatabaseThread.h" -#include "CrewDatabase.h" -#include "AppEnv.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -DatabaseThread::DatabaseThread(CrewDatabase *crewDB, QObject *parent) : QThread(parent), crewDB(crewDB) -{ - crewMaxPages = 83; - threadRunning = true; -} - -void DatabaseThread::run() -{ - QEventLoop threadLoop; - QStringList crewList; - - // Register thread loop end signal - QObject::connect(this, SIGNAL(threadEndCommited()), &threadLoop, SLOT(quit())); - - // Quick time scan - if (crewList.length() <= 3) - { - scanCrewReference(crewList, 2500); - scanCrewMembersList(crewList, 3, 2500); - emit playerNameUpdated(); - } - else if (crewList.length() <= 5) - { - scanCrewReference(crewList, 2500); - scanCrewMembersList(crewList, 2, 2500); - emit playerNameUpdated(); - } - - QEventLoop *waitingLoop = new QEventLoop(); - QTimer::singleShot(10000, waitingLoop, SLOT(quit())); - QObject::connect(this, SIGNAL(threadEndCommited()), waitingLoop, SLOT(quit())); - waitingLoop->exec(); - delete waitingLoop; - - while (threadRunning) - { - crewList = crewDB->getCrews(); - - // Long time scan - scanCrewReference(crewList, 10000); - scanCrewMembersList(crewList, crewMaxPages, 10000); - emit playerNameUpdated(); - - if (threadRunning) - { - QTimer::singleShot(300000, &threadLoop, SLOT(quit())); - threadLoop.exec(); - } - } -} - -// void DatabaseThread::scanCrewReference(QStringList crewList, int requestDelay) -// { -// foreach (const QString &crewID, crewList) -// { -// if (threadRunning && crewID != "0") -// { -// QNetworkAccessManager *netManager = new QNetworkAccessManager(); - -// QNetworkRequest netRequest(AppEnv::getCrewFetchingUrl(crewID)); -// netRequest.setRawHeader("User-Agent", AppEnv::getUserAgent()); -// netRequest.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); -// netRequest.setRawHeader("Accept-Language", "en-US;q=0.5,en;q=0.3"); -// netRequest.setRawHeader("Connection", "keep-alive"); - -// QNetworkReply *netReply = netManager->get(netRequest); - -// QEventLoop *downloadLoop = new QEventLoop(); -// QObject::connect(netReply, SIGNAL(finished()), downloadLoop, SLOT(quit())); -// QObject::connect(this, SIGNAL(threadEndCommited()), downloadLoop, SLOT(quit())); -// QTimer::singleShot(30000, downloadLoop, SLOT(quit())); -// downloadLoop->exec(); -// delete downloadLoop; - -// if (netReply->isFinished()) -// { -// QByteArray crewJson = netReply->readAll(); -// QJsonDocument crewDocument = QJsonDocument::fromJson(crewJson); -// QJsonObject crewObject = crewDocument.object(); -// QVariantMap crewMap = crewObject.toVariantMap(); -// QString crewName; -// bool isFound = false; - -// if (crewMap.contains("activities")) -// { -// QList activitiesList = crewMap["activities"].toList(); -// foreach (const QVariant &activitiesVariant, activitiesList) -// { -// QMap activityRootMap = activitiesVariant.toMap(); -// foreach(const QVariant &activityRootVariant, activityRootMap) -// { -// QMap activityMap = activityRootVariant.toMap(); -// foreach(const QVariant &activityVariant, activityMap) -// { -// QMap activityFinalMap = activityVariant.toMap(); -// if (activityFinalMap.contains("id") && activityFinalMap["id"] == crewID) -// { -// if (activityFinalMap.contains("name") && isFound == false) -// { -// isFound = true; -// crewName = activityFinalMap["name"].toString(); -// } -// } -// } -// } -// } -// } -// if (!crewName.isNull()) -// { -// crewDB->setCrewName(crewID.toInt(), crewName); -// } -// } - -// QEventLoop *waitingLoop = new QEventLoop(); -// QTimer::singleShot(requestDelay, waitingLoop, SLOT(quit())); -// QObject::connect(this, SIGNAL(threadEndCommited()), waitingLoop, SLOT(quit())); -// waitingLoop->exec(); -// delete waitingLoop; - -// delete netReply; -// delete netManager; -// } -// } -// } - -void DatabaseThread::scanCrewReference(QStringList crewList, int requestDelay) -{ - foreach (const QString &crewID, crewList) - { - if (threadRunning && crewID != "0") - { - QNetworkAccessManager *netManager = new QNetworkAccessManager(); - - QNetworkRequest netRequest(AppEnv::getCrewFetchingUrl(crewID)); -#if QT_VERSION >= 0x050600 - netRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); -#endif - netRequest.setRawHeader("User-Agent", AppEnv::getUserAgent()); - netRequest.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); - netRequest.setRawHeader("Accept-Language", "en-US;q=0.5,en;q=0.3"); - netRequest.setRawHeader("Connection", "keep-alive"); - - QNetworkReply *netReply = netManager->get(netRequest); - - QEventLoop *downloadLoop = new QEventLoop(); - QObject::connect(netReply, SIGNAL(finished()), downloadLoop, SLOT(quit())); - QObject::connect(this, SIGNAL(threadEndCommited()), downloadLoop, SLOT(quit())); - QTimer::singleShot(30000, downloadLoop, SLOT(quit())); - downloadLoop->exec(); - delete downloadLoop; - - if (netReply->isFinished()) - { - QString crewName; - QByteArray crewHtml = netReply->readAll(); - QStringList crewHtmlSplit1 = QString::fromUtf8(crewHtml).split("Rockstar Games Social Club - Crew : "); - if (crewHtmlSplit1.length() >= 2) - { - QStringList crewHtmlSplit2 = QString(crewHtmlSplit1.at(1)).split(""); - if (crewHtmlSplit2.length() >= 1) - { - crewName = crewHtmlSplit2.at(0); - } - } - if (!crewName.isEmpty()) - { - crewDB->setCrewName(crewID.toInt(), crewName); - } - } - - QEventLoop *waitingLoop = new QEventLoop(); - QTimer::singleShot(requestDelay, waitingLoop, SLOT(quit())); - QObject::connect(this, SIGNAL(threadEndCommited()), waitingLoop, SLOT(quit())); - waitingLoop->exec(); - delete waitingLoop; - - delete netReply; - delete netManager; - } - } -} - -void DatabaseThread::scanCrewMembersList(QStringList crewList, int maxPages, int requestDelay) -{ - foreach (const QString &crewID, crewList) - { - if (threadRunning && crewID != "0") - { - int currentPage = 0; - int foundPlayers = 0; - int totalPlayers = 1000; - - while(foundPlayers < totalPlayers && currentPage < maxPages) - { - QNetworkAccessManager *netManager = new QNetworkAccessManager(); - - QNetworkRequest netRequest(AppEnv::getPlayerFetchingUrl(crewID, QString::number(currentPage))); -#if QT_VERSION >= 0x050600 - netRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); -#endif - netRequest.setRawHeader("User-Agent", AppEnv::getUserAgent()); - netRequest.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); - netRequest.setRawHeader("Accept-Language", "en-US;q=0.5,en;q=0.3"); - netRequest.setRawHeader("Connection", "keep-alive"); - - QNetworkReply *netReply = netManager->get(netRequest); - - QEventLoop *downloadLoop = new QEventLoop(); - QObject::connect(netReply, SIGNAL(finished()), downloadLoop, SLOT(quit())); - QObject::connect(this, SIGNAL(threadEndCommited()), downloadLoop, SLOT(quit())); - QTimer::singleShot(30000, downloadLoop, SLOT(quit())); - downloadLoop->exec(); - delete downloadLoop; - - if (netReply->isFinished()) - { - QByteArray crewJson = netReply->readAll(); - QJsonDocument crewDocument = QJsonDocument::fromJson(crewJson); - QJsonObject crewObject = crewDocument.object(); - QVariantMap crewMap = crewObject.toVariantMap(); - - if (crewMap.contains("Total")) { totalPlayers = crewMap["Total"].toInt(); } - - if (crewMap.contains("Members")) - { - QList memberList = crewMap["Members"].toList(); - foreach (const QVariant &memberVariant, memberList) - { - QMap memberMap = memberVariant.toMap(); - foundPlayers++; - if (memberMap.contains("RockstarId") && memberMap.contains("Name")) - { - int RockstarId = memberMap["RockstarId"].toInt(); - QString memberName = memberMap["Name"].toString(); - if (memberName != "" && RockstarId != 0) - { - emit playerNameFound(RockstarId, memberName); - } - } - } - } - - QEventLoop *waitingLoop = new QEventLoop(); - QTimer::singleShot(requestDelay, waitingLoop, SLOT(quit())); - QObject::connect(this, SIGNAL(threadEndCommited()), waitingLoop, SLOT(quit())); - waitingLoop->exec(); - delete waitingLoop; - - currentPage++; - } - - delete netReply; - delete netManager; - } - } - } -} - -void DatabaseThread::doEndThread() -{ - threadRunning = false; - emit threadEndCommited(); -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "DatabaseThread.h" +#include "CrewDatabase.h" +#include "AppEnv.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define crewMaxPages 83 + +DatabaseThread::DatabaseThread(CrewDatabase *crewDB, QObject *parent) : QThread(parent), crewDB(crewDB) +{ + threadRunning = true; +} + +void DatabaseThread::run() +{ + QEventLoop threadLoop; + + QStringList crewList; + QStringList crewListR; + + // Register thread loop end signal + QObject::connect(this, SIGNAL(threadEndCommited()), &threadLoop, SLOT(quit())); + + // Setup crewList for Quick time scan + crewList = crewDB->getCrews(); + if (!crewList.isEmpty()) + { + crewListR = deleteCompatibleCrews(crewList); + } + else + { + while (crewList.isEmpty() && threadRunning) + { + QTimer::singleShot(1000, &threadLoop, SLOT(quit())); + threadLoop.exec(); + if (!crewDB->isAddingCrews()) + { + crewList = crewDB->getCrews(); + } + } + if (threadRunning) + { + crewListR = deleteCompatibleCrews(crewList); + } + } + + // Only do QTS when Thread should be run + if (threadRunning) + { + // Quick time scan +#ifdef GTA5SYNC_DEBUG + qDebug() << "Start QTS"; +#endif + if (crewListR.length() <= 5) + { + scanCrewReference(crewListR, 2500); + emit crewNameUpdated(); + } + if (crewList.length() <= 3) + { + scanCrewMembersList(crewList, 3, 2500); + emit playerNameUpdated(); + } + else if (crewList.length() <= 5) + { + scanCrewMembersList(crewList, 2, 2500); + emit playerNameUpdated(); + } + + if (threadRunning) + { + QTimer::singleShot(10000, &threadLoop, SLOT(quit())); + threadLoop.exec(); + } + } + + while (threadRunning) + { + crewList = crewDB->getCrews(); + crewListR = deleteCompatibleCrews(crewList); + + // Long time scan +#ifdef GTA5SYNC_DEBUG + qDebug() << "Start LTS"; +#endif + scanCrewReference(crewListR, 10000); + emit crewNameUpdated(); + scanCrewMembersList(crewList, crewMaxPages, 10000); + emit playerNameUpdated(); + + if (threadRunning) + { + QTimer::singleShot(300000, &threadLoop, SLOT(quit())); + threadLoop.exec(); + } + } +} + +void DatabaseThread::scanCrewReference(const QStringList &crewList, const int &requestDelay) +{ + foreach (const QString &crewID, crewList) + { + if (threadRunning && crewID != "0") + { + QNetworkAccessManager *netManager = new QNetworkAccessManager(); + + QNetworkRequest netRequest(AppEnv::getCrewFetchingUrl(crewID)); +#if QT_VERSION >= 0x050600 + netRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); +#endif + netRequest.setRawHeader("User-Agent", AppEnv::getUserAgent()); + netRequest.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + netRequest.setRawHeader("Accept-Language", "en-US;q=0.5,en;q=0.3"); + netRequest.setRawHeader("Connection", "keep-alive"); + + QNetworkReply *netReply = netManager->get(netRequest); + + QEventLoop *downloadLoop = new QEventLoop(); + QObject::connect(netReply, SIGNAL(finished()), downloadLoop, SLOT(quit())); + QObject::connect(this, SIGNAL(threadEndCommited()), downloadLoop, SLOT(quit())); + QTimer::singleShot(30000, downloadLoop, SLOT(quit())); + downloadLoop->exec(); + delete downloadLoop; + + if (netReply->isFinished()) + { + QString crewName; + QByteArray crewHtml = netReply->readAll(); + QStringList crewHtmlSplit1 = QString::fromUtf8(crewHtml).split("Rockstar Games Social Club - Crew : "); + if (crewHtmlSplit1.length() >= 2) + { + QStringList crewHtmlSplit2 = QString(crewHtmlSplit1.at(1)).split(""); + if (crewHtmlSplit2.length() >= 1) + { + crewName = crewHtmlSplit2.at(0); + } + } + if (!crewName.isEmpty()) + { + emit crewNameFound(crewID.toInt(), crewName); + } + } + + QEventLoop *waitingLoop = new QEventLoop(); + QTimer::singleShot(requestDelay, waitingLoop, SLOT(quit())); + QObject::connect(this, SIGNAL(threadEndCommited()), waitingLoop, SLOT(quit())); + waitingLoop->exec(); + delete waitingLoop; + + delete netReply; + delete netManager; + } + } +} + +void DatabaseThread::scanCrewMembersList(const QStringList &crewList, const int &maxPages, const int &requestDelay) +{ + foreach (const QString &crewID, crewList) + { + if (threadRunning && crewID != "0") + { + int currentPage = 0; + int foundPlayers = 0; + int totalPlayers = 1000; + + while(foundPlayers < totalPlayers && currentPage < maxPages) + { + QNetworkAccessManager *netManager = new QNetworkAccessManager(); + + QNetworkRequest netRequest(AppEnv::getPlayerFetchingUrl(crewID, currentPage)); +#if QT_VERSION >= 0x050600 + netRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); +#endif + netRequest.setRawHeader("User-Agent", AppEnv::getUserAgent()); + netRequest.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + netRequest.setRawHeader("Accept-Language", "en-US;q=0.5,en;q=0.3"); + netRequest.setRawHeader("Connection", "keep-alive"); + + QNetworkReply *netReply = netManager->get(netRequest); + + QEventLoop *downloadLoop = new QEventLoop(); + QObject::connect(netReply, SIGNAL(finished()), downloadLoop, SLOT(quit())); + QObject::connect(this, SIGNAL(threadEndCommited()), downloadLoop, SLOT(quit())); + QTimer::singleShot(30000, downloadLoop, SLOT(quit())); + downloadLoop->exec(); + delete downloadLoop; + + if (netReply->isFinished()) + { + QByteArray crewJson = netReply->readAll(); + QJsonDocument crewDocument = QJsonDocument::fromJson(crewJson); + QJsonObject crewObject = crewDocument.object(); + QVariantMap crewMap = crewObject.toVariantMap(); + + if (crewMap.contains("Total")) { totalPlayers = crewMap["Total"].toInt(); } + + if (crewMap.contains("Members")) + { + QList memberList = crewMap["Members"].toList(); + foreach (const QVariant &memberVariant, memberList) + { + QMap memberMap = memberVariant.toMap(); + foundPlayers++; + if (memberMap.contains("RockstarId") && memberMap.contains("Name")) + { + int RockstarId = memberMap["RockstarId"].toInt(); + QString memberName = memberMap["Name"].toString(); + if (memberName != "" && RockstarId != 0) + { + emit playerNameFound(RockstarId, memberName); + } + } + } + } + + QEventLoop *waitingLoop = new QEventLoop(); + QTimer::singleShot(requestDelay, waitingLoop, SLOT(quit())); + QObject::connect(this, SIGNAL(threadEndCommited()), waitingLoop, SLOT(quit())); + waitingLoop->exec(); + delete waitingLoop; + + currentPage++; + } + + delete netReply; + delete netManager; + } + } + } +} + +QStringList DatabaseThread::deleteCompatibleCrews(const QStringList &crewList) +{ + QStringList crewListR = crewList; + foreach(const QString &crewNID, crewListR) + { + if (crewDB->isCompatibleCrew(crewNID)) + { + crewListR.removeAll(crewNID); + } + } + return crewListR; +} + +void DatabaseThread::doEndThread() +{ + threadRunning = false; + emit threadEndCommited(); +} diff --git a/DatabaseThread.h b/DatabaseThread.h index 0009291..10a3b47 100755 --- a/DatabaseThread.h +++ b/DatabaseThread.h @@ -1,52 +1,54 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef DATABASETHREAD_H -#define DATABASETHREAD_H - -#include "CrewDatabase.h" -#include -#include - -class DatabaseThread : public QThread -{ - Q_OBJECT -public: - explicit DatabaseThread(CrewDatabase *crewDB, QObject *parent = 0); - -public slots: - void doEndThread(); - -private: - CrewDatabase *crewDB; - void scanCrewMembersList(QStringList crewList, int maxPages, int requestDelay); - void scanCrewReference(QStringList crewList, int requestDelay); - bool threadRunning; - int crewMaxPages; - int plyrPerReq; - -protected: - void run(); - -signals: - void playerNameFound(int playerID, QString playerName); - void playerNameUpdated(); - void threadEndCommited(); -}; - -#endif // DATABASETHREAD_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef DATABASETHREAD_H +#define DATABASETHREAD_H + +#include "CrewDatabase.h" +#include +#include + +class DatabaseThread : public QThread +{ + Q_OBJECT +public: + explicit DatabaseThread(CrewDatabase *crewDB, QObject *parent = 0); + +public slots: + void doEndThread(); + +private: + CrewDatabase *crewDB; + void scanCrewMembersList(const QStringList &crewList, const int &maxPages, const int &requestDelay); + void scanCrewReference(const QStringList &crewList, const int &requestDelay); + QStringList deleteCompatibleCrews(const QStringList &crewList); + bool threadRunning; + int plyrPerReq; + +protected: + void run(); + +signals: + void crewNameFound(int crewID, QString crewName); + void crewNameUpdated(); + void playerNameFound(int playerID, QString playerName); + void playerNameUpdated(); + void threadEndCommited(); +}; + +#endif // DATABASETHREAD_H diff --git a/ExportDialog.cpp b/ExportDialog.cpp index 6210ea3..9a93c58 100755 --- a/ExportDialog.cpp +++ b/ExportDialog.cpp @@ -1,48 +1,48 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "ExportDialog.h" -#include "ui_ExportDialog.h" - -ExportDialog::ExportDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::ExportDialog) -{ - ui->setupUi(this); - success = false; -} - -ExportDialog::~ExportDialog() -{ - delete ui; -} - -bool ExportDialog::isSucceeded() -{ - return success; -} - -void ExportDialog::on_cmdSnapmaticClose_clicked() -{ - this->close(); -} - -void ExportDialog::setupPictureExport() -{ - ui->swExport->setCurrentWidget(ui->pageSnapmatic); -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "ExportDialog.h" +#include "ui_ExportDialog.h" + +ExportDialog::ExportDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::ExportDialog) +{ + ui->setupUi(this); + success = false; +} + +ExportDialog::~ExportDialog() +{ + delete ui; +} + +bool ExportDialog::isSucceeded() +{ + return success; +} + +void ExportDialog::on_cmdSnapmaticClose_clicked() +{ + this->close(); +} + +void ExportDialog::setupPictureExport() +{ + ui->swExport->setCurrentWidget(ui->pageSnapmatic); +} diff --git a/ExportDialog.h b/ExportDialog.h index cf5a5cd..65354f0 100755 --- a/ExportDialog.h +++ b/ExportDialog.h @@ -1,46 +1,46 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef EXPORTDIALOG_H -#define EXPORTDIALOG_H - -#include - -namespace Ui { -class ExportDialog; -} - -class ExportDialog : public QDialog -{ - Q_OBJECT - -public: - explicit ExportDialog(QWidget *parent = 0); - void setupPictureExport(); - bool isSucceeded(); - ~ExportDialog(); - -private slots: - void on_cmdSnapmaticClose_clicked(); - -private: - Ui::ExportDialog *ui; - bool success; -}; - -#endif // EXPORTDIALOG_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef EXPORTDIALOG_H +#define EXPORTDIALOG_H + +#include + +namespace Ui { +class ExportDialog; +} + +class ExportDialog : public QDialog +{ + Q_OBJECT + +public: + explicit ExportDialog(QWidget *parent = 0); + void setupPictureExport(); + bool isSucceeded(); + ~ExportDialog(); + +private slots: + void on_cmdSnapmaticClose_clicked(); + +private: + Ui::ExportDialog *ui; + bool success; +}; + +#endif // EXPORTDIALOG_H diff --git a/ExportDialog.ui b/ExportDialog.ui index 6e8c254..d00b208 100755 --- a/ExportDialog.ui +++ b/ExportDialog.ui @@ -1,226 +1,226 @@ - - - ExportDialog - - - - 0 - 0 - 400 - 300 - - - - Dialog - - - true - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - - - - Export Format - - - - - - &JPEG/PNG format - - - - - - - GTA &Snapmatic format - - - - - - - - - - Export Size - - - - - - Default &Size - - - - - - - &Desktop Size - - - - - - - &Custom Size - - - - - - - - - false - - - Custom Size: - - - - - - - false - - - 1 - - - 3840 - - - 960 - - - - - - - x - - - - - - - false - - - 1 - - - 2160 - - - 536 - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - - - - - - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - &Export - - - - - - - - 0 - 0 - - - - &Close - - - - - - - - - - - - - - - + + + ExportDialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + true + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + + + + Export Format + + + + + + &JPEG/PNG format + + + + + + + GTA &Snapmatic format + + + + + + + + + + Export Size + + + + + + Default &Size + + + + + + + &Desktop Size + + + + + + + &Custom Size + + + + + + + + + false + + + Custom Size: + + + + + + + false + + + 1 + + + 3840 + + + 960 + + + + + + + x + + + + + + + false + + + 1 + + + 2160 + + + 536 + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + &Export + + + + + + + + 0 + 0 + + + + &Close + + + + + + + + + + + + + + + diff --git a/ExportThread.cpp b/ExportThread.cpp index 5c39bc0..05af7db 100755 --- a/ExportThread.cpp +++ b/ExportThread.cpp @@ -1,184 +1,185 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "SnapmaticPicture.h" -#include "ProfileInterface.h" -#include "PictureExport.h" -#include "ProfileWidget.h" -#include "ExportThread.h" -#include "SavegameData.h" -#include "config.h" -#include -#include -#include -#include -#include - -ExportThread::ExportThread(QMap profileMap, QString exportDirectory, bool pictureCopyEnabled, bool pictureExportEnabled, int exportCount, QObject *parent) : QThread(parent), - profileMap(profileMap), exportDirectory(exportDirectory), pictureCopyEnabled(pictureCopyEnabled), pictureExportEnabled(pictureExportEnabled), exportCount(exportCount) -{ - -} - -void ExportThread::run() -{ - QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); - - // Picture Settings - // Quality Settings - settings.beginGroup("Pictures"); - int defaultQuality = 100; - QSize defExportSize = QSize(960, 536); - int customQuality = settings.value("CustomQuality", defaultQuality).toInt(); - if (customQuality < 1 || customQuality > 100) - { - customQuality = 100; - } - bool useCustomQuality = settings.value("CustomQualityEnabled", false).toBool(); - - // Size Settings - QSize cusExportSize = settings.value("CustomSize", defExportSize).toSize(); - if (cusExportSize.width() > 3840) - { - cusExportSize.setWidth(3840); - } - else if (cusExportSize.height() > 2160) - { - cusExportSize.setHeight(2160); - } - if (cusExportSize.width() < 1) - { - cusExportSize.setWidth(1); - } - else if (cusExportSize.height() < 1) - { - cusExportSize.setHeight(1); - } - QString sizeMode = settings.value("ExportSizeMode", "Default").toString(); - Qt::AspectRatioMode aspectRatio = (Qt::AspectRatioMode)settings.value("AspectRatio", Qt::KeepAspectRatio).toInt(); - settings.endGroup(); - // End Picture Settings - - int intExportProgress = 0; - foreach(ProfileWidget *widget, profileMap.keys()) - { - if (widget->isSelected()) - { - if (widget->getWidgetType() == "SnapmaticWidget") - { - SnapmaticWidget *picWidget = (SnapmaticWidget*)widget; - SnapmaticPicture *picture = picWidget->getPicture(); - - if (pictureExportEnabled) - { - QString exportFileName = PictureExport::getPictureFileName(picture); - if (exportFileName.right(4) != ".jpg" && exportFileName.right(4) != ".png") - { - exportFileName.append(".jpg"); - } - - intExportProgress++; - emit exportStringUpdate(ProfileInterface::tr("Export file %1 of %2 files").arg(QString::number(intExportProgress), QString::number(exportCount))); - emit exportProgressUpdate(intExportProgress); - - // Scale Picture - QImage exportPicture = picture->getImage(); - if (sizeMode == "Desktop") - { - QRect desktopResolution = QApplication::desktop()->screenGeometry(); - exportPicture = exportPicture.scaled(desktopResolution.width(), desktopResolution.height(), aspectRatio, Qt::SmoothTransformation); - } - else if (sizeMode == "Custom") - { - exportPicture = exportPicture.scaled(cusExportSize, aspectRatio, Qt::SmoothTransformation); - } - - bool isSaved; - if (useCustomQuality) - { - isSaved = exportPicture.save(exportDirectory + "/" + exportFileName, "JPEG", customQuality); - } - else - { - isSaved = exportPicture.save(exportDirectory + "/" + exportFileName, "JPEG", 100); - } - - if (!isSaved) - { - failedExportPictures.append(exportFileName); - } - } - if (pictureCopyEnabled) - { - QString exportFileName = PictureExport::getPictureFileName(picture); - if (exportFileName.right(4) != ".g5e") - { - exportFileName.append(".g5e"); - } - - intExportProgress++; - emit exportStringUpdate(ProfileInterface::tr("Export file %1 of %2 files").arg(QString::number(intExportProgress), QString::number(exportCount))); - emit exportProgressUpdate(intExportProgress); - - QString exportFilePath = exportDirectory + "/" + exportFileName; - if (QFile::exists(exportFilePath)) {QFile::remove(exportFilePath);} - if (!picture->exportPicture(exportDirectory + "/" + exportFileName, "G5E")) - { - failedCopyPictures.append(exportFileName); - } - } - } - else if (widget->getWidgetType() == "SavegameWidget") - { - SavegameWidget *sgdWidget = (SavegameWidget*)widget; - SavegameData *savegame = sgdWidget->getSavegame(); - - QString originalFileName = savegame->getSavegameFileName(); - QFileInfo originalFileInfo(originalFileName); - QString exportFileName = originalFileInfo.fileName(); - - intExportProgress++; - emit exportStringUpdate(ProfileInterface::tr("Export file %1 of %2 files").arg(QString::number(intExportProgress), QString::number(exportCount))); - emit exportProgressUpdate(intExportProgress); - - QString exportFilePath = exportDirectory + "/" + exportFileName; - if (QFile::exists(exportFilePath)) {QFile::remove(exportFilePath);} - if (!QFile::copy(originalFileName, exportFilePath)) - { - failedSavegames.append(exportFileName); - } - } - } - } - emit exportFinished(); -} - -QStringList ExportThread::getFailedCopyPictures() -{ - return failedCopyPictures; -} - -QStringList ExportThread::getFailedExportPictures() -{ - return failedExportPictures; -} - -QStringList ExportThread::getFailedSavegames() -{ - return failedSavegames; -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "SnapmaticPicture.h" +#include "ProfileInterface.h" +#include "PictureExport.h" +#include "ProfileWidget.h" +#include "ExportThread.h" +#include "SavegameData.h" +#include "config.h" +#include +#include +#include +#include +#include +#include + +ExportThread::ExportThread(QMap profileMap, QString exportDirectory, bool pictureCopyEnabled, bool pictureExportEnabled, int exportCount, QObject *parent) : QThread(parent), + profileMap(profileMap), exportDirectory(exportDirectory), pictureCopyEnabled(pictureCopyEnabled), pictureExportEnabled(pictureExportEnabled), exportCount(exportCount) +{ + +} + +void ExportThread::run() +{ + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + + // Picture Settings + // Quality Settings + settings.beginGroup("Pictures"); + int defaultQuality = 100; + QSize defExportSize = QSize(960, 536); + int customQuality = settings.value("CustomQuality", defaultQuality).toInt(); + if (customQuality < 1 || customQuality > 100) + { + customQuality = 100; + } + bool useCustomQuality = settings.value("CustomQualityEnabled", false).toBool(); + + // Size Settings + QSize cusExportSize = settings.value("CustomSize", defExportSize).toSize(); + if (cusExportSize.width() > 3840) + { + cusExportSize.setWidth(3840); + } + else if (cusExportSize.height() > 2160) + { + cusExportSize.setHeight(2160); + } + if (cusExportSize.width() < 1) + { + cusExportSize.setWidth(1); + } + else if (cusExportSize.height() < 1) + { + cusExportSize.setHeight(1); + } + QString sizeMode = settings.value("ExportSizeMode", "Default").toString(); + Qt::AspectRatioMode aspectRatio = (Qt::AspectRatioMode)settings.value("AspectRatio", Qt::KeepAspectRatio).toInt(); + settings.endGroup(); + // End Picture Settings + + int intExportProgress = 0; + foreach(ProfileWidget *widget, profileMap.keys()) + { + if (widget->isSelected()) + { + if (widget->getWidgetType() == "SnapmaticWidget") + { + SnapmaticWidget *picWidget = qobject_cast(widget); + SnapmaticPicture *picture = picWidget->getPicture(); + + if (pictureExportEnabled) + { + QString exportFileName = PictureExport::getPictureFileName(picture); + if (exportFileName.right(4) != ".jpg" && exportFileName.right(4) != ".png") + { + exportFileName += ".jpg"; + } + + intExportProgress++; + emit exportStringUpdate(ProfileInterface::tr("Export file %1 of %2 files").arg(QString::number(intExportProgress), QString::number(exportCount))); + emit exportProgressUpdate(intExportProgress); + + // Scale Picture + QImage exportPicture = picture->getImage(); + if (sizeMode == "Desktop") + { + QRect desktopResolution = qApp->desktop()->screenGeometry(); + exportPicture = exportPicture.scaled(desktopResolution.width(), desktopResolution.height(), aspectRatio, Qt::SmoothTransformation); + } + else if (sizeMode == "Custom") + { + exportPicture = exportPicture.scaled(cusExportSize, aspectRatio, Qt::SmoothTransformation); + } + + bool isSaved; + if (useCustomQuality) + { + isSaved = exportPicture.save(exportDirectory % "/" % exportFileName, "JPEG", customQuality); + } + else + { + isSaved = exportPicture.save(exportDirectory % "/" % exportFileName, "JPEG", 100); + } + + if (!isSaved) + { + failedExportPictures += exportFileName; + } + } + if (pictureCopyEnabled) + { + QString exportFileName = PictureExport::getPictureFileName(picture); + if (exportFileName.right(4) != ".g5e") + { + exportFileName += ".g5e"; + } + + intExportProgress++; + emit exportStringUpdate(ProfileInterface::tr("Export file %1 of %2 files").arg(QString::number(intExportProgress), QString::number(exportCount))); + emit exportProgressUpdate(intExportProgress); + + QString exportFilePath = exportDirectory % "/" % exportFileName; + if (QFile::exists(exportFilePath)) {QFile::remove(exportFilePath);} + if (!picture->exportPicture(exportDirectory % "/" % exportFileName, SnapmaticFormat::G5E_Format)) + { + failedCopyPictures += exportFileName; + } + } + } + else if (widget->getWidgetType() == "SavegameWidget") + { + SavegameWidget *sgdWidget = qobject_cast(widget); + SavegameData *savegame = sgdWidget->getSavegame(); + + QString originalFileName = savegame->getSavegameFileName(); + QFileInfo originalFileInfo(originalFileName); + QString exportFileName = originalFileInfo.fileName(); + + intExportProgress++; + emit exportStringUpdate(ProfileInterface::tr("Export file %1 of %2 files").arg(QString::number(intExportProgress), QString::number(exportCount))); + emit exportProgressUpdate(intExportProgress); + + QString exportFilePath = exportDirectory % "/" % exportFileName; + if (QFile::exists(exportFilePath)) {QFile::remove(exportFilePath);} + if (!QFile::copy(originalFileName, exportFilePath)) + { + failedSavegames += exportFileName; + } + } + } + } + emit exportFinished(); +} + +QStringList ExportThread::getFailedCopyPictures() +{ + return failedCopyPictures; +} + +QStringList ExportThread::getFailedExportPictures() +{ + return failedExportPictures; +} + +QStringList ExportThread::getFailedSavegames() +{ + return failedSavegames; +} diff --git a/ExportThread.h b/ExportThread.h index ecd0cd7..f5837a7 100755 --- a/ExportThread.h +++ b/ExportThread.h @@ -1,56 +1,56 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef EXPORTTHREAD_H -#define EXPORTTHREAD_H - -#include "SnapmaticWidget.h" -#include "SavegameWidget.h" -#include "ProfileWidget.h" -#include -#include - -class ExportThread : public QThread -{ - Q_OBJECT -public: - explicit ExportThread(QMap profileMap, QString exportDirectory, bool pictureCopyEnabled, bool pictureExportEnabled, int exportCount, QObject *parent = 0); - QStringList getFailedSavegames(); - QStringList getFailedCopyPictures(); - QStringList getFailedExportPictures(); - -protected: - void run(); - -private: - QMap profileMap; - QString exportDirectory; - bool pictureCopyEnabled; - bool pictureExportEnabled; - int exportCount; - QStringList failedSavegames; - QStringList failedCopyPictures; - QStringList failedExportPictures; - -signals: - void exportStringUpdate(QString currentFileName); - void exportProgressUpdate(int currentProgressValue); - void exportFinished(); -}; - -#endif // EXPORTTHREAD_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef EXPORTTHREAD_H +#define EXPORTTHREAD_H + +#include "SnapmaticWidget.h" +#include "SavegameWidget.h" +#include "ProfileWidget.h" +#include +#include + +class ExportThread : public QThread +{ + Q_OBJECT +public: + explicit ExportThread(QMap profileMap, QString exportDirectory, bool pictureCopyEnabled, bool pictureExportEnabled, int exportCount, QObject *parent = 0); + QStringList getFailedSavegames(); + QStringList getFailedCopyPictures(); + QStringList getFailedExportPictures(); + +protected: + void run(); + +private: + QMap profileMap; + QString exportDirectory; + bool pictureCopyEnabled; + bool pictureExportEnabled; + int exportCount; + QStringList failedSavegames; + QStringList failedCopyPictures; + QStringList failedExportPictures; + +signals: + void exportStringUpdate(QString currentFileName); + void exportProgressUpdate(int currentProgressValue); + void exportFinished(); +}; + +#endif // EXPORTTHREAD_H diff --git a/GlobalString.cpp b/GlobalString.cpp index 00289c3..fb94678 100755 --- a/GlobalString.cpp +++ b/GlobalString.cpp @@ -1,89 +1,85 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include -#include -#include -#include -#include "GlobalString.h" -#include "config.h" - -GlobalString::GlobalString() -{ - -} - -QMap GlobalString::getGlobalMap() -{ - QMap globalMap; - QSettings globalFile(getLanguageFile(), QSettings::IniFormat); - globalFile.setIniCodec("UTF-8"); - globalFile.beginGroup("Global"); - QStringList globalStrList = globalFile.childKeys(); - foreach(const QString &globalStr, globalStrList) - { - globalMap[globalStr] = globalFile.value(globalStr, globalStr).toString(); - } - globalFile.endGroup(); - return globalMap; -} - -QString GlobalString::getString(QString valueStr, bool *ok) -{ - QString globalString = valueStr; - QSettings globalFile(getLanguageFile(), QSettings::IniFormat); - globalFile.setIniCodec("UTF-8"); - globalFile.beginGroup("Global"); - QStringList globalStrList = globalFile.childKeys(); - if (globalStrList.contains(valueStr)) - { - if (ok != 0) *ok = true; - globalString = globalFile.value(valueStr, valueStr).toString(); - } - globalFile.endGroup(); - return globalString; -} - -QString GlobalString::getLanguageFile() -{ - QString language = getLanguage(); - QString languageFile = ":/global/global." + language + ".ini"; - if (!QFileInfo(languageFile).exists()) - { - languageFile = ":/global/global.en.ini"; - } - return languageFile; -} - -QString GlobalString::getLanguage() -{ - QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); - settings.beginGroup("Interface"); - QString language = settings.value("Language","System").toString(); - settings.endGroup(); - if (language == "System" || language.trimmed() == "") - { - QString languageName = QLocale::system().name(); - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - language = langList.at(0); - } - } - return language; -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "TranslationClass.h" +#include "GlobalString.h" +#include "config.h" +#include +#include +#include +#include +#include +#include + +GlobalString::GlobalString() +{ + +} + +QMap GlobalString::getGlobalMap() +{ + QMap globalMap; + QSettings globalFile(getLanguageFile(), QSettings::IniFormat); + globalFile.setIniCodec("UTF-8"); + globalFile.beginGroup("Global"); + QStringList globalStrList = globalFile.childKeys(); + foreach(const QString &globalStr, globalStrList) + { + globalMap[globalStr] = globalFile.value(globalStr, globalStr).toString(); + } + globalFile.endGroup(); + return globalMap; +} + +QString GlobalString::getString(QString valueStr, bool *ok) +{ + QString globalString = valueStr; + QSettings globalFile(getLanguageFile(), QSettings::IniFormat); + globalFile.setIniCodec("UTF-8"); + globalFile.beginGroup("Global"); + QStringList globalStrList = globalFile.childKeys(); + if (globalStrList.contains(valueStr)) + { + if (ok != NULL) *ok = true; + globalString = globalFile.value(valueStr, valueStr).toString(); + } + globalFile.endGroup(); + return globalString; +} + +QString GlobalString::getLanguageFile() +{ + QString language = getLanguage(); + QString languageFile = ":/global/global." % language % ".ini"; + if (!QFileInfo(languageFile).exists()) + { + languageFile = ":/global/global.en.ini"; + } + return languageFile; +} + +QString GlobalString::getLanguage() +{ + QString language = TCInstance->getCurrentLanguage(); + QStringList langList = QString(language).replace("-", "_").split("_"); + if (langList.length() >= 1) + { + language = langList.at(0); + } + return language; +} diff --git a/GlobalString.h b/GlobalString.h index c9b5bde..9c2d77c 100755 --- a/GlobalString.h +++ b/GlobalString.h @@ -1,35 +1,35 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef GLOBALSTRING_H -#define GLOBALSTRING_H - -#include -#include - -class GlobalString -{ -public: - GlobalString(); - static QString getString(QString valueStr, bool *ok = 0); - static QString getLanguageFile(); - static QString getLanguage(); - static QMap getGlobalMap(); -}; - -#endif // GLOBALSTRING_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef GLOBALSTRING_H +#define GLOBALSTRING_H + +#include +#include + +class GlobalString +{ +public: + GlobalString(); + static QString getString(QString valueStr, bool *ok = 0); + static QString getLanguageFile(); + static QString getLanguage(); + static QMap getGlobalMap(); +}; + +#endif // GLOBALSTRING_H diff --git a/IconLoader.cpp b/IconLoader.cpp index 13ef339..4de091d 100755 --- a/IconLoader.cpp +++ b/IconLoader.cpp @@ -1,40 +1,50 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "IconLoader.h" -#include - -IconLoader::IconLoader() -{ - -} - -QIcon IconLoader::loadingAppIcon() -{ - QIcon appIcon; - appIcon.addFile(":/img/5sync-16.png", QSize(16, 16)); - appIcon.addFile(":/img/5sync-24.png", QSize(24, 24)); - appIcon.addFile(":/img/5sync-32.png", QSize(32, 32)); - appIcon.addFile(":/img/5sync-40.png", QSize(40, 40)); - appIcon.addFile(":/img/5sync-48.png", QSize(48, 48)); - appIcon.addFile(":/img/5sync-64.png", QSize(64, 64)); - appIcon.addFile(":/img/5sync-96.png", QSize(96, 96)); - appIcon.addFile(":/img/5sync-128.png", QSize(128, 128)); - appIcon.addFile(":/img/5sync-256.png", QSize(256, 256)); - return appIcon; -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "IconLoader.h" +#include + +IconLoader::IconLoader() +{ + +} + +QIcon IconLoader::loadingAppIcon() +{ + QIcon appIcon; + appIcon.addFile(":/img/5sync-16.png", QSize(16, 16)); + appIcon.addFile(":/img/5sync-24.png", QSize(24, 24)); + appIcon.addFile(":/img/5sync-32.png", QSize(32, 32)); + appIcon.addFile(":/img/5sync-40.png", QSize(40, 40)); + appIcon.addFile(":/img/5sync-48.png", QSize(48, 48)); + appIcon.addFile(":/img/5sync-64.png", QSize(64, 64)); + appIcon.addFile(":/img/5sync-96.png", QSize(96, 96)); + appIcon.addFile(":/img/5sync-128.png", QSize(128, 128)); + appIcon.addFile(":/img/5sync-256.png", QSize(256, 256)); + return appIcon; +} + +QIcon IconLoader::loadingPointmakerIcon() +{ + QIcon pointmakerIcon; + pointmakerIcon.addFile(":/img/pointmaker-8.png", QSize(8, 8)); + pointmakerIcon.addFile(":/img/pointmaker-16.png", QSize(16, 16)); + pointmakerIcon.addFile(":/img/pointmaker-24.png", QSize(24, 24)); + pointmakerIcon.addFile(":/img/pointmaker-32.png", QSize(32, 32)); + return pointmakerIcon; +} diff --git a/IconLoader.h b/IconLoader.h index c7d5107..fe8669b 100755 --- a/IconLoader.h +++ b/IconLoader.h @@ -1,31 +1,32 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef ICONLOADER_H -#define ICONLOADER_H - -#include - -class IconLoader -{ -public: - IconLoader(); - static QIcon loadingAppIcon(); -}; - -#endif // ICONLOADER_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef ICONLOADER_H +#define ICONLOADER_H + +#include + +class IconLoader +{ +public: + IconLoader(); + static QIcon loadingAppIcon(); + static QIcon loadingPointmakerIcon(); +}; + +#endif // ICONLOADER_H diff --git a/ImportDialog.cpp b/ImportDialog.cpp index 19de296..5f485a1 100644 --- a/ImportDialog.cpp +++ b/ImportDialog.cpp @@ -1,190 +1,219 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "ImportDialog.h" -#include "ui_ImportDialog.h" -#include "AppEnv.h" -#include -#include -#include -#include - -// IMAGES VALUES -#define snapmaticResolutionW 960 -#define snapmaticResolutionH 536 -#define snapmaticAvatarResolution 470 -#define snapmaticAvatarPlacementW 145 -#define snapmaticAvatarPlacementH 66 - -ImportDialog::ImportDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::ImportDialog) -{ - ui->setupUi(this); - doImport = false; - avatarAreaImage = QImage(":/img/avatarareaimport.png"); - - if (QIcon::hasThemeIcon("dialog-ok")) - { - ui->cmdOK->setIcon(QIcon::fromTheme("dialog-ok")); - } - if (QIcon::hasThemeIcon("dialog-cancel")) - { - ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel")); - } - - ui->rbKeep->setChecked(true); - - qreal screenRatio = AppEnv::screenRatio(); - snapmaticResolutionLW = 430 * screenRatio; - snapmaticResolutionLH = 240 * screenRatio; - setMinimumSize(430 * screenRatio, 380 * screenRatio); - setMaximumSize(430 * screenRatio, 380 * screenRatio); - setFixedSize(430 * screenRatio, 380 * screenRatio); - ui->vlButtom->setSpacing(6 * screenRatio); - ui->vlButtom->setContentsMargins(9 * screenRatio, 6 * screenRatio, 9 * screenRatio, 9 * screenRatio); -} - -ImportDialog::~ImportDialog() -{ - delete ui; -} - -void ImportDialog::processImage() -{ - QImage snapmaticImage = workImage; - QPixmap snapmaticPixmap(snapmaticResolutionW, snapmaticResolutionH); - snapmaticPixmap.fill(Qt::black); - QPainter snapmaticPainter(&snapmaticPixmap); - if (ui->cbAvatar->isChecked()) - { - // Avatar mode - int diffWidth = 0; - int diffHeight = 0; - if (ui->rbKeep->isChecked()) - { - snapmaticImage = snapmaticImage.scaled(snapmaticAvatarResolution, snapmaticAvatarResolution, Qt::KeepAspectRatio, Qt::SmoothTransformation); - if (snapmaticImage.width() > snapmaticImage.height()) - { - diffHeight = snapmaticAvatarResolution - snapmaticImage.height(); - diffHeight = diffHeight / 2; - } - else if (snapmaticImage.width() < snapmaticImage.height()) - { - diffWidth = snapmaticAvatarResolution - snapmaticImage.width(); - diffWidth = diffWidth / 2; - } - } - else - { - snapmaticImage = snapmaticImage.scaled(snapmaticAvatarResolution, snapmaticAvatarResolution, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); - } - snapmaticPainter.drawImage(snapmaticAvatarPlacementW + diffWidth, snapmaticAvatarPlacementH + diffHeight, snapmaticImage); - imageTitle = "Custom Avatar"; - } - else - { - // Picture mode - int diffWidth = 0; - int diffHeight = 0; - if (ui->rbKeep->isChecked()) - { - snapmaticImage = snapmaticImage.scaled(snapmaticResolutionW, snapmaticResolutionH, Qt::KeepAspectRatio, Qt::SmoothTransformation); - if (snapmaticImage.width() != snapmaticResolutionW) - { - diffWidth = snapmaticResolutionW - snapmaticImage.width(); - diffWidth = diffWidth / 2; - } - else if (snapmaticImage.height() != snapmaticResolutionH) - { - diffHeight = snapmaticResolutionH - snapmaticImage.height(); - diffHeight = diffHeight / 2; - } - } - else - { - snapmaticImage = snapmaticImage.scaled(snapmaticResolutionW, snapmaticResolutionH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); - } - snapmaticPainter.drawImage(0 + diffWidth, 0 + diffHeight, snapmaticImage); - imageTitle = "Custom Picture"; - } - snapmaticPainter.end(); - newImage = snapmaticPixmap.toImage(); - ui->labPicture->setPixmap(snapmaticPixmap.scaled(snapmaticResolutionLW, snapmaticResolutionLH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); -} - -QImage ImportDialog::image() -{ - return newImage; -} - -void ImportDialog::setImage(const QImage &image_) -{ - workImage = image_; - if (workImage.width() == workImage.height()) - { - ui->cbAvatar->setChecked(true); - } - processImage(); -} - -bool ImportDialog::isDoImport() -{ - return doImport; -} - -QString ImportDialog::getImageTitle() -{ - return imageTitle; -} - -void ImportDialog::on_rbIgnore_clicked() -{ - processImage(); -} - -void ImportDialog::on_rbKeep_clicked() -{ - processImage(); -} - -void ImportDialog::on_cbAvatar_clicked() -{ - processImage(); -} - -void ImportDialog::on_cmdCancel_clicked() -{ - close(); -} - -void ImportDialog::on_cmdOK_clicked() -{ - doImport = true; - close(); -} - -void ImportDialog::on_labPicture_labelPainted() -{ - if (ui->cbAvatar->isChecked()) - { - QPainter labelPainter(ui->labPicture); - labelPainter.drawImage(0, 0, avatarAreaImage.scaled(snapmaticResolutionLW, snapmaticResolutionLH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); - labelPainter.end(); - } -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "ImportDialog.h" +#include "ui_ImportDialog.h" +#include "AppEnv.h" +#include +#include +#include +#include +#include +#include +#include + +// IMAGES VALUES +#define snapmaticResolutionW 960 +#define snapmaticResolutionH 536 +#define snapmaticAvatarResolution 470 +#define snapmaticAvatarPlacementW 145 +#define snapmaticAvatarPlacementH 66 + +ImportDialog::ImportDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::ImportDialog) +{ + ui->setupUi(this); + importAgreed = false; + insideAvatarZone = false; + avatarAreaImage = QImage(":/img/avatarareaimport.png"); + selectedColour = QColor::fromRgb(0, 0, 0, 255); + + if (QIcon::hasThemeIcon("dialog-ok")) + { + ui->cmdOK->setIcon(QIcon::fromTheme("dialog-ok")); + } + if (QIcon::hasThemeIcon("dialog-cancel")) + { + ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel")); + } + + ui->cbIgnore->setChecked(false); + ui->labColour->setText(tr("Background Colour: %1").arg(selectedColour.name())); + + qreal screenRatio = AppEnv::screenRatio(); + snapmaticResolutionLW = 430 * screenRatio; + snapmaticResolutionLH = 240 * screenRatio; + setMinimumSize(430 * screenRatio, 380 * screenRatio); + setMaximumSize(430 * screenRatio, 380 * screenRatio); + setFixedSize(430 * screenRatio, 380 * screenRatio); + ui->vlButtom->setSpacing(6 * screenRatio); + ui->vlButtom->setContentsMargins(9 * screenRatio, 6 * screenRatio, 9 * screenRatio, 9 * screenRatio); +} + +ImportDialog::~ImportDialog() +{ + delete ui; +} + +void ImportDialog::processImage() +{ + QImage snapmaticImage = workImage; + QPixmap snapmaticPixmap(snapmaticResolutionW, snapmaticResolutionH); + snapmaticPixmap.fill(selectedColour); + QPainter snapmaticPainter(&snapmaticPixmap); + if (insideAvatarZone) + { + // Avatar mode + int diffWidth = 0; + int diffHeight = 0; + if (!ui->cbIgnore->isChecked()) + { + snapmaticImage = snapmaticImage.scaled(snapmaticAvatarResolution, snapmaticAvatarResolution, Qt::KeepAspectRatio, Qt::SmoothTransformation); + if (snapmaticImage.width() > snapmaticImage.height()) + { + diffHeight = snapmaticAvatarResolution - snapmaticImage.height(); + diffHeight = diffHeight / 2; + } + else if (snapmaticImage.width() < snapmaticImage.height()) + { + diffWidth = snapmaticAvatarResolution - snapmaticImage.width(); + diffWidth = diffWidth / 2; + } + } + else + { + snapmaticImage = snapmaticImage.scaled(snapmaticAvatarResolution, snapmaticAvatarResolution, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + } + snapmaticPainter.drawImage(snapmaticAvatarPlacementW + diffWidth, snapmaticAvatarPlacementH + diffHeight, snapmaticImage); + imageTitle = "Custom Avatar"; + } + else + { + // Picture mode + int diffWidth = 0; + int diffHeight = 0; + if (!ui->cbIgnore->isChecked()) + { + snapmaticImage = snapmaticImage.scaled(snapmaticResolutionW, snapmaticResolutionH, Qt::KeepAspectRatio, Qt::SmoothTransformation); + if (snapmaticImage.width() != snapmaticResolutionW) + { + diffWidth = snapmaticResolutionW - snapmaticImage.width(); + diffWidth = diffWidth / 2; + } + else if (snapmaticImage.height() != snapmaticResolutionH) + { + diffHeight = snapmaticResolutionH - snapmaticImage.height(); + diffHeight = diffHeight / 2; + } + } + else + { + snapmaticImage = snapmaticImage.scaled(snapmaticResolutionW, snapmaticResolutionH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + } + snapmaticPainter.drawImage(0 + diffWidth, 0 + diffHeight, snapmaticImage); + imageTitle = "Custom Picture"; + } + snapmaticPainter.end(); + newImage = snapmaticPixmap.toImage(); + ui->labPicture->setPixmap(snapmaticPixmap.scaled(snapmaticResolutionLW, snapmaticResolutionLH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); +} + +QImage ImportDialog::image() +{ + return newImage; +} + +void ImportDialog::setImage(const QImage &image_) +{ + workImage = image_; + if (workImage.width() == workImage.height()) + { + insideAvatarZone = true; + ui->cbAvatar->setChecked(true); + } + processImage(); +} + +bool ImportDialog::isImportAgreed() +{ + return importAgreed; +} + +QString ImportDialog::getImageTitle() +{ + return imageTitle; +} + +void ImportDialog::on_cbIgnore_toggled(bool checked) +{ + Q_UNUSED(checked) + processImage(); +} + +void ImportDialog::on_cbAvatar_toggled(bool checked) +{ + if (workImage.width() == workImage.height() && !checked) + { + if (QMessageBox::No == QMessageBox::warning(this, tr("Snapmatic Avatar Zone"), tr("Are you sure to use a square image outside of the Avatar Zone?\nWhen you want to use it as Avatar the image will be detached!"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No)) + { + ui->cbAvatar->setChecked(true); + insideAvatarZone = true; + return; + } + } + insideAvatarZone = ui->cbAvatar->isChecked(); + processImage(); +} + +void ImportDialog::on_cmdCancel_clicked() +{ + close(); +} + +void ImportDialog::on_cmdOK_clicked() +{ + importAgreed = true; + close(); +} + +void ImportDialog::on_labPicture_labelPainted() +{ + if (insideAvatarZone) + { + QImage avatarAreaFinalImage(avatarAreaImage); + if (selectedColour.lightness() > 127) + { + avatarAreaFinalImage.setColor(1, qRgb(0, 0, 0)); + } + QPainter labelPainter(ui->labPicture); + labelPainter.drawImage(0, 0, avatarAreaFinalImage.scaled(snapmaticResolutionLW, snapmaticResolutionLH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + labelPainter.end(); + } +} + +void ImportDialog::on_cmdColourChange_clicked() +{ + QColor newSelectedColour = QColorDialog::getColor(selectedColour, this, tr("Select Colour...")); + if (newSelectedColour.isValid()) + { + selectedColour = newSelectedColour; + ui->labColour->setText(tr("Background Colour: %1").arg(selectedColour.name())); + processImage(); + } +} diff --git a/ImportDialog.h b/ImportDialog.h index 1da27fd..7953490 100644 --- a/ImportDialog.h +++ b/ImportDialog.h @@ -1,60 +1,62 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef IMPORTDIALOG_H -#define IMPORTDIALOG_H - -#include - -namespace Ui { -class ImportDialog; -} - -class ImportDialog : public QDialog -{ - Q_OBJECT - -public: - explicit ImportDialog(QWidget *parent = 0); - ~ImportDialog(); - QImage image(); - QString getImageTitle(); - void setImage(const QImage &image); - bool isDoImport(); - -private slots: - void processImage(); - void on_rbIgnore_clicked(); - void on_rbKeep_clicked(); - void on_cbAvatar_clicked(); - void on_cmdCancel_clicked(); - void on_cmdOK_clicked(); - void on_labPicture_labelPainted(); - -private: - Ui::ImportDialog *ui; - QImage avatarAreaImage; - QString imageTitle; - QImage workImage; - QImage newImage; - bool doImport; - int snapmaticResolutionLW; - int snapmaticResolutionLH; -}; - -#endif // IMPORTDIALOG_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef IMPORTDIALOG_H +#define IMPORTDIALOG_H + +#include + +namespace Ui { +class ImportDialog; +} + +class ImportDialog : public QDialog +{ + Q_OBJECT + +public: + explicit ImportDialog(QWidget *parent = 0); + ~ImportDialog(); + QImage image(); + QString getImageTitle(); + void setImage(const QImage &image); + bool isImportAgreed(); + +private slots: + void processImage(); + void on_cbIgnore_toggled(bool checked); + void on_cbAvatar_toggled(bool checked); + void on_cmdCancel_clicked(); + void on_cmdOK_clicked(); + void on_labPicture_labelPainted(); + void on_cmdColourChange_clicked(); + +private: + Ui::ImportDialog *ui; + QImage avatarAreaImage; + QString imageTitle; + QImage workImage; + QImage newImage; + QColor selectedColour; + bool insideAvatarZone; + bool importAgreed; + int snapmaticResolutionLW; + int snapmaticResolutionLH; +}; + +#endif // IMPORTDIALOG_H diff --git a/ImportDialog.ui b/ImportDialog.ui index dc42083..3f95cad 100644 --- a/ImportDialog.ui +++ b/ImportDialog.ui @@ -1,187 +1,239 @@ - - - ImportDialog - - - - 0 - 0 - 430 - 380 - - - - - 430 - 380 - - - - - 430 - 380 - - - - Import... - - - true - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 430 - 240 - - - - - - - - - - - - 0 - 0 - - - - QFrame::NoFrame - - - QFrame::Plain - - - 0 - - - - 9 - - - 6 - - - 9 - - - 9 - - - - - Settings - - - - - - &Keep Aspect Ratio - - - - - - - &Ignore Aspect Ratio - - - - - - - &Avatar - - - - - - - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - &OK - - - - - - - - 0 - 0 - - - - &Cancel - - - - - - - - - - - - - UiModLabel - QLabel -
UiModLabel.h
-
-
- - -
+ + + ImportDialog + + + + 0 + 0 + 430 + 380 + + + + + 430 + 380 + + + + + 430 + 380 + + + + Import... + + + true + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 430 + 240 + + + + + + + + + + + + 0 + 0 + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 9 + + + 6 + + + 9 + + + 9 + + + + + Settings + + + + + + + + Background Colour: <span style="color: %1">%1</span> + + + + + + + ... + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + + + + + 0 + 0 + + + + Avatar + + + + + + + + 0 + 0 + + + + Ignore Aspect Ratio + + + + + + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + Import picture + + + &OK + + + + + + + + 0 + 0 + + + + Discard picture + + + &Cancel + + + + + + + + + + + + + UiModLabel + QLabel +
uimod/UiModLabel.h
+ + mouseMoved() + mouseReleased() + mousePressed() + mouseDoubleClicked() + +
+
+ + +
diff --git a/MapPreviewDialog.cpp b/MapPreviewDialog.cpp new file mode 100644 index 0000000..1efd416 --- /dev/null +++ b/MapPreviewDialog.cpp @@ -0,0 +1,76 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "MapPreviewDialog.h" +#include "ui_MapPreviewDialog.h" +#include "IconLoader.h" +#include "AppEnv.h" +#include +#include +#ifdef __MINGW32__ +#include +#endif + +MapPreviewDialog::MapPreviewDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::MapPreviewDialog) +{ + // Set Window Flags + setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); + + ui->setupUi(this); + + // DPI calculation + qreal screenRatio = AppEnv::screenRatio(); + setMinimumSize(500 * screenRatio, 600 * screenRatio); + setMaximumSize(500 * screenRatio, 600 * screenRatio); + setFixedSize(500 * screenRatio, 600 * screenRatio); +} + +MapPreviewDialog::~MapPreviewDialog() +{ + delete ui; +} + +void MapPreviewDialog::drawPointOnMap(double xpos_d, double ypos_d) +{ + qreal screenRatio = AppEnv::screenRatio(); + int pointMakerSize = 8 * screenRatio; + QPixmap pointMakerPixmap = IconLoader::loadingPointmakerIcon().pixmap(QSize(pointMakerSize, pointMakerSize)); + QSize mapPixelSize = size(); + + int pointMakerHalfSize = pointMakerSize / 2; + long xpos_ms = std::round(xpos_d); + long ypos_ms = std::round(ypos_d); + double xpos_ma = xpos_ms + 4000; + double ypos_ma = ypos_ms + 4000; + double xrat = (double)mapPixelSize.width() / 10000; + double yrat = (double)mapPixelSize.height() / 12000; + long xpos_mp = std::round(xpos_ma * xrat); + long ypos_mp = std::round(ypos_ma * yrat); + long xpos_pr = xpos_mp - pointMakerHalfSize; + long ypos_pr = ypos_mp + pointMakerHalfSize; + + QPixmap mapPixmap(mapPixelSize); + QPainter mapPainter(&mapPixmap); + mapPainter.drawPixmap(0, 0, mapPixelSize.width(), mapPixelSize.height(), QPixmap(":/img/mappreview.jpg").scaled(mapPixelSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + mapPainter.drawPixmap(xpos_pr, mapPixelSize.height() - ypos_pr, pointMakerSize, pointMakerSize, pointMakerPixmap); + mapPainter.end(); + + ui->labPicture->setPixmap(mapPixmap); +} diff --git a/MapPreviewDialog.h b/MapPreviewDialog.h new file mode 100644 index 0000000..e69666b --- /dev/null +++ b/MapPreviewDialog.h @@ -0,0 +1,41 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef MAPPREVIEWDIALOG_H +#define MAPPREVIEWDIALOG_H + +#include + +namespace Ui { +class MapPreviewDialog; +} + +class MapPreviewDialog : public QDialog +{ + Q_OBJECT + +public: + explicit MapPreviewDialog(QWidget *parent = 0); + void drawPointOnMap(double x, double y); + ~MapPreviewDialog(); + +private: + Ui::MapPreviewDialog *ui; +}; + +#endif // MAPPREVIEWDIALOG_H diff --git a/MapPreviewDialog.ui b/MapPreviewDialog.ui new file mode 100644 index 0000000..35fed61 --- /dev/null +++ b/MapPreviewDialog.ui @@ -0,0 +1,71 @@ + + + MapPreviewDialog + + + + 0 + 0 + 500 + 600 + + + + + 500 + 600 + + + + + 500 + 600 + + + + Snapmatic Map Viewer + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + true + + + + + + + + UiModLabel + QLabel +
uimod/UiModLabel.h
+ + mouseMoved() + mouseReleased() + mousePressed() + mouseDoubleClicked() + +
+
+ + +
diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp index f42c3c3..76f1105 100755 --- a/OptionsDialog.cpp +++ b/OptionsDialog.cpp @@ -1,457 +1,439 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "OptionsDialog.h" -#include "ui_OptionsDialog.h" -#include "StandardPaths.h" -#include "UserInterface.h" -#include "AppEnv.h" -#include "config.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : - QDialog(parent), profileDB(profileDB), - ui(new Ui::OptionsDialog) -{ - // Set Window Flags - setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); - - // Setup User Interface - ui->setupUi(this); - ui->tabWidget->setCurrentIndex(0); - ui->labPicCustomRes->setVisible(false); - - QRect desktopResolution = QApplication::desktop()->screenGeometry(parent); - int desktopSizeWidth = desktopResolution.width(); - int desktopSizeHeight = desktopResolution.height(); - aspectRatio = Qt::KeepAspectRatio; - defExportSize = QSize(960, 536); - cusExportSize = defExportSize; - defaultQuality = 100; - customQuality = 100; - contentMode = 0; - settings = new QSettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); - - percentString = ui->labPicQuality->text(); - ui->labPicQuality->setText(percentString.arg(QString::number(defaultQuality))); - ui->rbPicDesktopRes->setText(ui->rbPicDesktopRes->text().arg(QString::number(desktopSizeWidth), QString::number(desktopSizeHeight))); - ui->rbPicDefaultRes->setText(ui->rbPicDefaultRes->text().arg(QString::number(defExportSize.width()), QString::number(defExportSize.height()))); - - if (QIcon::hasThemeIcon("dialog-ok")) - { - ui->cmdOK->setIcon(QIcon::fromTheme("dialog-ok")); - } - if (QIcon::hasThemeIcon("dialog-cancel")) - { - ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel")); - } - - // DPI calculation - qreal screenRatio = AppEnv::screenRatio(); - resize(435 * screenRatio, 405 * screenRatio); - - setupTreeWidget(); - setupLanguageBox(); - setupRadioButtons(); - setupDefaultProfile(); - setupPictureSettings(); - setupCustomGTAFolder(); - setupSnapmaticPictureViewer(); - -#ifdef GTA5SYNC_DISABLED - ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabSync)); -#endif - - this->setWindowTitle(windowTitle().arg(GTA5SYNC_APPSTR)); -} - -OptionsDialog::~OptionsDialog() -{ - delete settings; - foreach(QTreeWidgetItem *playerItem, playerItems) - { - delete playerItem; - } - delete ui; -} - -void OptionsDialog::setupTreeWidget() -{ - foreach(const QString &playerIDStr, profileDB->getPlayers()) - { - bool ok; - int playerID = playerIDStr.toInt(&ok); - if (ok) - { - QString playerName = profileDB->getPlayerName(playerID); - - QStringList playerTreeViewList; - playerTreeViewList << playerIDStr; - playerTreeViewList << playerName; - - QTreeWidgetItem *playerItem = new QTreeWidgetItem(playerTreeViewList); - ui->twPlayers->addTopLevelItem(playerItem); - playerItems.append(playerItem); - } - } - ui->twPlayers->sortItems(1, Qt::AscendingOrder); -} - -void OptionsDialog::setupLanguageBox() -{ - settings->beginGroup("Interface"); - currentLanguage = settings->value("Language","System").toString(); - settings->endGroup(); - - QStringList langList = QLocale::system().name().split("_"); - if (langList.length() > 0) - { - QString cbSysStr = tr("%1 (%2 if available)", "System like PC System = %1, System Language like Deutsch = %2").arg(tr("System", - "System like PC System"), QLocale::languageToString(QLocale(langList.at(0)).language())); - ui->cbLanguage->addItem(cbSysStr, "System"); - } - - QString cbEngStr = "English (English) [en]"; - ui->cbLanguage->addItem(QIcon::fromTheme("flag-us"), cbEngStr, "en"); - if (currentLanguage == "en") - { -#if QT_VERSION >= 0x050000 - ui->cbLanguage->setCurrentText(cbEngStr); -#else - int indexOfEnglish = ui->cbLanguage->findText(cbEngStr); - ui->cbLanguage->setCurrentIndex(indexOfEnglish); -#endif - } - - QDir langDir; - langDir.setNameFilters(QStringList("gta5sync_*.qm")); - langDir.setPath(AppEnv::getLangFolder()); - QStringList langFiles; - langFiles << langDir.entryList(QDir::Files | QDir::NoDotAndDotDot, QDir::NoSort); - langDir.setPath(":/tr"); - langFiles << langDir.entryList(QDir::Files | QDir::NoDotAndDotDot, QDir::NoSort); - langFiles.removeDuplicates(); - - foreach(const QString &langFile, langFiles) - { - QString lang = langFile; - lang.remove("gta5sync_"); - lang.remove(".qm"); - - QLocale langLocale(lang); - QString languageNameInternational = QLocale::languageToString(langLocale.language()); - QString languageNameNative = langLocale.nativeLanguageName(); - - QString cbLangStr = languageNameNative + " (" + languageNameInternational + ") [" + lang + "]"; - QString langIconStr = "flag-" + lang; - - ui->cbLanguage->addItem(QIcon::fromTheme(langIconStr), cbLangStr, lang); - if (currentLanguage == lang) - { -#if QT_VERSION >= 0x050000 - ui->cbLanguage->setCurrentText(cbLangStr); -#else - int indexOfLang = ui->cbLanguage->findText(cbLangStr); - ui->cbLanguage->setCurrentIndex(indexOfLang); -#endif - } - } -} - -void OptionsDialog::setupRadioButtons() -{ - bool contentModeOk; - settings->beginGroup("Profile"); - contentMode = settings->value("ContentMode", 0).toInt(&contentModeOk); - settings->endGroup(); - - if (contentModeOk) - { - if (contentMode == 0) - { - ui->rbOpenWithSC->setChecked(true); - } - else if (contentMode == 1) - { - ui->rbOpenWithDC->setChecked(true); - } - else if (contentMode == 2) - { - ui->rbSelectWithSC->setChecked(true); - } - } -} - -void OptionsDialog::on_cmdOK_clicked() -{ - applySettings(); - close(); -} - -void OptionsDialog::applySettings() -{ - settings->beginGroup("Interface"); -#if QT_VERSION >= 0x050000 - settings->setValue("Language", ui->cbLanguage->currentData()); -#else - settings->setValue("Language", ui->cbLanguage->itemData(ui->cbLanguage->currentIndex())); -#endif -#ifdef GTA5SYNC_WIN -#if QT_VERSION >= 0x050200 - settings->setValue("NavigationBar", ui->cbSnapmaticNavigationBar->isChecked()); -#endif -#endif - settings->endGroup(); - - settings->beginGroup("Profile"); - int newContentMode = 0; - if (ui->rbOpenWithSC->isChecked()) - { - newContentMode = 0; - } - else if (ui->rbOpenWithDC->isChecked()) - { - newContentMode = 1; - } - else if (ui->rbSelectWithSC->isChecked()) - { - newContentMode = 2; - } - settings->setValue("ContentMode", newContentMode); -#if QT_VERSION >= 0x050000 - settings->setValue("Default", ui->cbProfiles->currentData()); -#else - settings->setValue("Default", ui->cbProfiles->itemData(ui->cbProfiles->currentIndex())); -#endif - settings->endGroup(); - - settings->beginGroup("Pictures"); - if (ui->cbPicCustomQuality->isChecked()) - { - settings->setValue("CustomQuality", ui->hsPicQuality->value()); - } - settings->setValue("CustomQualityEnabled", ui->cbPicCustomQuality->isChecked()); - QString sizeMode = "Default"; - if (ui->rbPicDesktopRes->isChecked()) - { - sizeMode = "Desktop"; - } - else if (ui->rbPicCustomRes->isChecked()) - { - sizeMode = "Custom"; - settings->setValue("CustomSize", QSize(ui->sbPicExportWidth->value(), ui->sbPicExportHeight->value())); - } - settings->setValue("ExportSizeMode", sizeMode); - settings->setValue("AspectRatio", aspectRatio); - settings->endGroup(); - - bool forceCustomFolder = ui->cbForceCustomFolder->isChecked(); - settings->beginGroup("dir"); - settings->setValue("dir", ui->txtFolder->text()); - settings->setValue("force", forceCustomFolder); - settings->endGroup(); - -#if QT_VERSION >= 0x050000 - emit settingsApplied(newContentMode, ui->cbLanguage->currentData().toString()); -#else - emit settingsApplied(newContentMode, ui->cbLanguage->itemData(ui->cbLanguage->currentIndex()).toString()); -#endif - -#if QT_VERSION >= 0x050000 - bool languageChanged = ui->cbLanguage->currentData().toString() != currentLanguage; -#else - bool languageChanged = ui->cbLanguage->itemData(ui->cbLanguage->currentIndex()).toString() != currentLanguage; -#endif - - if ((forceCustomFolder && ui->txtFolder->text() != currentCFolder) || (forceCustomFolder != currentFFolder && forceCustomFolder)) - { - QMessageBox::information(this, tr("%1", "%1").arg(GTA5SYNC_APPSTR), tr("The new Custom Folder will initialize after you restart %1.").arg(GTA5SYNC_APPSTR)); - } - if (languageChanged) - { - QMessageBox::information(this, tr("%1", "%1").arg(GTA5SYNC_APPSTR), tr("The language change will take effect after you restart %1.").arg(GTA5SYNC_APPSTR)); - } -} - -void OptionsDialog::setupDefaultProfile() -{ - settings->beginGroup("Profile"); - defaultProfile = settings->value("Default", "").toString(); - settings->endGroup(); - - QString cbNoneStr = tr("No Profile", "No Profile, as default"); - ui->cbProfiles->addItem(cbNoneStr, ""); -} - -void OptionsDialog::commitProfiles(QStringList profiles) -{ - foreach(const QString &profile, profiles) - { - ui->cbProfiles->addItem(tr("Profile: %1").arg(profile), profile); - if (defaultProfile == profile) - { -#if QT_VERSION >= 0x050000 - ui->cbProfiles->setCurrentText(tr("Profile: %1").arg(profile)); -#else - int indexOfProfile = ui->cbProfiles->findText(tr("Profile: %1").arg(profile)); - ui->cbProfiles->setCurrentIndex(indexOfProfile); -#endif - } - } -} - -void OptionsDialog::on_rbPicCustomRes_toggled(bool checked) -{ - ui->labPicCustomRes->setEnabled(checked); - ui->sbPicExportWidth->setEnabled(checked); - ui->sbPicExportHeight->setEnabled(checked); - ui->labPicXDescription->setEnabled(checked); -} - -void OptionsDialog::on_cbPicCustomQuality_toggled(bool checked) -{ - ui->hsPicQuality->setEnabled(checked); - ui->labPicQuality->setEnabled(checked); - ui->labPicQualityDescription->setEnabled(checked); -} - -void OptionsDialog::on_hsPicQuality_valueChanged(int value) -{ - customQuality = value; - ui->labPicQuality->setText(percentString.arg(QString::number(value))); -} - -void OptionsDialog::setupPictureSettings() -{ - settings->beginGroup("Pictures"); - - // Quality Settings - customQuality = settings->value("CustomQuality", defaultQuality).toInt(); - if (customQuality < 1 || customQuality > 100) - { - customQuality = 100; - } - ui->hsPicQuality->setValue(customQuality); - ui->cbPicCustomQuality->setChecked(settings->value("CustomQualityEnabled", false).toBool()); - - // Size Settings - cusExportSize = settings->value("CustomSize", defExportSize).toSize(); - if (cusExportSize.width() > 3840) - { - cusExportSize.setWidth(3840); - } - else if (cusExportSize.height() > 2160) - { - cusExportSize.setHeight(2160); - } - if (cusExportSize.width() < 1) - { - cusExportSize.setWidth(1); - } - else if (cusExportSize.height() < 1) - { - cusExportSize.setHeight(1); - } - ui->sbPicExportWidth->setValue(cusExportSize.width()); - ui->sbPicExportHeight->setValue(cusExportSize.height()); - - QString sizeMode = settings->value("ExportSizeMode", "Default").toString(); - if (sizeMode == "Desktop") - { - ui->rbPicDesktopRes->setChecked(true); - } - else if (sizeMode == "Custom") - { - ui->rbPicCustomRes->setChecked(true); - } - else - { - ui->rbPicDefaultRes->setChecked(true); - } - - aspectRatio = (Qt::AspectRatioMode)settings->value("AspectRatio", Qt::KeepAspectRatio).toInt(); - if (aspectRatio == Qt::IgnoreAspectRatio) - { - ui->cbIgnoreAspectRatio->setChecked(true); - } - - settings->endGroup(); -} - -void OptionsDialog::on_cbIgnoreAspectRatio_toggled(bool checked) -{ - if (checked) - { - aspectRatio = Qt::IgnoreAspectRatio; - } - else - { - aspectRatio = Qt::KeepAspectRatio; - } -} - -void OptionsDialog::setupCustomGTAFolder() -{ - bool ok; - QString defaultGameFolder = AppEnv::getGameFolder(&ok); - settings->beginGroup("dir"); - currentCFolder = settings->value("dir", "").toString(); - currentFFolder = settings->value("force", false).toBool(); - if (currentCFolder == "" && ok) - { - currentCFolder = defaultGameFolder; - } - ui->txtFolder->setText(currentCFolder); - ui->cbForceCustomFolder->setChecked(currentFFolder); - settings->endGroup(); -} - -void OptionsDialog::setupSnapmaticPictureViewer() -{ -#ifdef GTA5SYNC_WIN -#if QT_VERSION >= 0x050200 - settings->beginGroup("Interface"); - ui->cbSnapmaticNavigationBar->setChecked(settings->value("NavigationBar", false).toBool()); - settings->endGroup(); -#else - ui->cbSnapmaticNavigationBar->setVisible(false); - ui->gbSnapmaticPictureViewer->setVisible(false); -#endif -#else - ui->cbSnapmaticNavigationBar->setVisible(false); - ui->gbSnapmaticPictureViewer->setVisible(false); -#endif -} - -void OptionsDialog::on_cmdExploreFolder_clicked() -{ - QString GTAV_Folder = QFileDialog::getExistingDirectory(this, UserInterface::tr("Select GTA V Folder..."), StandardPaths::documentsLocation(), QFileDialog::ShowDirsOnly); - if (QFileInfo(GTAV_Folder).exists()) - { - ui->txtFolder->setText(GTAV_Folder); - } -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "OptionsDialog.h" +#include "ui_OptionsDialog.h" +#include "TranslationClass.h" +#include "StandardPaths.h" +#include "UserInterface.h" +#include "AppEnv.h" +#include "config.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : + QDialog(parent), profileDB(profileDB), + ui(new Ui::OptionsDialog) +{ + // Set Window Flags + setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); + + // Setup User Interface + ui->setupUi(this); + ui->tabWidget->setCurrentIndex(0); + ui->labPicCustomRes->setVisible(false); + + QRect desktopResolution = qApp->desktop()->screenGeometry(parent); + int desktopSizeWidth = desktopResolution.width(); + int desktopSizeHeight = desktopResolution.height(); + aspectRatio = Qt::KeepAspectRatio; + defExportSize = QSize(960, 536); + cusExportSize = defExportSize; + defaultQuality = 100; + customQuality = 100; + contentMode = 0; + settings = new QSettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + + percentString = ui->labPicQuality->text(); + ui->labPicQuality->setText(percentString.arg(QString::number(defaultQuality))); + ui->rbPicDesktopRes->setText(ui->rbPicDesktopRes->text().arg(QString::number(desktopSizeWidth), QString::number(desktopSizeHeight))); + ui->rbPicDefaultRes->setText(ui->rbPicDefaultRes->text().arg(QString::number(defExportSize.width()), QString::number(defExportSize.height()))); + + if (QIcon::hasThemeIcon("dialog-ok")) + { + ui->cmdOK->setIcon(QIcon::fromTheme("dialog-ok")); + } + if (QIcon::hasThemeIcon("dialog-cancel")) + { + ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel")); + } + + // DPI calculation + qreal screenRatio = AppEnv::screenRatio(); + resize(435 * screenRatio, 405 * screenRatio); + + setupTreeWidget(); + setupLanguageBox(); + setupRadioButtons(); + setupDefaultProfile(); + setupPictureSettings(); + setupCustomGTAFolder(); + setupSnapmaticPictureViewer(); + +#ifdef GTA5SYNC_DISABLED + ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabSync)); +#endif + + this->setWindowTitle(windowTitle().arg(GTA5SYNC_APPSTR)); +} + +OptionsDialog::~OptionsDialog() +{ + delete settings; + foreach(QTreeWidgetItem *playerItem, playerItems) + { + delete playerItem; + } + delete ui; +} + +void OptionsDialog::setupTreeWidget() +{ + foreach(const QString &playerIDStr, profileDB->getPlayers()) + { + bool ok; + int playerID = playerIDStr.toInt(&ok); + if (ok) + { + QString playerName = profileDB->getPlayerName(playerID); + + QStringList playerTreeViewList; + playerTreeViewList << playerIDStr; + playerTreeViewList << playerName; + + QTreeWidgetItem *playerItem = new QTreeWidgetItem(playerTreeViewList); + ui->twPlayers->addTopLevelItem(playerItem); + playerItems += playerItem; + } + } + ui->twPlayers->sortItems(1, Qt::AscendingOrder); +} + +void OptionsDialog::setupLanguageBox() +{ + settings->beginGroup("Interface"); + currentLanguage = settings->value("Language","System").toString(); + settings->endGroup(); + + QString cbSysStr = tr("%1 (Next Closest Language)", "First language a person can talk with a different person/application. \"Native\" or \"Not Native\".").arg(tr("System", + "System in context of System default")); + ui->cbLanguage->addItem(cbSysStr, "System"); + + QStringList availableLanguages; + availableLanguages << QString("en_GB"); +#ifndef GTA5SYNC_QCONF + availableLanguages << TCInstance->listTranslations(AppEnv::getExLangFolder()); +#endif + availableLanguages << TCInstance->listTranslations(AppEnv::getInLangFolder()); + availableLanguages.removeDuplicates(); + availableLanguages.sort(); + + foreach(const QString &lang, availableLanguages) + { + QLocale langLocale(lang); + QString cbLangStr = langLocale.nativeLanguageName() % " (" % langLocale.nativeCountryName() % ") [" % lang % "]"; + + QString langIconStr = "flag-" % TranslationClass::getCountryCode(langLocale); + + ui->cbLanguage->addItem(QIcon::fromTheme(langIconStr), cbLangStr, lang); + if (currentLanguage == lang) + { +#if QT_VERSION >= 0x050000 + ui->cbLanguage->setCurrentText(cbLangStr); +#else + int indexOfLang = ui->cbLanguage->findText(cbLangStr); + ui->cbLanguage->setCurrentIndex(indexOfLang); +#endif + } + } +} + +void OptionsDialog::setupRadioButtons() +{ + bool contentModeOk; + settings->beginGroup("Profile"); + contentMode = settings->value("ContentMode", 0).toInt(&contentModeOk); + settings->endGroup(); + + if (contentModeOk) + { + if (contentMode == 0) + { + ui->rbOpenWithSC->setChecked(true); + } + else if (contentMode == 1) + { + ui->rbOpenWithDC->setChecked(true); + } + else if (contentMode == 2) + { + ui->rbSelectWithSC->setChecked(true); + } + } +} + +void OptionsDialog::on_cmdOK_clicked() +{ + applySettings(); + close(); +} + +void OptionsDialog::applySettings() +{ + settings->beginGroup("Interface"); +#if QT_VERSION >= 0x050000 + settings->setValue("Language", ui->cbLanguage->currentData()); +#else + settings->setValue("Language", ui->cbLanguage->itemData(ui->cbLanguage->currentIndex())); +#endif +#ifdef GTA5SYNC_WIN +#if QT_VERSION >= 0x050200 + settings->setValue("NavigationBar", ui->cbSnapmaticNavigationBar->isChecked()); +#endif +#endif + settings->endGroup(); + + settings->beginGroup("Profile"); + int newContentMode = 0; + if (ui->rbOpenWithSC->isChecked()) + { + newContentMode = 0; + } + else if (ui->rbOpenWithDC->isChecked()) + { + newContentMode = 1; + } + else if (ui->rbSelectWithSC->isChecked()) + { + newContentMode = 2; + } + settings->setValue("ContentMode", newContentMode); +#if QT_VERSION >= 0x050000 + settings->setValue("Default", ui->cbProfiles->currentData()); +#else + settings->setValue("Default", ui->cbProfiles->itemData(ui->cbProfiles->currentIndex())); +#endif + settings->endGroup(); + + settings->beginGroup("Pictures"); + if (ui->cbPicCustomQuality->isChecked()) + { + settings->setValue("CustomQuality", ui->hsPicQuality->value()); + } + settings->setValue("CustomQualityEnabled", ui->cbPicCustomQuality->isChecked()); + QString sizeMode = "Default"; + if (ui->rbPicDesktopRes->isChecked()) + { + sizeMode = "Desktop"; + } + else if (ui->rbPicCustomRes->isChecked()) + { + sizeMode = "Custom"; + settings->setValue("CustomSize", QSize(ui->sbPicExportWidth->value(), ui->sbPicExportHeight->value())); + } + settings->setValue("ExportSizeMode", sizeMode); + settings->setValue("AspectRatio", aspectRatio); + settings->endGroup(); + + bool forceCustomFolder = ui->cbForceCustomFolder->isChecked(); + settings->beginGroup("dir"); + settings->setValue("dir", ui->txtFolder->text()); + settings->setValue("force", forceCustomFolder); + settings->endGroup(); + +#if QT_VERSION >= 0x050000 + bool languageChanged = ui->cbLanguage->currentData().toString() != currentLanguage; +#else + bool languageChanged = ui->cbLanguage->itemData(ui->cbLanguage->currentIndex()).toString() != currentLanguage; +#endif + if (languageChanged) + { + TCInstance->unloadTranslation(qApp); + TCInstance->initUserLanguage(); + TCInstance->loadTranslation(qApp); + } + +#if QT_VERSION >= 0x050000 + emit settingsApplied(newContentMode, ui->cbLanguage->currentData().toString()); +#else + emit settingsApplied(newContentMode, ui->cbLanguage->itemData(ui->cbLanguage->currentIndex()).toString()); +#endif + + if ((forceCustomFolder && ui->txtFolder->text() != currentCFolder) || (forceCustomFolder != currentFFolder && forceCustomFolder)) + { + QMessageBox::information(this, tr("%1", "%1").arg(GTA5SYNC_APPSTR), tr("The new Custom Folder will initialise after you restart %1.").arg(GTA5SYNC_APPSTR)); + } +} + +void OptionsDialog::setupDefaultProfile() +{ + settings->beginGroup("Profile"); + defaultProfile = settings->value("Default", "").toString(); + settings->endGroup(); + + QString cbNoneStr = tr("No Profile", "No Profile, as default"); + ui->cbProfiles->addItem(cbNoneStr, ""); +} + +void OptionsDialog::commitProfiles(QStringList profiles) +{ + foreach(const QString &profile, profiles) + { + ui->cbProfiles->addItem(tr("Profile: %1").arg(profile), profile); + if (defaultProfile == profile) + { +#if QT_VERSION >= 0x050000 + ui->cbProfiles->setCurrentText(tr("Profile: %1").arg(profile)); +#else + int indexOfProfile = ui->cbProfiles->findText(tr("Profile: %1").arg(profile)); + ui->cbProfiles->setCurrentIndex(indexOfProfile); +#endif + } + } +} + +void OptionsDialog::on_rbPicCustomRes_toggled(bool checked) +{ + ui->labPicCustomRes->setEnabled(checked); + ui->sbPicExportWidth->setEnabled(checked); + ui->sbPicExportHeight->setEnabled(checked); + ui->labPicXDescription->setEnabled(checked); +} + +void OptionsDialog::on_cbPicCustomQuality_toggled(bool checked) +{ + ui->hsPicQuality->setEnabled(checked); + ui->labPicQuality->setEnabled(checked); + ui->labPicQualityDescription->setEnabled(checked); +} + +void OptionsDialog::on_hsPicQuality_valueChanged(int value) +{ + customQuality = value; + ui->labPicQuality->setText(percentString.arg(QString::number(value))); +} + +void OptionsDialog::setupPictureSettings() +{ + settings->beginGroup("Pictures"); + + // Quality Settings + customQuality = settings->value("CustomQuality", defaultQuality).toInt(); + if (customQuality < 1 || customQuality > 100) + { + customQuality = 100; + } + ui->hsPicQuality->setValue(customQuality); + ui->cbPicCustomQuality->setChecked(settings->value("CustomQualityEnabled", false).toBool()); + + // Size Settings + cusExportSize = settings->value("CustomSize", defExportSize).toSize(); + if (cusExportSize.width() > 3840) + { + cusExportSize.setWidth(3840); + } + else if (cusExportSize.height() > 2160) + { + cusExportSize.setHeight(2160); + } + if (cusExportSize.width() < 1) + { + cusExportSize.setWidth(1); + } + else if (cusExportSize.height() < 1) + { + cusExportSize.setHeight(1); + } + ui->sbPicExportWidth->setValue(cusExportSize.width()); + ui->sbPicExportHeight->setValue(cusExportSize.height()); + + QString sizeMode = settings->value("ExportSizeMode", "Default").toString(); + if (sizeMode == "Desktop") + { + ui->rbPicDesktopRes->setChecked(true); + } + else if (sizeMode == "Custom") + { + ui->rbPicCustomRes->setChecked(true); + } + else + { + ui->rbPicDefaultRes->setChecked(true); + } + + aspectRatio = (Qt::AspectRatioMode)settings->value("AspectRatio", Qt::KeepAspectRatio).toInt(); + if (aspectRatio == Qt::IgnoreAspectRatio) + { + ui->cbIgnoreAspectRatio->setChecked(true); + } + + settings->endGroup(); +} + +void OptionsDialog::on_cbIgnoreAspectRatio_toggled(bool checked) +{ + if (checked) + { + aspectRatio = Qt::IgnoreAspectRatio; + } + else + { + aspectRatio = Qt::KeepAspectRatio; + } +} + +void OptionsDialog::setupCustomGTAFolder() +{ + bool ok; + QString defaultGameFolder = AppEnv::getGameFolder(&ok); + settings->beginGroup("dir"); + currentCFolder = settings->value("dir", "").toString(); + currentFFolder = settings->value("force", false).toBool(); + if (currentCFolder == "" && ok) + { + currentCFolder = defaultGameFolder; + } + ui->txtFolder->setText(currentCFolder); + ui->cbForceCustomFolder->setChecked(currentFFolder); + settings->endGroup(); +} + +void OptionsDialog::setupSnapmaticPictureViewer() +{ +#ifdef GTA5SYNC_WIN +#if QT_VERSION >= 0x050200 + settings->beginGroup("Interface"); + ui->cbSnapmaticNavigationBar->setChecked(settings->value("NavigationBar", false).toBool()); + settings->endGroup(); +#else + ui->cbSnapmaticNavigationBar->setVisible(false); + ui->gbSnapmaticPictureViewer->setVisible(false); +#endif +#else + ui->cbSnapmaticNavigationBar->setVisible(false); + ui->gbSnapmaticPictureViewer->setVisible(false); +#endif +} + +void OptionsDialog::on_cmdExploreFolder_clicked() +{ + QString GTAV_Folder = QFileDialog::getExistingDirectory(this, UserInterface::tr("Select GTA V Folder..."), StandardPaths::documentsLocation(), QFileDialog::ShowDirsOnly); + if (QFileInfo(GTAV_Folder).exists()) + { + ui->txtFolder->setText(GTAV_Folder); + } +} diff --git a/OptionsDialog.h b/OptionsDialog.h index 83aa3e3..763d1df 100755 --- a/OptionsDialog.h +++ b/OptionsDialog.h @@ -1,79 +1,79 @@ -/****************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef OPTIONSDIALOG_H -#define OPTIONSDIALOG_H - -#include -#include -#include -#include -#include -#include "ProfileDatabase.h" - -namespace Ui { -class OptionsDialog; -} - -class OptionsDialog : public QDialog -{ - Q_OBJECT - -public: - explicit OptionsDialog(ProfileDatabase *profileDB, QWidget *parent = 0); - void commitProfiles(QStringList profiles); - ~OptionsDialog(); - -private slots: - void on_cmdOK_clicked(); - void on_rbPicCustomRes_toggled(bool checked); - void on_cbPicCustomQuality_toggled(bool checked); - void on_hsPicQuality_valueChanged(int value); - void on_cbIgnoreAspectRatio_toggled(bool checked); - void on_cmdExploreFolder_clicked(); - -signals: - void settingsApplied(int contentMode, QString language); - -private: - ProfileDatabase *profileDB; - Ui::OptionsDialog *ui; - QList playerItems; - Qt::AspectRatioMode aspectRatio; - QString currentLanguage; - QString currentCFolder; - QString defaultProfile; - QString percentString; - QSettings *settings; - bool currentFFolder; - int contentMode; - int customQuality; - int defaultQuality; - QSize defExportSize; - QSize cusExportSize; - void setupTreeWidget(); - void setupLanguageBox(); - void setupRadioButtons(); - void setupDefaultProfile(); - void setupPictureSettings(); - void setupCustomGTAFolder(); - void setupSnapmaticPictureViewer(); - void applySettings(); -}; - -#endif // OPTIONSDIALOG_H +/****************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef OPTIONSDIALOG_H +#define OPTIONSDIALOG_H + +#include +#include +#include +#include +#include +#include "ProfileDatabase.h" + +namespace Ui { +class OptionsDialog; +} + +class OptionsDialog : public QDialog +{ + Q_OBJECT + +public: + explicit OptionsDialog(ProfileDatabase *profileDB, QWidget *parent = 0); + void commitProfiles(QStringList profiles); + ~OptionsDialog(); + +private slots: + void on_cmdOK_clicked(); + void on_rbPicCustomRes_toggled(bool checked); + void on_cbPicCustomQuality_toggled(bool checked); + void on_hsPicQuality_valueChanged(int value); + void on_cbIgnoreAspectRatio_toggled(bool checked); + void on_cmdExploreFolder_clicked(); + +signals: + void settingsApplied(int contentMode, QString language); + +private: + ProfileDatabase *profileDB; + Ui::OptionsDialog *ui; + QList playerItems; + Qt::AspectRatioMode aspectRatio; + QString currentLanguage; + QString currentCFolder; + QString defaultProfile; + QString percentString; + QSettings *settings; + bool currentFFolder; + int contentMode; + int customQuality; + int defaultQuality; + QSize defExportSize; + QSize cusExportSize; + void setupTreeWidget(); + void setupLanguageBox(); + void setupRadioButtons(); + void setupDefaultProfile(); + void setupPictureSettings(); + void setupCustomGTAFolder(); + void setupSnapmaticPictureViewer(); + void applySettings(); +}; + +#endif // OPTIONSDIALOG_H diff --git a/OptionsDialog.ui b/OptionsDialog.ui index 995ae79..7025371 100755 --- a/OptionsDialog.ui +++ b/OptionsDialog.ui @@ -1,503 +1,509 @@ - - - OptionsDialog - - - - 0 - 0 - 435 - 405 - - - - %1 - Settings - - - true - - - - - - 0 - - - - Profiles - - - - - - Content Open/Select Mode - - - - - - Open with Singleclick - - - true - - - - - - - Open with Doubleclick - - - - - - - Select with Singleclick - - - - - - - - - - Default Profile - - - - - - - - - - - - Custom GTA V Folder - - - - - - Force using Custom Folder - - - - - - - - - - - - ... - - - - - - - - - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - - Pictures - - - - - - Export Size - - - - - - Default: %1x%2 - - - true - - - - - - - Screen Resolution: %1x%2 - - - - - - - - - Custom Size: - - - - - - - false - - - Custom Size: - - - - - - - false - - - 1 - - - 3840 - - - 960 - - - - - - - false - - - x - - - - - - - false - - - 1 - - - 2160 - - - 536 - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - - - - - - - - Ignore Aspect Ratio - - - - - - - - - - - - Export Quality - - - - - - Enable Custom Quality - - - - - - - - - false - - - Quality: - - - - - - - false - - - 1 - - - 100 - - - 100 - - - Qt::Horizontal - - - - - - - false - - - %1% - - - true - - - - - - - - - - - - Picture Viewer - - - - - - Enable Navigation Bar - - - - - - - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - - Players - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QFrame::NoFrame - - - QFrame::Plain - - - 0 - - - QAbstractItemView::NoEditTriggers - - - QAbstractItemView::ScrollPerPixel - - - true - - - true - - - - ID - - - - - Name - - - - - - - - - Language - - - - - - Language - - - - - - - - - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - - Sync - - - - - - Sync is not implemented at current time - - - Qt::AlignCenter - - - true - - - - - - - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - &OK - - - - - - - - 0 - 0 - - - - &Cancel - - - - - - - - - - - cmdCancel - clicked() - OptionsDialog - close() - - - 352 - 328 - - - 199 - 174 - - - - - + + + OptionsDialog + + + + 0 + 0 + 435 + 405 + + + + %1 - Settings + + + true + + + + + + 0 + + + + Profiles + + + + + + Content Open/Select Mode + + + + + + Open with Singleclick + + + true + + + + + + + Open with Doubleclick + + + + + + + Select with Singleclick + + + + + + + + + + Default Profile + + + + + + + + + + + + Custom GTA V Folder + + + + + + Force using Custom Folder + + + + + + + + + + + + ... + + + + + + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + + Pictures + + + + + + Export Size + + + + + + Default: %1x%2 + + + true + + + + + + + Screen Resolution: %1x%2 + + + + + + + + + Custom Size: + + + + + + + false + + + Custom Size: + + + + + + + false + + + 1 + + + 3840 + + + 960 + + + + + + + false + + + x + + + + + + + false + + + 1 + + + 2160 + + + 536 + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + + + + Ignore Aspect Ratio + + + + + + + + + + + + Export Quality + + + + + + Enable Custom Quality + + + + + + + + + false + + + Quality: + + + + + + + false + + + 1 + + + 100 + + + 100 + + + Qt::Horizontal + + + + + + + false + + + %1% + + + true + + + + + + + + + + + + Picture Viewer + + + + + + Enable Navigation Bar + + + + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + + Players + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + QAbstractItemView::NoEditTriggers + + + QAbstractItemView::ScrollPerPixel + + + true + + + true + + + + ID + + + + + Name + + + + + + + + + Language + + + + + + Language + + + + + + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + + Sync + + + + + + Sync is not implemented at current time + + + Qt::AlignCenter + + + true + + + + + + + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + Apply changes + + + &OK + + + + + + + + 0 + 0 + + + + Discard changes + + + &Cancel + + + + + + + + + + + cmdCancel + clicked() + OptionsDialog + close() + + + 352 + 328 + + + 199 + 174 + + + + + diff --git a/PictureDialog.cpp b/PictureDialog.cpp index edba768..dd9cc28 100755 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -1,689 +1,744 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "PictureDialog.h" -#include "PictureWidget.h" -#include "ProfileDatabase.h" -#include "ui_PictureDialog.h" -#include "SidebarGenerator.h" -#include "StandardPaths.h" -#include "PictureExport.h" -#include "StringParser.h" -#include "GlobalString.h" -#include "UiModLabel.h" -#include "AppEnv.h" - -#ifdef GTA5SYNC_WIN -#if QT_VERSION >= 0x050200 -#include -#include -#endif -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -PictureDialog::PictureDialog(ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent) : - QDialog(parent), profileDB(profileDB), crewDB(crewDB), - ui(new Ui::PictureDialog) -{ - primaryWindow = false; - setupPictureDialog(true); -} - -PictureDialog::PictureDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::PictureDialog) -{ - primaryWindow = false; - setupPictureDialog(false); -} - -PictureDialog::PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent) : - QDialog(parent), primaryWindow(primaryWindow), profileDB(profileDB), crewDB(crewDB), - ui(new Ui::PictureDialog) -{ - setupPictureDialog(true); -} - -PictureDialog::PictureDialog(bool primaryWindow, QWidget *parent) : - QDialog(parent), primaryWindow(primaryWindow), - ui(new Ui::PictureDialog) -{ - setupPictureDialog(false); -} - -void PictureDialog::setupPictureDialog(bool withDatabase_) -{ - // Set Window Flags - setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); - - // Setup User Interface - ui->setupUi(this); - windowTitleStr = this->windowTitle(); - jsonDrawString = ui->labJSON->text(); - ui->cmdExport->setEnabled(0); - plyrsList = QStringList(); - fullscreenWidget = 0; - rqFullscreen = 0; - previewMode = 0; - naviEnabled = 0; - indexed = 0; - picArea = ""; - picTitl = ""; - picPath = ""; - created = ""; - crewID = ""; - locX = ""; - locY = ""; - locZ = ""; - smpic = 0; - - // With datebase - withDatabase = withDatabase_; - - // Avatar area - qreal screenRatio = AppEnv::screenRatio(); - if (screenRatio != 1) - { - avatarAreaPicture = QImage(":/img/avatararea.png").scaledToHeight(536 * screenRatio, Qt::FastTransformation); - } - else - { - avatarAreaPicture = QImage(":/img/avatararea.png"); - } - avatarLocX = 145; - avatarLocY = 66; - avatarSize = 470; - - // Overlay area - renderOverlayPicture(); - overlayEnabled = 1; - - // Export menu - exportMenu = new QMenu(this); - jpegExportAction = exportMenu->addAction(tr("Export as &JPG picture..."), this, SLOT(exportSnapmaticPicture())); - pgtaExportAction = exportMenu->addAction(tr("Export as >A Snapmatic..."), this, SLOT(copySnapmaticPicture())); - ui->cmdExport->setMenu(exportMenu); - - // Global map - globalMap = GlobalString::getGlobalMap(); - - // Event connects - connect(ui->labJSON, SIGNAL(resized(QSize)), this, SLOT(adaptNewDialogSize(QSize))); - - // Dialog buttons - if (QIcon::hasThemeIcon("dialog-close")) - { - ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); - } - - installEventFilter(this); - installEventFilter(ui->labPicture); - ui->labPicture->setFixedSize(960 * screenRatio, 536 * screenRatio); - ui->labPicture->setFocusPolicy(Qt::StrongFocus); - - // Pre-adapt window for DPI - setFixedWidth(960 * screenRatio); - setFixedHeight(536 * screenRatio); -} - -PictureDialog::~PictureDialog() -{ - delete jpegExportAction; - delete pgtaExportAction; - delete exportMenu; - delete ui; -} - -void PictureDialog::closeEvent(QCloseEvent *ev) -{ - Q_UNUSED(ev) - if (primaryWindow && withDatabase) - { - emit endDatabaseThread(); - } -} - -void PictureDialog::addPreviousNextButtons() -{ - // Windows Vista additions -#ifdef GTA5SYNC_WIN -#if QT_VERSION >= 0x050200 - QPalette palette; - QToolBar *uiToolbar = new QToolBar("Picture Toolbar", this); - layout()->setMenuBar(uiToolbar); - uiToolbar->addAction(QIcon(":/img/back.png"), "", this, SLOT(previousPictureRequestedSlot())); - uiToolbar->addAction(QIcon(":/img/next.png"), "", this, SLOT(nextPictureRequestedSlot())); - ui->jsonFrame->setStyleSheet(QString("QFrame { background: %1; }").arg(palette.window().color().name())); - naviEnabled = true; -#endif -#endif -} - -void PictureDialog::adaptNewDialogSize(QSize newLabelSize) -{ - Q_UNUSED(newLabelSize) - int newDialogHeight = ui->labPicture->pixmap()->height(); - newDialogHeight = newDialogHeight + ui->jsonFrame->height(); - if (naviEnabled) newDialogHeight = newDialogHeight + layout()->menuBar()->height(); - setMinimumSize(width(), newDialogHeight); - setMaximumSize(width(), newDialogHeight); - setFixedHeight(newDialogHeight); - ui->labPicture->updateGeometry(); - ui->jsonFrame->updateGeometry(); - updateGeometry(); -} - -void PictureDialog::stylizeDialog() -{ -#ifdef GTA5SYNC_WIN -#if QT_VERSION >= 0x050200 - if (QtWin::isCompositionEnabled()) - { - QtWin::extendFrameIntoClientArea(this, 0, this->layout()->menuBar()->height(), 0, 0); - setAttribute(Qt::WA_TranslucentBackground, true); - setAttribute(Qt::WA_NoSystemBackground, false); - setStyleSheet("PictureDialog { background: transparent; }"); - } - else - { - QtWin::resetExtendedFrame(this); - setAttribute(Qt::WA_TranslucentBackground, false); - setStyleSheet(QString("PictureDialog { background: %1; }").arg(QtWin::realColorizationColor().name())); - } -#endif -#endif -} - -bool PictureDialog::event(QEvent *event) -{ -#ifdef GTA5SYNC_WIN -#if QT_VERSION >= 0x050200 - if (naviEnabled) - { - if (event->type() == QWinEvent::CompositionChange || event->type() == QWinEvent::ColorizationChange) - { - stylizeDialog(); - } - } -#endif -#endif - return QDialog::event(event); -} - -void PictureDialog::nextPictureRequestedSlot() -{ - emit nextPictureRequested(); -} - -void PictureDialog::previousPictureRequestedSlot() -{ - emit previousPictureRequested(); -} - -bool PictureDialog::eventFilter(QObject *obj, QEvent *ev) -{ - bool returnValue = false; - if (obj == this || obj == ui->labPicture) - { - if (ev->type() == QEvent::KeyPress) - { - QKeyEvent *keyEvent = (QKeyEvent*)ev; - switch (keyEvent->key()){ - case Qt::Key_Left: - emit previousPictureRequested(); - returnValue = true; - break; - case Qt::Key_Right: - emit nextPictureRequested(); - returnValue = true; - break; - case Qt::Key_E: case Qt::Key_S: case Qt::Key_Save: - ui->cmdExport->click(); - returnValue = true; - break; - case Qt::Key_1: - if (previewMode) - { - previewMode = false; - renderPicture(); - } - else - { - previewMode = true; - renderPicture(); - } - break; - case Qt::Key_2: - if (overlayEnabled) - { - overlayEnabled = false; - if (!previewMode) renderPicture(); - } - else - { - overlayEnabled = true; - if (!previewMode) renderPicture(); - } - break; -#if QT_VERSION >= 0x050300 - case Qt::Key_Exit: - ui->cmdClose->click(); - returnValue = true; - break; -#endif - case Qt::Key_Enter: case Qt::Key_Return: - on_labPicture_mouseDoubleClicked(Qt::LeftButton); - returnValue = true; - break; - case Qt::Key_Escape: - ui->cmdClose->click(); - returnValue = true; - break; - } - } - } - return returnValue; -} - -void PictureDialog::triggerFullscreenDoubeClick() -{ - on_labPicture_mouseDoubleClicked(Qt::LeftButton); -} - -void PictureDialog::exportCustomContextMenuRequestedPrivate(const QPoint &pos, bool fullscreen) -{ - rqFullscreen = fullscreen; - exportMenu->popup(pos); -} - -void PictureDialog::exportCustomContextMenuRequested(const QPoint &pos) -{ - exportCustomContextMenuRequestedPrivate(pos, true); -} - -void PictureDialog::mousePressEvent(QMouseEvent *ev) -{ - QDialog::mousePressEvent(ev); -} - -void PictureDialog::dialogNextPictureRequested() -{ - emit nextPictureRequested(); -} - -void PictureDialog::dialogPreviousPictureRequested() -{ - emit previousPictureRequested(); -} - -void PictureDialog::renderOverlayPicture() -{ - // Generating Overlay Preview - qreal screenRatio = AppEnv::screenRatio(); - QRect preferedRect = QRect(0, 0, 200 * screenRatio, 160 * screenRatio); - QString overlayText = tr("Key 1 - Avatar Preview Mode\nKey 2 - Toggle Overlay\nArrow Keys - Navigate"); - QImage overlayImage(1, 1, QImage::Format_ARGB32_Premultiplied); - overlayImage.fill(Qt::transparent); - - QPainter overlayPainter(&overlayImage); - QFont overlayPainterFont; - overlayPainterFont.setPixelSize(12 * screenRatio); - overlayPainter.setFont(overlayPainterFont); - QRect overlaySpace = overlayPainter.boundingRect(preferedRect, Qt::AlignLeft | Qt::AlignTop | Qt::TextDontClip | Qt::TextWordWrap, overlayText); - overlayPainter.end(); - - int hOverlay = Qt::AlignTop; - if (overlaySpace.height() < 74 * screenRatio) - { - hOverlay = Qt::AlignVCenter; - preferedRect.setHeight(71 * screenRatio); - overlaySpace.setHeight(80 * screenRatio); - } - else - { - overlaySpace.setHeight(overlaySpace.height() + 6 * screenRatio); - } - - overlayImage = overlayImage.scaled(overlaySpace.size()); - overlayPainter.begin(&overlayImage); - overlayPainter.setPen(QColor::fromRgb(255, 255, 255, 255)); - overlayPainter.setFont(overlayPainterFont); - overlayPainter.drawText(preferedRect, Qt::AlignLeft | hOverlay | Qt::TextDontClip | Qt::TextWordWrap, overlayText); - overlayPainter.end(); - - if (overlaySpace.width() < 194 * screenRatio) - { - overlaySpace.setWidth(200 * screenRatio); - } - else - { - overlaySpace.setWidth(overlaySpace.width() + 6 * screenRatio); - } - - QImage overlayBorderImage(overlaySpace.width(), overlaySpace.height(), QImage::Format_ARGB6666_Premultiplied); - overlayBorderImage.fill(QColor(15, 15, 15, 162)); - - overlayTempImage = QImage(overlaySpace.width(), overlaySpace.height(), QImage::Format_ARGB6666_Premultiplied); - overlayTempImage.fill(Qt::transparent); - QPainter overlayTempPainter(&overlayTempImage); - overlayTempPainter.drawImage(0, 0, overlayBorderImage); - overlayTempPainter.drawImage(3 * screenRatio, 3 * screenRatio, overlayImage); - overlayTempPainter.end(); -} - -void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, bool _indexed, int _index) -{ - snapmaticPicture = QImage(); - indexed = _indexed; - index = _index; - picPath = picture->getPictureFilePath(); - smpic = picture; - if (!readOk) - { - QMessageBox::warning(this, tr("Snapmatic Picture Viewer"), tr("Failed at %1").arg(picture->getLastStep())); - return; - } - if (picture->isPicOk()) - { - snapmaticPicture = picture->getImage(); - renderPicture(); - ui->cmdExport->setEnabled(true); - } - if (picture->isJsonOk()) - { - locX = QString::number(picture->getSnapmaticProperties().location.x); - locY = QString::number(picture->getSnapmaticProperties().location.y); - locZ = QString::number(picture->getSnapmaticProperties().location.z); - if (withDatabase) - { - crewID = crewDB->getCrewName(picture->getSnapmaticProperties().crewID); - } - else - { - crewID = QString::number(picture->getSnapmaticProperties().crewID); - } - created = picture->getSnapmaticProperties().createdDateTime.toString(Qt::DefaultLocaleShortDate); - plyrsList = picture->getSnapmaticProperties().playersList; - picTitl = StringParser::escapeString(picture->getPictureTitle()); - picArea = picture->getSnapmaticProperties().location.area; - if (globalMap.contains(picArea)) - { - picAreaStr = globalMap[picArea]; - } - else - { - picAreaStr = picArea; - } - - QString plyrsStr; - if (plyrsList.length() >= 1) - { - foreach (const QString &player, plyrsList) - { - QString playerName; - if (withDatabase) - { - playerName = profileDB->getPlayerName(player.toInt()); - } - else - { - playerName = player; - } - plyrsStr.append(", "); - plyrsStr.append(playerName); - plyrsStr.append(""); - } - plyrsStr.remove(0,2); - } - else - { - plyrsStr = tr("No player"); - } - - if (crewID == "") { crewID = tr("No crew"); } - - this->setWindowTitle(windowTitleStr.arg(picture->getPictureStr())); - ui->labJSON->setText(jsonDrawString.arg(locX, locY, locZ, plyrsStr, crewID, picTitl, picAreaStr, created)); - } - else - { - ui->labJSON->setText(jsonDrawString.arg("0.0", "0.0", "0.0", tr("No player"), tr("No crew"), tr("Unknown Location"))); - QMessageBox::warning(this,tr("Snapmatic Picture Viewer"),tr("Failed at %1").arg(picture->getLastStep())); - } - emit newPictureCommited(snapmaticPicture); -} - -void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, int index) -{ - setSnapmaticPicture(picture, readOk, true, index); -} - -void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk) -{ - setSnapmaticPicture(picture, readOk, false, 0); -} - -void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, int index) -{ - setSnapmaticPicture(picture, true, index); -} - -void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture) -{ - setSnapmaticPicture(picture, true); -} - -void PictureDialog::renderPicture() -{ - qreal screenRatio = AppEnv::screenRatio(); - if (!previewMode) - { - if (overlayEnabled) - { - QPixmap shownImagePixmap(960 * screenRatio, 536 * screenRatio); - shownImagePixmap.fill(Qt::transparent); - QPainter shownImagePainter(&shownImagePixmap); - if (screenRatio == 1) - { - shownImagePainter.drawImage(0, 0, snapmaticPicture); - shownImagePainter.drawImage(3 * screenRatio, 3 * screenRatio, overlayTempImage); - } - else - { - shownImagePainter.drawImage(0, 0, snapmaticPicture.scaledToHeight(536 * screenRatio, Qt::SmoothTransformation)); - shownImagePainter.drawImage(3 * screenRatio, 3 * screenRatio, overlayTempImage); - } - shownImagePainter.end(); - ui->labPicture->setPixmap(shownImagePixmap); - } - else - { - if (screenRatio != 1) - { - QPixmap shownImagePixmap(960 * screenRatio, 536 * screenRatio); - shownImagePixmap.fill(Qt::transparent); - QPainter shownImagePainter(&shownImagePixmap); - shownImagePainter.drawImage(0, 0, snapmaticPicture.scaledToHeight(536 * screenRatio, Qt::SmoothTransformation)); - shownImagePainter.end(); - ui->labPicture->setPixmap(shownImagePixmap); - } - else - { - ui->labPicture->setPixmap(QPixmap::fromImage(snapmaticPicture)); - } - } - } - else - { - // Generating Avatar Preview - QPixmap avatarPixmap(960 * screenRatio, 536 * screenRatio); - QPainter snapPainter(&avatarPixmap); - QFont snapPainterFont; - snapPainterFont.setPixelSize(12 * screenRatio); - if (screenRatio == 1) - { - snapPainter.drawImage(0, 0, snapmaticPicture); - } - else - { - snapPainter.drawImage(0, 0, snapmaticPicture.scaledToHeight(536 * screenRatio, Qt::SmoothTransformation)); - } - snapPainter.drawImage(0, 0, avatarAreaPicture); - snapPainter.setPen(QColor::fromRgb(255, 255, 255, 255)); - snapPainter.setFont(snapPainterFont); - snapPainter.drawText(QRect(3 * screenRatio, 3 * screenRatio, 140 * screenRatio, 60 * screenRatio), Qt::AlignLeft | Qt::TextWordWrap, tr("Avatar Preview Mode\nPress 1 for Default View")); - snapPainter.end(); - ui->labPicture->setPixmap(avatarPixmap); - } -} - -void PictureDialog::playerNameUpdated() -{ - if (plyrsList.count() >= 1) - { - QString plyrsStr; - foreach (const QString &player, plyrsList) - { - QString playerName; - if (withDatabase) - { - playerName = profileDB->getPlayerName(player.toInt()); - } - else - { - playerName = player; - } - plyrsStr.append(", "); - plyrsStr.append(playerName); - plyrsStr.append(""); - } - plyrsStr.remove(0,2); - ui->labJSON->setText(jsonDrawString.arg(locX, locY, locZ, plyrsStr, crewID, picTitl, picAreaStr, created)); - } -} - -void PictureDialog::exportSnapmaticPicture() -{ - if (rqFullscreen && fullscreenWidget) - { - PictureExport::exportAsPicture(fullscreenWidget, smpic); - } - else - { - PictureExport::exportAsPicture(this, smpic); - } -} - -void PictureDialog::copySnapmaticPicture() -{ - if (rqFullscreen && fullscreenWidget) - { - PictureExport::exportAsSnapmatic(fullscreenWidget, smpic); - } - else - { - PictureExport::exportAsSnapmatic(this, smpic); - } -} - -void PictureDialog::on_labPicture_mouseDoubleClicked(Qt::MouseButton button) -{ - if (button == Qt::LeftButton) - { - QRect desktopRect = QApplication::desktop()->screenGeometry(this); - PictureWidget *pictureWidget = new PictureWidget(this); // Work! - pictureWidget->setObjectName("PictureWidget"); -#if QT_VERSION >= 0x050600 - pictureWidget->setWindowFlags(pictureWidget->windowFlags()^Qt::FramelessWindowHint^Qt::WindowStaysOnTopHint^Qt::MaximizeUsingFullscreenGeometryHint); -#else - pictureWidget->setWindowFlags(pictureWidget->windowFlags()^Qt::FramelessWindowHint^Qt::WindowStaysOnTopHint); -#endif - pictureWidget->setWindowTitle(this->windowTitle()); - pictureWidget->setStyleSheet("QLabel#pictureLabel{background-color: black;}"); - pictureWidget->setImage(snapmaticPicture, desktopRect); - pictureWidget->setModal(true); - - fullscreenWidget = pictureWidget; - QObject::connect(this, SIGNAL(newPictureCommited(QImage)), pictureWidget, SLOT(setImage(QImage))); - QObject::connect(pictureWidget, SIGNAL(nextPictureRequested()), this, SLOT(dialogNextPictureRequested())); - QObject::connect(pictureWidget, SIGNAL(previousPictureRequested()), this, SLOT(dialogPreviousPictureRequested())); - - pictureWidget->move(desktopRect.x(), desktopRect.y()); - pictureWidget->resize(desktopRect.width(), desktopRect.height()); - pictureWidget->showFullScreen(); - pictureWidget->setFocus(); - pictureWidget->raise(); - pictureWidget->exec(); - - fullscreenWidget = 0; // Work! - delete pictureWidget; // Work! - } -} - -void PictureDialog::on_labPicture_customContextMenuRequested(const QPoint &pos) -{ - exportCustomContextMenuRequestedPrivate(ui->labPicture->mapToGlobal(pos), false); -} - -bool PictureDialog::isIndexed() -{ - return indexed; -} - -int PictureDialog::getIndex() -{ - return index; -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "PictureDialog.h" +#include "PictureWidget.h" +#include "ProfileDatabase.h" +#include "ui_PictureDialog.h" +#include "SidebarGenerator.h" +#include "MapPreviewDialog.h" +#include "SnapmaticEditor.h" +#include "StandardPaths.h" +#include "PictureExport.h" +#include "StringParser.h" +#include "GlobalString.h" +#include "UiModLabel.h" +#include "AppEnv.h" + +#ifdef GTA5SYNC_WIN +#if QT_VERSION >= 0x050200 +#include +#include +#endif +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +PictureDialog::PictureDialog(ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent) : + QDialog(parent), profileDB(profileDB), crewDB(crewDB), + ui(new Ui::PictureDialog) +{ + primaryWindow = false; + setupPictureDialog(true); +} + +PictureDialog::PictureDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::PictureDialog) +{ + primaryWindow = false; + setupPictureDialog(false); +} + +PictureDialog::PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent) : + QDialog(parent), primaryWindow(primaryWindow), profileDB(profileDB), crewDB(crewDB), + ui(new Ui::PictureDialog) +{ + setupPictureDialog(true); +} + +PictureDialog::PictureDialog(bool primaryWindow, QWidget *parent) : + QDialog(parent), primaryWindow(primaryWindow), + ui(new Ui::PictureDialog) +{ + setupPictureDialog(false); +} + +void PictureDialog::setupPictureDialog(bool withDatabase_) +{ + // Set Window Flags + setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); + + // Setup User Interface + ui->setupUi(this); + windowTitleStr = this->windowTitle(); + jsonDrawString = ui->labJSON->text(); + ui->cmdManage->setEnabled(false); + plyrsList = QStringList(); + fullscreenWidget = nullptr; + rqFullscreen = false; + previewMode = false; + naviEnabled = false; + indexed = false; + picArea = ""; + picTitl = ""; + picPath = ""; + created = ""; + crewStr = ""; + crewID = ""; + locX = ""; + locY = ""; + locZ = ""; + smpic = nullptr; + + // With datebase + withDatabase = withDatabase_; + + // Avatar area + qreal screenRatio = AppEnv::screenRatio(); + if (screenRatio != 1) + { + avatarAreaPicture = QImage(":/img/avatararea.png").scaledToHeight(536 * screenRatio, Qt::FastTransformation); + } + else + { + avatarAreaPicture = QImage(":/img/avatararea.png"); + } + avatarLocX = 145; + avatarLocY = 66; + avatarSize = 470; + + // Overlay area + renderOverlayPicture(); + overlayEnabled = true; + + // Manage menu + manageMenu = new QMenu(this); + jpegExportAction = manageMenu->addAction(tr("Export as &Picture..."), this, SLOT(exportSnapmaticPicture())); + pgtaExportAction = manageMenu->addAction(tr("Export as &Snapmatic..."), this, SLOT(copySnapmaticPicture())); + manageMenuSep1 = manageMenu->addSeparator(); + openViewerAction = manageMenu->addAction(tr("Open &Map View..."), this, SLOT(openPreviewMap())); + openViewerAction->setShortcut(Qt::Key_M); + propEditorAction = manageMenu->addAction(tr("&Edit Properties..."), this, SLOT(editSnapmaticProperties())); + ui->cmdManage->setMenu(manageMenu); + + // Global map + globalMap = GlobalString::getGlobalMap(); + + // Event connects + connect(ui->labJSON, SIGNAL(resized(QSize)), this, SLOT(adaptNewDialogSize(QSize))); + + // Dialog buttons + if (QIcon::hasThemeIcon("dialog-close")) + { + ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); + } + + installEventFilter(this); + installEventFilter(ui->labPicture); + ui->labPicture->setFixedSize(960 * screenRatio, 536 * screenRatio); + ui->labPicture->setFocusPolicy(Qt::StrongFocus); + + // Pre-adapt window for DPI + setFixedWidth(960 * screenRatio); + setFixedHeight(536 * screenRatio); +} + +PictureDialog::~PictureDialog() +{ + delete propEditorAction; + delete openViewerAction; + delete jpegExportAction; + delete pgtaExportAction; + delete manageMenuSep1; + delete manageMenu; + delete ui; +} + +void PictureDialog::closeEvent(QCloseEvent *ev) +{ + Q_UNUSED(ev) + if (primaryWindow && withDatabase) + { + emit endDatabaseThread(); + } +} + +void PictureDialog::addPreviousNextButtons() +{ + // Windows Vista additions +#ifdef GTA5SYNC_WIN +#if QT_VERSION >= 0x050200 + QPalette palette; + QToolBar *uiToolbar = new QToolBar("Picture Toolbar", this); + layout()->setMenuBar(uiToolbar); + uiToolbar->addAction(QIcon(":/img/back.png"), "", this, SLOT(previousPictureRequestedSlot())); + uiToolbar->addAction(QIcon(":/img/next.png"), "", this, SLOT(nextPictureRequestedSlot())); + ui->jsonFrame->setStyleSheet(QString("QFrame { background: %1; }").arg(palette.window().color().name())); + naviEnabled = true; +#endif +#endif +} + +void PictureDialog::adaptNewDialogSize(QSize newLabelSize) +{ + Q_UNUSED(newLabelSize) + int newDialogHeight = ui->labPicture->pixmap()->height(); + newDialogHeight = newDialogHeight + ui->jsonFrame->height(); + if (naviEnabled) newDialogHeight = newDialogHeight + layout()->menuBar()->height(); + setMinimumSize(width(), newDialogHeight); + setMaximumSize(width(), newDialogHeight); + setFixedHeight(newDialogHeight); + ui->labPicture->updateGeometry(); + ui->jsonFrame->updateGeometry(); + updateGeometry(); +} + +void PictureDialog::stylizeDialog() +{ +#ifdef GTA5SYNC_WIN +#if QT_VERSION >= 0x050200 + if (QtWin::isCompositionEnabled()) + { + QtWin::extendFrameIntoClientArea(this, 0, this->layout()->menuBar()->height(), 0, 0); + setAttribute(Qt::WA_TranslucentBackground, true); + setAttribute(Qt::WA_NoSystemBackground, false); + setStyleSheet("PictureDialog { background: transparent; }"); + } + else + { + QtWin::resetExtendedFrame(this); + setAttribute(Qt::WA_TranslucentBackground, false); + setStyleSheet(QString("PictureDialog { background: %1; }").arg(QtWin::realColorizationColor().name())); + } +#endif +#endif +} + +bool PictureDialog::event(QEvent *event) +{ +#ifdef GTA5SYNC_WIN +#if QT_VERSION >= 0x050200 + if (naviEnabled) + { + if (event->type() == QWinEvent::CompositionChange || event->type() == QWinEvent::ColorizationChange) + { + stylizeDialog(); + } + } +#endif +#endif + return QDialog::event(event); +} + +void PictureDialog::nextPictureRequestedSlot() +{ + emit nextPictureRequested(); +} + +void PictureDialog::previousPictureRequestedSlot() +{ + emit previousPictureRequested(); +} + +bool PictureDialog::eventFilter(QObject *obj, QEvent *ev) +{ + bool returnValue = false; + if (obj == this || obj == ui->labPicture) + { + if (ev->type() == QEvent::KeyPress) + { + QKeyEvent *keyEvent = (QKeyEvent*)ev; + switch (keyEvent->key()){ + case Qt::Key_Left: + emit previousPictureRequested(); + returnValue = true; + break; + case Qt::Key_Right: + emit nextPictureRequested(); + returnValue = true; + break; + case Qt::Key_1: + if (previewMode) + { + previewMode = false; + renderPicture(); + } + else + { + previewMode = true; + renderPicture(); + } + break; + case Qt::Key_2: + if (overlayEnabled) + { + overlayEnabled = false; + if (!previewMode) renderPicture(); + } + else + { + overlayEnabled = true; + if (!previewMode) renderPicture(); + } + break; + case Qt::Key_M: + openPreviewMap(); + returnValue = true; + break; +#if QT_VERSION >= 0x050300 + case Qt::Key_Exit: + ui->cmdClose->click(); + returnValue = true; + break; +#endif + case Qt::Key_Enter: case Qt::Key_Return: + on_labPicture_mouseDoubleClicked(Qt::LeftButton); + returnValue = true; + break; + case Qt::Key_Escape: + ui->cmdClose->click(); + returnValue = true; + break; + } + } + } + return returnValue; +} + +void PictureDialog::triggerFullscreenDoubeClick() +{ + on_labPicture_mouseDoubleClicked(Qt::LeftButton); +} + +void PictureDialog::exportCustomContextMenuRequestedPrivate(const QPoint &pos, bool fullscreen) +{ + rqFullscreen = fullscreen; + manageMenu->popup(pos); +} + +void PictureDialog::exportCustomContextMenuRequested(const QPoint &pos) +{ + exportCustomContextMenuRequestedPrivate(pos, true); +} + +void PictureDialog::mousePressEvent(QMouseEvent *ev) +{ + QDialog::mousePressEvent(ev); +} + +void PictureDialog::dialogNextPictureRequested() +{ + emit nextPictureRequested(); +} + +void PictureDialog::dialogPreviousPictureRequested() +{ + emit previousPictureRequested(); +} + +void PictureDialog::renderOverlayPicture() +{ + // Generating Overlay Preview + qreal screenRatio = AppEnv::screenRatio(); + QRect preferedRect = QRect(0, 0, 200 * screenRatio, 160 * screenRatio); + QString overlayText = tr("Key 1 - Avatar Preview Mode\nKey 2 - Toggle Overlay\nArrow Keys - Navigate"); + QImage overlayImage(1, 1, QImage::Format_ARGB32_Premultiplied); + overlayImage.fill(Qt::transparent); + + QPainter overlayPainter(&overlayImage); + QFont overlayPainterFont; + overlayPainterFont.setPixelSize(12 * screenRatio); + overlayPainter.setFont(overlayPainterFont); + QRect overlaySpace = overlayPainter.boundingRect(preferedRect, Qt::AlignLeft | Qt::AlignTop | Qt::TextDontClip | Qt::TextWordWrap, overlayText); + overlayPainter.end(); + + int hOverlay = Qt::AlignTop; + if (overlaySpace.height() < 74 * screenRatio) + { + hOverlay = Qt::AlignVCenter; + preferedRect.setHeight(71 * screenRatio); + overlaySpace.setHeight(80 * screenRatio); + } + else + { + overlaySpace.setHeight(overlaySpace.height() + 6 * screenRatio); + } + + overlayImage = overlayImage.scaled(overlaySpace.size()); + overlayPainter.begin(&overlayImage); + overlayPainter.setPen(QColor::fromRgb(255, 255, 255, 255)); + overlayPainter.setFont(overlayPainterFont); + overlayPainter.drawText(preferedRect, Qt::AlignLeft | hOverlay | Qt::TextDontClip | Qt::TextWordWrap, overlayText); + overlayPainter.end(); + + if (overlaySpace.width() < 194 * screenRatio) + { + overlaySpace.setWidth(200 * screenRatio); + } + else + { + overlaySpace.setWidth(overlaySpace.width() + 6 * screenRatio); + } + + QImage overlayBorderImage(overlaySpace.width(), overlaySpace.height(), QImage::Format_ARGB6666_Premultiplied); + overlayBorderImage.fill(QColor(15, 15, 15, 162)); + + overlayTempImage = QImage(overlaySpace.width(), overlaySpace.height(), QImage::Format_ARGB6666_Premultiplied); + overlayTempImage.fill(Qt::transparent); + QPainter overlayTempPainter(&overlayTempImage); + overlayTempPainter.drawImage(0, 0, overlayBorderImage); + overlayTempPainter.drawImage(3 * screenRatio, 3 * screenRatio, overlayImage); + overlayTempPainter.end(); +} + +void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, bool _indexed, int _index) +{ + if (smpic != nullptr) smpic->disconnect(this, SLOT(updated())); + snapmaticPicture = QImage(); + indexed = _indexed; + index = _index; + picPath = picture->getPictureFilePath(); + smpic = picture; + if (!readOk) + { + QMessageBox::warning(this, tr("Snapmatic Picture Viewer"), tr("Failed at %1").arg(picture->getLastStep())); + return; + } + if (picture->isPicOk()) + { + snapmaticPicture = picture->getImage(); + renderPicture(); + ui->cmdManage->setEnabled(true); + } + if (picture->isJsonOk()) + { + locX = QString::number(picture->getSnapmaticProperties().location.x); + locY = QString::number(picture->getSnapmaticProperties().location.y); + locZ = QString::number(picture->getSnapmaticProperties().location.z); + if (withDatabase) + { + crewID = QString::number(picture->getSnapmaticProperties().crewID); + crewStr = crewDB->getCrewName(picture->getSnapmaticProperties().crewID); + } + else + { + crewID = QString::number(picture->getSnapmaticProperties().crewID); + crewStr = QString::number(picture->getSnapmaticProperties().crewID); + } + created = picture->getSnapmaticProperties().createdDateTime.toString(Qt::DefaultLocaleShortDate); + plyrsList = picture->getSnapmaticProperties().playersList; + picTitl = StringParser::escapeString(picture->getPictureTitle()); + picArea = picture->getSnapmaticProperties().location.area; + if (globalMap.contains(picArea)) + { + picAreaStr = globalMap[picArea]; + } + else + { + picAreaStr = picArea; + } + + this->setWindowTitle(windowTitleStr.arg(picture->getPictureStr())); + ui->labJSON->setText(jsonDrawString.arg(locX, locY, locZ, generatePlayersString(), generateCrewString(), picTitl, picAreaStr, created)); + } + else + { + ui->labJSON->setText(jsonDrawString.arg("0", "0", "0", tr("No Players"), tr("No Crew"), tr("Unknown Location"))); + QMessageBox::warning(this,tr("Snapmatic Picture Viewer"),tr("Failed at %1").arg(picture->getLastStep())); + } + QObject::connect(smpic, SIGNAL(updated()), this, SLOT(updated())); + emit newPictureCommited(snapmaticPicture); +} + +void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, int index) +{ + setSnapmaticPicture(picture, readOk, true, index); +} + +void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk) +{ + setSnapmaticPicture(picture, readOk, false, 0); +} + +void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, int index) +{ + setSnapmaticPicture(picture, true, index); +} + +void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture) +{ + setSnapmaticPicture(picture, true); +} + +void PictureDialog::renderPicture() +{ + qreal screenRatio = AppEnv::screenRatio(); + if (!previewMode) + { + if (overlayEnabled) + { + QPixmap shownImagePixmap(960 * screenRatio, 536 * screenRatio); + shownImagePixmap.fill(Qt::transparent); + QPainter shownImagePainter(&shownImagePixmap); + if (screenRatio == 1) + { + shownImagePainter.drawImage(0, 0, snapmaticPicture); + shownImagePainter.drawImage(3 * screenRatio, 3 * screenRatio, overlayTempImage); + } + else + { + shownImagePainter.drawImage(0, 0, snapmaticPicture.scaledToHeight(536 * screenRatio, Qt::SmoothTransformation)); + shownImagePainter.drawImage(3 * screenRatio, 3 * screenRatio, overlayTempImage); + } + shownImagePainter.end(); + ui->labPicture->setPixmap(shownImagePixmap); + } + else + { + if (screenRatio != 1) + { + QPixmap shownImagePixmap(960 * screenRatio, 536 * screenRatio); + shownImagePixmap.fill(Qt::transparent); + QPainter shownImagePainter(&shownImagePixmap); + shownImagePainter.drawImage(0, 0, snapmaticPicture.scaledToHeight(536 * screenRatio, Qt::SmoothTransformation)); + shownImagePainter.end(); + ui->labPicture->setPixmap(shownImagePixmap); + } + else + { + ui->labPicture->setPixmap(QPixmap::fromImage(snapmaticPicture)); + } + } + } + else + { + // Generating Avatar Preview + QPixmap avatarPixmap(960 * screenRatio, 536 * screenRatio); + QPainter snapPainter(&avatarPixmap); + QFont snapPainterFont; + snapPainterFont.setPixelSize(12 * screenRatio); + if (screenRatio == 1) + { + snapPainter.drawImage(0, 0, snapmaticPicture); + } + else + { + snapPainter.drawImage(0, 0, snapmaticPicture.scaledToHeight(536 * screenRatio, Qt::SmoothTransformation)); + } + snapPainter.drawImage(0, 0, avatarAreaPicture); + snapPainter.setPen(QColor::fromRgb(255, 255, 255, 255)); + snapPainter.setFont(snapPainterFont); + snapPainter.drawText(QRect(3 * screenRatio, 3 * screenRatio, 140 * screenRatio, 536 * screenRatio), Qt::AlignLeft | Qt::TextWordWrap, tr("Avatar Preview Mode\nPress 1 for Default View")); + snapPainter.end(); + ui->labPicture->setPixmap(avatarPixmap); + } +} + +void PictureDialog::crewNameUpdated() +{ + if (withDatabase && crewID == crewStr) + { + crewStr = crewDB->getCrewName(crewID.toInt()); + ui->labJSON->setText(jsonDrawString.arg(locX, locY, locZ, generatePlayersString(), generateCrewString(), picTitl, picAreaStr, created)); + } +} + +void PictureDialog::playerNameUpdated() +{ + if (plyrsList.count() >= 1) + { + ui->labJSON->setText(jsonDrawString.arg(locX, locY, locZ, generatePlayersString(), generateCrewString(), picTitl, picAreaStr, created)); + } +} + +QString PictureDialog::generateCrewString() +{ + if (crewID != "0" && !crewID.isEmpty()) + { + return QString("" % crewStr % ""); + } + return tr("No Crew"); +} + +QString PictureDialog::generatePlayersString() +{ + QString plyrsStr; + if (plyrsList.length() >= 1) + { + foreach (const QString &player, plyrsList) + { + QString playerName; + if (withDatabase) + { + playerName = profileDB->getPlayerName(player.toInt()); + } + else + { + playerName = player; + } + plyrsStr += ", " % playerName % ""; + } + plyrsStr.remove(0,2); + } + else + { + plyrsStr = tr("No Players"); + } + return plyrsStr; +} + +void PictureDialog::exportSnapmaticPicture() +{ + if (rqFullscreen && fullscreenWidget != nullptr) + { + PictureExport::exportAsPicture(fullscreenWidget, smpic); + } + else + { + PictureExport::exportAsPicture(this, smpic); + } +} + +void PictureDialog::copySnapmaticPicture() +{ + if (rqFullscreen && fullscreenWidget != nullptr) + { + PictureExport::exportAsSnapmatic(fullscreenWidget, smpic); + } + else + { + PictureExport::exportAsSnapmatic(this, smpic); + } +} + +void PictureDialog::on_labPicture_mouseDoubleClicked(Qt::MouseButton button) +{ + if (button == Qt::LeftButton) + { + QRect desktopRect = QApplication::desktop()->screenGeometry(this); + PictureWidget *pictureWidget = new PictureWidget(this); // Work! + pictureWidget->setObjectName("PictureWidget"); +#if QT_VERSION >= 0x050600 + pictureWidget->setWindowFlags(pictureWidget->windowFlags()^Qt::FramelessWindowHint^Qt::WindowStaysOnTopHint^Qt::MaximizeUsingFullscreenGeometryHint); +#else + pictureWidget->setWindowFlags(pictureWidget->windowFlags()^Qt::FramelessWindowHint^Qt::WindowStaysOnTopHint); +#endif + pictureWidget->setWindowTitle(this->windowTitle()); + pictureWidget->setStyleSheet("QLabel#pictureLabel{background-color: black;}"); + pictureWidget->setImage(snapmaticPicture, desktopRect); + pictureWidget->setModal(true); + + fullscreenWidget = pictureWidget; + QObject::connect(this, SIGNAL(newPictureCommited(QImage)), pictureWidget, SLOT(setImage(QImage))); + QObject::connect(pictureWidget, SIGNAL(nextPictureRequested()), this, SLOT(dialogNextPictureRequested())); + QObject::connect(pictureWidget, SIGNAL(previousPictureRequested()), this, SLOT(dialogPreviousPictureRequested())); + + pictureWidget->move(desktopRect.x(), desktopRect.y()); + pictureWidget->resize(desktopRect.width(), desktopRect.height()); + pictureWidget->showFullScreen(); + pictureWidget->setFocus(); + pictureWidget->raise(); + pictureWidget->exec(); + + fullscreenWidget = nullptr; // Work! + delete pictureWidget; // Work! + } +} + +void PictureDialog::on_labPicture_customContextMenuRequested(const QPoint &pos) +{ + exportCustomContextMenuRequestedPrivate(ui->labPicture->mapToGlobal(pos), false); +} + +bool PictureDialog::isIndexed() +{ + return indexed; +} + +int PictureDialog::getIndex() +{ + return index; +} + +void PictureDialog::openPreviewMap() +{ + MapPreviewDialog *mapPreviewDialog; + if (rqFullscreen && fullscreenWidget != nullptr) + { + mapPreviewDialog = new MapPreviewDialog(fullscreenWidget); + } + else + { + mapPreviewDialog = new MapPreviewDialog(this); + } + mapPreviewDialog->setWindowIcon(windowIcon()); + mapPreviewDialog->setModal(true); + mapPreviewDialog->drawPointOnMap(smpic->getSnapmaticProperties().location.x, smpic->getSnapmaticProperties().location.y); + mapPreviewDialog->show(); + mapPreviewDialog->exec(); + delete mapPreviewDialog; +} + +void PictureDialog::editSnapmaticProperties() +{ + SnapmaticEditor *snapmaticEditor; + if (rqFullscreen && fullscreenWidget != nullptr) + { + snapmaticEditor = new SnapmaticEditor(crewDB, fullscreenWidget); + } + else + { + snapmaticEditor = new SnapmaticEditor(crewDB, this); + } + snapmaticEditor->setWindowFlags(snapmaticEditor->windowFlags()^Qt::WindowContextHelpButtonHint); + snapmaticEditor->setWindowIcon(windowIcon()); + snapmaticEditor->setSnapmaticPicture(smpic); + snapmaticEditor->setModal(true); + snapmaticEditor->exec(); + delete snapmaticEditor; +} + +void PictureDialog::updated() +{ + if (withDatabase) + { + crewID = QString::number(smpic->getSnapmaticProperties().crewID); + crewStr = crewDB->getCrewName(smpic->getSnapmaticProperties().crewID); + } + else + { + crewID = QString::number(smpic->getSnapmaticProperties().crewID); + crewStr = QString::number(smpic->getSnapmaticProperties().crewID); + } + picTitl = StringParser::escapeString(smpic->getPictureTitle()); + ui->labJSON->setText(jsonDrawString.arg(locX, locY, locZ, generatePlayersString(), generateCrewString(), picTitl, picAreaStr, created)); +} diff --git a/PictureDialog.h b/PictureDialog.h index 7cd6958..6a02338 100755 --- a/PictureDialog.h +++ b/PictureDialog.h @@ -1,123 +1,133 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef PICTUREDIALOG_H -#define PICTUREDIALOG_H - -#include "SnapmaticPicture.h" -#include "ProfileDatabase.h" -#include "CrewDatabase.h" -#include -#include -#include -#include - -namespace Ui { -class PictureDialog; -} - -class PictureDialog : public QDialog -{ - Q_OBJECT -public: - explicit PictureDialog(ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent = 0); - explicit PictureDialog(QWidget *parent = 0); - explicit PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent = 0); - explicit PictureDialog(bool primaryWindow, QWidget *parent = 0); - void setupPictureDialog(bool withDatabase); - void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, bool indexed, int index); - void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, int index); - void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk); - void setSnapmaticPicture(SnapmaticPicture *picture, int index); - void setSnapmaticPicture(SnapmaticPicture *picture); - void addPreviousNextButtons(); - void stylizeDialog(); - bool isIndexed(); - int getIndex(); - ~PictureDialog(); - -public slots: - void playerNameUpdated(); - void dialogNextPictureRequested(); - void dialogPreviousPictureRequested(); - void adaptNewDialogSize(QSize newLabelSize); - void exportCustomContextMenuRequested(const QPoint &pos); - -private slots: - void copySnapmaticPicture(); - void exportSnapmaticPicture(); - void triggerFullscreenDoubeClick(); - void on_labPicture_mouseDoubleClicked(Qt::MouseButton button); - void on_labPicture_customContextMenuRequested(const QPoint &pos); - void exportCustomContextMenuRequestedPrivate(const QPoint &pos, bool fullscreen); - void nextPictureRequestedSlot(); - void previousPictureRequestedSlot(); - void renderOverlayPicture(); - void renderPicture(); - -signals: - void nextPictureRequested(); - void previousPictureRequested(); - void newPictureCommited(QImage picture); - void endDatabaseThread(); - -protected: - void closeEvent(QCloseEvent *ev); - bool eventFilter(QObject *obj, QEvent *ev); - void mousePressEvent(QMouseEvent *ev); - bool event(QEvent *event); - -private: - bool primaryWindow; - ProfileDatabase *profileDB; - CrewDatabase *crewDB; - Ui::PictureDialog *ui; - QMap globalMap; - SnapmaticPicture *smpic; - QWidget *fullscreenWidget; - QAction *jpegExportAction; - QAction *pgtaExportAction; - QImage avatarAreaPicture; - QImage snapmaticPicture; - QImage overlayTempImage; - QString jsonDrawString; - QString windowTitleStr; - QStringList plyrsList; - QString picAreaStr; - QString picArea; - QString picTitl; - QString picPath; - QString created; - QString crewID; - QString locX; - QString locY; - QString locZ; - bool overlayEnabled; - bool withDatabase; - bool rqFullscreen; - bool naviEnabled; - bool previewMode; - bool indexed; - int index; - int avatarLocX; - int avatarLocY; - int avatarSize; - QMenu *exportMenu; -}; - -#endif // PICTUREDIALOG_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef PICTUREDIALOG_H +#define PICTUREDIALOG_H + +#include "SnapmaticPicture.h" +#include "ProfileDatabase.h" +#include "CrewDatabase.h" +#include +#include +#include +#include + +namespace Ui { +class PictureDialog; +} + +class PictureDialog : public QDialog +{ + Q_OBJECT +public: + explicit PictureDialog(ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent = 0); + explicit PictureDialog(QWidget *parent = 0); + explicit PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent = 0); + explicit PictureDialog(bool primaryWindow, QWidget *parent = 0); + void setupPictureDialog(bool withDatabase); + void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, bool indexed, int index); + void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, int index); + void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk); + void setSnapmaticPicture(SnapmaticPicture *picture, int index); + void setSnapmaticPicture(SnapmaticPicture *picture); + void addPreviousNextButtons(); + void stylizeDialog(); + bool isIndexed(); + int getIndex(); + ~PictureDialog(); + +public slots: + void crewNameUpdated(); + void playerNameUpdated(); + void dialogNextPictureRequested(); + void dialogPreviousPictureRequested(); + void adaptNewDialogSize(QSize newLabelSize); + void exportCustomContextMenuRequested(const QPoint &pos); + +private slots: + void copySnapmaticPicture(); + void exportSnapmaticPicture(); + void triggerFullscreenDoubeClick(); + void on_labPicture_mouseDoubleClicked(Qt::MouseButton button); + void on_labPicture_customContextMenuRequested(const QPoint &pos); + void exportCustomContextMenuRequestedPrivate(const QPoint &pos, bool fullscreen); + void nextPictureRequestedSlot(); + void previousPictureRequestedSlot(); + void editSnapmaticProperties(); + void renderOverlayPicture(); + void renderPicture(); + void openPreviewMap(); + void updated(); + +signals: + void nextPictureRequested(); + void previousPictureRequested(); + void newPictureCommited(QImage picture); + void endDatabaseThread(); + +protected: + void closeEvent(QCloseEvent *ev); + bool eventFilter(QObject *obj, QEvent *ev); + void mousePressEvent(QMouseEvent *ev); + bool event(QEvent *event); + +private: + QString generateCrewString(); + QString generatePlayersString(); + bool primaryWindow; + ProfileDatabase *profileDB; + CrewDatabase *crewDB; + Ui::PictureDialog *ui; + QMap globalMap; + SnapmaticPicture *smpic; + QWidget *fullscreenWidget; + QAction *jpegExportAction; + QAction *pgtaExportAction; + QAction *propEditorAction; + QAction *openViewerAction; + QAction *manageMenuSep1; + QImage avatarAreaPicture; + QImage snapmaticPicture; + QImage overlayTempImage; + QString jsonDrawString; + QString windowTitleStr; + QStringList plyrsList; + QString picAreaStr; + QString picArea; + QString picTitl; + QString picPath; + QString created; + QString crewStr; + QString crewID; + QString locX; + QString locY; + QString locZ; + bool overlayEnabled; + bool withDatabase; + bool rqFullscreen; + bool naviEnabled; + bool previewMode; + bool indexed; + int index; + int avatarLocX; + int avatarLocY; + int avatarSize; + QMenu *manageMenu; +}; + +#endif // PICTUREDIALOG_H diff --git a/PictureDialog.ui b/PictureDialog.ui index 44eb828..dc10eeb 100755 --- a/PictureDialog.ui +++ b/PictureDialog.ui @@ -1,254 +1,254 @@ - - - PictureDialog - - - - 0 - 0 - 960 - 602 - - - - %1 - Snapmatic Picture Viewer - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 1 - - - - Qt::CustomContextMenu - - - - - - :/img/960x536.png - - - Qt::AlignCenter - - - - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - QFrame::NoFrame - - - QFrame::Plain - - - 0 - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 4 - - - 10 - - - 4 - - - 4 - - - - - - 0 - 0 - - - - <span style=" font-weight:600;">Title: </span>%6<br/> -<span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> -<span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> -<span style=" font-weight:600;">Created: </span>%8 - - - true - - - true - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - - - - 6 - - - 5 - - - 5 - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 0 - 0 - - - - - - - - 6 - - - - - - 0 - 0 - - - - Qt::NoFocus - - - Export picture - - - &Export - - - false - - - - - - - - 0 - 0 - - - - Qt::NoFocus - - - Close - - - &Close - - - false - - - - - - - - - - - - - - - - - UiModLabel - QLabel -
uimod/UiModLabel.h
- - mouseMoved() - mouseReleased() - mousePressed() - mouseDoubleClicked() - -
-
- - - - - - cmdClose - clicked() - PictureDialog - close() - - - 912 - 514 - - - 479 - 267 - - - - -
+ + + PictureDialog + + + + 0 + 0 + 960 + 618 + + + + %1 - Snapmatic Picture Viewer + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 1 + + + + Qt::CustomContextMenu + + + + + + :/img/960x536.png + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 4 + + + 10 + + + 4 + + + 4 + + + + + + 0 + 0 + + + + <span style=" font-weight:600;">Title: </span>%6<br/> +<span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> +<span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> +<span style=" font-weight:600;">Created: </span>%8 + + + true + + + true + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + 6 + + + 5 + + + 5 + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 0 + 0 + + + + + + + + 6 + + + + + + 0 + 0 + + + + Qt::NoFocus + + + Manage picture + + + &Manage + + + false + + + + + + + + 0 + 0 + + + + Qt::NoFocus + + + Close viewer + + + &Close + + + false + + + + + + + + + + + + + + + + + UiModLabel + QLabel +
uimod/UiModLabel.h
+ + mouseMoved() + mouseReleased() + mousePressed() + mouseDoubleClicked() + +
+
+ + + + + + cmdClose + clicked() + PictureDialog + close() + + + 912 + 514 + + + 479 + 267 + + + + +
diff --git a/PictureExport.cpp b/PictureExport.cpp index ad20e9a..d3fb040 100755 --- a/PictureExport.cpp +++ b/PictureExport.cpp @@ -1,310 +1,312 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "config.h" -#include "PictureExport.h" -#include "PictureDialog.h" -#include "StandardPaths.h" -#include "SidebarGenerator.h" -#include -#include -#include -#include -#include -#include - -PictureExport::PictureExport() -{ - -} - -void PictureExport::exportAsPicture(QWidget *parent, SnapmaticPicture *picture) -{ - QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); - - // Picture Settings - // Quality Settings - settings.beginGroup("Pictures"); - int defaultQuality = 100; - QSize defExportSize = QSize(960, 536); - int customQuality = settings.value("CustomQuality", defaultQuality).toInt(); - if (customQuality < 1 || customQuality > 100) - { - customQuality = 100; - } - bool useCustomQuality = settings.value("CustomQualityEnabled", false).toBool(); - - // Size Settings - QSize cusExportSize = settings.value("CustomSize", defExportSize).toSize(); - if (cusExportSize.width() > 3840) - { - cusExportSize.setWidth(3840); - } - else if (cusExportSize.height() > 2160) - { - cusExportSize.setHeight(2160); - } - if (cusExportSize.width() < 1) - { - cusExportSize.setWidth(1); - } - else if (cusExportSize.height() < 1) - { - cusExportSize.setHeight(1); - } - QString sizeMode = settings.value("ExportSizeMode", "Default").toString(); - Qt::AspectRatioMode aspectRatio = (Qt::AspectRatioMode)settings.value("AspectRatio", Qt::KeepAspectRatio).toInt(); - QString defaultExportFormat = settings.value("DefaultExportFormat", ".jpg").toString(); - settings.endGroup(); - // End Picture Settings - - settings.beginGroup("FileDialogs"); - settings.beginGroup("ExportAsPicture"); - -fileDialogPreSave: //Work? - QFileDialog fileDialog(parent); - fileDialog.setFileMode(QFileDialog::AnyFile); - fileDialog.setViewMode(QFileDialog::Detail); - fileDialog.setAcceptMode(QFileDialog::AcceptSave); - fileDialog.setOption(QFileDialog::DontUseNativeDialog, false); - fileDialog.setOption(QFileDialog::DontConfirmOverwrite, true); - fileDialog.setDefaultSuffix("suffix"); - fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); - fileDialog.setWindowTitle(PictureDialog::tr("Export as JPG picture...")); - fileDialog.setLabelText(QFileDialog::Accept, PictureDialog::tr("Export")); - - QStringList filters; - filters << PictureDialog::tr("JPEG picture (*.jpg)"); - filters << PictureDialog::tr("Portable Network Graphics (*.png)"); - fileDialog.setNameFilters(filters); - - QList sidebarUrls = SidebarGenerator::generateSidebarUrls(fileDialog.sidebarUrls()); - - fileDialog.setSidebarUrls(sidebarUrls); - fileDialog.setDirectory(settings.value("Directory", StandardPaths::picturesLocation()).toString()); - fileDialog.restoreGeometry(settings.value(parent->objectName() + "+Geomtery", "").toByteArray()); - - QString newPictureFileName = getPictureFileName(picture) + defaultExportFormat; - fileDialog.selectFile(newPictureFileName); - - if (fileDialog.exec()) - { - QStringList selectedFiles = fileDialog.selectedFiles(); - if (selectedFiles.length() == 1) - { - QString saveFileFormat; - QString selectedFile = selectedFiles.at(0); - - if (selectedFile.right(4) == ".jpg") - { - saveFileFormat = "JPEG"; - } - else if (selectedFile.right(4) == ".jpeg") - { - saveFileFormat = "JPEG"; - } - else if (selectedFile.right(4) == ".png") - { - saveFileFormat = "PNG"; - } - else if (selectedFile.right(7) == ".suffix") - { - if (fileDialog.selectedNameFilter() == "JPEG picture (*.jpg)") - { - selectedFile.replace(".suffix", ".jpg"); - } - else if (fileDialog.selectedNameFilter() == "Portable Network Graphics (*.png)") - { - selectedFile.replace(".suffix", ".png"); - } - else - { - selectedFile.replace(".suffix", ".jpg"); - } - } - - if (QFile::exists(selectedFile)) - { - if (QMessageBox::Yes == QMessageBox::warning(parent, PictureDialog::tr("Export as JPG picture"), PictureDialog::tr("Overwrite %1 with current Snapmatic picture?").arg("\""+selectedFile+"\""), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) - { - if (!QFile::remove(selectedFile)) - { - QMessageBox::warning(parent, PictureDialog::tr("Export as JPG picture"), PictureDialog::tr("Failed to overwrite %1 with current Snapmatic picture").arg("\""+selectedFile+"\"")); - goto fileDialogPreSave; //Work? - } - } - else - { - goto fileDialogPreSave; //Work? - } - } - - // Scale Picture - QImage exportPicture = picture->getImage(); - if (sizeMode == "Desktop") - { - QRect desktopResolution = QApplication::desktop()->screenGeometry(); - exportPicture = exportPicture.scaled(desktopResolution.width(), desktopResolution.height(), aspectRatio, Qt::SmoothTransformation); - } - else if (sizeMode == "Custom") - { - exportPicture = exportPicture.scaled(cusExportSize, aspectRatio, Qt::SmoothTransformation); - } - - bool isSaved; - if (useCustomQuality) - { - isSaved = exportPicture.save(selectedFile, saveFileFormat.toStdString().c_str(), customQuality); - } - else - { - isSaved = exportPicture.save(selectedFile, saveFileFormat.toStdString().c_str(), 100); - } - - if (!isSaved) - { - QMessageBox::warning(parent, PictureDialog::tr("Export as JPG picture"), PictureDialog::tr("Failed to export current Snapmatic picture")); - goto fileDialogPreSave; //Work? - } - } - else - { - QMessageBox::warning(parent, PictureDialog::tr("Export as JPG picture"), PictureDialog::tr("No valid file is selected")); - goto fileDialogPreSave; //Work? - } - } - - settings.setValue(parent->objectName() + "+Geometry", fileDialog.saveGeometry()); - settings.setValue("Directory", fileDialog.directory().absolutePath()); - settings.endGroup(); - settings.endGroup(); -} - -void PictureExport::exportAsSnapmatic(QWidget *parent, SnapmaticPicture *picture) -{ - QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); - settings.beginGroup("FileDialogs"); - settings.beginGroup("ExportAsSnapmatic"); - - QString adjustedPicPath = picture->getPictureFileName(); - if (adjustedPicPath.right(7) == ".hidden") // for the hidden file system - { - adjustedPicPath.remove(adjustedPicPath.length() - 7, 7); - } - -fileDialogPreSave: //Work? - QFileInfo sgdFileInfo(adjustedPicPath); - QFileDialog fileDialog(parent); - fileDialog.setFileMode(QFileDialog::AnyFile); - fileDialog.setViewMode(QFileDialog::Detail); - fileDialog.setAcceptMode(QFileDialog::AcceptSave); - fileDialog.setOption(QFileDialog::DontUseNativeDialog, false); - fileDialog.setOption(QFileDialog::DontConfirmOverwrite, true); - fileDialog.setDefaultSuffix(".rem"); - fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); - fileDialog.setWindowTitle(PictureDialog::tr("Export as GTA Snapmatic...")); - fileDialog.setLabelText(QFileDialog::Accept, PictureDialog::tr("Export")); - - QStringList filters; - filters << PictureDialog::tr("GTA V Export (*.g5e)"); - filters << PictureDialog::tr("GTA V Raw Export (*.auto)"); - filters << PictureDialog::tr("Snapmatic pictures (PGTA*)"); - fileDialog.setNameFilters(filters); - - QList sidebarUrls = SidebarGenerator::generateSidebarUrls(fileDialog.sidebarUrls()); - - fileDialog.setSidebarUrls(sidebarUrls); - fileDialog.setDirectory(settings.value("Directory", StandardPaths::documentsLocation()).toString()); - fileDialog.selectFile(QString(picture->getExportPictureFileName() + ".g5e")); - fileDialog.restoreGeometry(settings.value(parent->objectName() + "+Geomtery", "").toByteArray()); - - - if (fileDialog.exec()) - { - QStringList selectedFiles = fileDialog.selectedFiles(); - if (selectedFiles.length() == 1) - { - QString selectedFile = selectedFiles.at(0); - - if (QFile::exists(selectedFile)) - { - if (QMessageBox::Yes == QMessageBox::warning(parent, PictureDialog::tr("Export as GTA Snapmatic"), PictureDialog::tr("Overwrite %1 with current Snapmatic picture?").arg("\""+selectedFile+"\""), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) - { - if (!QFile::remove(selectedFile)) - { - QMessageBox::warning(parent, PictureDialog::tr("Export as GTA Snapmatic"), PictureDialog::tr("Failed to overwrite %1 with current Snapmatic picture").arg("\""+selectedFile+"\"")); - goto fileDialogPreSave; //Work? - } - } - else - { - goto fileDialogPreSave; //Work? - } - } - - if (selectedFile.right(4) == ".g5e") - { - bool isExported = picture->exportPicture(selectedFile, "G5E"); - if (!isExported) - { - QMessageBox::warning(parent, PictureDialog::tr("Export as GTA Snapmatic"), PictureDialog::tr("Failed to export current Snapmatic picture")); - goto fileDialogPreSave; //Work? - } - } - else - { - bool isAutoExt = false; - if (selectedFile.right(5) == ".auto") - { - isAutoExt = true; - QString dirPath = QFileInfo(selectedFile).dir().path(); - QString stockFileName = sgdFileInfo.fileName(); - selectedFile = dirPath + "/" + stockFileName; - } - else if (selectedFile.right(4) == ".rem") - { - selectedFile.remove(".rem"); - } - bool isCopied = picture->exportPicture(selectedFile, "PGTA"); - if (!isCopied) - { - QMessageBox::warning(parent, PictureDialog::tr("Export as GTA Snapmatic"), PictureDialog::tr("Failed to export current Snapmatic picture")); - goto fileDialogPreSave; //Work? - } - else - { - if (isAutoExt) QMessageBox::information(parent, PictureDialog::tr("Export as GTA Snapmatic"), PictureDialog::tr("Exported Snapmatic to \"%1\" because of using the .auto extension.").arg(selectedFile)); - } - } - } - else - { - QMessageBox::warning(parent, PictureDialog::tr("Export as GTA Snapmatic"), PictureDialog::tr("No valid file is selected")); - goto fileDialogPreSave; //Work? - } - } - - settings.setValue(parent->objectName() + "+Geometry", fileDialog.saveGeometry()); - settings.setValue("Directory", fileDialog.directory().absolutePath()); - settings.endGroup(); -} - -QString PictureExport::getPictureFileName(SnapmaticPicture *picture) -{ - return picture->getExportPictureFileName(); -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "config.h" +#include "PictureExport.h" +#include "PictureDialog.h" +#include "StandardPaths.h" +#include "SidebarGenerator.h" +#include +#include +#include +#include +#include +#include +#include +#include + +PictureExport::PictureExport() +{ + +} + +void PictureExport::exportAsPicture(QWidget *parent, SnapmaticPicture *picture) +{ + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + + // Picture Settings + // Quality Settings + settings.beginGroup("Pictures"); + int defaultQuality = 100; + QSize defExportSize = QSize(960, 536); + int customQuality = settings.value("CustomQuality", defaultQuality).toInt(); + if (customQuality < 1 || customQuality > 100) + { + customQuality = 100; + } + bool useCustomQuality = settings.value("CustomQualityEnabled", false).toBool(); + + // Size Settings + QSize cusExportSize = settings.value("CustomSize", defExportSize).toSize(); + if (cusExportSize.width() > 3840) + { + cusExportSize.setWidth(3840); + } + else if (cusExportSize.height() > 2160) + { + cusExportSize.setHeight(2160); + } + if (cusExportSize.width() < 1) + { + cusExportSize.setWidth(1); + } + else if (cusExportSize.height() < 1) + { + cusExportSize.setHeight(1); + } + QString sizeMode = settings.value("ExportSizeMode", "Default").toString(); + Qt::AspectRatioMode aspectRatio = (Qt::AspectRatioMode)settings.value("AspectRatio", Qt::KeepAspectRatio).toInt(); + QString defaultExportFormat = settings.value("DefaultExportFormat", ".jpg").toString(); + settings.endGroup(); + // End Picture Settings + + settings.beginGroup("FileDialogs"); + settings.beginGroup("ExportAsPicture"); + +fileDialogPreSave: //Work? + QFileDialog fileDialog(parent); + fileDialog.setFileMode(QFileDialog::AnyFile); + fileDialog.setViewMode(QFileDialog::Detail); + fileDialog.setAcceptMode(QFileDialog::AcceptSave); + fileDialog.setOption(QFileDialog::DontUseNativeDialog, false); + fileDialog.setOption(QFileDialog::DontConfirmOverwrite, true); + fileDialog.setDefaultSuffix("suffix"); + fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); + fileDialog.setWindowTitle(PictureDialog::tr("Export as Picture...")); + fileDialog.setLabelText(QFileDialog::Accept, PictureDialog::tr("Export")); + + QStringList filters; + filters << PictureDialog::tr("JPEG Graphics (*.jpg *.jpeg)"); + filters << PictureDialog::tr("Portable Network Graphics (*.png)"); + fileDialog.setNameFilters(filters); + + QList sidebarUrls = SidebarGenerator::generateSidebarUrls(fileDialog.sidebarUrls()); + + fileDialog.setSidebarUrls(sidebarUrls); + fileDialog.setDirectory(settings.value("Directory", StandardPaths::picturesLocation()).toString()); + fileDialog.restoreGeometry(settings.value(parent->objectName() % "+Geomtery", "").toByteArray()); + + QString newPictureFileName = getPictureFileName(picture) % defaultExportFormat; + fileDialog.selectFile(newPictureFileName); + + if (fileDialog.exec()) + { + QStringList selectedFiles = fileDialog.selectedFiles(); + if (selectedFiles.length() == 1) + { + QString saveFileFormat; + QString selectedFile = selectedFiles.at(0); + + if (selectedFile.right(4) == ".jpg") + { + saveFileFormat = "JPEG"; + } + else if (selectedFile.right(4) == ".jpeg") + { + saveFileFormat = "JPEG"; + } + else if (selectedFile.right(4) == ".png") + { + saveFileFormat = "PNG"; + } + else if (selectedFile.right(7) == ".suffix") + { + if (fileDialog.selectedNameFilter() == "JPEG picture (*.jpg)") + { + selectedFile.replace(".suffix", ".jpg"); + } + else if (fileDialog.selectedNameFilter() == "Portable Network Graphics (*.png)") + { + selectedFile.replace(".suffix", ".png"); + } + else + { + selectedFile.replace(".suffix", ".jpg"); + } + } + + if (QFile::exists(selectedFile)) + { + if (QMessageBox::Yes == QMessageBox::warning(parent, PictureDialog::tr("Export as Picture"), PictureDialog::tr("Overwrite %1 with current Snapmatic picture?").arg("\""+selectedFile+"\""), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) + { + if (!QFile::remove(selectedFile)) + { + QMessageBox::warning(parent, PictureDialog::tr("Export as Picture"), PictureDialog::tr("Failed to overwrite %1 with current Snapmatic picture").arg("\""+selectedFile+"\"")); + goto fileDialogPreSave; //Work? + } + } + else + { + goto fileDialogPreSave; //Work? + } + } + + // Scale Picture + QImage exportPicture = picture->getImage(); + if (sizeMode == "Desktop") + { + QRect desktopResolution = QApplication::desktop()->screenGeometry(); + exportPicture = exportPicture.scaled(desktopResolution.width(), desktopResolution.height(), aspectRatio, Qt::SmoothTransformation); + } + else if (sizeMode == "Custom") + { + exportPicture = exportPicture.scaled(cusExportSize, aspectRatio, Qt::SmoothTransformation); + } + + bool isSaved; + if (useCustomQuality) + { + isSaved = exportPicture.save(selectedFile, saveFileFormat.toStdString().c_str(), customQuality); + } + else + { + isSaved = exportPicture.save(selectedFile, saveFileFormat.toStdString().c_str(), 100); + } + + if (!isSaved) + { + QMessageBox::warning(parent, PictureDialog::tr("Export as Picture"), PictureDialog::tr("Failed to export current Snapmatic picture")); + goto fileDialogPreSave; //Work? + } + } + else + { + QMessageBox::warning(parent, PictureDialog::tr("Export as Picture"), PictureDialog::tr("No valid file is selected")); + goto fileDialogPreSave; //Work? + } + } + + settings.setValue(parent->objectName() % "+Geometry", fileDialog.saveGeometry()); + settings.setValue("Directory", fileDialog.directory().absolutePath()); + settings.endGroup(); + settings.endGroup(); +} + +void PictureExport::exportAsSnapmatic(QWidget *parent, SnapmaticPicture *picture) +{ + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("FileDialogs"); + settings.beginGroup("ExportAsSnapmatic"); + + QString adjustedPicPath = picture->getPictureFileName(); + if (adjustedPicPath.right(7) == ".hidden") // for the hidden file system + { + adjustedPicPath.remove(adjustedPicPath.length() - 7, 7); + } + +fileDialogPreSave: //Work? + QFileInfo sgdFileInfo(adjustedPicPath); + QFileDialog fileDialog(parent); + fileDialog.setFileMode(QFileDialog::AnyFile); + fileDialog.setViewMode(QFileDialog::Detail); + fileDialog.setAcceptMode(QFileDialog::AcceptSave); + fileDialog.setOption(QFileDialog::DontUseNativeDialog, false); + fileDialog.setOption(QFileDialog::DontConfirmOverwrite, true); + fileDialog.setDefaultSuffix(".rem"); + fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); + fileDialog.setWindowTitle(PictureDialog::tr("Export as Snapmatic...")); + fileDialog.setLabelText(QFileDialog::Accept, PictureDialog::tr("Export")); + + QStringList filters; + filters << PictureDialog::tr("GTA V Export (*.g5e)"); + filters << PictureDialog::tr("GTA V Raw Export (*.auto)"); + filters << PictureDialog::tr("Snapmatic pictures (PGTA*)"); + fileDialog.setNameFilters(filters); + + QList sidebarUrls = SidebarGenerator::generateSidebarUrls(fileDialog.sidebarUrls()); + + fileDialog.setSidebarUrls(sidebarUrls); + fileDialog.setDirectory(settings.value("Directory", StandardPaths::documentsLocation()).toString()); + fileDialog.selectFile(QString(picture->getExportPictureFileName() % ".g5e")); + fileDialog.restoreGeometry(settings.value(parent->objectName() % "+Geomtery", "").toByteArray()); + + + if (fileDialog.exec()) + { + QStringList selectedFiles = fileDialog.selectedFiles(); + if (selectedFiles.length() == 1) + { + QString selectedFile = selectedFiles.at(0); + bool isAutoExt = false; + if (selectedFile.right(5) == ".auto") + { + isAutoExt = true; + QString dirPath = QFileInfo(selectedFile).dir().path(); + QString stockFileName = sgdFileInfo.fileName(); + selectedFile = dirPath % "/" % stockFileName; + } + else if (selectedFile.right(4) == ".rem") + { + selectedFile.remove(selectedFile.length() - 4, 4); + } + + if (QFile::exists(selectedFile)) + { + if (QMessageBox::Yes == QMessageBox::warning(parent, PictureDialog::tr("Export as Snapmatic"), PictureDialog::tr("Overwrite %1 with current Snapmatic picture?").arg("\""+selectedFile+"\""), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) + { + if (!QFile::remove(selectedFile)) + { + QMessageBox::warning(parent, PictureDialog::tr("Export as Snapmatic"), PictureDialog::tr("Failed to overwrite %1 with current Snapmatic picture").arg("\""+selectedFile+"\"")); + goto fileDialogPreSave; //Work? + } + } + else + { + goto fileDialogPreSave; //Work? + } + } + + if (selectedFile.right(4) == ".g5e") + { + bool isExported = picture->exportPicture(selectedFile, SnapmaticFormat::G5E_Format); + if (!isExported) + { + QMessageBox::warning(parent, PictureDialog::tr("Export as Snapmatic"), PictureDialog::tr("Failed to export current Snapmatic picture")); + goto fileDialogPreSave; //Work? + } + } + else + { + bool isCopied = picture->exportPicture(selectedFile, SnapmaticFormat::PGTA_Format); + if (!isCopied) + { + QMessageBox::warning(parent, PictureDialog::tr("Export as Snapmatic"), PictureDialog::tr("Failed to export current Snapmatic picture")); + goto fileDialogPreSave; //Work? + } + else + { + if (isAutoExt) QMessageBox::information(parent, PictureDialog::tr("Export as Snapmatic"), PictureDialog::tr("Exported Snapmatic to \"%1\" because of using the .auto extension.").arg(selectedFile)); + } + } + } + else + { + QMessageBox::warning(parent, PictureDialog::tr("Export as Snapmatic"), PictureDialog::tr("No valid file is selected")); + goto fileDialogPreSave; //Work? + } + } + + settings.setValue(parent->objectName() % "+Geometry", fileDialog.saveGeometry()); + settings.setValue("Directory", fileDialog.directory().absolutePath()); + settings.endGroup(); +} + +QString PictureExport::getPictureFileName(SnapmaticPicture *picture) +{ + return picture->getExportPictureFileName(); +} diff --git a/PictureExport.h b/PictureExport.h index f7aeee9..6ee84a0 100755 --- a/PictureExport.h +++ b/PictureExport.h @@ -1,35 +1,35 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef PICTUREEXPORT_H -#define PICTUREEXPORT_H - -#include "SnapmaticPicture.h" -#include -#include - -class PictureExport -{ -public: - PictureExport(); - static void exportAsPicture(QWidget *parent, SnapmaticPicture *picture); - static void exportAsSnapmatic(QWidget *parent, SnapmaticPicture *picture); - static QString getPictureFileName(SnapmaticPicture *picture); -}; - -#endif // PICTUREEXPORT_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef PICTUREEXPORT_H +#define PICTUREEXPORT_H + +#include "SnapmaticPicture.h" +#include +#include + +class PictureExport +{ +public: + PictureExport(); + static void exportAsPicture(QWidget *parent, SnapmaticPicture *picture); + static void exportAsSnapmatic(QWidget *parent, SnapmaticPicture *picture); + static QString getPictureFileName(SnapmaticPicture *picture); +}; + +#endif // PICTUREEXPORT_H diff --git a/ProfileDatabase.cpp b/ProfileDatabase.cpp index b7bc1c7..9d4e814 100755 --- a/ProfileDatabase.cpp +++ b/ProfileDatabase.cpp @@ -1,61 +1,76 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "ProfileDatabase.h" -#include "StandardPaths.h" -#include "config.h" -#include -#include - -ProfileDatabase::ProfileDatabase(QObject *parent) : QObject(parent) -{ - QDir dir; - dir.mkpath(StandardPaths::dataLocation()); - dir.setPath(StandardPaths::dataLocation()); - QString dirPath = dir.absolutePath(); - QString defaultConfPath = dirPath + QDir::separator() + "players.ini"; - - QSettings confPathSettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); - confPathSettings.beginGroup("Database"); - QString confPathFile = confPathSettings.value("Players", defaultConfPath).toString(); - confPathSettings.endGroup(); - - profileDB = new QSettings(confPathFile, QSettings::IniFormat); - profileDB->beginGroup("Players"); -} - -ProfileDatabase::~ProfileDatabase() -{ - profileDB->endGroup(); - delete profileDB; -} - -QStringList ProfileDatabase::getPlayers() -{ - return profileDB->childKeys(); -} - -QString ProfileDatabase::getPlayerName(int playerID) -{ - return profileDB->value(QString::number(playerID), playerID).toString(); -} - -void ProfileDatabase::setPlayerName(int playerID, QString playerName) -{ - profileDB->setValue(QString::number(playerID), playerName); -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "ProfileDatabase.h" +#include "StandardPaths.h" +#include "config.h" +#include +#include +#include +#include +#include + +ProfileDatabase::ProfileDatabase(QObject *parent) : QObject(parent) +{ + QDir dir; + dir.mkpath(StandardPaths::dataLocation()); + dir.setPath(StandardPaths::dataLocation()); + QString dirPath = dir.absolutePath(); + QString defaultConfPath = dirPath % QDir::separator() % "players.ini"; + + QSettings confPathSettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + confPathSettings.beginGroup("Database"); + QString confPathFile = confPathSettings.value("Players", defaultConfPath).toString(); + confPathSettings.endGroup(); + + profileDB = new QSettings(confPathFile, QSettings::IniFormat); + profileDB->beginGroup("Players"); +} + +ProfileDatabase::~ProfileDatabase() +{ + profileDB->endGroup(); + delete profileDB; +} + +QStringList ProfileDatabase::getPlayers() +{ + QMutexLocker locker(&mutex); +#ifdef GTA5SYNC_DEBUG + qDebug() << "getPlayers"; +#endif + return profileDB->childKeys(); +} + +QString ProfileDatabase::getPlayerName(int playerID) +{ + QMutexLocker locker(&mutex); +#ifdef GTA5SYNC_DEBUG + qDebug() << "getPlayerName" << playerID; +#endif + return profileDB->value(QString::number(playerID), playerID).toString(); +} + +void ProfileDatabase::setPlayerName(int playerID, QString playerName) +{ + QMutexLocker locker(&mutex); +#ifdef GTA5SYNC_DEBUG + qDebug() << "setPlayerName" << playerID << playerName; +#endif + profileDB->setValue(QString::number(playerID), playerName); +} diff --git a/ProfileDatabase.h b/ProfileDatabase.h index b92fb4f..7a1fbd8 100755 --- a/ProfileDatabase.h +++ b/ProfileDatabase.h @@ -1,43 +1,45 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef PROFILEDATABASE_H -#define PROFILEDATABASE_H - -#include -#include -#include - -class ProfileDatabase : public QObject -{ - Q_OBJECT -public: - explicit ProfileDatabase(QObject *parent = 0); - QString getPlayerName(int playerID); - QStringList getPlayers(); - ~ProfileDatabase(); - -private: - QSettings *profileDB; - -public slots: - void setPlayerName(int playerID, QString playerName); - -}; - -#endif // PROFILEDATABASE_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef PROFILEDATABASE_H +#define PROFILEDATABASE_H + +#include +#include +#include +#include + +class ProfileDatabase : public QObject +{ + Q_OBJECT +public: + explicit ProfileDatabase(QObject *parent = 0); + QString getPlayerName(int playerID); + QStringList getPlayers(); + ~ProfileDatabase(); + +private: + mutable QMutex mutex; + QSettings *profileDB; + +public slots: + void setPlayerName(int playerID, QString playerName); + +}; + +#endif // PROFILEDATABASE_H diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 51e8cc0..1507a90 100755 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -64,13 +65,14 @@ ProfileInterface::ProfileInterface(ProfileDatabase *profileDB, CrewDatabase *cre enabledPicStr = tr("Enabled pictures: %1 of %2"); selectedWidgts = 0; profileFolder = ""; - profileLoader = 0; - saSpacerItem = 0; + contextMenuOpened = false; + isProfileLoaded = false; + previousWidget = nullptr; + profileLoader = nullptr; + saSpacerItem = nullptr; - QPalette palette; - QColor baseColor = palette.base().color(); - ui->labVersion->setText(ui->labVersion->text().arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER)); - ui->saProfile->setStyleSheet(QString("QWidget#saProfileContent{background-color: rgb(%1, %2, %3)}").arg(QString::number(baseColor.red()),QString::number(baseColor.green()),QString::number(baseColor.blue()))); + updatePalette(); + ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER)); ui->saProfileContent->setFilesMode(true); if (QIcon::hasThemeIcon("dialog-close")) @@ -87,6 +89,9 @@ ProfileInterface::ProfileInterface(ProfileDatabase *profileDB, CrewDatabase *cre ui->hlButtons->setSpacing(6 * screenRatio); ui->hlButtons->setContentsMargins(9 * screenRatio, 15 * screenRatio, 15 * screenRatio, 17 * screenRatio); #endif + + setMouseTracking(true); + installEventFilter(this); } ProfileInterface::~ProfileInterface() @@ -94,6 +99,8 @@ ProfileInterface::~ProfileInterface() foreach(ProfileWidget *widget, widgets.keys()) { widgets.remove(widget); + widget->removeEventFilter(this); + widget->disconnect(); delete widget; } foreach(SavegameData *savegame, savegames) @@ -138,6 +145,8 @@ void ProfileInterface::savegameLoaded(SavegameData *savegame, QString savegamePa SavegameWidget *sgdWidget = new SavegameWidget(this); sgdWidget->setSavegameData(savegame, savegamePath); sgdWidget->setContentMode(contentMode); + sgdWidget->setMouseTracking(true); + sgdWidget->installEventFilter(this); widgets[sgdWidget] = "SGD" % QFileInfo(savegamePath).fileName(); savegames += savegame; if (selectedWidgts != 0 || contentMode == 2) { sgdWidget->setSelectionMode(true); } @@ -160,6 +169,8 @@ void ProfileInterface::pictureLoaded(SnapmaticPicture *picture, bool inserted) SnapmaticWidget *picWidget = new SnapmaticWidget(profileDB, crewDB, threadDB, this); picWidget->setSnapmaticPicture(picture); picWidget->setContentMode(contentMode); + picWidget->setMouseTracking(true); + picWidget->installEventFilter(this); widgets[picWidget] = "PIC" % picture->getPictureSortStr(); pictures += picture; if (selectedWidgts != 0 || contentMode == 2) { picWidget->setSelectionMode(true); } @@ -183,7 +194,7 @@ void ProfileInterface::loadingProgress(int value, int maximum) void ProfileInterface::insertSnapmaticIPI(QWidget *widget) { - ProfileWidget *proWidget = (ProfileWidget*)widget; + ProfileWidget *proWidget = qobject_cast(widget); if (widgets.contains(proWidget)) { QString widgetKey = widgets[proWidget]; @@ -204,7 +215,7 @@ void ProfileInterface::insertSnapmaticIPI(QWidget *widget) void ProfileInterface::insertSavegameIPI(QWidget *widget) { - ProfileWidget *proWidget = (ProfileWidget*)widget; + ProfileWidget *proWidget = qobject_cast(widget); if (widgets.contains(proWidget)) { QString widgetKey = widgets[proWidget]; @@ -221,8 +232,8 @@ void ProfileInterface::insertSavegameIPI(QWidget *widget) void ProfileInterface::dialogNextPictureRequested(QWidget *dialog) { - PictureDialog *picDialog = (PictureDialog*)dialog; - ProfileWidget *proWidget = (ProfileWidget*)sender(); + PictureDialog *picDialog = qobject_cast(dialog); + ProfileWidget *proWidget = qobject_cast(sender()); if (widgets.contains(proWidget)) { QString widgetKey = widgets[proWidget]; @@ -256,8 +267,8 @@ void ProfileInterface::dialogNextPictureRequested(QWidget *dialog) void ProfileInterface::dialogPreviousPictureRequested(QWidget *dialog) { - PictureDialog *picDialog = (PictureDialog*)dialog; - ProfileWidget *proWidget = (ProfileWidget*)sender(); + PictureDialog *picDialog = qobject_cast(dialog); + ProfileWidget *proWidget = qobject_cast(sender()); if (widgets.contains(proWidget)) { QString widgetKey = widgets[proWidget]; @@ -324,12 +335,13 @@ void ProfileInterface::profileLoaded_p() ui->swProfile->setCurrentWidget(ui->pageProfile); ui->cmdCloseProfile->setEnabled(true); ui->cmdImport->setEnabled(true); + isProfileLoaded = true; emit profileLoaded(); } void ProfileInterface::savegameDeleted_event() { - savegameDeleted((SavegameWidget*)sender(), true); + savegameDeleted(qobject_cast(sender()), true); } void ProfileInterface::savegameDeleted(SavegameWidget *sgdWidget, bool isRemoteEmited) @@ -338,13 +350,21 @@ void ProfileInterface::savegameDeleted(SavegameWidget *sgdWidget, bool isRemoteE if (sgdWidget->isSelected()) { sgdWidget->setSelected(false); } widgets.remove(sgdWidget); + sgdWidget->removeEventFilter(this); + if (sgdWidget == previousWidget) + { + previousWidget = nullptr; + } + // Deleting when the widget did send a event cause a crash if (isRemoteEmited) { + sgdWidget->disconnect(); sgdWidget->deleteLater(); } else { + sgdWidget->disconnect(); delete sgdWidget; } @@ -354,7 +374,7 @@ void ProfileInterface::savegameDeleted(SavegameWidget *sgdWidget, bool isRemoteE void ProfileInterface::pictureDeleted_event() { - pictureDeleted((SnapmaticWidget*)sender(), true); + pictureDeleted(qobject_cast(sender()), true); } void ProfileInterface::pictureDeleted(SnapmaticWidget *picWidget, bool isRemoteEmited) @@ -363,13 +383,21 @@ void ProfileInterface::pictureDeleted(SnapmaticWidget *picWidget, bool isRemoteE if (picWidget->isSelected()) { picWidget->setSelected(false); } widgets.remove(picWidget); + picWidget->removeEventFilter(this); + if (picWidget == previousWidget) + { + previousWidget = nullptr; + } + // Deleting when the widget did send a event cause a crash if (isRemoteEmited) { + picWidget->disconnect(); picWidget->deleteLater(); } else { + picWidget->disconnect(); delete picWidget; } @@ -398,12 +426,24 @@ fileDialogPreOpen: //Work? fileDialog.setWindowTitle(tr("Import...")); fileDialog.setLabelText(QFileDialog::Accept, tr("Import")); + // Getting readable Image formats + QString imageFormatsStr = " "; + foreach(const QByteArray &imageFormat, QImageReader::supportedImageFormats()) + { + imageFormatsStr += QString("*.") % QString::fromUtf8(imageFormat).toLower() % " "; + } + QString importableFormatsStr = QString("*.g5e SGTA* PGTA*"); + if (!imageFormatsStr.trimmed().isEmpty()) + { + importableFormatsStr = QString("*.g5e%1SGTA* PGTA*").arg(imageFormatsStr); + } + QStringList filters; - filters << tr("Importable files (*.g5e *.jpg *.png SGTA* PGTA*)"); + filters << tr("Importable files (%1)").arg(importableFormatsStr); filters << tr("GTA V Export (*.g5e)"); filters << tr("Savegames files (SGTA*)"); filters << tr("Snapmatic pictures (PGTA*)"); - filters << tr("All image files (*.jpg *.png)"); + filters << tr("All image files (%1)").arg(imageFormatsStr.trimmed()); filters << tr("All files (**)"); fileDialog.setNameFilters(filters); @@ -520,7 +560,7 @@ bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) return false; } } - else if(selectedFileName.right(4) == ".jpg" || selectedFileName.right(4) == ".png") + else if(isSupportedImageFile(selectedFileName)) { SnapmaticPicture *picture = new SnapmaticPicture(":/template/template.g5e"); if (picture->readingPicture(true, false, true, false)) @@ -631,6 +671,7 @@ bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) snapmaticImageReader.setDevice(&snapmaticFile); if (!snapmaticImageReader.read(&snapmaticImage)) { + QMessageBox::warning(this, tr("Import"), tr("Can't import %1 because file can't be parsed properly").arg("\""+selectedFileName+"\"")); delete picture; return false; } @@ -640,7 +681,7 @@ bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) importDialog->setModal(true); importDialog->show(); importDialog->exec(); - if (importDialog->isDoImport()) + if (importDialog->isImportAgreed()) { if (picture->setImage(importDialog->image())) { @@ -705,9 +746,13 @@ bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) } else { - delete savegame; +#ifdef GTA5SYNC_DEBUG + qDebug() << "ImportError SnapmaticPicture" << picture->getLastStep(); + qDebug() << "ImportError SavegameData" << savegame->getLastStep(); +#endif delete picture; - if (notMultiple) QMessageBox::warning(this, tr("Import"), tr("Can't import %1 because of not valid file format").arg("\""+selectedFileName+"\"")); + delete savegame; + if (notMultiple) QMessageBox::warning(this, tr("Import"), tr("Can't import %1 because file format can't be detected").arg("\""+selectedFileName+"\"")); return false; } } @@ -738,7 +783,7 @@ bool ProfileInterface::importSnapmaticPicture(SnapmaticPicture *picture, bool wa if (warn) QMessageBox::warning(this, tr("Import"), tr("Failed to import the Snapmatic picture, the picture is already in the game")); return false; } - else if (picture->exportPicture(profileFolder % QDir::separator() % adjustedFileName, "PGTA")) + else if (picture->exportPicture(profileFolder % QDir::separator() % adjustedFileName, SnapmaticFormat::PGTA_Format)) { picture->setPicFilePath(profileFolder % QDir::separator() % adjustedFileName); pictureLoaded(picture, true); @@ -914,8 +959,10 @@ void ProfileInterface::exportSelected() } else { - pictureExportEnabled = true; - pictureCopyEnabled = true; + // Don't export anymore when any Cancel button got clicked + settings.endGroup(); + settings.endGroup(); + return; } } @@ -934,7 +981,7 @@ void ProfileInterface::exportSelected() QProgressDialog pbDialog(this); pbDialog.setWindowFlags(pbDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint); pbDialog.setWindowTitle(tr("Export selected...")); - pbDialog.setLabelText(tr("Initializing export...")); + pbDialog.setLabelText(tr("Initialising export...")); pbDialog.setRange(0, exportCount); QList pbBtn = pbDialog.findChildren(); @@ -1003,7 +1050,7 @@ void ProfileInterface::deleteSelected() { if (widget->getWidgetType() == "SnapmaticWidget") { - SnapmaticWidget *picWidget = (SnapmaticWidget*)widget; + SnapmaticWidget *picWidget = qobject_cast(widget); if (picWidget->getPicture()->deletePicFile()) { pictureDeleted(picWidget); @@ -1011,7 +1058,7 @@ void ProfileInterface::deleteSelected() } else if (widget->getWidgetType() == "SavegameWidget") { - SavegameWidget *sgdWidget = (SavegameWidget*)widget; + SavegameWidget *sgdWidget = qobject_cast(widget); SavegameData *savegame = sgdWidget->getSavegame(); QString fileName = savegame->getSavegameFileName(); if (!QFile::exists(fileName) || QFile::remove(fileName)) @@ -1038,9 +1085,15 @@ void ProfileInterface::importFiles() on_cmdImport_clicked(); } -void ProfileInterface::settingsApplied(int _contentMode, QString language) +void ProfileInterface::settingsApplied(int _contentMode, QString _language) { - Q_UNUSED(language) + bool translationUpdated = false; + if (language != _language) + { + retranslateUi(); + language = _language; + translationUpdated = true; + } contentMode = _contentMode; if (contentMode == 2) @@ -1049,6 +1102,7 @@ void ProfileInterface::settingsApplied(int _contentMode, QString language) { widget->setSelectionMode(true); widget->setContentMode(contentMode); + if (translationUpdated) widget->retranslate(); } } else @@ -1060,6 +1114,7 @@ void ProfileInterface::settingsApplied(int _contentMode, QString language) widget->setSelectionMode(false); } widget->setContentMode(contentMode); + if (translationUpdated) widget->retranslate(); } } } @@ -1073,7 +1128,7 @@ void ProfileInterface::enableSelected() { if (widget->getWidgetType() == "SnapmaticWidget") { - SnapmaticWidget *snapmaticWidget = (SnapmaticWidget*)widget; + SnapmaticWidget *snapmaticWidget = qobject_cast(widget); if (!snapmaticWidget->makePictureVisible()) { fails++; @@ -1092,7 +1147,7 @@ void ProfileInterface::disableSelected() { if (widget->getWidgetType() == "SnapmaticWidget") { - SnapmaticWidget *snapmaticWidget = (SnapmaticWidget*)widget; + SnapmaticWidget *snapmaticWidget = qobject_cast(widget); if (!snapmaticWidget->makePictureHidden()) { fails++; @@ -1109,7 +1164,16 @@ int ProfileInterface::selectedWidgets() void ProfileInterface::contextMenuTriggeredPIC(QContextMenuEvent *ev) { - SnapmaticWidget *picWidget = (SnapmaticWidget*)sender(); + SnapmaticWidget *picWidget = qobject_cast(sender()); + if (picWidget != previousWidget) + { + if (previousWidget != nullptr) + { + previousWidget->setStyleSheet(QLatin1String("")); + } + picWidget->setStyleSheet(QString("QFrame#SnapmaticFrame{background-color: rgb(%1, %2, %3)}QLabel#labPicStr{color: rgb(%4, %5, %6)}").arg(QString::number(highlightBackColor.red()), QString::number(highlightBackColor.green()), QString::number(highlightBackColor.blue()), QString::number(highlightTextColor.red()), QString::number(highlightTextColor.green()), QString::number(highlightTextColor.blue()))); + previousWidget = picWidget; + } QMenu contextMenu(picWidget); QMenu editMenu(SnapmaticWidget::tr("Edi&t"), picWidget); if (picWidget->isHidden()) @@ -1122,8 +1186,8 @@ void ProfileInterface::contextMenuTriggeredPIC(QContextMenuEvent *ev) } editMenu.addAction(SnapmaticWidget::tr("&Edit Properties..."), picWidget, SLOT(editSnapmaticProperties())); QMenu exportMenu(SnapmaticWidget::tr("&Export"), this); - exportMenu.addAction(SnapmaticWidget::tr("Export as &JPG picture..."), picWidget, SLOT(on_cmdExport_clicked())); - exportMenu.addAction(SnapmaticWidget::tr("Export as >A Snapmatic..."), picWidget, SLOT(on_cmdCopy_clicked())); + exportMenu.addAction(SnapmaticWidget::tr("Export as &Picture..."), picWidget, SLOT(on_cmdExport_clicked())); + exportMenu.addAction(SnapmaticWidget::tr("Export as &Snapmatic..."), picWidget, SLOT(on_cmdCopy_clicked())); contextMenu.addAction(SnapmaticWidget::tr("&View"), picWidget, SLOT(on_cmdView_clicked())); contextMenu.addMenu(&editMenu); contextMenu.addMenu(&exportMenu); @@ -1139,12 +1203,24 @@ void ProfileInterface::contextMenuTriggeredPIC(QContextMenuEvent *ev) { contextMenu.addAction(SnapmaticWidget::tr("&Deselect All"), picWidget, SLOT(deselectAllWidgets()), QKeySequence::fromString("Ctrl+D")); } + contextMenuOpened = true; contextMenu.exec(ev->globalPos()); + contextMenuOpened = false; + hoverProfileWidgetCheck(); } void ProfileInterface::contextMenuTriggeredSGD(QContextMenuEvent *ev) { - SavegameWidget *sgdWidget = (SavegameWidget*)sender(); + SavegameWidget *sgdWidget = qobject_cast(sender()); + if (sgdWidget != previousWidget) + { + if (previousWidget != nullptr) + { + previousWidget->setStyleSheet(QLatin1String("")); + } + sgdWidget->setStyleSheet(QString("QFrame#SavegameFrame{background-color: rgb(%1, %2, %3)}QLabel#labSavegameStr{color: rgb(%4, %5, %6)}").arg(QString::number(highlightBackColor.red()), QString::number(highlightBackColor.green()), QString::number(highlightBackColor.blue()), QString::number(highlightTextColor.red()), QString::number(highlightTextColor.green()), QString::number(highlightTextColor.blue()))); + previousWidget = sgdWidget; + } QMenu contextMenu(sgdWidget); contextMenu.addAction(SavegameWidget::tr("&View"), sgdWidget, SLOT(on_cmdView_clicked())); contextMenu.addAction(SavegameWidget::tr("&Export"), sgdWidget, SLOT(on_cmdCopy_clicked())); @@ -1160,7 +1236,10 @@ void ProfileInterface::contextMenuTriggeredSGD(QContextMenuEvent *ev) { contextMenu.addAction(SavegameWidget::tr("&Deselect All"), sgdWidget, SLOT(deselectAllWidgets()), QKeySequence::fromString("Ctrl+D")); } + contextMenuOpened = true; contextMenu.exec(ev->globalPos()); + contextMenuOpened = false; + hoverProfileWidgetCheck(); } void ProfileInterface::on_saProfileContent_dropped(const QMimeData *mimeData) @@ -1187,3 +1266,200 @@ void ProfileInterface::on_saProfileContent_dropped(const QMimeData *mimeData) importFilesProgress(pathList); } } + +void ProfileInterface::retranslateUi() +{ + ui->retranslateUi(this); + ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER)); +} + +bool ProfileInterface::eventFilter(QObject *watched, QEvent *event) +{ + if (event->type() == QEvent::MouseMove) + { + if ((watched->objectName() == "SavegameWidget" || watched->objectName() == "SnapmaticWidget") && isProfileLoaded) + { + ProfileWidget *pWidget = qobject_cast(watched); + if (pWidget->underMouse()) + { + bool styleSheetChanged = false; + if (pWidget->getWidgetType() == "SnapmaticWidget") + { + if (pWidget != previousWidget) + { + pWidget->setStyleSheet(QString("QFrame#SnapmaticFrame{background-color: rgb(%1, %2, %3)}QLabel#labPicStr{color: rgb(%4, %5, %6)}").arg(QString::number(highlightBackColor.red()), QString::number(highlightBackColor.green()), QString::number(highlightBackColor.blue()), QString::number(highlightTextColor.red()), QString::number(highlightTextColor.green()), QString::number(highlightTextColor.blue()))); + styleSheetChanged = true; + } + } + else if (pWidget->getWidgetType() == "SavegameWidget") + { + if (pWidget != previousWidget) + { + pWidget->setStyleSheet(QString("QFrame#SavegameFrame{background-color: rgb(%1, %2, %3)}QLabel#labSavegameStr{color: rgb(%4, %5, %6)}").arg(QString::number(highlightBackColor.red()), QString::number(highlightBackColor.green()), QString::number(highlightBackColor.blue()), QString::number(highlightTextColor.red()), QString::number(highlightTextColor.green()), QString::number(highlightTextColor.blue()))); + styleSheetChanged = true; + } + } + if (styleSheetChanged) + { + if (previousWidget != nullptr) + { + previousWidget->setStyleSheet(QLatin1String("")); + } + previousWidget = pWidget; + } + } + return true; + } + } + else if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease || event->type() == QEvent::WindowActivate) + { + if ((watched->objectName() == "SavegameWidget" || watched->objectName() == "SnapmaticWidget") && isProfileLoaded) + { + ProfileWidget *pWidget = nullptr; + foreach(ProfileWidget *widget, widgets.keys()) + { + QPoint mousePos = widget->mapFromGlobal(QCursor::pos()); + if (widget->rect().contains(mousePos)) + { + pWidget = widget; + break; + } + } + if (pWidget != nullptr) + { + bool styleSheetChanged = false; + if (pWidget->getWidgetType() == "SnapmaticWidget") + { + if (pWidget != previousWidget) + { + pWidget->setStyleSheet(QString("QFrame#SnapmaticFrame{background-color: rgb(%1, %2, %3)}QLabel#labPicStr{color: rgb(%4, %5, %6)}").arg(QString::number(highlightBackColor.red()), QString::number(highlightBackColor.green()), QString::number(highlightBackColor.blue()), QString::number(highlightTextColor.red()), QString::number(highlightTextColor.green()), QString::number(highlightTextColor.blue()))); + styleSheetChanged = true; + } + } + else if (pWidget->getWidgetType() == "SavegameWidget") + { + if (pWidget != previousWidget) + { + pWidget->setStyleSheet(QString("QFrame#SavegameFrame{background-color: rgb(%1, %2, %3)}QLabel#labSavegameStr{color: rgb(%4, %5, %6)}").arg(QString::number(highlightBackColor.red()), QString::number(highlightBackColor.green()), QString::number(highlightBackColor.blue()), QString::number(highlightTextColor.red()), QString::number(highlightTextColor.green()), QString::number(highlightTextColor.blue()))); + styleSheetChanged = true; + } + } + if (styleSheetChanged) + { + if (previousWidget != nullptr) + { + previousWidget->setStyleSheet(QLatin1String("")); + } + previousWidget = pWidget; + } + } + } + } + else if (event->type() == QEvent::WindowDeactivate && isProfileLoaded) + { + if (previousWidget != nullptr) + { + previousWidget->setStyleSheet(QLatin1String("")); + previousWidget = nullptr; + } + } + else if (event->type() == QEvent::Leave && isProfileLoaded && !contextMenuOpened) + { + if (watched->objectName() == "SavegameWidget" || watched->objectName() == "SnapmaticWidget") + { + ProfileWidget *pWidget = qobject_cast(watched); + QPoint mousePos = pWidget->mapFromGlobal(QCursor::pos()); + if (!pWidget->geometry().contains(mousePos)) + { + if (previousWidget != nullptr) + { + previousWidget->setStyleSheet(QLatin1String("")); + previousWidget = nullptr; + } + } + } + } + return false; +} + +void ProfileInterface::hoverProfileWidgetCheck() +{ + ProfileWidget *pWidget = nullptr; + foreach(ProfileWidget *widget, widgets.keys()) + { + if (widget->underMouse()) + { + pWidget = widget; + break; + } + } + if (pWidget != nullptr) + { + bool styleSheetChanged = false; + if (pWidget->getWidgetType() == "SnapmaticWidget") + { + if (pWidget != previousWidget) + { + pWidget->setStyleSheet(QString("QFrame#SnapmaticFrame{background-color: rgb(%1, %2, %3)}QLabel#labPicStr{color: rgb(%4, %5, %6)}").arg(QString::number(highlightBackColor.red()), QString::number(highlightBackColor.green()), QString::number(highlightBackColor.blue()), QString::number(highlightTextColor.red()), QString::number(highlightTextColor.green()), QString::number(highlightTextColor.blue()))); + styleSheetChanged = true; + } + } + else if (pWidget->getWidgetType() == "SavegameWidget") + { + if (pWidget != previousWidget) + { + pWidget->setStyleSheet(QString("QFrame#SavegameFrame{background-color: rgb(%1, %2, %3)}QLabel#labSavegameStr{color: rgb(%4, %5, %6)}").arg(QString::number(highlightBackColor.red()), QString::number(highlightBackColor.green()), QString::number(highlightBackColor.blue()), QString::number(highlightTextColor.red()), QString::number(highlightTextColor.green()), QString::number(highlightTextColor.blue()))); + styleSheetChanged = true; + } + } + if (styleSheetChanged) + { + if (previousWidget != nullptr) + { + previousWidget->setStyleSheet(QLatin1String("")); + } + previousWidget = pWidget; + } + } + else + { + if (previousWidget != nullptr) + { + previousWidget->setStyleSheet(QLatin1String("")); + previousWidget = nullptr; + } + } +} + +void ProfileInterface::updatePalette() +{ + QPalette palette; + QColor baseColor = palette.base().color(); + highlightBackColor = palette.highlight().color(); + highlightTextColor = palette.highlightedText().color(); + ui->saProfile->setStyleSheet(QString("QWidget#saProfileContent{background-color: rgb(%1, %2, %3)}").arg(QString::number(baseColor.red()), QString::number(baseColor.green()), QString::number(baseColor.blue()))); + if (previousWidget != nullptr) + { + if (previousWidget->getWidgetType() == "SnapmaticWidget") + { + previousWidget->setStyleSheet(QString("QFrame#SnapmaticFrame{background-color: rgb(%1, %2, %3)}QLabel#labPicStr{color: rgb(%4, %5, %6)}").arg(QString::number(highlightBackColor.red()), QString::number(highlightBackColor.green()), QString::number(highlightBackColor.blue()), QString::number(highlightTextColor.red()), QString::number(highlightTextColor.green()), QString::number(highlightTextColor.blue()))); + } + else if (previousWidget->getWidgetType() == "SavegameWidget") + { + previousWidget->setStyleSheet(QString("QFrame#SavegameFrame{background-color: rgb(%1, %2, %3)}QLabel#labSavegameStr{color: rgb(%4, %5, %6)}").arg(QString::number(highlightBackColor.red()), QString::number(highlightBackColor.green()), QString::number(highlightBackColor.blue()), QString::number(highlightTextColor.red()), QString::number(highlightTextColor.green()), QString::number(highlightTextColor.blue()))); + } + } +} + +bool ProfileInterface::isSupportedImageFile(QString selectedFileName) +{ + foreach(const QByteArray &imageFormat, QImageReader::supportedImageFormats()) + { + QString imageFormatStr = QString(".") % QString::fromUtf8(imageFormat).toLower(); + if (selectedFileName.length() >= imageFormatStr.length() && selectedFileName.toLower().right(imageFormatStr.length()) == imageFormatStr) + { + return true; + } + } + return false; +} diff --git a/ProfileInterface.h b/ProfileInterface.h index 9d769e8..a45ed9e 100755 --- a/ProfileInterface.h +++ b/ProfileInterface.h @@ -1,114 +1,127 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef PROFILEINTERFACE_H -#define PROFILEINTERFACE_H - -#include "SnapmaticPicture.h" -#include "SnapmaticWidget.h" -#include "ProfileDatabase.h" -#include "DatabaseThread.h" -#include "SavegameWidget.h" -#include "ProfileLoader.h" -#include "ProfileWidget.h" -#include "ExportThread.h" -#include "SavegameData.h" -#include "CrewDatabase.h" -#include -#include -#include -#include -#include - -namespace Ui { -class ProfileInterface; -} - -class ProfileInterface : public QWidget -{ - Q_OBJECT -public: - explicit ProfileInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent = 0); - void setProfileFolder(QString folder, QString profile); - void settingsApplied(int contentMode, QString language); - void setupProfileInterface(); - void disableSelected(); - void enableSelected(); - int selectedWidgets(); - ~ProfileInterface(); - -public slots: - void contextMenuTriggeredPIC(QContextMenuEvent* ev); - void contextMenuTriggeredSGD(QContextMenuEvent* ev); - void selectAllWidgets(); - void deselectAllWidgets(); - void exportSelected(); - void deleteSelected(); - void importFiles(); - -private slots: - void on_cmdCloseProfile_clicked(); - void on_cmdImport_clicked(); - void pictureLoaded_event(SnapmaticPicture *picture); - void savegameLoaded_event(SavegameData *savegame, QString savegamePath); - void loadingProgress(int value, int maximum); - void pictureDeleted_event(); - void savegameDeleted_event(); - void profileLoaded_p(); - void profileWidgetSelected(); - void profileWidgetDeselected(); - void dialogNextPictureRequested(QWidget *dialog); - void dialogPreviousPictureRequested(QWidget *dialog); - void on_saProfileContent_dropped(const QMimeData *mimeData); - -private: - ProfileDatabase *profileDB; - CrewDatabase *crewDB; - DatabaseThread *threadDB; - Ui::ProfileInterface *ui; - - ProfileLoader *profileLoader; - QList savegames; - QList pictures; - QMap widgets; - QSpacerItem *saSpacerItem; - QString enabledPicStr; - QString profileFolder; - QString profileName; - QString loadingStr; - int selectedWidgts; - int contentMode; - - bool importFile(QString selectedFile, bool notMultiple); - void importFilesProgress(QStringList selectedFiles); - bool importSnapmaticPicture(SnapmaticPicture *picture, bool warn = true); - bool importSavegameData(SavegameData *savegame, QString sgdPath, bool warn = true); - void pictureLoaded(SnapmaticPicture *picture, bool inserted); - void savegameLoaded(SavegameData *savegame, QString savegamePath, bool inserted); - void savegameDeleted(SavegameWidget *sgdWidget, bool isRemoteEmited = false); - void pictureDeleted(SnapmaticWidget *picWidget, bool isRemoteEmited = false); - void insertSnapmaticIPI(QWidget *widget); - void insertSavegameIPI(QWidget *widget); - void sortingProfileInterface(); - -signals: - void profileLoaded(); - void profileClosed(); -}; - -#endif // PROFILEINTERFACE_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef PROFILEINTERFACE_H +#define PROFILEINTERFACE_H + +#include "SnapmaticPicture.h" +#include "SnapmaticWidget.h" +#include "ProfileDatabase.h" +#include "DatabaseThread.h" +#include "SavegameWidget.h" +#include "ProfileLoader.h" +#include "ProfileWidget.h" +#include "ExportThread.h" +#include "SavegameData.h" +#include "CrewDatabase.h" +#include +#include +#include +#include +#include + +namespace Ui { +class ProfileInterface; +} + +class ProfileInterface : public QWidget +{ + Q_OBJECT +public: + explicit ProfileInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent = 0); + void setProfileFolder(QString folder, QString profile); + void settingsApplied(int contentMode, QString language); + void setupProfileInterface(); + void disableSelected(); + void enableSelected(); + int selectedWidgets(); + void retranslateUi(); + ~ProfileInterface(); + +public slots: + void contextMenuTriggeredPIC(QContextMenuEvent* ev); + void contextMenuTriggeredSGD(QContextMenuEvent* ev); + void hoverProfileWidgetCheck(); + void selectAllWidgets(); + void deselectAllWidgets(); + void exportSelected(); + void deleteSelected(); + void updatePalette(); + void importFiles(); + +private slots: + void on_cmdCloseProfile_clicked(); + void on_cmdImport_clicked(); + void pictureLoaded_event(SnapmaticPicture *picture); + void savegameLoaded_event(SavegameData *savegame, QString savegamePath); + void loadingProgress(int value, int maximum); + void pictureDeleted_event(); + void savegameDeleted_event(); + void profileLoaded_p(); + void profileWidgetSelected(); + void profileWidgetDeselected(); + void dialogNextPictureRequested(QWidget *dialog); + void dialogPreviousPictureRequested(QWidget *dialog); + void on_saProfileContent_dropped(const QMimeData *mimeData); + +protected: + bool eventFilter(QObject *watched, QEvent *event); + +private: + ProfileDatabase *profileDB; + CrewDatabase *crewDB; + DatabaseThread *threadDB; + Ui::ProfileInterface *ui; + + ProfileLoader *profileLoader; + ProfileWidget *previousWidget; + QList savegames; + QList pictures; + QMap widgets; + QSpacerItem *saSpacerItem; + QColor highlightBackColor; + QColor highlightTextColor; + QString enabledPicStr; + QString profileFolder; + QString profileName; + QString loadingStr; + QString language; + bool contextMenuOpened; + bool isProfileLoaded; + int selectedWidgts; + int contentMode; + + bool isSupportedImageFile(QString selectedFileName); + bool importFile(QString selectedFile, bool notMultiple); + void importFilesProgress(QStringList selectedFiles); + bool importSnapmaticPicture(SnapmaticPicture *picture, bool warn = true); + bool importSavegameData(SavegameData *savegame, QString sgdPath, bool warn = true); + void pictureLoaded(SnapmaticPicture *picture, bool inserted); + void savegameLoaded(SavegameData *savegame, QString savegamePath, bool inserted); + void savegameDeleted(SavegameWidget *sgdWidget, bool isRemoteEmited = false); + void pictureDeleted(SnapmaticWidget *picWidget, bool isRemoteEmited = false); + void insertSnapmaticIPI(QWidget *widget); + void insertSavegameIPI(QWidget *widget); + void sortingProfileInterface(); + +signals: + void profileLoaded(); + void profileClosed(); +}; + +#endif // PROFILEINTERFACE_H diff --git a/ProfileInterface.ui b/ProfileInterface.ui index de37b79..066e636 100755 --- a/ProfileInterface.ui +++ b/ProfileInterface.ui @@ -1,244 +1,244 @@ - - - ProfileInterface - - - - 0 - 0 - 400 - 300 - - - - Profile Interface - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 0 - - - - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - Loading file %1 of %2 files - - - Qt::AlignCenter - - - - - - - 0 - - - false - - - - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - true - - - - - 0 - 0 - 398 - 257 - - - - true - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 0 - - - - - - - - - - - - - - - - - - - - - 6 - - - 9 - - - 9 - - - 9 - - - 9 - - - - - %1 %2 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - Import exported file - - - &Import... - - - true - - - - - - - - 0 - 0 - - - - Close profile - - - &Close - - - true - - - - - - - - - - UiModWidget - QWidget -
UiModWidget.h
- 1 - - dropped(QMimeData*) - -
-
- - -
+ + + ProfileInterface + + + + 0 + 0 + 400 + 300 + + + + Profile Interface + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + Loading file %1 of %2 files + + + Qt::AlignCenter + + + + + + + 0 + + + false + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + true + + + + + 0 + 0 + 398 + 257 + + + + true + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + + + + + + + + + + + + + + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + %1 %2 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Import file + + + &Import... + + + true + + + + + + + + 0 + 0 + + + + Close profile + + + &Close + + + true + + + + + + + + + + UiModWidget + QWidget +
UiModWidget.h
+ 1 + + dropped(QMimeData*) + +
+
+ + +
diff --git a/ProfileLoader.cpp b/ProfileLoader.cpp index 73e3941..243721e 100755 --- a/ProfileLoader.cpp +++ b/ProfileLoader.cpp @@ -1,103 +1,106 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "ProfileLoader.h" -#include "SnapmaticPicture.h" -#include "SavegameData.h" -#include "CrewDatabase.h" -#include -#include -#include -#include - -ProfileLoader::ProfileLoader(QString profileFolder, CrewDatabase *crewDB, QObject *parent) : QThread(parent), profileFolder(profileFolder), crewDB(crewDB) -{ - -} - -void ProfileLoader::run() -{ - int curFile = 1; - QDir profileDir; - QList crewList; - profileDir.setPath(profileFolder); - - // Seek pictures and savegames - profileDir.setNameFilters(QStringList("SGTA*")); - QStringList SavegameFiles = profileDir.entryList(QDir::Files | QDir::NoDot, QDir::NoSort); - QStringList BackupFiles = SavegameFiles.filter(".bak", Qt::CaseInsensitive); - profileDir.setNameFilters(QStringList("PGTA*")); - QStringList SnapmaticPics = profileDir.entryList(QDir::Files | QDir::NoDot, QDir::NoSort); - BackupFiles.append(SnapmaticPics.filter(".bak", Qt::CaseInsensitive)); - - SavegameFiles.removeDuplicates(); - SnapmaticPics.removeDuplicates(); - foreach(const QString &BackupFile, BackupFiles) - { - SavegameFiles.removeAll(BackupFile); - SnapmaticPics.removeAll(BackupFile); - } - - int maximumV = SavegameFiles.length() + SnapmaticPics.length(); - - // Loading pictures and savegames - emit loadingProgress(curFile, maximumV); - foreach(const QString &SavegameFile, SavegameFiles) - { - emit loadingProgress(curFile, maximumV); - QString sgdPath = profileFolder + QDir::separator() + SavegameFile; - SavegameData *savegame = new SavegameData(sgdPath); - if (savegame->readingSavegame()) - { - emit savegameLoaded(savegame, sgdPath); - } - curFile++; - } - foreach(const QString &SnapmaticPic, SnapmaticPics) - { - emit loadingProgress(curFile, maximumV); - QString picturePath = profileFolder + QDir::separator() + SnapmaticPic; - SnapmaticPicture *picture = new SnapmaticPicture(picturePath); - if (picture->readingPicture(true, true, true)) - { - emit pictureLoaded(picture); - int crewNumber = picture->getSnapmaticProperties().crewID; - if (!crewList.contains(crewNumber)) - { - crewList.append(crewNumber); - } - } - curFile++; - } - - // adding found crews - foreach(int crewID, crewList) - { - crewDB->addCrew(crewID); - } -} - -void ProfileLoader::preloaded() -{ - -} - -void ProfileLoader::loaded() -{ - -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "ProfileLoader.h" +#include "SnapmaticPicture.h" +#include "SavegameData.h" +#include "CrewDatabase.h" +#include +#include +#include +#include +#include + +ProfileLoader::ProfileLoader(QString profileFolder, CrewDatabase *crewDB, QObject *parent) : QThread(parent), profileFolder(profileFolder), crewDB(crewDB) +{ + +} + +void ProfileLoader::run() +{ + int curFile = 1; + QDir profileDir; + QList crewList; + profileDir.setPath(profileFolder); + + // Seek pictures and savegames + profileDir.setNameFilters(QStringList("SGTA*")); + QStringList SavegameFiles = profileDir.entryList(QDir::Files | QDir::NoDot, QDir::NoSort); + QStringList BackupFiles = SavegameFiles.filter(".bak", Qt::CaseInsensitive); + profileDir.setNameFilters(QStringList("PGTA*")); + QStringList SnapmaticPics = profileDir.entryList(QDir::Files | QDir::NoDot, QDir::NoSort); + BackupFiles += SnapmaticPics.filter(".bak", Qt::CaseInsensitive); + + SavegameFiles.removeDuplicates(); + SnapmaticPics.removeDuplicates(); + foreach(const QString &BackupFile, BackupFiles) + { + SavegameFiles.removeAll(BackupFile); + SnapmaticPics.removeAll(BackupFile); + } + + int maximumV = SavegameFiles.length() + SnapmaticPics.length(); + + // Loading pictures and savegames + emit loadingProgress(curFile, maximumV); + foreach(const QString &SavegameFile, SavegameFiles) + { + emit loadingProgress(curFile, maximumV); + QString sgdPath = profileFolder % QDir::separator() % SavegameFile; + SavegameData *savegame = new SavegameData(sgdPath); + if (savegame->readingSavegame()) + { + emit savegameLoaded(savegame, sgdPath); + } + curFile++; + } + foreach(const QString &SnapmaticPic, SnapmaticPics) + { + emit loadingProgress(curFile, maximumV); + QString picturePath = profileFolder % QDir::separator() % SnapmaticPic; + SnapmaticPicture *picture = new SnapmaticPicture(picturePath); + if (picture->readingPicture(true, true, true)) + { + emit pictureLoaded(picture); + int crewNumber = picture->getSnapmaticProperties().crewID; + if (!crewList.contains(crewNumber)) + { + crewList += crewNumber; + } + } + curFile++; + } + + // adding found crews + crewDB->setAddingCrews(true); + foreach(int crewID, crewList) + { + crewDB->addCrew(crewID); + } + crewDB->setAddingCrews(false); +} + +void ProfileLoader::preloaded() +{ + +} + +void ProfileLoader::loaded() +{ + +} diff --git a/ProfileLoader.h b/ProfileLoader.h index 23c4d77..4de52fe 100755 --- a/ProfileLoader.h +++ b/ProfileLoader.h @@ -1,52 +1,52 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef PROFILELOADER_H -#define PROFILELOADER_H - -#include "SnapmaticPicture.h" -#include "SavegameData.h" -#include "CrewDatabase.h" -#include -#include - -class ProfileLoader : public QThread -{ - Q_OBJECT -public: - explicit ProfileLoader(QString profileFolder, CrewDatabase *crewDB, QObject *parent = 0); - -protected: - void run(); - -private: - QString profileFolder; - CrewDatabase *crewDB; - ProfileLoader *profileLoader; - -private slots: - void preloaded(); - void loaded(); - -signals: - void pictureLoaded(SnapmaticPicture *picture); - void savegameLoaded(SavegameData *savegame, QString savegamePath); - void loadingProgress(int value, int maximum); -}; - -#endif // PROFILELOADER_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef PROFILELOADER_H +#define PROFILELOADER_H + +#include "SnapmaticPicture.h" +#include "SavegameData.h" +#include "CrewDatabase.h" +#include +#include + +class ProfileLoader : public QThread +{ + Q_OBJECT +public: + explicit ProfileLoader(QString profileFolder, CrewDatabase *crewDB, QObject *parent = 0); + +protected: + void run(); + +private: + QString profileFolder; + CrewDatabase *crewDB; + ProfileLoader *profileLoader; + +private slots: + void preloaded(); + void loaded(); + +signals: + void pictureLoaded(SnapmaticPicture *picture); + void savegameLoaded(SavegameData *savegame, QString savegamePath); + void loadingProgress(int value, int maximum); +}; + +#endif // PROFILELOADER_H diff --git a/ProfileWidget.cpp b/ProfileWidget.cpp index 58828ef..09b7a0f 100755 --- a/ProfileWidget.cpp +++ b/ProfileWidget.cpp @@ -1,61 +1,66 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "ProfileWidget.h" -#include - -ProfileWidget::ProfileWidget(QWidget *parent) : QWidget(parent) -{ - contentMode = 0; -} - -ProfileWidget::~ProfileWidget() -{ -} - -bool ProfileWidget::isSelected() -{ - qDebug() << "ProfileWidget::isSelected got used without overwrite"; - return false; -} - -void ProfileWidget::setSelected(bool isSelected) -{ - qDebug() << "ProfileWidget::setSelected got used without overwrite, result" << isSelected; -} - -void ProfileWidget::setSelectionMode(bool selectionMode) -{ - qDebug() << "ProfileWidget::setSelectionMode got used without overwrite, result:" << selectionMode; -} - -QString ProfileWidget::getWidgetType() -{ - qDebug() << "ProfileWidget::getWidgetType got used without overwrite"; - return "ProfileWidget"; -} - -int ProfileWidget::getContentMode() -{ - return contentMode; -} - -void ProfileWidget::setContentMode(int _contentMode) -{ - contentMode = _contentMode; -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "ProfileWidget.h" +#include + +ProfileWidget::ProfileWidget(QWidget *parent) : QWidget(parent) +{ + contentMode = 0; +} + +ProfileWidget::~ProfileWidget() +{ +} + +void ProfileWidget::retranslate() +{ + qDebug() << "ProfileWidget::retranslate got used without overwrite"; +} + +bool ProfileWidget::isSelected() +{ + qDebug() << "ProfileWidget::isSelected got used without overwrite"; + return false; +} + +void ProfileWidget::setSelected(bool isSelected) +{ + qDebug() << "ProfileWidget::setSelected got used without overwrite, result" << isSelected; +} + +void ProfileWidget::setSelectionMode(bool selectionMode) +{ + qDebug() << "ProfileWidget::setSelectionMode got used without overwrite, result:" << selectionMode; +} + +QString ProfileWidget::getWidgetType() +{ + qDebug() << "ProfileWidget::getWidgetType got used without overwrite"; + return "ProfileWidget"; +} + +int ProfileWidget::getContentMode() +{ + return contentMode; +} + +void ProfileWidget::setContentMode(int _contentMode) +{ + contentMode = _contentMode; +} diff --git a/ProfileWidget.h b/ProfileWidget.h index 6fab255..8de7cda 100755 --- a/ProfileWidget.h +++ b/ProfileWidget.h @@ -1,45 +1,46 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef PROFILEWIDGET_H -#define PROFILEWIDGET_H - -#include - -class ProfileWidget : public QWidget -{ - Q_OBJECT -public: - explicit ProfileWidget(QWidget *parent = 0); - virtual void setSelectionMode(bool selectionMode); - virtual void setContentMode(int contentMode); - virtual void setSelected(bool isSelected); - virtual bool isSelected(); - virtual QString getWidgetType(); - virtual int getContentMode(); - ~ProfileWidget(); - -private: - int contentMode; - -signals: - -public slots: -}; - -#endif // PROFILEWIDGET_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef PROFILEWIDGET_H +#define PROFILEWIDGET_H + +#include + +class ProfileWidget : public QWidget +{ + Q_OBJECT +public: + explicit ProfileWidget(QWidget *parent = 0); + virtual void setSelectionMode(bool selectionMode); + virtual void setContentMode(int contentMode); + virtual void setSelected(bool isSelected); + virtual bool isSelected(); + virtual QString getWidgetType(); + virtual int getContentMode(); + virtual void retranslate(); + ~ProfileWidget(); + +private: + int contentMode; + +signals: + +public slots: +}; + +#endif // PROFILEWIDGET_H diff --git a/SavegameCopy.cpp b/SavegameCopy.cpp index fc0e3e0..2bcad1f 100755 --- a/SavegameCopy.cpp +++ b/SavegameCopy.cpp @@ -1,100 +1,100 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "SidebarGenerator.h" -#include "SavegameWidget.h" -#include "SavegameCopy.h" -#include "config.h" -#include -#include -#include - -SavegameCopy::SavegameCopy() -{ - -} - -void SavegameCopy::copySavegame(QWidget *parent, QString sgdPath) -{ - QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); - settings.beginGroup("FileDialogs"); - -fileDialogPreSave: //Work? - QFileInfo sgdFileInfo(sgdPath); - QFileDialog fileDialog(parent); - fileDialog.setFileMode(QFileDialog::AnyFile); - fileDialog.setViewMode(QFileDialog::Detail); - fileDialog.setAcceptMode(QFileDialog::AcceptSave); - fileDialog.setOption(QFileDialog::DontUseNativeDialog, false); - fileDialog.setOption(QFileDialog::DontConfirmOverwrite, true); - fileDialog.setDefaultSuffix(""); - fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); - fileDialog.setWindowTitle(SavegameWidget::tr(("Export Savegame..."))); - fileDialog.setLabelText(QFileDialog::Accept, SavegameWidget::tr("Export")); - - QStringList filters; - filters << SavegameWidget::tr("Savegame files (SGTA*)"); - filters << SavegameWidget::tr("All files (**)"); - fileDialog.setNameFilters(filters); - - QList sidebarUrls = SidebarGenerator::generateSidebarUrls(fileDialog.sidebarUrls()); - - fileDialog.setSidebarUrls(sidebarUrls); - fileDialog.restoreState(settings.value("CopySavegame","").toByteArray()); - fileDialog.selectFile(sgdFileInfo.fileName()); - - if (fileDialog.exec()) - { - QStringList selectedFiles = fileDialog.selectedFiles(); - if (selectedFiles.length() == 1) - { - QString selectedFile = selectedFiles.at(0); - - if (QFile::exists(selectedFile)) - { - if (QMessageBox::Yes == QMessageBox::warning(parent, SavegameWidget::tr("Export Savegame"), SavegameWidget::tr("Overwrite %1 with current Savegame?").arg("\""+selectedFile+"\""), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) - { - if (!QFile::remove(selectedFile)) - { - QMessageBox::warning(parent, SavegameWidget::tr("Export Savegame"), SavegameWidget::tr("Failed to overwrite %1 with current Savegame").arg("\""+selectedFile+"\"")); - goto fileDialogPreSave; //Work? - } - } - else - { - goto fileDialogPreSave; //Work? - } - } - - bool isCopied = QFile::copy(sgdPath, selectedFile); - if (!isCopied) - { - QMessageBox::warning(parent, SavegameWidget::tr("Export Savegame"), SavegameWidget::tr("Failed to export current Savegame")); - goto fileDialogPreSave; //Work? - } - } - else - { - QMessageBox::warning(parent, SavegameWidget::tr("Export Savegame"), SavegameWidget::tr("No valid file is selected")); - goto fileDialogPreSave; //Work? - } - } - - settings.setValue("CopySavegame", fileDialog.saveState()); - settings.endGroup(); -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "SidebarGenerator.h" +#include "SavegameWidget.h" +#include "SavegameCopy.h" +#include "config.h" +#include +#include +#include + +SavegameCopy::SavegameCopy() +{ + +} + +void SavegameCopy::copySavegame(QWidget *parent, QString sgdPath) +{ + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("FileDialogs"); + +fileDialogPreSave: //Work? + QFileInfo sgdFileInfo(sgdPath); + QFileDialog fileDialog(parent); + fileDialog.setFileMode(QFileDialog::AnyFile); + fileDialog.setViewMode(QFileDialog::Detail); + fileDialog.setAcceptMode(QFileDialog::AcceptSave); + fileDialog.setOption(QFileDialog::DontUseNativeDialog, false); + fileDialog.setOption(QFileDialog::DontConfirmOverwrite, true); + fileDialog.setDefaultSuffix(""); + fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); + fileDialog.setWindowTitle(SavegameWidget::tr(("Export Savegame..."))); + fileDialog.setLabelText(QFileDialog::Accept, SavegameWidget::tr("Export")); + + QStringList filters; + filters << SavegameWidget::tr("Savegame files (SGTA*)"); + filters << SavegameWidget::tr("All files (**)"); + fileDialog.setNameFilters(filters); + + QList sidebarUrls = SidebarGenerator::generateSidebarUrls(fileDialog.sidebarUrls()); + + fileDialog.setSidebarUrls(sidebarUrls); + fileDialog.restoreState(settings.value("CopySavegame","").toByteArray()); + fileDialog.selectFile(sgdFileInfo.fileName()); + + if (fileDialog.exec()) + { + QStringList selectedFiles = fileDialog.selectedFiles(); + if (selectedFiles.length() == 1) + { + QString selectedFile = selectedFiles.at(0); + + if (QFile::exists(selectedFile)) + { + if (QMessageBox::Yes == QMessageBox::warning(parent, SavegameWidget::tr("Export Savegame"), SavegameWidget::tr("Overwrite %1 with current Savegame?").arg("\""+selectedFile+"\""), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) + { + if (!QFile::remove(selectedFile)) + { + QMessageBox::warning(parent, SavegameWidget::tr("Export Savegame"), SavegameWidget::tr("Failed to overwrite %1 with current Savegame").arg("\""+selectedFile+"\"")); + goto fileDialogPreSave; //Work? + } + } + else + { + goto fileDialogPreSave; //Work? + } + } + + bool isCopied = QFile::copy(sgdPath, selectedFile); + if (!isCopied) + { + QMessageBox::warning(parent, SavegameWidget::tr("Export Savegame"), SavegameWidget::tr("Failed to export current Savegame")); + goto fileDialogPreSave; //Work? + } + } + else + { + QMessageBox::warning(parent, SavegameWidget::tr("Export Savegame"), SavegameWidget::tr("No valid file is selected")); + goto fileDialogPreSave; //Work? + } + } + + settings.setValue("CopySavegame", fileDialog.saveState()); + settings.endGroup(); +} diff --git a/SavegameCopy.h b/SavegameCopy.h index 1ea5cf6..6447497 100755 --- a/SavegameCopy.h +++ b/SavegameCopy.h @@ -1,32 +1,32 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef SAVEGAMECOPY_H -#define SAVEGAMECOPY_H - -#include -#include - -class SavegameCopy -{ -public: - SavegameCopy(); - static void copySavegame(QWidget *parent, QString sgdPath); -}; - -#endif // SAVEGAMECOPY_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef SAVEGAMECOPY_H +#define SAVEGAMECOPY_H + +#include +#include + +class SavegameCopy +{ +public: + SavegameCopy(); + static void copySavegame(QWidget *parent, QString sgdPath); +}; + +#endif // SAVEGAMECOPY_H diff --git a/SavegameData.cpp b/SavegameData.cpp index b679325..826746a 100755 --- a/SavegameData.cpp +++ b/SavegameData.cpp @@ -1,119 +1,120 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "StringParser.h" -#include "SavegameData.h" -#include -#include -#include -#include - -#define savegameHeaderLength 260 -#define verificationValue QByteArray::fromHex("00000001") - -SavegameData::SavegameData(const QString &fileName, QObject *parent) : QObject(parent), savegameFileName(fileName) -{ - // INIT SAVEGAME - savegameStr = ""; - savegameOk = 0; -} - -bool SavegameData::readingSavegame() -{ - // Start opening file - // lastStep is like currentStep - - QFile *saveFile = new QFile(savegameFileName); - if (!saveFile->open(QFile::ReadOnly)) - { - lastStep = "1;/1,OpenFile," + StringParser::convertDrawStringForLog(savegameFileName); - saveFile->deleteLater(); - delete saveFile; - return false; - } - - // Reading Savegame Header - if (!saveFile->isReadable()) - { - lastStep = "2;/3,ReadingFile," + StringParser::convertDrawStringForLog(savegameFileName) + ",1,NOHEADER"; - saveFile->close(); - saveFile->deleteLater(); - delete saveFile; - return false; - } - QByteArray savegameHeaderLine = saveFile->read(savegameHeaderLength); - if (savegameHeaderLine.left(4) == verificationValue) - { - savegameStr = getSavegameDataString(savegameHeaderLine); - if (savegameStr.length() >= 1) - { - savegameOk = true; - } - } - saveFile->close(); - saveFile->deleteLater(); - delete saveFile; - return savegameOk; -} - -QString SavegameData::getSavegameDataString(const QByteArray &savegameHeader) -{ - QByteArray savegameBytes = savegameHeader.left(savegameHeaderLength); - QList savegameBytesList = savegameBytes.split(char(0x01)); - savegameBytes = savegameBytesList.at(1); - savegameBytesList.clear(); - return StringParser::parseTitleString(savegameBytes, savegameBytes.length()); -} - -bool SavegameData::readingSavegameFromFile(const QString &fileName) -{ - if (fileName != "") - { - savegameFileName = fileName; - return readingSavegame(); - } - else - { - return false; - } -} - -bool SavegameData::isSavegameOk() -{ - return savegameOk; -} - -QString SavegameData::getSavegameFileName() -{ - return savegameFileName; -} - -QString SavegameData::getSavegameStr() -{ - return savegameStr; -} - -QString SavegameData::getLastStep() -{ - return lastStep; -} - -void SavegameData::setSavegameFileName(QString savegameFileName_) -{ - savegameFileName = savegameFileName_; -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "StringParser.h" +#include "SavegameData.h" +#include +#include +#include +#include +#include + +#define savegameHeaderLength 260 +#define verificationValue QByteArray::fromHex("00000001") + +SavegameData::SavegameData(const QString &fileName, QObject *parent) : QObject(parent), savegameFileName(fileName) +{ + // INIT SAVEGAME + savegameStr = ""; + savegameOk = 0; +} + +bool SavegameData::readingSavegame() +{ + // Start opening file + // lastStep is like currentStep + + QFile *saveFile = new QFile(savegameFileName); + if (!saveFile->open(QFile::ReadOnly)) + { + lastStep = "1;/1,OpenFile," % StringParser::convertDrawStringForLog(savegameFileName); + saveFile->deleteLater(); + delete saveFile; + return false; + } + + // Reading Savegame Header + if (!saveFile->isReadable()) + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(savegameFileName) % ",1,NOHEADER"; + saveFile->close(); + saveFile->deleteLater(); + delete saveFile; + return false; + } + QByteArray savegameHeaderLine = saveFile->read(savegameHeaderLength); + if (savegameHeaderLine.left(4) == verificationValue) + { + savegameStr = getSavegameDataString(savegameHeaderLine); + if (savegameStr.length() >= 1) + { + savegameOk = true; + } + } + saveFile->close(); + saveFile->deleteLater(); + delete saveFile; + return savegameOk; +} + +QString SavegameData::getSavegameDataString(const QByteArray &savegameHeader) +{ + QByteArray savegameBytes = savegameHeader.left(savegameHeaderLength); + QList savegameBytesList = savegameBytes.split(char(0x01)); + savegameBytes = savegameBytesList.at(1); + savegameBytesList.clear(); + return StringParser::parseTitleString(savegameBytes, savegameBytes.length()); +} + +bool SavegameData::readingSavegameFromFile(const QString &fileName) +{ + if (fileName != "") + { + savegameFileName = fileName; + return readingSavegame(); + } + else + { + return false; + } +} + +bool SavegameData::isSavegameOk() +{ + return savegameOk; +} + +QString SavegameData::getSavegameFileName() +{ + return savegameFileName; +} + +QString SavegameData::getSavegameStr() +{ + return savegameStr; +} + +QString SavegameData::getLastStep() +{ + return lastStep; +} + +void SavegameData::setSavegameFileName(QString savegameFileName_) +{ + savegameFileName = savegameFileName_; +} diff --git a/SavegameData.h b/SavegameData.h index 20f87b3..bc5cf2f 100755 --- a/SavegameData.h +++ b/SavegameData.h @@ -1,45 +1,45 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef SAVEGAMEDATA_H -#define SAVEGAMEDATA_H - -#include - -class SavegameData : public QObject -{ - Q_OBJECT -public: - explicit SavegameData(const QString &fileName = "", QObject *parent = 0); - bool readingSavegameFromFile(const QString &fileName); - bool readingSavegame(); - bool isSavegameOk(); - QString getLastStep(); - QString getSavegameStr(); - QString getSavegameFileName(); - void setSavegameFileName(QString savegameFileName); - -private: - QString getSavegameDataString(const QByteArray &savegameHeader); - QString savegameFileName; - QString savegameStr; - QString lastStep; - bool savegameOk; -}; - -#endif // SAVEGAMEDATA_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef SAVEGAMEDATA_H +#define SAVEGAMEDATA_H + +#include + +class SavegameData : public QObject +{ + Q_OBJECT +public: + explicit SavegameData(const QString &fileName = "", QObject *parent = 0); + bool readingSavegameFromFile(const QString &fileName); + bool readingSavegame(); + bool isSavegameOk(); + QString getLastStep(); + QString getSavegameStr(); + QString getSavegameFileName(); + void setSavegameFileName(QString savegameFileName); + +private: + QString getSavegameDataString(const QByteArray &savegameHeader); + QString savegameFileName; + QString savegameStr; + QString lastStep; + bool savegameOk; +}; + +#endif // SAVEGAMEDATA_H diff --git a/SavegameDialog.cpp b/SavegameDialog.cpp index 99447ce..a3e52d3 100755 --- a/SavegameDialog.cpp +++ b/SavegameDialog.cpp @@ -1,53 +1,53 @@ -#include "SavegameDialog.h" -#include "ui_SavegameDialog.h" -#include "SavegameCopy.h" -#include "AppEnv.h" -#include - -SavegameDialog::SavegameDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::SavegameDialog) -{ - // Set Window Flags - setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); - - // Setup User Interface - ui->setupUi(this); - savegameLabStr = ui->labSavegameText->text(); - - if (QIcon::hasThemeIcon("dialog-close")) - { - ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); - } - - // DPI calculation - qreal screenRatio = AppEnv::screenRatio(); - resize(400 * screenRatio, 105 * screenRatio); -} - -SavegameDialog::~SavegameDialog() -{ - delete ui; -} - -void SavegameDialog::setSavegameData(SavegameData *savegame, QString savegamePath, bool readOk) -{ - // Showing error if reading error - if (!readOk) - { - QMessageBox::warning(this,tr("Savegame Viewer"),tr("Failed at %1").arg(savegame->getLastStep())); - return; - } - sgdPath = savegamePath; - ui->labSavegameText->setText(savegameLabStr.arg(savegame->getSavegameStr())); -} - -void SavegameDialog::on_cmdClose_clicked() -{ - this->close(); -} - -void SavegameDialog::on_cmdCopy_clicked() -{ - SavegameCopy::copySavegame(this, sgdPath); -} +#include "SavegameDialog.h" +#include "ui_SavegameDialog.h" +#include "SavegameCopy.h" +#include "AppEnv.h" +#include + +SavegameDialog::SavegameDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::SavegameDialog) +{ + // Set Window Flags + setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); + + // Setup User Interface + ui->setupUi(this); + savegameLabStr = ui->labSavegameText->text(); + + if (QIcon::hasThemeIcon("dialog-close")) + { + ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); + } + + // DPI calculation + qreal screenRatio = AppEnv::screenRatio(); + resize(400 * screenRatio, 105 * screenRatio); +} + +SavegameDialog::~SavegameDialog() +{ + delete ui; +} + +void SavegameDialog::setSavegameData(SavegameData *savegame, QString savegamePath, bool readOk) +{ + // Showing error if reading error + if (!readOk) + { + QMessageBox::warning(this,tr("Savegame Viewer"),tr("Failed at %1").arg(savegame->getLastStep())); + return; + } + sgdPath = savegamePath; + ui->labSavegameText->setText(savegameLabStr.arg(savegame->getSavegameStr())); +} + +void SavegameDialog::on_cmdClose_clicked() +{ + this->close(); +} + +void SavegameDialog::on_cmdCopy_clicked() +{ + SavegameCopy::copySavegame(this, sgdPath); +} diff --git a/SavegameDialog.h b/SavegameDialog.h index 0b3a900..9fe8f35 100755 --- a/SavegameDialog.h +++ b/SavegameDialog.h @@ -1,29 +1,29 @@ -#ifndef SAVEGAMEDIALOG_H -#define SAVEGAMEDIALOG_H - -#include "SavegameData.h" -#include - -namespace Ui { -class SavegameDialog; -} - -class SavegameDialog : public QDialog -{ - Q_OBJECT -public: - explicit SavegameDialog(QWidget *parent = 0); - void setSavegameData(SavegameData *savegame, QString sgdPath, bool readOk); - ~SavegameDialog(); - -private slots: - void on_cmdClose_clicked(); - void on_cmdCopy_clicked(); - -private: - Ui::SavegameDialog *ui; - QString savegameLabStr; - QString sgdPath; -}; - -#endif // SAVEGAMEDIALOG_H +#ifndef SAVEGAMEDIALOG_H +#define SAVEGAMEDIALOG_H + +#include "SavegameData.h" +#include + +namespace Ui { +class SavegameDialog; +} + +class SavegameDialog : public QDialog +{ + Q_OBJECT +public: + explicit SavegameDialog(QWidget *parent = 0); + void setSavegameData(SavegameData *savegame, QString sgdPath, bool readOk); + ~SavegameDialog(); + +private slots: + void on_cmdClose_clicked(); + void on_cmdCopy_clicked(); + +private: + Ui::SavegameDialog *ui; + QString savegameLabStr; + QString sgdPath; +}; + +#endif // SAVEGAMEDIALOG_H diff --git a/SavegameDialog.ui b/SavegameDialog.ui index a0a5e52..36b3b9b 100755 --- a/SavegameDialog.ui +++ b/SavegameDialog.ui @@ -1,86 +1,93 @@ - - - SavegameDialog - - - - 0 - 0 - 400 - 105 - - - - Savegame Viewer - - - true - - - - - - - 0 - 0 - - - - <span style=" font-weight:600;">Savegame</span><br><br>%1 - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - &Export - - - - - - - - 0 - 0 - - - - &Close - - - - - - - - - - + + + SavegameDialog + + + + 0 + 0 + 400 + 105 + + + + Savegame Viewer + + + true + + + + + + <span style=" font-weight:600;">Savegame</span><br><br>%1 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + &Export + + + + + + + + 0 + 0 + + + + &Close + + + + + + + + + + diff --git a/SavegameWidget.cpp b/SavegameWidget.cpp index 6783bf9..ce21f46 100755 --- a/SavegameWidget.cpp +++ b/SavegameWidget.cpp @@ -1,261 +1,264 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "SavegameWidget.h" -#include "ui_SavegameWidget.h" -#include "SidebarGenerator.h" -#include "SavegameDialog.h" -#include "StandardPaths.h" -#include "SavegameData.h" -#include "SavegameCopy.h" -#include "AppEnv.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -SavegameWidget::SavegameWidget(QWidget *parent) : - ProfileWidget(parent), - ui(new Ui::SavegameWidget) -{ - ui->setupUi(this); - ui->cmdCopy->setVisible(false); - ui->cmdView->setVisible(false); - ui->cmdDelete->setVisible(false); - ui->cbSelected->setVisible(false); - - qreal screenRatio = AppEnv::screenRatio(); - ui->labSavegamePic->setFixedSize(48 * screenRatio, 27 * screenRatio); - - QPixmap savegamePixmap(":/img/savegame.png"); - if (screenRatio != 1) savegamePixmap = savegamePixmap.scaledToHeight(ui->labSavegamePic->height(), Qt::SmoothTransformation); - ui->labSavegamePic->setPixmap(savegamePixmap); - - QString exportSavegameStr = tr("Export Savegame..."); - Q_UNUSED(exportSavegameStr) - - QPalette palette; - highlightBackColor = palette.highlight().color(); - highlightTextColor = palette.highlightedText().color(); - - labelAutosaveStr = tr("AUTOSAVE - %1\n%2"); - labelSaveStr = tr("SAVE %3 - %1\n%2"); - snwgt = parent; - sgdPath = ""; - sgdStr = ""; - sgdata = 0; - - installEventFilter(this); -} - -SavegameWidget::~SavegameWidget() -{ - delete ui; -} - -bool SavegameWidget::eventFilter(QObject *obj, QEvent *ev) -{ - if (obj == this) - { - if (ev->type() == QEvent::Enter) - { - setStyleSheet(QString("QFrame#SavegameFrame{background-color: rgb(%1, %2, %3)}QLabel#labSavegameStr{color: rgb(%4, %5, %6)}").arg(QString::number(highlightBackColor.red()), QString::number(highlightBackColor.green()), QString::number(highlightBackColor.blue()), QString::number(highlightTextColor.red()), QString::number(highlightTextColor.green()), QString::number(highlightTextColor.blue()))); - return true; - } - else if(ev->type() == QEvent::Leave) - { - setStyleSheet(""); - return true; - } - } - return false; -} - -void SavegameWidget::setSavegameData(SavegameData *savegame, QString savegamePath) -{ - // BETA CODE - bool validNumber; - QString savegameName = tr("WRONG FORMAT"); - QString savegameDate = tr("WRONG FORMAT"); - QString savegameString = savegame->getSavegameStr(); - QString fileName = QFileInfo(savegame->getSavegameFileName()).fileName(); - QStringList savegameNDL = QString(savegameString).split(" - "); - if (savegameNDL.length() >= 2) - { - savegameDate = savegameNDL.at(savegameNDL.length() - 1); - savegameName = QString(savegameString).remove(savegameString.length() - savegameDate.length() - 3, savegameDate.length() + 3); - } - int savegameNumber = QString(fileName).remove(0,5).toInt(&validNumber) + 1; - if (validNumber) - { - if (savegameNumber == 16) - { - ui->labSavegameStr->setText(labelAutosaveStr.arg(savegameDate, savegameName)); - } - else - { - ui->labSavegameStr->setText(labelSaveStr.arg(savegameDate, savegameName, QString::number(savegameNumber))); - } - } - else - { - ui->labSavegameStr->setText(labelSaveStr.arg(savegameDate, savegameName, tr("UNKNOWN"))); - } - sgdStr = savegameString; - sgdPath = savegamePath; - sgdata = savegame; -} - -void SavegameWidget::on_cmdCopy_clicked() -{ - SavegameCopy::copySavegame(this, sgdPath); -} - -void SavegameWidget::on_cmdDelete_clicked() -{ - int uchoice = QMessageBox::question(this, tr("Delete savegame"), tr("Are you sure to delete %1 from your savegames?").arg("\""+sgdStr+"\""), QMessageBox::No | QMessageBox::Yes, QMessageBox::No); - if (uchoice == QMessageBox::Yes) - { - if (!QFile::exists(sgdPath)) - { - emit savegameDeleted(); - } - else if(QFile::remove(sgdPath)) - { - emit savegameDeleted(); - } - else - { - QMessageBox::warning(this, tr("Delete savegame"), tr("Failed at deleting %1 from your savegames").arg("\""+sgdStr+"\"")); - } - } -} - -void SavegameWidget::on_cmdView_clicked() -{ - SavegameDialog *savegameDialog = new SavegameDialog(this); - savegameDialog->setSavegameData(sgdata, sgdPath, true); - savegameDialog->setModal(true); -#ifdef Q_OS_ANDROID - // Android ... - savegameDialog->showMaximized(); -#else - savegameDialog->show(); -#endif - savegameDialog->exec(); - delete savegameDialog; -} - -void SavegameWidget::mousePressEvent(QMouseEvent *ev) -{ - ProfileWidget::mousePressEvent(ev); -} - -void SavegameWidget::mouseReleaseEvent(QMouseEvent *ev) -{ - ProfileWidget::mouseReleaseEvent(ev); - if (ui->cbSelected->isVisible()) - { - if (rect().contains(ev->pos()) && ev->button() == Qt::LeftButton) - { - ui->cbSelected->setChecked(!ui->cbSelected->isChecked()); - } - } - else - { - if (getContentMode() == 0 && rect().contains(ev->pos()) && ev->button() == Qt::LeftButton) - { - on_cmdView_clicked(); - } - } -} - -void SavegameWidget::mouseDoubleClickEvent(QMouseEvent *ev) -{ - ProfileWidget::mouseDoubleClickEvent(ev); - - if (!ui->cbSelected->isVisible() && getContentMode() == 1 && ev->button() == Qt::LeftButton) - { - on_cmdView_clicked(); - } -} - -void SavegameWidget::setSelected(bool isSelected) -{ - ui->cbSelected->setChecked(isSelected); -} - -void SavegameWidget::savegameSelected() -{ - setSelected(!ui->cbSelected->isChecked()); -} - -void SavegameWidget::contextMenuEvent(QContextMenuEvent *ev) -{ - emit contextMenuTriggered(ev); -} - -void SavegameWidget::on_cbSelected_stateChanged(int arg1) -{ - if (arg1 == Qt::Checked) - { - emit widgetSelected(); - } - else if (arg1 == Qt::Unchecked) - { - emit widgetDeselected(); - } -} - -bool SavegameWidget::isSelected() -{ - return ui->cbSelected->isChecked(); -} - -void SavegameWidget::setSelectionMode(bool selectionMode) -{ - ui->cbSelected->setVisible(selectionMode); -} - -void SavegameWidget::selectAllWidgets() -{ - emit allWidgetsSelected(); -} - -void SavegameWidget::deselectAllWidgets() -{ - emit allWidgetsDeselected(); -} - -SavegameData* SavegameWidget::getSavegame() -{ - return sgdata; -} - -QString SavegameWidget::getWidgetType() -{ - return "SavegameWidget"; -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "SavegameWidget.h" +#include "ui_SavegameWidget.h" +#include "SidebarGenerator.h" +#include "SavegameDialog.h" +#include "StandardPaths.h" +#include "SavegameData.h" +#include "SavegameCopy.h" +#include "AppEnv.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +SavegameWidget::SavegameWidget(QWidget *parent) : + ProfileWidget(parent), + ui(new Ui::SavegameWidget) +{ + ui->setupUi(this); + ui->cmdCopy->setVisible(false); + ui->cmdView->setVisible(false); + ui->cmdDelete->setVisible(false); + ui->cbSelected->setVisible(false); + + qreal screenRatio = AppEnv::screenRatio(); + ui->labSavegamePic->setFixedSize(48 * screenRatio, 27 * screenRatio); + + QPixmap savegamePixmap(":/img/savegame.png"); + if (screenRatio != 1) savegamePixmap = savegamePixmap.scaledToHeight(ui->labSavegamePic->height(), Qt::SmoothTransformation); + ui->labSavegamePic->setPixmap(savegamePixmap); + + QString exportSavegameStr = tr("Export Savegame..."); + Q_UNUSED(exportSavegameStr) + + labelAutosaveStr = tr("AUTOSAVE - %1\n%2"); + labelSaveStr = tr("SAVE %3 - %1\n%2"); + + ui->SavegameFrame->setMouseTracking(true); + ui->labSavegamePic->setMouseTracking(true); + ui->labSavegameStr->setMouseTracking(true); + ui->cbSelected->setMouseTracking(true); + sgdata = nullptr; +} + +SavegameWidget::~SavegameWidget() +{ + delete ui; +} + +void SavegameWidget::setSavegameData(SavegameData *savegame, QString savegamePath) +{ + // BETA CODE + QString savegameString = savegame->getSavegameStr(); + QString fileName = QFileInfo(savegame->getSavegameFileName()).fileName(); + renderString(savegameString, fileName); + sgdStr = savegameString; + sgdPath = savegamePath; + sgdata = savegame; +} + +void SavegameWidget::renderString(const QString &savegameString, const QString &fileName) +{ + bool validNumber; + QString savegameName = tr("WRONG FORMAT"); + QString savegameDate = tr("WRONG FORMAT"); + QStringList savegameNDL = QString(savegameString).split(" - "); + if (savegameNDL.length() >= 2) + { + savegameDate = savegameNDL.at(savegameNDL.length() - 1); + savegameName = QString(savegameString).remove(savegameString.length() - savegameDate.length() - 3, savegameDate.length() + 3); + } + int savegameNumber = QString(fileName).remove(0,5).toInt(&validNumber) + 1; + if (validNumber) + { + if (savegameNumber == 16) + { + ui->labSavegameStr->setText(labelAutosaveStr.arg(savegameDate, savegameName)); + } + else + { + ui->labSavegameStr->setText(labelSaveStr.arg(savegameDate, savegameName, QString::number(savegameNumber))); + } + } + else + { + ui->labSavegameStr->setText(labelSaveStr.arg(savegameDate, savegameName, tr("UNKNOWN"))); + } +} + +void SavegameWidget::retranslate() +{ + labelAutosaveStr = tr("AUTOSAVE - %1\n%2"); + labelSaveStr = tr("SAVE %3 - %1\n%2"); + + QString fileName = QFileInfo(sgdata->getSavegameFileName()).fileName(); + renderString(sgdStr, fileName); +} + +void SavegameWidget::on_cmdCopy_clicked() +{ + SavegameCopy::copySavegame(this, sgdPath); +} + +void SavegameWidget::on_cmdDelete_clicked() +{ + int uchoice = QMessageBox::question(this, tr("Delete savegame"), tr("Are you sure to delete %1 from your savegames?").arg("\""+sgdStr+"\""), QMessageBox::No | QMessageBox::Yes, QMessageBox::No); + if (uchoice == QMessageBox::Yes) + { + if (!QFile::exists(sgdPath)) + { + emit savegameDeleted(); + } + else if(QFile::remove(sgdPath)) + { + emit savegameDeleted(); + } + else + { + QMessageBox::warning(this, tr("Delete savegame"), tr("Failed at deleting %1 from your savegames").arg("\""+sgdStr+"\"")); + } + } +} + +void SavegameWidget::on_cmdView_clicked() +{ + SavegameDialog *savegameDialog = new SavegameDialog(this); + savegameDialog->setSavegameData(sgdata, sgdPath, true); + savegameDialog->setModal(true); +#ifdef Q_OS_ANDROID + // Android ... + savegameDialog->showMaximized(); +#else + savegameDialog->show(); +#endif + savegameDialog->exec(); + delete savegameDialog; +} + +void SavegameWidget::mousePressEvent(QMouseEvent *ev) +{ + ProfileWidget::mousePressEvent(ev); +} + +void SavegameWidget::mouseReleaseEvent(QMouseEvent *ev) +{ + ProfileWidget::mouseReleaseEvent(ev); + if (ui->cbSelected->isVisible()) + { + if (rect().contains(ev->pos()) && ev->button() == Qt::LeftButton) + { + ui->cbSelected->setChecked(!ui->cbSelected->isChecked()); + } + } + else + { + if (getContentMode() == 0 && rect().contains(ev->pos()) && ev->button() == Qt::LeftButton) + { + if (ev->modifiers().testFlag(Qt::ShiftModifier)) + { + ui->cbSelected->setChecked(!ui->cbSelected->isChecked()); + } + else + { + on_cmdView_clicked(); + } + } + else if (!ui->cbSelected->isVisible() && getContentMode() == 1 && ev->button() == Qt::LeftButton && ev->modifiers().testFlag(Qt::ShiftModifier)) + { + ui->cbSelected->setChecked(!ui->cbSelected->isChecked()); + } + } +} + +void SavegameWidget::mouseDoubleClickEvent(QMouseEvent *ev) +{ + ProfileWidget::mouseDoubleClickEvent(ev); + + if (!ui->cbSelected->isVisible() && getContentMode() == 1 && ev->button() == Qt::LeftButton) + { + on_cmdView_clicked(); + } +} + +void SavegameWidget::setSelected(bool isSelected) +{ + ui->cbSelected->setChecked(isSelected); +} + +void SavegameWidget::savegameSelected() +{ + setSelected(!ui->cbSelected->isChecked()); +} + +void SavegameWidget::contextMenuEvent(QContextMenuEvent *ev) +{ + emit contextMenuTriggered(ev); +} + +void SavegameWidget::on_cbSelected_stateChanged(int arg1) +{ + if (arg1 == Qt::Checked) + { + emit widgetSelected(); + } + else if (arg1 == Qt::Unchecked) + { + emit widgetDeselected(); + } +} + +bool SavegameWidget::isSelected() +{ + return ui->cbSelected->isChecked(); +} + +void SavegameWidget::setSelectionMode(bool selectionMode) +{ + ui->cbSelected->setVisible(selectionMode); +} + +void SavegameWidget::selectAllWidgets() +{ + emit allWidgetsSelected(); +} + +void SavegameWidget::deselectAllWidgets() +{ + emit allWidgetsDeselected(); +} + +SavegameData* SavegameWidget::getSavegame() +{ + return sgdata; +} + +QString SavegameWidget::getWidgetType() +{ + return "SavegameWidget"; +} diff --git a/SavegameWidget.h b/SavegameWidget.h index f0f62c4..0db69af 100755 --- a/SavegameWidget.h +++ b/SavegameWidget.h @@ -1,82 +1,80 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef SAVEGAMEWIDGET_H -#define SAVEGAMEWIDGET_H -#include "ProfileWidget.h" -#include "SavegameData.h" -#include -#include -#include -#include - -namespace Ui { -class SavegameWidget; -} - -class SavegameWidget : public ProfileWidget -{ - Q_OBJECT - -public: - SavegameWidget(QWidget *parent = 0); - void setSavegameData(SavegameData *savegame, QString savegamePath); - void setSelectionMode(bool selectionMode); - void setSelected(bool isSelected); - SavegameData* getSavegame(); - QString getWidgetType(); - bool isSelected(); - ~SavegameWidget(); - -private slots: - void on_cmdView_clicked(); - void on_cmdCopy_clicked(); - void on_cmdDelete_clicked(); - void on_cbSelected_stateChanged(int arg1); - void savegameSelected(); - void selectAllWidgets(); - void deselectAllWidgets(); - -protected: - bool eventFilter(QObject *obj, QEvent *ev); - void mouseDoubleClickEvent(QMouseEvent *ev); - void mouseReleaseEvent(QMouseEvent *ev); - void mousePressEvent(QMouseEvent *ev); - void contextMenuEvent(QContextMenuEvent *ev); - -private: - Ui::SavegameWidget *ui; - SavegameData *sgdata; - QColor highlightBackColor; - QColor highlightTextColor; - QString labelAutosaveStr; - QString labelSaveStr; - QString sgdPath; - QString sgdStr; - QWidget *snwgt; - -signals: - void savegameDeleted(); - void widgetSelected(); - void widgetDeselected(); - void allWidgetsSelected(); - void allWidgetsDeselected(); - void contextMenuTriggered(QContextMenuEvent *ev); -}; - -#endif // SAVEGAMEWIDGET_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef SAVEGAMEWIDGET_H +#define SAVEGAMEWIDGET_H +#include "ProfileWidget.h" +#include "SavegameData.h" +#include +#include +#include +#include + +namespace Ui { +class SavegameWidget; +} + +class SavegameWidget : public ProfileWidget +{ + Q_OBJECT + +public: + SavegameWidget(QWidget *parent = 0); + void setSavegameData(SavegameData *savegame, QString savegamePath); + void setSelectionMode(bool selectionMode); + void setSelected(bool isSelected); + SavegameData* getSavegame(); + QString getWidgetType(); + bool isSelected(); + void retranslate(); + ~SavegameWidget(); + +private slots: + void on_cmdView_clicked(); + void on_cmdCopy_clicked(); + void on_cmdDelete_clicked(); + void on_cbSelected_stateChanged(int arg1); + void savegameSelected(); + void selectAllWidgets(); + void deselectAllWidgets(); + +protected: + void mouseDoubleClickEvent(QMouseEvent *ev); + void mouseReleaseEvent(QMouseEvent *ev); + void mousePressEvent(QMouseEvent *ev); + void contextMenuEvent(QContextMenuEvent *ev); + +private: + Ui::SavegameWidget *ui; + SavegameData *sgdata; + QString labelAutosaveStr; + QString labelSaveStr; + QString sgdPath; + QString sgdStr; + void renderString(const QString &savegameString, const QString &fileName); + +signals: + void savegameDeleted(); + void widgetSelected(); + void widgetDeselected(); + void allWidgetsSelected(); + void allWidgetsDeselected(); + void contextMenuTriggered(QContextMenuEvent *ev); +}; + +#endif // SAVEGAMEWIDGET_H diff --git a/SavegameWidget.ui b/SavegameWidget.ui index 2f857c7..ea5e3c6 100755 --- a/SavegameWidget.ui +++ b/SavegameWidget.ui @@ -1,135 +1,135 @@ - - - SavegameWidget - - - - 0 - 0 - 405 - 46 - - - - Savegame Widget - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QFrame::NoFrame - - - QFrame::Plain - - - 0 - - - - - - Qt::NoFocus - - - - - - - - - - - - - - - - - - 0 - 0 - - - - SAVE %3 - %1<br>%2 - - - true - - - - - - - - 0 - 0 - - - - View savegame - - - View - - - - - - - - 0 - 0 - - - - Copy savegame - - - Export - - - true - - - - - - - - 0 - 0 - - - - Delete savegame - - - Delete - - - true - - - - - - - - - - - + + + SavegameWidget + + + + 0 + 0 + 405 + 46 + + + + Savegame Widget + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + + + Qt::NoFocus + + + + + + + + + + + + + + + + + + 0 + 0 + + + + SAVE %3 - %1<br>%2 + + + true + + + + + + + + 0 + 0 + + + + View savegame + + + View + + + + + + + + 0 + 0 + + + + Copy savegame + + + Export + + + true + + + + + + + + 0 + 0 + + + + Delete savegame + + + Delete + + + true + + + + + + + + + + + diff --git a/SidebarGenerator.cpp b/SidebarGenerator.cpp index 2675dae..1d57e5d 100755 --- a/SidebarGenerator.cpp +++ b/SidebarGenerator.cpp @@ -1,61 +1,61 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "SidebarGenerator.h" -#include "StandardPaths.h" -#include "AppEnv.h" -#include -#include -#include - -SidebarGenerator::SidebarGenerator() -{ - -} - -QList SidebarGenerator::generateSidebarUrls(QList sidebarUrls) -{ - QDir dir; - - dir.setPath(StandardPaths::picturesLocation()); - if (dir.exists()) - { - sidebarUrls << QUrl::fromLocalFile(dir.absolutePath()); - } - - dir.setPath(StandardPaths::documentsLocation()); - if (dir.exists()) - { - sidebarUrls << QUrl::fromLocalFile(dir.absolutePath()); - } - - bool gameFolderExists; - QString gameFolder = AppEnv::getGameFolder(&gameFolderExists); - if (gameFolderExists) - { - sidebarUrls << QUrl::fromLocalFile(gameFolder); - } - - dir.setPath(StandardPaths::desktopLocation()); - if (dir.exists()) - { - sidebarUrls << QUrl::fromLocalFile(dir.absolutePath()); - } - - return sidebarUrls; -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "SidebarGenerator.h" +#include "StandardPaths.h" +#include "AppEnv.h" +#include +#include +#include + +SidebarGenerator::SidebarGenerator() +{ + +} + +QList SidebarGenerator::generateSidebarUrls(QList sidebarUrls) +{ + QDir dir; + + dir.setPath(StandardPaths::picturesLocation()); + if (dir.exists()) + { + sidebarUrls += QUrl::fromLocalFile(dir.absolutePath()); + } + + dir.setPath(StandardPaths::documentsLocation()); + if (dir.exists()) + { + sidebarUrls += QUrl::fromLocalFile(dir.absolutePath()); + } + + bool gameFolderExists; + QString gameFolder = AppEnv::getGameFolder(&gameFolderExists); + if (gameFolderExists) + { + sidebarUrls += QUrl::fromLocalFile(gameFolder); + } + + dir.setPath(StandardPaths::desktopLocation()); + if (dir.exists()) + { + sidebarUrls += QUrl::fromLocalFile(dir.absolutePath()); + } + + return sidebarUrls; +} diff --git a/SidebarGenerator.h b/SidebarGenerator.h index 35716c0..5e906a3 100755 --- a/SidebarGenerator.h +++ b/SidebarGenerator.h @@ -1,32 +1,32 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef SIDEBARGENERATOR_H -#define SIDEBARGENERATOR_H - -#include -#include - -class SidebarGenerator -{ -public: - SidebarGenerator(); - static QList generateSidebarUrls(QList sidebarUrls); -}; - -#endif // SIDEBARGENERATOR_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef SIDEBARGENERATOR_H +#define SIDEBARGENERATOR_H + +#include +#include + +class SidebarGenerator +{ +public: + SidebarGenerator(); + static QList generateSidebarUrls(QList sidebarUrls); +}; + +#endif // SIDEBARGENERATOR_H diff --git a/SnapmaticEditor.cpp b/SnapmaticEditor.cpp index c4ce38f..10239a3 100644 --- a/SnapmaticEditor.cpp +++ b/SnapmaticEditor.cpp @@ -1,340 +1,340 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "SnapmaticEditor.h" -#include "ui_SnapmaticEditor.h" -#include "SnapmaticPicture.h" -#include "StringParser.h" -#include "AppEnv.h" -#include -#include -#include -#include -#include -#include - -SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, QWidget *parent) : - QDialog(parent), crewDB(crewDB), - ui(new Ui::SnapmaticEditor) -{ - ui->setupUi(this); - ui->cmdApply->setDefault(true); - - if (QIcon::hasThemeIcon("dialog-apply")) - { - ui->cmdApply->setIcon(QIcon::fromTheme("dialog-apply")); - } - if (QIcon::hasThemeIcon("dialog-cancel")) - { - ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel")); - } - - snapmaticTitle = ""; - smpic = 0; - - // DPI calculation - qreal screenRatio = AppEnv::screenRatio(); - resize(400 * screenRatio, 360 * screenRatio); -} - -SnapmaticEditor::~SnapmaticEditor() -{ - delete ui; -} - -void SnapmaticEditor::selfie_toggled(bool checked) -{ - if (checked) - { - isSelfie = true; - } - else - { - isSelfie = false; - } -} - - -void SnapmaticEditor::mugshot_toggled(bool checked) -{ - if (checked) - { - isMugshot = true; - ui->cbDirector->setEnabled(false); - ui->cbDirector->setChecked(false); - } - else - { - isMugshot = false; - ui->cbDirector->setEnabled(true); - } -} - -void SnapmaticEditor::editor_toggled(bool checked) -{ - if (checked) - { - isEditor = true; - ui->cbDirector->setEnabled(false); - ui->cbDirector->setChecked(false); - } - else - { - isEditor = false; - ui->cbDirector->setEnabled(true); - } -} - -void SnapmaticEditor::on_rbSelfie_toggled(bool checked) -{ - if (checked) - { - mugshot_toggled(false); - editor_toggled(false); - selfie_toggled(true); - } -} - -void SnapmaticEditor::on_rbMugshot_toggled(bool checked) -{ - if (checked) - { - selfie_toggled(false); - editor_toggled(false); - mugshot_toggled(true); - } -} - -void SnapmaticEditor::on_rbEditor_toggled(bool checked) -{ - if (checked) - { - selfie_toggled(false); - mugshot_toggled(false); - editor_toggled(true); - } -} - -void SnapmaticEditor::on_rbCustom_toggled(bool checked) -{ - if (checked) - { - selfie_toggled(false); - mugshot_toggled(false); - editor_toggled(false); - } -} - -void SnapmaticEditor::setSnapmaticPicture(SnapmaticPicture *picture) -{ - smpic = picture; - localSpJson = smpic->getSnapmaticProperties(); - ui->rbCustom->setChecked(true); - crewID = localSpJson.crewID; - isSelfie = localSpJson.isSelfie; - isMugshot = localSpJson.isMug; - isEditor = localSpJson.isFromRSEditor; - ui->cbDirector->setChecked(localSpJson.isFromDirector); - ui->cbMeme->setChecked(localSpJson.isMeme); - if (isSelfie) - { - ui->rbSelfie->setChecked(true); - } - else if (isMugshot) - { - ui->rbMugshot->setChecked(true); - } - else if (isEditor) - { - ui->rbEditor->setChecked(true); - } - else - { - ui->rbCustom->setChecked(true); - } - setSnapmaticCrew(returnCrewName(crewID)); - setSnapmaticTitle(picture->getPictureTitle()); -} - -void SnapmaticEditor::setSnapmaticTitle(const QString &title) -{ - if (title.length() > 39) - { - snapmaticTitle = title.left(39); - } - 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)) - { - ui->labAppropriate->setText(tr("Appropriate: %1").arg(QString("%1").arg(tr("Yes", "Yes, should work fine")))); - } - else - { - ui->labAppropriate->setText(tr("Appropriate: %1").arg(QString("%1").arg(tr("No", "No, could lead to issues")))); - } -} - -void SnapmaticEditor::setSnapmaticCrew(const QString &crew) -{ - QString editStr = QString("%1").arg(tr("Edit")); - QString crewStr = tr("Crew: %1 (%2)").arg(StringParser::escapeString(crew), editStr); - ui->labCrew->setText(crewStr); -} - -QString SnapmaticEditor::returnCrewName(int crewID_) -{ - return crewDB->getCrewName(crewID_); -} - -void SnapmaticEditor::on_cmdCancel_clicked() -{ - close(); -} - -void SnapmaticEditor::on_cmdApply_clicked() -{ - if (ui->cbQualify->isChecked()) - { - qualifyAvatar(); - } - localSpJson.crewID = crewID; - localSpJson.isSelfie = isSelfie; - localSpJson.isMug = isMugshot; - localSpJson.isFromRSEditor = isEditor; - localSpJson.isFromDirector = ui->cbDirector->isChecked(); - localSpJson.isMeme = ui->cbMeme->isChecked(); - if (smpic) - { - QString originalFileName = smpic->getPictureFilePath(); - QString adjustedFileName = originalFileName; - if (adjustedFileName.right(7) == ".hidden") // for the hidden file system - { - adjustedFileName.remove(adjustedFileName.length() - 7, 7); - } - QString backupFileName = adjustedFileName % ".bak"; - if (!QFile::exists(backupFileName)) - { - QFile::copy(adjustedFileName, backupFileName); - } - SnapmaticProperties fallbackProperties = smpic->getSnapmaticProperties(); - QString fallbackTitle = smpic->getPictureTitle(); - smpic->setSnapmaticProperties(localSpJson); - smpic->setPictureTitle(snapmaticTitle); - if (!smpic->exportPicture(originalFileName)) - { - QMessageBox::warning(this, tr("Snapmatic Properties"), tr("Patching of Snapmatic Properties failed because of I/O Error")); - smpic->setSnapmaticProperties(fallbackProperties); - smpic->setPictureTitle(fallbackTitle); - } - else - { - smpic->emitUpdate(); - } - } - close(); -} - -void SnapmaticEditor::qualifyAvatar() -{ - ui->rbSelfie->setChecked(true); - ui->cbDirector->setChecked(false); - ui->cbMeme->setChecked(false); - ui->cmdApply->setDefault(true); -} - -void SnapmaticEditor::on_cbQualify_toggled(bool checked) -{ - if (checked) - { - ui->cbMeme->setEnabled(false); - ui->cbDirector->setEnabled(false); - ui->rbCustom->setEnabled(false); - ui->rbSelfie->setEnabled(false); - ui->rbEditor->setEnabled(false); - ui->rbMugshot->setEnabled(false); - } - 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()) - { - ui->cbDirector->setEnabled(true); - } - } -} - -void SnapmaticEditor::on_labTitle_linkActivated(const QString &link) -{ - 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()) - { - setSnapmaticTitle(newTitle); - } - } -} - -void SnapmaticEditor::on_labCrew_linkActivated(const QString &link) -{ - if (link == "g5e://editcrew") - { - bool ok; - int indexNum = 0; - QStringList itemList; - QStringList crewList = crewDB->getCrews(); - if (!crewList.contains(QLatin1String("0"))) - { - crewList.append(QLatin1String("0")); - } - crewList.sort(); - foreach(const QString &crew, crewList) - { - itemList.append(QString("%1 (%2)").arg(crew, returnCrewName(crew.toInt()))); - } - if (crewList.contains(QString::number(crewID))) - { - indexNum = crewList.indexOf(QRegExp(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; - foreach (const QChar &crewChar, newCrew) - { - if (!crewChar.isNumber()) - { - return; - } - } - crewID = newCrew.toInt(); - setSnapmaticCrew(returnCrewName(crewID)); - } - } -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "SnapmaticEditor.h" +#include "ui_SnapmaticEditor.h" +#include "SnapmaticPicture.h" +#include "StringParser.h" +#include "AppEnv.h" +#include +#include +#include +#include +#include +#include + +SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, QWidget *parent) : + QDialog(parent), crewDB(crewDB), + ui(new Ui::SnapmaticEditor) +{ + ui->setupUi(this); + ui->cmdApply->setDefault(true); + + if (QIcon::hasThemeIcon("dialog-apply")) + { + ui->cmdApply->setIcon(QIcon::fromTheme("dialog-apply")); + } + if (QIcon::hasThemeIcon("dialog-cancel")) + { + ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel")); + } + + snapmaticTitle = ""; + smpic = 0; + + // DPI calculation + qreal screenRatio = AppEnv::screenRatio(); + resize(400 * screenRatio, 360 * screenRatio); +} + +SnapmaticEditor::~SnapmaticEditor() +{ + delete ui; +} + +void SnapmaticEditor::selfie_toggled(bool checked) +{ + if (checked) + { + isSelfie = true; + } + else + { + isSelfie = false; + } +} + + +void SnapmaticEditor::mugshot_toggled(bool checked) +{ + if (checked) + { + isMugshot = true; + ui->cbDirector->setEnabled(false); + ui->cbDirector->setChecked(false); + } + else + { + isMugshot = false; + ui->cbDirector->setEnabled(true); + } +} + +void SnapmaticEditor::editor_toggled(bool checked) +{ + if (checked) + { + isEditor = true; + ui->cbDirector->setEnabled(false); + ui->cbDirector->setChecked(false); + } + else + { + isEditor = false; + ui->cbDirector->setEnabled(true); + } +} + +void SnapmaticEditor::on_rbSelfie_toggled(bool checked) +{ + if (checked) + { + mugshot_toggled(false); + editor_toggled(false); + selfie_toggled(true); + } +} + +void SnapmaticEditor::on_rbMugshot_toggled(bool checked) +{ + if (checked) + { + selfie_toggled(false); + editor_toggled(false); + mugshot_toggled(true); + } +} + +void SnapmaticEditor::on_rbEditor_toggled(bool checked) +{ + if (checked) + { + selfie_toggled(false); + mugshot_toggled(false); + editor_toggled(true); + } +} + +void SnapmaticEditor::on_rbCustom_toggled(bool checked) +{ + if (checked) + { + selfie_toggled(false); + mugshot_toggled(false); + editor_toggled(false); + } +} + +void SnapmaticEditor::setSnapmaticPicture(SnapmaticPicture *picture) +{ + smpic = picture; + localSpJson = smpic->getSnapmaticProperties(); + ui->rbCustom->setChecked(true); + crewID = localSpJson.crewID; + isSelfie = localSpJson.isSelfie; + isMugshot = localSpJson.isMug; + isEditor = localSpJson.isFromRSEditor; + ui->cbDirector->setChecked(localSpJson.isFromDirector); + ui->cbMeme->setChecked(localSpJson.isMeme); + if (isSelfie) + { + ui->rbSelfie->setChecked(true); + } + else if (isMugshot) + { + ui->rbMugshot->setChecked(true); + } + else if (isEditor) + { + ui->rbEditor->setChecked(true); + } + else + { + ui->rbCustom->setChecked(true); + } + setSnapmaticCrew(returnCrewName(crewID)); + setSnapmaticTitle(picture->getPictureTitle()); +} + +void SnapmaticEditor::setSnapmaticTitle(const QString &title) +{ + if (title.length() > 39) + { + snapmaticTitle = title.left(39); + } + 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)) + { + ui->labAppropriate->setText(tr("Appropriate: %1").arg(QString("%1").arg(tr("Yes", "Yes, should work fine")))); + } + else + { + ui->labAppropriate->setText(tr("Appropriate: %1").arg(QString("%1").arg(tr("No", "No, could lead to issues")))); + } +} + +void SnapmaticEditor::setSnapmaticCrew(const QString &crew) +{ + QString editStr = QString("%1").arg(tr("Edit")); + QString crewStr = tr("Crew: %1 (%2)").arg(StringParser::escapeString(crew), editStr); + ui->labCrew->setText(crewStr); +} + +QString SnapmaticEditor::returnCrewName(int crewID_) +{ + return crewDB->getCrewName(crewID_); +} + +void SnapmaticEditor::on_cmdCancel_clicked() +{ + close(); +} + +void SnapmaticEditor::on_cmdApply_clicked() +{ + if (ui->cbQualify->isChecked()) + { + qualifyAvatar(); + } + localSpJson.crewID = crewID; + localSpJson.isSelfie = isSelfie; + localSpJson.isMug = isMugshot; + localSpJson.isFromRSEditor = isEditor; + localSpJson.isFromDirector = ui->cbDirector->isChecked(); + localSpJson.isMeme = ui->cbMeme->isChecked(); + if (smpic) + { + QString originalFileName = smpic->getPictureFilePath(); + QString adjustedFileName = originalFileName; + if (adjustedFileName.right(7) == ".hidden") // for the hidden file system + { + adjustedFileName.remove(adjustedFileName.length() - 7, 7); + } + QString backupFileName = adjustedFileName % ".bak"; + if (!QFile::exists(backupFileName)) + { + QFile::copy(adjustedFileName, backupFileName); + } + SnapmaticProperties fallbackProperties = smpic->getSnapmaticProperties(); + QString fallbackTitle = smpic->getPictureTitle(); + smpic->setSnapmaticProperties(localSpJson); + smpic->setPictureTitle(snapmaticTitle); + if (!smpic->exportPicture(originalFileName)) + { + QMessageBox::warning(this, tr("Snapmatic Properties"), tr("Patching of Snapmatic Properties failed because of I/O Error")); + smpic->setSnapmaticProperties(fallbackProperties); + smpic->setPictureTitle(fallbackTitle); + } + else + { + smpic->emitUpdate(); + } + } + close(); +} + +void SnapmaticEditor::qualifyAvatar() +{ + ui->rbSelfie->setChecked(true); + ui->cbDirector->setChecked(false); + ui->cbMeme->setChecked(false); + ui->cmdApply->setDefault(true); +} + +void SnapmaticEditor::on_cbQualify_toggled(bool checked) +{ + if (checked) + { + ui->cbMeme->setEnabled(false); + ui->cbDirector->setEnabled(false); + ui->rbCustom->setEnabled(false); + ui->rbSelfie->setEnabled(false); + ui->rbEditor->setEnabled(false); + ui->rbMugshot->setEnabled(false); + } + 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()) + { + ui->cbDirector->setEnabled(true); + } + } +} + +void SnapmaticEditor::on_labTitle_linkActivated(const QString &link) +{ + 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()) + { + setSnapmaticTitle(newTitle); + } + } +} + +void SnapmaticEditor::on_labCrew_linkActivated(const QString &link) +{ + if (link == "g5e://editcrew") + { + bool ok; + int indexNum = 0; + QStringList itemList; + QStringList crewList = crewDB->getCrews(); + if (!crewList.contains(QLatin1String("0"))) + { + crewList += QLatin1String("0"); + } + crewList.sort(); + foreach(const QString &crew, crewList) + { + itemList += QString("%1 (%2)").arg(crew, returnCrewName(crew.toInt())); + } + if (crewList.contains(QString::number(crewID))) + { + indexNum = crewList.indexOf(QRegExp(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; + foreach (const QChar &crewChar, newCrew) + { + if (!crewChar.isNumber()) + { + return; + } + } + crewID = newCrew.toInt(); + setSnapmaticCrew(returnCrewName(crewID)); + } + } +} diff --git a/SnapmaticEditor.h b/SnapmaticEditor.h index d2f41ee..243d85a 100644 --- a/SnapmaticEditor.h +++ b/SnapmaticEditor.h @@ -1,69 +1,69 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef SNAPMATICEDITOR_H -#define SNAPMATICEDITOR_H - -#include -#include "CrewDatabase.h" -#include "SnapmaticPicture.h" - -namespace Ui { -class SnapmaticEditor; -} - -class SnapmaticEditor : public QDialog -{ - Q_OBJECT - -public: - explicit SnapmaticEditor(CrewDatabase *crewDB, QWidget *parent = 0); - void setSnapmaticPicture(SnapmaticPicture *picture); - void setSnapmaticTitle(const QString &title); - void setSnapmaticCrew(const QString &crew = ""); - QString returnCrewName(int crewID); - ~SnapmaticEditor(); - -private slots: - void on_rbSelfie_toggled(bool checked); - void on_rbMugshot_toggled(bool checked); - void on_rbEditor_toggled(bool checked); - void on_rbCustom_toggled(bool checked); - void on_cmdCancel_clicked(); - void on_cmdApply_clicked(); - void on_cbQualify_toggled(bool checked); - void on_labTitle_linkActivated(const QString &link); - void on_labCrew_linkActivated(const QString &link); - -private: - CrewDatabase *crewDB; - Ui::SnapmaticEditor *ui; - SnapmaticProperties localSpJson; - SnapmaticPicture *smpic; - QString snapmaticTitle; - int crewID; - bool isSelfie; - bool isMugshot; - bool isEditor; - void selfie_toggled(bool checked); - void mugshot_toggled(bool checked); - void editor_toggled(bool checked); - void qualifyAvatar(); -}; - -#endif // SNAPMATICEDITOR_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef SNAPMATICEDITOR_H +#define SNAPMATICEDITOR_H + +#include +#include "CrewDatabase.h" +#include "SnapmaticPicture.h" + +namespace Ui { +class SnapmaticEditor; +} + +class SnapmaticEditor : public QDialog +{ + Q_OBJECT + +public: + explicit SnapmaticEditor(CrewDatabase *crewDB, QWidget *parent = 0); + void setSnapmaticPicture(SnapmaticPicture *picture); + void setSnapmaticTitle(const QString &title); + void setSnapmaticCrew(const QString &crew = ""); + QString returnCrewName(int crewID); + ~SnapmaticEditor(); + +private slots: + void on_rbSelfie_toggled(bool checked); + void on_rbMugshot_toggled(bool checked); + void on_rbEditor_toggled(bool checked); + void on_rbCustom_toggled(bool checked); + void on_cmdCancel_clicked(); + void on_cmdApply_clicked(); + void on_cbQualify_toggled(bool checked); + void on_labTitle_linkActivated(const QString &link); + void on_labCrew_linkActivated(const QString &link); + +private: + CrewDatabase *crewDB; + Ui::SnapmaticEditor *ui; + SnapmaticProperties localSpJson; + SnapmaticPicture *smpic; + QString snapmaticTitle; + int crewID; + bool isSelfie; + bool isMugshot; + bool isEditor; + void selfie_toggled(bool checked); + void mugshot_toggled(bool checked); + void editor_toggled(bool checked); + void qualifyAvatar(); +}; + +#endif // SNAPMATICEDITOR_H diff --git a/SnapmaticEditor.ui b/SnapmaticEditor.ui index 46ffa60..6a8a538 100644 --- a/SnapmaticEditor.ui +++ b/SnapmaticEditor.ui @@ -1,248 +1,248 @@ - - - SnapmaticEditor - - - - 0 - 0 - 400 - 362 - - - - Snapmatic Properties - - - true - - - - - - - 0 - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Snapmatic Type - - - - - - Editor - - - - - - - Selfie - - - - - - - Regular - - - - - - - Mugshot - - - - - - - - - - Snapmatic Properties - - - - - - Meme - - - - - - - Director - - - - - - - - - - Snapmatic Values - - - - - - Qt::NoContextMenu - - - Crew: %1 (%2) - - - true - - - - - - - Qt::NoContextMenu - - - Title: %1 (%2) - - - true - - - - - - - Appropriate: %1 - - - true - - - - - - - - - - Extras - - - - - - Qualify as Avatar automatically at apply - - - - - - - - 0 - 0 - - - - Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture - - - true - - - - - - - - - - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - &Apply - - - - - - - - 0 - 0 - - - - &Cancel - - - - - - - - - - UiModLabel - QLabel -
UiModLabel.h
-
-
- - -
+ + + SnapmaticEditor + + + + 0 + 0 + 400 + 362 + + + + Snapmatic Properties + + + true + + + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Snapmatic Type + + + + + + Editor + + + + + + + Selfie + + + + + + + Regular + + + + + + + Mugshot + + + + + + + + + + Snapmatic Properties + + + + + + Meme + + + + + + + Director + + + + + + + + + + Snapmatic Values + + + + + + Qt::NoContextMenu + + + Crew: %1 (%2) + + + true + + + + + + + Qt::NoContextMenu + + + Title: %1 (%2) + + + true + + + + + + + Appropriate: %1 + + + true + + + + + + + + + + Extras + + + + + + Qualify as Avatar automatically at apply + + + + + + + + 0 + 0 + + + + Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture + + + true + + + + + + + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + &Apply + + + + + + + + 0 + 0 + + + + &Cancel + + + + + + + + + + UiModLabel + QLabel +
UiModLabel.h
+
+
+ + +
diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp index 1ded9ad..3a209bd 100755 --- a/SnapmaticPicture.cpp +++ b/SnapmaticPicture.cpp @@ -1,972 +1,1078 @@ -/***************************************************************************** -* gta5sync-spv Grand Theft Auto Snapmatic Picture Viewer -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "SnapmaticPicture.h" -#include "StringParser.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// PARSER ALLOCATIONS -#define snapmaticHeaderLength 278 -#define snapmaticUsefulLength 260 -#define snapmaticFileMaxSize 528192 -#define jpegHeaderLineDifStr 2 -#define jpegPreHeaderLength 14 -#define jpegPicStreamLength 524288 -#define jsonStreamLength 3076 -#define tideStreamLength 260 - -// EDITOR ALLOCATIONS -#define jpegStreamEditorBegin 292 -#define jsonStreamEditorBegin 524588 -#define jsonStreamEditorLength 3072 -#define titlStreamEditorBegin 527668 -#define titlStreamEditorLength 256 -#define titlStreamCharacterMax 39 - -// IMAGES VALUES -#define snapmaticResolutionW 960 -#define snapmaticResolutionH 536 -#define snapmaticResolution QSize(snapmaticResolutionW, snapmaticResolutionH) - -SnapmaticPicture::SnapmaticPicture(const QString &fileName, QObject *parent) : QObject(parent), picFilePath(fileName) -{ - reset(); -} - -SnapmaticPicture::~SnapmaticPicture() -{ -} - -void SnapmaticPicture::reset() -{ - // INIT PIC - rawPicContent = ""; - cachePicture = QImage(); - jpegRawContentSizeE = 0; - jpegRawContentSize = 0; - picExportFileName = ""; - isCustomFormat = 0; - isLoadedInRAM = 0; - pictureHead = ""; - pictureStr = ""; - lowRamMode = 0; - lastStep = ""; - sortStr = ""; - titlStr = ""; - descStr = ""; - picOk = 0; - - // INIT JSON - jsonOk = 0; - jsonStr = ""; - - // SNAPMATIC PROPERTIES - localSpJson = {}; -} - -bool SnapmaticPicture::preloadFile() -{ - QFile *picFile = new QFile(picFilePath); - picFileName = QFileInfo(picFilePath).fileName(); - - if (!picFile->open(QFile::ReadOnly)) - { - lastStep = "1;/1,OpenFile," % StringParser::convertDrawStringForLog(picFilePath); - delete picFile; - return false; - } - if (picFilePath.right(4) != QLatin1String(".g5e")) - { - rawPicContent = picFile->read(snapmaticFileMaxSize); - picFile->close(); - delete picFile; - - // Setting is values - isCustomFormat = false; - isLoadedInRAM = true; - } - else - { - QByteArray g5eContent = picFile->read(snapmaticFileMaxSize + 1024); - picFile->close(); - delete picFile; - - // Set Custom Format - isCustomFormat = true; - - // Reading g5e Content - g5eContent.remove(0, 1); - if (g5eContent.left(3) == QByteArray("G5E")) - { - g5eContent.remove(0, 3); - if (g5eContent.left(2).toHex() == QByteArray("1000")) - { - g5eContent.remove(0, 2); - if (g5eContent.left(3) == QByteArray("LEN")) - { - g5eContent.remove(0, 3); - int fileNameLength = g5eContent.left(1).toHex().toInt(); - g5eContent.remove(0, 1); - if (g5eContent.left(3) == QByteArray("FIL")) - { - g5eContent.remove(0, 3); - picFileName = g5eContent.left(fileNameLength); - g5eContent.remove(0, fileNameLength); - if (g5eContent.left(3) == QByteArray("COM")) - { - g5eContent.remove(0, 3); - rawPicContent = qUncompress(g5eContent); - - // Setting is values - isLoadedInRAM = true; - } - else - { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",4,G5E_FORMATERROR"; - return false; - } - } - else - { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",3,G5E_FORMATERROR"; - return false; - } - } - else - { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",2,G5E_FORMATERROR"; - return false; - } - } - else - { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",1,G5E_NOTCOMPATIBLE"; - return false; - } - } - else - { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",1,G5E_FORMATERROR"; - return false; - } - } - emit preloaded(); - return true; -} - -bool SnapmaticPicture::readingPicture(bool writeEnabled_, bool cacheEnabled_, bool fastLoad, bool lowRamMode_) -{ - // Start opening file - // lastStep is like currentStep - - // Set boolean values - writeEnabled = writeEnabled_; - cacheEnabled = cacheEnabled_; - lowRamMode = lowRamMode_; - if (!writeEnabled) { lowRamMode = false; } // Low RAM Mode only works when writeEnabled is true - - QIODevice *picStream; - - if (!isLoadedInRAM) { preloadFile(); } - - picStream = new QBuffer(&rawPicContent); - picStream->open(QIODevice::ReadWrite); - - // Reading Snapmatic Header - if (!picStream->isReadable()) - { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",1,NOHEADER"; - picStream->close(); - delete picStream; - return false; - } - QByteArray snapmaticHeaderLine = picStream->read(snapmaticHeaderLength); - pictureHead = getSnapmaticHeaderString(snapmaticHeaderLine); - - // Reading JPEG Header Line - if (!picStream->isReadable()) - { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",2,NOHEADER"; - picStream->close(); - delete picStream; - return false; - } - QByteArray jpegHeaderLine = picStream->read(jpegPreHeaderLength); - - // Checking for JPEG - jpegHeaderLine.remove(0, jpegHeaderLineDifStr); - if (jpegHeaderLine.left(4) != QByteArray("JPEG")) - { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",2,NOJPEG"; - picStream->close(); - delete picStream; - return false; - } - - // Read JPEG Stream - if (!picStream->isReadable()) - { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",2,NOPIC"; - picStream->close(); - delete picStream; - return false; - } - QByteArray jpegRawContent = picStream->read(jpegPicStreamLength); - if (jpegRawContent.contains("\xFF\xD9")) - { - int jpegRawContentSizeT = jpegRawContent.indexOf("\xFF\xD9") + 2; - jpegRawContentSizeE = jpegRawContentSizeT; - jpegRawContentSize = jpegRawContentSizeT; - if (jpegRawContent.contains("\xFF\x45\x4F\x49")) - { - jpegRawContentSizeT = jpegRawContent.indexOf("\xFF\x45\x4F\x49"); - } - jpegRawContent = jpegRawContent.left(jpegRawContentSize); - jpegRawContentSize = jpegRawContentSizeT; - } - if (cacheEnabled) picOk = cachePicture.loadFromData(jpegRawContent, "JPEG"); - if (!cacheEnabled) - { - QImage tempPicture; - picOk = tempPicture.loadFromData(jpegRawContent, "JPEG"); - } - else if (!fastLoad) - { - QImage tempPicture = QImage(snapmaticResolution, QImage::Format_RGB888); - QPainter tempPainter(&tempPicture); - if (cachePicture.size() == snapmaticResolution) - { - tempPainter.drawImage(0, 0, cachePicture); - } - else - { - tempPainter.drawImage(0, 0, cachePicture.scaled(snapmaticResolution, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); - } - tempPainter.end(); - cachePicture = tempPicture; - } - - // Read JSON Stream - if (!picStream->isReadable()) - { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",3,NOJSON"; - picStream->close(); - delete picStream; - return false; - } - else if (picStream->read(4) != QByteArray("JSON")) - { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",3,CTJSON"; - picStream->close(); - delete picStream; - return false; - } - QByteArray jsonRawContent = picStream->read(jsonStreamLength); - jsonStr = getSnapmaticJSONString(jsonRawContent); - parseJsonContent(); // JSON parsing is own function - - if (!picStream->isReadable()) - { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",4,NOTITL"; - picStream->close(); - delete picStream; - return false; - } - else if (picStream->read(4) != QByteArray("TITL")) - { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",4,CTTITL"; - picStream->close(); - delete picStream; - return false; - } - QByteArray titlRawContent = picStream->read(tideStreamLength); - titlStr = getSnapmaticTIDEString(titlRawContent); - - if (!picStream->isReadable()) - { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",5,NODESC"; - picStream->close(); - delete picStream; - return picOk; - } - else if (picStream->read(4) != QByteArray("DESC")) - { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",5,CTDESC"; - picStream->close(); - delete picStream; - return false; - } - QByteArray descRawContent = picStream->read(tideStreamLength); - descStr = getSnapmaticTIDEString(descRawContent); - - updateStrings(); - - picStream->close(); - delete picStream; - - if (!writeEnabled) { rawPicContent.clear(); } - else if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } - - emit loaded(); - return picOk; -} - -QString SnapmaticPicture::getSnapmaticHeaderString(const QByteArray &snapmaticHeader) -{ - QByteArray snapmaticBytes = snapmaticHeader.left(snapmaticUsefulLength); - QList snapmaticBytesList = snapmaticBytes.split('\x01'); - snapmaticBytes = snapmaticBytesList.at(1); - snapmaticBytesList.clear(); - return StringParser::parseTitleString(snapmaticBytes, snapmaticBytes.length()); -} - -QString SnapmaticPicture::getSnapmaticJSONString(const QByteArray &jsonBytes) -{ - QByteArray jsonUsefulBytes = jsonBytes; - jsonUsefulBytes.replace('\x00', ""); - jsonUsefulBytes.replace('\x0c', ""); - return QString::fromUtf8(jsonUsefulBytes).trimmed(); -} - -QString SnapmaticPicture::getSnapmaticTIDEString(const QByteArray &tideBytes) -{ - QByteArray tideUsefulBytes = tideBytes; - tideUsefulBytes.remove(0,4); - QList tideUsefulBytesList = tideUsefulBytes.split('\x00'); - return QString::fromUtf8(tideUsefulBytesList.at(0)).trimmed(); -} - -void SnapmaticPicture::updateStrings() -{ - QString cmpPicTitl = titlStr; - cmpPicTitl.replace('\"', "''"); - cmpPicTitl.replace(' ', '_'); - cmpPicTitl.replace(':', '-'); - cmpPicTitl.remove('\\'); - cmpPicTitl.remove('{'); - cmpPicTitl.remove('}'); - cmpPicTitl.remove('/'); - cmpPicTitl.remove('<'); - cmpPicTitl.remove('>'); - cmpPicTitl.remove('*'); - cmpPicTitl.remove('?'); - cmpPicTitl.remove('.'); - pictureStr = tr("PHOTO - %1").arg(localSpJson.createdDateTime.toString("MM/dd/yy HH:mm:ss")); - sortStr = localSpJson.createdDateTime.toString("yyMMddHHmmss") % QString::number(localSpJson.uid); - picExportFileName = sortStr % "_" % cmpPicTitl; -} - -bool SnapmaticPicture::readingPictureFromFile(const QString &fileName, bool writeEnabled_, bool cacheEnabled_, bool fastLoad, bool lowRamMode_) -{ - if (!fileName.isEmpty()) - { - picFilePath = fileName; - return readingPicture(writeEnabled_, cacheEnabled_, fastLoad, lowRamMode_); - } - else - { - return false; - } -} - -bool SnapmaticPicture::setImage(const QImage &picture) // dirty method -{ - if (writeEnabled) - { - QByteArray picByteArray; - int comLvl = 100; - bool saveSuccess = false; - while (comLvl != 0 && !saveSuccess) - { - QByteArray picByteArrayT; - QBuffer picStreamT(&picByteArrayT); - picStreamT.open(QIODevice::WriteOnly); - saveSuccess = picture.save(&picStreamT, "JPEG", comLvl); - picStreamT.close(); - if (saveSuccess) - { - if (picByteArrayT.length() > jpegRawContentSize) - { - comLvl--; - saveSuccess = false; - } - else - { - picByteArray = picByteArrayT; - } - } - } - if (saveSuccess) return setPictureStream(picByteArray); - } - return false; -} - -bool SnapmaticPicture::setPictureStream(const QByteArray &picByteArray_) // clean method -{ - if (writeEnabled) - { - bool customEOI = false; - QByteArray picByteArray = picByteArray_; - if (lowRamMode) { rawPicContent = qUncompress(rawPicContent); } - QBuffer snapmaticStream(&rawPicContent); - snapmaticStream.open(QIODevice::ReadWrite); - if (!snapmaticStream.seek(jpegStreamEditorBegin)) return false; - if (picByteArray.length() > jpegPicStreamLength) return false; - if (picByteArray.length() < jpegRawContentSize && jpegRawContentSize + 4 < jpegPicStreamLength) - { - customEOI = true; - } - while (picByteArray.length() != jpegPicStreamLength) - { - picByteArray += '\x00'; - } - if (customEOI) - { - picByteArray.replace(jpegRawContentSize, 4, "\xFF\x45\x4F\x49"); - } - int result = snapmaticStream.write(picByteArray); - snapmaticStream.close(); - if (result != 0) - { - if (cacheEnabled) - { - QImage replacedPicture; - replacedPicture.loadFromData(picByteArray); - cachePicture = replacedPicture; - } - if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } - return true; - } - if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } - return false; - } - return false; -} - -bool SnapmaticPicture::setPictureTitl(const QString &newTitle_) -{ - if (writeEnabled) - { - QString newTitle = newTitle_; - if (lowRamMode) { rawPicContent = qUncompress(rawPicContent); } - QBuffer snapmaticStream(&rawPicContent); - snapmaticStream.open(QIODevice::ReadWrite); - if (!snapmaticStream.seek(titlStreamEditorBegin)) return false; - if (newTitle.length() > titlStreamCharacterMax) - { - newTitle = newTitle.left(titlStreamCharacterMax); - } - QByteArray newTitleArray = newTitle.toUtf8(); - while (newTitleArray.length() != titlStreamEditorLength) - { - newTitleArray += '\x00'; - } - int result = snapmaticStream.write(newTitleArray); - snapmaticStream.close(); - if (result != 0) - { - titlStr = newTitle; - if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } - return true; - } - if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } - return false; - } - return false; -} - -QString SnapmaticPicture::getExportPictureFileName() -{ - return picExportFileName; -} - -QString SnapmaticPicture::getPictureFileName() -{ - return picFileName; -} - -QString SnapmaticPicture::getPictureFilePath() -{ - return picFilePath; -} - -QString SnapmaticPicture::getPictureSortStr() -{ - return sortStr; -} - -QString SnapmaticPicture::getPictureDesc() -{ - return descStr; -} - -QString SnapmaticPicture::getPictureTitl() -{ - return titlStr; -} - -QString SnapmaticPicture::getPictureHead() -{ - return pictureHead; -} - -QString SnapmaticPicture::getPictureStr() -{ - return pictureStr; -} - -QString SnapmaticPicture::getLastStep() -{ - return lastStep; -} - -QImage SnapmaticPicture::getImage() -{ - if (cacheEnabled) - { - return cachePicture; - } - else if (writeEnabled) - { - bool returnOk = 0; - QImage tempPicture; - QImage returnPicture(snapmaticResolution, QImage::Format_RGB888); - - if (lowRamMode) { rawPicContent = qUncompress(rawPicContent); } - QBuffer snapmaticStream(&rawPicContent); - snapmaticStream.open(QIODevice::ReadOnly); - if (snapmaticStream.seek(jpegStreamEditorBegin)) - { - QByteArray jpegRawContent = snapmaticStream.read(jpegPicStreamLength); - returnOk = tempPicture.loadFromData(jpegRawContent, "JPEG"); - } - snapmaticStream.close(); - if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } - - if (returnOk) - { - QPainter returnPainter(&returnPicture); - if (tempPicture.size() == snapmaticResolution) - { - returnPainter.drawImage(0, 0, tempPicture); - } - else - { - returnPainter.drawImage(0, 0, tempPicture.scaled(snapmaticResolution, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); - } - returnPainter.end(); - return returnPicture; - } - } - else - { - bool returnOk = 0; - QImage returnPicture; - QIODevice *picStream; - - QFile *picFile = new QFile(picFilePath); - if (!picFile->open(QFile::ReadOnly)) - { - lastStep = "1;/1,OpenFile," % StringParser::convertDrawStringForLog(picFilePath); - delete picFile; - return QImage(0, 0, QImage::Format_RGB888); - } - rawPicContent = picFile->read(snapmaticFileMaxSize); - picFile->close(); - delete picFile; - - picStream = new QBuffer(&rawPicContent); - picStream->open(QIODevice::ReadWrite); - if (picStream->seek(jpegStreamEditorBegin)) - { - QByteArray jpegRawContent = picStream->read(jpegPicStreamLength); - returnOk = returnPicture.loadFromData(jpegRawContent, "JPEG"); - } - picStream->close(); - delete picStream; - - if (returnOk) - { - return returnPicture; - } - } - return QImage(0, 0, QImage::Format_RGB888); -} - -int SnapmaticPicture::getContentMaxLength() -{ - return jpegRawContentSize; -} - -bool SnapmaticPicture::isPicOk() -{ - return picOk; -} - -void SnapmaticPicture::clearCache() -{ - cacheEnabled = false; - cachePicture = QImage(); -} - -void SnapmaticPicture::emitUpdate() -{ - emit updated(); -} - -// JSON part - -bool SnapmaticPicture::isJsonOk() -{ - return jsonOk; -} - -QString SnapmaticPicture::getJsonStr() -{ - return jsonStr; -} - -SnapmaticProperties SnapmaticPicture::getSnapmaticProperties() -{ - return localSpJson; -} - -void SnapmaticPicture::parseJsonContent() -{ - QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonStr.toUtf8()); - QJsonObject jsonObject = jsonDocument.object(); - QVariantMap jsonMap = jsonObject.toVariantMap(); // backward compatibility - - if (jsonObject.contains("loc")) - { - QJsonObject locObject = jsonObject["loc"].toObject(); - if (locObject.contains("x")) { localSpJson.location.x = locObject["x"].toDouble(); } - if (locObject.contains("y")) { localSpJson.location.y = locObject["y"].toDouble(); } - if (locObject.contains("z")) { localSpJson.location.z = locObject["z"].toDouble(); } - } - if (jsonObject.contains("uid")) - { - localSpJson.uid = jsonObject["uid"].toInt(); - } - if (jsonObject.contains("area")) - { - localSpJson.location.area = jsonObject["area"].toString(); - } - if (jsonObject.contains("crewid")) - { - localSpJson.crewID = jsonObject["crewid"].toInt(); - } - if (jsonObject.contains("creat")) - { - QDateTime createdTimestamp; - localSpJson.createdTimestamp = jsonMap["creat"].toUInt(); - createdTimestamp.setTime_t(localSpJson.createdTimestamp); - localSpJson.createdDateTime = createdTimestamp; - } - if (jsonObject.contains("plyrs")) - { - localSpJson.playersList = jsonMap["plyrs"].toStringList(); - } - if (jsonObject.contains("meme")) - { - localSpJson.isMeme = jsonObject["meme"].toBool(); - } - if (jsonObject.contains("mug")) - { - localSpJson.isMug = jsonObject["mug"].toBool(); - } - if (jsonObject.contains("slf")) - { - localSpJson.isSelfie = jsonObject["slf"].toBool(); - } - if (jsonObject.contains("drctr")) - { - localSpJson.isFromDirector = jsonObject["drctr"].toBool(); - } - if (jsonObject.contains("rsedtr")) - { - localSpJson.isFromRSEditor = jsonObject["rsedtr"].toBool(); - } - - jsonOk = true; -} - -bool SnapmaticPicture::setSnapmaticProperties(SnapmaticProperties newSpJson) -{ - QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonStr.toUtf8()); - QJsonObject jsonObject = jsonDocument.object(); - - QJsonObject locObject; - locObject["x"] = newSpJson.location.x; - locObject["y"] = newSpJson.location.y; - locObject["z"] = newSpJson.location.z; - - jsonObject["loc"] = locObject; - jsonObject["uid"] = newSpJson.uid; - jsonObject["area"] = newSpJson.location.area; - jsonObject["crewid"] = newSpJson.crewID; - jsonObject["creat"] = QJsonValue::fromVariant(newSpJson.createdTimestamp); - jsonObject["plyrs"] = QJsonValue::fromVariant(newSpJson.playersList); - jsonObject["meme"] = newSpJson.isMeme; - jsonObject["mug"] = newSpJson.isMug; - jsonObject["slf"] = newSpJson.isSelfie; - jsonObject["drctr"] = newSpJson.isFromDirector; - jsonObject["rsedtr"] = newSpJson.isFromRSEditor; - - jsonDocument.setObject(jsonObject); - - QString newJsonStr = QString::fromUtf8(jsonDocument.toJson(QJsonDocument::Compact)); - if (newJsonStr.length() < jsonStreamEditorLength) - { - if (writeEnabled) - { - QByteArray jsonByteArray = newJsonStr.toUtf8(); - while (jsonByteArray.length() != jsonStreamEditorLength) - { - jsonByteArray += '\x00'; - } - if (lowRamMode) { rawPicContent = qUncompress(rawPicContent); } - QBuffer snapmaticStream(&rawPicContent); - snapmaticStream.open(QIODevice::ReadWrite); - if (!snapmaticStream.seek(jsonStreamEditorBegin)) - { - snapmaticStream.close(); - return false; - } - int result = snapmaticStream.write(jsonByteArray); - snapmaticStream.close(); - if (result != 0) - { - localSpJson = newSpJson; - jsonStr = newJsonStr; - if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } - return true; - } - else - { - if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } - return false; - } - } - else - { - return false; - } - } - else - { - return false; - } - - return true; -} - -// FILE MANAGEMENT - -bool SnapmaticPicture::exportPicture(const QString &fileName, const QString format) -{ - QFile *picFile = new QFile(fileName); - if (picFile->open(QIODevice::WriteOnly)) - { - if (format == QLatin1String("G5E")) - { - // Modern compressed export - QByteArray stockFileNameUTF8 = picFileName.toUtf8(); - QByteArray numberLength = QByteArray::number(stockFileNameUTF8.length()); - if (numberLength.length() == 1) - { - numberLength.insert(0, "0"); - } - else if (numberLength.length() != 2) - { - numberLength = "00"; - } - QByteArray g5eHeader; - g5eHeader.reserve(stockFileNameUTF8.length() + 16); - g5eHeader += '\x00'; // First Null Byte - g5eHeader += QByteArray("G5E"); // GTA 5 Export - g5eHeader += '\x10'; g5eHeader += '\x00'; // 2 byte GTA 5 Export Version - g5eHeader += QByteArray("LEN"); // Before Length - g5eHeader += QByteArray::fromHex(numberLength); // Length in HEX before Compressed - g5eHeader += QByteArray("FIL"); // Before File Name - g5eHeader += stockFileNameUTF8; // File Name - g5eHeader += QByteArray("COM"); // Before Compressed - picFile->write(g5eHeader); - if (!lowRamMode) - { - picFile->write(qCompress(rawPicContent, 9)); // Compressed Snapmatic - } - else - { - picFile->write(rawPicContent); - } - picFile->close(); - delete picFile; - } - else if (format == QLatin1String("JPG")) - { - // JPEG export - QBuffer snapmaticStream(&rawPicContent); - snapmaticStream.open(QIODevice::ReadOnly); - if (snapmaticStream.seek(jpegStreamEditorBegin)) - { - QByteArray jpegRawContent = snapmaticStream.read(jpegPicStreamLength); - if (jpegRawContentSizeE != 0) - { - jpegRawContent = jpegRawContent.left(jpegRawContentSizeE); - } - picFile->write(jpegRawContent); - } - picFile->close(); - delete picFile; - } - else - { - // Classic straight export - if (!lowRamMode) - { - picFile->write(rawPicContent); - } - else - { - picFile->write(qUncompress(rawPicContent)); - } - picFile->close(); - delete picFile; - } - return true; - } - else - { - delete picFile; - return false; - } -} - -void SnapmaticPicture::setPicFileName(const QString &picFileName_) -{ - picFileName = picFileName_; -} - -void SnapmaticPicture::setPicFilePath(const QString &picFilePath_) -{ - picFilePath = picFilePath_; -} - -bool SnapmaticPicture::deletePicFile() -{ - if (!QFile::exists(picFilePath)) return true; - if (QFile::remove(picFilePath)) return true; - return false; -} - -// VISIBILITY - -bool SnapmaticPicture::isHidden() -{ - if (picFilePath.right(7) == QLatin1String(".hidden")) - { - return true; - } - return false; -} - -bool SnapmaticPicture::setPictureHidden() -{ - if (isCustomFormat) - { - return false; - } - if (!isHidden()) - { - QString newPicFilePath = QString(picFilePath % ".hidden"); - if (QFile::rename(picFilePath, newPicFilePath)) - { - picFilePath = newPicFilePath; - return true; - } - return false; - } - return true; -} - -bool SnapmaticPicture::setPictureVisible() -{ - if (isCustomFormat) - { - return false; - } - if (isHidden()) - { - QString newPicFilePath = QString(picFilePath).remove(picFilePath.length() - 7, 7); - if (QFile::rename(picFilePath, newPicFilePath)) - { - picFilePath = newPicFilePath; - return true; - } - return false; - } - return true; -} - -// PREDEFINED PROPERTIES - -QSize SnapmaticPicture::getSnapmaticResolution() -{ - return snapmaticResolution; -} - -// VERIFY CONTENT - -bool SnapmaticPicture::verifyTitle(const QString &title) -{ - // VERIFY TITLE FOR BE A VALID SNAPMATIC TITLE - if (title.length() <= titlStreamCharacterMax) - { - foreach(const QChar &titleChar, title) - { - if (!verifyTitleChar(titleChar)) return false; - } - return true; - } - return false; -} - -bool SnapmaticPicture::verifyTitleChar(const QChar &titleChar) -{ - // VERIFY CHAR FOR BE A VALID SNAPMATIC CHARACTER - if (titleChar.isLetterOrNumber() || titleChar.isPrint()) - { - if (titleChar == '<' || titleChar == '>' || titleChar == '\\') return false; - return true; - } - return false; -} +/***************************************************************************** +* gta5sync-spv Grand Theft Auto Snapmatic Picture Viewer +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "SnapmaticPicture.h" +#include "StringParser.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// PARSER ALLOCATIONS +#define snapmaticHeaderLength 278 +#define snapmaticUsefulLength 260 +#define snapmaticFileMaxSize 528192 +#define jpegHeaderLineDifStr 2 +#define jpegPreHeaderLength 14 +#define jpegPicStreamLength 524288 +#define jsonStreamLength 3076 +#define tideStreamLength 260 + +// EDITOR ALLOCATIONS +#define jpegStreamEditorBegin 292 +#define jsonStreamEditorBegin 524588 +#define jsonStreamEditorLength 3072 +#define titlStreamEditorBegin 527668 +#define titlStreamEditorLength 256 +#define titlStreamCharacterMax 39 + +// IMAGES VALUES +#define snapmaticResolutionW 960 +#define snapmaticResolutionH 536 +#define snapmaticResolution QSize(snapmaticResolutionW, snapmaticResolutionH) + +SnapmaticPicture::SnapmaticPicture(const QString &fileName, QObject *parent) : QObject(parent), picFilePath(fileName) +{ + reset(); +} + +SnapmaticPicture::~SnapmaticPicture() +{ +} + +void SnapmaticPicture::reset() +{ + // INIT PIC + rawPicContent.clear(); + rawPicContent.squeeze(); + cachePicture = QImage(); + picExportFileName = QString(); + pictureHead = QString(); + pictureStr = QString(); + lastStep = QString(); + sortStr = QString(); + titlStr = QString(); + descStr = QString(); + + // INIT PIC INTS + jpegRawContentSizeE = 0; + jpegRawContentSize = 0; + + // INIT PIC BOOLS + isCustomFormat = false; + isLoadedInRAM = false; + lowRamMode = false; + picOk = false; + + // INIT JSON + jsonOk = false; + jsonStr = QString(); + + // SNAPMATIC DEFAULTS +#ifdef GTA5SYNC_CSDF + careSnapDefault = false; +#else + careSnapDefault = true; +#endif + + // SNAPMATIC PROPERTIES + localSpJson = {}; +} + +bool SnapmaticPicture::preloadFile() +{ + QFile *picFile = new QFile(picFilePath); + picFileName = QFileInfo(picFilePath).fileName(); + + if (!picFile->open(QFile::ReadOnly)) + { + lastStep = "1;/1,OpenFile," % StringParser::convertDrawStringForLog(picFilePath); + delete picFile; + return false; + } + if (picFilePath.right(4) != QLatin1String(".g5e")) + { + rawPicContent = picFile->read(snapmaticFileMaxSize); + picFile->close(); + delete picFile; + + // Setting is values + isCustomFormat = false; + isLoadedInRAM = true; + } + else + { + QByteArray g5eContent = picFile->read(snapmaticFileMaxSize + 1024); + picFile->close(); + delete picFile; + + // Set Custom Format + isCustomFormat = true; + + // Reading g5e Content + g5eContent.remove(0, 1); + if (g5eContent.left(3) == QByteArray("G5E")) + { + g5eContent.remove(0, 3); + if (g5eContent.left(2).toHex() == QByteArray("1000")) + { + g5eContent.remove(0, 2); + if (g5eContent.left(3) == QByteArray("LEN")) + { + g5eContent.remove(0, 3); + int fileNameLength = g5eContent.left(1).toHex().toInt(); + g5eContent.remove(0, 1); + if (g5eContent.left(3) == QByteArray("FIL")) + { + g5eContent.remove(0, 3); + picFileName = g5eContent.left(fileNameLength); + g5eContent.remove(0, fileNameLength); + if (g5eContent.left(3) == QByteArray("COM")) + { + g5eContent.remove(0, 3); + rawPicContent = qUncompress(g5eContent); + + // Setting is values + isLoadedInRAM = true; + } + else + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",4,G5E_FORMATERROR"; + return false; + } + } + else + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",3,G5E_FORMATERROR"; + return false; + } + } + else + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",2,G5E_FORMATERROR"; + return false; + } + } + else + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",1,G5E_NOTCOMPATIBLE"; + return false; + } + } + else + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",1,G5E_FORMATERROR"; + return false; + } + } + emit preloaded(); + return true; +} + +bool SnapmaticPicture::readingPicture(bool writeEnabled_, bool cacheEnabled_, bool fastLoad, bool lowRamMode_) +{ + // Start opening file + // lastStep is like currentStep + + // Set boolean values + writeEnabled = writeEnabled_; + cacheEnabled = cacheEnabled_; + lowRamMode = lowRamMode_; + if (!writeEnabled) { lowRamMode = false; } // Low RAM Mode only works when writeEnabled is true + + QIODevice *picStream; + + if (!isLoadedInRAM) { preloadFile(); } + + picStream = new QBuffer(&rawPicContent); + picStream->open(QIODevice::ReadWrite); + + // Reading Snapmatic Header + if (!picStream->isReadable()) + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",1,NOHEADER"; + picStream->close(); + delete picStream; + return false; + } + QByteArray snapmaticHeaderLine = picStream->read(snapmaticHeaderLength); + pictureHead = getSnapmaticHeaderString(snapmaticHeaderLine); + if (pictureHead == QLatin1String("MALFORMED")) + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",1,MALFORMEDHEADER"; + picStream->close(); + delete picStream; + return false; + } + + // Reading JPEG Header Line + if (!picStream->isReadable()) + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",2,NOHEADER"; + picStream->close(); + delete picStream; + return false; + } + QByteArray jpegHeaderLine = picStream->read(jpegPreHeaderLength); + + // Checking for JPEG + jpegHeaderLine.remove(0, jpegHeaderLineDifStr); + if (jpegHeaderLine.left(4) != QByteArray("JPEG")) + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",2,NOJPEG"; + picStream->close(); + delete picStream; + return false; + } + + // Read JPEG Stream + if (!picStream->isReadable()) + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",2,NOPIC"; + picStream->close(); + delete picStream; + return false; + } + QByteArray jpegRawContent = picStream->read(jpegPicStreamLength); + if (jpegRawContent.contains("\xFF\xD9")) + { + int jpegRawContentSizeT = jpegRawContent.indexOf("\xFF\xD9") + 2; + jpegRawContentSizeE = jpegRawContentSizeT; + jpegRawContentSize = jpegRawContentSizeT; + if (jpegRawContent.contains("\xFF\x45\x4F\x49")) + { + jpegRawContentSizeT = jpegRawContent.indexOf("\xFF\x45\x4F\x49"); + } + jpegRawContent = jpegRawContent.left(jpegRawContentSize); + jpegRawContentSize = jpegRawContentSizeT; + } + if (cacheEnabled) picOk = cachePicture.loadFromData(jpegRawContent, "JPEG"); + if (!cacheEnabled) + { + QImage tempPicture; + picOk = tempPicture.loadFromData(jpegRawContent, "JPEG"); + } + else if (!fastLoad) + { + if (careSnapDefault) + { + QImage tempPicture = QImage(snapmaticResolution, QImage::Format_RGB888); + QPainter tempPainter(&tempPicture); + if (cachePicture.size() != snapmaticResolution) + { + tempPainter.drawImage(0, 0, cachePicture.scaled(snapmaticResolution, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + } + else + { + tempPainter.drawImage(0, 0, cachePicture); + } + tempPainter.end(); + cachePicture = tempPicture; + } + else + { + QImage tempPicture = QImage(cachePicture.size(), QImage::Format_RGB888); + QPainter tempPainter(&tempPicture); + tempPainter.drawImage(0, 0, cachePicture); + tempPainter.end(); + cachePicture = tempPicture; + } + } + + // Read JSON Stream + if (!picStream->isReadable()) + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",3,NOJSON"; + picStream->close(); + delete picStream; + return false; + } + else if (picStream->read(4) != QByteArray("JSON")) + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",3,CTJSON"; + picStream->close(); + delete picStream; + return false; + } + QByteArray jsonRawContent = picStream->read(jsonStreamLength); + jsonStr = getSnapmaticJSONString(jsonRawContent); + parseJsonContent(); // JSON parsing is own function + + if (!picStream->isReadable()) + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",4,NOTITL"; + picStream->close(); + delete picStream; + return false; + } + else if (picStream->read(4) != QByteArray("TITL")) + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",4,CTTITL"; + picStream->close(); + delete picStream; + return false; + } + QByteArray titlRawContent = picStream->read(tideStreamLength); + titlStr = getSnapmaticTIDEString(titlRawContent); + + if (!picStream->isReadable()) + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",5,NODESC"; + picStream->close(); + delete picStream; + return picOk; + } + else if (picStream->read(4) != QByteArray("DESC")) + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",5,CTDESC"; + picStream->close(); + delete picStream; + return false; + } + QByteArray descRawContent = picStream->read(tideStreamLength); + descStr = getSnapmaticTIDEString(descRawContent); + + updateStrings(); + + picStream->close(); + delete picStream; + + if (!writeEnabled) { rawPicContent.clear(); } + else if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } + + emit loaded(); + return picOk; +} + +QString SnapmaticPicture::getSnapmaticHeaderString(const QByteArray &snapmaticHeader) +{ + QList snapmaticBytesList = snapmaticHeader.left(snapmaticUsefulLength).split('\x01'); + if (snapmaticBytesList.length() < 2) { return QLatin1String("MALFORMED"); } + QByteArray snapmaticBytes = snapmaticBytesList.at(1); + return StringParser::parseTitleString(snapmaticBytes, snapmaticBytes.length()); +} + +QString SnapmaticPicture::getSnapmaticJSONString(const QByteArray &jsonBytes) +{ + QByteArray jsonUsefulBytes = jsonBytes; + jsonUsefulBytes.replace('\x00', QString()); + jsonUsefulBytes.replace('\x0c', QString()); + return QString::fromUtf8(jsonUsefulBytes.trimmed()); +} + +QString SnapmaticPicture::getSnapmaticTIDEString(const QByteArray &tideBytes) +{ + QByteArray tideUsefulBytes = tideBytes; + tideUsefulBytes.remove(0,4); + QList tideUsefulBytesList = tideUsefulBytes.split('\x00'); + return QString::fromUtf8(tideUsefulBytesList.at(0).trimmed()); +} + +void SnapmaticPicture::updateStrings() +{ + QString cmpPicTitl = titlStr; + cmpPicTitl.replace('\"', "''"); + cmpPicTitl.replace(' ', '_'); + cmpPicTitl.replace(':', '-'); + cmpPicTitl.remove('\\'); + cmpPicTitl.remove('{'); + cmpPicTitl.remove('}'); + cmpPicTitl.remove('/'); + cmpPicTitl.remove('<'); + cmpPicTitl.remove('>'); + cmpPicTitl.remove('*'); + cmpPicTitl.remove('?'); + cmpPicTitl.remove('.'); + pictureStr = tr("PHOTO - %1").arg(localSpJson.createdDateTime.toString("MM/dd/yy HH:mm:ss")); + sortStr = localSpJson.createdDateTime.toString("yyMMddHHmmss") % QString::number(localSpJson.uid); + QString exportStr = localSpJson.createdDateTime.toString("yyyyMMdd") % "-" % QString::number(localSpJson.uid); + picExportFileName = exportStr % "_" % cmpPicTitl; +} + +bool SnapmaticPicture::readingPictureFromFile(const QString &fileName, bool writeEnabled_, bool cacheEnabled_, bool fastLoad, bool lowRamMode_) +{ + if (!fileName.isEmpty()) + { + picFilePath = fileName; + return readingPicture(writeEnabled_, cacheEnabled_, fastLoad, lowRamMode_); + } + else + { + return false; + } +} + +bool SnapmaticPicture::setImage(const QImage &picture) +{ + if (writeEnabled) + { + QImage altPicture; + bool useAltPicture = false; + if (picture.size() != snapmaticResolution && careSnapDefault) + { + altPicture = picture.scaled(snapmaticResolution, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + useAltPicture = true; + } + QByteArray picByteArray; + int comLvl = 100; + bool saveSuccess = false; + while (comLvl != 0 && !saveSuccess) + { + QByteArray picByteArrayT; + QBuffer picStreamT(&picByteArrayT); + picStreamT.open(QIODevice::WriteOnly); + if (useAltPicture) { saveSuccess = altPicture.save(&picStreamT, "JPEG", comLvl); } + else { saveSuccess = picture.save(&picStreamT, "JPEG", comLvl); } + picStreamT.close(); + if (saveSuccess) + { + if (picByteArrayT.length() > jpegRawContentSize) + { + comLvl--; + saveSuccess = false; + } + else + { + picByteArray = picByteArrayT; + } + } + } + if (saveSuccess) { return setPictureStream(picByteArray); } + } + return false; +} + +bool SnapmaticPicture::setPictureStream(const QByteArray &picByteArray_) // clean method +{ + if (writeEnabled) + { + bool customEOI = false; + QByteArray picByteArray = picByteArray_; + if (lowRamMode) { rawPicContent = qUncompress(rawPicContent); } + QBuffer snapmaticStream(&rawPicContent); + snapmaticStream.open(QIODevice::ReadWrite); + if (!snapmaticStream.seek(jpegStreamEditorBegin)) return false; + if (picByteArray.length() > jpegPicStreamLength) return false; + if (picByteArray.length() < jpegRawContentSize && jpegRawContentSize + 4 < jpegPicStreamLength) + { + customEOI = true; + } + while (picByteArray.length() != jpegPicStreamLength) + { + picByteArray += '\x00'; + } + if (customEOI) + { + picByteArray.replace(jpegRawContentSize, 4, "\xFF\x45\x4F\x49"); + } + int result = snapmaticStream.write(picByteArray); + snapmaticStream.close(); + if (result != 0) + { + if (cacheEnabled) + { + QImage replacedPicture; + replacedPicture.loadFromData(picByteArray); + cachePicture = replacedPicture; + } + if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } + return true; + } + if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } + return false; + } + return false; +} + +bool SnapmaticPicture::setPictureTitl(const QString &newTitle_) +{ + if (writeEnabled) + { + QString newTitle = newTitle_; + if (lowRamMode) { rawPicContent = qUncompress(rawPicContent); } + QBuffer snapmaticStream(&rawPicContent); + snapmaticStream.open(QIODevice::ReadWrite); + if (!snapmaticStream.seek(titlStreamEditorBegin)) return false; + if (newTitle.length() > titlStreamCharacterMax) + { + newTitle = newTitle.left(titlStreamCharacterMax); + } + QByteArray newTitleArray = newTitle.toUtf8(); + while (newTitleArray.length() != titlStreamEditorLength) + { + newTitleArray += '\x00'; + } + int result = snapmaticStream.write(newTitleArray); + snapmaticStream.close(); + if (result != 0) + { + titlStr = newTitle; + if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } + return true; + } + if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } + return false; + } + return false; +} + +QString SnapmaticPicture::getExportPictureFileName() +{ + return picExportFileName; +} + +QString SnapmaticPicture::getPictureFileName() +{ + return picFileName; +} + +QString SnapmaticPicture::getPictureFilePath() +{ + return picFilePath; +} + +QString SnapmaticPicture::getPictureSortStr() +{ + return sortStr; +} + +QString SnapmaticPicture::getPictureDesc() +{ + return descStr; +} + +QString SnapmaticPicture::getPictureTitl() +{ + return titlStr; +} + +QString SnapmaticPicture::getPictureHead() +{ + return pictureHead; +} + +QString SnapmaticPicture::getPictureStr() +{ + return pictureStr; +} + +QString SnapmaticPicture::getLastStep() +{ + return lastStep; +} + +QImage SnapmaticPicture::getImage(bool fastLoad) +{ + if (cacheEnabled) + { + return cachePicture; + } + else if (writeEnabled) + { + bool fastLoadU = fastLoad; + if (!careSnapDefault) { fastLoadU = true; } + + bool returnOk = false; + QImage tempPicture; + QImage returnPicture; + if (!fastLoadU) + { + returnPicture = QImage(snapmaticResolution, QImage::Format_RGB888); + } + + if (lowRamMode) { rawPicContent = qUncompress(rawPicContent); } + QBuffer snapmaticStream(&rawPicContent); + snapmaticStream.open(QIODevice::ReadOnly); + if (snapmaticStream.seek(jpegStreamEditorBegin)) + { + QByteArray jpegRawContent = snapmaticStream.read(jpegPicStreamLength); + returnOk = tempPicture.loadFromData(jpegRawContent, "JPEG"); + } + snapmaticStream.close(); + if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } + + if (returnOk) + { + if (!fastLoadU) + { + QPainter returnPainter(&returnPicture); + if (tempPicture.size() != snapmaticResolution) + { + returnPainter.drawImage(0, 0, tempPicture.scaled(snapmaticResolution, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + } + else + { + returnPainter.drawImage(0, 0, tempPicture); + } + returnPainter.end(); + return returnPicture; + } + else + { + return tempPicture; + } + } + } + else + { + bool fastLoadU = fastLoad; + if (!careSnapDefault) { fastLoadU = true; } + + bool returnOk = false; + QImage tempPicture; + QImage returnPicture; + if (!fastLoadU) + { + returnPicture = QImage(snapmaticResolution, QImage::Format_RGB888); + } + QIODevice *picStream; + + QFile *picFile = new QFile(picFilePath); + if (!picFile->open(QFile::ReadOnly)) + { + lastStep = "1;/1,OpenFile," % StringParser::convertDrawStringForLog(picFilePath); + delete picFile; + return QImage(); + } + rawPicContent = picFile->read(snapmaticFileMaxSize); + picFile->close(); + delete picFile; + + picStream = new QBuffer(&rawPicContent); + picStream->open(QIODevice::ReadWrite); + if (picStream->seek(jpegStreamEditorBegin)) + { + QByteArray jpegRawContent = picStream->read(jpegPicStreamLength); + returnOk = tempPicture.loadFromData(jpegRawContent, "JPEG"); + } + picStream->close(); + delete picStream; + + if (returnOk) + { + if (!fastLoadU) + { + QPainter returnPainter(&returnPicture); + if (tempPicture.size() != snapmaticResolution) + { + returnPainter.drawImage(0, 0, tempPicture.scaled(snapmaticResolution, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + } + else + { + returnPainter.drawImage(0, 0, tempPicture); + } + returnPainter.end(); + return returnPicture; + } + else + { + return tempPicture; + } + } + } + return QImage(); +} + +int SnapmaticPicture::getContentMaxLength() +{ + return jpegRawContentSize; +} + +bool SnapmaticPicture::isPicOk() +{ + return picOk; +} + +void SnapmaticPicture::clearCache() +{ + cacheEnabled = false; + cachePicture = QImage(); +} + +void SnapmaticPicture::emitUpdate() +{ + emit updated(); +} + +// JSON part + +bool SnapmaticPicture::isJsonOk() +{ + return jsonOk; +} + +QString SnapmaticPicture::getJsonStr() +{ + return jsonStr; +} + +SnapmaticProperties SnapmaticPicture::getSnapmaticProperties() +{ + return localSpJson; +} + +void SnapmaticPicture::parseJsonContent() +{ + QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonStr.toUtf8()); + QJsonObject jsonObject = jsonDocument.object(); + QVariantMap jsonMap = jsonObject.toVariantMap(); // backward compatibility + + if (jsonObject.contains("loc")) + { + QJsonObject locObject = jsonObject["loc"].toObject(); + if (locObject.contains("x")) { localSpJson.location.x = locObject["x"].toDouble(); } + if (locObject.contains("y")) { localSpJson.location.y = locObject["y"].toDouble(); } + if (locObject.contains("z")) { localSpJson.location.z = locObject["z"].toDouble(); } + } + if (jsonObject.contains("uid")) + { + localSpJson.uid = jsonObject["uid"].toInt(); + } + if (jsonObject.contains("area")) + { + localSpJson.location.area = jsonObject["area"].toString(); + } + if (jsonObject.contains("crewid")) + { + localSpJson.crewID = jsonObject["crewid"].toInt(); + } + if (jsonObject.contains("creat")) + { + QDateTime createdTimestamp; + localSpJson.createdTimestamp = jsonMap["creat"].toUInt(); + createdTimestamp.setTime_t(localSpJson.createdTimestamp); + localSpJson.createdDateTime = createdTimestamp; + } + if (jsonObject.contains("plyrs")) + { + localSpJson.playersList = jsonMap["plyrs"].toStringList(); + } + if (jsonObject.contains("meme")) + { + localSpJson.isMeme = jsonObject["meme"].toBool(); + } + if (jsonObject.contains("mug")) + { + localSpJson.isMug = jsonObject["mug"].toBool(); + } + if (jsonObject.contains("slf")) + { + localSpJson.isSelfie = jsonObject["slf"].toBool(); + } + if (jsonObject.contains("drctr")) + { + localSpJson.isFromDirector = jsonObject["drctr"].toBool(); + } + if (jsonObject.contains("rsedtr")) + { + localSpJson.isFromRSEditor = jsonObject["rsedtr"].toBool(); + } + + jsonOk = true; +} + +bool SnapmaticPicture::setSnapmaticProperties(SnapmaticProperties newSpJson) +{ + QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonStr.toUtf8()); + QJsonObject jsonObject = jsonDocument.object(); + + QJsonObject locObject; + locObject["x"] = newSpJson.location.x; + locObject["y"] = newSpJson.location.y; + locObject["z"] = newSpJson.location.z; + + jsonObject["loc"] = locObject; + jsonObject["uid"] = newSpJson.uid; + jsonObject["area"] = newSpJson.location.area; + jsonObject["crewid"] = newSpJson.crewID; + jsonObject["creat"] = QJsonValue::fromVariant(newSpJson.createdTimestamp); + jsonObject["plyrs"] = QJsonValue::fromVariant(newSpJson.playersList); + jsonObject["meme"] = newSpJson.isMeme; + jsonObject["mug"] = newSpJson.isMug; + jsonObject["slf"] = newSpJson.isSelfie; + jsonObject["drctr"] = newSpJson.isFromDirector; + jsonObject["rsedtr"] = newSpJson.isFromRSEditor; + + jsonDocument.setObject(jsonObject); + + if (setJsonStr(QString::fromUtf8(jsonDocument.toJson(QJsonDocument::Compact)))) + { + localSpJson = newSpJson; + return true; + } + return false; +} + +bool SnapmaticPicture::setJsonStr(const QString &newJsonStr) +{ + if (newJsonStr.length() < jsonStreamEditorLength) + { + if (writeEnabled) + { + QByteArray jsonByteArray = newJsonStr.toUtf8(); + while (jsonByteArray.length() != jsonStreamEditorLength) + { + jsonByteArray += '\x00'; + } + if (lowRamMode) { rawPicContent = qUncompress(rawPicContent); } + QBuffer snapmaticStream(&rawPicContent); + snapmaticStream.open(QIODevice::ReadWrite); + if (!snapmaticStream.seek(jsonStreamEditorBegin)) + { + snapmaticStream.close(); + return false; + } + int result = snapmaticStream.write(jsonByteArray); + snapmaticStream.close(); + if (result != 0) + { + jsonStr = newJsonStr; + if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } + return true; + } + else + { + if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } + return false; + } + } + else + { + return false; + } + } + return false; +} + +// FILE MANAGEMENT + +bool SnapmaticPicture::exportPicture(const QString &fileName, SnapmaticFormat format_) +{ + // Keep current format when Auto_Format is used + SnapmaticFormat format = format_; + if (format_ == SnapmaticFormat::Auto_Format) + { + if (isCustomFormat) + { + format = SnapmaticFormat::G5E_Format; + } + else + { + format = SnapmaticFormat::PGTA_Format; + } + } + + QFile *picFile = new QFile(fileName); + if (picFile->open(QIODevice::WriteOnly)) + { + if (format == SnapmaticFormat::G5E_Format) + { + // Modern compressed export + QByteArray stockFileNameUTF8 = picFileName.toUtf8(); + QByteArray numberLength = QByteArray::number(stockFileNameUTF8.length()); + if (numberLength.length() == 1) + { + numberLength.insert(0, '0'); + } + else if (numberLength.length() != 2) + { + numberLength = "00"; + } + QByteArray g5eHeader; + g5eHeader.reserve(stockFileNameUTF8.length() + 16); + g5eHeader += '\x00'; // First Null Byte + g5eHeader += QByteArray("G5E"); // GTA 5 Export + g5eHeader += '\x10'; g5eHeader += '\x00'; // 2 byte GTA 5 Export Version + g5eHeader += QByteArray("LEN"); // Before Length + g5eHeader += QByteArray::fromHex(numberLength); // Length in HEX before Compressed + g5eHeader += QByteArray("FIL"); // Before File Name + g5eHeader += stockFileNameUTF8; // File Name + g5eHeader += QByteArray("COM"); // Before Compressed + picFile->write(g5eHeader); + if (!lowRamMode) + { + picFile->write(qCompress(rawPicContent, 9)); // Compressed Snapmatic + } + else + { + picFile->write(rawPicContent); + } + picFile->close(); + delete picFile; + } + else if (format == SnapmaticFormat::JPEG_Format) + { + // JPEG export + QBuffer snapmaticStream(&rawPicContent); + snapmaticStream.open(QIODevice::ReadOnly); + if (snapmaticStream.seek(jpegStreamEditorBegin)) + { + QByteArray jpegRawContent = snapmaticStream.read(jpegPicStreamLength); + if (jpegRawContentSizeE != 0) + { + jpegRawContent = jpegRawContent.left(jpegRawContentSizeE); + } + picFile->write(jpegRawContent); + } + picFile->close(); + delete picFile; + } + else + { + // Classic straight export + if (!lowRamMode) + { + picFile->write(rawPicContent); + } + else + { + picFile->write(qUncompress(rawPicContent)); + } + picFile->close(); + delete picFile; + } + return true; + } + else + { + delete picFile; + return false; + } +} + +void SnapmaticPicture::setPicFileName(const QString &picFileName_) +{ + picFileName = picFileName_; +} + +void SnapmaticPicture::setPicFilePath(const QString &picFilePath_) +{ + picFilePath = picFilePath_; +} + +bool SnapmaticPicture::deletePicFile() +{ + if (!QFile::exists(picFilePath)) return true; + if (QFile::remove(picFilePath)) return true; + return false; +} + +// VISIBILITY + +bool SnapmaticPicture::isHidden() +{ + if (picFilePath.right(7) == QLatin1String(".hidden")) + { + return true; + } + return false; +} + +bool SnapmaticPicture::setPictureHidden() +{ + if (isCustomFormat) + { + return false; + } + if (!isHidden()) + { + QString newPicFilePath = QString(picFilePath % ".hidden"); + if (QFile::rename(picFilePath, newPicFilePath)) + { + picFilePath = newPicFilePath; + return true; + } + return false; + } + return true; +} + +bool SnapmaticPicture::setPictureVisible() +{ + if (isCustomFormat) + { + return false; + } + if (isHidden()) + { + QString newPicFilePath = QString(picFilePath).remove(picFilePath.length() - 7, 7); + if (QFile::rename(picFilePath, newPicFilePath)) + { + picFilePath = newPicFilePath; + return true; + } + return false; + } + return true; +} + +// PREDEFINED PROPERTIES + +QSize SnapmaticPicture::getSnapmaticResolution() +{ + return snapmaticResolution; +} + +// SNAPMATIC DEFAULTS + +bool SnapmaticPicture::isSnapmaticDefaultsEnforced() +{ + return careSnapDefault; +} + +void SnapmaticPicture::setSnapmaticDefaultsEnforced(bool enforced) +{ + careSnapDefault = enforced; +} + +// VERIFY CONTENT + +bool SnapmaticPicture::verifyTitle(const QString &title) +{ + // VERIFY TITLE FOR BE A VALID SNAPMATIC TITLE + if (title.length() <= titlStreamCharacterMax) + { + foreach(const QChar &titleChar, title) + { + if (!verifyTitleChar(titleChar)) return false; + } + return true; + } + return false; +} + +bool SnapmaticPicture::verifyTitleChar(const QChar &titleChar) +{ + // VERIFY CHAR FOR BE A VALID SNAPMATIC CHARACTER + if (titleChar.isLetterOrNumber() || titleChar.isPrint()) + { + if (titleChar == '<' || titleChar == '>' || titleChar == '\\') return false; + return true; + } + return false; +} diff --git a/SnapmaticPicture.h b/SnapmaticPicture.h index ab0ba00..706dc3b 100755 --- a/SnapmaticPicture.h +++ b/SnapmaticPicture.h @@ -1,150 +1,158 @@ -/***************************************************************************** -* gta5sync-spv Grand Theft Auto Snapmatic Picture Viewer -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef SNAPMATICPICTURE_H -#define SNAPMATICPICTURE_H - -#include -#include -#include -#include -#include -#include - -struct SnapmaticProperties { - struct SnapmaticLocation { - QString area; - double x; - double y; - double z; - }; - int uid; - int crewID; - QStringList playersList; - uint createdTimestamp; - QDateTime createdDateTime; - bool isMeme; - bool isMug; - bool isSelfie; - bool isFromDirector; - bool isFromRSEditor; - SnapmaticLocation location; -}; - -class SnapmaticPicture : public QObject -{ - Q_OBJECT -public: - explicit SnapmaticPicture(const QString &fileName = "", QObject *parent = 0); - ~SnapmaticPicture(); - void reset(); - bool preloadFile(); - bool readingPictureFromFile(const QString &fileName, bool writeEnabled = true, bool cacheEnabled = false, bool fastLoad = true, bool lowRamMode = false); - bool readingPicture(bool writeEnabled = true, bool cacheEnabled = false, bool fastLoad = true, bool lowRamMode = false); - bool isPicOk(); - void clearCache(); - QImage getImage(); - QString getLastStep(); - QString getPictureStr(); - QString getPictureHead(); - QString getPictureTitl(); - QString getPictureDesc(); - QString getPictureSortStr(); - QString getPictureFileName(); - QString getPictureFilePath(); - QString getExportPictureFileName(); - int getContentMaxLength(); - bool setImage(const QImage &picture); - bool setPictureTitl(const QString &newTitle); - bool setPictureStream(const QByteArray &picByteArray); - void updateStrings(); - void emitUpdate(); - - // FILE MANAGEMENT - bool exportPicture(const QString &fileName, const QString format = "PGTA"); - void setPicFileName(const QString &picFileName); - void setPicFilePath(const QString &picFilePath); - bool deletePicFile(); - - // ALTERNATIVES - QString getPictureTitle() { return getPictureTitl(); } - QString getPictureString() { return getPictureStr(); } - QString getPictureDescription() { return getPictureDesc(); } - bool setPictureTitle(const QString &newTitle) { return setPictureTitl(newTitle); } - - // JSON - bool isJsonOk(); - QString getJsonStr(); - SnapmaticProperties getSnapmaticProperties(); - bool setSnapmaticProperties(SnapmaticProperties newSpJson); - - // VISIBILITY - bool isHidden(); - bool setPictureHidden(); - bool setPictureVisible(); - - // PREDEFINED PROPERTIES - QSize getSnapmaticResolution(); - - // VERIFY CONTENT - static bool verifyTitle(const QString &title); - -private: - QString getSnapmaticHeaderString(const QByteArray &snapmaticHeader); - QString getSnapmaticJSONString(const QByteArray &jsonBytes); - QString getSnapmaticTIDEString(const QByteArray &tideBytes); - QImage cachePicture; - QString picExportFileName; - QString picFileName; - QString picFilePath; - QString pictureHead; - QString pictureStr; - QString lastStep; - QString sortStr; - QString titlStr; - QString descStr; - bool picOk; - bool lowRamMode; - bool writeEnabled; - bool cacheEnabled; - bool isLoadedInRAM; - bool isCustomFormat; - int jpegRawContentSize; - int jpegRawContentSizeE; - - // PICTURE STREAM - QByteArray rawPicContent; - - // JSON - void parseJsonContent(); - bool jsonOk; - QString jsonStr; - SnapmaticProperties localSpJson; - - // VERIFY CONTENT - static bool verifyTitleChar(const QChar &titleChar); - -signals: - void preloaded(); - void updated(); - void loaded(); - -public slots: -}; - -#endif // SNAPMATICPICTURE_H +/***************************************************************************** +* gta5sync-spv Grand Theft Auto Snapmatic Picture Viewer +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef SNAPMATICPICTURE_H +#define SNAPMATICPICTURE_H + +#include +#include +#include +#include +#include +#include + +enum class SnapmaticFormat : int { Auto_Format = 0, PGTA_Format = 1, JPEG_Format = 2, G5E_Format = 3 }; + +struct SnapmaticProperties { + struct SnapmaticLocation { + QString area; + double x; + double y; + double z; + }; + int uid; + int crewID; + QStringList playersList; + uint createdTimestamp; + QDateTime createdDateTime; + bool isMeme; + bool isMug; + bool isSelfie; + bool isFromDirector; + bool isFromRSEditor; + SnapmaticLocation location; +}; + +class SnapmaticPicture : public QObject +{ + Q_OBJECT +public: + explicit SnapmaticPicture(const QString &fileName = "", QObject *parent = 0); + ~SnapmaticPicture(); + void reset(); + bool preloadFile(); + bool readingPictureFromFile(const QString &fileName, bool writeEnabled = true, bool cacheEnabled = false, bool fastLoad = true, bool lowRamMode = false); + bool readingPicture(bool writeEnabled = true, bool cacheEnabled = false, bool fastLoad = true, bool lowRamMode = false); + bool isPicOk(); + void clearCache(); + QImage getImage(bool fastLoad = false); + QString getLastStep(); + QString getPictureStr(); + QString getPictureHead(); + QString getPictureTitl(); + QString getPictureDesc(); + QString getPictureSortStr(); + QString getPictureFileName(); + QString getPictureFilePath(); + QString getExportPictureFileName(); + int getContentMaxLength(); + bool setImage(const QImage &picture); + bool setPictureTitl(const QString &newTitle); + bool setPictureStream(const QByteArray &picByteArray); + void updateStrings(); + void emitUpdate(); + + // FILE MANAGEMENT + bool exportPicture(const QString &fileName, SnapmaticFormat format = SnapmaticFormat::Auto_Format); + void setPicFileName(const QString &picFileName); + void setPicFilePath(const QString &picFilePath); + bool deletePicFile(); + + // ALTERNATIVES + QString getPictureTitle() { return getPictureTitl(); } + QString getPictureString() { return getPictureStr(); } + QString getPictureDescription() { return getPictureDesc(); } + bool setPictureTitle(const QString &newTitle) { return setPictureTitl(newTitle); } + + // JSON + bool isJsonOk(); + QString getJsonStr(); + SnapmaticProperties getSnapmaticProperties(); + bool setSnapmaticProperties(SnapmaticProperties newSpJson); + bool setJsonStr(const QString &jsonStr); + + // VISIBILITY + bool isHidden(); + bool setPictureHidden(); + bool setPictureVisible(); + + // PREDEFINED PROPERTIES + QSize getSnapmaticResolution(); + + // SNAPMATIC DEFAULTS + bool isSnapmaticDefaultsEnforced(); + void setSnapmaticDefaultsEnforced(bool enforced); + + // VERIFY CONTENT + static bool verifyTitle(const QString &title); + +private: + QString getSnapmaticHeaderString(const QByteArray &snapmaticHeader); + QString getSnapmaticJSONString(const QByteArray &jsonBytes); + QString getSnapmaticTIDEString(const QByteArray &tideBytes); + QImage cachePicture; + QString picExportFileName; + QString picFileName; + QString picFilePath; + QString pictureHead; + QString pictureStr; + QString lastStep; + QString sortStr; + QString titlStr; + QString descStr; + bool picOk; + bool lowRamMode; + bool writeEnabled; + bool cacheEnabled; + bool isLoadedInRAM; + bool isCustomFormat; + bool careSnapDefault; + int jpegRawContentSize; + int jpegRawContentSizeE; + + // PICTURE STREAM + QByteArray rawPicContent; + + // JSON + void parseJsonContent(); + bool jsonOk; + QString jsonStr; + SnapmaticProperties localSpJson; + + // VERIFY CONTENT + static bool verifyTitleChar(const QChar &titleChar); + +signals: + void preloaded(); + void updated(); + void loaded(); + +public slots: +}; + +#endif // SNAPMATICPICTURE_H diff --git a/SnapmaticWidget.cpp b/SnapmaticWidget.cpp index ddb9b73..dd5ca98 100755 --- a/SnapmaticWidget.cpp +++ b/SnapmaticWidget.cpp @@ -1,345 +1,331 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "SnapmaticWidget.h" -#include "ui_SnapmaticWidget.h" -#include "SnapmaticPicture.h" -#include "SnapmaticEditor.h" -#include "DatabaseThread.h" -#include "PictureDialog.h" -#include "PictureExport.h" -#include "StringParser.h" -#include "AppEnv.h" -#include "config.h" -#include -#include -#include -#include -#include -#include - -SnapmaticWidget::SnapmaticWidget(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent) : - ProfileWidget(parent), profileDB(profileDB), crewDB(crewDB), threadDB(threadDB), - ui(new Ui::SnapmaticWidget) -{ - ui->setupUi(this); - ui->cmdView->setVisible(false); - ui->cmdCopy->setVisible(false); - ui->cmdExport->setVisible(false); - ui->cmdDelete->setVisible(false); - ui->cbSelected->setVisible(false); - - QPalette palette; - highlightBackColor = palette.highlight().color(); - highlightTextColor = palette.highlightedText().color(); - palette.setCurrentColorGroup(QPalette::Disabled); - highlightHiddenColor = palette.text().color(); - - picPath = ""; - picStr = ""; - smpic = 0; - - installEventFilter(this); -} - -SnapmaticWidget::~SnapmaticWidget() -{ - delete ui; -} - -bool SnapmaticWidget::eventFilter(QObject *obj, QEvent *ev) -{ - if (obj == this) - { - if (ev->type() == QEvent::Enter) - { - setStyleSheet(QString("QFrame#SnapmaticFrame{background-color: rgb(%1, %2, %3)}QLabel#labPicStr{color: rgb(%4, %5, %6)}").arg(QString::number(highlightBackColor.red()), QString::number(highlightBackColor.green()), QString::number(highlightBackColor.blue()), QString::number(highlightTextColor.red()), QString::number(highlightTextColor.green()), QString::number(highlightTextColor.blue()))); - return true; - } - else if(ev->type() == QEvent::Leave) - { - setStyleSheet(""); - return true; - } - } - return false; -} - -void SnapmaticWidget::setSnapmaticPicture(SnapmaticPicture *picture) -{ - smpic = picture; - picPath = picture->getPictureFilePath(); - picTitl = picture->getPictureTitl(); - picStr = picture->getPictureStr(); - QObject::connect(picture, SIGNAL(updated()), this, SLOT(snapmaticUpdated())); - - qreal screenRatio = AppEnv::screenRatio(); - ui->labPicture->setFixedSize(48 * screenRatio, 27 * screenRatio); - - QPixmap SnapmaticPixmap = QPixmap::fromImage(picture->getImage().scaled(ui->labPicture->width(), ui->labPicture->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation), Qt::AutoColor); - ui->labPicStr->setText(picStr + "\n" + picTitl + ""); - ui->labPicture->setPixmap(SnapmaticPixmap); - - picture->clearCache(); - - adjustTextColor(); -} - -void SnapmaticWidget::snapmaticUpdated() -{ - // Current only strings get updated - picPath = smpic->getPictureFilePath(); - picTitl = smpic->getPictureTitl(); - picStr = smpic->getPictureStr(); - ui->labPicStr->setText(picStr + "\n" + picTitl + ""); -} - -void SnapmaticWidget::on_cmdView_clicked() -{ - QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); - settings.beginGroup("Interface"); - bool navigationBar = settings.value("NavigationBar", false).toBool(); - settings.endGroup(); - - PictureDialog *picDialog = new PictureDialog(profileDB, crewDB, this); - picDialog->setSnapmaticPicture(smpic, true); - picDialog->setModal(true); - - // be ready for playerName updated - QObject::connect(threadDB, SIGNAL(playerNameUpdated()), picDialog, SLOT(playerNameUpdated())); - QObject::connect(picDialog, SIGNAL(nextPictureRequested()), this, SLOT(dialogNextPictureRequested())); - QObject::connect(picDialog, SIGNAL(previousPictureRequested()), this, SLOT(dialogPreviousPictureRequested())); - - // add previous next buttons - if (navigationBar) picDialog->addPreviousNextButtons(); - - // show picture dialog -#ifdef Q_OS_ANDROID - // Android ... - picDialog->showMaximized(); -#else - picDialog->show(); - if (navigationBar) picDialog->stylizeDialog(); - //picDialog->adaptNewDialogSize(); - picDialog->setMinimumSize(picDialog->size()); - picDialog->setMaximumSize(picDialog->size()); -#endif - picDialog->exec(); - delete picDialog; -} - -void SnapmaticWidget::on_cmdCopy_clicked() -{ - PictureExport::exportAsSnapmatic(this, smpic); -} - -void SnapmaticWidget::on_cmdExport_clicked() -{ - PictureExport::exportAsPicture(this, smpic); -} - -void SnapmaticWidget::on_cmdDelete_clicked() -{ - 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("\""+picStr+"\""), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); - if (uchoice == QMessageBox::Yes) - { - if (smpic->deletePicFile()) - { - return true; - } - else - { - QMessageBox::warning(this, tr("Delete picture"), tr("Failed at deleting %1 from your Snapmatic pictures").arg("\""+picStr+"\"")); - } - } - return false; -} - -void SnapmaticWidget::mousePressEvent(QMouseEvent *ev) -{ - ProfileWidget::mousePressEvent(ev); -} - -void SnapmaticWidget::mouseReleaseEvent(QMouseEvent *ev) -{ - ProfileWidget::mouseReleaseEvent(ev); - if (ui->cbSelected->isVisible()) - { - if (rect().contains(ev->pos()) && ev->button() == Qt::LeftButton) - { - ui->cbSelected->setChecked(!ui->cbSelected->isChecked()); - } - } - else - { - if (getContentMode() == 0 && rect().contains(ev->pos()) && ev->button() == Qt::LeftButton) - { - on_cmdView_clicked(); - } - } -} - -void SnapmaticWidget::mouseDoubleClickEvent(QMouseEvent *ev) -{ - ProfileWidget::mouseDoubleClickEvent(ev); - - if (!ui->cbSelected->isVisible() && getContentMode() == 1 && ev->button() == Qt::LeftButton) - { - on_cmdView_clicked(); - } -} - -void SnapmaticWidget::setSelected(bool isSelected) -{ - ui->cbSelected->setChecked(isSelected); -} - -void SnapmaticWidget::pictureSelected() -{ - setSelected(!ui->cbSelected->isChecked()); -} - -void SnapmaticWidget::contextMenuEvent(QContextMenuEvent *ev) -{ - emit contextMenuTriggered(ev); -} - -void SnapmaticWidget::dialogNextPictureRequested() -{ - emit nextPictureRequested((QWidget*)sender()); -} - -void SnapmaticWidget::dialogPreviousPictureRequested() -{ - emit previousPictureRequested((QWidget*)sender()); -} - -void SnapmaticWidget::on_cbSelected_stateChanged(int arg1) -{ - if (arg1 == Qt::Checked) - { - emit widgetSelected(); - } - else if (arg1 == Qt::Unchecked) - { - emit widgetDeselected(); - } -} - -void SnapmaticWidget::adjustTextColor() -{ - 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 - { - ui->labPicStr->setStyleSheet(""); - } -} - -bool SnapmaticWidget::makePictureHidden() -{ - if (smpic->setPictureHidden()) - { - picPath = smpic->getPictureFilePath(); - adjustTextColor(); - return true; - } - return false; -} - -bool SnapmaticWidget::makePictureVisible() -{ - if (smpic->setPictureVisible()) - { - picPath = smpic->getPictureFilePath(); - adjustTextColor(); - return true; - } - return false; -} - -void SnapmaticWidget::makePictureHiddenSlot() -{ - makePictureHidden(); -} - -void SnapmaticWidget::makePictureVisibleSlot() -{ - makePictureVisible(); -} - -void SnapmaticWidget::editSnapmaticProperties() -{ - SnapmaticEditor *snapmaticEditor = new SnapmaticEditor(crewDB, this); - snapmaticEditor->setWindowFlags(snapmaticEditor->windowFlags()^Qt::WindowContextHelpButtonHint); - snapmaticEditor->setSnapmaticPicture(smpic); - snapmaticEditor->setModal(true); - snapmaticEditor->exec(); - delete snapmaticEditor; -} - -bool SnapmaticWidget::isSelected() -{ - return ui->cbSelected->isChecked(); -} - -bool SnapmaticWidget::isHidden() -{ - if (picPath.right(7) == ".hidden") - { - return true; - } - return false; -} - -void SnapmaticWidget::setSelectionMode(bool selectionMode) -{ - ui->cbSelected->setVisible(selectionMode); -} - -void SnapmaticWidget::selectAllWidgets() -{ - emit allWidgetsSelected(); -} - -void SnapmaticWidget::deselectAllWidgets() -{ - emit allWidgetsDeselected(); -} - -SnapmaticPicture* SnapmaticWidget::getPicture() -{ - return smpic; -} - -QString SnapmaticWidget::getPicturePath() -{ - return picPath; -} - -QString SnapmaticWidget::getWidgetType() -{ - return "SnapmaticWidget"; -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "SnapmaticWidget.h" +#include "ui_SnapmaticWidget.h" +#include "SnapmaticPicture.h" +#include "SnapmaticEditor.h" +#include "DatabaseThread.h" +#include "PictureDialog.h" +#include "PictureExport.h" +#include "StringParser.h" +#include "AppEnv.h" +#include "config.h" +#include +#include +#include +#include +#include +#include +#include + +SnapmaticWidget::SnapmaticWidget(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent) : + ProfileWidget(parent), profileDB(profileDB), crewDB(crewDB), threadDB(threadDB), + ui(new Ui::SnapmaticWidget) +{ + ui->setupUi(this); + ui->cmdView->setVisible(false); + ui->cmdCopy->setVisible(false); + ui->cmdExport->setVisible(false); + ui->cmdDelete->setVisible(false); + ui->cbSelected->setVisible(false); + + QPalette palette; + palette.setCurrentColorGroup(QPalette::Disabled); + highlightHiddenColor = palette.text().color(); + + ui->SnapmaticFrame->setMouseTracking(true); + ui->labPicture->setMouseTracking(true); + ui->labPicStr->setMouseTracking(true); + ui->cbSelected->setMouseTracking(true); + smpic = nullptr; +} + +SnapmaticWidget::~SnapmaticWidget() +{ + delete ui; +} + +void SnapmaticWidget::setSnapmaticPicture(SnapmaticPicture *picture) +{ + smpic = picture; + QObject::connect(picture, SIGNAL(updated()), this, SLOT(snapmaticUpdated())); + + qreal screenRatio = AppEnv::screenRatio(); + ui->labPicture->setFixedSize(48 * screenRatio, 27 * screenRatio); + + QPixmap SnapmaticPixmap = QPixmap::fromImage(picture->getImage().scaled(ui->labPicture->width(), ui->labPicture->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation), Qt::AutoColor); + ui->labPicStr->setText(smpic->getPictureStr() % "\n" % smpic->getPictureTitl() % ""); + ui->labPicture->setPixmap(SnapmaticPixmap); + + picture->clearCache(); + + adjustTextColor(); +} + +void SnapmaticWidget::snapmaticUpdated() +{ + ui->labPicStr->setText(smpic->getPictureStr() % "\n" % smpic->getPictureTitl() % ""); +} + +void SnapmaticWidget::retranslate() +{ + smpic->updateStrings(); + ui->labPicStr->setText(smpic->getPictureStr() % "\n" % smpic->getPictureTitl() % ""); +} + +void SnapmaticWidget::on_cmdView_clicked() +{ + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("Interface"); + bool navigationBar = settings.value("NavigationBar", false).toBool(); + settings.endGroup(); + + PictureDialog *picDialog = new PictureDialog(profileDB, crewDB, this); + picDialog->setSnapmaticPicture(smpic, true); + picDialog->setModal(true); + + // be ready for crewName and playerName updated + QObject::connect(threadDB, SIGNAL(crewNameUpdated()), picDialog, SLOT(crewNameUpdated())); + QObject::connect(threadDB, SIGNAL(playerNameUpdated()), picDialog, SLOT(playerNameUpdated())); + QObject::connect(picDialog, SIGNAL(nextPictureRequested()), this, SLOT(dialogNextPictureRequested())); + QObject::connect(picDialog, SIGNAL(previousPictureRequested()), this, SLOT(dialogPreviousPictureRequested())); + + // add previous next buttons + if (navigationBar) picDialog->addPreviousNextButtons(); + + // show picture dialog +#ifdef Q_OS_ANDROID + // Android ... + picDialog->showMaximized(); +#else + picDialog->show(); + if (navigationBar) picDialog->stylizeDialog(); + //picDialog->adaptNewDialogSize(); + picDialog->setMinimumSize(picDialog->size()); + picDialog->setMaximumSize(picDialog->size()); +#endif + picDialog->exec(); + delete picDialog; +} + +void SnapmaticWidget::on_cmdCopy_clicked() +{ + PictureExport::exportAsSnapmatic(this, smpic); +} + +void SnapmaticWidget::on_cmdExport_clicked() +{ + PictureExport::exportAsPicture(this, smpic); +} + +void SnapmaticWidget::on_cmdDelete_clicked() +{ + 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->getPictureStr()+"\""), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); + if (uchoice == QMessageBox::Yes) + { + if (smpic->deletePicFile()) + { + return true; + } + else + { + QMessageBox::warning(this, tr("Delete picture"), tr("Failed at deleting %1 from your Snapmatic pictures").arg("\""+smpic->getPictureStr()+"\"")); + } + } + return false; +} + +void SnapmaticWidget::mousePressEvent(QMouseEvent *ev) +{ + ProfileWidget::mousePressEvent(ev); +} + +void SnapmaticWidget::mouseReleaseEvent(QMouseEvent *ev) +{ + ProfileWidget::mouseReleaseEvent(ev); + if (ui->cbSelected->isVisible()) + { + if (rect().contains(ev->pos()) && ev->button() == Qt::LeftButton) + { + ui->cbSelected->setChecked(!ui->cbSelected->isChecked()); + } + } + else + { + if (getContentMode() == 0 && rect().contains(ev->pos()) && ev->button() == Qt::LeftButton) + { + if (ev->modifiers().testFlag(Qt::ShiftModifier)) + { + ui->cbSelected->setChecked(!ui->cbSelected->isChecked()); + } + else + { + on_cmdView_clicked(); + } + } + else if (!ui->cbSelected->isVisible() && getContentMode() == 1 && ev->button() == Qt::LeftButton && ev->modifiers().testFlag(Qt::ShiftModifier)) + { + ui->cbSelected->setChecked(!ui->cbSelected->isChecked()); + } + } +} + +void SnapmaticWidget::mouseDoubleClickEvent(QMouseEvent *ev) +{ + ProfileWidget::mouseDoubleClickEvent(ev); + + if (!ui->cbSelected->isVisible() && getContentMode() == 1 && ev->button() == Qt::LeftButton) + { + on_cmdView_clicked(); + } +} + +void SnapmaticWidget::setSelected(bool isSelected) +{ + ui->cbSelected->setChecked(isSelected); +} + +void SnapmaticWidget::pictureSelected() +{ + setSelected(!ui->cbSelected->isChecked()); +} + +void SnapmaticWidget::contextMenuEvent(QContextMenuEvent *ev) +{ + emit contextMenuTriggered(ev); +} + +void SnapmaticWidget::dialogNextPictureRequested() +{ + emit nextPictureRequested((QWidget*)sender()); +} + +void SnapmaticWidget::dialogPreviousPictureRequested() +{ + emit previousPictureRequested((QWidget*)sender()); +} + +void SnapmaticWidget::on_cbSelected_stateChanged(int arg1) +{ + if (arg1 == Qt::Checked) + { + emit widgetSelected(); + } + else if (arg1 == Qt::Unchecked) + { + emit widgetDeselected(); + } +} + +void SnapmaticWidget::adjustTextColor() +{ + 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 + { + ui->labPicStr->setStyleSheet(""); + } +} + +bool SnapmaticWidget::makePictureHidden() +{ + if (smpic->setPictureHidden()) + { + adjustTextColor(); + return true; + } + return false; +} + +bool SnapmaticWidget::makePictureVisible() +{ + if (smpic->setPictureVisible()) + { + adjustTextColor(); + return true; + } + return false; +} + +void SnapmaticWidget::makePictureHiddenSlot() +{ + makePictureHidden(); +} + +void SnapmaticWidget::makePictureVisibleSlot() +{ + makePictureVisible(); +} + +void SnapmaticWidget::editSnapmaticProperties() +{ + SnapmaticEditor *snapmaticEditor = new SnapmaticEditor(crewDB, this); + snapmaticEditor->setWindowFlags(snapmaticEditor->windowFlags()^Qt::WindowContextHelpButtonHint); + snapmaticEditor->setSnapmaticPicture(smpic); + snapmaticEditor->setModal(true); + snapmaticEditor->exec(); + delete snapmaticEditor; +} + +bool SnapmaticWidget::isSelected() +{ + return ui->cbSelected->isChecked(); +} + +bool SnapmaticWidget::isHidden() +{ + return smpic->isHidden(); +} + +void SnapmaticWidget::setSelectionMode(bool selectionMode) +{ + ui->cbSelected->setVisible(selectionMode); +} + +void SnapmaticWidget::selectAllWidgets() +{ + emit allWidgetsSelected(); +} + +void SnapmaticWidget::deselectAllWidgets() +{ + emit allWidgetsDeselected(); +} + +SnapmaticPicture* SnapmaticWidget::getPicture() +{ + return smpic; +} + +QString SnapmaticWidget::getPicturePath() +{ + return smpic->getPictureFilePath(); +} + +QString SnapmaticWidget::getWidgetType() +{ + return "SnapmaticWidget"; +} diff --git a/SnapmaticWidget.h b/SnapmaticWidget.h index a25b638..9a7b3f3 100755 --- a/SnapmaticWidget.h +++ b/SnapmaticWidget.h @@ -1,104 +1,98 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef SNAPMATICWIDGET_H -#define SNAPMATICWIDGET_H - -#include "SnapmaticPicture.h" -#include "ProfileDatabase.h" -#include "DatabaseThread.h" -#include "ProfileWidget.h" -#include "CrewDatabase.h" -#include -#include -#include -#include - -namespace Ui { -class SnapmaticWidget; -} - -class SnapmaticWidget : public ProfileWidget -{ - Q_OBJECT - -public: - SnapmaticWidget(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent = 0); - void setSnapmaticPicture(SnapmaticPicture *picture); - void setSelectionMode(bool selectionMode); - void setSelected(bool isSelected); - bool deletePicture(); - bool makePictureVisible(); - bool makePictureHidden(); - SnapmaticPicture *getPicture(); - QString getPicturePath(); - QString getWidgetType(); - bool isSelected(); - bool isHidden(); - ~SnapmaticWidget(); - -private slots: - void on_cmdView_clicked(); - void on_cmdCopy_clicked(); - void on_cmdExport_clicked(); - void on_cmdDelete_clicked(); - void on_cbSelected_stateChanged(int arg1); - void adjustTextColor(); - void pictureSelected(); - void selectAllWidgets(); - void deselectAllWidgets(); - void dialogNextPictureRequested(); - void dialogPreviousPictureRequested(); - void makePictureVisibleSlot(); - void makePictureHiddenSlot(); - void editSnapmaticProperties(); - void snapmaticUpdated(); - -protected: - bool eventFilter(QObject *obj, QEvent *ev); - void mouseDoubleClickEvent(QMouseEvent *ev); - void mouseReleaseEvent(QMouseEvent *ev); - void mousePressEvent(QMouseEvent *ev); - void contextMenuEvent(QContextMenuEvent *ev); - -private: - ProfileDatabase *profileDB; - CrewDatabase *crewDB; - DatabaseThread *threadDB; - Ui::SnapmaticWidget *ui; - SnapmaticPicture *smpic; - QColor highlightBackColor; - QColor highlightTextColor; - QColor highlightHiddenColor; - QString picPath; - QString picTitl; - QString picStr; - QWidget *snwgt; - -signals: - void pictureDeleted(); - void widgetSelected(); - void widgetDeselected(); - void allWidgetsSelected(); - void allWidgetsDeselected(); - void nextPictureRequested(QWidget *dialog); - void previousPictureRequested(QWidget *dialog); - void contextMenuTriggered(QContextMenuEvent *ev); -}; - -#endif // SNAPMATICWIDGET_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef SNAPMATICWIDGET_H +#define SNAPMATICWIDGET_H + +#include "SnapmaticPicture.h" +#include "ProfileDatabase.h" +#include "DatabaseThread.h" +#include "ProfileWidget.h" +#include "CrewDatabase.h" +#include +#include +#include +#include + +namespace Ui { +class SnapmaticWidget; +} + +class SnapmaticWidget : public ProfileWidget +{ + Q_OBJECT + +public: + SnapmaticWidget(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent = 0); + void setSnapmaticPicture(SnapmaticPicture *picture); + void setSelectionMode(bool selectionMode); + void setSelected(bool isSelected); + bool deletePicture(); + bool makePictureVisible(); + bool makePictureHidden(); + SnapmaticPicture *getPicture(); + QString getPicturePath(); + QString getWidgetType(); + bool isSelected(); + bool isHidden(); + void retranslate(); + ~SnapmaticWidget(); + +private slots: + void on_cmdView_clicked(); + void on_cmdCopy_clicked(); + void on_cmdExport_clicked(); + void on_cmdDelete_clicked(); + void on_cbSelected_stateChanged(int arg1); + void adjustTextColor(); + void pictureSelected(); + void selectAllWidgets(); + void deselectAllWidgets(); + void dialogNextPictureRequested(); + void dialogPreviousPictureRequested(); + void makePictureVisibleSlot(); + void makePictureHiddenSlot(); + void editSnapmaticProperties(); + void snapmaticUpdated(); + +protected: + void mouseDoubleClickEvent(QMouseEvent *ev); + void mouseReleaseEvent(QMouseEvent *ev); + void mousePressEvent(QMouseEvent *ev); + void contextMenuEvent(QContextMenuEvent *ev); + +private: + ProfileDatabase *profileDB; + CrewDatabase *crewDB; + DatabaseThread *threadDB; + Ui::SnapmaticWidget *ui; + SnapmaticPicture *smpic; + QColor highlightHiddenColor; + +signals: + void pictureDeleted(); + void widgetSelected(); + void widgetDeselected(); + void allWidgetsSelected(); + void allWidgetsDeselected(); + void nextPictureRequested(QWidget *dialog); + void previousPictureRequested(QWidget *dialog); + void contextMenuTriggered(QContextMenuEvent *ev); +}; + +#endif // SNAPMATICWIDGET_H diff --git a/SnapmaticWidget.ui b/SnapmaticWidget.ui index 5c720c8..a3e7e89 100755 --- a/SnapmaticWidget.ui +++ b/SnapmaticWidget.ui @@ -1,169 +1,169 @@ - - - SnapmaticWidget - - - - 0 - 0 - 490 - 45 - - - - Snapmatic Widget - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QFrame::NoFrame - - - QFrame::Plain - - - 0 - - - - - - Qt::NoFocus - - - - - - - - - - - 48 - 27 - - - - - 48 - 27 - - - - 0 - - - - - - true - - - - - - - - 0 - 0 - - - - PHOTO - 00/00/00 00:00:00 - - - true - - - - - - - - 0 - 0 - - - - View picture - - - View - - - true - - - - - - - - 0 - 0 - - - - Copy picture - - - Copy - - - - - - - - 0 - 0 - - - - Export picture - - - Export - - - - - - - - 0 - 0 - - - - Delete picture - - - Delete - - - true - - - - - - - - - - - + + + SnapmaticWidget + + + + 0 + 0 + 490 + 45 + + + + Snapmatic Widget + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + + + Qt::NoFocus + + + + + + + + + + + 48 + 27 + + + + + 48 + 27 + + + + 0 + + + + + + true + + + + + + + + 0 + 0 + + + + PHOTO - 00/00/00 00:00:00 + + + true + + + + + + + + 0 + 0 + + + + View picture + + + View + + + true + + + + + + + + 0 + 0 + + + + Copy picture + + + Copy + + + + + + + + 0 + 0 + + + + Export picture + + + Export + + + + + + + + 0 + 0 + + + + Delete picture + + + Delete + + + true + + + + + + + + + + + diff --git a/StandardPaths.cpp b/StandardPaths.cpp index dda73a3..fa5ed24 100755 --- a/StandardPaths.cpp +++ b/StandardPaths.cpp @@ -1,128 +1,128 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "StandardPaths.h" -#if QT_VERSION >= 0x050000 -#include -#else -#include -#endif - -StandardPaths::StandardPaths() -{ - -} - -QString StandardPaths::applicationsLocation() -{ -#if QT_VERSION >= 0x050000 - return QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation); -#else - return QDesktopServices::storageLocation(QDesktopServices::ApplicationsLocation); -#endif -} - -QString StandardPaths::cacheLocation() -{ -#if QT_VERSION >= 0x050000 - return QStandardPaths::writableLocation(QStandardPaths::CacheLocation); -#else - return QDesktopServices::storageLocation(QDesktopServices::CacheLocation); -#endif -} - -QString StandardPaths::dataLocation() -{ -#if QT_VERSION >= 0x050000 - return QStandardPaths::writableLocation(QStandardPaths::DataLocation); -#else - return QDesktopServices::storageLocation(QDesktopServices::DataLocation); -#endif -} - -QString StandardPaths::desktopLocation() -{ -#if QT_VERSION >= 0x050000 - return QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); -#else - return QDesktopServices::storageLocation(QDesktopServices::DesktopLocation); -#endif -} - -QString StandardPaths::documentsLocation() -{ -#if QT_VERSION >= 0x050000 - return QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); -#else - return QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); -#endif -} - -QString StandardPaths::moviesLocation() -{ -#if QT_VERSION >= 0x050000 - return QStandardPaths::writableLocation(QStandardPaths::MoviesLocation); -#else - return QDesktopServices::storageLocation(QDesktopServices::MoviesLocation); -#endif -} - -QString StandardPaths::picturesLocation() -{ -#if QT_VERSION >= 0x050000 - return QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); -#else - return QDesktopServices::storageLocation(QDesktopServices::PicturesLocation); -#endif -} - -QString StandardPaths::fontsLocation() -{ -#if QT_VERSION >= 0x050000 - return QStandardPaths::writableLocation(QStandardPaths::FontsLocation); -#else - return QDesktopServices::storageLocation(QDesktopServices::FontsLocation); -#endif -} - -QString StandardPaths::homeLocation() -{ -#if QT_VERSION >= 0x050000 - return QStandardPaths::writableLocation(QStandardPaths::HomeLocation); -#else - return QDesktopServices::storageLocation(QDesktopServices::HomeLocation); -#endif -} - -QString StandardPaths::musicLocation() -{ -#if QT_VERSION >= 0x050000 - return QStandardPaths::writableLocation(QStandardPaths::MusicLocation); -#else - return QDesktopServices::storageLocation(QDesktopServices::MusicLocation); -#endif -} - -QString StandardPaths::tempLocation() -{ -#if QT_VERSION >= 0x050000 - return QStandardPaths::writableLocation(QStandardPaths::TempLocation); -#else - return QDesktopServices::storageLocation(QDesktopServices::TempLocation); -#endif -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "StandardPaths.h" +#if QT_VERSION >= 0x050000 +#include +#else +#include +#endif + +StandardPaths::StandardPaths() +{ + +} + +QString StandardPaths::applicationsLocation() +{ +#if QT_VERSION >= 0x050000 + return QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation); +#else + return QDesktopServices::storageLocation(QDesktopServices::ApplicationsLocation); +#endif +} + +QString StandardPaths::cacheLocation() +{ +#if QT_VERSION >= 0x050000 + return QStandardPaths::writableLocation(QStandardPaths::CacheLocation); +#else + return QDesktopServices::storageLocation(QDesktopServices::CacheLocation); +#endif +} + +QString StandardPaths::dataLocation() +{ +#if QT_VERSION >= 0x050000 + return QStandardPaths::writableLocation(QStandardPaths::DataLocation); +#else + return QDesktopServices::storageLocation(QDesktopServices::DataLocation); +#endif +} + +QString StandardPaths::desktopLocation() +{ +#if QT_VERSION >= 0x050000 + return QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); +#else + return QDesktopServices::storageLocation(QDesktopServices::DesktopLocation); +#endif +} + +QString StandardPaths::documentsLocation() +{ +#if QT_VERSION >= 0x050000 + return QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); +#else + return QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); +#endif +} + +QString StandardPaths::moviesLocation() +{ +#if QT_VERSION >= 0x050000 + return QStandardPaths::writableLocation(QStandardPaths::MoviesLocation); +#else + return QDesktopServices::storageLocation(QDesktopServices::MoviesLocation); +#endif +} + +QString StandardPaths::picturesLocation() +{ +#if QT_VERSION >= 0x050000 + return QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); +#else + return QDesktopServices::storageLocation(QDesktopServices::PicturesLocation); +#endif +} + +QString StandardPaths::fontsLocation() +{ +#if QT_VERSION >= 0x050000 + return QStandardPaths::writableLocation(QStandardPaths::FontsLocation); +#else + return QDesktopServices::storageLocation(QDesktopServices::FontsLocation); +#endif +} + +QString StandardPaths::homeLocation() +{ +#if QT_VERSION >= 0x050000 + return QStandardPaths::writableLocation(QStandardPaths::HomeLocation); +#else + return QDesktopServices::storageLocation(QDesktopServices::HomeLocation); +#endif +} + +QString StandardPaths::musicLocation() +{ +#if QT_VERSION >= 0x050000 + return QStandardPaths::writableLocation(QStandardPaths::MusicLocation); +#else + return QDesktopServices::storageLocation(QDesktopServices::MusicLocation); +#endif +} + +QString StandardPaths::tempLocation() +{ +#if QT_VERSION >= 0x050000 + return QStandardPaths::writableLocation(QStandardPaths::TempLocation); +#else + return QDesktopServices::storageLocation(QDesktopServices::TempLocation); +#endif +} diff --git a/StandardPaths.h b/StandardPaths.h index 203953b..619bdeb 100755 --- a/StandardPaths.h +++ b/StandardPaths.h @@ -1,41 +1,41 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef STANDARDPATHS_H -#define STANDARDPATHS_H - -#include - -class StandardPaths -{ -public: - StandardPaths(); - static QString applicationsLocation(); - static QString cacheLocation(); - static QString dataLocation(); - static QString desktopLocation(); - static QString documentsLocation(); - static QString fontsLocation(); - static QString homeLocation(); - static QString moviesLocation(); - static QString picturesLocation(); - static QString musicLocation(); - static QString tempLocation(); -}; - -#endif // STANDARDPATHS_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef STANDARDPATHS_H +#define STANDARDPATHS_H + +#include + +class StandardPaths +{ +public: + StandardPaths(); + static QString applicationsLocation(); + static QString cacheLocation(); + static QString dataLocation(); + static QString desktopLocation(); + static QString documentsLocation(); + static QString fontsLocation(); + static QString homeLocation(); + static QString moviesLocation(); + static QString picturesLocation(); + static QString musicLocation(); + static QString tempLocation(); +}; + +#endif // STANDARDPATHS_H diff --git a/StringParser.cpp b/StringParser.cpp index 6addd10..1854c88 100755 --- a/StringParser.cpp +++ b/StringParser.cpp @@ -1,76 +1,80 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "StringParser.h" -#include "config.h" -#include -#ifndef GTA5VIEW_CMD -#include -#endif -#include -#include -#include -#include -#include -#include - -StringParser::StringParser() -{ - -} - -QString StringParser::parseTitleString(const QByteArray &commitBytes, int maxLength) -{ - Q_UNUSED(maxLength) - QString retStr = QTextCodec::codecForName("UTF-16LE")->toUnicode(commitBytes).trimmed(); - retStr.remove(QChar('\x00')); - return retStr; -} - -QString StringParser::convertDrawStringForLog(const QString &inputStr) -{ - QString outputStr = inputStr; - return outputStr.replace("&","&u;").replace(",","&c;"); -} - -QString StringParser::convertLogStringForDraw(const QString &inputStr) -{ - QString outputStr = inputStr; - return outputStr.replace("&c;",",").replace("&u;","&"); -} - -#ifndef GTA5VIEW_CMD -QString StringParser::convertBuildedString(const QString &buildedStr) -{ - QString outputStr = buildedStr; - QByteArray sharePath = GTA5SYNC_SHARE; - outputStr.replace("$SHAREDIR", QString::fromUtf8(sharePath)); - outputStr.replace("$RUNDIR", QFileInfo(qApp->applicationFilePath()).absoluteDir().absolutePath()); - outputStr.replace("$SEPARATOR", QDir::separator()); - return outputStr; -} -#endif - -QString StringParser::escapeString(const QString &toEscape) -{ -#if QT_VERSION >= 0x050000 - return toEscape.toHtmlEscaped(); -#else - return Qt::escape(toEscape); -#endif -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "StringParser.h" +#include "config.h" +#include +#include +#ifndef GTA5VIEW_CMD +#include +#endif +#include +#include +#include +#include +#include +#include + +StringParser::StringParser() +{ + +} + +QString StringParser::parseTitleString(const QByteArray &commitBytes, int maxLength) +{ + Q_UNUSED(maxLength) + QString retStr = QTextCodec::codecForName("UTF-16LE")->toUnicode(commitBytes).trimmed(); + retStr.remove(QChar('\x00')); + return retStr; +} + +QString StringParser::convertDrawStringForLog(const QString &inputStr) +{ + QString outputStr = inputStr; + return outputStr.replace("&","&u;").replace(",","&c;"); +} + +QString StringParser::convertLogStringForDraw(const QString &inputStr) +{ + QString outputStr = inputStr; + return outputStr.replace("&c;",",").replace("&u;","&"); +} + +#ifndef GTA5VIEW_CMD +QString StringParser::convertBuildedString(const QString &buildedStr) +{ + QString outputStr = buildedStr; + QByteArray sharePath = GTA5SYNC_SHARE; + outputStr.replace("APPNAME:", GTA5SYNC_APPSTR); + outputStr.replace("SHAREDDIR:", QString::fromUtf8(sharePath)); + outputStr.replace("RUNDIR:", QFileInfo(qApp->applicationFilePath()).absoluteDir().absolutePath()); + outputStr.replace("QCONFLANG:", QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + outputStr.replace("QCONFPLUG:", QLibraryInfo::location(QLibraryInfo::PluginsPath)); + outputStr.replace("SEPARATOR:", QDir::separator()); + return outputStr; +} +#endif + +QString StringParser::escapeString(const QString &toEscape) +{ +#if QT_VERSION >= 0x050000 + return toEscape.toHtmlEscaped(); +#else + return Qt::escape(toEscape); +#endif +} diff --git a/StringParser.h b/StringParser.h index a9505f6..0b5d7e3 100755 --- a/StringParser.h +++ b/StringParser.h @@ -1,38 +1,38 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef STRINGPARSER_H -#define STRINGPARSER_H - -#include -#include - -class StringParser -{ -public: - StringParser(); - static QString parseTitleString(const QByteArray &commitBytes, int maxLength); - static QString convertDrawStringForLog(const QString &inputStr); - static QString convertLogStringForDraw(const QString &inputStr); -#ifndef GTA5VIEW_CMD - static QString convertBuildedString(const QString &buildedStr); -#endif - static QString escapeString(const QString &toEscape); -}; - -#endif // STRINGPARSER_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef STRINGPARSER_H +#define STRINGPARSER_H + +#include +#include + +class StringParser +{ +public: + StringParser(); + static QString parseTitleString(const QByteArray &commitBytes, int maxLength); + static QString convertDrawStringForLog(const QString &inputStr); + static QString convertLogStringForDraw(const QString &inputStr); +#ifndef GTA5VIEW_CMD + static QString convertBuildedString(const QString &buildedStr); +#endif + static QString escapeString(const QString &toEscape); +}; + +#endif // STRINGPARSER_H diff --git a/TranslationClass.cpp b/TranslationClass.cpp new file mode 100644 index 0000000..6dc4d7f --- /dev/null +++ b/TranslationClass.cpp @@ -0,0 +1,543 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "TranslationClass.h" +#include "AppEnv.h" +#include "config.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if QT_VERSION >= 0x050000 +#define QtBaseTranslationFormat "qtbase_" +#else +#define QtBaseTranslationFormat "qt_" +#endif + +TranslationClass TranslationClass::translationClassInstance; + +void TranslationClass::initUserLanguage() +{ + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("Interface"); + userLanguage = settings.value("Language", "System").toString(); + settings.endGroup(); +} + +void TranslationClass::loadTranslation(QApplication *app) +{ + if (isLangLoaded) { unloadTranslation(app); } + else { currentLangIndex = 0; } + QString exLangPath = AppEnv::getExLangFolder(); + QString inLangPath = AppEnv::getInLangFolder(); + if (userLanguage == "en" || userLanguage == "en_GB") + { + currentLanguage = "en_GB"; + if (loadQtTranslation_p(exLangPath, &exQtTranslator)) + { + app->installTranslator(&exQtTranslator); + } + else if (loadQtTranslation_p(inLangPath, &inQtTranslator)) + { + app->installTranslator(&inQtTranslator); + } + QLocale::setDefault(currentLanguage); + isLangLoaded = true; + return; + } +#ifndef GTA5SYNC_QCONF // Classic modable loading method + QString externalLanguageStr; + bool externalLanguageReady = false; + bool loadInternalLang = false; + bool trLoadSuccess = false; + if (isUserLanguageSystem_p()) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadExSystemLanguage"; +#endif + trLoadSuccess = loadSystemTranslation_p(exLangPath, &exAppTranslator); + } + else + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadExUserLanguage"; +#endif + trLoadSuccess = loadUserTranslation_p(exLangPath, &exAppTranslator); + if (!trLoadSuccess) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadInUserLanguage"; +#endif + trLoadSuccess = loadUserTranslation_p(inLangPath, &inAppTranslator); + if (!trLoadSuccess) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadUserLanguageFailed"; +#endif + } + else + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadUserLanguageSuccess"; +#endif + loadInternalLang = true; + isLangLoaded = true; + } + } + else + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadUserLanguageSuccess"; +#endif + isLangLoaded = true; + } + } + if (trLoadSuccess) + { + if (currentLangIndex != 0) // Don't install the language until we know we not have a better language for the user + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "externalLanguageReady" << currentLanguage; +#endif + externalLanguageStr = currentLanguage; + externalLanguageReady = true; + } + else + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "installTranslation"; +#endif + if (loadInternalLang) + { + app->installTranslator(&inAppTranslator); + } + else + { + app->installTranslator(&exAppTranslator); + } + if (loadQtTranslation_p(exLangPath, &exQtTranslator)) + { + app->installTranslator(&exQtTranslator); + } + else if (loadQtTranslation_p(inLangPath, &inQtTranslator)) + { + app->installTranslator(&inQtTranslator); + } + QLocale::setDefault(currentLanguage); + isLangLoaded = true; + } + } + if (externalLanguageReady) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadInSystemLanguage"; +#endif + int externalLangIndex = currentLangIndex; + trLoadSuccess = loadSystemTranslation_p(inLangPath, &inAppTranslator); +#ifdef GTA5SYNC_DEBUG + qDebug() << "externalLangIndex" << externalLangIndex << "internalLangIndex" << currentLangIndex; +#endif + if (trLoadSuccess && externalLangIndex > currentLangIndex) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "installInternalTranslation"; +#endif + app->installTranslator(&inAppTranslator); + if (loadQtTranslation_p(exLangPath, &exQtTranslator)) + { + app->installTranslator(&exQtTranslator); + } + else if (loadQtTranslation_p(inLangPath, &inQtTranslator)) + { + app->installTranslator(&inQtTranslator); + } + QLocale::setDefault(currentLanguage); + isLangLoaded = true; + } + else + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "installExternalTranslation"; +#endif + currentLanguage = externalLanguageStr; + app->installTranslator(&exAppTranslator); + if (loadQtTranslation_p(exLangPath, &exQtTranslator)) + { + app->installTranslator(&exQtTranslator); + } + else if (loadQtTranslation_p(inLangPath, &inQtTranslator)) + { + app->installTranslator(&inQtTranslator); + } + QLocale::setDefault(currentLanguage); + isLangLoaded = true; + } + } + else if (!isLangLoaded) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadInSystemLanguage"; +#endif + trLoadSuccess = loadSystemTranslation_p(inLangPath, &inAppTranslator); + if (trLoadSuccess) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "installInternalTranslation"; +#endif + app->installTranslator(&inAppTranslator); + if (loadQtTranslation_p(exLangPath, &exQtTranslator)) + { + app->installTranslator(&exQtTranslator); + } + else if (loadQtTranslation_p(inLangPath, &inQtTranslator)) + { + app->installTranslator(&inQtTranslator); + } + QLocale::setDefault(currentLanguage); + isLangLoaded = true; + } + else if (!trLoadSuccess) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "fallbackToDefaultApplicationLanguage"; +#endif + currentLanguage = "en_GB"; + if (loadQtTranslation_p(exLangPath, &exQtTranslator)) + { + app->installTranslator(&exQtTranslator); + } + else if (loadQtTranslation_p(inLangPath, &inQtTranslator)) + { + app->installTranslator(&inQtTranslator); + } + QLocale::setDefault(currentLanguage); + isLangLoaded = true; + } + } +#else // New qconf loading method + bool trLoadSuccess; + if (isUserLanguageSystem_p()) + { + trLoadSuccess = loadSystemTranslation_p(inLangPath, &inAppTranslator); + } + else + { + trLoadSuccess = loadUserTranslation_p(inLangPath, &inAppTranslator); + } + if (!trLoadSuccess && !isUserLanguageSystem_p()) + { + trLoadSuccess = loadSystemTranslation_p(inLangPath, &inAppTranslator); + } + if (trLoadSuccess) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "installTranslation" << currentLanguage; +#endif + app->installTranslator(&inAppTranslator); + if (loadQtTranslation_p(exLangPath, &exQtTranslator)) + { + app->installTranslator(&exQtTranslator); + } + else if (loadQtTranslation_p(inLangPath, &inQtTranslator)) + { + app->installTranslator(&inQtTranslator); + } + QLocale::setDefault(currentLanguage); + isLangLoaded = true; + } +#endif +} + +QStringList TranslationClass::listTranslations(const QString &langPath) +{ + QDir langDir; + langDir.setNameFilters(QStringList("gta5sync_*.qm")); + langDir.setPath(langPath); + QStringList availableLanguages; + foreach(const QString &lang, langDir.entryList(QDir::Files | QDir::NoDotAndDotDot, QDir::NoSort)) + { + availableLanguages << QString(lang).remove("gta5sync_").remove(".qm"); + } + return availableLanguages; +} + +bool TranslationClass::loadSystemTranslation_p(const QString &langPath, QTranslator *appTranslator) +{ +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadSystemTranslation_p"; +#endif + int currentLangCounter = 0; + foreach(const QString &languageName, QLocale::system().uiLanguages()) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguage" << languageName; +#endif + QStringList langList = QString(languageName).replace("-","_").split("_"); + if (langList.length() == 2) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFile" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm"); +#endif + if (QFile::exists(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm")) + { + if (appTranslator->load(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm")) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm"); +#endif + currentLanguage = languageName; + currentLangIndex = currentLangCounter; + return true; + } + } +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFile" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); +#endif + if (QFile::exists(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) + { + if (appTranslator->load(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); +#endif + currentLanguage = languageName; + currentLangIndex = currentLangCounter; + return true; + } + } + if (langList.at(0) == "en") + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "languageEnglishMode index" << currentLangCounter; +#endif + currentLanguage = languageName; + currentLangIndex = currentLangCounter; + return true; + } + } + else if (langList.length() == 1) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFile" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); +#endif + if (QFile::exists(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) + { + if (appTranslator->load(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); +#endif + currentLanguage = languageName; + return true; + } + } + } +#ifdef GTA5SYNC_DEBUG + qDebug() << "currentLangCounter bump"; +#endif + currentLangCounter++; + } + return false; +} + +bool TranslationClass::loadUserTranslation_p(const QString &langPath, QTranslator *appTranslator) +{ +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadUserTranslation_p"; +#endif + QString languageName = userLanguage; + QStringList langList = QString(languageName).replace("-","_").split("_"); + if (langList.length() == 2) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFile" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm"); +#endif + if (QFile::exists(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm")) + { + if (appTranslator->load(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm")) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm"); +#endif + currentLanguage = languageName; + return true; + } + } +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFile" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); +#endif + if (QFile::exists(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) + { + if (appTranslator->load(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); +#endif + currentLanguage = languageName; + return true; + } + } + } + else if (langList.length() == 1) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFile" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); +#endif + if (QFile::exists(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) + { + if (appTranslator->load(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); +#endif + currentLanguage = languageName; + return true; + } + } + } + return false; +} + +bool TranslationClass::loadQtTranslation_p(const QString &langPath, QTranslator *qtTranslator) +{ +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadQtTranslation_p" << currentLanguage; +#endif + QString languageName = currentLanguage; + QStringList langList = QString(languageName).replace("-","_").split("_"); + if (langList.length() == 2) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFile" << QString(langPath % QDir::separator() % QtBaseTranslationFormat % langList.at(0) % "_" % langList.at(1) % ".qm"); +#endif + if (QFile::exists(langPath % QDir::separator() % QtBaseTranslationFormat % langList.at(0) % "_" % langList.at(1) % ".qm")) + { + if (qtTranslator->load(langPath % QDir::separator() % QtBaseTranslationFormat % langList.at(0) % "_" % langList.at(1) % ".qm")) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % QtBaseTranslationFormat % langList.at(0) % "_" % langList.at(1) % ".qm"); +#endif + return true; + } + } +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFile" << QString(langPath % QDir::separator() % QtBaseTranslationFormat % langList.at(0) % ".qm"); +#endif + if (QFile::exists(langPath % QDir::separator() % QtBaseTranslationFormat % langList.at(0) % ".qm")) + { + if (qtTranslator->load(langPath % QDir::separator() % QtBaseTranslationFormat % langList.at(0) % ".qm")) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % QtBaseTranslationFormat % langList.at(0) % ".qm"); +#endif + return true; + } + } + } + else if (langList.length() == 1) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFile" << QString(langPath % QDir::separator() % QtBaseTranslationFormat % langList.at(0) % ".qm"); +#endif + if (QFile::exists(langPath % QDir::separator() % QtBaseTranslationFormat % langList.at(0) % ".qm")) + { + if (qtTranslator->load(langPath % QDir::separator() % QtBaseTranslationFormat % langList.at(0) % ".qm")) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % QtBaseTranslationFormat % langList.at(0) % ".qm"); +#endif + return true; + } + } + } + return false; +} + +bool TranslationClass::isUserLanguageSystem_p() +{ + return (userLanguage == "System" || userLanguage.trimmed().isEmpty()); +} + +QString TranslationClass::getCurrentLanguage() +{ + return currentLanguage; +} + +bool TranslationClass::isLanguageLoaded() +{ + return isLangLoaded; +} + +void TranslationClass::unloadTranslation(QApplication *app) +{ + if (isLangLoaded) + { +#ifndef GTA5SYNC_QCONF + app->removeTranslator(&exAppTranslator); + app->removeTranslator(&exQtTranslator); + app->removeTranslator(&inAppTranslator); + app->removeTranslator(&inQtTranslator); +#else + app->removeTranslator(&inAppTranslator); + app->removeTranslator(&exQtTranslator); +#endif + currentLangIndex = 0; + currentLanguage = QString(); + QLocale::setDefault(QLocale::c()); + isLangLoaded = false; + } +#ifdef _MSC_VER // Fix dumb Microsoft compiler warning + Q_UNUSED(app) +#endif +} + +QString TranslationClass::getCountryCode(QLocale::Country country) +{ + QList locales = QLocale::matchingLocales(QLocale::AnyLanguage, + QLocale::AnyScript, + country); + if (locales.isEmpty()) return QString(); + QStringList localeStrList = locales.at(0).name().split("_"); + if (localeStrList.length() <= 2) + { + return localeStrList.at(1).toLower(); + } + else + { + return QString(); + } +} + +QString TranslationClass::getCountryCode(QLocale locale) +{ + QStringList localeStrList = locale.name().split("_"); + if (localeStrList.length() <= 2) + { + return localeStrList.at(1).toLower(); + } + else + { + return QString(); + } +} diff --git a/TranslationClass.h b/TranslationClass.h new file mode 100644 index 0000000..4ad4242 --- /dev/null +++ b/TranslationClass.h @@ -0,0 +1,63 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef TRANSLATIONCLASS_H +#define TRANSLATIONCLASS_H + +#include +#include +#include +#include +#include +#include + +class TranslationClass : public QObject +{ + Q_OBJECT +public: + static TranslationClass* getInstance() { return &translationClassInstance; } + static QString getCountryCode(QLocale::Country country); + static QString getCountryCode(QLocale locale); + void initUserLanguage(); + void loadTranslation(QApplication *app); + void unloadTranslation(QApplication *app); + QStringList listTranslations(const QString &langPath); + QString getCurrentLanguage(); + bool isLanguageLoaded(); + +private: + static TranslationClass translationClassInstance; + bool loadSystemTranslation_p(const QString &langPath, QTranslator *appTranslator); + bool loadUserTranslation_p(const QString &langPath, QTranslator *appTranslator); + bool loadQtTranslation_p(const QString &langPath, QTranslator *qtTranslator); + bool isUserLanguageSystem_p(); + QTranslator exAppTranslator; + QTranslator exQtTranslator; + QTranslator inAppTranslator; + QTranslator inQtTranslator; + QString currentLanguage; + QString userLanguage; + int currentLangIndex; + bool isLangLoaded; +}; + +extern TranslationClass translationClass; + +#define TCInstance TranslationClass::getInstance() + +#endif // TRANSLATIONCLASS_H diff --git a/UserInterface.cpp b/UserInterface.cpp index b029c6e..e6c4cf0 100755 --- a/UserInterface.cpp +++ b/UserInterface.cpp @@ -1,529 +1,552 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "UserInterface.h" -#include "ui_UserInterface.h" -#include "ProfileInterface.h" -#include "SnapmaticPicture.h" -#include "SidebarGenerator.h" -#include "SavegameDialog.h" -#include "StandardPaths.h" -#include "OptionsDialog.h" -#include "PictureDialog.h" -#include "SavegameData.h" -#include "AboutDialog.h" -#include "IconLoader.h" -#include "AppEnv.h" -#include "config.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -UserInterface::UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent) : - QMainWindow(parent), profileDB(profileDB), crewDB(crewDB), threadDB(threadDB), - ui(new Ui::UserInterface) -{ - ui->setupUi(this); - contentMode = 0; - profileOpen = 0; - profileUI = 0; - ui->menuProfile->setEnabled(false); - ui->actionSelect_profile->setEnabled(false); - ui->actionAbout_gta5sync->setIcon(IconLoader::loadingAppIcon()); - ui->actionAbout_gta5sync->setText(tr("&About %1").arg(GTA5SYNC_APPSTR)); - defaultWindowTitle = tr("%2 - %1").arg("%1", GTA5SYNC_APPSTR); - - this->setWindowTitle(defaultWindowTitle.arg(tr("Select Profile"))); - ui->labVersion->setText(ui->labVersion->text().arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER)); - - if (QIcon::hasThemeIcon("dialog-close")) - { - ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); - } - 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 - } - 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 - } - - // DPI calculation - qreal screenRatio = AppEnv::screenRatio(); - resize(625 * screenRatio, 500 * screenRatio); - ui->vlUserInterface->setSpacing(6 * screenRatio); - ui->vlUserInterface->setContentsMargins(9 * screenRatio, 9 * screenRatio, 9 * screenRatio, 9 * screenRatio); -} - -void UserInterface::setupDirEnv() -{ - // settings init - QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); - - bool folderExists; - GTAV_Folder = AppEnv::getGameFolder(&folderExists); - if (folderExists) - { - QDir::setCurrent(GTAV_Folder); - } - else - { - GTAV_Folder = QFileDialog::getExistingDirectory(this, tr("Select GTA V Folder..."), StandardPaths::documentsLocation(), QFileDialog::ShowDirsOnly); - if (QFileInfo(GTAV_Folder).exists()) - { - folderExists = true; - QDir::setCurrent(GTAV_Folder); - AppEnv::setGameFolder(GTAV_Folder); - - // First time folder selection save - settings.beginGroup("dir"); - if (settings.value("dir", "").toString().isEmpty()) - { - settings.setValue("dir", GTAV_Folder); - } - settings.endGroup(); - } - } - - // profiles init - settings.beginGroup("Profile"); - QString defaultProfile = settings.value("Default", "").toString(); - - bool contentModeOk; - contentMode = settings.value("ContentMode", 0).toInt(&contentModeOk); - if (contentMode != 0 && contentMode != 1 && contentMode != 2) - { - contentMode = 0; - } - - if (folderExists) - { - QDir GTAV_ProfilesDir; - GTAV_ProfilesFolder = GTAV_Folder + QDir::separator() + "Profiles"; - GTAV_ProfilesDir.setPath(GTAV_ProfilesFolder); - - GTAV_Profiles = GTAV_ProfilesDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::NoSort); - setupProfileUi(); - - if (GTAV_Profiles.length() == 1) - { - openProfile(GTAV_Profiles.at(0)); - } - else if(GTAV_Profiles.contains(defaultProfile)) - { - openProfile(defaultProfile); - } - } - else - { - GTAV_Profiles = QStringList(); - setupProfileUi(); - } - settings.endGroup(); -} - -void UserInterface::setupProfileUi() -{ - qreal screenRatio = AppEnv::screenRatio(); - if (GTAV_Profiles.length() == 0) - { - QPushButton *changeDirBtn = new QPushButton(tr("Select >A V Folder..."), ui->swSelection); - changeDirBtn->setObjectName("cmdChangeDir"); - changeDirBtn->setMinimumSize(0, 40 * screenRatio); - changeDirBtn->setAutoDefault(true); - ui->vlButtons->addWidget(changeDirBtn); - profileBtns.append(changeDirBtn); - - QObject::connect(changeDirBtn, SIGNAL(clicked(bool)), this, SLOT(changeFolder_clicked())); - } - else foreach(const QString >AV_Profile, GTAV_Profiles) - { - QPushButton *profileBtn = new QPushButton(GTAV_Profile, ui->swSelection); - profileBtn->setObjectName(GTAV_Profile); - profileBtn->setMinimumSize(0, 40 * screenRatio); - profileBtn->setAutoDefault(true); - ui->vlButtons->addWidget(profileBtn); - profileBtns.append(profileBtn); - - QObject::connect(profileBtn, SIGNAL(clicked(bool)), this, SLOT(profileButton_clicked())); - } - profileBtns.at(0)->setFocus(); -} - -void UserInterface::changeFolder_clicked() -{ - on_actionSelect_GTA_Folder_triggered(); -} - -void UserInterface::on_cmdReload_clicked() -{ - foreach(QPushButton *profileBtn, profileBtns) - { - ui->vlButtons->removeWidget(profileBtn); - profileBtns.removeAll(profileBtn); - delete profileBtn; - } - setupDirEnv(); -} - -void UserInterface::profileButton_clicked() -{ - QPushButton *profileBtn = (QPushButton*)sender(); - openProfile(profileBtn->objectName()); -} - -void UserInterface::openProfile(QString profileName) -{ - profileOpen = true; - profileUI = new ProfileInterface(profileDB, crewDB, threadDB); - ui->swProfile->addWidget(profileUI); - ui->swProfile->setCurrentWidget(profileUI); - profileUI->setProfileFolder(GTAV_ProfilesFolder + QDir::separator() + profileName, profileName); - profileUI->settingsApplied(contentMode, language); - profileUI->setupProfileInterface(); - QObject::connect(profileUI, SIGNAL(profileClosed()), this, SLOT(closeProfile())); - QObject::connect(profileUI, SIGNAL(profileLoaded()), this, SLOT(profileLoaded())); - this->setWindowTitle(defaultWindowTitle.arg(profileName)); -} - -void UserInterface::closeProfile() -{ - if (profileOpen) - { - profileOpen = false; - ui->menuProfile->setEnabled(false); - ui->actionSelect_profile->setEnabled(false); - ui->swProfile->removeWidget(profileUI); - delete profileUI; - } - this->setWindowTitle(defaultWindowTitle.arg(tr("Select Profile"))); -} - -void UserInterface::closeEvent(QCloseEvent *ev) -{ - Q_UNUSED(ev) - threadDB->doEndThread(); -} - -UserInterface::~UserInterface() -{ - foreach (QPushButton *profileBtn, profileBtns) - { - delete profileBtn; - } - delete ui; -} - -void UserInterface::on_actionExit_triggered() -{ - this->close(); -} - -void UserInterface::on_actionSelect_profile_triggered() -{ - closeProfile(); - openSelectProfile(); -} - -void UserInterface::openSelectProfile() -{ - // not needed right now -} - -void UserInterface::on_actionAbout_gta5sync_triggered() -{ - AboutDialog *aboutDialog = new AboutDialog(this); - aboutDialog->setWindowIcon(windowIcon()); - aboutDialog->setModal(true); -#ifdef Q_OS_ANDROID - // Android ... - aboutDialog->showMaximized(); -#else - aboutDialog->show(); -#endif - aboutDialog->exec(); - delete aboutDialog; -} - -void UserInterface::profileLoaded() -{ - ui->menuProfile->setEnabled(true); - ui->actionSelect_profile->setEnabled(true); -} - -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() -{ - OptionsDialog *optionsDialog = new OptionsDialog(profileDB, this); - optionsDialog->setWindowIcon(windowIcon()); - optionsDialog->commitProfiles(GTAV_Profiles); - QObject::connect(optionsDialog, SIGNAL(settingsApplied(int, QString)), this, SLOT(settingsApplied(int, QString))); - - optionsDialog->setModal(true); -#ifdef Q_OS_ANDROID - // Android ... - optionsDialog->showMaximized(); -#else - optionsDialog->show(); -#endif - optionsDialog->exec(); - - delete optionsDialog; -} - -void UserInterface::on_action_Import_triggered() -{ - if (profileOpen) - { - profileUI->importFiles(); - } -} - -void UserInterface::on_actionOpen_File_triggered() -{ - QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); - settings.beginGroup("FileDialogs"); - -fileDialogPreOpen: - QFileDialog fileDialog(this); - fileDialog.setFileMode(QFileDialog::ExistingFiles); - fileDialog.setViewMode(QFileDialog::Detail); - fileDialog.setAcceptMode(QFileDialog::AcceptOpen); - fileDialog.setOption(QFileDialog::DontUseNativeDialog, false); - fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); - fileDialog.setWindowTitle(tr("Open File...")); - - QStringList filters; - filters << ProfileInterface::tr("All profile files (*.g5e SGTA* PGTA*)"); - filters << ProfileInterface::tr("GTA V Export (*.g5e)"); - filters << ProfileInterface::tr("Savegames files (SGTA*)"); - filters << ProfileInterface::tr("Snapmatic pictures (PGTA*)"); - filters << ProfileInterface::tr("All files (**)"); - fileDialog.setNameFilters(filters); - - QList sidebarUrls = SidebarGenerator::generateSidebarUrls(fileDialog.sidebarUrls()); - - fileDialog.setSidebarUrls(sidebarUrls); - fileDialog.setDirectory(settings.value("OpenDialogDirectory", StandardPaths::documentsLocation()).toString()); - fileDialog.restoreGeometry(settings.value("OpenDialogGeometry","").toByteArray()); - - if (fileDialog.exec()) - { - QStringList selectedFiles = fileDialog.selectedFiles(); - if (selectedFiles.length() == 1) - { - QString selectedFile = selectedFiles.at(0); - if (!openFile(selectedFile, true)) goto fileDialogPreOpen; - } - } - - settings.setValue("OpenDialogGeometry", fileDialog.saveGeometry()); - settings.setValue("OpenDialogDirectory", fileDialog.directory().absolutePath()); - settings.endGroup(); -} - -bool UserInterface::openFile(QString selectedFile, bool warn) -{ - QString selectedFileName = QFileInfo(selectedFile).fileName(); - if (QFile::exists(selectedFile)) - { - if (selectedFileName.left(4) == "PGTA" || selectedFileName.right(4) == ".g5e") - { - SnapmaticPicture *picture = new SnapmaticPicture(selectedFile); - if (picture->readingPicture()) - { - openSnapmaticFile(picture); - delete picture; - return true; - } - else - { - if (warn) QMessageBox::warning(this, tr("Open File"), ProfileInterface::tr("Failed to read Snapmatic picture")); - delete picture; - return false; - } - } - else if (selectedFileName.left(4) == "SGTA") - { - SavegameData *savegame = new SavegameData(selectedFile); - if (savegame->readingSavegame()) - { - openSavegameFile(savegame); - delete savegame; - return true; - } - else - { - if (warn) QMessageBox::warning(this, tr("Open File"), ProfileInterface::tr("Failed to read Savegame file")); - delete savegame; - return false; - } - } - else - { - SnapmaticPicture *picture = new SnapmaticPicture(selectedFile); - SavegameData *savegame = new SavegameData(selectedFile); - if (picture->readingPicture()) - { - delete savegame; - openSnapmaticFile(picture); - delete picture; - return true; - } - else if (savegame->readingSavegame()) - { - delete picture; - openSavegameFile(savegame); - delete savegame; - return true; - } - else - { - delete savegame; - delete picture; - if (warn) QMessageBox::warning(this, tr("Open File"), tr("Can't open %1 because of not valid file format").arg("\""+selectedFileName+"\"")); - return false; - } - } - } - if (warn) QMessageBox::warning(this, tr("Open File"), ProfileInterface::tr("No valid file is selected")); - return false; -} - -void UserInterface::openSnapmaticFile(SnapmaticPicture *picture) -{ - PictureDialog picDialog(profileDB, crewDB, this); - picDialog.setSnapmaticPicture(picture, true); - picDialog.setModal(true); - - int crewID = picture->getSnapmaticProperties().crewID; - if (crewID != 0) { crewDB->addCrew(crewID); } - - QObject::connect(threadDB, SIGNAL(playerNameFound(int, QString)), profileDB, SLOT(setPlayerName(int, QString))); - QObject::connect(threadDB, SIGNAL(playerNameUpdated()), &picDialog, SLOT(playerNameUpdated())); - -#ifdef Q_OS_ANDROID - // Android optimization should be put here - picDialog.showMaximized(); -#else - picDialog.show(); - picDialog.setMinimumSize(picDialog.size()); - picDialog.setMaximumSize(picDialog.size()); -#endif - - picDialog.exec(); -} - -void UserInterface::openSavegameFile(SavegameData *savegame) -{ - SavegameDialog sgdDialog(this); - sgdDialog.setSavegameData(savegame, savegame->getSavegameFileName(), true); - sgdDialog.setModal(true); -#ifdef Q_OS_ANDROID - // Android optimization should be put here - sgdDialog.showMaximized(); -#else - sgdDialog.show(); -#endif - sgdDialog.exec(); -} - -void UserInterface::settingsApplied(int _contentMode, QString _language) -{ - language = _language; - contentMode = _contentMode; - if (profileOpen) - { - profileUI->settingsApplied(contentMode, language); - } -} - -void UserInterface::on_actionSelect_GTA_Folder_triggered() -{ - QString GTAV_Folder_Temp = QFileDialog::getExistingDirectory(this, tr("Select GTA V Folder..."), StandardPaths::documentsLocation(), QFileDialog::ShowDirsOnly); - if (QFileInfo(GTAV_Folder_Temp).exists()) - { - GTAV_Folder = GTAV_Folder_Temp; - QDir::setCurrent(GTAV_Folder); - AppEnv::setGameFolder(GTAV_Folder); - on_cmdReload_clicked(); - } -} - -void UserInterface::on_action_Enable_In_game_triggered() -{ - if (profileOpen) - { - profileUI->enableSelected(); - } -} - -void UserInterface::on_action_Disable_In_game_triggered() -{ - if (profileOpen) - { - profileUI->disableSelected(); - } -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "UserInterface.h" +#include "ui_UserInterface.h" +#include "ProfileInterface.h" +#include "SnapmaticPicture.h" +#include "SidebarGenerator.h" +#include "SavegameDialog.h" +#include "StandardPaths.h" +#include "OptionsDialog.h" +#include "PictureDialog.h" +#include "SavegameData.h" +#include "AboutDialog.h" +#include "IconLoader.h" +#include "AppEnv.h" +#include "config.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +UserInterface::UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent) : + QMainWindow(parent), profileDB(profileDB), crewDB(crewDB), threadDB(threadDB), + ui(new Ui::UserInterface) +{ + ui->setupUi(this); + contentMode = 0; + profileOpen = 0; + profileUI = 0; + ui->menuProfile->setEnabled(false); + ui->actionSelect_profile->setEnabled(false); + ui->actionAbout_gta5sync->setIcon(IconLoader::loadingAppIcon()); + ui->actionAbout_gta5sync->setText(tr("&About %1").arg(GTA5SYNC_APPSTR)); + ui->cmdClose->setToolTip(ui->cmdClose->toolTip().arg(GTA5SYNC_APPSTR)); + defaultWindowTitle = tr("%2 - %1").arg("%1", GTA5SYNC_APPSTR); + + this->setWindowTitle(defaultWindowTitle.arg(tr("Select Profile"))); + ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER)); + + if (QIcon::hasThemeIcon("dialog-close")) + { + ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); + } + 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 + } + 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 + } + + // DPI calculation + qreal screenRatio = AppEnv::screenRatio(); + resize(625 * screenRatio, 500 * screenRatio); + ui->vlUserInterface->setSpacing(6 * screenRatio); + ui->vlUserInterface->setContentsMargins(9 * screenRatio, 9 * screenRatio, 9 * screenRatio, 9 * screenRatio); +} + +void UserInterface::setupDirEnv() +{ + // settings init + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + + bool folderExists; + GTAV_Folder = AppEnv::getGameFolder(&folderExists); + if (folderExists) + { + QDir::setCurrent(GTAV_Folder); + } + else + { + GTAV_Folder = QFileDialog::getExistingDirectory(this, tr("Select GTA V Folder..."), StandardPaths::documentsLocation(), QFileDialog::ShowDirsOnly); + if (QFileInfo(GTAV_Folder).exists()) + { + folderExists = true; + QDir::setCurrent(GTAV_Folder); + AppEnv::setGameFolder(GTAV_Folder); + + // First time folder selection save + settings.beginGroup("dir"); + if (settings.value("dir", "").toString().isEmpty()) + { + settings.setValue("dir", GTAV_Folder); + } + settings.endGroup(); + } + } + + // profiles init + settings.beginGroup("Profile"); + QString defaultProfile = settings.value("Default", "").toString(); + + bool contentModeOk; + contentMode = settings.value("ContentMode", 0).toInt(&contentModeOk); + if (contentMode != 0 && contentMode != 1 && contentMode != 2) + { + contentMode = 0; + } + + if (folderExists) + { + QDir GTAV_ProfilesDir; + GTAV_ProfilesFolder = GTAV_Folder % QDir::separator() % "Profiles"; + GTAV_ProfilesDir.setPath(GTAV_ProfilesFolder); + + GTAV_Profiles = GTAV_ProfilesDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::NoSort); + setupProfileUi(); + + if (GTAV_Profiles.length() == 1) + { + openProfile(GTAV_Profiles.at(0)); + } + else if(GTAV_Profiles.contains(defaultProfile)) + { + openProfile(defaultProfile); + } + } + else + { + GTAV_Profiles = QStringList(); + setupProfileUi(); + } + settings.endGroup(); +} + +void UserInterface::setupProfileUi() +{ + qreal screenRatio = AppEnv::screenRatio(); + if (GTAV_Profiles.length() == 0) + { + QPushButton *changeDirBtn = new QPushButton(tr("Select >A V Folder..."), ui->swSelection); + changeDirBtn->setObjectName("cmdChangeDir"); + changeDirBtn->setMinimumSize(0, 40 * screenRatio); + changeDirBtn->setAutoDefault(true); + ui->vlButtons->addWidget(changeDirBtn); + profileBtns += changeDirBtn; + + QObject::connect(changeDirBtn, SIGNAL(clicked(bool)), this, SLOT(changeFolder_clicked())); + } + else foreach(const QString >AV_Profile, GTAV_Profiles) + { + QPushButton *profileBtn = new QPushButton(GTAV_Profile, ui->swSelection); + profileBtn->setObjectName(GTAV_Profile); + profileBtn->setMinimumSize(0, 40 * screenRatio); + profileBtn->setAutoDefault(true); + ui->vlButtons->addWidget(profileBtn); + profileBtns += profileBtn; + + QObject::connect(profileBtn, SIGNAL(clicked(bool)), this, SLOT(profileButton_clicked())); + } + profileBtns.at(0)->setFocus(); +} + +void UserInterface::changeFolder_clicked() +{ + on_actionSelect_GTA_Folder_triggered(); +} + +void UserInterface::on_cmdReload_clicked() +{ + foreach(QPushButton *profileBtn, profileBtns) + { + ui->vlButtons->removeWidget(profileBtn); + profileBtns.removeAll(profileBtn); + delete profileBtn; + } + setupDirEnv(); +} + +void UserInterface::profileButton_clicked() +{ + QPushButton *profileBtn = (QPushButton*)sender(); + openProfile(profileBtn->objectName()); +} + +void UserInterface::openProfile(const QString &profileName_) +{ + profileOpen = true; + profileName = profileName_; + profileUI = new ProfileInterface(profileDB, crewDB, threadDB); + ui->swProfile->addWidget(profileUI); + ui->swProfile->setCurrentWidget(profileUI); + profileUI->setProfileFolder(GTAV_ProfilesFolder % QDir::separator() % profileName, profileName); + profileUI->settingsApplied(contentMode, language); + profileUI->setupProfileInterface(); + QObject::connect(profileUI, SIGNAL(profileClosed()), this, SLOT(closeProfile())); + QObject::connect(profileUI, SIGNAL(profileLoaded()), this, SLOT(profileLoaded())); + this->setWindowTitle(defaultWindowTitle.arg(profileName)); +} + +void UserInterface::closeProfile() +{ + if (profileOpen) + { + profileOpen = false; + profileName.clear(); + ui->menuProfile->setEnabled(false); + ui->actionSelect_profile->setEnabled(false); + ui->swProfile->removeWidget(profileUI); + delete profileUI; + } + this->setWindowTitle(defaultWindowTitle.arg(tr("Select Profile"))); +} + +void UserInterface::closeEvent(QCloseEvent *ev) +{ + Q_UNUSED(ev) + threadDB->doEndThread(); +} + +UserInterface::~UserInterface() +{ + foreach (QPushButton *profileBtn, profileBtns) + { + delete profileBtn; + } + delete ui; +} + +void UserInterface::on_actionExit_triggered() +{ + this->close(); +} + +void UserInterface::on_actionSelect_profile_triggered() +{ + closeProfile(); + openSelectProfile(); +} + +void UserInterface::openSelectProfile() +{ + // not needed right now +} + +void UserInterface::on_actionAbout_gta5sync_triggered() +{ + AboutDialog *aboutDialog = new AboutDialog(this); + aboutDialog->setWindowIcon(windowIcon()); + aboutDialog->setModal(true); +#ifdef Q_OS_ANDROID + // Android ... + aboutDialog->showMaximized(); +#else + aboutDialog->show(); +#endif + aboutDialog->exec(); + delete aboutDialog; +} + +void UserInterface::profileLoaded() +{ + ui->menuProfile->setEnabled(true); + ui->actionSelect_profile->setEnabled(true); +} + +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() +{ + OptionsDialog *optionsDialog = new OptionsDialog(profileDB, this); + optionsDialog->setWindowIcon(windowIcon()); + optionsDialog->commitProfiles(GTAV_Profiles); + QObject::connect(optionsDialog, SIGNAL(settingsApplied(int, QString)), this, SLOT(settingsApplied(int, QString))); + + optionsDialog->setModal(true); +#ifdef Q_OS_ANDROID + // Android ... + optionsDialog->showMaximized(); +#else + optionsDialog->show(); +#endif + optionsDialog->exec(); + + delete optionsDialog; +} + +void UserInterface::on_action_Import_triggered() +{ + if (profileOpen) + { + profileUI->importFiles(); + } +} + +void UserInterface::on_actionOpen_File_triggered() +{ + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("FileDialogs"); + +fileDialogPreOpen: + QFileDialog fileDialog(this); + fileDialog.setFileMode(QFileDialog::ExistingFiles); + fileDialog.setViewMode(QFileDialog::Detail); + fileDialog.setAcceptMode(QFileDialog::AcceptOpen); + fileDialog.setOption(QFileDialog::DontUseNativeDialog, false); + fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); + fileDialog.setWindowTitle(tr("Open File...")); + + QStringList filters; + filters << ProfileInterface::tr("All profile files (*.g5e SGTA* PGTA*)"); + filters << ProfileInterface::tr("GTA V Export (*.g5e)"); + filters << ProfileInterface::tr("Savegames files (SGTA*)"); + filters << ProfileInterface::tr("Snapmatic pictures (PGTA*)"); + filters << ProfileInterface::tr("All files (**)"); + fileDialog.setNameFilters(filters); + + QList sidebarUrls = SidebarGenerator::generateSidebarUrls(fileDialog.sidebarUrls()); + + fileDialog.setSidebarUrls(sidebarUrls); + fileDialog.setDirectory(settings.value("OpenDialogDirectory", StandardPaths::documentsLocation()).toString()); + fileDialog.restoreGeometry(settings.value("OpenDialogGeometry","").toByteArray()); + + if (fileDialog.exec()) + { + QStringList selectedFiles = fileDialog.selectedFiles(); + if (selectedFiles.length() == 1) + { + QString selectedFile = selectedFiles.at(0); + if (!openFile(selectedFile, true)) goto fileDialogPreOpen; + } + } + + settings.setValue("OpenDialogGeometry", fileDialog.saveGeometry()); + settings.setValue("OpenDialogDirectory", fileDialog.directory().absolutePath()); + settings.endGroup(); +} + +bool UserInterface::openFile(QString selectedFile, bool warn) +{ + QString selectedFileName = QFileInfo(selectedFile).fileName(); + if (QFile::exists(selectedFile)) + { + if (selectedFileName.left(4) == "PGTA" || selectedFileName.right(4) == ".g5e") + { + SnapmaticPicture *picture = new SnapmaticPicture(selectedFile); + if (picture->readingPicture()) + { + openSnapmaticFile(picture); + delete picture; + return true; + } + else + { + if (warn) QMessageBox::warning(this, tr("Open File"), ProfileInterface::tr("Failed to read Snapmatic picture")); + delete picture; + return false; + } + } + else if (selectedFileName.left(4) == "SGTA") + { + SavegameData *savegame = new SavegameData(selectedFile); + if (savegame->readingSavegame()) + { + openSavegameFile(savegame); + delete savegame; + return true; + } + else + { + if (warn) QMessageBox::warning(this, tr("Open File"), ProfileInterface::tr("Failed to read Savegame file")); + delete savegame; + return false; + } + } + else + { + SnapmaticPicture *picture = new SnapmaticPicture(selectedFile); + SavegameData *savegame = new SavegameData(selectedFile); + if (picture->readingPicture()) + { + delete savegame; + openSnapmaticFile(picture); + delete picture; + return true; + } + else if (savegame->readingSavegame()) + { + delete picture; + openSavegameFile(savegame); + delete savegame; + return true; + } + else + { + delete savegame; + delete picture; + if (warn) QMessageBox::warning(this, tr("Open File"), tr("Can't open %1 because of not valid file format").arg("\""+selectedFileName+"\"")); + return false; + } + } + } + if (warn) QMessageBox::warning(this, tr("Open File"), ProfileInterface::tr("No valid file is selected")); + return false; +} + +void UserInterface::openSnapmaticFile(SnapmaticPicture *picture) +{ + PictureDialog picDialog(profileDB, crewDB, this); + picDialog.setSnapmaticPicture(picture, true); + picDialog.setModal(true); + + int crewID = picture->getSnapmaticProperties().crewID; + if (crewID != 0) { crewDB->addCrew(crewID); } + + QObject::connect(threadDB, SIGNAL(crewNameUpdated()), &picDialog, SLOT(crewNameUpdated())); + QObject::connect(threadDB, SIGNAL(playerNameUpdated()), &picDialog, SLOT(playerNameUpdated())); + +#ifdef Q_OS_ANDROID + // Android optimization should be put here + picDialog.showMaximized(); +#else + picDialog.show(); + picDialog.setMinimumSize(picDialog.size()); + picDialog.setMaximumSize(picDialog.size()); +#endif + + picDialog.exec(); +} + +void UserInterface::openSavegameFile(SavegameData *savegame) +{ + SavegameDialog sgdDialog(this); + sgdDialog.setSavegameData(savegame, savegame->getSavegameFileName(), true); + sgdDialog.setModal(true); +#ifdef Q_OS_ANDROID + // Android optimization should be put here + sgdDialog.showMaximized(); +#else + sgdDialog.show(); +#endif + sgdDialog.exec(); +} + +void UserInterface::settingsApplied(int _contentMode, QString _language) +{ + if (language != _language) + { + retranslateUi(); + language = _language; + } + contentMode = _contentMode; + if (profileOpen) + { + profileUI->settingsApplied(contentMode, language); + } +} + +void UserInterface::on_actionSelect_GTA_Folder_triggered() +{ + QString GTAV_Folder_Temp = QFileDialog::getExistingDirectory(this, tr("Select GTA V Folder..."), StandardPaths::documentsLocation(), QFileDialog::ShowDirsOnly); + if (QFileInfo(GTAV_Folder_Temp).exists()) + { + GTAV_Folder = GTAV_Folder_Temp; + QDir::setCurrent(GTAV_Folder); + AppEnv::setGameFolder(GTAV_Folder); + on_cmdReload_clicked(); + } +} + +void UserInterface::on_action_Enable_In_game_triggered() +{ + if (profileOpen) + { + profileUI->enableSelected(); + } +} + +void UserInterface::on_action_Disable_In_game_triggered() +{ + if (profileOpen) + { + profileUI->disableSelected(); + } +} + +void UserInterface::retranslateUi() +{ + ui->retranslateUi(this); + ui->actionAbout_gta5sync->setText(tr("&About %1").arg(GTA5SYNC_APPSTR)); + ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER)); + if (profileOpen) + { + this->setWindowTitle(defaultWindowTitle.arg(profileName)); + } + else + { + this->setWindowTitle(defaultWindowTitle.arg(tr("Select Profile"))); + } +} diff --git a/UserInterface.h b/UserInterface.h index 028cf6e..0ce9e7c 100755 --- a/UserInterface.h +++ b/UserInterface.h @@ -1,93 +1,96 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef USERINTERFACE_H -#define USERINTERFACE_H - -#include "SnapmaticPicture.h" -#include "ProfileInterface.h" -#include "ProfileDatabase.h" -#include "DatabaseThread.h" -#include "CrewDatabase.h" -#include "SavegameData.h" -#include -#include -#include -#include - -namespace Ui { -class UserInterface; -} - -class UserInterface : public QMainWindow -{ - Q_OBJECT -public: - explicit UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent = 0); - void setupDirEnv(); - ~UserInterface(); - -private slots: - void closeProfile(); - void profileLoaded(); - void changeFolder_clicked(); - void profileButton_clicked(); - void on_cmdReload_clicked(); - void on_actionExit_triggered(); - void on_actionSelect_profile_triggered(); - void on_actionAbout_gta5sync_triggered(); - void on_actionSelect_all_triggered(); - void on_actionDeselect_all_triggered(); - void on_actionExport_selected_triggered(); - void on_actionDelete_selected_triggered(); - void on_actionOptions_triggered(); - void on_action_Import_triggered(); - void on_actionOpen_File_triggered(); - void on_actionSelect_GTA_Folder_triggered(); - void on_action_Enable_In_game_triggered(); - void on_action_Disable_In_game_triggered(); - void settingsApplied(int contentMode, QString language); - -protected: - void closeEvent(QCloseEvent *ev); - -private: - ProfileDatabase *profileDB; - CrewDatabase *crewDB; - DatabaseThread *threadDB; - Ui::UserInterface *ui; - ProfileInterface *profileUI; - QList profileBtns; - bool profileOpen; - int contentMode; - QString language; - QString defaultWindowTitle; - QString GTAV_Folder; - QString GTAV_ProfilesFolder; - QStringList GTAV_Profiles; - void setupProfileUi(); - void openProfile(QString profileName); - void openSelectProfile(); - - // Open File - bool openFile(QString selectedFile, bool warn = true); - void openSavegameFile(SavegameData *savegame); - void openSnapmaticFile(SnapmaticPicture *picture); -}; - -#endif // USERINTERFACE_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef USERINTERFACE_H +#define USERINTERFACE_H + +#include "SnapmaticPicture.h" +#include "ProfileInterface.h" +#include "ProfileDatabase.h" +#include "DatabaseThread.h" +#include "CrewDatabase.h" +#include "SavegameData.h" +#include +#include +#include +#include +#include + +namespace Ui { +class UserInterface; +} + +class UserInterface : public QMainWindow +{ + Q_OBJECT +public: + explicit UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent = 0); + void setupDirEnv(); + ~UserInterface(); + +private slots: + void closeProfile(); + void profileLoaded(); + void changeFolder_clicked(); + void profileButton_clicked(); + void on_cmdReload_clicked(); + void on_actionExit_triggered(); + void on_actionSelect_profile_triggered(); + void on_actionAbout_gta5sync_triggered(); + void on_actionSelect_all_triggered(); + void on_actionDeselect_all_triggered(); + void on_actionExport_selected_triggered(); + void on_actionDelete_selected_triggered(); + void on_actionOptions_triggered(); + void on_action_Import_triggered(); + void on_actionOpen_File_triggered(); + void on_actionSelect_GTA_Folder_triggered(); + void on_action_Enable_In_game_triggered(); + void on_action_Disable_In_game_triggered(); + void settingsApplied(int contentMode, QString language); + +protected: + void closeEvent(QCloseEvent *ev); + +private: + ProfileDatabase *profileDB; + CrewDatabase *crewDB; + DatabaseThread *threadDB; + Ui::UserInterface *ui; + ProfileInterface *profileUI; + QList profileBtns; + QString profileName; + bool profileOpen; + int contentMode; + QString language; + QString defaultWindowTitle; + QString GTAV_Folder; + QString GTAV_ProfilesFolder; + QStringList GTAV_Profiles; + void setupProfileUi(); + void openProfile(const QString &profileName); + void openSelectProfile(); + void retranslateUi(); + + // Open File + bool openFile(QString selectedFile, bool warn = true); + void openSavegameFile(SavegameData *savegame); + void openSnapmaticFile(SnapmaticPicture *picture); +}; + +#endif // USERINTERFACE_H diff --git a/UserInterface.ui b/UserInterface.ui index 5a34fce..9e2ab52 100755 --- a/UserInterface.ui +++ b/UserInterface.ui @@ -1,348 +1,354 @@ - - - UserInterface - - - - 0 - 0 - 625 - 500 - - - - - 625 - 500 - - - - %2 - %1 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 0 - - - - - 6 - - - 9 - - - 9 - - - 9 - - - 9 - - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - Select profile - - - Qt::AlignCenter - - - true - - - - - - - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - - - %1 %2 - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - &Reload - - - true - - - - - - - - 0 - 0 - - - - &Close - - - true - - - - - - - - - - - - - - - 0 - 0 - 625 - 21 - - - - - &File - - - - - - - - - - &Help - - - - - - &Edit - - - - - - &Profile - - - - &Selection visibility - - - - - - - - - - - - - - - - - - - - - &About %1 - - - Ctrl+P - - - - - &Exit - - - Exit - - - Ctrl+Q - - - - - Close &Profile - - - Ctrl+End - - - - - &Settings - - - Ctrl+S - - - - - Select &All - - - Ctrl+A - - - - - &Deselect All - - - Ctrl+D - - - - - &Export selected... - - - Ctrl+E - - - - - &Remove selected - - - Ctrl+Del - - - - - &Import files... - - - Ctrl+I - - - - - &Open File... - - - Ctrl+O - - - - - Select &GTA V Folder... - - - Select GTA V Folder... - - - Ctrl+G - - - - - Show In-gam&e - - - Shift+E - - - - - Hi&de In-game - - - Shift+D - - - - - - - cmdClose - clicked() - UserInterface - close() - - - 572 - 476 - - - 312 - 249 - - - - - + + + UserInterface + + + + 0 + 0 + 625 + 500 + + + + + 625 + 500 + + + + %2 - %1 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + Select profile + + + Qt::AlignCenter + + + true + + + + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + + + %1 %2 + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + Reload profile overview + + + &Reload + + + true + + + + + + + + 0 + 0 + + + + Close %1 + + + &Close + + + true + + + + + + + + + + + + + + + 0 + 0 + 625 + 21 + + + + + &File + + + + + + + + + + &Help + + + + + + &Edit + + + + + + &Profile + + + + &Selection visibility + + + + + + + + + + + + + + + + + + + + + &About %1 + + + Ctrl+P + + + + + &Exit + + + Exit + + + Ctrl+Q + + + + + Close &Profile + + + Ctrl+End + + + + + &Settings + + + Ctrl+S + + + + + Select &All + + + Ctrl+A + + + + + &Deselect All + + + Ctrl+D + + + + + &Export selected... + + + Ctrl+E + + + + + &Remove selected + + + Ctrl+Del + + + + + &Import files... + + + Ctrl+I + + + + + &Open File... + + + Ctrl+O + + + + + Select &GTA V Folder... + + + Select GTA V Folder... + + + Ctrl+G + + + + + Show In-gam&e + + + Shift+E + + + + + Hi&de In-game + + + Shift+D + + + + + + + cmdClose + clicked() + UserInterface + close() + + + 572 + 476 + + + 312 + 249 + + + + + diff --git a/config.h b/config.h index 25c313c..5e52fdf 100755 --- a/config.h +++ b/config.h @@ -1,101 +1,161 @@ -/***************************************************************************** -* gta5view Grand Theft Auto V Profile Viewer -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef CONFIG_H -#define CONFIG_H -#include - -#ifndef GTA5SYNC_APPVENDOR -#define GTA5SYNC_APPVENDOR "Syping" -#endif - -#ifndef GTA5SYNC_APPVENDORLINK -#define GTA5SYNC_APPVENDORLINK "https://github.com/Syping/" -#endif - -#ifndef GTA5SYNC_DISABLED -#define GTA5SYNC_ENABLED -#endif - -#ifndef GTA5SYNC_APPSTR -#ifdef GTA5SYNC_ENABLED -#define GTA5SYNC_APPSTR "gta5sync" -#else -#define GTA5SYNC_APPSTR "gta5view" -#endif -#endif - -#ifndef GTA5SYNC_APPDES -#define GTA5SYNC_APPDES "INSERT YOUR APPLICATION DESCRIPTION HERE" -#endif - -#ifndef GTA5SYNC_COPYRIGHT -#define GTA5SYNC_COPYRIGHT "2016-2017" -#endif - -#ifndef GTA5SYNC_APPVER -#ifndef GTA5SYNC_DAILYB -#define GTA5SYNC_APPVER "1.4.4" -#else -#define GTA5SYNC_APPVER QString("%1").arg(GTA5SYNC_DAILYB) -#endif -#endif - -#ifndef GTA5SYNC_BUILDTYPE -#define GTA5SYNC_BUILDTYPE "Custom" -#endif - -#ifndef GTA5SYNC_SHARE -#define GTA5SYNC_SHARE "$RUNDIR" -#endif - -#ifndef GTA5SYNC_LANG -#define GTA5SYNC_LANG "$SHAREDIR$SEPARATORlang" -#endif - -#ifndef GTA5SYNC_PLUG -#define GTA5SYNC_PLUG "$RUNDIR$SEPARATORplugins" -#endif - -#ifdef GTA5SYNC_WINRT -#undef GTA5SYNC_WIN -#endif - -#ifndef GTA5SYNC_COMPILER -#ifdef __clang__ -#define GTA5SYNC_COMPILER QString("Clang %1.%2.%3").arg(QString::number(__clang_major__), QString::number(__clang_minor__), QString::number(__clang_patchlevel__)) -#elif defined(__GNUC__) -#define GTA5SYNC_COMPILER QString("GCC %1.%2.%3").arg(QString::number(__GNUC__), QString::number(__GNUC_MINOR__), QString::number(__GNUC_PATCHLEVEL__)) -#elif defined(__GNUG__) -#define GTA5SYNC_COMPILER QString("GCC %1.%2.%3").arg(QString::number(__GNUG__), QString::number(__GNUC_MINOR__), QString::number(__GNUC_PATCHLEVEL__)) -#elif defined(_MSC_VER) -#define GTA5SYNC_COMPILER QString("MSVC %1").arg(QString::number(_MSC_VER).insert(2, ".")) -#else -#define GTA5SYNC_COMPILER QString("Unknown Compiler") -#endif -#endif - -#ifndef GTA5SYNC_BUILDDATETIME -#define GTA5SYNC_BUILDDATETIME QString("%1, %2").arg(__DATE__, __TIME__); -#endif - -#ifndef GTA5SYNC_BUILDSTRING -#define GTA5SYNC_BUILDSTRING QString("%1, %2").arg(QT_VERSION_STR, GTA5SYNC_COMPILER); -#endif - -#endif // CONFIG_H +/***************************************************************************** +* gta5view Grand Theft Auto V Profile Viewer +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef CONFIG_H +#define CONFIG_H +#include +#include + +#ifndef GTA5SYNC_APPVENDOR +#define GTA5SYNC_APPVENDOR "Syping" +#endif + +#ifndef GTA5SYNC_APPVENDORLINK +#define GTA5SYNC_APPVENDORLINK "https://github.com/Syping/" +#endif + +#ifndef GTA5SYNC_DISABLED +#define GTA5SYNC_ENABLED +#endif + +#ifndef GTA5SYNC_APPSTR +#ifdef GTA5SYNC_ENABLED +#define GTA5SYNC_APPSTR "gta5sync" +#else +#define GTA5SYNC_APPSTR "gta5view" +#endif +#endif + +#ifndef GTA5SYNC_APPDES +#define GTA5SYNC_APPDES "INSERT YOUR APPLICATION DESCRIPTION HERE" +#endif + +#ifndef GTA5SYNC_COPYRIGHT +#define GTA5SYNC_COPYRIGHT "2016-2017" +#endif + +#ifndef GTA5SYNC_APPVER +#ifndef GTA5SYNC_DAILYB +#define GTA5SYNC_APPVER "1.5.0-dev1" +#else +#define GTA5SYNC_APPVER GTA5SYNC_DAILYB +#endif +#endif + +#ifdef GTA5SYNC_BUILDTYPE_REL +#ifndef GTA5SYNC_BUILDTYPE +#define GTA5SYNC_BUILDTYPE QT_TRANSLATE_NOOP("AboutDialog", "Release") +#endif +#endif + +#ifdef GTA5SYNC_BUILDTYPE_RC +#ifndef GTA5SYNC_BUILDTYPE +#define GTA5SYNC_BUILDTYPE QT_TRANSLATE_NOOP("AboutDialog", "Release Candidate") +#endif +#endif + +#ifdef GTA5SYNC_BUILDTYPE_DAILY +#ifndef GTA5SYNC_BUILDTYPE +#define GTA5SYNC_BUILDTYPE QT_TRANSLATE_NOOP("AboutDialog", "Daily Build") +#endif +#endif + +#ifdef GTA5SYNC_BUILDTYPE_DEV +#ifndef GTA5SYNC_BUILDTYPE +#define GTA5SYNC_BUILDTYPE QT_TRANSLATE_NOOP("AboutDialog", "Developer") +#endif +#endif + +#ifdef GTA5SYNC_BUILDTYPE_BETA +#ifndef GTA5SYNC_BUILDTYPE +#define GTA5SYNC_BUILDTYPE QT_TRANSLATE_NOOP("AboutDialog", "Beta") +#endif +#endif + +#ifdef GTA5SYNC_BUILDTYPE_ALPHA +#ifndef GTA5SYNC_BUILDTYPE +#define GTA5SYNC_BUILDTYPE QT_TRANSLATE_NOOP("AboutDialog", "Alpha") +#endif +#endif + +#ifdef GTA5SYNC_DAILYB +#ifndef GTA5SYNC_BUILDTYPE +#define GTA5SYNC_BUILDTYPE "Daily Build" +#endif +#endif + +#ifndef GTA5SYNC_BUILDTYPE +#define GTA5SYNC_BUILDTYPE "Custom" +#endif + +#ifdef GTA5SYNC_QCONF +#ifndef GTA5SYNC_SHARE +#define GTA5SYNC_SHARE "RUNDIR:SEPARATOR:..SEPARATOR:share" +#endif +#ifndef GTA5SYNC_LANG +#define GTA5SYNC_LANG "QCONFLANG:" +#endif +#ifndef GTA5SYNC_PLUG +#define GTA5SYNC_PLUG "QCONFPLUG:" +#endif +#ifdef GTA5SYNC_QCONF_IN +#ifndef GTA5SYNC_INLANG +#define GTA5SYNC_INLANG ":/tr" +#endif +#endif +#endif + +#ifndef GTA5SYNC_SHARE +#define GTA5SYNC_SHARE "RUNDIR:" +#endif + +#ifndef GTA5SYNC_LANG +#define GTA5SYNC_LANG "SHAREDDIR:SEPARATOR:lang" +#endif + +#ifndef GTA5SYNC_PLUG +#define GTA5SYNC_PLUG "RUNDIR:SEPARATOR:plugins" +#endif + +#ifdef GTA5SYNC_WINRT +#undef GTA5SYNC_WIN +#endif + +#ifndef GTA5SYNC_COMPILER +#ifdef __clang__ +#define GTA5SYNC_COMPILER QString("Clang %1.%2.%3").arg(QString::number(__clang_major__), QString::number(__clang_minor__), QString::number(__clang_patchlevel__)) +#elif defined(__GNUC__) +#define GTA5SYNC_COMPILER QString("GCC %1.%2.%3").arg(QString::number(__GNUC__), QString::number(__GNUC_MINOR__), QString::number(__GNUC_PATCHLEVEL__)) +#elif defined(__GNUG__) +#define GTA5SYNC_COMPILER QString("GCC %1.%2.%3").arg(QString::number(__GNUG__), QString::number(__GNUC_MINOR__), QString::number(__GNUC_PATCHLEVEL__)) +#elif defined(_MSC_VER) +#define GTA5SYNC_COMPILER QString("MSVC %1").arg(QString::number(_MSC_VER).insert(2, ".")) +#else +#define GTA5SYNC_COMPILER QString("Unknown Compiler") +#endif +#endif + +#ifndef GTA5SYNC_BUILDDATETIME +#define GTA5SYNC_BUILDDATETIME QString("%1, %2").arg(__DATE__, __TIME__) +#endif + +#ifndef GTA5SYNC_BUILDSTRING +#define GTA5SYNC_BUILDSTRING QString("%1, %2").arg(QT_VERSION_STR, GTA5SYNC_COMPILER) +#endif + +#endif // CONFIG_H diff --git a/gta5view.pro b/gta5view.pro index 58e2987..e2a3418 100755 --- a/gta5view.pro +++ b/gta5view.pro @@ -1,172 +1,196 @@ -#/***************************************************************************** -#* gta5view Grand Theft Auto V Profile Viewer -#* Copyright (C) 2015-2017 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 -#* the Free Software Foundation, either version 3 of the License, or -#* (at your option) any later version. -#* -#* This program is distributed in the hope that it will be useful, -#* but WITHOUT ANY WARRANTY; without even the implied warranty of -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -#* GNU General Public License for more details. -#* -#* You should have received a copy of the GNU General Public License -#* along with this program. If not, see . -#*****************************************************************************/ - -QT += core gui network - -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets -greaterThan(QT_MAJOR_VERSION, 4): greaterThan(QT_MINOR_VERSION, 1): win32: QT += winextras - -DEFINES += GTA5SYNC_DISABLED - -DEPLOYMENT.display_name = gta5view -TARGET = gta5view -TEMPLATE = app - -SOURCES += main.cpp \ - AboutDialog.cpp \ - AppEnv.cpp \ - CrewDatabase.cpp \ - DatabaseThread.cpp \ - ExportDialog.cpp \ - ExportThread.cpp \ - GlobalString.cpp \ - IconLoader.cpp \ - ImportDialog.cpp \ - OptionsDialog.cpp \ - PictureDialog.cpp \ - PictureExport.cpp \ - PictureWidget.cpp \ - ProfileDatabase.cpp \ - ProfileInterface.cpp \ - ProfileLoader.cpp \ - ProfileWidget.cpp \ - SavegameCopy.cpp \ - SavegameData.cpp \ - SavegameDialog.cpp \ - SavegameWidget.cpp \ - SidebarGenerator.cpp \ - SnapmaticEditor.cpp \ - SnapmaticPicture.cpp \ - SnapmaticWidget.cpp \ - StandardPaths.cpp \ - StringParser.cpp \ - UserInterface.cpp \ - uimod/UiModLabel.cpp \ - uimod/UiModWidget.cpp - -HEADERS += \ - AboutDialog.h \ - AppEnv.h \ - CrewDatabase.h \ - DatabaseThread.h \ - ExportDialog.h \ - ExportThread.h \ - GlobalString.h \ - IconLoader.h \ - ImportDialog.h \ - OptionsDialog.h \ - PictureDialog.h \ - PictureExport.h \ - PictureWidget.h \ - ProfileDatabase.h \ - ProfileInterface.h \ - ProfileLoader.h \ - ProfileWidget.h \ - SavegameCopy.h \ - SavegameData.h \ - SavegameDialog.h \ - SavegameWidget.h \ - SidebarGenerator.h \ - SnapmaticEditor.h \ - SnapmaticPicture.h \ - SnapmaticWidget.h \ - StandardPaths.h \ - StringParser.h \ - UserInterface.h \ - uimod/UiModLabel.h \ - uimod/UiModWidget.h - -PRECOMPILED_HEADER += config.h - -FORMS += \ - AboutDialog.ui \ - ExportDialog.ui \ - ImportDialog.ui \ - OptionsDialog.ui \ - PictureDialog.ui \ - ProfileInterface.ui \ - SavegameDialog.ui \ - SavegameWidget.ui \ - SnapmaticEditor.ui \ - SnapmaticWidget.ui \ - UserInterface.ui - -TRANSLATIONS += \ - res/gta5sync_de.ts \ - res/gta5sync_fr.ts \ - res/gta5sync_ru.ts - -RESOURCES += \ - res/tr_g5p.qrc \ - res/app.qrc - -DISTFILES += res/app.rc \ - res/gta5sync.desktop \ - res/gta5sync_de.ts \ - res/gta5sync_fr.ts \ - res/gta5sync_ru.ts \ - res/gta5view.exe.manifest \ - res/gta5view.png \ - lang/README.txt - -INCLUDEPATH += ./uimod - -# WINDOWS ONLY - -win32: DEFINES += GTA5SYNC_WIN -win32: RC_FILE += res/app.rc -win32: LIBS += -luser32 -win32: CONFIG -= embed_manifest_exe - -# MAC OS X ONLY -macx: ICON = res/5sync.icns - -# QT4 ONLY STUFF - -isEqual(QT_MAJOR_VERSION, 4): INCLUDEPATH += ./qjson4 -isEqual(QT_MAJOR_VERSION, 4): HEADERS += qjson4/QJsonArray.h \ - qjson4/QJsonDocument.h \ - qjson4/QJsonObject.h \ - qjson4/QJsonParseError.h \ - qjson4/QJsonValue.h \ - qjson4/QJsonValueRef.h \ - qjson4/QJsonParser.h \ - qjson4/QJsonRoot.h - -isEqual(QT_MAJOR_VERSION, 4): SOURCES += qjson4/QJsonArray.cpp \ - qjson4/QJsonDocument.cpp \ - qjson4/QJsonObject.cpp \ - qjson4/QJsonParseError.cpp \ - qjson4/QJsonValue.cpp \ - qjson4/QJsonValueRef.cpp \ - qjson4/QJsonParser.cpp - -isEqual(QT_MAJOR_VERSION, 4): RESOURCES += res/tr_qt4.qrc - -# QT5 ONLY STUFF - -isEqual(QT_MAJOR_VERSION, 5): RESOURCES += res/tr_qt5.qrc - -# UNIX SYSTEM STUFF - -unix: !macx: appfiles.path = $$(INSTALL_PATH)/share/applications -unix: !macx: appfiles.files = $$PWD/res/gta5view.desktop -unix: !macx: pixmaps.path = $$(INSTALL_PATH)/share/pixmaps -unix: !macx: pixmaps.files = $$PWD/res/gta5view.png -unix: !macx: target.path = $$(INSTALL_PATH)/bin -unix: !macx: INSTALLS += target pixmaps appfiles +#/***************************************************************************** +#* gta5view Grand Theft Auto V Profile Viewer +#* Copyright (C) 2015-2017 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 +#* the Free Software Foundation, either version 3 of the License, or +#* (at your option) any later version. +#* +#* This program is distributed in the hope that it will be useful, +#* but WITHOUT ANY WARRANTY; without even the implied warranty of +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#* GNU General Public License for more details. +#* +#* You should have received a copy of the GNU General Public License +#* along with this program. If not, see . +#*****************************************************************************/ + +QT += core gui network + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets +greaterThan(QT_MAJOR_VERSION, 4): greaterThan(QT_MINOR_VERSION, 1): win32: QT += winextras + +DEFINES += GTA5SYNC_DISABLED + +DEPLOYMENT.display_name = gta5view +TARGET = gta5view +TEMPLATE = app + +DEFINES += GTA5SYNC_CSDF # Not assisting at proper usage of SnapmaticPicture class +HEADERS += config.h +PRECOMPILED_HEADER += config.h + +SOURCES += main.cpp \ + AboutDialog.cpp \ + AppEnv.cpp \ + CrewDatabase.cpp \ + DatabaseThread.cpp \ + ExportDialog.cpp \ + ExportThread.cpp \ + GlobalString.cpp \ + IconLoader.cpp \ + ImportDialog.cpp \ + MapPreviewDialog.cpp \ + OptionsDialog.cpp \ + PictureDialog.cpp \ + PictureExport.cpp \ + PictureWidget.cpp \ + ProfileDatabase.cpp \ + ProfileInterface.cpp \ + ProfileLoader.cpp \ + ProfileWidget.cpp \ + SavegameCopy.cpp \ + SavegameData.cpp \ + SavegameDialog.cpp \ + SavegameWidget.cpp \ + SidebarGenerator.cpp \ + SnapmaticEditor.cpp \ + SnapmaticPicture.cpp \ + SnapmaticWidget.cpp \ + StandardPaths.cpp \ + StringParser.cpp \ + TranslationClass.cpp \ + UserInterface.cpp \ + uimod/UiModLabel.cpp \ + uimod/UiModWidget.cpp + +HEADERS += \ + AboutDialog.h \ + AppEnv.h \ + CrewDatabase.h \ + DatabaseThread.h \ + ExportDialog.h \ + ExportThread.h \ + GlobalString.h \ + IconLoader.h \ + ImportDialog.h \ + MapPreviewDialog.h \ + OptionsDialog.h \ + PictureDialog.h \ + PictureExport.h \ + PictureWidget.h \ + ProfileDatabase.h \ + ProfileInterface.h \ + ProfileLoader.h \ + ProfileWidget.h \ + SavegameCopy.h \ + SavegameData.h \ + SavegameDialog.h \ + SavegameWidget.h \ + SidebarGenerator.h \ + SnapmaticEditor.h \ + SnapmaticPicture.h \ + SnapmaticWidget.h \ + StandardPaths.h \ + StringParser.h \ + TranslationClass.h \ + UserInterface.h \ + uimod/UiModLabel.h \ + uimod/UiModWidget.h + +FORMS += \ + AboutDialog.ui \ + ExportDialog.ui \ + ImportDialog.ui \ + MapPreviewDialog.ui \ + OptionsDialog.ui \ + PictureDialog.ui \ + ProfileInterface.ui \ + SavegameDialog.ui \ + SavegameWidget.ui \ + SnapmaticEditor.ui \ + SnapmaticWidget.ui \ + UserInterface.ui + +TRANSLATIONS += \ + res/gta5sync_en_US.ts \ + res/gta5sync_de.ts \ + res/gta5sync_fr.ts \ + res/gta5sync_ru.ts \ + lang/gta5sync_no.ts + +RESOURCES += \ + res/tr_g5p.qrc \ + res/app.qrc + +DISTFILES += res/app.rc \ + res/gta5view.desktop \ + res/gta5sync_de.ts \ + res/gta5sync_fr.ts \ + res/gta5sync_ru.ts \ + res/gta5view.exe.manifest \ + res/gta5view.png \ + lang/gta5sync_no.ts \ + lang/README.txt + +INCLUDEPATH += ./uimod + +# WINDOWS ONLY + +win32: DEFINES += GTA5SYNC_WIN +win32: RC_FILE += res/app.rc +win32: LIBS += -luser32 +win32: CONFIG -= embed_manifest_exe + +# MAC OS X ONLY +macx: ICON = res/5sync.icns + +# QT4 ONLY STUFF + +isEqual(QT_MAJOR_VERSION, 4): INCLUDEPATH += ./qjson4 +isEqual(QT_MAJOR_VERSION, 4): HEADERS += qjson4/QJsonArray.h \ + qjson4/QJsonDocument.h \ + qjson4/QJsonObject.h \ + qjson4/QJsonParseError.h \ + qjson4/QJsonValue.h \ + qjson4/QJsonValueRef.h \ + qjson4/QJsonParser.h \ + qjson4/QJsonRoot.h + +isEqual(QT_MAJOR_VERSION, 4): SOURCES += qjson4/QJsonArray.cpp \ + qjson4/QJsonDocument.cpp \ + qjson4/QJsonObject.cpp \ + qjson4/QJsonParseError.cpp \ + qjson4/QJsonValue.cpp \ + qjson4/QJsonValueRef.cpp \ + qjson4/QJsonParser.cpp + +isEqual(QT_MAJOR_VERSION, 4): RESOURCES += res/tr_qt4.qrc + +# QT5 ONLY STUFF +isEqual(QT_MAJOR_VERSION, 5): RESOURCES += res/tr_qt5.qrc + +# PROJECT INSTALLATION + +isEmpty(GTA5SYNC_PREFIX): GTA5SYNC_PREFIX = /usr/local + +appfiles.path = $$GTA5SYNC_PREFIX/share/applications +appfiles.files = $$PWD/res/gta5view.desktop +pixmaps.path = $$GTA5SYNC_PREFIX/share/pixmaps +pixmaps.files = $$PWD/res/gta5view.png +target.path = $$GTA5SYNC_PREFIX/bin +INSTALLS += target pixmaps appfiles + +# QCONF BASED BUILD STUFF + +contains(DEFINES, GTA5SYNC_QCONF){ + isEqual(QT_MAJOR_VERSION, 4): RESOURCES -= res/tr_qt4.qrc + isEqual(QT_MAJOR_VERSION, 5): RESOURCES -= res/tr_qt5.qrc + !contains(DEFINES, GTA5SYNC_QCONF_IN){ + RESOURCES -= res/tr_g5p.qrc + langfiles.path = $$GTA5SYNC_PREFIX/share/gta5view/translations + langfiles.files = $$PWD/res/gta5sync_en_US.qm $$PWD/res/gta5sync_de.qm $$PWD/res/gta5sync_fr.qm $$PWD/res/gta5sync_ru.qm $$PWD/res/qtbase_en_GB.qm + INSTALLS += langfiles + } +} diff --git a/lang/gta5sync_no.qm b/lang/gta5sync_no.qm new file mode 100644 index 0000000000000000000000000000000000000000..9dad8dffceb9623e88f8b96d9cd0caf25574c6fa GIT binary patch literal 23 fcmcE7ks@*G{hX<16=n7(EZlpygMop8iIEWihQJ9+ literal 0 HcmV?d00001 diff --git a/lang/gta5sync_no.ts b/lang/gta5sync_no.ts new file mode 100644 index 0000000..f18d088 --- /dev/null +++ b/lang/gta5sync_no.ts @@ -0,0 +1,1619 @@ + + + + + AboutDialog + + + About %1 + + + + + <span style=" font-weight:600;">%1</span><br/> +<br/> +%2<br/> +<br/> +Version %3<br/> +Created on %4<br/> +Built with Qt %5<br/> +Running with Qt %6<br/> +<br/> +%7 + + + + + &Close + + + + + Using %1 %2 + Using specific library, example Using libmyfuck + + + + + Translated by %1 + Translated by translator, example Translated by Syping + + + + + NAME_OF_TRANSLATOR + Enter your name there + + + + + TRANSLATOR_PROFILE + Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage + + + + + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> +Pictures and Savegames + + + + + 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> + + + + + Release + + + + + Release Candidate + + + + + Daily Build + + + + + Developer + + + + + Beta + + + + + Alpha + + + + + CrewDatabase + + + No Crew + + + + + ExportDialog + + + Dialog + + + + + Export Format + + + + + &JPEG/PNG format + + + + + GTA &Snapmatic format + + + + + Export Size + + + + + Default &Size + + + + + &Desktop Size + + + + + &Custom Size + + + + + Custom Size: + + + + + x + + + + + &Export + + + + + &Close + + + + + ImportDialog + + + Import... + + + + + Settings + + + + + + + Background Colour: <span style="color: %1">%1</span> + + + + + Ignore Aspect Ratio + + + + + Avatar + + + + + ... + + + + + Import picture + + + + + &OK + + + + + Discard picture + + + + + &Cancel + + + + + 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 + + + + + Select Colour... + + + + + MapPreviewDialog + + + Snapmatic Map Viewer + + + + + OptionsDialog + + + %1 - Settings + + + + + Profiles + + + + + Content Open/Select Mode + + + + + Open with Singleclick + + + + + Open with Doubleclick + + + + + Select with Singleclick + + + + + Default Profile + + + + + Custom GTA V Folder + + + + + Force using Custom Folder + + + + + ... + + + + + Pictures + + + + + Export Size + + + + + Default: %1x%2 + + + + + Screen Resolution: %1x%2 + + + + + + Custom Size: + + + + + x + + + + + Ignore Aspect Ratio + + + + + Export Quality + + + + + Enable Custom Quality + + + + + Quality: + + + + + %1% + + + + + Picture Viewer + + + + + Enable Navigation Bar + + + + + Players + + + + + ID + + + + + Name + + + + + + Language + + + + + Sync + + + + + Sync is not implemented at current time + + + + + Apply changes + + + + + &OK + OK, Cancel, Apply + + + + + Discard changes + + + + + &Cancel + OK, Cancel, Apply + + + + + %1 (Next Closest Language) + First language a person can talk with a different person/application. "Native" or "Not Native". + + + + + System + System in context of System default + + + + + %1 + %1 + + + + + The new Custom Folder will initialise after you restart %1. + + + + + No Profile + No Profile, as default + + + + + + + Profile: %1 + + + + + PictureDialog + + + %1 - Snapmatic Picture Viewer + + + + + <span style=" font-weight:600;">Title: </span>%6<br/> +<span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> +<span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> +<span style=" font-weight:600;">Created: </span>%8 + + + + + Manage picture + + + + + &Manage + + + + + Close viewer + + + + + &Close + + + + + Export as &Picture... + + + + + Export as &Snapmatic... + + + + + Open &Map View... + + + + + &Edit Properties... + + + + + Key 1 - Avatar Preview Mode +Key 2 - Toggle Overlay +Arrow Keys - Navigate + + + + + + Snapmatic Picture Viewer + + + + + + Failed at %1 + + + + + + No Crew + + + + + Unknown Location + + + + + + No Players + + + + + Avatar Preview Mode +Press 1 for Default View + + + + + + Export + + + + + Export as Picture... + + + + + JPEG Graphics (*.jpg *.jpeg) + + + + + Portable Network Graphics (*.png) + + + + + + Overwrite %1 with current Snapmatic picture? + + + + + + + + Export as Picture + + + + + + Failed to overwrite %1 with current Snapmatic picture + + + + + + + Failed to export current Snapmatic picture + + + + + + No valid file is selected + + + + + Export as Snapmatic... + + + + + GTA V Export (*.g5e) + + + + + GTA V Raw Export (*.auto) + + + + + Snapmatic pictures (PGTA*) + + + + + + + + + + Export as Snapmatic + + + + + Exported Snapmatic to "%1" because of using the .auto extension. + + + + + ProfileInterface + + + Profile Interface + + + + + Loading file %1 of %2 files + + + + + %1 %2 + + + + + Import file + + + + + &Import... + + + + + Close profile + + + + + &Close + + + + + + + Export file %1 of %2 files + + + + + Enabled pictures: %1 of %2 + + + + + Loading... + + + + + + Import... + + + + + + + + + + + + + + + + + Import + + + + + + GTA V Export (*.g5e) + + + + + + Savegames files (SGTA*) + + + + + + Snapmatic pictures (PGTA*) + + + + + Importable files (%1) + + + + + All image files (%1) + + + + + + All files (**) + + + + + + + No valid file is selected + + + + + + Import file %1 of %2 files + + + + + Import failed with... + +%1 + + + + + + Failed to read Snapmatic picture + + + + + + Failed to read Savegame file + + + + + Can't import %1 because file can't be parsed properly + + + + + Can't import %1 because file format can't be detected + + + + + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e + + + + + Failed to import the Snapmatic picture, the picture is already in the game + + + + + Failed to import the Snapmatic picture, can't copy the file into profile + + + + + Failed to import the Savegame, can't copy the file into profile + + + + + Failed to import the Savegame, no Savegame slot is left + + + + + + + + Export selected + + + + + + JPG pictures and GTA Snapmatic + + + + + + JPG pictures only + + + + + + GTA Snapmatic only + + + + + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: + + + + + Export selected... + + + + + Initialising export... + + + + + Export failed with... + +%1 + + + + + + No Snapmatic pictures or Savegames files are selected + + + + + + + Remove selected + + + + + You really want remove the selected Snapmatic picutres and Savegame files? + + + + + Failed at remove the complete selected Snapmatic pictures and/or Savegame files + + + + + All profile files (*.g5e SGTA* PGTA*) + + + + + QApplication + + + Font + + + + + Selected Font: %1 + + + + + SavegameDialog + + + + Savegame Viewer + + + + + <span style=" font-weight:600;">Savegame</span><br><br>%1 + + + + + &Export + + + + + &Close + + + + + Failed at %1 + + + + + SavegameWidget + + + Savegame Widget + + + + + SAVE %3 - %1<br>%2 + + + + + View savegame + + + + + View + + + + + Copy savegame + + + + + + Export + + + + + + + Delete savegame + + + + + Delete + + + + + &View + + + + + &Export + + + + + &Remove + + + + + &Select + + + + + &Deselect + + + + + Select &All + + + + + &Deselect All + + + + + Savegame files (SGTA*) + + + + + All files (**) + + + + + + + + Export Savegame + + + + + Overwrite %1 with current Savegame? + + + + + Failed to overwrite %1 with current Savegame + + + + + Failed to export current Savegame + + + + + No valid file is selected + + + + + Export Savegame... + + + + + + AUTOSAVE - %1 +%2 + + + + + + SAVE %3 - %1 +%2 + + + + + + WRONG FORMAT + + + + + UNKNOWN + + + + + Are you sure to delete %1 from your savegames? + + + + + Failed at deleting %1 from your savegames + + + + + SnapmaticEditor + + + + + Snapmatic Properties + + + + + Snapmatic Type + + + + + Editor + + + + + Selfie + + + + + Regular + + + + + Mugshot + + + + + Meme + + + + + Director + + + + + Snapmatic Values + + + + + + Crew: %1 (%2) + + + + + + Title: %1 (%2) + + + + + + + Appropriate: %1 + + + + + Extras + + + + + Qualify as Avatar automatically at apply + + + + + Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture + + + + + &Apply + + + + + &Cancel + + + + + + Edit + + + + + Yes + Yes, should work fine + + + + + No + No, could lead to issues + + + + + Patching of Snapmatic Properties failed because of I/O Error + + + + + Snapmatic Title + + + + + New Snapmatic title: + + + + + Snapmatic Crew + + + + + New Snapmatic crew: + + + + + SnapmaticPicture + + + PHOTO - %1 + + + + + SnapmaticWidget + + + Snapmatic Widget + + + + + PHOTO - 00/00/00 00:00:00 + + + + + View picture + + + + + View + + + + + Copy picture + + + + + Copy + + + + + Export picture + + + + + Export + + + + + + + Delete picture + + + + + Delete + + + + + Edi&t + + + + + Show &In-game + + + + + Hide &In-game + + + + + &Edit Properties... + + + + + &Export + + + + + Export as &Picture... + + + + + Export as &Snapmatic... + + + + + &View + + + + + &Remove + + + + + &Select + + + + + &Deselect + + + + + Select &All + + + + + &Deselect All + + + + + Are you sure to delete %1 from your Snapmatic pictures? + + + + + Failed at deleting %1 from your Snapmatic pictures + + + + + UserInterface + + + + %2 - %1 + + + + + Select profile + + + + + %1 %2 + + + + + Reload profile overview + + + + + &Reload + + + + + Close %1 + Close %1 <- (gta5view/gta5sync) - %1 will be replaced automatically + + + + + &Close + + + + + &File + + + + + &Help + + + + + &Edit + + + + + &Profile + + + + + &Selection visibility + + + + + + + &About %1 + + + + + Ctrl+P + + + + + &Exit + + + + + Exit + + + + + Ctrl+Q + + + + + Close &Profile + + + + + Ctrl+End + + + + + &Settings + + + + + Ctrl+S + + + + + Select &All + + + + + Ctrl+A + + + + + &Deselect All + + + + + Ctrl+D + + + + + &Export selected... + + + + + Ctrl+E + + + + + &Remove selected + + + + + Ctrl+Del + + + + + &Import files... + + + + + Ctrl+I + + + + + &Open File... + + + + + Ctrl+O + + + + + + Select &GTA V Folder... + + + + + + + + Select GTA V Folder... + + + + + Ctrl+G + + + + + Show In-gam&e + + + + + Shift+E + + + + + Hi&de In-game + + + + + Shift+D + + + + + + + Select Profile + + + + + Open File... + + + + + + + + Open File + + + + + Can't open %1 because of not valid file format + + + + diff --git a/main.cpp b/main.cpp index 0a6593b..8ba3e9b 100755 --- a/main.cpp +++ b/main.cpp @@ -1,493 +1,203 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "SnapmaticPicture.h" -#include "ProfileDatabase.h" -#include "DatabaseThread.h" -#include "SavegameDialog.h" -#include "PictureDialog.h" -#include "UserInterface.h" -#include "CrewDatabase.h" -#include "SavegameData.h" -#include "IconLoader.h" -#include "AppEnv.h" -#include "config.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef GTA5SYNC_WIN -#include "windows.h" -#include -#endif - -int main(int argc, char *argv[]) -{ - QApplication a(argc, argv); - a.setApplicationName(GTA5SYNC_APPSTR); - a.setApplicationVersion(GTA5SYNC_APPVER); - -#ifdef GTA5SYNC_WIN -#if QT_VERSION >= 0x050400 - if (QSysInfo::windowsVersion() >= 0x0080) - { - // Get Windows Font - NONCLIENTMETRICS ncm; - ncm.cbSize = sizeof(ncm); - SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0); - LOGFONTW uiFont = ncm.lfMessageFont; - QString uiFontStr(QString::fromStdWString(std::wstring(uiFont.lfFaceName))); - -#ifdef GTA5SYNC_DEBUG - QMessageBox::information(a.desktop(), QApplication::tr("Font"), QApplication::tr("Selected Font: %1").arg(uiFontStr)); -#endif - - // Set Application Font - QFont appFont(uiFontStr, 9); - a.setFont(appFont); - } -#endif -#endif - - QString pluginsDir = AppEnv::getPluginsFolder(); - if (QFileInfo(pluginsDir).exists()) - { - a.addLibraryPath(pluginsDir); - } - - // Loading translation settings - QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); - settings.beginGroup("Interface"); - QString language = settings.value("Language","System").toString(); - settings.endGroup(); - - // Start external translate loading - QString langpath = AppEnv::getLangFolder(); - bool trsf = false; - bool svlp = false; - QTranslator EappTranslator; - if (language == "System" || language.trimmed() == "") - { - QString languageName = QLocale::system().name(); - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(langpath + QDir::separator() + "gta5sync_" + langList.at(0) + ".qm")) - { - EappTranslator.load(langpath + QDir::separator() + "/gta5sync_" + langList.at(0) + ".qm"); - QLocale::setDefault(QLocale::system()); - } - } - } - else - { - QString languageName = language; - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(langpath + QDir::separator() + "gta5sync_" + langList.at(0) + ".qm")) - { - if (!EappTranslator.load(langpath + QDir::separator() + "gta5sync_" + langList.at(0) + ".qm")) - { - if (langList.at(0) != "en") - { - trsf = true; - } - } - else - { - QLocale::setDefault(QLocale(langList.at(0))); - svlp = true; - } - } - else - { - if (langList.at(0) != "en") - { - trsf = true; - } - } - } - } - if (trsf) - { - QString languageName = QLocale::system().name(); - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(langpath + QDir::separator() + "gta5sync_" + langList.at(0) + ".qm")) - { - EappTranslator.load(langpath + QDir::separator() + "gta5sync_" + langList.at(0) + ".qm"); - QLocale::setDefault(QLocale(langList.at(0))); - } - } - } - a.installTranslator(&EappTranslator); -#if QT_VERSION >= 0x050000 - QTranslator EqtTranslator1; - if (language == "System" || language.trimmed() == "") - { - QString languageName = QLocale::system().name(); - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(langpath + QDir::separator() + "qtbase_" + langList.at(0) + ".qm")) - { - EqtTranslator1.load(langpath + QDir::separator() + "qtbase_" + langList.at(0) + ".qm"); - } - } - } - else - { - QString languageName = language; - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(langpath + QDir::separator() + "qtbase_" + langList.at(0) + ".qm")) - { - EqtTranslator1.load(langpath + QDir::separator() + "qtbase_" + langList.at(0) + ".qm"); - } - } - } - if (trsf) - { - QString languageName = QLocale::system().name(); - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(langpath + QDir::separator() + "qtbase_" + langList.at(0) + ".qm")) - { - EqtTranslator1.load(langpath + QDir::separator() + "qtbase_" + langList.at(0) + ".qm"); - } - } - } - a.installTranslator(&EqtTranslator1); -#else - QTranslator EqtTranslator; - if (language == "System" || language.trimmed() == "") - { - QString languageName = QLocale::system().name(); - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(langpath + QDir::separator() + "qt_" + langList.at(0) + ".qm")) - { - EqtTranslator.load(langpath + QDir::separator() + "qt_" + langList.at(0) + ".qm"); - } - } - } - else - { - QString languageName = language; - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(langpath + QDir::separator() + "qt_" + langList.at(0) + ".qm")) - { - EqtTranslator.load(langpath + QDir::separator() + "qt_" + langList.at(0) + ".qm"); - } - } - } - if (trsf) - { - QString languageName = QLocale::system().name(); - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(langpath + QDir::separator() + "qt_" + langList.at(0) + ".qm")) - { - EqtTranslator.load(langpath + QDir::separator() + "qt_" + langList.at(0) + ".qm"); - } - } - } - a.installTranslator(&EqtTranslator); -#endif - // End external translate loading - // Start internal translate loading - QTranslator appTranslator; - trsf = false; - if (language == "System" || language.trimmed() == "") - { - QString languageName = QLocale::system().name(); - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(":/tr/gta5sync_" + langList.at(0) + ".qm")) - { - if (!appTranslator.load(":/tr/gta5sync_" + langList.at(0) + ".qm")) - { - if (langList.at(0) != "en") - { - if (svlp) { trsf = true; } - } - } - else - { - QLocale::setDefault(QLocale(langList.at(0))); - } - } - else - { - if (langList.at(0) != "en") - { - if (svlp) { trsf = true; } - } - } - } - } - else if (language == "en" || language == "English") - { - QLocale::setDefault(QLocale(QLocale::English, QLocale::AnyCountry)); - } - else - { - QString languageName = language; - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(":/tr/gta5sync_" + langList.at(0) + ".qm")) - { - appTranslator.load(":/tr/gta5sync_" + langList.at(0) + ".qm"); - QLocale::setDefault(QLocale(langList.at(0))); - - } - } - } - if (trsf) - { - QString languageName = QLocale::system().name(); - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(":/tr/gta5sync_" + langList.at(0) + ".qm")) - { - appTranslator.load(":/tr/gta5sync_" + langList.at(0) + ".qm"); - QLocale::setDefault(QLocale(langList.at(0))); - } - } - } - a.installTranslator(&appTranslator); -#if QT_VERSION >= 0x050000 - QTranslator qtTranslator1; - if (language == "System" || language.trimmed() == "") - { - QString languageName = QLocale::system().name(); - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(":/tr/qtbase_" + langList.at(0) + ".qm")) - { - qtTranslator1.load(":/tr/qtbase_" + langList.at(0) + ".qm"); - } - } - } - else - { - QString languageName = language; - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(":/tr/qtbase_" + langList.at(0) + ".qm")) - { - qtTranslator1.load(":/tr/qtbase_" + langList.at(0) + ".qm"); - } - } - } - if (trsf) - { - QString languageName = QLocale::system().name(); - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(":/tr/qtbase_" + langList.at(0) + ".qm")) - { - qtTranslator1.load(":/tr/qtbase_" + langList.at(0) + ".qm"); - } - } - } - a.installTranslator(&qtTranslator1); -#else - QTranslator qtTranslator1; - if (language == "System" || language.trimmed() == "") - { - QString languageName = QLocale::system().name(); - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(":/tr/qt_" + langList.at(0) + ".qm")) - { - qtTranslator1.load(":/tr/qt_" + langList.at(0) + ".qm"); - } - } - } - else - { - QString languageName = language; - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(":/tr/qt_" + langList.at(0) + ".qm")) - { - qtTranslator1.load(":/tr/qt_" + langList.at(0) + ".qm"); - } - } - } - if (trsf) - { - QString languageName = QLocale::system().name(); - QStringList langList = languageName.split("_"); - if (langList.length() >= 1) - { - if (QFile::exists(":/tr/qt_" + langList.at(0) + ".qm")) - { - qtTranslator1.load(":/tr/qt_" + langList.at(0) + ".qm"); - } - } - } - a.installTranslator(&qtTranslator1); -#endif - // End internal translate loading - - QStringList applicationArgs = a.arguments(); - QString selectedAction; - QString arg1; - applicationArgs.removeAt(0); - - foreach(QString currentArg, applicationArgs) - { - QString reworkedArg; - if (currentArg.left(9) == "-showpic=" && selectedAction == "") - { - reworkedArg = currentArg.remove(0,9); - arg1 = reworkedArg; - selectedAction = "showpic"; - } - else if (currentArg.left(9) == "-showsgd=" && selectedAction == "") - { - reworkedArg = currentArg.remove(0,9); - arg1 = reworkedArg; - selectedAction = "showsgd"; - } - else if (selectedAction == "") - { - QFile argumentFile(currentArg); - QFileInfo argumentFileInfo(argumentFile); - if (argumentFile.exists()) - { - QString argumentFileName = argumentFileInfo.fileName(); - QString argumentFileType = argumentFileName.left(4); - QString argumentFileExt = argumentFileName.right(4); - - if (argumentFileType == "PGTA" || argumentFileExt == ".g5e") - { - arg1 = currentArg; - selectedAction = "showpic"; - } - else if (argumentFileType == "SGTA") - { - arg1 = currentArg; - selectedAction = "showsgd"; - } - else if (argumentFileType == "MISR") - { - arg1 = currentArg; - selectedAction = "showsgd"; - } - } - } - } - - if (selectedAction == "showpic") - { - CrewDatabase crewDB; - ProfileDatabase profileDB; - DatabaseThread threadDB(&crewDB); - PictureDialog picDialog(true, &profileDB, &crewDB); - SnapmaticPicture picture; - - bool readOk = picture.readingPictureFromFile(arg1); - picDialog.setWindowIcon(IconLoader::loadingAppIcon()); - picDialog.setSnapmaticPicture(&picture, readOk); - - int crewID = picture.getSnapmaticProperties().crewID; - if (crewID != 0) { crewDB.addCrew(crewID); } - if (!readOk) { return 1; } - - QEventLoop threadLoop; - QObject::connect(&threadDB, SIGNAL(playerNameFound(int, QString)), &profileDB, SLOT(setPlayerName(int, QString))); - QObject::connect(&threadDB, SIGNAL(playerNameUpdated()), &picDialog, SLOT(playerNameUpdated())); - QObject::connect(&threadDB, SIGNAL(finished()), &threadLoop, SLOT(quit())); - QObject::connect(&picDialog, SIGNAL(endDatabaseThread()), &threadDB, SLOT(doEndThread())); - threadDB.start(); - - picDialog.show(); - - threadLoop.exec(); - - return 0; - } - else if (selectedAction == "showsgd") - { - SavegameDialog savegameDialog; - SavegameData savegame; - - bool readOk = savegame.readingSavegameFromFile(arg1); - savegameDialog.setWindowIcon(IconLoader::loadingAppIcon()); - savegameDialog.setSavegameData(&savegame, arg1, readOk); - - if (!readOk) { return 1; } - - savegameDialog.show(); - - return a.exec(); - } - - CrewDatabase crewDB; - ProfileDatabase profileDB; - DatabaseThread threadDB(&crewDB); - - QEventLoop threadLoop; - QObject::connect(&threadDB, SIGNAL(playerNameFound(int, QString)), &profileDB, SLOT(setPlayerName(int, QString))); - QObject::connect(&threadDB, SIGNAL(finished()), &threadLoop, SLOT(quit())); - threadDB.start(); - - UserInterface uiWindow(&profileDB, &crewDB, &threadDB); - uiWindow.setWindowIcon(IconLoader::loadingAppIcon()); - uiWindow.setupDirEnv(); -#ifdef Q_OS_ANDROID - uiWindow.showMaximized(); -#else - uiWindow.show(); -#endif - - threadLoop.exec(); - - return 0; -} - +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "TranslationClass.h" +#include "SnapmaticPicture.h" +#include "ProfileDatabase.h" +#include "DatabaseThread.h" +#include "SavegameDialog.h" +#include "PictureDialog.h" +#include "UserInterface.h" +#include "CrewDatabase.h" +#include "SavegameData.h" +#include "IconLoader.h" +#include "AppEnv.h" +#include "config.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef GTA5SYNC_WIN +#include "windows.h" +#include +#endif + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + a.setApplicationName(GTA5SYNC_APPSTR); + a.setApplicationVersion(GTA5SYNC_APPVER); + +#ifdef GTA5SYNC_WIN +#if QT_VERSION >= 0x050400 + if (QSysInfo::windowsVersion() >= 0x0080) + { + // Get Windows Font + NONCLIENTMETRICS ncm; + ncm.cbSize = sizeof(ncm); + SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0); + LOGFONTW uiFont = ncm.lfMessageFont; + QString uiFontStr(QString::fromStdWString(std::wstring(uiFont.lfFaceName))); + +#ifdef GTA5SYNC_DEBUG + qDebug() << QApplication::tr("Font") << QApplication::tr("Selected Font: %1").arg(uiFontStr); +#endif + + // Set Application Font + QFont appFont(uiFontStr, 9); + a.setFont(appFont); + } +#endif +#endif + + QString pluginsDir = AppEnv::getPluginsFolder(); + if (QFileInfo(pluginsDir).exists()) + { + a.addLibraryPath(pluginsDir); + } + + TCInstance->initUserLanguage(); + TCInstance->loadTranslation(&a); + + QStringList applicationArgs = a.arguments(); + QString selectedAction; + QString arg1; + applicationArgs.removeAt(0); + + foreach(QString currentArg, applicationArgs) + { + QString reworkedArg; + if (currentArg.left(9) == "-showpic=" && selectedAction == "") + { + reworkedArg = currentArg.remove(0,9); + arg1 = reworkedArg; + selectedAction = "showpic"; + } + else if (currentArg.left(9) == "-showsgd=" && selectedAction == "") + { + reworkedArg = currentArg.remove(0,9); + arg1 = reworkedArg; + selectedAction = "showsgd"; + } + else if (selectedAction == "") + { + QFile argumentFile(currentArg); + QFileInfo argumentFileInfo(argumentFile); + if (argumentFile.exists()) + { + QString argumentFileName = argumentFileInfo.fileName(); + QString argumentFileType = argumentFileName.left(4); + QString argumentFileExt = argumentFileName.right(4); + + if (argumentFileType == "PGTA" || argumentFileExt == ".g5e") + { + arg1 = currentArg; + selectedAction = "showpic"; + } + else if (argumentFileType == "SGTA") + { + arg1 = currentArg; + selectedAction = "showsgd"; + } + else if (argumentFileType == "MISR") + { + arg1 = currentArg; + selectedAction = "showsgd"; + } + } + } + } + + if (selectedAction == "showpic") + { + CrewDatabase crewDB; + ProfileDatabase profileDB; + DatabaseThread threadDB(&crewDB); + PictureDialog picDialog(true, &profileDB, &crewDB); + SnapmaticPicture picture; + + bool readOk = picture.readingPictureFromFile(arg1); + picDialog.setWindowIcon(IconLoader::loadingAppIcon()); + picDialog.setSnapmaticPicture(&picture, readOk); + + int crewID = picture.getSnapmaticProperties().crewID; + if (crewID != 0) { crewDB.addCrew(crewID); } + if (!readOk) { return 1; } + + QEventLoop threadLoop; + QObject::connect(&threadDB, SIGNAL(crewNameFound(int, QString)), &crewDB, SLOT(setCrewName(int, QString))); + QObject::connect(&threadDB, SIGNAL(crewNameUpdated()), &picDialog, SLOT(crewNameUpdated())); + QObject::connect(&threadDB, SIGNAL(playerNameFound(int, QString)), &profileDB, SLOT(setPlayerName(int, QString))); + QObject::connect(&threadDB, SIGNAL(playerNameUpdated()), &picDialog, SLOT(playerNameUpdated())); + QObject::connect(&threadDB, SIGNAL(finished()), &threadLoop, SLOT(quit())); + QObject::connect(&picDialog, SIGNAL(endDatabaseThread()), &threadDB, SLOT(doEndThread())); + threadDB.start(); + + picDialog.show(); + + threadLoop.exec(); + + return 0; + } + else if (selectedAction == "showsgd") + { + SavegameDialog savegameDialog; + SavegameData savegame; + + bool readOk = savegame.readingSavegameFromFile(arg1); + savegameDialog.setWindowIcon(IconLoader::loadingAppIcon()); + savegameDialog.setSavegameData(&savegame, arg1, readOk); + + if (!readOk) { return 1; } + + savegameDialog.show(); + + return a.exec(); + } + + CrewDatabase crewDB; + ProfileDatabase profileDB; + DatabaseThread threadDB(&crewDB); + + QEventLoop threadLoop; + QObject::connect(&threadDB, SIGNAL(crewNameFound(int,QString)), &crewDB, SLOT(setCrewName(int, QString))); + QObject::connect(&threadDB, SIGNAL(playerNameFound(int, QString)), &profileDB, SLOT(setPlayerName(int, QString))); + QObject::connect(&threadDB, SIGNAL(finished()), &threadLoop, SLOT(quit())); + threadDB.start(); + + UserInterface uiWindow(&profileDB, &crewDB, &threadDB); + uiWindow.setWindowIcon(IconLoader::loadingAppIcon()); + uiWindow.setupDirEnv(); +#ifdef Q_OS_ANDROID + uiWindow.showMaximized(); +#else + uiWindow.show(); +#endif + + threadLoop.exec(); + + return 0; +} diff --git a/qjson4/QJsonArray b/qjson4/QJsonArray index 93afb31..89dbf4e 100755 --- a/qjson4/QJsonArray +++ b/qjson4/QJsonArray @@ -1 +1 @@ -#include "QJsonArray.h" +#include "QJsonArray.h" diff --git a/qjson4/QJsonArray.cpp b/qjson4/QJsonArray.cpp index f932825..531941f 100755 --- a/qjson4/QJsonArray.cpp +++ b/qjson4/QJsonArray.cpp @@ -1,410 +1,410 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "QJsonArray.h" -#include "QJsonValueRef.h" -#include "QJsonValue.h" -#include - -#if QT_VERSION < 0x050000 - -//------------------------------------------------------------------------------ -// Name: QJsonArray -// Desc: default constructor -//------------------------------------------------------------------------------ -QJsonArray::QJsonArray() { - -} - -//------------------------------------------------------------------------------ -// Name: QJsonArray -// Desc: copy constructor -//------------------------------------------------------------------------------ -QJsonArray::QJsonArray(const QJsonArray &other) : values_(other.values_) { - -} - -#if __cplusplus >= 201103L -//------------------------------------------------------------------------------ -// Name: QJsonArray -// Desc: Creates an array initialized from args initialization list. -//------------------------------------------------------------------------------ -QJsonArray::QJsonArray(std::initializer_list args) { - for(const QJsonValue &arg : args) { - values_.append(arg); - } -} -#endif - -//------------------------------------------------------------------------------ -// Name: ~QJsonArray -// Desc: destructor -//------------------------------------------------------------------------------ -QJsonArray::~QJsonArray() { - -} - -//------------------------------------------------------------------------------ -// Name: operator= -// Desc: assignment operator -//------------------------------------------------------------------------------ -QJsonArray &QJsonArray::operator=(const QJsonArray &other) { - QJsonArray(other).swap(*this); - return *this; -} - -//------------------------------------------------------------------------------ -// Name: operator+= -// Desc: -//------------------------------------------------------------------------------ -QJsonArray &QJsonArray::operator+=(const QJsonValue &value) { - values_.append(value); - return *this; -} - -//------------------------------------------------------------------------------ -// Name: operator<< -// Desc: -//------------------------------------------------------------------------------ -QJsonArray &QJsonArray::operator<<(const QJsonValue &value) { - values_.append(value); - return *this; -} - -//------------------------------------------------------------------------------ -// Name: operator+ -// Desc: -//------------------------------------------------------------------------------ -QJsonArray QJsonArray::operator+(const QJsonValue &value) const { - QJsonArray arr(*this); - arr.append(value); - return arr; -} - -//------------------------------------------------------------------------------ -// Name: operator!= -// Desc: returns true if the compared array IS NOT equal to this -//------------------------------------------------------------------------------ -bool QJsonArray::operator!=(const QJsonArray &other) const { - return values_ != other.values_; -} - -//------------------------------------------------------------------------------ -// Name: operator== -// Desc: returns true if the compared array IS equal to this -//------------------------------------------------------------------------------ -bool QJsonArray::operator==(const QJsonArray &other) const { - return values_ == other.values_; -} - -//------------------------------------------------------------------------------ -// Name: begin -// Desc: returns an iterator to the first contained element -//------------------------------------------------------------------------------ -QJsonArray::const_iterator QJsonArray::begin() const { - return values_.begin(); -} - -//------------------------------------------------------------------------------ -// Name: end -// Desc: returns an iterator to one past the last contained element -//------------------------------------------------------------------------------ -QJsonArray::const_iterator QJsonArray::end() const { - return values_.end(); -} - -//------------------------------------------------------------------------------ -// Name: begin -// Desc: returns an iterator to the first contained element -//------------------------------------------------------------------------------ -QJsonArray::iterator QJsonArray::begin() { - return values_.begin(); -} - -//------------------------------------------------------------------------------ -// Name: end -// Desc: returns an iterator to one past the last contained element -//------------------------------------------------------------------------------ -QJsonArray::iterator QJsonArray::end() { - return values_.end(); -} - -//------------------------------------------------------------------------------ -// Name: constBegin -// Desc: returns an iterator to the first contained element -//------------------------------------------------------------------------------ -QJsonArray::const_iterator QJsonArray::constBegin() const { - return begin(); -} - -//------------------------------------------------------------------------------ -// Name: constEnd -// Desc: returns an iterator to one past the last contained element -//------------------------------------------------------------------------------ -QJsonArray::const_iterator QJsonArray::constEnd() const { - return end(); -} - -//------------------------------------------------------------------------------ -// Name: first -// Desc: returns the first element by value -//------------------------------------------------------------------------------ -QJsonValue QJsonArray::first() const { - Q_ASSERT(!empty()); - return values_.first(); -} - -//------------------------------------------------------------------------------ -// Name: last -// Desc: returns the last element by value -//------------------------------------------------------------------------------ -QJsonValue QJsonArray::last() const { - Q_ASSERT(!empty()); - return values_.last(); -} - -//------------------------------------------------------------------------------ -// Name: operator[] -//------------------------------------------------------------------------------ -QJsonValueRef QJsonArray::operator[](int i) { - return QJsonValueRef(this, i); -} - -//------------------------------------------------------------------------------ -// Name: operator[] -//------------------------------------------------------------------------------ -QJsonValue QJsonArray::operator[](int i) const { - return values_[i]; -} - -//------------------------------------------------------------------------------ -// Name: at -//------------------------------------------------------------------------------ -QJsonValue QJsonArray::at(int i) const { - return values_.at(i); -} - -//------------------------------------------------------------------------------ -// Name: size -//------------------------------------------------------------------------------ -int QJsonArray::size() const { - return values_.size(); -} - -//------------------------------------------------------------------------------ -// Name: count -//------------------------------------------------------------------------------ -int QJsonArray::count() const { - return size(); -} - -//------------------------------------------------------------------------------ -// Name: empty -//------------------------------------------------------------------------------ -bool QJsonArray::empty() const { - return values_.empty(); -} - -//------------------------------------------------------------------------------ -// Name: isEmpty -//------------------------------------------------------------------------------ -bool QJsonArray::isEmpty() const { - return empty(); -} - -//------------------------------------------------------------------------------ -// Name: pop_back -//------------------------------------------------------------------------------ -void QJsonArray::pop_back() { - values_.pop_back(); -} - -//------------------------------------------------------------------------------ -// Name: pop_front -//------------------------------------------------------------------------------ -void QJsonArray::pop_front() { - values_.pop_front(); -} - -//------------------------------------------------------------------------------ -// Name: push_back -//------------------------------------------------------------------------------ -void QJsonArray::push_back(const QJsonValue &value) { - values_.push_back(value); -} - -//------------------------------------------------------------------------------ -// Name: push_front -//------------------------------------------------------------------------------ -void QJsonArray::push_front(const QJsonValue &value) { - values_.push_front(value); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -void QJsonArray::append(const QJsonValue &value) { - values_.append(value); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -bool QJsonArray::contains(const QJsonValue &value) const { - return values_.contains(value); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonArray::iterator QJsonArray::erase(iterator it) { - return values_.erase(it); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -void QJsonArray::insert(int i, const QJsonValue &value) { - values_.insert(i, value); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonArray::iterator QJsonArray::insert(iterator before, const QJsonValue &value) { - return values_.insert(before, value); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -void QJsonArray::prepend(const QJsonValue &value) { - values_.prepend(value); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -void QJsonArray::removeAt(int i) { - values_.removeAt(i); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -void QJsonArray::removeFirst() { - values_.removeFirst(); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -void QJsonArray::removeLast() { - values_.removeLast(); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -void QJsonArray::replace(int i, const QJsonValue &value) { - values_.replace(i, value); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonValue QJsonArray::takeAt(int i) { - return values_.takeAt(i); -} - -//------------------------------------------------------------------------------ -// Name: toVariantList -//------------------------------------------------------------------------------ -QVariantList QJsonArray::toVariantList() const { - QVariantList a; - Q_FOREACH(const QJsonValue &v, *this) { - a.push_back(v.toVariant()); - } - return a; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonArray QJsonArray::fromStringList(const QStringList &list) { - QJsonArray a; - Q_FOREACH(const QString &s, list) { - a.push_back(QJsonValue(s)); - } - return a; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonArray QJsonArray::fromVariantList(const QVariantList &list) { - QJsonArray a; - Q_FOREACH(const QVariant &v, list) { - a.push_back(QJsonValue::fromVariant(v)); - } - return a; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonRoot *QJsonArray::clone() const { - return new QJsonArray(*this); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -const QJsonObject *QJsonArray::toObject() const { - return 0; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonObject *QJsonArray::toObject() { - return 0; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonArray *QJsonArray::toArray() { - return this; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -const QJsonArray *QJsonArray::toArray() const { - return this; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -void QJsonArray::swap(QJsonArray &other) { - qSwap(values_, other.values_); -} - -#endif +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "QJsonArray.h" +#include "QJsonValueRef.h" +#include "QJsonValue.h" +#include + +#if QT_VERSION < 0x050000 + +//------------------------------------------------------------------------------ +// Name: QJsonArray +// Desc: default constructor +//------------------------------------------------------------------------------ +QJsonArray::QJsonArray() { + +} + +//------------------------------------------------------------------------------ +// Name: QJsonArray +// Desc: copy constructor +//------------------------------------------------------------------------------ +QJsonArray::QJsonArray(const QJsonArray &other) : values_(other.values_) { + +} + +#if __cplusplus >= 201103L +//------------------------------------------------------------------------------ +// Name: QJsonArray +// Desc: Creates an array initialized from args initialization list. +//------------------------------------------------------------------------------ +QJsonArray::QJsonArray(std::initializer_list args) { + for(const QJsonValue &arg : args) { + values_.append(arg); + } +} +#endif + +//------------------------------------------------------------------------------ +// Name: ~QJsonArray +// Desc: destructor +//------------------------------------------------------------------------------ +QJsonArray::~QJsonArray() { + +} + +//------------------------------------------------------------------------------ +// Name: operator= +// Desc: assignment operator +//------------------------------------------------------------------------------ +QJsonArray &QJsonArray::operator=(const QJsonArray &other) { + QJsonArray(other).swap(*this); + return *this; +} + +//------------------------------------------------------------------------------ +// Name: operator+= +// Desc: +//------------------------------------------------------------------------------ +QJsonArray &QJsonArray::operator+=(const QJsonValue &value) { + values_.append(value); + return *this; +} + +//------------------------------------------------------------------------------ +// Name: operator<< +// Desc: +//------------------------------------------------------------------------------ +QJsonArray &QJsonArray::operator<<(const QJsonValue &value) { + values_.append(value); + return *this; +} + +//------------------------------------------------------------------------------ +// Name: operator+ +// Desc: +//------------------------------------------------------------------------------ +QJsonArray QJsonArray::operator+(const QJsonValue &value) const { + QJsonArray arr(*this); + arr.append(value); + return arr; +} + +//------------------------------------------------------------------------------ +// Name: operator!= +// Desc: returns true if the compared array IS NOT equal to this +//------------------------------------------------------------------------------ +bool QJsonArray::operator!=(const QJsonArray &other) const { + return values_ != other.values_; +} + +//------------------------------------------------------------------------------ +// Name: operator== +// Desc: returns true if the compared array IS equal to this +//------------------------------------------------------------------------------ +bool QJsonArray::operator==(const QJsonArray &other) const { + return values_ == other.values_; +} + +//------------------------------------------------------------------------------ +// Name: begin +// Desc: returns an iterator to the first contained element +//------------------------------------------------------------------------------ +QJsonArray::const_iterator QJsonArray::begin() const { + return values_.begin(); +} + +//------------------------------------------------------------------------------ +// Name: end +// Desc: returns an iterator to one past the last contained element +//------------------------------------------------------------------------------ +QJsonArray::const_iterator QJsonArray::end() const { + return values_.end(); +} + +//------------------------------------------------------------------------------ +// Name: begin +// Desc: returns an iterator to the first contained element +//------------------------------------------------------------------------------ +QJsonArray::iterator QJsonArray::begin() { + return values_.begin(); +} + +//------------------------------------------------------------------------------ +// Name: end +// Desc: returns an iterator to one past the last contained element +//------------------------------------------------------------------------------ +QJsonArray::iterator QJsonArray::end() { + return values_.end(); +} + +//------------------------------------------------------------------------------ +// Name: constBegin +// Desc: returns an iterator to the first contained element +//------------------------------------------------------------------------------ +QJsonArray::const_iterator QJsonArray::constBegin() const { + return begin(); +} + +//------------------------------------------------------------------------------ +// Name: constEnd +// Desc: returns an iterator to one past the last contained element +//------------------------------------------------------------------------------ +QJsonArray::const_iterator QJsonArray::constEnd() const { + return end(); +} + +//------------------------------------------------------------------------------ +// Name: first +// Desc: returns the first element by value +//------------------------------------------------------------------------------ +QJsonValue QJsonArray::first() const { + Q_ASSERT(!empty()); + return values_.first(); +} + +//------------------------------------------------------------------------------ +// Name: last +// Desc: returns the last element by value +//------------------------------------------------------------------------------ +QJsonValue QJsonArray::last() const { + Q_ASSERT(!empty()); + return values_.last(); +} + +//------------------------------------------------------------------------------ +// Name: operator[] +//------------------------------------------------------------------------------ +QJsonValueRef QJsonArray::operator[](int i) { + return QJsonValueRef(this, i); +} + +//------------------------------------------------------------------------------ +// Name: operator[] +//------------------------------------------------------------------------------ +QJsonValue QJsonArray::operator[](int i) const { + return values_[i]; +} + +//------------------------------------------------------------------------------ +// Name: at +//------------------------------------------------------------------------------ +QJsonValue QJsonArray::at(int i) const { + return values_.at(i); +} + +//------------------------------------------------------------------------------ +// Name: size +//------------------------------------------------------------------------------ +int QJsonArray::size() const { + return values_.size(); +} + +//------------------------------------------------------------------------------ +// Name: count +//------------------------------------------------------------------------------ +int QJsonArray::count() const { + return size(); +} + +//------------------------------------------------------------------------------ +// Name: empty +//------------------------------------------------------------------------------ +bool QJsonArray::empty() const { + return values_.empty(); +} + +//------------------------------------------------------------------------------ +// Name: isEmpty +//------------------------------------------------------------------------------ +bool QJsonArray::isEmpty() const { + return empty(); +} + +//------------------------------------------------------------------------------ +// Name: pop_back +//------------------------------------------------------------------------------ +void QJsonArray::pop_back() { + values_.pop_back(); +} + +//------------------------------------------------------------------------------ +// Name: pop_front +//------------------------------------------------------------------------------ +void QJsonArray::pop_front() { + values_.pop_front(); +} + +//------------------------------------------------------------------------------ +// Name: push_back +//------------------------------------------------------------------------------ +void QJsonArray::push_back(const QJsonValue &value) { + values_.push_back(value); +} + +//------------------------------------------------------------------------------ +// Name: push_front +//------------------------------------------------------------------------------ +void QJsonArray::push_front(const QJsonValue &value) { + values_.push_front(value); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +void QJsonArray::append(const QJsonValue &value) { + values_.append(value); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +bool QJsonArray::contains(const QJsonValue &value) const { + return values_.contains(value); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonArray::iterator QJsonArray::erase(iterator it) { + return values_.erase(it); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +void QJsonArray::insert(int i, const QJsonValue &value) { + values_.insert(i, value); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonArray::iterator QJsonArray::insert(iterator before, const QJsonValue &value) { + return values_.insert(before, value); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +void QJsonArray::prepend(const QJsonValue &value) { + values_.prepend(value); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +void QJsonArray::removeAt(int i) { + values_.removeAt(i); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +void QJsonArray::removeFirst() { + values_.removeFirst(); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +void QJsonArray::removeLast() { + values_.removeLast(); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +void QJsonArray::replace(int i, const QJsonValue &value) { + values_.replace(i, value); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonValue QJsonArray::takeAt(int i) { + return values_.takeAt(i); +} + +//------------------------------------------------------------------------------ +// Name: toVariantList +//------------------------------------------------------------------------------ +QVariantList QJsonArray::toVariantList() const { + QVariantList a; + Q_FOREACH(const QJsonValue &v, *this) { + a.push_back(v.toVariant()); + } + return a; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonArray QJsonArray::fromStringList(const QStringList &list) { + QJsonArray a; + Q_FOREACH(const QString &s, list) { + a.push_back(QJsonValue(s)); + } + return a; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonArray QJsonArray::fromVariantList(const QVariantList &list) { + QJsonArray a; + Q_FOREACH(const QVariant &v, list) { + a.push_back(QJsonValue::fromVariant(v)); + } + return a; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonRoot *QJsonArray::clone() const { + return new QJsonArray(*this); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +const QJsonObject *QJsonArray::toObject() const { + return 0; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonObject *QJsonArray::toObject() { + return 0; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonArray *QJsonArray::toArray() { + return this; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +const QJsonArray *QJsonArray::toArray() const { + return this; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +void QJsonArray::swap(QJsonArray &other) { + qSwap(values_, other.values_); +} + +#endif diff --git a/qjson4/QJsonArray.h b/qjson4/QJsonArray.h index 2e443b4..94aab1b 100755 --- a/qjson4/QJsonArray.h +++ b/qjson4/QJsonArray.h @@ -1,139 +1,139 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef QJSON_ARRAY_H_ -#define QJSON_ARRAY_H_ - -#include - -#if QT_VERSION >= 0x050000 -#include -#else - -#include "QJsonRoot.h" -#include -#include - -class QJsonValue; -class QJsonValueRef; - -class QJsonArray : public QJsonRoot { - friend class QJsonDocument; - friend class QJsonValue; - friend class QJsonValueRef; - friend class QJsonParser; -public: - // TODO(eteran): manually implement the array, for now we use QList - // but the real thing has a custom implementation - // I guess for the purposes of less interdependancies? - // maybe so it's easier to forward declare the iterators? - - typedef QList::const_iterator const_iterator; - typedef QList::iterator iterator; - typedef const_iterator ConstIterator; - typedef iterator Iterator; - typedef QList::const_pointer const_pointer; - typedef QList::const_reference const_reference; - typedef QList::difference_type difference_type; - typedef QList::pointer pointer; - typedef QList::reference reference; - typedef QList::size_type size_type; - typedef QList::value_type value_type; - -public: - QJsonArray(); - QJsonArray(const QJsonArray &other); -#if __cplusplus >= 201103L - QJsonArray(std::initializer_list args); -#endif - ~QJsonArray(); - -public: - QJsonArray &operator=(const QJsonArray &other); - -public: - bool operator!=(const QJsonArray &other) const; - bool operator==(const QJsonArray &other) const; - QJsonArray operator+(const QJsonValue &value) const; - QJsonArray &operator+=(const QJsonValue &value); - QJsonArray &operator<<(const QJsonValue &value); - -public: - const_iterator begin() const; - const_iterator end() const; - iterator begin(); - iterator end(); - const_iterator constBegin() const; - const_iterator constEnd() const; - -public: - QJsonValueRef operator[](int i); - QJsonValue operator[](int i) const; - QJsonValue at(int i) const; - QJsonValue first() const; - QJsonValue last() const; - -public: - int size() const; - int count() const; - bool empty() const; - bool isEmpty() const; - -public: - void pop_back(); - void pop_front(); - void push_back(const QJsonValue &value); - void push_front(const QJsonValue &value); - -public: - void append(const QJsonValue &value); - bool contains(const QJsonValue &value) const; - iterator erase(iterator it); - void insert(int i, const QJsonValue &value); - iterator insert(iterator before, const QJsonValue &value); - void prepend(const QJsonValue &value); - void removeAt(int i); - void removeFirst(); - void removeLast(); - void replace(int i, const QJsonValue &value); - QJsonValue takeAt(int i); - -public: - QVariantList toVariantList() const; - -public: - static QJsonArray fromStringList(const QStringList &list); - static QJsonArray fromVariantList(const QVariantList &list); - -private: - virtual QJsonRoot *clone() const; - virtual QJsonArray *toArray(); - virtual QJsonObject *toObject(); - virtual const QJsonArray *toArray() const; - virtual const QJsonObject *toObject() const; - -private: - void swap(QJsonArray &other); - -private: - QList values_; -}; - -#endif - -#endif +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef QJSON_ARRAY_H_ +#define QJSON_ARRAY_H_ + +#include + +#if QT_VERSION >= 0x050000 +#include +#else + +#include "QJsonRoot.h" +#include +#include + +class QJsonValue; +class QJsonValueRef; + +class QJsonArray : public QJsonRoot { + friend class QJsonDocument; + friend class QJsonValue; + friend class QJsonValueRef; + friend class QJsonParser; +public: + // TODO(eteran): manually implement the array, for now we use QList + // but the real thing has a custom implementation + // I guess for the purposes of less interdependancies? + // maybe so it's easier to forward declare the iterators? + + typedef QList::const_iterator const_iterator; + typedef QList::iterator iterator; + typedef const_iterator ConstIterator; + typedef iterator Iterator; + typedef QList::const_pointer const_pointer; + typedef QList::const_reference const_reference; + typedef QList::difference_type difference_type; + typedef QList::pointer pointer; + typedef QList::reference reference; + typedef QList::size_type size_type; + typedef QList::value_type value_type; + +public: + QJsonArray(); + QJsonArray(const QJsonArray &other); +#if __cplusplus >= 201103L + QJsonArray(std::initializer_list args); +#endif + ~QJsonArray(); + +public: + QJsonArray &operator=(const QJsonArray &other); + +public: + bool operator!=(const QJsonArray &other) const; + bool operator==(const QJsonArray &other) const; + QJsonArray operator+(const QJsonValue &value) const; + QJsonArray &operator+=(const QJsonValue &value); + QJsonArray &operator<<(const QJsonValue &value); + +public: + const_iterator begin() const; + const_iterator end() const; + iterator begin(); + iterator end(); + const_iterator constBegin() const; + const_iterator constEnd() const; + +public: + QJsonValueRef operator[](int i); + QJsonValue operator[](int i) const; + QJsonValue at(int i) const; + QJsonValue first() const; + QJsonValue last() const; + +public: + int size() const; + int count() const; + bool empty() const; + bool isEmpty() const; + +public: + void pop_back(); + void pop_front(); + void push_back(const QJsonValue &value); + void push_front(const QJsonValue &value); + +public: + void append(const QJsonValue &value); + bool contains(const QJsonValue &value) const; + iterator erase(iterator it); + void insert(int i, const QJsonValue &value); + iterator insert(iterator before, const QJsonValue &value); + void prepend(const QJsonValue &value); + void removeAt(int i); + void removeFirst(); + void removeLast(); + void replace(int i, const QJsonValue &value); + QJsonValue takeAt(int i); + +public: + QVariantList toVariantList() const; + +public: + static QJsonArray fromStringList(const QStringList &list); + static QJsonArray fromVariantList(const QVariantList &list); + +private: + virtual QJsonRoot *clone() const; + virtual QJsonArray *toArray(); + virtual QJsonObject *toObject(); + virtual const QJsonArray *toArray() const; + virtual const QJsonObject *toObject() const; + +private: + void swap(QJsonArray &other); + +private: + QList values_; +}; + +#endif + +#endif diff --git a/qjson4/QJsonDocument b/qjson4/QJsonDocument index dabae9b..f652bf4 100755 --- a/qjson4/QJsonDocument +++ b/qjson4/QJsonDocument @@ -1 +1 @@ -#include "QJsonDocument.h" +#include "QJsonDocument.h" diff --git a/qjson4/QJsonDocument.cpp b/qjson4/QJsonDocument.cpp index 712a96d..59adf32 100755 --- a/qjson4/QJsonDocument.cpp +++ b/qjson4/QJsonDocument.cpp @@ -1,417 +1,417 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "QJsonDocument.h" -#include "QJsonObject.h" -#include "QJsonArray.h" -#include "QJsonParser.h" - -#include -#include -#include -#include -#include - -#if QT_VERSION < 0x050000 - -//------------------------------------------------------------------------------ -// Name: QJsonDocument -//------------------------------------------------------------------------------ -QJsonDocument::QJsonDocument() : root_(0) { -} - -//------------------------------------------------------------------------------ -// Name: QJsonDocument -//------------------------------------------------------------------------------ -QJsonDocument::QJsonDocument(const QJsonObject &object) : root_(0) { - setObject(object); -} - -//------------------------------------------------------------------------------ -// Name: QJsonDocument -//------------------------------------------------------------------------------ -QJsonDocument::QJsonDocument(const QJsonArray &array) : root_(0) { - setArray(array); -} - -//------------------------------------------------------------------------------ -// Name: QJsonDocument -//------------------------------------------------------------------------------ -QJsonDocument::QJsonDocument(const QJsonDocument &other) : root_(0) { - if(other.root_) { - root_ = other.root_->clone(); - } -} - -//------------------------------------------------------------------------------ -// Name: ~QJsonDocument -//------------------------------------------------------------------------------ -QJsonDocument::~QJsonDocument() { - delete root_; -} - -//------------------------------------------------------------------------------ -// Name: operator= -//------------------------------------------------------------------------------ -QJsonDocument &QJsonDocument::operator=(const QJsonDocument &other) { - QJsonDocument(other).swap(*this); - return *this; -} - -//------------------------------------------------------------------------------ -// Name: operator!= -//------------------------------------------------------------------------------ -bool QJsonDocument::operator!=(const QJsonDocument &other) const { - return !(*this == other); -} - -//------------------------------------------------------------------------------ -// Name: operator== -//------------------------------------------------------------------------------ -bool QJsonDocument::operator==(const QJsonDocument &other) const { - - if(isArray() && other.isArray()) { - return array() == other.array(); - } - - if(isObject() && other.isObject()) { - return object() == other.object(); - } - - if(isEmpty() && other.isEmpty()) { - return true; - } - - if(isNull() && other.isNull()) { - return true; - } - - return false; -} - -//------------------------------------------------------------------------------ -// Name: isArray -//------------------------------------------------------------------------------ -bool QJsonDocument::isArray() const { - return root_ && root_->toArray(); -} - -//------------------------------------------------------------------------------ -// Name: isEmpty -//------------------------------------------------------------------------------ -bool QJsonDocument::isEmpty() const { - - // TODO(eteran): figure out the rules here that Qt5 uses - // it *looks* like they define empty as being NULL - // which is obviously different than this - - return !root_; -} - -//------------------------------------------------------------------------------ -// Name: isNull -//------------------------------------------------------------------------------ -bool QJsonDocument::isNull() const { - return !root_; -} - -//------------------------------------------------------------------------------ -// Name: isObject -//------------------------------------------------------------------------------ -bool QJsonDocument::isObject() const { - return root_ && root_->toObject(); -} - -//------------------------------------------------------------------------------ -// Name: setArray -//------------------------------------------------------------------------------ -void QJsonDocument::setArray(const QJsonArray &array) { - setRoot(array); -} - -//------------------------------------------------------------------------------ -// Name: setObject -//------------------------------------------------------------------------------ -void QJsonDocument::setObject(const QJsonObject &object) { - setRoot(object); -} - -//------------------------------------------------------------------------------ -// Name: setRoot -//------------------------------------------------------------------------------ -void QJsonDocument::setRoot(const QJsonRoot &root) { - delete root_; - root_ = root.clone(); -} - -//------------------------------------------------------------------------------ -// Name: toBinaryData -//------------------------------------------------------------------------------ -QByteArray QJsonDocument::toBinaryData() const { - QByteArray r; - // TODO(eteran): implement this - return r; -} - -//------------------------------------------------------------------------------ -// Name: escapeString -//------------------------------------------------------------------------------ -QString QJsonDocument::escapeString(const QString &s) const { - - QString r; - - Q_FOREACH(QChar ch, s) { - switch(ch.toLatin1()) { - case '\"': r.append("\\\""); break; - case '\\': r.append("\\\\"); break; - #if 0 - case '/': r.append("\\/"); break; - #endif - case '\b': r.append("\\b"); break; - case '\f': r.append("\\f"); break; - case '\n': r.append("\\n"); break; - case '\r': r.append("\\r"); break; - case '\t': r.append("\\t"); break; - default: - r += ch; - break; - } - } - - return r; -} - -//------------------------------------------------------------------------------ -// Name: toJson -//------------------------------------------------------------------------------ -QString QJsonDocument::toJson(const QJsonValue &v, JsonFormat format) const { - - QString b; - QTextStream ss(&b, QIODevice::WriteOnly | QIODevice::Text); - - switch(v.type()) { - case QJsonValue::Null: - ss << "null"; - break; - case QJsonValue::Bool: - ss << (v.toBool() ? "true" : "false"); - break; - case QJsonValue::Double: - { - double d = v.toDouble (); - if (qIsFinite(d)) { - // +2 to format to ensure the expected precision - ss << QByteArray::number(d, 'g', 15 + 2); // ::digits10 is 15 - } else { - ss << "null"; // +INF || -INF || NaN (see RFC4627#section2.4) - } - } - break; - case QJsonValue::String: - ss << '"' << escapeString(v.toString()) << '"'; - break; - case QJsonValue::Array: - { - const QJsonArray a = v.toArray(); - ss << "["; - if(!a.empty()) { - QJsonArray::const_iterator it = a.begin(); - QJsonArray::const_iterator e = a.end(); - - ss << toJson(*it++, format); - - for(;it != e; ++it) { - ss << ','; - ss << toJson(*it, format); - } - } - ss << "]"; - } - break; - case QJsonValue::Object: - { - const QJsonObject o = v.toObject(); - ss << "{"; - if(!o.empty()) { - QJsonObject::const_iterator it = o.begin(); - QJsonObject::const_iterator e = o.end(); - - ss << '"' << escapeString(it.key()) << "\": " << toJson(it.value(), format); - ++it; - for(;it != e; ++it) { - ss << ','; - ss << '"' << escapeString(it.key()) << "\": " << toJson(it.value(), format); - } - } - ss << "}"; - } - break; - case QJsonValue::Undefined: - Q_ASSERT(0); - break; - } - - return b; -} - -//------------------------------------------------------------------------------ -// Name: toJson -//------------------------------------------------------------------------------ -QByteArray QJsonDocument::toJson(JsonFormat format) const { - - Q_UNUSED(format); - - if(isArray()) { - QString s = toJson(array(), format); - return s.toUtf8(); - } - - if(isObject()) { - QString s = toJson(object(), format); - return s.toUtf8(); - } - - return QByteArray(); -} - -//------------------------------------------------------------------------------ -// Name: toVariant -//------------------------------------------------------------------------------ -QVariant QJsonDocument::toVariant() const { - - if(!isEmpty()) { - if(QJsonObject *const object = root_->toObject()) { - return object->toVariantMap(); - } - - if(QJsonArray *const array = root_->toArray()) { - return array->toVariantList(); - } - } - - return QVariant(); -} - -//------------------------------------------------------------------------------ -// Name: array -//------------------------------------------------------------------------------ -QJsonArray QJsonDocument::array() const { - - if(!isEmpty()) { - if(QJsonArray *const array = root_->toArray()) { - return *array; - } - } - - return QJsonArray(); -} - -//------------------------------------------------------------------------------ -// Name: object -//------------------------------------------------------------------------------ -QJsonObject QJsonDocument::object() const { - - if(!isEmpty()) { - if(QJsonObject *const object = root_->toObject()) { - return *object; - } - } - - return QJsonObject(); -} - -//------------------------------------------------------------------------------ -// Name: rawData -//------------------------------------------------------------------------------ -const char *QJsonDocument::rawData(int *size) const { - Q_UNUSED(size); - // TODO(eteran): implement this - return 0; -} - -//------------------------------------------------------------------------------ -// Name: fromBinaryData -//------------------------------------------------------------------------------ -QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidation validation) { - Q_UNUSED(data); - Q_UNUSED(validation); - - QJsonDocument doc; - // TODO(eteran): implement this - return doc; -} - -//------------------------------------------------------------------------------ -// Name: fromJson -//------------------------------------------------------------------------------ -QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error) { - QJsonDocument doc; - - const char *const begin = json.constData(); - const char *const end = begin + json.size(); - - QJsonParser parser(begin, end); - - doc.root_ = parser.parse(); - - if(error) { - *error = parser.state(); - } - - return doc; -} - -//------------------------------------------------------------------------------ -// Name: fromRawData -//------------------------------------------------------------------------------ -QJsonDocument QJsonDocument::fromRawData(const char *data, int size, DataValidation validation) { - - // data has to be aligned to a 4 byte boundary. - Q_ASSERT(!(reinterpret_cast(data) % 3)); - - return fromBinaryData(QByteArray::fromRawData(data, size), validation); -} - -//------------------------------------------------------------------------------ -// Name: fromVariant -//------------------------------------------------------------------------------ -QJsonDocument QJsonDocument::fromVariant(const QVariant &variant) { - - QJsonDocument doc; - - if (variant.type() == QVariant::Map) { - doc.setObject(QJsonObject::fromVariantMap(variant.toMap())); - } else if (variant.type() == QVariant::Hash) { - doc.setObject(QJsonObject::fromVariantHash(variant.toHash())); - } else if (variant.type() == QVariant::List) { - doc.setArray(QJsonArray::fromVariantList(variant.toList())); - } else if (variant.type() == QVariant::StringList) { - doc.setArray(QJsonArray::fromStringList(variant.toStringList())); - } - - return doc; -} - -//------------------------------------------------------------------------------ -// Name: swap -//------------------------------------------------------------------------------ -void QJsonDocument::swap(QJsonDocument &other) { - qSwap(root_, other.root_); -} - -#endif +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "QJsonDocument.h" +#include "QJsonObject.h" +#include "QJsonArray.h" +#include "QJsonParser.h" + +#include +#include +#include +#include +#include + +#if QT_VERSION < 0x050000 + +//------------------------------------------------------------------------------ +// Name: QJsonDocument +//------------------------------------------------------------------------------ +QJsonDocument::QJsonDocument() : root_(0) { +} + +//------------------------------------------------------------------------------ +// Name: QJsonDocument +//------------------------------------------------------------------------------ +QJsonDocument::QJsonDocument(const QJsonObject &object) : root_(0) { + setObject(object); +} + +//------------------------------------------------------------------------------ +// Name: QJsonDocument +//------------------------------------------------------------------------------ +QJsonDocument::QJsonDocument(const QJsonArray &array) : root_(0) { + setArray(array); +} + +//------------------------------------------------------------------------------ +// Name: QJsonDocument +//------------------------------------------------------------------------------ +QJsonDocument::QJsonDocument(const QJsonDocument &other) : root_(0) { + if(other.root_) { + root_ = other.root_->clone(); + } +} + +//------------------------------------------------------------------------------ +// Name: ~QJsonDocument +//------------------------------------------------------------------------------ +QJsonDocument::~QJsonDocument() { + delete root_; +} + +//------------------------------------------------------------------------------ +// Name: operator= +//------------------------------------------------------------------------------ +QJsonDocument &QJsonDocument::operator=(const QJsonDocument &other) { + QJsonDocument(other).swap(*this); + return *this; +} + +//------------------------------------------------------------------------------ +// Name: operator!= +//------------------------------------------------------------------------------ +bool QJsonDocument::operator!=(const QJsonDocument &other) const { + return !(*this == other); +} + +//------------------------------------------------------------------------------ +// Name: operator== +//------------------------------------------------------------------------------ +bool QJsonDocument::operator==(const QJsonDocument &other) const { + + if(isArray() && other.isArray()) { + return array() == other.array(); + } + + if(isObject() && other.isObject()) { + return object() == other.object(); + } + + if(isEmpty() && other.isEmpty()) { + return true; + } + + if(isNull() && other.isNull()) { + return true; + } + + return false; +} + +//------------------------------------------------------------------------------ +// Name: isArray +//------------------------------------------------------------------------------ +bool QJsonDocument::isArray() const { + return root_ && root_->toArray(); +} + +//------------------------------------------------------------------------------ +// Name: isEmpty +//------------------------------------------------------------------------------ +bool QJsonDocument::isEmpty() const { + + // TODO(eteran): figure out the rules here that Qt5 uses + // it *looks* like they define empty as being NULL + // which is obviously different than this + + return !root_; +} + +//------------------------------------------------------------------------------ +// Name: isNull +//------------------------------------------------------------------------------ +bool QJsonDocument::isNull() const { + return !root_; +} + +//------------------------------------------------------------------------------ +// Name: isObject +//------------------------------------------------------------------------------ +bool QJsonDocument::isObject() const { + return root_ && root_->toObject(); +} + +//------------------------------------------------------------------------------ +// Name: setArray +//------------------------------------------------------------------------------ +void QJsonDocument::setArray(const QJsonArray &array) { + setRoot(array); +} + +//------------------------------------------------------------------------------ +// Name: setObject +//------------------------------------------------------------------------------ +void QJsonDocument::setObject(const QJsonObject &object) { + setRoot(object); +} + +//------------------------------------------------------------------------------ +// Name: setRoot +//------------------------------------------------------------------------------ +void QJsonDocument::setRoot(const QJsonRoot &root) { + delete root_; + root_ = root.clone(); +} + +//------------------------------------------------------------------------------ +// Name: toBinaryData +//------------------------------------------------------------------------------ +QByteArray QJsonDocument::toBinaryData() const { + QByteArray r; + // TODO(eteran): implement this + return r; +} + +//------------------------------------------------------------------------------ +// Name: escapeString +//------------------------------------------------------------------------------ +QString QJsonDocument::escapeString(const QString &s) const { + + QString r; + + Q_FOREACH(QChar ch, s) { + switch(ch.toLatin1()) { + case '\"': r.append("\\\""); break; + case '\\': r.append("\\\\"); break; + #if 0 + case '/': r.append("\\/"); break; + #endif + case '\b': r.append("\\b"); break; + case '\f': r.append("\\f"); break; + case '\n': r.append("\\n"); break; + case '\r': r.append("\\r"); break; + case '\t': r.append("\\t"); break; + default: + r += ch; + break; + } + } + + return r; +} + +//------------------------------------------------------------------------------ +// Name: toJson +//------------------------------------------------------------------------------ +QString QJsonDocument::toJson(const QJsonValue &v, JsonFormat format) const { + + QString b; + QTextStream ss(&b, QIODevice::WriteOnly | QIODevice::Text); + + switch(v.type()) { + case QJsonValue::Null: + ss << "null"; + break; + case QJsonValue::Bool: + ss << (v.toBool() ? "true" : "false"); + break; + case QJsonValue::Double: + { + double d = v.toDouble (); + if (qIsFinite(d)) { + // +2 to format to ensure the expected precision + ss << QByteArray::number(d, 'g', 15 + 2); // ::digits10 is 15 + } else { + ss << "null"; // +INF || -INF || NaN (see RFC4627#section2.4) + } + } + break; + case QJsonValue::String: + ss << '"' << escapeString(v.toString()) << '"'; + break; + case QJsonValue::Array: + { + const QJsonArray a = v.toArray(); + ss << "["; + if(!a.empty()) { + QJsonArray::const_iterator it = a.begin(); + QJsonArray::const_iterator e = a.end(); + + ss << toJson(*it++, format); + + for(;it != e; ++it) { + ss << ','; + ss << toJson(*it, format); + } + } + ss << "]"; + } + break; + case QJsonValue::Object: + { + const QJsonObject o = v.toObject(); + ss << "{"; + if(!o.empty()) { + QJsonObject::const_iterator it = o.begin(); + QJsonObject::const_iterator e = o.end(); + + ss << '"' << escapeString(it.key()) << "\": " << toJson(it.value(), format); + ++it; + for(;it != e; ++it) { + ss << ','; + ss << '"' << escapeString(it.key()) << "\": " << toJson(it.value(), format); + } + } + ss << "}"; + } + break; + case QJsonValue::Undefined: + Q_ASSERT(0); + break; + } + + return b; +} + +//------------------------------------------------------------------------------ +// Name: toJson +//------------------------------------------------------------------------------ +QByteArray QJsonDocument::toJson(JsonFormat format) const { + + Q_UNUSED(format); + + if(isArray()) { + QString s = toJson(array(), format); + return s.toUtf8(); + } + + if(isObject()) { + QString s = toJson(object(), format); + return s.toUtf8(); + } + + return QByteArray(); +} + +//------------------------------------------------------------------------------ +// Name: toVariant +//------------------------------------------------------------------------------ +QVariant QJsonDocument::toVariant() const { + + if(!isEmpty()) { + if(QJsonObject *const object = root_->toObject()) { + return object->toVariantMap(); + } + + if(QJsonArray *const array = root_->toArray()) { + return array->toVariantList(); + } + } + + return QVariant(); +} + +//------------------------------------------------------------------------------ +// Name: array +//------------------------------------------------------------------------------ +QJsonArray QJsonDocument::array() const { + + if(!isEmpty()) { + if(QJsonArray *const array = root_->toArray()) { + return *array; + } + } + + return QJsonArray(); +} + +//------------------------------------------------------------------------------ +// Name: object +//------------------------------------------------------------------------------ +QJsonObject QJsonDocument::object() const { + + if(!isEmpty()) { + if(QJsonObject *const object = root_->toObject()) { + return *object; + } + } + + return QJsonObject(); +} + +//------------------------------------------------------------------------------ +// Name: rawData +//------------------------------------------------------------------------------ +const char *QJsonDocument::rawData(int *size) const { + Q_UNUSED(size); + // TODO(eteran): implement this + return 0; +} + +//------------------------------------------------------------------------------ +// Name: fromBinaryData +//------------------------------------------------------------------------------ +QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidation validation) { + Q_UNUSED(data); + Q_UNUSED(validation); + + QJsonDocument doc; + // TODO(eteran): implement this + return doc; +} + +//------------------------------------------------------------------------------ +// Name: fromJson +//------------------------------------------------------------------------------ +QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error) { + QJsonDocument doc; + + const char *const begin = json.constData(); + const char *const end = begin + json.size(); + + QJsonParser parser(begin, end); + + doc.root_ = parser.parse(); + + if(error) { + *error = parser.state(); + } + + return doc; +} + +//------------------------------------------------------------------------------ +// Name: fromRawData +//------------------------------------------------------------------------------ +QJsonDocument QJsonDocument::fromRawData(const char *data, int size, DataValidation validation) { + + // data has to be aligned to a 4 byte boundary. + Q_ASSERT(!(reinterpret_cast(data) % 3)); + + return fromBinaryData(QByteArray::fromRawData(data, size), validation); +} + +//------------------------------------------------------------------------------ +// Name: fromVariant +//------------------------------------------------------------------------------ +QJsonDocument QJsonDocument::fromVariant(const QVariant &variant) { + + QJsonDocument doc; + + if (variant.type() == QVariant::Map) { + doc.setObject(QJsonObject::fromVariantMap(variant.toMap())); + } else if (variant.type() == QVariant::Hash) { + doc.setObject(QJsonObject::fromVariantHash(variant.toHash())); + } else if (variant.type() == QVariant::List) { + doc.setArray(QJsonArray::fromVariantList(variant.toList())); + } else if (variant.type() == QVariant::StringList) { + doc.setArray(QJsonArray::fromStringList(variant.toStringList())); + } + + return doc; +} + +//------------------------------------------------------------------------------ +// Name: swap +//------------------------------------------------------------------------------ +void QJsonDocument::swap(QJsonDocument &other) { + qSwap(root_, other.root_); +} + +#endif diff --git a/qjson4/QJsonDocument.h b/qjson4/QJsonDocument.h index 32ae72f..12e8fc7 100755 --- a/qjson4/QJsonDocument.h +++ b/qjson4/QJsonDocument.h @@ -1,103 +1,103 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef QJSON_DOCUMENT_H_ -#define QJSON_DOCUMENT_H_ - -#include - -#if QT_VERSION >= 0x050000 -#include -#else - -class QVariant; -class QByteArray; -class QTextStream; -class QJsonObject; -class QJsonValue; -class QJsonArray; -class QJsonParseError; -class QJsonRoot; - -class QJsonDocument { -public: - enum DataValidation { - Validate = 0, - BypassValidation = 1 - }; - - enum JsonFormat { - Indented, - Compact - }; - -public: - QJsonDocument(); - QJsonDocument(const QJsonObject &object); - QJsonDocument(const QJsonArray &array); - QJsonDocument(const QJsonDocument &other); - ~QJsonDocument(); - -public: - QJsonDocument &operator=(const QJsonDocument &other); - -public: - bool operator!=(const QJsonDocument &other) const; - bool operator==(const QJsonDocument &other) const; - -public: - bool isArray() const; - bool isEmpty() const; - bool isNull() const; - bool isObject() const; - -public: - QByteArray toBinaryData() const; - QByteArray toJson(JsonFormat format = Indented) const; - QVariant toVariant() const; - -public: - QJsonArray array() const; - QJsonObject object() const; - const char *rawData(int *size) const; - -public: - void setArray(const QJsonArray &array); - void setObject(const QJsonObject &object); - -public: - static QJsonDocument fromBinaryData(const QByteArray &data, DataValidation validation = Validate); - static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = 0); - static QJsonDocument fromRawData(const char *data, int size, DataValidation validation = Validate); - static QJsonDocument fromVariant(const QVariant &variant); - -private: - void setRoot(const QJsonRoot &root); - QString toJson(const QJsonValue &v, JsonFormat format) const; - QString escapeString(const QString &s) const; - -private: - void swap(QJsonDocument &other); - -private: - QJsonRoot *root_; -}; - -#endif - -#endif +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef QJSON_DOCUMENT_H_ +#define QJSON_DOCUMENT_H_ + +#include + +#if QT_VERSION >= 0x050000 +#include +#else + +class QVariant; +class QByteArray; +class QTextStream; +class QJsonObject; +class QJsonValue; +class QJsonArray; +class QJsonParseError; +class QJsonRoot; + +class QJsonDocument { +public: + enum DataValidation { + Validate = 0, + BypassValidation = 1 + }; + + enum JsonFormat { + Indented, + Compact + }; + +public: + QJsonDocument(); + QJsonDocument(const QJsonObject &object); + QJsonDocument(const QJsonArray &array); + QJsonDocument(const QJsonDocument &other); + ~QJsonDocument(); + +public: + QJsonDocument &operator=(const QJsonDocument &other); + +public: + bool operator!=(const QJsonDocument &other) const; + bool operator==(const QJsonDocument &other) const; + +public: + bool isArray() const; + bool isEmpty() const; + bool isNull() const; + bool isObject() const; + +public: + QByteArray toBinaryData() const; + QByteArray toJson(JsonFormat format = Indented) const; + QVariant toVariant() const; + +public: + QJsonArray array() const; + QJsonObject object() const; + const char *rawData(int *size) const; + +public: + void setArray(const QJsonArray &array); + void setObject(const QJsonObject &object); + +public: + static QJsonDocument fromBinaryData(const QByteArray &data, DataValidation validation = Validate); + static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = 0); + static QJsonDocument fromRawData(const char *data, int size, DataValidation validation = Validate); + static QJsonDocument fromVariant(const QVariant &variant); + +private: + void setRoot(const QJsonRoot &root); + QString toJson(const QJsonValue &v, JsonFormat format) const; + QString escapeString(const QString &s) const; + +private: + void swap(QJsonDocument &other); + +private: + QJsonRoot *root_; +}; + +#endif + +#endif diff --git a/qjson4/QJsonObject b/qjson4/QJsonObject index 2009be3..fb2126e 100755 --- a/qjson4/QJsonObject +++ b/qjson4/QJsonObject @@ -1 +1 @@ -#include "QJsonObject.h" +#include "QJsonObject.h" diff --git a/qjson4/QJsonObject.cpp b/qjson4/QJsonObject.cpp index 4a9e15a..55f8cf1 100755 --- a/qjson4/QJsonObject.cpp +++ b/qjson4/QJsonObject.cpp @@ -1,322 +1,322 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "QJsonObject.h" - -#if QT_VERSION < 0x050000 - -//------------------------------------------------------------------------------ -// Name: QJsonObject -//------------------------------------------------------------------------------ -QJsonObject::QJsonObject() { -} - -//------------------------------------------------------------------------------ -// Name: QJsonObject -//------------------------------------------------------------------------------ -QJsonObject::QJsonObject(const QJsonObject &other) : values_(other.values_) { -} - -#if __cplusplus >= 201103L -//------------------------------------------------------------------------------ -// Name: QJsonObject -//------------------------------------------------------------------------------ -QJsonObject::QJsonObject(std::initializer_list > args) { - for(const QPair &arg : args) { - values_.insert(arg.first, arg.second); - - } -} -#endif - -//------------------------------------------------------------------------------ -// Name: ~QJsonObject -//------------------------------------------------------------------------------ -QJsonObject::~QJsonObject() { -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonObject &QJsonObject::operator=(const QJsonObject &other) { - QJsonObject(other).swap(*this); - return *this; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonObject::iterator QJsonObject::begin() { - return values_.begin(); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonObject::const_iterator QJsonObject::begin() const { - return values_.begin(); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonObject::iterator QJsonObject::end() { - return values_.end(); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonObject::const_iterator QJsonObject::end() const { - return values_.end(); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonObject::const_iterator QJsonObject::constBegin() const { - return begin(); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonObject::const_iterator QJsonObject::constEnd() const { - return end(); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -int QJsonObject::count() const { - return size(); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -int QJsonObject::length() const { - return size(); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -int QJsonObject::size() const { - return values_.size(); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -bool QJsonObject::empty() const { - return values_.empty(); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -bool QJsonObject::isEmpty() const { - return empty(); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonObject::const_iterator QJsonObject::constFind(const QString &key) const { - return values_.find(key); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -bool QJsonObject::contains(const QString &key) const { - return values_.contains(key); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonObject::iterator QJsonObject::find(const QString &key) { - return values_.find(key); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonObject::const_iterator QJsonObject::find(const QString &key) const { - return values_.find(key); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonObject::iterator QJsonObject::erase(iterator it) { - return values_.erase(it); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonObject::iterator QJsonObject::insert(const QString &key, const QJsonValue &value) { - return values_.insert(key, value); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QStringList QJsonObject::keys() const { - return values_.keys(); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -void QJsonObject::remove(const QString &key) { - values_.remove(key); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonValue QJsonObject::take(const QString &key) { - return values_.take(key); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonValue QJsonObject::value(const QString &key) const { - return values_.value(key); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -bool QJsonObject::operator!=(const QJsonObject &other) const { - return values_ != other.values_; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -bool QJsonObject::operator==(const QJsonObject &other) const { - return values_ != other.values_; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonValue QJsonObject::operator[](const QString &key) const { - return values_[key]; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonValueRef QJsonObject::operator[](const QString &key) { - return QJsonValueRef(this, key); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QVariantMap QJsonObject::toVariantMap() const { - QVariantMap a; - for(const_iterator it = begin(); it != end(); ++it) { - a.insert(it.key(), it.value().toVariant()); - } - return a; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QVariantHash QJsonObject::toVariantHash() const { - QVariantHash a; - for(const_iterator it = begin(); it != end(); ++it) { - a.insert(it.key(), it.value().toVariant()); - } - return a; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonObject QJsonObject::fromVariantMap(const QVariantMap &map) { - QJsonObject o; - for(QVariantMap::const_iterator it = map.begin(); it != map.end(); ++it) { - o.insert(it.key(), QJsonValue::fromVariant(it.value())); - } - return o; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonObject QJsonObject::fromVariantHash(const QVariantHash &hash) { - QJsonObject o; - for(QVariantHash::const_iterator it = hash.begin(); it != hash.end(); ++it) { - o.insert(it.key(), QJsonValue::fromVariant(it.value())); - } - return o; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonRoot *QJsonObject::clone() const { - return new QJsonObject(*this); -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -const QJsonObject *QJsonObject::toObject() const { - return this; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonObject *QJsonObject::toObject() { - return this; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -QJsonArray *QJsonObject::toArray() { - return 0; -} - -//------------------------------------------------------------------------------ -// Name: -//------------------------------------------------------------------------------ -const QJsonArray *QJsonObject::toArray() const { - return 0; -} - -//------------------------------------------------------------------------------ -// Name: swap -//------------------------------------------------------------------------------ -void QJsonObject::swap(QJsonObject &other) { - qSwap(values_, other.values_); -} - -#endif +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "QJsonObject.h" + +#if QT_VERSION < 0x050000 + +//------------------------------------------------------------------------------ +// Name: QJsonObject +//------------------------------------------------------------------------------ +QJsonObject::QJsonObject() { +} + +//------------------------------------------------------------------------------ +// Name: QJsonObject +//------------------------------------------------------------------------------ +QJsonObject::QJsonObject(const QJsonObject &other) : values_(other.values_) { +} + +#if __cplusplus >= 201103L +//------------------------------------------------------------------------------ +// Name: QJsonObject +//------------------------------------------------------------------------------ +QJsonObject::QJsonObject(std::initializer_list > args) { + for(const QPair &arg : args) { + values_.insert(arg.first, arg.second); + + } +} +#endif + +//------------------------------------------------------------------------------ +// Name: ~QJsonObject +//------------------------------------------------------------------------------ +QJsonObject::~QJsonObject() { +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonObject &QJsonObject::operator=(const QJsonObject &other) { + QJsonObject(other).swap(*this); + return *this; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonObject::iterator QJsonObject::begin() { + return values_.begin(); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonObject::const_iterator QJsonObject::begin() const { + return values_.begin(); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonObject::iterator QJsonObject::end() { + return values_.end(); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonObject::const_iterator QJsonObject::end() const { + return values_.end(); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonObject::const_iterator QJsonObject::constBegin() const { + return begin(); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonObject::const_iterator QJsonObject::constEnd() const { + return end(); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +int QJsonObject::count() const { + return size(); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +int QJsonObject::length() const { + return size(); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +int QJsonObject::size() const { + return values_.size(); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +bool QJsonObject::empty() const { + return values_.empty(); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +bool QJsonObject::isEmpty() const { + return empty(); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonObject::const_iterator QJsonObject::constFind(const QString &key) const { + return values_.find(key); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +bool QJsonObject::contains(const QString &key) const { + return values_.contains(key); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonObject::iterator QJsonObject::find(const QString &key) { + return values_.find(key); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonObject::const_iterator QJsonObject::find(const QString &key) const { + return values_.find(key); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonObject::iterator QJsonObject::erase(iterator it) { + return values_.erase(it); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonObject::iterator QJsonObject::insert(const QString &key, const QJsonValue &value) { + return values_.insert(key, value); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QStringList QJsonObject::keys() const { + return values_.keys(); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +void QJsonObject::remove(const QString &key) { + values_.remove(key); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonValue QJsonObject::take(const QString &key) { + return values_.take(key); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonValue QJsonObject::value(const QString &key) const { + return values_.value(key); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +bool QJsonObject::operator!=(const QJsonObject &other) const { + return values_ != other.values_; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +bool QJsonObject::operator==(const QJsonObject &other) const { + return values_ != other.values_; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonValue QJsonObject::operator[](const QString &key) const { + return values_[key]; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonValueRef QJsonObject::operator[](const QString &key) { + return QJsonValueRef(this, key); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QVariantMap QJsonObject::toVariantMap() const { + QVariantMap a; + for(const_iterator it = begin(); it != end(); ++it) { + a.insert(it.key(), it.value().toVariant()); + } + return a; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QVariantHash QJsonObject::toVariantHash() const { + QVariantHash a; + for(const_iterator it = begin(); it != end(); ++it) { + a.insert(it.key(), it.value().toVariant()); + } + return a; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonObject QJsonObject::fromVariantMap(const QVariantMap &map) { + QJsonObject o; + for(QVariantMap::const_iterator it = map.begin(); it != map.end(); ++it) { + o.insert(it.key(), QJsonValue::fromVariant(it.value())); + } + return o; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonObject QJsonObject::fromVariantHash(const QVariantHash &hash) { + QJsonObject o; + for(QVariantHash::const_iterator it = hash.begin(); it != hash.end(); ++it) { + o.insert(it.key(), QJsonValue::fromVariant(it.value())); + } + return o; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonRoot *QJsonObject::clone() const { + return new QJsonObject(*this); +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +const QJsonObject *QJsonObject::toObject() const { + return this; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonObject *QJsonObject::toObject() { + return this; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +QJsonArray *QJsonObject::toArray() { + return 0; +} + +//------------------------------------------------------------------------------ +// Name: +//------------------------------------------------------------------------------ +const QJsonArray *QJsonObject::toArray() const { + return 0; +} + +//------------------------------------------------------------------------------ +// Name: swap +//------------------------------------------------------------------------------ +void QJsonObject::swap(QJsonObject &other) { + qSwap(values_, other.values_); +} + +#endif diff --git a/qjson4/QJsonObject.h b/qjson4/QJsonObject.h index 50a6ee5..ad657bc 100755 --- a/qjson4/QJsonObject.h +++ b/qjson4/QJsonObject.h @@ -1,121 +1,121 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef QJSON_OBJECT_H_ -#define QJSON_OBJECT_H_ - -#include - -#if QT_VERSION >= 0x050000 -#include -#else - -#include "QJsonRoot.h" -#include "QJsonValueRef.h" -#include "QJsonValue.h" -#include -#include -#include -#include - -class QJsonObject : public QJsonRoot { - friend class QJsonDocument; - friend class QJsonValue; - friend class QJsonValueRef; - friend class QJsonParser; -public: - // TODO(eteran): manually implement the map, for now we use QMap - // but the real thing has a custom implementation - // I guess for the purposes of less interdependancies? - // maybe so it's easier to forward declare the iterators? - - typedef QMap::const_iterator const_iterator; - typedef QMap::iterator iterator; - typedef const_iterator ConstIterator; - typedef iterator Iterator; - typedef QMap::key_type key_type; - typedef QMap::mapped_type mapped_type; - typedef QMap::size_type size_type; - -public: - QJsonObject(); -#if __cplusplus >= 201103L - QJsonObject(std::initializer_list > args); -#endif - QJsonObject(const QJsonObject &other); - ~QJsonObject(); - QJsonObject &operator=(const QJsonObject &other); - -public: - iterator begin(); - const_iterator begin() const; - iterator end(); - const_iterator end() const; - const_iterator constBegin() const; - const_iterator constEnd() const; - -public: - int count() const; - int length() const; - int size() const; - bool empty() const; - bool isEmpty() const; - -public: - const_iterator constFind(const QString &key) const; - bool contains(const QString &key) const; - iterator find(const QString &key); - const_iterator find(const QString &key) const; - -public: - iterator erase(iterator it); - iterator insert(const QString &key, const QJsonValue &value); - QStringList keys() const; - void remove(const QString &key); - QJsonValue take(const QString &key); - QJsonValue value(const QString &key) const; - bool operator!=(const QJsonObject &other) const; - bool operator==(const QJsonObject &other) const; - QJsonValue operator[](const QString &key) const; - QJsonValueRef operator[](const QString &key); - -public: - QVariantMap toVariantMap() const; - QVariantHash toVariantHash() const; - -public: - static QJsonObject fromVariantMap(const QVariantMap &map); - static QJsonObject fromVariantHash(const QVariantHash &hash); - -private: - virtual QJsonRoot *clone() const; - virtual QJsonArray *toArray(); - virtual QJsonObject *toObject(); - virtual const QJsonArray *toArray() const; - virtual const QJsonObject *toObject() const; - -private: - void swap(QJsonObject &other); - -private: - QMap values_; -}; - -#endif - -#endif +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef QJSON_OBJECT_H_ +#define QJSON_OBJECT_H_ + +#include + +#if QT_VERSION >= 0x050000 +#include +#else + +#include "QJsonRoot.h" +#include "QJsonValueRef.h" +#include "QJsonValue.h" +#include +#include +#include +#include + +class QJsonObject : public QJsonRoot { + friend class QJsonDocument; + friend class QJsonValue; + friend class QJsonValueRef; + friend class QJsonParser; +public: + // TODO(eteran): manually implement the map, for now we use QMap + // but the real thing has a custom implementation + // I guess for the purposes of less interdependancies? + // maybe so it's easier to forward declare the iterators? + + typedef QMap::const_iterator const_iterator; + typedef QMap::iterator iterator; + typedef const_iterator ConstIterator; + typedef iterator Iterator; + typedef QMap::key_type key_type; + typedef QMap::mapped_type mapped_type; + typedef QMap::size_type size_type; + +public: + QJsonObject(); +#if __cplusplus >= 201103L + QJsonObject(std::initializer_list > args); +#endif + QJsonObject(const QJsonObject &other); + ~QJsonObject(); + QJsonObject &operator=(const QJsonObject &other); + +public: + iterator begin(); + const_iterator begin() const; + iterator end(); + const_iterator end() const; + const_iterator constBegin() const; + const_iterator constEnd() const; + +public: + int count() const; + int length() const; + int size() const; + bool empty() const; + bool isEmpty() const; + +public: + const_iterator constFind(const QString &key) const; + bool contains(const QString &key) const; + iterator find(const QString &key); + const_iterator find(const QString &key) const; + +public: + iterator erase(iterator it); + iterator insert(const QString &key, const QJsonValue &value); + QStringList keys() const; + void remove(const QString &key); + QJsonValue take(const QString &key); + QJsonValue value(const QString &key) const; + bool operator!=(const QJsonObject &other) const; + bool operator==(const QJsonObject &other) const; + QJsonValue operator[](const QString &key) const; + QJsonValueRef operator[](const QString &key); + +public: + QVariantMap toVariantMap() const; + QVariantHash toVariantHash() const; + +public: + static QJsonObject fromVariantMap(const QVariantMap &map); + static QJsonObject fromVariantHash(const QVariantHash &hash); + +private: + virtual QJsonRoot *clone() const; + virtual QJsonArray *toArray(); + virtual QJsonObject *toObject(); + virtual const QJsonArray *toArray() const; + virtual const QJsonObject *toObject() const; + +private: + void swap(QJsonObject &other); + +private: + QMap values_; +}; + +#endif + +#endif diff --git a/qjson4/QJsonParseError b/qjson4/QJsonParseError index de177e3..7d30db8 100755 --- a/qjson4/QJsonParseError +++ b/qjson4/QJsonParseError @@ -1 +1 @@ -#include "QJsonParseError.h" +#include "QJsonParseError.h" diff --git a/qjson4/QJsonParseError.cpp b/qjson4/QJsonParseError.cpp index fa19f15..6bcfd98 100755 --- a/qjson4/QJsonParseError.cpp +++ b/qjson4/QJsonParseError.cpp @@ -1,64 +1,64 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "QJsonParseError.h" - -#if QT_VERSION < 0x050000 - -//------------------------------------------------------------------------------ -// Name: errorString -// Desc: The QJsonParseError class is used to report errors during JSON parsing. -//------------------------------------------------------------------------------ -QString QJsonParseError::errorString() const { - switch(error) { - case NoError: - return "No error occurred"; - case UnterminatedObject: - return "unterminated object"; - case MissingNameSeparator: - return "missing name separator"; - case UnterminatedArray: - return "unterminated array"; - case MissingValueSeparator: - return "missing value separator"; - case IllegalValue: - return "illegal value"; - case TerminationByNumber: - return "invalid termination by number"; - case IllegalNumber: - return "illegal number"; - case IllegalEscapeSequence: - return "illegal escape sequence"; - case IllegalUTF8String: - return "invalid UTF8 string"; - case UnterminatedString: - return "unterminated string"; - case MissingObject: - return "object is missing after a comma"; - case DeepNesting: - return "too deeply nested document"; - case DocumentTooLarge: - return "too large document"; - case GarbageAtEnd: - return "garbage at the end of the document"; - } - - return QString(); -} - -#endif +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "QJsonParseError.h" + +#if QT_VERSION < 0x050000 + +//------------------------------------------------------------------------------ +// Name: errorString +// Desc: The QJsonParseError class is used to report errors during JSON parsing. +//------------------------------------------------------------------------------ +QString QJsonParseError::errorString() const { + switch(error) { + case NoError: + return "No error occurred"; + case UnterminatedObject: + return "unterminated object"; + case MissingNameSeparator: + return "missing name separator"; + case UnterminatedArray: + return "unterminated array"; + case MissingValueSeparator: + return "missing value separator"; + case IllegalValue: + return "illegal value"; + case TerminationByNumber: + return "invalid termination by number"; + case IllegalNumber: + return "illegal number"; + case IllegalEscapeSequence: + return "illegal escape sequence"; + case IllegalUTF8String: + return "invalid UTF8 string"; + case UnterminatedString: + return "unterminated string"; + case MissingObject: + return "object is missing after a comma"; + case DeepNesting: + return "too deeply nested document"; + case DocumentTooLarge: + return "too large document"; + case GarbageAtEnd: + return "garbage at the end of the document"; + } + + return QString(); +} + +#endif diff --git a/qjson4/QJsonParseError.h b/qjson4/QJsonParseError.h index d2eda8b..b87d7aa 100755 --- a/qjson4/QJsonParseError.h +++ b/qjson4/QJsonParseError.h @@ -1,60 +1,60 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef QJSON_PARSE_ERROR_H_ -#define QJSON_PARSE_ERROR_H_ - -#include - -#if QT_VERSION >= 0x050000 -#include -#else - -#include - -class QJsonParseError { -public: - enum ParseError { - NoError = 0, - UnterminatedObject = 1, - MissingNameSeparator = 2, - UnterminatedArray = 3, - MissingValueSeparator = 4, - IllegalValue = 5, - TerminationByNumber = 6, - IllegalNumber = 7, - IllegalEscapeSequence = 8, - IllegalUTF8String = 9, - UnterminatedString = 10, - MissingObject = 11, - DeepNesting = 12, - DocumentTooLarge = 13, - GarbageAtEnd = 14 - }; - -public: - QString errorString() const; - -public: - ParseError error; - int offset; -}; - -#endif - -#endif +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef QJSON_PARSE_ERROR_H_ +#define QJSON_PARSE_ERROR_H_ + +#include + +#if QT_VERSION >= 0x050000 +#include +#else + +#include + +class QJsonParseError { +public: + enum ParseError { + NoError = 0, + UnterminatedObject = 1, + MissingNameSeparator = 2, + UnterminatedArray = 3, + MissingValueSeparator = 4, + IllegalValue = 5, + TerminationByNumber = 6, + IllegalNumber = 7, + IllegalEscapeSequence = 8, + IllegalUTF8String = 9, + UnterminatedString = 10, + MissingObject = 11, + DeepNesting = 12, + DocumentTooLarge = 13, + GarbageAtEnd = 14 + }; + +public: + QString errorString() const; + +public: + ParseError error; + int offset; +}; + +#endif + +#endif diff --git a/qjson4/QJsonParser.cpp b/qjson4/QJsonParser.cpp index 08c3c62..9b084f7 100755 --- a/qjson4/QJsonParser.cpp +++ b/qjson4/QJsonParser.cpp @@ -1,455 +1,455 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "QJsonParser.h" -#include "QJsonArray.h" -#include "QJsonObject.h" -#include "QJsonValue.h" - - -#if QT_VERSION < 0x050000 - -#include -#include -#include - -namespace { - -unsigned int to_hex(int ch) { - - static const int hexval[256] = { - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 - }; - - if(static_cast(ch) < 256) { - return hexval[static_cast(ch)]; - } else { - return 0; - } -} - -} - -//------------------------------------------------------------------------------ -// Name: QJsonParser -//------------------------------------------------------------------------------ -QJsonParser::QJsonParser(const char *begin, const char *end) : begin_(begin), end_(end), p_(begin) { - state_.error = QJsonParseError::NoError; - state_.offset = 0; -} - -//------------------------------------------------------------------------------ -// Name: parse -//------------------------------------------------------------------------------ -QJsonRoot *QJsonParser::parse() { - if(begin_ == end_) { - return 0; - } - - QJsonRoot *ret = 0; - - try { - const char ch = peek(); - switch(ch) { - case ArrayBegin: - ret = getArray(); - break; - case ObjectBegin: - ret = getObject(); - break; - default: - state_.error = QJsonParseError::IllegalValue; - state_.offset = p_ - begin_; - break; - } - } catch(const QJsonParseError &e) { - state_ = e; - } - - if(ret) { - // eat up trailing white space... - while(p_ != end_ && std::isspace(*p_)) { - ++p_; - } - - //detect trailing garbage - if(p_ != end_) { - state_.error = QJsonParseError::GarbageAtEnd; - state_.offset = p_ - begin_; - } - } - - return ret; -} - -//------------------------------------------------------------------------------ -// Name: peek -//------------------------------------------------------------------------------ -char QJsonParser::peek() { - // first eat up some whitespace - while(p_ != end_ && std::isspace(*p_)) { - ++p_; - } - - return *p_; -} - -//------------------------------------------------------------------------------ -// Name: getValue -//------------------------------------------------------------------------------ -QJsonValue QJsonParser::getValue() { - - switch(peek()) { - case ObjectBegin: - { - QScopedPointer obj(getObject()); - return QJsonValue(*obj); - } - case ArrayBegin: - { - QScopedPointer arr(getArray()); - return QJsonValue(*arr); - } - case Quote: - return QJsonValue(getString()); - case 't': - return getTrue(); - case 'f': - return getFalse(); - case 'n': - return getNull(); - default: - return getNumber(); - } - - throwError(QJsonParseError::MissingObject); - return QJsonValue(); -} - -//------------------------------------------------------------------------------ -// Name: getObject -//------------------------------------------------------------------------------ -QJsonObject *QJsonParser::getObject() { - - QScopedPointer obj(new QJsonObject); - - char tok = peek(); - if(tok != ObjectBegin) { - throwError(QJsonParseError::IllegalValue); - } - - ++p_; - - // handle empty object - tok = peek(); - if(peek() == ObjectEnd) { - ++p_; - } else { - - do { - QPair p = getPair(); - obj->values_.insert(p.first, p.second); - - tok = peek(); - ++p_; - - } while(tok == ValueSeparator); - } - - if(tok != ObjectEnd) { - throwError(QJsonParseError::UnterminatedObject); - } - - return obj.take(); -} - -//------------------------------------------------------------------------------ -// Name: getArray -//------------------------------------------------------------------------------ -QJsonArray *QJsonParser::getArray() { - - QScopedPointer arr(new QJsonArray); - - char tok = peek(); - - if(tok != ArrayBegin) { - throwError(QJsonParseError::IllegalValue); - } - - ++p_; - - // handle empty object - tok = peek(); - if(tok == ArrayEnd) { - ++p_; - } else { - do { - arr->values_.push_back(getValue()); - - tok = peek(); - ++p_; - - } while(tok == ValueSeparator); - } - - if(tok != ArrayEnd) { - throwError(QJsonParseError::MissingValueSeparator); - } - - return arr.take(); -} - -//------------------------------------------------------------------------------ -// Name: getPair -//------------------------------------------------------------------------------ -QPair QJsonParser::getPair() { - - QString key = getString(); - - if(peek() != NameSeparator) { - throwError(QJsonParseError::MissingNameSeparator); - } - ++p_; - - return qMakePair(key, getValue()); -} - -//------------------------------------------------------------------------------ -// Name: getString -//------------------------------------------------------------------------------ -QString QJsonParser::getString() { - - if(peek() != Quote) { - throwError(QJsonParseError::IllegalUTF8String); - } - ++p_; - - QByteArray s; - - while(p_ != end_ && *p_ != Quote && *p_ != '\n') { - if(*p_ == '\\') { - ++p_; - if(p_ != end_) { - switch(*p_) { - case '"': s.append('"'); break; - case '\\': s.append('\\'); break; - case '/': s.append('/'); break; - case 'b': s.append('\b'); break; - case 'f': s.append('\f'); break; - case 'n': s.append('\n'); break; - case 'r': s.append('\r'); break; - case 't': s.append('\t'); break; - case 'u': - { - - QString hexChar; - - // convert \uXXXX escape sequences to UTF-8 - char hex[4]; - if(p_ == end_) { throwError(QJsonParseError::IllegalEscapeSequence); } hex[0] = *++p_; - if(p_ == end_) { throwError(QJsonParseError::IllegalEscapeSequence); } hex[1] = *++p_; - if(p_ == end_) { throwError(QJsonParseError::IllegalEscapeSequence); } hex[2] = *++p_; - if(p_ == end_) { throwError(QJsonParseError::IllegalEscapeSequence); } hex[3] = *++p_; - - if(!std::isxdigit(hex[0])) throwError(QJsonParseError::IllegalUTF8String); - if(!std::isxdigit(hex[1])) throwError(QJsonParseError::IllegalUTF8String); - if(!std::isxdigit(hex[2])) throwError(QJsonParseError::IllegalUTF8String); - if(!std::isxdigit(hex[3])) throwError(QJsonParseError::IllegalUTF8String); - - quint16 w1 = 0; - quint16 w2 = 0; - - w1 |= (to_hex(hex[0]) << 12); - w1 |= (to_hex(hex[1]) << 8); - w1 |= (to_hex(hex[2]) << 4); - w1 |= (to_hex(hex[3])); - - hexChar.append(QChar(w1)); - - if((w1 & 0xfc00) == 0xdc00) { - throwError(QJsonParseError::IllegalUTF8String); - } - - if((w1 & 0xfc00) == 0xd800) { - // part of a surrogate pair - if(p_ == end_ || *++p_ != '\\') { throwError(QJsonParseError::IllegalEscapeSequence); } - if(p_ == end_ || *++p_ != 'u') { throwError(QJsonParseError::IllegalEscapeSequence); } - - // convert \uXXXX escape sequences to UTF-8 - if(p_ == end_) { throwError(QJsonParseError::IllegalEscapeSequence); } hex[0] = *++p_; - if(p_ == end_) { throwError(QJsonParseError::IllegalEscapeSequence); } hex[1] = *++p_; - if(p_ == end_) { throwError(QJsonParseError::IllegalEscapeSequence); } hex[2] = *++p_; - if(p_ == end_) { throwError(QJsonParseError::IllegalEscapeSequence); } hex[3] = *++p_; - - if(!std::isxdigit(hex[0])) throwError(QJsonParseError::IllegalUTF8String); - if(!std::isxdigit(hex[1])) throwError(QJsonParseError::IllegalUTF8String); - if(!std::isxdigit(hex[2])) throwError(QJsonParseError::IllegalUTF8String); - if(!std::isxdigit(hex[3])) throwError(QJsonParseError::IllegalUTF8String); - - w2 |= (to_hex(hex[0]) << 12); - w2 |= (to_hex(hex[1]) << 8); - w2 |= (to_hex(hex[2]) << 4); - w2 |= (to_hex(hex[3])); - - hexChar.append(QChar(w2)); - } - - s.append(hexChar.toUtf8()); - } - break; - - default: - s.append('\\'); - break; - } - } - } else { - s.append(*p_); - } - ++p_; - } - - if(*p_ != Quote || p_ == end_) { - throwError(QJsonParseError::UnterminatedString); - } - - ++p_; - - return QString::fromUtf8(s, s.size()); -} - -//------------------------------------------------------------------------------ -// Name: getNull -//------------------------------------------------------------------------------ -QJsonValue QJsonParser::getNull() { - if(p_ == end_ || *p_++ != 'n') { throwError(QJsonParseError::IllegalValue); } - if(p_ == end_ || *p_++ != 'u') { throwError(QJsonParseError::IllegalValue); } - if(p_ == end_ || *p_++ != 'l') { throwError(QJsonParseError::IllegalValue); } - if(p_ == end_ || *p_++ != 'l') { throwError(QJsonParseError::IllegalValue); } - - return QJsonValue(); -} - -//------------------------------------------------------------------------------ -// Name: getTrue -//------------------------------------------------------------------------------ -QJsonValue QJsonParser::getTrue() { - if(p_ == end_ || *p_++ != 't') { throwError(QJsonParseError::IllegalValue); } - if(p_ == end_ || *p_++ != 'r') { throwError(QJsonParseError::IllegalValue); } - if(p_ == end_ || *p_++ != 'u') { throwError(QJsonParseError::IllegalValue); } - if(p_ == end_ || *p_++ != 'e') { throwError(QJsonParseError::IllegalValue); } - - return QJsonValue(true); -} - -//------------------------------------------------------------------------------ -// Name: getFalse -//------------------------------------------------------------------------------ -QJsonValue QJsonParser::getFalse() { - if(p_ == end_ || *p_++ != 'f') { throwError(QJsonParseError::IllegalValue); } - if(p_ == end_ || *p_++ != 'a') { throwError(QJsonParseError::IllegalValue); } - if(p_ == end_ || *p_++ != 'l') { throwError(QJsonParseError::IllegalValue); } - if(p_ == end_ || *p_++ != 's') { throwError(QJsonParseError::IllegalValue); } - if(p_ == end_ || *p_++ != 'e') { throwError(QJsonParseError::IllegalValue); } - - return QJsonValue(false); -} - -//------------------------------------------------------------------------------ -// Name: getNumber -//------------------------------------------------------------------------------ -QJsonValue QJsonParser::getNumber() { - // JSON numbers fit the regex: -?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)? - - const char *const first = p_; - - // -? - if(p_ != end_ && *p_ == '-') { - ++p_; - } - - // (0|[1-9][0-9]*) - if(p_ != end_) { - if(*p_ >= '1' && *p_ <= '9') { - while(p_ != end_ && std::isdigit(*p_)) { - ++p_; - } - } else if(*p_ == '0') { - ++p_; - } else { - throwError(QJsonParseError::IllegalNumber); - } - } - - // (\.[0-9]+)? - if(p_ != end_ && *p_ == '.') { - ++p_; - if(!std::isdigit(*p_)) { - throwError(QJsonParseError::IllegalNumber); - } - - while(p_ != end_ && std::isdigit(*p_)) { - ++p_; - } - } - - // ([eE][+-]?[0-9]+)? - if(p_ != end_ && (*p_ == 'e' || *p_ == 'E')) { - ++p_; - if(p_ != end_ && (*p_ == '+' || *p_ == '-')) { - ++p_; - } - if(!std::isdigit(*p_)) { - throwError(QJsonParseError::IllegalNumber); - } - while(p_ != end_ && std::isdigit(*p_)) { - ++p_; - } - } - - if(p_ == end_) { - throwError(QJsonParseError::TerminationByNumber); - } - - return QJsonValue(QByteArray::fromRawData(first, p_ - first).toDouble()); -} - -//------------------------------------------------------------------------------ -// Name: state -//------------------------------------------------------------------------------ -QJsonParseError QJsonParser::state() const { - return state_; -} - -//------------------------------------------------------------------------------ -// Name: throwError -//------------------------------------------------------------------------------ -void QJsonParser::throwError(QJsonParseError::ParseError e) { - QJsonParseError err; - err.error = e; - err.offset = p_ - begin_; - throw err; -} - -#endif +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "QJsonParser.h" +#include "QJsonArray.h" +#include "QJsonObject.h" +#include "QJsonValue.h" + + +#if QT_VERSION < 0x050000 + +#include +#include +#include + +namespace { + +unsigned int to_hex(int ch) { + + static const int hexval[256] = { + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 + }; + + if(static_cast(ch) < 256) { + return hexval[static_cast(ch)]; + } else { + return 0; + } +} + +} + +//------------------------------------------------------------------------------ +// Name: QJsonParser +//------------------------------------------------------------------------------ +QJsonParser::QJsonParser(const char *begin, const char *end) : begin_(begin), end_(end), p_(begin) { + state_.error = QJsonParseError::NoError; + state_.offset = 0; +} + +//------------------------------------------------------------------------------ +// Name: parse +//------------------------------------------------------------------------------ +QJsonRoot *QJsonParser::parse() { + if(begin_ == end_) { + return 0; + } + + QJsonRoot *ret = 0; + + try { + const char ch = peek(); + switch(ch) { + case ArrayBegin: + ret = getArray(); + break; + case ObjectBegin: + ret = getObject(); + break; + default: + state_.error = QJsonParseError::IllegalValue; + state_.offset = p_ - begin_; + break; + } + } catch(const QJsonParseError &e) { + state_ = e; + } + + if(ret) { + // eat up trailing white space... + while(p_ != end_ && std::isspace(*p_)) { + ++p_; + } + + //detect trailing garbage + if(p_ != end_) { + state_.error = QJsonParseError::GarbageAtEnd; + state_.offset = p_ - begin_; + } + } + + return ret; +} + +//------------------------------------------------------------------------------ +// Name: peek +//------------------------------------------------------------------------------ +char QJsonParser::peek() { + // first eat up some whitespace + while(p_ != end_ && std::isspace(*p_)) { + ++p_; + } + + return *p_; +} + +//------------------------------------------------------------------------------ +// Name: getValue +//------------------------------------------------------------------------------ +QJsonValue QJsonParser::getValue() { + + switch(peek()) { + case ObjectBegin: + { + QScopedPointer obj(getObject()); + return QJsonValue(*obj); + } + case ArrayBegin: + { + QScopedPointer arr(getArray()); + return QJsonValue(*arr); + } + case Quote: + return QJsonValue(getString()); + case 't': + return getTrue(); + case 'f': + return getFalse(); + case 'n': + return getNull(); + default: + return getNumber(); + } + + throwError(QJsonParseError::MissingObject); + return QJsonValue(); +} + +//------------------------------------------------------------------------------ +// Name: getObject +//------------------------------------------------------------------------------ +QJsonObject *QJsonParser::getObject() { + + QScopedPointer obj(new QJsonObject); + + char tok = peek(); + if(tok != ObjectBegin) { + throwError(QJsonParseError::IllegalValue); + } + + ++p_; + + // handle empty object + tok = peek(); + if(peek() == ObjectEnd) { + ++p_; + } else { + + do { + QPair p = getPair(); + obj->values_.insert(p.first, p.second); + + tok = peek(); + ++p_; + + } while(tok == ValueSeparator); + } + + if(tok != ObjectEnd) { + throwError(QJsonParseError::UnterminatedObject); + } + + return obj.take(); +} + +//------------------------------------------------------------------------------ +// Name: getArray +//------------------------------------------------------------------------------ +QJsonArray *QJsonParser::getArray() { + + QScopedPointer arr(new QJsonArray); + + char tok = peek(); + + if(tok != ArrayBegin) { + throwError(QJsonParseError::IllegalValue); + } + + ++p_; + + // handle empty object + tok = peek(); + if(tok == ArrayEnd) { + ++p_; + } else { + do { + arr->values_.push_back(getValue()); + + tok = peek(); + ++p_; + + } while(tok == ValueSeparator); + } + + if(tok != ArrayEnd) { + throwError(QJsonParseError::MissingValueSeparator); + } + + return arr.take(); +} + +//------------------------------------------------------------------------------ +// Name: getPair +//------------------------------------------------------------------------------ +QPair QJsonParser::getPair() { + + QString key = getString(); + + if(peek() != NameSeparator) { + throwError(QJsonParseError::MissingNameSeparator); + } + ++p_; + + return qMakePair(key, getValue()); +} + +//------------------------------------------------------------------------------ +// Name: getString +//------------------------------------------------------------------------------ +QString QJsonParser::getString() { + + if(peek() != Quote) { + throwError(QJsonParseError::IllegalUTF8String); + } + ++p_; + + QByteArray s; + + while(p_ != end_ && *p_ != Quote && *p_ != '\n') { + if(*p_ == '\\') { + ++p_; + if(p_ != end_) { + switch(*p_) { + case '"': s.append('"'); break; + case '\\': s.append('\\'); break; + case '/': s.append('/'); break; + case 'b': s.append('\b'); break; + case 'f': s.append('\f'); break; + case 'n': s.append('\n'); break; + case 'r': s.append('\r'); break; + case 't': s.append('\t'); break; + case 'u': + { + + QString hexChar; + + // convert \uXXXX escape sequences to UTF-8 + char hex[4]; + if(p_ == end_) { throwError(QJsonParseError::IllegalEscapeSequence); } hex[0] = *++p_; + if(p_ == end_) { throwError(QJsonParseError::IllegalEscapeSequence); } hex[1] = *++p_; + if(p_ == end_) { throwError(QJsonParseError::IllegalEscapeSequence); } hex[2] = *++p_; + if(p_ == end_) { throwError(QJsonParseError::IllegalEscapeSequence); } hex[3] = *++p_; + + if(!std::isxdigit(hex[0])) throwError(QJsonParseError::IllegalUTF8String); + if(!std::isxdigit(hex[1])) throwError(QJsonParseError::IllegalUTF8String); + if(!std::isxdigit(hex[2])) throwError(QJsonParseError::IllegalUTF8String); + if(!std::isxdigit(hex[3])) throwError(QJsonParseError::IllegalUTF8String); + + quint16 w1 = 0; + quint16 w2 = 0; + + w1 |= (to_hex(hex[0]) << 12); + w1 |= (to_hex(hex[1]) << 8); + w1 |= (to_hex(hex[2]) << 4); + w1 |= (to_hex(hex[3])); + + hexChar.append(QChar(w1)); + + if((w1 & 0xfc00) == 0xdc00) { + throwError(QJsonParseError::IllegalUTF8String); + } + + if((w1 & 0xfc00) == 0xd800) { + // part of a surrogate pair + if(p_ == end_ || *++p_ != '\\') { throwError(QJsonParseError::IllegalEscapeSequence); } + if(p_ == end_ || *++p_ != 'u') { throwError(QJsonParseError::IllegalEscapeSequence); } + + // convert \uXXXX escape sequences to UTF-8 + if(p_ == end_) { throwError(QJsonParseError::IllegalEscapeSequence); } hex[0] = *++p_; + if(p_ == end_) { throwError(QJsonParseError::IllegalEscapeSequence); } hex[1] = *++p_; + if(p_ == end_) { throwError(QJsonParseError::IllegalEscapeSequence); } hex[2] = *++p_; + if(p_ == end_) { throwError(QJsonParseError::IllegalEscapeSequence); } hex[3] = *++p_; + + if(!std::isxdigit(hex[0])) throwError(QJsonParseError::IllegalUTF8String); + if(!std::isxdigit(hex[1])) throwError(QJsonParseError::IllegalUTF8String); + if(!std::isxdigit(hex[2])) throwError(QJsonParseError::IllegalUTF8String); + if(!std::isxdigit(hex[3])) throwError(QJsonParseError::IllegalUTF8String); + + w2 |= (to_hex(hex[0]) << 12); + w2 |= (to_hex(hex[1]) << 8); + w2 |= (to_hex(hex[2]) << 4); + w2 |= (to_hex(hex[3])); + + hexChar.append(QChar(w2)); + } + + s.append(hexChar.toUtf8()); + } + break; + + default: + s.append('\\'); + break; + } + } + } else { + s.append(*p_); + } + ++p_; + } + + if(*p_ != Quote || p_ == end_) { + throwError(QJsonParseError::UnterminatedString); + } + + ++p_; + + return QString::fromUtf8(s, s.size()); +} + +//------------------------------------------------------------------------------ +// Name: getNull +//------------------------------------------------------------------------------ +QJsonValue QJsonParser::getNull() { + if(p_ == end_ || *p_++ != 'n') { throwError(QJsonParseError::IllegalValue); } + if(p_ == end_ || *p_++ != 'u') { throwError(QJsonParseError::IllegalValue); } + if(p_ == end_ || *p_++ != 'l') { throwError(QJsonParseError::IllegalValue); } + if(p_ == end_ || *p_++ != 'l') { throwError(QJsonParseError::IllegalValue); } + + return QJsonValue(); +} + +//------------------------------------------------------------------------------ +// Name: getTrue +//------------------------------------------------------------------------------ +QJsonValue QJsonParser::getTrue() { + if(p_ == end_ || *p_++ != 't') { throwError(QJsonParseError::IllegalValue); } + if(p_ == end_ || *p_++ != 'r') { throwError(QJsonParseError::IllegalValue); } + if(p_ == end_ || *p_++ != 'u') { throwError(QJsonParseError::IllegalValue); } + if(p_ == end_ || *p_++ != 'e') { throwError(QJsonParseError::IllegalValue); } + + return QJsonValue(true); +} + +//------------------------------------------------------------------------------ +// Name: getFalse +//------------------------------------------------------------------------------ +QJsonValue QJsonParser::getFalse() { + if(p_ == end_ || *p_++ != 'f') { throwError(QJsonParseError::IllegalValue); } + if(p_ == end_ || *p_++ != 'a') { throwError(QJsonParseError::IllegalValue); } + if(p_ == end_ || *p_++ != 'l') { throwError(QJsonParseError::IllegalValue); } + if(p_ == end_ || *p_++ != 's') { throwError(QJsonParseError::IllegalValue); } + if(p_ == end_ || *p_++ != 'e') { throwError(QJsonParseError::IllegalValue); } + + return QJsonValue(false); +} + +//------------------------------------------------------------------------------ +// Name: getNumber +//------------------------------------------------------------------------------ +QJsonValue QJsonParser::getNumber() { + // JSON numbers fit the regex: -?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)? + + const char *const first = p_; + + // -? + if(p_ != end_ && *p_ == '-') { + ++p_; + } + + // (0|[1-9][0-9]*) + if(p_ != end_) { + if(*p_ >= '1' && *p_ <= '9') { + while(p_ != end_ && std::isdigit(*p_)) { + ++p_; + } + } else if(*p_ == '0') { + ++p_; + } else { + throwError(QJsonParseError::IllegalNumber); + } + } + + // (\.[0-9]+)? + if(p_ != end_ && *p_ == '.') { + ++p_; + if(!std::isdigit(*p_)) { + throwError(QJsonParseError::IllegalNumber); + } + + while(p_ != end_ && std::isdigit(*p_)) { + ++p_; + } + } + + // ([eE][+-]?[0-9]+)? + if(p_ != end_ && (*p_ == 'e' || *p_ == 'E')) { + ++p_; + if(p_ != end_ && (*p_ == '+' || *p_ == '-')) { + ++p_; + } + if(!std::isdigit(*p_)) { + throwError(QJsonParseError::IllegalNumber); + } + while(p_ != end_ && std::isdigit(*p_)) { + ++p_; + } + } + + if(p_ == end_) { + throwError(QJsonParseError::TerminationByNumber); + } + + return QJsonValue(QByteArray::fromRawData(first, p_ - first).toDouble()); +} + +//------------------------------------------------------------------------------ +// Name: state +//------------------------------------------------------------------------------ +QJsonParseError QJsonParser::state() const { + return state_; +} + +//------------------------------------------------------------------------------ +// Name: throwError +//------------------------------------------------------------------------------ +void QJsonParser::throwError(QJsonParseError::ParseError e) { + QJsonParseError err; + err.error = e; + err.offset = p_ - begin_; + throw err; +} + +#endif diff --git a/qjson4/QJsonParser.h b/qjson4/QJsonParser.h index 0686838..d54a0d9 100755 --- a/qjson4/QJsonParser.h +++ b/qjson4/QJsonParser.h @@ -1,81 +1,81 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -// NOTE: this is not part of the "public" Qt API, so using this class directly -// is not recomended - -#ifndef QJSON_PARSER_H_ -#define QJSON_PARSER_H_ - -#include - -#if QT_VERSION < 0x050000 - -#include "QJsonParseError.h" -#include -class QJsonRoot; -class QJsonObject; -class QJsonArray; -class QJsonValue; - -class QJsonParser { - friend class QJsonDocument; - -public: - QJsonParser(const char *begin, const char *end); - -public: - QJsonRoot *parse(); - -public: - QJsonParseError state() const; - -private: - static const char ArrayBegin = '['; - static const char ArrayEnd = ']'; - static const char NameSeparator = ':'; - static const char ValueSeparator = ','; - static const char ObjectBegin = '{'; - static const char ObjectEnd = '}'; - static const char Quote = '"'; - -private: - char peek(); - QJsonObject *getObject(); - QJsonArray *getArray(); - QJsonValue getValue(); - QString getString(); - QJsonValue getTrue(); - QJsonValue getFalse(); - QJsonValue getNull(); - QJsonValue getNumber(); - QPair getPair(); - -private: - void throwError(QJsonParseError::ParseError e); - -private: - QJsonParseError state_; - const char *const begin_; - const char *const end_; - const char * p_; -}; - -#endif - -#endif +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +// NOTE: this is not part of the "public" Qt API, so using this class directly +// is not recomended + +#ifndef QJSON_PARSER_H_ +#define QJSON_PARSER_H_ + +#include + +#if QT_VERSION < 0x050000 + +#include "QJsonParseError.h" +#include +class QJsonRoot; +class QJsonObject; +class QJsonArray; +class QJsonValue; + +class QJsonParser { + friend class QJsonDocument; + +public: + QJsonParser(const char *begin, const char *end); + +public: + QJsonRoot *parse(); + +public: + QJsonParseError state() const; + +private: + static const char ArrayBegin = '['; + static const char ArrayEnd = ']'; + static const char NameSeparator = ':'; + static const char ValueSeparator = ','; + static const char ObjectBegin = '{'; + static const char ObjectEnd = '}'; + static const char Quote = '"'; + +private: + char peek(); + QJsonObject *getObject(); + QJsonArray *getArray(); + QJsonValue getValue(); + QString getString(); + QJsonValue getTrue(); + QJsonValue getFalse(); + QJsonValue getNull(); + QJsonValue getNumber(); + QPair getPair(); + +private: + void throwError(QJsonParseError::ParseError e); + +private: + QJsonParseError state_; + const char *const begin_; + const char *const end_; + const char * p_; +}; + +#endif + +#endif diff --git a/qjson4/QJsonRoot b/qjson4/QJsonRoot index 32bf3f0..fbcaca1 100755 --- a/qjson4/QJsonRoot +++ b/qjson4/QJsonRoot @@ -1 +1 @@ -#include "QJsonRoot.h" +#include "QJsonRoot.h" diff --git a/qjson4/QJsonRoot.h b/qjson4/QJsonRoot.h index a7e0729..77b9751 100755 --- a/qjson4/QJsonRoot.h +++ b/qjson4/QJsonRoot.h @@ -1,45 +1,45 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef QJSON_ROOT_H_ -#define QJSON_ROOT_H_ - -#include - -#if QT_VERSION < 0x050000 - -class QJsonObject; -class QJsonArray; - -class QJsonRoot { -public: - virtual ~QJsonRoot() {}; - -public: - virtual QJsonRoot *clone() const = 0; - -public: - virtual QJsonArray *toArray() = 0; - virtual QJsonObject *toObject() = 0; - virtual const QJsonArray *toArray() const = 0; - virtual const QJsonObject *toObject() const = 0; -}; - -#endif - -#endif +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef QJSON_ROOT_H_ +#define QJSON_ROOT_H_ + +#include + +#if QT_VERSION < 0x050000 + +class QJsonObject; +class QJsonArray; + +class QJsonRoot { +public: + virtual ~QJsonRoot() {}; + +public: + virtual QJsonRoot *clone() const = 0; + +public: + virtual QJsonArray *toArray() = 0; + virtual QJsonObject *toObject() = 0; + virtual const QJsonArray *toArray() const = 0; + virtual const QJsonObject *toObject() const = 0; +}; + +#endif + +#endif diff --git a/qjson4/QJsonValue b/qjson4/QJsonValue index d4ca2b1..eb1b6fe 100755 --- a/qjson4/QJsonValue +++ b/qjson4/QJsonValue @@ -1 +1 @@ -#include "QJsonValue.h" +#include "QJsonValue.h" diff --git a/qjson4/QJsonValue.cpp b/qjson4/QJsonValue.cpp index 8365571..68bf87f 100755 --- a/qjson4/QJsonValue.cpp +++ b/qjson4/QJsonValue.cpp @@ -1,391 +1,391 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "QJsonValue.h" -#include "QJsonArray.h" -#include "QJsonObject.h" - -#if QT_VERSION < 0x050000 -#include -#include - -//------------------------------------------------------------------------------ -// Name: QJsonValue -//------------------------------------------------------------------------------ -QJsonValue::QJsonValue(Type type) : type_(type) { -} - -//------------------------------------------------------------------------------ -// Name: QJsonValue -//------------------------------------------------------------------------------ -QJsonValue::QJsonValue(bool b) : type_(Bool) { - value_.b = b; -} - -//------------------------------------------------------------------------------ -// Name: QJsonValue -//------------------------------------------------------------------------------ -QJsonValue::QJsonValue(double n) : type_(Double) { - value_.n = n; -} - -//------------------------------------------------------------------------------ -// Name: QJsonValue -//------------------------------------------------------------------------------ -QJsonValue::QJsonValue(const QString &s) : type_(String) { - value_.s = new QString(s); -} - -//------------------------------------------------------------------------------ -// Name: QJsonValue -//------------------------------------------------------------------------------ -QJsonValue::QJsonValue(QLatin1String s) : type_(String) { - value_.s = new QString(s); -} - -#ifndef QT_NO_CAST_FROM_ASCII -//------------------------------------------------------------------------------ -// Name: QJsonValue -//------------------------------------------------------------------------------ -QJsonValue::QJsonValue(const char *s) : type_(String) { - value_.s = new QString(QString::fromUtf8(s)); -} -#endif - -//------------------------------------------------------------------------------ -// Name: QJsonValue -//------------------------------------------------------------------------------ -QJsonValue::QJsonValue(const QJsonArray &a) : type_(Array) { - value_.r = a.clone(); -} - -//------------------------------------------------------------------------------ -// Name: QJsonValue -//------------------------------------------------------------------------------ -QJsonValue::QJsonValue(const QJsonObject &o) : type_(Object) { - value_.r = o.clone(); -} - -//------------------------------------------------------------------------------ -// Name: QJsonValue -//------------------------------------------------------------------------------ -QJsonValue::QJsonValue(int n) : type_(Double) { - value_.n = n; -} - -//------------------------------------------------------------------------------ -// Name: QJsonValue -//------------------------------------------------------------------------------ -QJsonValue::QJsonValue(qint64 n) : type_(Double) { - value_.n = n; -} - -//------------------------------------------------------------------------------ -// Name: QJsonValue -//------------------------------------------------------------------------------ -QJsonValue::QJsonValue(const QJsonValue &other) : type_(other.type_) { - - switch(other.type_) { - case Bool: - value_.b = other.value_.b; - break; - case Double: - value_.n = other.value_.n; - break; - case String: - value_.s = new QString(*other.value_.s); - break; - case Array: - case Object: - value_.r = other.value_.r->clone(); - break; - case Undefined: - case Null: - value_ = other.value_; - break; - } -} - -//------------------------------------------------------------------------------ -// Name: ~QJsonValue -//------------------------------------------------------------------------------ -QJsonValue::~QJsonValue() { - switch(type_) { - case Null: - case Bool: - case Double: - case Undefined: - break; - case String: - delete value_.s; - break; - case Object: - case Array: - delete value_.r; - break; - } -} - -//------------------------------------------------------------------------------ -// Name: operator= -//------------------------------------------------------------------------------ -QJsonValue &QJsonValue::operator=(const QJsonValue &other) { - QJsonValue(other).swap(*this); - return *this; -} - -//------------------------------------------------------------------------------ -// Name: operator!= -//------------------------------------------------------------------------------ -bool QJsonValue::operator!=(const QJsonValue &other) const { - return !(*this == other); -} - -//------------------------------------------------------------------------------ -// Name: operator== -//------------------------------------------------------------------------------ -bool QJsonValue::operator==(const QJsonValue &other) const { - if(type_ == other.type_) { - switch(type_) { - case Null: - return true; - case Bool: - return value_.b == other.value_.b; - case Double: - return value_.n == other.value_.n; - case Undefined: - return true; - case String: - return *value_.s == *other.value_.s; - case Array: - return *(value_.r->toArray()) == *(other.value_.r->toArray()); - case Object: - return *(value_.r->toObject()) == *(other.value_.r->toObject()); - } - } - return false; -} - -//------------------------------------------------------------------------------ -// Name: isArray -//------------------------------------------------------------------------------ -bool QJsonValue::isArray() const { - return type_ == Array; -} - -//------------------------------------------------------------------------------ -// Name: isBool -//------------------------------------------------------------------------------ -bool QJsonValue::isBool() const { - return type_ == Bool; -} - -//------------------------------------------------------------------------------ -// Name: isDouble -//------------------------------------------------------------------------------ -bool QJsonValue::isDouble() const { - return type_ == Double; -} - -//------------------------------------------------------------------------------ -// Name: isNull -//------------------------------------------------------------------------------ -bool QJsonValue::isNull() const { - return type_ == Null; -} - -//------------------------------------------------------------------------------ -// Name: isObject -//------------------------------------------------------------------------------ -bool QJsonValue::isObject() const { - return type_ == Object; -} - -//------------------------------------------------------------------------------ -// Name: isString -//------------------------------------------------------------------------------ -bool QJsonValue::isString() const { - return type_ == String; -} - -//------------------------------------------------------------------------------ -// Name: isUndefined -//------------------------------------------------------------------------------ -bool QJsonValue::isUndefined() const { - return type_ == Undefined; -} - -//------------------------------------------------------------------------------ -// Name: type -//------------------------------------------------------------------------------ -QJsonValue::Type QJsonValue::type() const { - return type_; -} - -//------------------------------------------------------------------------------ -// Name: toArray -//------------------------------------------------------------------------------ -QJsonArray QJsonValue::toArray(const QJsonArray &defaultValue) const { - if(isArray()) { - return *(value_.r->toArray()); - } - - return defaultValue; -} - -//------------------------------------------------------------------------------ -// Name: toArray -//------------------------------------------------------------------------------ -QJsonArray QJsonValue::toArray() const { - return toArray(QJsonArray()); -} - -//------------------------------------------------------------------------------ -// Name: toBool -//------------------------------------------------------------------------------ -bool QJsonValue::toBool(bool defaultValue) const { - if(isBool()) { - return value_.b; - } - - return defaultValue; -} - -//------------------------------------------------------------------------------ -// Name: toDouble -//------------------------------------------------------------------------------ -double QJsonValue::toDouble(double defaultValue) const { - if(isDouble()) { - return value_.n; - } - - return defaultValue; -} - -//------------------------------------------------------------------------------ -// Name: toInt -//------------------------------------------------------------------------------ -int QJsonValue::toInt(int defaultValue) const { - if(isDouble() && qFloor(value_.n) == value_.n) { - return value_.n; - } - - return defaultValue; -} - -//------------------------------------------------------------------------------ -// Name: toObject -//------------------------------------------------------------------------------ -QJsonObject QJsonValue::toObject(const QJsonObject &defaultValue) const { - if(isObject()) { - return *(value_.r->toObject()); - } - - return defaultValue; -} - -//------------------------------------------------------------------------------ -// Name: toObject -//------------------------------------------------------------------------------ -QJsonObject QJsonValue::toObject() const { - return toObject(QJsonObject()); -} - -//------------------------------------------------------------------------------ -// Name: toString -//------------------------------------------------------------------------------ -QString QJsonValue::toString(const QString &defaultValue) const { - - if(isString()) { - return *value_.s; - } - - return defaultValue; -} - -//------------------------------------------------------------------------------ -// Name: toVariant -//------------------------------------------------------------------------------ -QVariant QJsonValue::toVariant() const { - switch(type_) { - case Null: - return QVariant(); - case Bool: - return QVariant::fromValue(value_.b); - case Double: - return QVariant::fromValue(value_.n); - case String: - return QVariant::fromValue(*value_.s); - case Array: - return value_.r->toArray()->toVariantList(); - case Object: - return value_.r->toObject()->toVariantMap(); - case Undefined: - return QVariant(); - } - - return QVariant(); -} - -//------------------------------------------------------------------------------ -// Name: fromVariant -//------------------------------------------------------------------------------ -QJsonValue QJsonValue::fromVariant(const QVariant &variant) { - if(variant.isNull()) { - return QJsonValue(Null); - } - - switch(variant.type()) { - case QVariant::Bool: - return QJsonValue(variant.toBool()); - case QVariant::Int: - return QJsonValue(variant.toInt()); - case QVariant::Double: - case QVariant::LongLong: - case QVariant::ULongLong: - case QVariant::UInt: - return QJsonValue(variant.toDouble()); - case QVariant::String: - return QJsonValue(variant.toString()); - case QVariant::List: - return QJsonArray::fromVariantList(variant.toList()); - case QVariant::StringList: - return QJsonArray::fromStringList(variant.toStringList()); - case QVariant::Map: - return QJsonObject::fromVariantMap(variant.toMap()); - default: - const QString s = variant.toString(); - if(!s.isEmpty()) { - return QJsonValue(s); - } - break; - } - - return QJsonValue(Null); - -} - -//------------------------------------------------------------------------------ -// Name: swap -//------------------------------------------------------------------------------ -void QJsonValue::swap(QJsonValue &other) { - qSwap(type_, other.type_); - qSwap(value_, other.value_); -} - -#endif +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "QJsonValue.h" +#include "QJsonArray.h" +#include "QJsonObject.h" + +#if QT_VERSION < 0x050000 +#include +#include + +//------------------------------------------------------------------------------ +// Name: QJsonValue +//------------------------------------------------------------------------------ +QJsonValue::QJsonValue(Type type) : type_(type) { +} + +//------------------------------------------------------------------------------ +// Name: QJsonValue +//------------------------------------------------------------------------------ +QJsonValue::QJsonValue(bool b) : type_(Bool) { + value_.b = b; +} + +//------------------------------------------------------------------------------ +// Name: QJsonValue +//------------------------------------------------------------------------------ +QJsonValue::QJsonValue(double n) : type_(Double) { + value_.n = n; +} + +//------------------------------------------------------------------------------ +// Name: QJsonValue +//------------------------------------------------------------------------------ +QJsonValue::QJsonValue(const QString &s) : type_(String) { + value_.s = new QString(s); +} + +//------------------------------------------------------------------------------ +// Name: QJsonValue +//------------------------------------------------------------------------------ +QJsonValue::QJsonValue(QLatin1String s) : type_(String) { + value_.s = new QString(s); +} + +#ifndef QT_NO_CAST_FROM_ASCII +//------------------------------------------------------------------------------ +// Name: QJsonValue +//------------------------------------------------------------------------------ +QJsonValue::QJsonValue(const char *s) : type_(String) { + value_.s = new QString(QString::fromUtf8(s)); +} +#endif + +//------------------------------------------------------------------------------ +// Name: QJsonValue +//------------------------------------------------------------------------------ +QJsonValue::QJsonValue(const QJsonArray &a) : type_(Array) { + value_.r = a.clone(); +} + +//------------------------------------------------------------------------------ +// Name: QJsonValue +//------------------------------------------------------------------------------ +QJsonValue::QJsonValue(const QJsonObject &o) : type_(Object) { + value_.r = o.clone(); +} + +//------------------------------------------------------------------------------ +// Name: QJsonValue +//------------------------------------------------------------------------------ +QJsonValue::QJsonValue(int n) : type_(Double) { + value_.n = n; +} + +//------------------------------------------------------------------------------ +// Name: QJsonValue +//------------------------------------------------------------------------------ +QJsonValue::QJsonValue(qint64 n) : type_(Double) { + value_.n = n; +} + +//------------------------------------------------------------------------------ +// Name: QJsonValue +//------------------------------------------------------------------------------ +QJsonValue::QJsonValue(const QJsonValue &other) : type_(other.type_) { + + switch(other.type_) { + case Bool: + value_.b = other.value_.b; + break; + case Double: + value_.n = other.value_.n; + break; + case String: + value_.s = new QString(*other.value_.s); + break; + case Array: + case Object: + value_.r = other.value_.r->clone(); + break; + case Undefined: + case Null: + value_ = other.value_; + break; + } +} + +//------------------------------------------------------------------------------ +// Name: ~QJsonValue +//------------------------------------------------------------------------------ +QJsonValue::~QJsonValue() { + switch(type_) { + case Null: + case Bool: + case Double: + case Undefined: + break; + case String: + delete value_.s; + break; + case Object: + case Array: + delete value_.r; + break; + } +} + +//------------------------------------------------------------------------------ +// Name: operator= +//------------------------------------------------------------------------------ +QJsonValue &QJsonValue::operator=(const QJsonValue &other) { + QJsonValue(other).swap(*this); + return *this; +} + +//------------------------------------------------------------------------------ +// Name: operator!= +//------------------------------------------------------------------------------ +bool QJsonValue::operator!=(const QJsonValue &other) const { + return !(*this == other); +} + +//------------------------------------------------------------------------------ +// Name: operator== +//------------------------------------------------------------------------------ +bool QJsonValue::operator==(const QJsonValue &other) const { + if(type_ == other.type_) { + switch(type_) { + case Null: + return true; + case Bool: + return value_.b == other.value_.b; + case Double: + return value_.n == other.value_.n; + case Undefined: + return true; + case String: + return *value_.s == *other.value_.s; + case Array: + return *(value_.r->toArray()) == *(other.value_.r->toArray()); + case Object: + return *(value_.r->toObject()) == *(other.value_.r->toObject()); + } + } + return false; +} + +//------------------------------------------------------------------------------ +// Name: isArray +//------------------------------------------------------------------------------ +bool QJsonValue::isArray() const { + return type_ == Array; +} + +//------------------------------------------------------------------------------ +// Name: isBool +//------------------------------------------------------------------------------ +bool QJsonValue::isBool() const { + return type_ == Bool; +} + +//------------------------------------------------------------------------------ +// Name: isDouble +//------------------------------------------------------------------------------ +bool QJsonValue::isDouble() const { + return type_ == Double; +} + +//------------------------------------------------------------------------------ +// Name: isNull +//------------------------------------------------------------------------------ +bool QJsonValue::isNull() const { + return type_ == Null; +} + +//------------------------------------------------------------------------------ +// Name: isObject +//------------------------------------------------------------------------------ +bool QJsonValue::isObject() const { + return type_ == Object; +} + +//------------------------------------------------------------------------------ +// Name: isString +//------------------------------------------------------------------------------ +bool QJsonValue::isString() const { + return type_ == String; +} + +//------------------------------------------------------------------------------ +// Name: isUndefined +//------------------------------------------------------------------------------ +bool QJsonValue::isUndefined() const { + return type_ == Undefined; +} + +//------------------------------------------------------------------------------ +// Name: type +//------------------------------------------------------------------------------ +QJsonValue::Type QJsonValue::type() const { + return type_; +} + +//------------------------------------------------------------------------------ +// Name: toArray +//------------------------------------------------------------------------------ +QJsonArray QJsonValue::toArray(const QJsonArray &defaultValue) const { + if(isArray()) { + return *(value_.r->toArray()); + } + + return defaultValue; +} + +//------------------------------------------------------------------------------ +// Name: toArray +//------------------------------------------------------------------------------ +QJsonArray QJsonValue::toArray() const { + return toArray(QJsonArray()); +} + +//------------------------------------------------------------------------------ +// Name: toBool +//------------------------------------------------------------------------------ +bool QJsonValue::toBool(bool defaultValue) const { + if(isBool()) { + return value_.b; + } + + return defaultValue; +} + +//------------------------------------------------------------------------------ +// Name: toDouble +//------------------------------------------------------------------------------ +double QJsonValue::toDouble(double defaultValue) const { + if(isDouble()) { + return value_.n; + } + + return defaultValue; +} + +//------------------------------------------------------------------------------ +// Name: toInt +//------------------------------------------------------------------------------ +int QJsonValue::toInt(int defaultValue) const { + if(isDouble() && qFloor(value_.n) == value_.n) { + return value_.n; + } + + return defaultValue; +} + +//------------------------------------------------------------------------------ +// Name: toObject +//------------------------------------------------------------------------------ +QJsonObject QJsonValue::toObject(const QJsonObject &defaultValue) const { + if(isObject()) { + return *(value_.r->toObject()); + } + + return defaultValue; +} + +//------------------------------------------------------------------------------ +// Name: toObject +//------------------------------------------------------------------------------ +QJsonObject QJsonValue::toObject() const { + return toObject(QJsonObject()); +} + +//------------------------------------------------------------------------------ +// Name: toString +//------------------------------------------------------------------------------ +QString QJsonValue::toString(const QString &defaultValue) const { + + if(isString()) { + return *value_.s; + } + + return defaultValue; +} + +//------------------------------------------------------------------------------ +// Name: toVariant +//------------------------------------------------------------------------------ +QVariant QJsonValue::toVariant() const { + switch(type_) { + case Null: + return QVariant(); + case Bool: + return QVariant::fromValue(value_.b); + case Double: + return QVariant::fromValue(value_.n); + case String: + return QVariant::fromValue(*value_.s); + case Array: + return value_.r->toArray()->toVariantList(); + case Object: + return value_.r->toObject()->toVariantMap(); + case Undefined: + return QVariant(); + } + + return QVariant(); +} + +//------------------------------------------------------------------------------ +// Name: fromVariant +//------------------------------------------------------------------------------ +QJsonValue QJsonValue::fromVariant(const QVariant &variant) { + if(variant.isNull()) { + return QJsonValue(Null); + } + + switch(variant.type()) { + case QVariant::Bool: + return QJsonValue(variant.toBool()); + case QVariant::Int: + return QJsonValue(variant.toInt()); + case QVariant::Double: + case QVariant::LongLong: + case QVariant::ULongLong: + case QVariant::UInt: + return QJsonValue(variant.toDouble()); + case QVariant::String: + return QJsonValue(variant.toString()); + case QVariant::List: + return QJsonArray::fromVariantList(variant.toList()); + case QVariant::StringList: + return QJsonArray::fromStringList(variant.toStringList()); + case QVariant::Map: + return QJsonObject::fromVariantMap(variant.toMap()); + default: + const QString s = variant.toString(); + if(!s.isEmpty()) { + return QJsonValue(s); + } + break; + } + + return QJsonValue(Null); + +} + +//------------------------------------------------------------------------------ +// Name: swap +//------------------------------------------------------------------------------ +void QJsonValue::swap(QJsonValue &other) { + qSwap(type_, other.type_); + qSwap(value_, other.value_); +} + +#endif diff --git a/qjson4/QJsonValue.h b/qjson4/QJsonValue.h index dec14aa..bf32898 100755 --- a/qjson4/QJsonValue.h +++ b/qjson4/QJsonValue.h @@ -1,120 +1,120 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef QJSON_VALUE_H_ -#define QJSON_VALUE_H_ - -#include - -#if QT_VERSION >= 0x050000 -#include -#else - -class QString; - -#include - -class QJsonRoot; -class QJsonArray; -class QJsonObject; - -class QJsonValue { -public: - enum Type { - Null = 0x0, - Bool = 0x1, - Double = 0x2, - String = 0x3, - Array = 0x4, - Object = 0x5, - Undefined = 0x80 - }; - -public: - QJsonValue(Type type = Null); - QJsonValue(bool b); - QJsonValue(double n); - QJsonValue(int n); - QJsonValue(qint64 n); - QJsonValue(const QString &s); - QJsonValue(QLatin1String s); -#ifndef QT_NO_CAST_FROM_ASCII - QJsonValue(const char *s); -#endif - QJsonValue(const QJsonArray &a); - QJsonValue(const QJsonObject &o); - QJsonValue(const QJsonValue &other); - - ~QJsonValue(); - -private: - // to protect against incorrect usage due to passing a const char * - QJsonValue(const void *); - -public: - QJsonValue &operator=(const QJsonValue &other); - -public: - bool operator!=(const QJsonValue &other) const; - bool operator==(const QJsonValue &other) const; - -public: - bool isArray() const; - bool isBool() const; - bool isDouble() const; - bool isNull() const; - bool isObject() const; - bool isString() const; - bool isUndefined() const; - -public: - QJsonArray toArray(const QJsonArray &defaultValue) const; - QJsonArray toArray() const; - bool toBool(bool defaultValue = false) const; - double toDouble(double defaultValue = 0) const; - int toInt(int defaultValue = 0) const; - QJsonObject toObject(const QJsonObject &defaultValue) const; - QJsonObject toObject() const; - QString toString(const QString &defaultValue = QString()) const; - QVariant toVariant() const; - -public: - Type type() const; - -public: - static QJsonValue fromVariant(const QVariant &variant); - -private: - void swap(QJsonValue &other); - -private: - Type type_; - - union ValueType { - bool b; - double n; - QString *s; - QJsonRoot *r; // OJsonObject or QJsonArray - }; - - ValueType value_; -}; - -#endif - -#endif +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef QJSON_VALUE_H_ +#define QJSON_VALUE_H_ + +#include + +#if QT_VERSION >= 0x050000 +#include +#else + +class QString; + +#include + +class QJsonRoot; +class QJsonArray; +class QJsonObject; + +class QJsonValue { +public: + enum Type { + Null = 0x0, + Bool = 0x1, + Double = 0x2, + String = 0x3, + Array = 0x4, + Object = 0x5, + Undefined = 0x80 + }; + +public: + QJsonValue(Type type = Null); + QJsonValue(bool b); + QJsonValue(double n); + QJsonValue(int n); + QJsonValue(qint64 n); + QJsonValue(const QString &s); + QJsonValue(QLatin1String s); +#ifndef QT_NO_CAST_FROM_ASCII + QJsonValue(const char *s); +#endif + QJsonValue(const QJsonArray &a); + QJsonValue(const QJsonObject &o); + QJsonValue(const QJsonValue &other); + + ~QJsonValue(); + +private: + // to protect against incorrect usage due to passing a const char * + QJsonValue(const void *); + +public: + QJsonValue &operator=(const QJsonValue &other); + +public: + bool operator!=(const QJsonValue &other) const; + bool operator==(const QJsonValue &other) const; + +public: + bool isArray() const; + bool isBool() const; + bool isDouble() const; + bool isNull() const; + bool isObject() const; + bool isString() const; + bool isUndefined() const; + +public: + QJsonArray toArray(const QJsonArray &defaultValue) const; + QJsonArray toArray() const; + bool toBool(bool defaultValue = false) const; + double toDouble(double defaultValue = 0) const; + int toInt(int defaultValue = 0) const; + QJsonObject toObject(const QJsonObject &defaultValue) const; + QJsonObject toObject() const; + QString toString(const QString &defaultValue = QString()) const; + QVariant toVariant() const; + +public: + Type type() const; + +public: + static QJsonValue fromVariant(const QVariant &variant); + +private: + void swap(QJsonValue &other); + +private: + Type type_; + + union ValueType { + bool b; + double n; + QString *s; + QJsonRoot *r; // OJsonObject or QJsonArray + }; + + ValueType value_; +}; + +#endif + +#endif diff --git a/qjson4/QJsonValueRef b/qjson4/QJsonValueRef index f106170..f3b6811 100755 --- a/qjson4/QJsonValueRef +++ b/qjson4/QJsonValueRef @@ -1 +1 @@ -#include "QJsonValueRef.h" +#include "QJsonValueRef.h" diff --git a/qjson4/QJsonValueRef.cpp b/qjson4/QJsonValueRef.cpp index 386d056..7d67ef4 100755 --- a/qjson4/QJsonValueRef.cpp +++ b/qjson4/QJsonValueRef.cpp @@ -1,228 +1,228 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "QJsonValueRef.h" - -#if QT_VERSION < 0x050000 - -#include "QJsonArray.h" -#include "QJsonObject.h" - -//------------------------------------------------------------------------------ -// Name: -// Desc: -//------------------------------------------------------------------------------ -QJsonValueRef::QJsonValueRef(QJsonArray *array, int idx) : p_(array), index_(idx) { -} - -//------------------------------------------------------------------------------ -// Name: -// Desc: -//------------------------------------------------------------------------------ -QJsonValueRef::QJsonValueRef(QJsonObject *object, const QString &key) : p_(object), index_(0), key_(key) { -} - -//------------------------------------------------------------------------------ -// Name: -// Desc: -//------------------------------------------------------------------------------ -QJsonValueRef::operator QJsonValue() const { - return toValue(); -} - -//------------------------------------------------------------------------------ -// Name: -// Desc: -//------------------------------------------------------------------------------ -QJsonValueRef &QJsonValueRef::operator=(const QJsonValue &val) { - - if(QJsonObject *const o = p_->toObject()) { - o->values_[key_] = val; - } else if(QJsonArray *const a = p_->toArray()) { - a->values_[index_] = val; - } - return *this; -} - -//------------------------------------------------------------------------------ -// Name: -// Desc: -//------------------------------------------------------------------------------ -QJsonValueRef &QJsonValueRef::operator=(const QJsonValueRef &ref) { - - if(QJsonObject *const o = p_->toObject()) { - o->values_[key_] = ref; - } else if(QJsonArray *const a = p_->toArray()) { - a->values_[index_] = ref; - } - return *this; -} - -//------------------------------------------------------------------------------ -// Name: type -// Desc: -//------------------------------------------------------------------------------ -QJsonValue::Type QJsonValueRef::type() const { - return toValue().type(); -} - -//------------------------------------------------------------------------------ -// Name: isNull -// Desc: -//------------------------------------------------------------------------------ -bool QJsonValueRef::isNull() const { - return toValue().isNull(); -} - -//------------------------------------------------------------------------------ -// Name: isBool -// Desc: -//------------------------------------------------------------------------------ -bool QJsonValueRef::isBool() const { - return toValue().isBool(); -} - -//------------------------------------------------------------------------------ -// Name: isDouble -// Desc: -//------------------------------------------------------------------------------ -bool QJsonValueRef::isDouble() const { - return toValue().isDouble(); -} - -//------------------------------------------------------------------------------ -// Name: isString -// Desc: -//------------------------------------------------------------------------------ -bool QJsonValueRef::isString() const { - return toValue().isString(); -} - -//------------------------------------------------------------------------------ -// Name: isArray -// Desc: -//------------------------------------------------------------------------------ -bool QJsonValueRef::isArray() const { - return toValue().isArray(); -} - -//------------------------------------------------------------------------------ -// Name: isObject -// Desc: -//------------------------------------------------------------------------------ -bool QJsonValueRef::isObject() const { - return toValue().isObject(); -} - -//------------------------------------------------------------------------------ -// Name: isUndefined -// Desc: -//------------------------------------------------------------------------------ -bool QJsonValueRef::isUndefined() const { - return toValue().isUndefined(); -} - -//------------------------------------------------------------------------------ -// Name: toBool -// Desc: -//------------------------------------------------------------------------------ -bool QJsonValueRef::toBool() const { - return toValue().toBool(); -} - -//------------------------------------------------------------------------------ -// Name: toDouble -// Desc: -//------------------------------------------------------------------------------ -double QJsonValueRef::toDouble() const { - return toValue().toDouble(); -} - -//------------------------------------------------------------------------------ -// Name: toInt -// Desc: -//------------------------------------------------------------------------------ -int QJsonValueRef::toInt(int defaultValue) const { - return toValue().toInt(defaultValue); -} - -//------------------------------------------------------------------------------ -// Name: toString -// Desc: -//------------------------------------------------------------------------------ -QString QJsonValueRef::toString() const { - return toValue().toString(); -} - -//------------------------------------------------------------------------------ -// Name: toArray -// Desc: -//------------------------------------------------------------------------------ -QJsonArray QJsonValueRef::toArray() const { - return toValue().toArray(); -} - -//------------------------------------------------------------------------------ -// Name: toObject -// Desc: -//------------------------------------------------------------------------------ -QJsonObject QJsonValueRef::toObject() const { - return toValue().toObject(); -} - -//------------------------------------------------------------------------------ -// Name: operator== -// Desc: -//------------------------------------------------------------------------------ -bool QJsonValueRef::operator==(const QJsonValue &other) const { - return toValue() == other; -} - -//------------------------------------------------------------------------------ -// Name: operator!= -// Desc: -//------------------------------------------------------------------------------ -bool QJsonValueRef::operator!=(const QJsonValue &other) const { - return toValue() != other; -} - -//------------------------------------------------------------------------------ -// Name: toValue -// Desc: -//------------------------------------------------------------------------------ -QJsonValue QJsonValueRef::toValue() const { - if(QJsonObject *const o = p_->toObject()) { - return o->values_[key_]; - } else if(QJsonArray *const a = p_->toArray()) { - return a->values_[index_]; - } - - return QJsonValue(); -} - -//------------------------------------------------------------------------------ -// Name: swap -// Desc: -//------------------------------------------------------------------------------ -void QJsonValueRef::swap(QJsonValueRef &other) { - qSwap(p_, other.p_); - qSwap(key_, other.key_); - qSwap(index_, other.index_); -} - -#endif +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "QJsonValueRef.h" + +#if QT_VERSION < 0x050000 + +#include "QJsonArray.h" +#include "QJsonObject.h" + +//------------------------------------------------------------------------------ +// Name: +// Desc: +//------------------------------------------------------------------------------ +QJsonValueRef::QJsonValueRef(QJsonArray *array, int idx) : p_(array), index_(idx) { +} + +//------------------------------------------------------------------------------ +// Name: +// Desc: +//------------------------------------------------------------------------------ +QJsonValueRef::QJsonValueRef(QJsonObject *object, const QString &key) : p_(object), index_(0), key_(key) { +} + +//------------------------------------------------------------------------------ +// Name: +// Desc: +//------------------------------------------------------------------------------ +QJsonValueRef::operator QJsonValue() const { + return toValue(); +} + +//------------------------------------------------------------------------------ +// Name: +// Desc: +//------------------------------------------------------------------------------ +QJsonValueRef &QJsonValueRef::operator=(const QJsonValue &val) { + + if(QJsonObject *const o = p_->toObject()) { + o->values_[key_] = val; + } else if(QJsonArray *const a = p_->toArray()) { + a->values_[index_] = val; + } + return *this; +} + +//------------------------------------------------------------------------------ +// Name: +// Desc: +//------------------------------------------------------------------------------ +QJsonValueRef &QJsonValueRef::operator=(const QJsonValueRef &ref) { + + if(QJsonObject *const o = p_->toObject()) { + o->values_[key_] = ref; + } else if(QJsonArray *const a = p_->toArray()) { + a->values_[index_] = ref; + } + return *this; +} + +//------------------------------------------------------------------------------ +// Name: type +// Desc: +//------------------------------------------------------------------------------ +QJsonValue::Type QJsonValueRef::type() const { + return toValue().type(); +} + +//------------------------------------------------------------------------------ +// Name: isNull +// Desc: +//------------------------------------------------------------------------------ +bool QJsonValueRef::isNull() const { + return toValue().isNull(); +} + +//------------------------------------------------------------------------------ +// Name: isBool +// Desc: +//------------------------------------------------------------------------------ +bool QJsonValueRef::isBool() const { + return toValue().isBool(); +} + +//------------------------------------------------------------------------------ +// Name: isDouble +// Desc: +//------------------------------------------------------------------------------ +bool QJsonValueRef::isDouble() const { + return toValue().isDouble(); +} + +//------------------------------------------------------------------------------ +// Name: isString +// Desc: +//------------------------------------------------------------------------------ +bool QJsonValueRef::isString() const { + return toValue().isString(); +} + +//------------------------------------------------------------------------------ +// Name: isArray +// Desc: +//------------------------------------------------------------------------------ +bool QJsonValueRef::isArray() const { + return toValue().isArray(); +} + +//------------------------------------------------------------------------------ +// Name: isObject +// Desc: +//------------------------------------------------------------------------------ +bool QJsonValueRef::isObject() const { + return toValue().isObject(); +} + +//------------------------------------------------------------------------------ +// Name: isUndefined +// Desc: +//------------------------------------------------------------------------------ +bool QJsonValueRef::isUndefined() const { + return toValue().isUndefined(); +} + +//------------------------------------------------------------------------------ +// Name: toBool +// Desc: +//------------------------------------------------------------------------------ +bool QJsonValueRef::toBool() const { + return toValue().toBool(); +} + +//------------------------------------------------------------------------------ +// Name: toDouble +// Desc: +//------------------------------------------------------------------------------ +double QJsonValueRef::toDouble() const { + return toValue().toDouble(); +} + +//------------------------------------------------------------------------------ +// Name: toInt +// Desc: +//------------------------------------------------------------------------------ +int QJsonValueRef::toInt(int defaultValue) const { + return toValue().toInt(defaultValue); +} + +//------------------------------------------------------------------------------ +// Name: toString +// Desc: +//------------------------------------------------------------------------------ +QString QJsonValueRef::toString() const { + return toValue().toString(); +} + +//------------------------------------------------------------------------------ +// Name: toArray +// Desc: +//------------------------------------------------------------------------------ +QJsonArray QJsonValueRef::toArray() const { + return toValue().toArray(); +} + +//------------------------------------------------------------------------------ +// Name: toObject +// Desc: +//------------------------------------------------------------------------------ +QJsonObject QJsonValueRef::toObject() const { + return toValue().toObject(); +} + +//------------------------------------------------------------------------------ +// Name: operator== +// Desc: +//------------------------------------------------------------------------------ +bool QJsonValueRef::operator==(const QJsonValue &other) const { + return toValue() == other; +} + +//------------------------------------------------------------------------------ +// Name: operator!= +// Desc: +//------------------------------------------------------------------------------ +bool QJsonValueRef::operator!=(const QJsonValue &other) const { + return toValue() != other; +} + +//------------------------------------------------------------------------------ +// Name: toValue +// Desc: +//------------------------------------------------------------------------------ +QJsonValue QJsonValueRef::toValue() const { + if(QJsonObject *const o = p_->toObject()) { + return o->values_[key_]; + } else if(QJsonArray *const a = p_->toArray()) { + return a->values_[index_]; + } + + return QJsonValue(); +} + +//------------------------------------------------------------------------------ +// Name: swap +// Desc: +//------------------------------------------------------------------------------ +void QJsonValueRef::swap(QJsonValueRef &other) { + qSwap(p_, other.p_); + qSwap(key_, other.key_); + qSwap(index_, other.index_); +} + +#endif diff --git a/qjson4/QJsonValueRef.h b/qjson4/QJsonValueRef.h index 292f37b..567c68a 100755 --- a/qjson4/QJsonValueRef.h +++ b/qjson4/QJsonValueRef.h @@ -1,79 +1,79 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef QJSON_VALUEREF_H_ -#define QJSON_VALUEREF_H_ - -#include - -#if QT_VERSION >= 0x050000 -#include -#else - -#include "QJsonValue.h" -class QJsonRoot; - -class QJsonValueRef { -public: - QJsonValueRef(QJsonArray *array, int idx); - - // slight variant from official APIs implementation - QJsonValueRef(QJsonObject *object, const QString &key); - -public: - operator QJsonValue() const; - -public: - QJsonValueRef &operator=(const QJsonValue &val); - QJsonValueRef &operator=(const QJsonValueRef &val); - -public: - QJsonValue::Type type() const; - bool isNull() const; - bool isBool() const; - bool isDouble() const; - bool isString() const; - bool isArray() const; - bool isObject() const; - bool isUndefined() const; - -public: - bool toBool() const; - double toDouble() const; - QString toString() const; - QJsonArray toArray() const; - QJsonObject toObject() const; - int toInt(int defaultValue = 0) const; - -public: - bool operator==(const QJsonValue &other) const; - bool operator!=(const QJsonValue &other) const; - -private: - QJsonValue toValue() const; - void swap(QJsonValueRef &other); - -private: - QJsonRoot *p_; - int index_; - QString key_; -}; - -#endif - -#endif +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef QJSON_VALUEREF_H_ +#define QJSON_VALUEREF_H_ + +#include + +#if QT_VERSION >= 0x050000 +#include +#else + +#include "QJsonValue.h" +class QJsonRoot; + +class QJsonValueRef { +public: + QJsonValueRef(QJsonArray *array, int idx); + + // slight variant from official APIs implementation + QJsonValueRef(QJsonObject *object, const QString &key); + +public: + operator QJsonValue() const; + +public: + QJsonValueRef &operator=(const QJsonValue &val); + QJsonValueRef &operator=(const QJsonValueRef &val); + +public: + QJsonValue::Type type() const; + bool isNull() const; + bool isBool() const; + bool isDouble() const; + bool isString() const; + bool isArray() const; + bool isObject() const; + bool isUndefined() const; + +public: + bool toBool() const; + double toDouble() const; + QString toString() const; + QJsonArray toArray() const; + QJsonObject toObject() const; + int toInt(int defaultValue = 0) const; + +public: + bool operator==(const QJsonValue &other) const; + bool operator!=(const QJsonValue &other) const; + +private: + QJsonValue toValue() const; + void swap(QJsonValueRef &other); + +private: + QJsonRoot *p_; + int index_; + QString key_; +}; + +#endif + +#endif diff --git a/res/960x536.png b/res/960x536.png index 0feac2dc3f360a6262056aca768a6491a083e00e..6196065a0e29eba946336f809392fd55a7e93c17 100644 GIT binary patch literal 19532 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
$ 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 literal 48000 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.png avatararea.png avatarareaimport.png + mappreview.jpg + pointmaker-8.png + pointmaker-16.png + pointmaker-24.png + pointmaker-32.png global.de.ini diff --git a/res/app.rc b/res/app.rc index 4fbbc6e..2a09572 100755 --- a/res/app.rc +++ b/res/app.rc @@ -1,36 +1,36 @@ -IDI_ICON1 ICON DISCARDABLE "5sync.ico" - -#define RT_MANIFEST 24 -#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 -CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gta5view.exe.manifest" - -#include - -VS_VERSION_INFO VERSIONINFO -FILEVERSION 1, 4, 4, 0 -PRODUCTVERSION 1, 4, 4, 0 -FILEFLAGSMASK 0x3fL -FILEFLAGS 0 -FILEOS VOS_NT_WINDOWS32 -FILETYPE VFT_APP -FILESUBTYPE VFT2_UNKNOWN -BEGIN - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0409, 1200 - END - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "Syping" - VALUE "FileDescription", "gta5view\0" - VALUE "FileVersion", "1.4.4\0" - VALUE "InternalName", "gta5view\0" - VALUE "LegalCopyright", "Copyright © 2016-2017 Syping\0" - VALUE "OriginalFilename", "gta5view.exe\0" - VALUE "ProductName", "gta5view\0" - VALUE "ProductVersion", "1.4.4\0" - END - END -END +IDI_ICON1 ICON DISCARDABLE "5sync.ico" + +#define RT_MANIFEST 24 +#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gta5view.exe.manifest" + +#include + +VS_VERSION_INFO VERSIONINFO +FILEVERSION 1, 5, 0, 0 +PRODUCTVERSION 1, 5, 0, 0 +FILEFLAGSMASK 0x3fL +FILEFLAGS 0 +FILEOS VOS_NT_WINDOWS32 +FILETYPE VFT_APP +FILESUBTYPE VFT2_UNKNOWN +BEGIN + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1200 + END + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "Syping" + VALUE "FileDescription", "gta5view\0" + VALUE "FileVersion", "1.5.0\0" + VALUE "InternalName", "gta5view\0" + VALUE "LegalCopyright", "Copyright © 2016-2017 Syping\0" + VALUE "OriginalFilename", "gta5view.exe\0" + VALUE "ProductName", "gta5view\0" + VALUE "ProductVersion", "1.5.0\0" + END + END +END diff --git a/res/global.de.ini b/res/global.de.ini index 5b2d94f..fea6010 100755 --- a/res/global.de.ini +++ b/res/global.de.ini @@ -1,102 +1,102 @@ -[Global] -AIRP="Internationaler Flughafen von LS" -ALAMO="Alamosee" -ALTA="Alta" -ARMYB="Fort Zancudo" -BANNING="Banning" -BAYTRE="Baytree Canyon" -BEACH="Vespucci Beach" -BHAMCA="Banham Canyon" -BRADP="Braddock-Pass" -BRADT="Braddock-Tunnel" -BURTON="Burton" -CALAFB="Calafia-Brücke" -CANNY="Raton Canyon" -CCREAK="Cassidy Creek" -CHAMH="Chamberlain Hills" -CHIL="Vinewood Hills" -CHU="Chumash" -CMSW="Chiliad-Mountain-Naturschutzgebiet" -COSI="Vorstädte" -CYPRE="Cypress Flats" -DAVIS="Davis" -DELBE="Del Perro Beach" -DELPE="Del Perro" -DELSOL="La Puerta" -DESRT="Grand-Senora-Wüste" -DOWNT="Innenstadt" -DTVINE="Vinewood Mitte" -EAST_V="East Vinewood" -EBURO="El Burro Heights" -ECLIPS="Eclipse" -ELGORL="Leuchtturm El Gordo" -ELSANT="East Los Santos" -ELYSIAN="Elysian Island" -GALFISH="Galilee" -GALLI="Galileo-Park" -GOLF="GWC und Golfclub" -GRAPES="Grapeseed" -GREATC="Great Chaparral" -HARMO="Harmony" -HAWICK="Hawick" -HEART="Heart Attacks Beach" -HORS="Vinewood-Rennbahn" -HUD_MG_TRI_ALA="Alamosee" -HUD_MG_TRI_VES="Vespucci" -HUMLAB="Humane Labs and Research" -JAIL="Bolingbroke-Strafanstalt" -KOREAT="Little Seoul" -LACT="Land-Act-Stausee" -LAGO="Lago Zancudo" -LDAM="Land-Act-Staudamm" -LMESA="La Mesa" -LOSPUER="La Puerta" -LOSSF="Los Santos Freeway" -MGCR_1="South Los Santos" -MGSR_3="Raton Canyon" -MIRR="Mirror Park" -MORN="Morningwood" -MOVIE="Richards Majestic" -MTCHIL="Mount Chiliad" -MTGORDO="Mount Gordo" -MTJOSE="Mount Josiah" -MURRI="Murrieta Heights" -NCHU="North Chumash" -OBSERV="Galileo-Observatorium" -OCEANA="Pazifik" -PALCOV="Paleto Cove" -PALETO="Paleto Bay" -PALFOR="Paleto Forest" -PALHIGH="Palomino-Hochland" -PALMPOW="Palmer-Taylor-Elektrizitätswerk" -PBLUFF="Pacific Bluffs" -PBOX="Pillbox Hill" -PROCOB="Procopio Beach" -PROL="North Yankton" -RANCHO="Rancho" -RGLEN="Richman Glen" -RICHM="Richman" -ROCKF="Rockford Hills" -RTRAK="Redwood-Lights-Rennstrecke" -SANAND="San Andreas" -SANCHIA="San-Chianski-Bergkette" -SANDY="Sandy Shores" -SKID="Mission Row" -SLAB="Stab City" -SLSANT="South Los Santos" -STAD="Maze Bank Arena" -STRAW="Strawberry" -TATAMO="Tataviam-Bergkette" -TERMINA="Terminal" -TEXTI="Textilbezirk" -TONGVAH="Tongva Hills" -TONGVAV="Tongva Valley" -UTOPIAG="Utopia Gardens" -VCANA="Vespucci-Kanäle" -VESP="Vespucci" -VINE="Vinewood" -WINDF="Ron-Alternates-Windpark" -WMIRROR="West Mirror Drive" -WVINE="Vinewood West" -ZANCUDO="Zancudo River" -ZENORA="Senora Freeway" +[Global] +AIRP="Internationaler Flughafen von LS" +ALAMO="Alamosee" +ALTA="Alta" +ARMYB="Fort Zancudo" +BANNING="Banning" +BAYTRE="Baytree Canyon" +BEACH="Vespucci Beach" +BHAMCA="Banham Canyon" +BRADP="Braddock-Pass" +BRADT="Braddock-Tunnel" +BURTON="Burton" +CALAFB="Calafia-Brücke" +CANNY="Raton Canyon" +CCREAK="Cassidy Creek" +CHAMH="Chamberlain Hills" +CHIL="Vinewood Hills" +CHU="Chumash" +CMSW="Chiliad-Mountain-Naturschutzgebiet" +COSI="Vorstädte" +CYPRE="Cypress Flats" +DAVIS="Davis" +DELBE="Del Perro Beach" +DELPE="Del Perro" +DELSOL="La Puerta" +DESRT="Grand-Senora-Wüste" +DOWNT="Innenstadt" +DTVINE="Vinewood Mitte" +EAST_V="East Vinewood" +EBURO="El Burro Heights" +ECLIPS="Eclipse" +ELGORL="Leuchtturm El Gordo" +ELSANT="East Los Santos" +ELYSIAN="Elysian Island" +GALFISH="Galilee" +GALLI="Galileo-Park" +GOLF="GWC und Golfclub" +GRAPES="Grapeseed" +GREATC="Great Chaparral" +HARMO="Harmony" +HAWICK="Hawick" +HEART="Heart Attacks Beach" +HORS="Vinewood-Rennbahn" +HUD_MG_TRI_ALA="Alamosee" +HUD_MG_TRI_VES="Vespucci" +HUMLAB="Humane Labs and Research" +JAIL="Bolingbroke-Strafanstalt" +KOREAT="Little Seoul" +LACT="Land-Act-Stausee" +LAGO="Lago Zancudo" +LDAM="Land-Act-Staudamm" +LMESA="La Mesa" +LOSPUER="La Puerta" +LOSSF="Los Santos Freeway" +MGCR_1="South Los Santos" +MGSR_3="Raton Canyon" +MIRR="Mirror Park" +MORN="Morningwood" +MOVIE="Richards Majestic" +MTCHIL="Mount Chiliad" +MTGORDO="Mount Gordo" +MTJOSE="Mount Josiah" +MURRI="Murrieta Heights" +NCHU="North Chumash" +OBSERV="Galileo-Observatorium" +OCEANA="Pazifik" +PALCOV="Paleto Cove" +PALETO="Paleto Bay" +PALFOR="Paleto Forest" +PALHIGH="Palomino-Hochland" +PALMPOW="Palmer-Taylor-Elektrizitätswerk" +PBLUFF="Pacific Bluffs" +PBOX="Pillbox Hill" +PROCOB="Procopio Beach" +PROL="North Yankton" +RANCHO="Rancho" +RGLEN="Richman Glen" +RICHM="Richman" +ROCKF="Rockford Hills" +RTRAK="Redwood-Lights-Rennstrecke" +SANAND="San Andreas" +SANCHIA="San-Chianski-Bergkette" +SANDY="Sandy Shores" +SKID="Mission Row" +SLAB="Stab City" +SLSANT="South Los Santos" +STAD="Maze Bank Arena" +STRAW="Strawberry" +TATAMO="Tataviam-Bergkette" +TERMINA="Terminal" +TEXTI="Textilbezirk" +TONGVAH="Tongva Hills" +TONGVAV="Tongva Valley" +UTOPIAG="Utopia Gardens" +VCANA="Vespucci-Kanäle" +VESP="Vespucci" +VINE="Vinewood" +WINDF="Ron-Alternates-Windpark" +WMIRROR="West Mirror Drive" +WVINE="Vinewood West" +ZANCUDO="Zancudo River" +ZENORA="Senora Freeway" diff --git a/res/global.en.ini b/res/global.en.ini index 375c91c..4c31ad3 100755 --- a/res/global.en.ini +++ b/res/global.en.ini @@ -1,103 +1,103 @@ -[Global] -AIRP="Los Santos International Airport" -ALAMO="Alamo Sea" -ALTA="Alta" -ARMYB="Fort Zancudo" -BANNING="Banning" -BAYTRE="Baytree Canyon" -BEACH="Vespucci Beach" -BHAMCA="Banham Canyon" -BRADP="Braddock Pass" -BRADT="Braddock Tunnel" -BURTON="Burton" -CALAFB="Calafia Bridge" -CANNY="Raton Canyon" -CCREAK="Cassidy Creek" -CHAMH="Chamberlain Hills" -CHIL="Vinewood Hills" -CHU="Chumash" -CMSW="Chiliad Mountain State Wilderness" -COSI="Countryside" -CYPRE="Cypress Flats" -DAVIS="Davis" -DELBE="Del Perro Beach" -DELPE="Del Perro" -DELSOL="La Puerta" -DESRT="Grand Senora Desert" -DOWNT="Downtown" -DTVINE="Downtown Vinewood" -EAST_V="East Vinewood" -EBURO="El Burro Heights" -ECLIPS="Eclipse" -ELGORL="El Gordo Lighthouse" -ELSANT="East Los Santos" -ELYSIAN="Elysian Island" -GALFISH="Galilee" -GALLI="Galileo Park" -GOLF="GWC and Golfing Society" -GRAPES="Grapeseed" -GREATC="Great Chaparral" -HARMO="Harmony" -HAWICK="Hawick" -HEART="Heart Attacks Beach" -HORS="Vinewood Racetrack" -HUD_MG_TRI_ALA="Alamo Sea" -HUD_MG_TRI_VES="Vespucci" -HUMLAB="Humane Labs and Research" -JAIL="Bolingbroke Penitentiary" -KOREAT="Little Seoul" -LACT="Land Act Reservoir" -LAGO="Lago Zancudo" -LDAM="Land Act Dam" -LMESA="La Mesa" -LOSPUER="La Puerta" -LOSSF="Los Santos Freeway" -MGCR_1="South Los Santos" -MGCR_6="Vespucci Canals" -MGSR_3="Raton Canyon" -MIRR="Mirror Park" -MORN="Morningwood" -MOVIE="Richards Majestic" -MTCHIL="Mount Chiliad" -MTGORDO="Mount Gordo" -MTJOSE="Mount Josiah" -MURRI="Murrieta Heights" -NCHU="North Chumash" -OBSERV="Galileo Observatory" -OCEANA="Pacific Ocean" -PALCOV="Paleto Cove" -PALETO="Paleto Bay" -PALFOR="Paleto Forest" -PALHIGH="Palomino Highlands" -PALMPOW="Palmer-Taylor Power Station" -PBLUFF="Pacific Bluffs" -PBOX="Pillbox Hill" -PROCOB="Procopio Beach" -PROL="North Yankton" -RANCHO="Rancho" -RGLEN="Richman Glen" -RICHM="Richman" -ROCKF="Rockford Hills" -RTRAK="Redwood Lights Track" -SANAND="San Andreas" -SANCHIA="San Chianski Mountain Range" -SANDY="Sandy Shores" -SKID="Mission Row" -SLAB="Stab City" -SLSANT="South Los Santos" -STAD="Maze Bank Arena" -STRAW="Strawberry" -TATAMO="Tataviam Mountains" -TERMINA="Terminal" -TEXTI="Textile City" -TONGVAH="Tongva Hills" -TONGVAV="Tongva Valley" -UTOPIAG="Utopia Gardens" -VCANA="Vespucci Canals" -VESP="Vespucci" -VINE="Vinewood" -WINDF="Ron Alternates Wind Farm" -WMIRROR="West Mirror Drive" -WVINE="West Vinewood" -ZANCUDO="Zancudo River" -ZENORA="Senora Freeway" +[Global] +AIRP="Los Santos International Airport" +ALAMO="Alamo Sea" +ALTA="Alta" +ARMYB="Fort Zancudo" +BANNING="Banning" +BAYTRE="Baytree Canyon" +BEACH="Vespucci Beach" +BHAMCA="Banham Canyon" +BRADP="Braddock Pass" +BRADT="Braddock Tunnel" +BURTON="Burton" +CALAFB="Calafia Bridge" +CANNY="Raton Canyon" +CCREAK="Cassidy Creek" +CHAMH="Chamberlain Hills" +CHIL="Vinewood Hills" +CHU="Chumash" +CMSW="Chiliad Mountain State Wilderness" +COSI="Countryside" +CYPRE="Cypress Flats" +DAVIS="Davis" +DELBE="Del Perro Beach" +DELPE="Del Perro" +DELSOL="La Puerta" +DESRT="Grand Senora Desert" +DOWNT="Downtown" +DTVINE="Downtown Vinewood" +EAST_V="East Vinewood" +EBURO="El Burro Heights" +ECLIPS="Eclipse" +ELGORL="El Gordo Lighthouse" +ELSANT="East Los Santos" +ELYSIAN="Elysian Island" +GALFISH="Galilee" +GALLI="Galileo Park" +GOLF="GWC and Golfing Society" +GRAPES="Grapeseed" +GREATC="Great Chaparral" +HARMO="Harmony" +HAWICK="Hawick" +HEART="Heart Attacks Beach" +HORS="Vinewood Racetrack" +HUD_MG_TRI_ALA="Alamo Sea" +HUD_MG_TRI_VES="Vespucci" +HUMLAB="Humane Labs and Research" +JAIL="Bolingbroke Penitentiary" +KOREAT="Little Seoul" +LACT="Land Act Reservoir" +LAGO="Lago Zancudo" +LDAM="Land Act Dam" +LMESA="La Mesa" +LOSPUER="La Puerta" +LOSSF="Los Santos Freeway" +MGCR_1="South Los Santos" +MGCR_6="Vespucci Canals" +MGSR_3="Raton Canyon" +MIRR="Mirror Park" +MORN="Morningwood" +MOVIE="Richards Majestic" +MTCHIL="Mount Chiliad" +MTGORDO="Mount Gordo" +MTJOSE="Mount Josiah" +MURRI="Murrieta Heights" +NCHU="North Chumash" +OBSERV="Galileo Observatory" +OCEANA="Pacific Ocean" +PALCOV="Paleto Cove" +PALETO="Paleto Bay" +PALFOR="Paleto Forest" +PALHIGH="Palomino Highlands" +PALMPOW="Palmer-Taylor Power Station" +PBLUFF="Pacific Bluffs" +PBOX="Pillbox Hill" +PROCOB="Procopio Beach" +PROL="North Yankton" +RANCHO="Rancho" +RGLEN="Richman Glen" +RICHM="Richman" +ROCKF="Rockford Hills" +RTRAK="Redwood Lights Track" +SANAND="San Andreas" +SANCHIA="San Chianski Mountain Range" +SANDY="Sandy Shores" +SKID="Mission Row" +SLAB="Stab City" +SLSANT="South Los Santos" +STAD="Maze Bank Arena" +STRAW="Strawberry" +TATAMO="Tataviam Mountains" +TERMINA="Terminal" +TEXTI="Textile City" +TONGVAH="Tongva Hills" +TONGVAV="Tongva Valley" +UTOPIAG="Utopia Gardens" +VCANA="Vespucci Canals" +VESP="Vespucci" +VINE="Vinewood" +WINDF="Ron Alternates Wind Farm" +WMIRROR="West Mirror Drive" +WVINE="West Vinewood" +ZANCUDO="Zancudo River" +ZENORA="Senora Freeway" diff --git a/res/global.es.ini b/res/global.es.ini index b2d3cb6..dda46a7 100644 --- a/res/global.es.ini +++ b/res/global.es.ini @@ -1,107 +1,107 @@ -[Global] -AIRP="Aeropuerto Intl. de Los Santos" -ALAMO="Alamo Sea" -ALTA="Alta" -ARMYB="Fort Zancudo" -BANNING="Banning" -BAYTRE="Baytree Canyon" -BEACH="Vespucci Beach" -BHAMCA="Banham Canyon" -BRADP="Braddock Pass" -BRADT="Túnel de Braddock" -BURTON="Burton" -CALAFB="Puente de Calafia" -CANNY="Raton Canyon" -CCREAK="Cassidy Creek" -CHAMH="Chamberlain Hills" -CHIL="Vinewood Hills" -CHU="Chumash" -CMSW="Parque natural del monte Chiliad" -COSI="Zona rural" -CYPRE="Cypress Flats" -DAVIS="Davis" -DELBE="Del Perro Beach" -DELPE="Del Perro" -DELSOL="La Puerta" -DESRT="Desierto de Grand Señora" -DOWNT="Centro" -DTVINE="Centro de Vinewood" -EAST_V="Vinewood Este" -EBURO="El Burro Heights" -ECLIPS="Eclipse" -ELGORL="Faro de El Gordo" -ELSANT="Los Santos Este" -ELYSIAN="Elysian Island" -GALFISH="Galilee" -GALLI="Galileo Park" -GOLF="Club de campo y de golf GW" -GRAPES="Grapeseed" -GREATC="Great Chaparral" -HARMO="Harmony" -HAWICK="Hawick" -HEART="Heart Attacks Beach" -HORS="Circuito de Vinewood" -HUD_MG_TRI_ALA="Alamo Sea" -HUD_MG_TRI_VES="Vespucci" -HUMLAB="Laboratorios Humane" -JAIL="Penitenciaría de Bolingbroke" -KOREAT="Little Seoul" -LACT="Embalse de Land Act" -LAGO="Lago Zancudo" -LDAM="Presa de Land Act" -LMESA="La Mesa" -LOSPFY="Autopista de La Puerta" -LOSPUER="La Puerta" -LOSSF="Autopista de Los Santos" -MGCR_1="Los Santos Sur" -MGCR_6="Canales de Vespucci" -MGSR_3="Raton Canyon" -MIRR="Mirror Park" -MORN="Morningwood" -MOVIE="Richards Majestic" -MO_CS_HIGH="Alta" -MO_HIGH="Alta" -MTCHIL="Monte Chiliad" -MTGORDO="Monte Gordo" -MTJOSE="Monte Josiah" -MURRI="Murrieta Heights" -NCHU="Chumash Norte" -OBSERV="Observatorio Galileo" -OCEANA="Océano Pacífico" -PALCOV="Paleto Cove" -PALETO="Paleto Bay" -PALFOR="Bosque de Paleto" -PALHIGH="Palomino Highlands" -PALMPOW="Central eléctrica Palmer-Taylor" -PBLUFF="Pacific Bluffs" -PBOX="Pillbox Hill" -PROCOB="Procopio Beach" -PROL="North Yankton" -RANCHO="Rancho" -RGLEN="Richman Glen" -RICHM="Richman" -ROCKF="Rockford Hills" -RTRAK="Circuito Redwood Lights" -SANAND="San Andreas" -SANCHIA="Cordillera San Chianski" -SANDY="Sandy Shores" -SENORA="Autopista de Señora" -SKID="Mission Row" -SLAB="Stab City" -SLSANT="Los Santos Sur" -STAD="Maze Bank Arena" -STRAW="Strawberry" -TATAMO="Montañas Tataviam" -TERMINA="Terminal" -TEXTI="Textile City" -TONGVAH="Colinas de Tongva" -TONGVAV="Valle de Tongva" -UTOPIAG="Utopia Gardens" -VCANA="Canales de Vespucci" -VESP="Vespucci" -VINE="Vinewood" -WINDF="Granja eólica de Ron Alternates" -WMIRROR="West Mirror Drive" -WVINE="Vinewood Oeste" -ZANCUDO="Río Zancudo" -ZENORA="Autopista de Señora" +[Global] +AIRP="Aeropuerto Intl. de Los Santos" +ALAMO="Alamo Sea" +ALTA="Alta" +ARMYB="Fort Zancudo" +BANNING="Banning" +BAYTRE="Baytree Canyon" +BEACH="Vespucci Beach" +BHAMCA="Banham Canyon" +BRADP="Braddock Pass" +BRADT="Túnel de Braddock" +BURTON="Burton" +CALAFB="Puente de Calafia" +CANNY="Raton Canyon" +CCREAK="Cassidy Creek" +CHAMH="Chamberlain Hills" +CHIL="Vinewood Hills" +CHU="Chumash" +CMSW="Parque natural del monte Chiliad" +COSI="Zona rural" +CYPRE="Cypress Flats" +DAVIS="Davis" +DELBE="Del Perro Beach" +DELPE="Del Perro" +DELSOL="La Puerta" +DESRT="Desierto de Grand Señora" +DOWNT="Centro" +DTVINE="Centro de Vinewood" +EAST_V="Vinewood Este" +EBURO="El Burro Heights" +ECLIPS="Eclipse" +ELGORL="Faro de El Gordo" +ELSANT="Los Santos Este" +ELYSIAN="Elysian Island" +GALFISH="Galilee" +GALLI="Galileo Park" +GOLF="Club de campo y de golf GW" +GRAPES="Grapeseed" +GREATC="Great Chaparral" +HARMO="Harmony" +HAWICK="Hawick" +HEART="Heart Attacks Beach" +HORS="Circuito de Vinewood" +HUD_MG_TRI_ALA="Alamo Sea" +HUD_MG_TRI_VES="Vespucci" +HUMLAB="Laboratorios Humane" +JAIL="Penitenciaría de Bolingbroke" +KOREAT="Little Seoul" +LACT="Embalse de Land Act" +LAGO="Lago Zancudo" +LDAM="Presa de Land Act" +LMESA="La Mesa" +LOSPFY="Autopista de La Puerta" +LOSPUER="La Puerta" +LOSSF="Autopista de Los Santos" +MGCR_1="Los Santos Sur" +MGCR_6="Canales de Vespucci" +MGSR_3="Raton Canyon" +MIRR="Mirror Park" +MORN="Morningwood" +MOVIE="Richards Majestic" +MO_CS_HIGH="Alta" +MO_HIGH="Alta" +MTCHIL="Monte Chiliad" +MTGORDO="Monte Gordo" +MTJOSE="Monte Josiah" +MURRI="Murrieta Heights" +NCHU="Chumash Norte" +OBSERV="Observatorio Galileo" +OCEANA="Océano Pacífico" +PALCOV="Paleto Cove" +PALETO="Paleto Bay" +PALFOR="Bosque de Paleto" +PALHIGH="Palomino Highlands" +PALMPOW="Central eléctrica Palmer-Taylor" +PBLUFF="Pacific Bluffs" +PBOX="Pillbox Hill" +PROCOB="Procopio Beach" +PROL="North Yankton" +RANCHO="Rancho" +RGLEN="Richman Glen" +RICHM="Richman" +ROCKF="Rockford Hills" +RTRAK="Circuito Redwood Lights" +SANAND="San Andreas" +SANCHIA="Cordillera San Chianski" +SANDY="Sandy Shores" +SENORA="Autopista de Señora" +SKID="Mission Row" +SLAB="Stab City" +SLSANT="Los Santos Sur" +STAD="Maze Bank Arena" +STRAW="Strawberry" +TATAMO="Montañas Tataviam" +TERMINA="Terminal" +TEXTI="Textile City" +TONGVAH="Colinas de Tongva" +TONGVAV="Valle de Tongva" +UTOPIAG="Utopia Gardens" +VCANA="Canales de Vespucci" +VESP="Vespucci" +VINE="Vinewood" +WINDF="Granja eólica de Ron Alternates" +WMIRROR="West Mirror Drive" +WVINE="Vinewood Oeste" +ZANCUDO="Río Zancudo" +ZENORA="Autopista de Señora" diff --git a/res/global.fr.ini b/res/global.fr.ini index e2669d1..130709f 100644 --- a/res/global.fr.ini +++ b/res/global.fr.ini @@ -1,103 +1,103 @@ -[Global] -AIRP="Aéroport international de LS" -ALAMO="Alamo Sea" -ALTA="Alta" -ARMYB="Fort Zancudo" -BANNING="Banning" -BAYTRE="Baytree Canyon" -BEACH="Vespucci Beach" -BHAMCA="Banham Canyon" -BRADP="Braddock Pass" -BRADT="Braddock Tunnel" -BURTON="Burton" -CALAFB="Calafia Bridge" -CANNY="Raton Canyon" -CCREAK="Cassidy Creek" -CHAMH="Chamberlain Hills" -CHIL="Vinewood Hills" -CHU="Chumash" -CMSW="Parc national du Mont Chiliad" -CYPRE="Cypress Flats" -DAVIS="Davis" -DELBE="Del Perro Beach" -DELPE="Del Perro" -DELSOL="La Puerta" -DESRT="Grand Señora Desert" -DOWNT="Centre-ville" -DTVINE="Centre de Vinewood" -EAST_V="Vinewood East" -EBURO="El Burro Heights" -ECLIPS="Eclipse" -ELGORL="Phare d'El Gordo" -ELSANT="East Los Santos" -ELYSIAN="Elysian Island" -GALFISH="Galilee" -GALLI="Galileo Park" -GOLF="Club de golf et de détente du Grand Ouest" -GRAPES="Grapeseed" -GREATC="Great Chaparral" -HARMO="Harmony" -HAWICK="Hawick" -HEART="Heart Attacks Beach" -HORS="Hippodrome de Vinewood" -HUD_MG_TRI_ALA="Alamo Sea" -HUD_MG_TRI_VES="Vespucci" -HUMLAB="Laboratoires Humane" -JAIL="Pénitencier de Bolingbroke" -KOREAT="Little Seoul" -LACT="Land Act Reservoir" -LAGO="Lago Zancudo" -LDAM="Land Act Dam" -LMESA="La Mesa" -LOSPFY="La Puerta Freeway" -LOSPUER="La Puerta" -LOSSF="Los Santos Freeway" -MGCR_1="South Los Santos" -MGCR_6="Canaux de Vespucci" -MGSR_3="Raton Canyon" -MIRR="Mirror Park" -MORN="Morningwood" -MOVIE="Richards Majestic" -MTCHIL="Mont Chiliad" -MTGORDO="Mont Gordo" -MTJOSE="Mont Josiah" -MURRI="Murrieta Heights" -NCHU="North Chumash" -OBSERV="Observatoire Galileo" -OCEANA="Océan pacifique" -PALCOV="Paleto Cove" -PALETO="Paleto Bay" -PALFOR="Paleto Forest" -PALHIGH="Palomino Highlands" -PALMPOW="Centrale Palmer-Taylor" -PBLUFF="Pacific Bluffs" -PBOX="Pillbox Hill" -PROCOB="Procopio Beach" -PROL="North Yankton" -RANCHO="Rancho" -RGLEN="Richman Glen" -RICHM="Richman" -ROCKF="Rockford Hills" -RTRAK="Circuit Redwood Lights" -SANAND="San Andreas" -SANCHIA="Monts de San Chianski" -SANDY="Sandy Shores" -SKID="Mission Row" -SLAB="Stab City" -SLSANT="South Los Santos" -STAD="Maze Bank Arena" -STRAW="Strawberry" -TATAMO="Monts Tataviam" -TERMINA="Terminal" -TEXTI="Textile City" -TONGVAH="Tongva Hills" -TONGVAV="Tongva Valley" -UTOPIAG="Utopia Gardens" -VCANA="Canaux de Vespucci" -VESP="Vespucci" -VINE="Vinewood" -WINDF="Parc d'éoliennes Ron Alternates" -WMIRROR="Mirror Drive West" -WVINE="Vinewood West" -ZANCUDO="Zancudo River" -ZENORA="Señora Freeway" +[Global] +AIRP="Aéroport international de LS" +ALAMO="Alamo Sea" +ALTA="Alta" +ARMYB="Fort Zancudo" +BANNING="Banning" +BAYTRE="Baytree Canyon" +BEACH="Vespucci Beach" +BHAMCA="Banham Canyon" +BRADP="Braddock Pass" +BRADT="Braddock Tunnel" +BURTON="Burton" +CALAFB="Calafia Bridge" +CANNY="Raton Canyon" +CCREAK="Cassidy Creek" +CHAMH="Chamberlain Hills" +CHIL="Vinewood Hills" +CHU="Chumash" +CMSW="Parc national du Mont Chiliad" +CYPRE="Cypress Flats" +DAVIS="Davis" +DELBE="Del Perro Beach" +DELPE="Del Perro" +DELSOL="La Puerta" +DESRT="Grand Señora Desert" +DOWNT="Centre-ville" +DTVINE="Centre de Vinewood" +EAST_V="Vinewood East" +EBURO="El Burro Heights" +ECLIPS="Eclipse" +ELGORL="Phare d'El Gordo" +ELSANT="East Los Santos" +ELYSIAN="Elysian Island" +GALFISH="Galilee" +GALLI="Galileo Park" +GOLF="Club de golf et de détente du Grand Ouest" +GRAPES="Grapeseed" +GREATC="Great Chaparral" +HARMO="Harmony" +HAWICK="Hawick" +HEART="Heart Attacks Beach" +HORS="Hippodrome de Vinewood" +HUD_MG_TRI_ALA="Alamo Sea" +HUD_MG_TRI_VES="Vespucci" +HUMLAB="Laboratoires Humane" +JAIL="Pénitencier de Bolingbroke" +KOREAT="Little Seoul" +LACT="Land Act Reservoir" +LAGO="Lago Zancudo" +LDAM="Land Act Dam" +LMESA="La Mesa" +LOSPFY="La Puerta Freeway" +LOSPUER="La Puerta" +LOSSF="Los Santos Freeway" +MGCR_1="South Los Santos" +MGCR_6="Canaux de Vespucci" +MGSR_3="Raton Canyon" +MIRR="Mirror Park" +MORN="Morningwood" +MOVIE="Richards Majestic" +MTCHIL="Mont Chiliad" +MTGORDO="Mont Gordo" +MTJOSE="Mont Josiah" +MURRI="Murrieta Heights" +NCHU="North Chumash" +OBSERV="Observatoire Galileo" +OCEANA="Océan pacifique" +PALCOV="Paleto Cove" +PALETO="Paleto Bay" +PALFOR="Paleto Forest" +PALHIGH="Palomino Highlands" +PALMPOW="Centrale Palmer-Taylor" +PBLUFF="Pacific Bluffs" +PBOX="Pillbox Hill" +PROCOB="Procopio Beach" +PROL="North Yankton" +RANCHO="Rancho" +RGLEN="Richman Glen" +RICHM="Richman" +ROCKF="Rockford Hills" +RTRAK="Circuit Redwood Lights" +SANAND="San Andreas" +SANCHIA="Monts de San Chianski" +SANDY="Sandy Shores" +SKID="Mission Row" +SLAB="Stab City" +SLSANT="South Los Santos" +STAD="Maze Bank Arena" +STRAW="Strawberry" +TATAMO="Monts Tataviam" +TERMINA="Terminal" +TEXTI="Textile City" +TONGVAH="Tongva Hills" +TONGVAV="Tongva Valley" +UTOPIAG="Utopia Gardens" +VCANA="Canaux de Vespucci" +VESP="Vespucci" +VINE="Vinewood" +WINDF="Parc d'éoliennes Ron Alternates" +WMIRROR="Mirror Drive West" +WVINE="Vinewood West" +ZANCUDO="Zancudo River" +ZENORA="Señora Freeway" diff --git a/res/global.ja.ini b/res/global.ja.ini index 24ad7d2..366e294 100755 --- a/res/global.ja.ini +++ b/res/global.ja.ini @@ -1,106 +1,106 @@ -[Global] -AIRP="ロスサントス国際空港" -ALAMO="アラモ海" -ALTA="アルタ" -ARMYB="フォート・ザンクード" -BANNING="ãƒãƒ‹ãƒ³ã‚°" -BAYTRE="ベイツリー・キャニオン" -BEACH="ベスプッãƒãƒ»ãƒ“ーãƒ" -BHAMCA="ãƒãƒ³ãƒŠãƒ ã‚­ãƒ£ãƒ‹ã‚ªãƒ³" -BRADP="ブラドック・パス" -BRADT="ブラドック・トンãƒãƒ«" -BSS_BSTR_131="リãƒãƒ£ãƒ¼ã‚ºãƒ»ãƒžã‚¸ã‚§ã‚¹ãƒ†ã‚£ãƒƒã‚¯" -BURTON="ãƒãƒ¼ãƒˆãƒ³" -CALAFB="カラフィア橋" -CANNY="ラトン・キャニオン" -CCREAK="キャシディ・クリーク" -CHAMH="ãƒã‚§ãƒ³ãƒãƒ¼ãƒ¬ã‚¤ãƒ³ãƒ»ãƒ’ルズ" -CHIL="ãƒã‚¤ãƒ³ã‚¦ãƒƒãƒ‰ãƒ»ãƒ’ルズ" -CHU="ãƒãƒ¥ãƒžã‚·ãƒ¥" -CMSW="ãƒãƒªã‚¢ãƒ‰å±±è‡ªç„¶ä¿è­·åŒº" -COSI="農園地帯" -CYPRE="サイプレス・フラット" -DAVIS="デイビス" -DELBE="デル・ペロ・ビーãƒ" -DELPE="デル・ペロ" -DELSOL="ラ・プエルタ" -DESRT="グランド・セノーラ砂漠" -DOWNT="ダウンタウン" -DTVINE="ダウンタウン・ãƒã‚¤ãƒ³ã‚¦ãƒƒãƒ‰" -EAST_V="イースト・ãƒã‚¤ãƒ³ã‚¦ãƒƒãƒ‰" -EBURO="エル・ブロ・ãƒã‚¤ãƒ„" -ECLIPS="イクリプス" -ELGORL="エル・ゴルドç¯å°" -ELSANT="イースト・ロスサントス" -ELYSIAN="エリシアン島" -GALFISH="ガリラヤ" -GALLI="ガリレオ・パーク" -GOLF="GWC&ゴルフå”会" -GRAPES="グレイプシード" -GREATC="グレート・ãƒãƒ£ãƒ‘レル" -HARMO="ãƒãƒ¼ãƒ¢ãƒ‹ãƒ¼" -HAWICK="ãƒã‚¦ã‚£ãƒƒã‚¯" -HEART="ãƒãƒ¼ãƒˆã‚¢ã‚¿ãƒƒã‚¯ãƒ»ãƒ“ーãƒ" -HORS="ãƒã‚¤ãƒ³ã‚¦ãƒƒãƒ‰ãƒ»ãƒ¬ãƒ¼ã‚¹ãƒˆãƒ©ãƒƒã‚¯" -HUD_MG_TRI_ALA="アラモ海" -HUD_MG_TRI_VES="ベスプッãƒ" -HUMLAB="ヒューメイン研究所" -JAIL="ボーリングブローク刑務所" -KOREAT="リトル・ソウル" -LACT="ランド・アクト貯水池" -LAGO="ラゴ・ザンクード" -LDAM="ランド・アクト・ダム" -LMESA="ラ・メサ" -LOSPFY="ラ・プエルタ高速é“è·¯" -LOSPUER="ラ・プエルタ" -LOSSF="ロスサントス高速é“è·¯" -MGCR_1="サウス・ロスサントス" -MGCR_6="ベスプッãƒé‹æ²³" -MGSR_3="ラトン・キャニオン" -MIRR="ミラー・パーク" -MORN="モーニングウッド" -MOVIE="リãƒãƒ£ãƒ¼ã‚ºãƒ»ãƒžã‚¸ã‚§ã‚¹ãƒ†ã‚£ãƒƒã‚¯" -MTCHIL="ãƒãƒªã‚¢ãƒ‰å±±" -MTGORDO="ゴルド山" -MTJOSE="ジョサイア山" -MURRI="ムリエタ・ãƒã‚¤ãƒ„" -NCHU="北ãƒãƒ¥ãƒžã‚·ãƒ¥" -OBSERV="ガリレオ観測所" -OCEANA="太平洋" -PALCOV="パレト・コーブ" -PALETO="パレト・ベイ" -PALFOR="パレト・フォレスト" -PALHIGH="パロミノ高地" -PALMPOW="パーマー・テイラー発電所" -PBLUFF="パシフィック・ブラフス" -PBOX="ピルボックス・ヒル" -PROCOB="プロコピオ・ビーãƒ" -PROL="ノース・ヤンクトン" -RANCHO="ランãƒãƒ§" -RGLEN="リッãƒãƒžãƒ³ãƒ»ã‚°ãƒ¬ãƒ³" -RICHM="リッãƒãƒžãƒ³" -ROCKF="ロックフォード・ヒルズ" -RTRAK="レッドウッド・ライト・トラック" -SANAND="サンアンドレアス" -SANCHIA="サン・ãƒã‚¢ãƒ³ã‚¹ã‚­ãƒ¼å±±è„ˆ" -SANDY="サンディ海岸" -SENORA="セノーラ高速é“è·¯" -SKID="ミッション・ロウ" -SLAB="スタブシティ" -SLSANT="サウス・ロスサントス" -STAD="メイズãƒãƒ³ã‚¯ãƒ»ã‚¢ãƒªãƒ¼ãƒŠ" -STRAW="ストロベリー" -TATAMO="タタヴィアム山地" -TERMINA="ターミナル" -TEXTI="テキスタイルシティ" -TONGVAH="トングãƒãƒ»ãƒ’ルズ" -TONGVAV="トングãƒãƒ»ãƒãƒ¬ãƒ¼" -UTOPIAG="ユートピア・ガーデンズ" -VCANA="ベスプッãƒé‹æ²³" -VESP="ベスプッãƒ" -VINE="ãƒã‚¤ãƒ³ã‚¦ãƒƒãƒ‰" -WINDF="ロン・オルタãƒãƒƒãƒˆãƒ»ã‚¦ã‚£ãƒ³ãƒ‰ãƒ•ァーム" -WMIRROR="ウエスト・ミラー・ドライブ" -WVINE="ウエスト・ãƒã‚¤ãƒ³ã‚¦ãƒƒãƒ‰" -ZANCUDO="ザンクードå·" -ZENORA="セノーラ高速é“è·¯" +[Global] +AIRP="ロスサントス国際空港" +ALAMO="アラモ海" +ALTA="アルタ" +ARMYB="フォート・ザンクード" +BANNING="ãƒãƒ‹ãƒ³ã‚°" +BAYTRE="ベイツリー・キャニオン" +BEACH="ベスプッãƒãƒ»ãƒ“ーãƒ" +BHAMCA="ãƒãƒ³ãƒŠãƒ ã‚­ãƒ£ãƒ‹ã‚ªãƒ³" +BRADP="ブラドック・パス" +BRADT="ブラドック・トンãƒãƒ«" +BSS_BSTR_131="リãƒãƒ£ãƒ¼ã‚ºãƒ»ãƒžã‚¸ã‚§ã‚¹ãƒ†ã‚£ãƒƒã‚¯" +BURTON="ãƒãƒ¼ãƒˆãƒ³" +CALAFB="カラフィア橋" +CANNY="ラトン・キャニオン" +CCREAK="キャシディ・クリーク" +CHAMH="ãƒã‚§ãƒ³ãƒãƒ¼ãƒ¬ã‚¤ãƒ³ãƒ»ãƒ’ルズ" +CHIL="ãƒã‚¤ãƒ³ã‚¦ãƒƒãƒ‰ãƒ»ãƒ’ルズ" +CHU="ãƒãƒ¥ãƒžã‚·ãƒ¥" +CMSW="ãƒãƒªã‚¢ãƒ‰å±±è‡ªç„¶ä¿è­·åŒº" +COSI="農園地帯" +CYPRE="サイプレス・フラット" +DAVIS="デイビス" +DELBE="デル・ペロ・ビーãƒ" +DELPE="デル・ペロ" +DELSOL="ラ・プエルタ" +DESRT="グランド・セノーラ砂漠" +DOWNT="ダウンタウン" +DTVINE="ダウンタウン・ãƒã‚¤ãƒ³ã‚¦ãƒƒãƒ‰" +EAST_V="イースト・ãƒã‚¤ãƒ³ã‚¦ãƒƒãƒ‰" +EBURO="エル・ブロ・ãƒã‚¤ãƒ„" +ECLIPS="イクリプス" +ELGORL="エル・ゴルドç¯å°" +ELSANT="イースト・ロスサントス" +ELYSIAN="エリシアン島" +GALFISH="ガリラヤ" +GALLI="ガリレオ・パーク" +GOLF="GWC&ゴルフå”会" +GRAPES="グレイプシード" +GREATC="グレート・ãƒãƒ£ãƒ‘レル" +HARMO="ãƒãƒ¼ãƒ¢ãƒ‹ãƒ¼" +HAWICK="ãƒã‚¦ã‚£ãƒƒã‚¯" +HEART="ãƒãƒ¼ãƒˆã‚¢ã‚¿ãƒƒã‚¯ãƒ»ãƒ“ーãƒ" +HORS="ãƒã‚¤ãƒ³ã‚¦ãƒƒãƒ‰ãƒ»ãƒ¬ãƒ¼ã‚¹ãƒˆãƒ©ãƒƒã‚¯" +HUD_MG_TRI_ALA="アラモ海" +HUD_MG_TRI_VES="ベスプッãƒ" +HUMLAB="ヒューメイン研究所" +JAIL="ボーリングブローク刑務所" +KOREAT="リトル・ソウル" +LACT="ランド・アクト貯水池" +LAGO="ラゴ・ザンクード" +LDAM="ランド・アクト・ダム" +LMESA="ラ・メサ" +LOSPFY="ラ・プエルタ高速é“è·¯" +LOSPUER="ラ・プエルタ" +LOSSF="ロスサントス高速é“è·¯" +MGCR_1="サウス・ロスサントス" +MGCR_6="ベスプッãƒé‹æ²³" +MGSR_3="ラトン・キャニオン" +MIRR="ミラー・パーク" +MORN="モーニングウッド" +MOVIE="リãƒãƒ£ãƒ¼ã‚ºãƒ»ãƒžã‚¸ã‚§ã‚¹ãƒ†ã‚£ãƒƒã‚¯" +MTCHIL="ãƒãƒªã‚¢ãƒ‰å±±" +MTGORDO="ゴルド山" +MTJOSE="ジョサイア山" +MURRI="ムリエタ・ãƒã‚¤ãƒ„" +NCHU="北ãƒãƒ¥ãƒžã‚·ãƒ¥" +OBSERV="ガリレオ観測所" +OCEANA="太平洋" +PALCOV="パレト・コーブ" +PALETO="パレト・ベイ" +PALFOR="パレト・フォレスト" +PALHIGH="パロミノ高地" +PALMPOW="パーマー・テイラー発電所" +PBLUFF="パシフィック・ブラフス" +PBOX="ピルボックス・ヒル" +PROCOB="プロコピオ・ビーãƒ" +PROL="ノース・ヤンクトン" +RANCHO="ランãƒãƒ§" +RGLEN="リッãƒãƒžãƒ³ãƒ»ã‚°ãƒ¬ãƒ³" +RICHM="リッãƒãƒžãƒ³" +ROCKF="ロックフォード・ヒルズ" +RTRAK="レッドウッド・ライト・トラック" +SANAND="サンアンドレアス" +SANCHIA="サン・ãƒã‚¢ãƒ³ã‚¹ã‚­ãƒ¼å±±è„ˆ" +SANDY="サンディ海岸" +SENORA="セノーラ高速é“è·¯" +SKID="ミッション・ロウ" +SLAB="スタブシティ" +SLSANT="サウス・ロスサントス" +STAD="メイズãƒãƒ³ã‚¯ãƒ»ã‚¢ãƒªãƒ¼ãƒŠ" +STRAW="ストロベリー" +TATAMO="タタヴィアム山地" +TERMINA="ターミナル" +TEXTI="テキスタイルシティ" +TONGVAH="トングãƒãƒ»ãƒ’ルズ" +TONGVAV="トングãƒãƒ»ãƒãƒ¬ãƒ¼" +UTOPIAG="ユートピア・ガーデンズ" +VCANA="ベスプッãƒé‹æ²³" +VESP="ベスプッãƒ" +VINE="ãƒã‚¤ãƒ³ã‚¦ãƒƒãƒ‰" +WINDF="ロン・オルタãƒãƒƒãƒˆãƒ»ã‚¦ã‚£ãƒ³ãƒ‰ãƒ•ァーム" +WMIRROR="ウエスト・ミラー・ドライブ" +WVINE="ウエスト・ãƒã‚¤ãƒ³ã‚¦ãƒƒãƒ‰" +ZANCUDO="ザンクードå·" +ZENORA="セノーラ高速é“è·¯" diff --git a/res/global.zh.ini b/res/global.zh.ini index 3990a2f..35564bd 100644 --- a/res/global.zh.ini +++ b/res/global.zh.ini @@ -1,104 +1,104 @@ -[Global] -AIRP="æ´›è–都國際機場" -ALAMO="阿拉莫海" -ALTA="艾爾塔" -ARMYB="桑庫多堡壘" -BANNING="ç­å¯§" -BAYTRE="è²ç‰¹é‡Œå³½è°·" -BEACH="卿–¯æ™®å¥‡æµ·ç˜" -BHAMCA="ç­æ¼¢å³½è°·" -BRADP="å¸ƒèŠæœè¦é“" -BRADT="å¸ƒèŠæœéš§é“" -BURTON="å·´é “" -CALAFB="塿‹‰éžæ©‹" -CANNY="雷通峽谷" -CCREAK="åŠ æ–¯è¿ªå°æºª" -CHAMH="張伯倫山" -CHIL="好麥塢山" -CHU="丘瑪墟" -CMSW="奇力耶德山國家生態ä¿è­·å€" -CYPRE="æ‰æŸå¹³åœ°" -DAVIS="戴維斯" -DELBE="佩羅海ç˜" -DELPE="佩羅" -DELSOL="洛波塔" -DESRT="塞諾拉大沙漠" -DOWNT="市中心" -DTVINE="好麥塢市中心" -EAST_V="æ±å¥½éº¥å¡¢" -EBURO="布羅高地" -ECLIPS="æ—¥è•" -ELGORL="戈多燈塔" -ELSANT="æ±æ´›è–都" -ELYSIAN="安樂島" -GALFISH="加利利" -GALLI="伽利略公園" -GOLF="西部鄉æ‘高爾夫俱樂部" -GRAPES="è‘¡è„ç±½" -GREATC="大墿ž—" -HARMO="和美尼" -HAWICK="éœä¼Šå…‹" -HEART="驚心海ç˜" -HORS="好麥塢賽馬場" -HUD_MG_TRI_ALA="阿拉莫海" -HUD_MG_TRI_VES="卿–¯æ™®å¥‡" -HUMLAB="人é“研究實驗室" -JAIL="åšæž—布魯克監ç„" -KOREAT="å°é¦–爾" -LACT="蘭艾水庫" -LAGO="桑庫多沼地" -LDAM="蘭艾水壩" -LMESA="梅薩" -LOSPFY="洛波塔高速公路" -LOSPUER="洛波塔" -LOSSF="æ´›è–都高速公路" -MGCR_1="å—æ´›è–都" -MGCR_6="卿–¯æ™®å¥‡é‹æ²³" -MGSR_3="雷通峽谷" -MIRR="米羅公園" -MORN="摩寧塢" -MOVIE="æŽå¯Ÿå°Šçˆµ" -MTCHIL="奇力耶德山" -MTGORDO="戈多山" -MTJOSE="å°¤å¤å±±" -MURRI="穆瑞塔高地" -NCHU="北丘瑪墟" -OBSERV="伽利略天文å°" -OCEANA="太平洋" -PALCOV="ä½©ç«‹æ‰˜å°æµ·ç£" -PALETO="佩立托ç£" -PALFOR="佩立托森林" -PALHIGH="巴洛米諾高地" -PALMPOW="帕莫泰勒發電站" -PBLUFF="太平崖" -PBOX="圓帽山" -PROCOB="普羅科皮奧海ç˜" -PROL="北æšå…‹é “" -RANCHO="è—丘" -RGLEN="利金漫幽谷" -RICHM="利金漫" -ROCKF="ç¾…å…‹ç¦å¾·å±±" -RTRAK="紅木賽é“" -SANAND="è–安地列斯" -SANCHIA="è–強斯基山脈" -SANDY="æ²™ç˜æµ·å²¸" -SENORA="塞諾拉高速公路" -SKID="密申羅" -SLAB="背刺城" -SLSANT="å—æ´›è–都" -STAD="花園銀行體育場" -STRAW="æ–¯å“è²åˆ©" -TATAMO="塔塔維昂山" -TERMINA="碼頭" -TEXTI="紡織城" -TONGVAH="通瓦山" -TONGVAV="通瓦谷地" -UTOPIAG="çƒæ‰˜é‚¦èŠ±åœ’" -VCANA="卿–¯æ™®å¥‡é‹æ²³" -VESP="卿–¯æ™®å¥‡" -VINE="好麥塢" -WINDF="朗æ©ï¼Žè‰¾ç‰¹æ¢…茲風車農場" -WMIRROR="米羅車é“西段" -WVINE="西好麥塢" -ZANCUDO="桑庫多河" -ZENORA="塞諾拉高速公路" +[Global] +AIRP="æ´›è–都國際機場" +ALAMO="阿拉莫海" +ALTA="艾爾塔" +ARMYB="桑庫多堡壘" +BANNING="ç­å¯§" +BAYTRE="è²ç‰¹é‡Œå³½è°·" +BEACH="卿–¯æ™®å¥‡æµ·ç˜" +BHAMCA="ç­æ¼¢å³½è°·" +BRADP="å¸ƒèŠæœè¦é“" +BRADT="å¸ƒèŠæœéš§é“" +BURTON="å·´é “" +CALAFB="塿‹‰éžæ©‹" +CANNY="雷通峽谷" +CCREAK="åŠ æ–¯è¿ªå°æºª" +CHAMH="張伯倫山" +CHIL="好麥塢山" +CHU="丘瑪墟" +CMSW="奇力耶德山國家生態ä¿è­·å€" +CYPRE="æ‰æŸå¹³åœ°" +DAVIS="戴維斯" +DELBE="佩羅海ç˜" +DELPE="佩羅" +DELSOL="洛波塔" +DESRT="塞諾拉大沙漠" +DOWNT="市中心" +DTVINE="好麥塢市中心" +EAST_V="æ±å¥½éº¥å¡¢" +EBURO="布羅高地" +ECLIPS="æ—¥è•" +ELGORL="戈多燈塔" +ELSANT="æ±æ´›è–都" +ELYSIAN="安樂島" +GALFISH="加利利" +GALLI="伽利略公園" +GOLF="西部鄉æ‘高爾夫俱樂部" +GRAPES="è‘¡è„ç±½" +GREATC="大墿ž—" +HARMO="和美尼" +HAWICK="éœä¼Šå…‹" +HEART="驚心海ç˜" +HORS="好麥塢賽馬場" +HUD_MG_TRI_ALA="阿拉莫海" +HUD_MG_TRI_VES="卿–¯æ™®å¥‡" +HUMLAB="人é“研究實驗室" +JAIL="åšæž—布魯克監ç„" +KOREAT="å°é¦–爾" +LACT="蘭艾水庫" +LAGO="桑庫多沼地" +LDAM="蘭艾水壩" +LMESA="梅薩" +LOSPFY="洛波塔高速公路" +LOSPUER="洛波塔" +LOSSF="æ´›è–都高速公路" +MGCR_1="å—æ´›è–都" +MGCR_6="卿–¯æ™®å¥‡é‹æ²³" +MGSR_3="雷通峽谷" +MIRR="米羅公園" +MORN="摩寧塢" +MOVIE="æŽå¯Ÿå°Šçˆµ" +MTCHIL="奇力耶德山" +MTGORDO="戈多山" +MTJOSE="å°¤å¤å±±" +MURRI="穆瑞塔高地" +NCHU="北丘瑪墟" +OBSERV="伽利略天文å°" +OCEANA="太平洋" +PALCOV="ä½©ç«‹æ‰˜å°æµ·ç£" +PALETO="佩立托ç£" +PALFOR="佩立托森林" +PALHIGH="巴洛米諾高地" +PALMPOW="帕莫泰勒發電站" +PBLUFF="太平崖" +PBOX="圓帽山" +PROCOB="普羅科皮奧海ç˜" +PROL="北æšå…‹é “" +RANCHO="è—丘" +RGLEN="利金漫幽谷" +RICHM="利金漫" +ROCKF="ç¾…å…‹ç¦å¾·å±±" +RTRAK="紅木賽é“" +SANAND="è–安地列斯" +SANCHIA="è–強斯基山脈" +SANDY="æ²™ç˜æµ·å²¸" +SENORA="塞諾拉高速公路" +SKID="密申羅" +SLAB="背刺城" +SLSANT="å—æ´›è–都" +STAD="花園銀行體育場" +STRAW="æ–¯å“è²åˆ©" +TATAMO="塔塔維昂山" +TERMINA="碼頭" +TEXTI="紡織城" +TONGVAH="通瓦山" +TONGVAV="通瓦谷地" +UTOPIAG="çƒæ‰˜é‚¦èŠ±åœ’" +VCANA="卿–¯æ™®å¥‡é‹æ²³" +VESP="卿–¯æ™®å¥‡" +VINE="好麥塢" +WINDF="朗æ©ï¼Žè‰¾ç‰¹æ¢…茲風車農場" +WMIRROR="米羅車é“西段" +WVINE="西好麥塢" +ZANCUDO="桑庫多河" +ZENORA="塞諾拉高速公路" diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index 0890c945326032de167ca1c2e830ea69c3d3a935..8b620e235c46595c44bc1cd69094c173ea6a9d75 100755 GIT binary patch delta 5031 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 Lj2UwJ9+&?w_pB=Q delta 3498 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 IKD}7<span style=" font-weight:600;">gta5sync</span><br/><br/>Ein Projekt zum ansehen und synchronisieren von Grand Theft Auto 5 Snapmatic Bilder und Spielständen<br/><br/>Projektversion: %1<br/>Gebaut mit Qt %2<br/>Läuft auf Qt %3<br/><br/>Copyright &copy; <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync is lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> + Using %1 %2 + Using specific library, example Using libmyfuck + Verwendet %1 %2 + + + + Translated by %1 + Translated by translator, example Translated by Syping + Übersetzt von %1 + + + Using %1 %2 + Exp. Using libmyfuck Verwendet %1 %2 Translated by %1 + Exp. Translated by Syping Übersetzt von %1 - - Using %1 %2 - Exp. Using libmyfuck - Verwendet %1 %2 - - - - Translated by %1 - Exp. Translated by Syping - Übersetzt von %1 - - - NAME_OF_TRANSLATOR Your Name (The person behind your screen looking at this text!) + Syping + + + TRANSLATOR_PROFILE + mailto: http:// https:// Exp. https://github.com/Syping/ + https://github.com/Syping/ + + + + NAME_OF_TRANSLATOR + Enter your name there Syping - + TRANSLATOR_PROFILE - mailto: http:// https:// Exp. https://github.com/Syping/ + Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage https://github.com/Syping/ - + 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> @@ -200,17 +212,47 @@ Snapmatic Bilder und Spielständen Copyright &copy; <a href="%1">%2</a> %3<br/>%4 ist lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> Pictures and Savegames Ein Projekt zum ansehen und synchronisieren von<br/> Grand Theft Auto V Snapmatic Bilder und Spielständen + + + Release + Release + + + + Release Candidate + Release Candidate + + + + Daily Build + Daily Build + + + + Developer + Entwickler + + + + Beta + Beta + + + + Alpha + Alpha + CrewDatabase - + No Crew Keine Crew @@ -305,30 +347,110 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen Einstellungen - &Keep Aspect Ratio - Seitenverhältnis &behalten + Seitenverhältnis &behalten - &Ignore Aspect Ratio - Seitenverhältnis &ignorieren + Seitenverhältnis &ignorieren - &Avatar - &Avatar + &Avatar - + Keep Aspect Ratio + Seitenverhältnis behalten + + + + Ignore Aspect Ratio + Seitenverhältnis ignorieren + + + + Avatar + Avatar + + + Background Colour: <span style="color:rgb(%1,%2,%3)">%4</span> + Hintergrundfarbe: <span style="color:rgb(%1,%2,%3)">%4</span> + + + + + + Background Colour: <span style="color: %1">%1</span> + Hintergrundfarbe: <span style="color: %1">%1</span> + + + + ... + ... + + + + Import picture + Bild importieren + + + &OK &OK - + + Discard picture + Bild verwerfen + + + &Cancel Abbre&chen + + Select Colour + Farbe auswählen + + + Are you sure to use a square image outside of the Avatar Zone? +When you plan to use it as Avatar the picture will be cut! + Bist du sicher ein Quadrat Bild außerhalb der Avatar Zone zu verwenden? +Wenn du planst es als Avatar zu verwenden das Bild wird abgetrennt! + + + + 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... + + + + MapPreviewDialog + + Map Preview + Map Vorschau + + + Snapmatic Coordinate Viewer + Snapmatic Koordinatenansicht + + + + Snapmatic Map Viewer + Snapmatic Kartenansicht + OptionsDialog @@ -509,12 +631,22 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen + Apply changes + Änderungen übernehmen + + + &OK OK, Cancel, Apply &OK - + + Discard changes + Änderungen verwerfen + + + &Cancel OK, Cancel, Apply Abbre&chen @@ -525,48 +657,60 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen %1 (%2 wenn verfügbar) [sys] - System System like PC System - System + System - %1 (%2 if available) System like PC System = %1, System Language like Deutsch = %2 - %1 (%2 wenn verfügbar) + %1 (%2 wenn verfügbar) - - + %1 %1 %1 - The new Custom Folder will initialize after you restart %1. - Der eigene Ordner wird initialisiert sobald du %1 neugestartet hast. + Der eigene Ordner wird initialisiert sobald du %1 neugestartet hast. The new Custom Folder initialize after you restart %1. Der eigene Ordner initialisiert sobald du %1 neugestartet hast. - - The language change will take effect after you restart %1. - Die Änderung der Sprache nimmt Effekt sobald du %1 neugestartet hast. + + %1 (Next Closest Language) + First language a person can talk with a different person/application. "Native" or "Not Native". + %1 (Erste näheste Sprache) - + + System + System in context of System default + System + + + + The new Custom Folder will initialise after you restart %1. + Der eigene Ordner wird initialisiert sobald du %1 neugestartet hast. + + + The language change will take effect after you restart %1. + Die Änderung der Sprache nimmt Effekt sobald du %1 neugestartet hast. + + + No Profile No Profile, as default Kein Profil - - - + + + Profile: %1 Profil: %1 @@ -603,7 +747,7 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen <span style=" font-weight:600;">Erstellt: </span>%8 - + <span style=" font-weight:600;">Title: </span>%6<br/> <span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> <span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> @@ -614,14 +758,28 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen <span style=" font-weight:600;">Erstellt: </span>%8 - &Export - &Exportieren + &Exportieren - + + Manage picture + Bild verwalten + + + + &Manage + &Verwalten + + + + Close viewer + Ansicht schließen + + + &Close - &Schließen + S&chließen <span style=" font-weight:600;">Location: </span>%1, %2, %3 <br><span style=" font-weight:600;">Players: </span>%4<br><span style=" font-weight:600;">Crew ID: </span>%5 @@ -648,8 +806,8 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen <span style=" font-weight:600;">Crew ID: </span>%5 - - + + Export Exportieren @@ -658,22 +816,52 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen Kopieren - Close - Schließen + Schließen - Export as &JPG picture... - Exportiere als &JPG Bild... + Exportiere als &JPG Bild... + + + + Export as &Picture... + Exportiere als &Bild... - Export as &GTA Snapmatic... - Exportiere als &GTA Snapmatic... + Exportiere als &GTA Snapmatic... - + + Export as &Snapmatic... + Exportiere als &Snapmatic... + + + Edi&t + Bearbei&ten + + + + Open &Map View... + &Kartenansicht öffnen... + + + + &Edit Properties... + Eigenschaften bearb&eiten... + + + &Other + &Andere + + + &Advanced + Advanced for more options + Erweitert (&A) + + + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -682,19 +870,31 @@ Taste 2 - Overlay umschalten Pfeiltasten - Navigieren - - + + Snapmatic Picture Viewer Snapmatic Bildansicht - - + + Failed at %1 Fehlgeschlagen bei %1 - + + + No Crew + Keine Crew + + + + + No Players + Keine Spieler + + + Avatar Preview Mode Press 1 for Default View Avatar Vorschaumodus @@ -731,19 +931,15 @@ Drücke A für Standardansicht Avatar Vorschaumodus<br>Drücke A für Standardansicht - - No player - Keine Spieler + Keine Spieler - - No crew - Keine Crew + Keine Crew - + Unknown Location Unbekannter Standort @@ -752,59 +948,80 @@ Drücke A für Standardansicht Exportiere Bild... - Export as JPG picture... - Exportiere als JPG Bild... + Exportiere als JPG Bild... - JPEG picture (*.jpg) - JPEG Bild (*.jpg) + JPEG Bild (*.jpg) - + Portable Network Graphics (*.png) Portable Network Graphics (*.png) - - - - Export as JPG picture - Exportiere als JPG Bild + Exportiere als JPG Bild - - + + Overwrite %1 with current Snapmatic picture? Überschreibe %1 mit aktuellen Snapmatic Bild? - - - - - - Export as GTA Snapmatic - Exportiere als GTA Snapmatic + Exportiere als GTA Snapmatic - - + + Failed to overwrite %1 with current Snapmatic picture Fehlgeschlagen beim Überschreiben von %1 mit aktuellen Snapmatic Bild - - - + + Export as Picture... + Exportiere als Bild... + + + + JPEG Graphics (*.jpg *.jpeg) + JPEG Graphics (*.jpg *.jpeg) + + + + + + + Export as Picture + Exportiere als Bild + + + + + Failed to export current Snapmatic picture Fehlgeschlagen beim Exportieren vom aktuellen Snapmatic Bild - + + Export as Snapmatic... + Exportiere als Snapmatic... + + + + + + + + + Export as Snapmatic + Export as Snapmatic + + + Exported Snapmatic to "%1" because of using the .auto extension. Snapmatic wurde wegen Benutzung der .auto Erweiterung zu "%1" exportiert. @@ -821,22 +1038,21 @@ Drücke A für Standardansicht Exporti - Export as GTA Snapmatic... - Exportiere als GTA Snapmatic... + Exportiere als GTA Snapmatic... - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + GTA V Raw Export (*.auto) GTA V Roher Export (*.auto) - + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) @@ -857,9 +1073,8 @@ Drücke A für Standardansicht JPEG Bild (*.jpg);;Portable Network Graphics (*.png) - Export picture - Bild exportieren + Bild exportieren Snapmatic Picture Exporter @@ -870,8 +1085,8 @@ Drücke A für Standardansicht Beim Speichern des Bildes ist ein Fehler aufgetreten - - + + No valid file is selected Keine gültige Datei wurde ausgewählt @@ -890,27 +1105,31 @@ Drücke A für Standardansicht Lade Datei %1 von %2 Dateien - + %1 %2 %1 %2 - - Import exported file - Importiere exportierte Datei + + Import file + Importiere Datei - + Import exported file + Importiere exportierte Datei + + + &Import... &Importieren... - + Close profile Profil schließen - + &Close S&chließen @@ -931,29 +1150,30 @@ Drücke A für Standardansicht Profil schließen - + Loading... Lade... - - + + Import... Importieren... - - - - - - - - - - + + + + + + - + + + + + + Import Importieren @@ -962,41 +1182,49 @@ Drücke A für Standardansicht Alle Profildateien (SGTA* PGTA*) - Importable files (*.g5e *.jpg *.png SGTA* PGTA*) - Importfähige Dateien (*.g5e *.jpg *.png SGTA* PGTA*) + Importfähige Dateien (*.g5e *.jpg *.png SGTA* PGTA*) - - + + Savegames files (SGTA*) Spielstanddateien (SGTA*) - - + + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) - All image files (*.jpg *.png) - Alle Bilddateien (*.jpg *.png) + Alle Bilddateien (*.jpg *.png) - - + + Importable files (%1) + Importfähige Dateien (%1) + + + + All image files (%1) + Alle Bilddateien (%1) + + + + All files (**) Alle Dateien (**) - - + + Import file %1 of %2 files Importiere Datei %1 von %2 Dateien - + Import failed with... %1 @@ -1005,46 +1233,60 @@ Drücke A für Standardansicht %1 - - + + 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 of not valid file format - Kann %1 nicht importieren weil das Dateiformat nicht gültig ist + + Can't import %1 because file can't be parsed properly + Kann %1 nicht importieren weil die Datei nicht richtig gelesen werden kann - + + Can't import %1 because file format can't be detected + Kann %1 nicht importieren weil das Dateiformat nicht erkannt werden kann + + + + Initialising export... + Initialisiere Export... + + + Can't import %1 because of not valid file format + Kann %1 nicht importieren weil das Dateiformat nicht gültig ist + + + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA oder endet mit .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Fehlgeschlagen beim Importieren vom Snapmatic Bild, dieses Bild ist bereits im Spiel - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exportiere Snapmatic Bilder%2<br><br>JPG Bilder machen es möglich sie mit ein Bildansicht Programm zu öffnen<br>Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren<br><br>Exportieren als: - - - + + + No valid file is selected Keine gültige Datei wurde ausgewählt - + Enabled pictures: %1 of %2 Aktivierte Bilder: %1 von %2 @@ -1053,35 +1295,35 @@ Drücke A für Standardansicht Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA - + Failed to import the Snapmatic picture, can't copy the file into profile - Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren + Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren - + Failed to import the Savegame, can't copy the file into profile Fehlgeschlagen beim Importieren vom Spielstand, kann Spielstanddatei nicht ins Profil kopieren - + Failed to import the Savegame, no Savegame slot is left Fehlgeschlagen beim Importieren vom Spielstand, kein Spielstandslot mehr frei - - + + JPG pictures and GTA Snapmatic JPG Bilder und GTA Snapmatic - - + + JPG pictures only Nur JPG Bilder - - + + GTA Snapmatic only Nur GTA Snapmatic @@ -1100,25 +1342,25 @@ Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren Exportieren als: - - + + No Snapmatic pictures or Savegames files are selected Keine Snapmatic Bilder oder Spielstände ausgewählt - - - + + + Remove selected Auswahl löschen - + You really want remove the selected Snapmatic picutres and Savegame files? Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Fehlgeschlagen beim kompletten entfernen der ausgewählten Snapmatic Bilder und/oder der Spielstanddateien @@ -1139,10 +1381,10 @@ Exportieren als: Fehlgeschlagenen beim Import vom Spielstand weil kein Spielstandslot mehr übrig ist - - - - + + + + Export selected Auswahl exportieren @@ -1163,21 +1405,20 @@ Exportieren als: Wie sollen wir mit den Snapmatic Bilder umgehen? - + Export selected... Auswahl exportieren... - Initializing export... - Initialisiere Export... + Initialisiere Export... Initializing... Initialisierung... - + Export failed with... %1 @@ -1200,20 +1441,20 @@ Exportieren als: Aktueller Exportiervorgang: %1 - - - + + + Export file %1 of %2 files 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) @@ -1221,12 +1462,12 @@ Exportieren als: QApplication - + Font Schrift - + Selected Font: %1 Ausgewähle Schrift: %1 @@ -1240,12 +1481,12 @@ Exportieren als: Spielstandanzeiger - + <span style=" font-weight:600;">Savegame</span><br><br>%1 <span style=" font-weight:600;">Spielstand</span><br><br>%1 - + &Export &Exportieren @@ -1254,7 +1495,7 @@ Exportieren als: &Kopieren - + &Close S&chließen @@ -1294,12 +1535,12 @@ Exportieren als: SPIELSTAND - %1<br>%2 - + View Ansehen - + Export Exportieren @@ -1309,14 +1550,14 @@ Exportieren als: Kopieren - + Delete Löschen - - - + + + Delete savegame Savegame löschen @@ -1326,13 +1567,13 @@ Exportieren als: Spielstand exportieren... - + SAVE %3 - %1<br>%2 SPIELSTAND %3 - %1<br>%2 - - + + WRONG FORMAT FALSCHES FORMAT @@ -1341,63 +1582,63 @@ Exportieren als: AUTO - + + AUTOSAVE - %1 %2 AUTOSAVE - %1 %2 - + + SAVE %3 - %1 %2 SPIELSTAND %3 - %1 %2 - + UNKNOWN UNKNOWN - + Are you sure to delete %1 from your savegames? Bist du sicher %1 von deinen Spielständen zu löschen? - + Failed at deleting %1 from your savegames Fehlgeschlagen beim Löschen %1 von deinen Spielständen - + &View A&nsehen - + &Remove Entfe&rnen - - + &Select Au&swählen - + &Deselect A&bwählen - - + Select &All &Alles auswählen - + &Deselect All Alles a&bwählen @@ -1426,17 +1667,17 @@ Exportieren als: Umschalt+S - + View savegame Spielstand ansehen - + Copy savegame Spielstand kopieren - + &Export &Exportieren @@ -1512,7 +1753,7 @@ Exportieren als: - + Snapmatic Properties Snapmatic Eigenschaften @@ -1556,7 +1797,7 @@ Exportieren als: Meme - + Snapmatic Title Snapmatic Titel @@ -1567,20 +1808,20 @@ Exportieren als: - + Crew: %1 (%2) Crew: %1 (%2) - + Title: %1 (%2) Titel: %1 (%2) - - + + Appropriate: %1 Angemessen: %1 @@ -1592,7 +1833,7 @@ Exportieren als: Qualify as Avatar automatically at apply - Beim Übernehmen als Avatar qualifizieren + Beim Übernehmen als Avatar qualifizieren @@ -1618,40 +1859,40 @@ Exportieren als: Cancel - - + + Edit Bearbeiten - + Yes Yes, should work fine Ja - + No No, could lead to issues Nein - + 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: @@ -1659,7 +1900,7 @@ Exportieren als: SnapmaticPicture - + PHOTO - %1 FOTO - %1 @@ -1672,44 +1913,44 @@ Exportieren als: Snapmatic Widget - + PHOTO - 00/00/00 00:00:00 FOTO - 00/00/00 00:00:00 - + View Ansehen - + Copy Kopieren - + Export Exportieren - + Delete Löschen - - - + + + 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? - + Edi&t Bearbei&ten @@ -1722,7 +1963,7 @@ Exportieren als: &Im Spiel deaktivieren - + &Export &Exportieren @@ -1735,12 +1976,12 @@ Exportieren als: Exportiere als &GTA Snapmatic - + Show &In-game &Im Spiel anzeigen - + Hide &In-game &Im Spiel ausblenden @@ -1753,49 +1994,55 @@ Exportieren als: FOTO - %1 - + &Edit Properties... &Eigenschaften bearbeiten... - Export as &JPG picture... - Exportiere als &JPG Bild... + Exportiere als &JPG Bild... + + + + Export as &Picture... + Exportiere als &Bild... - Export as &GTA Snapmatic... - Exportiere als &GTA Snapmatic... + Exportiere als &GTA Snapmatic... - + + Export as &Snapmatic... + Exportiere als &Snapmatic... + + + &View A&nsehen - + &Remove Entfe&rnen - - + &Select Au&swählen - + &Deselect A&bwählen - - + Select &All Alles &auswählen - + &Deselect All Alles a&bwählen @@ -1824,17 +2071,17 @@ Exportieren als: Umschalt+S - + View picture Bild ansehen - + Copy picture Bild kopieren - + Export picture Bild exportieren @@ -1843,7 +2090,7 @@ Exportieren als: Bist du sicher %1 von deinen Snapmatic Bilder zu löschen? - + Failed at deleting %1 from your Snapmatic pictures Fehlgeschlagen beim Löschen von %1 von deinen Snapmatic Bildern @@ -1883,7 +2130,7 @@ Exportieren als: Über gta5sync - + Ctrl+A Strg+A @@ -1896,7 +2143,7 @@ Exportieren als: Optionen - + Ctrl+O Strg+O @@ -1905,7 +2152,7 @@ Exportieren als: Alles auswählen - + Ctrl+S Strg+S @@ -1922,7 +2169,7 @@ Exportieren als: Auswahl exportieren - + Ctrl+E Strg+E @@ -1931,17 +2178,17 @@ Exportieren als: Auswahl löschen - + Ctrl+D Strg+D - + Exit Beenden - + &Selection visibility Auswahl &Sichtbarkeit @@ -1950,12 +2197,12 @@ Exportieren als: &Über Produkt - + &Exit B&eenden - + Ctrl+Q Strg+Q @@ -1970,22 +2217,33 @@ Exportieren als: %1 %2 - + + Reload profile overview + Übersicht der Profile neuladen + + + + Close %1 + Close %1 <- (gta5view/gta5sync) - %1 will be replaced automatically + Schließe %1 + + + &File &Datei - + &Help &Hilfe - + &Edit Bearb&eiten - + &Profile &Profil @@ -1998,43 +2256,43 @@ Exportieren als: &Über gta5sync - + Close &Profile &Profil schließen - + Ctrl+End Strg+Ende - + Ctrl+Del Strg+Entf - + &Open File... Datei &öffnen... - - + + Select &GTA V Folder... Wähle &GTA V Ordner... - + Ctrl+G Strg+G - + Show In-gam&e Im Spiel anzeig&en - + Hi&de In-game Im Spiel ausblen&den @@ -2047,7 +2305,7 @@ Exportieren als: Im Spiel aktivier&en - + Shift+E Umschalt+E @@ -2056,12 +2314,12 @@ Exportieren als: Im Spiel &deaktivieren - + Shift+D Umschalt+D - + &Close S&chließen @@ -2070,7 +2328,7 @@ Exportieren als: &Profil auswählen - + Ctrl+P Strg+P @@ -2079,27 +2337,27 @@ Exportieren als: &Optionen - + &Settings Ein&stellungen - + Select &All &Alles auswählen - + &Deselect All Alles a&bwählen - + &Export selected... Auswahl &exportieren... - + &Remove selected Auswahl entfe&rnen @@ -2108,12 +2366,12 @@ Exportieren als: Strg+R - + &Import files... Dateien &importieren... - + Ctrl+I Strg+I @@ -2122,16 +2380,17 @@ Exportieren als: GTA V Ordner nicht gefunden! - - + + + Select Profile Profil auswählen - - - - + + + + Select GTA V Folder... Wähle GTA V Ordner... @@ -2140,7 +2399,7 @@ Exportieren als: Wähle GTA V &Ordner... - + Open File... Datei öffnen... @@ -2150,26 +2409,27 @@ Exportieren als: - + %2 - %1 %2 - %1 - - + + + &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 @@ -2186,7 +2446,7 @@ Exportieren als: Grand Theft Auto V Ordner wurde nicht gefunden! - + &Reload &Neuladen diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm new file mode 100644 index 0000000000000000000000000000000000000000..a7fe0365dd97100a27318bb3caf55c4bfcc03940 GIT binary patch literal 18703 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 RA+^I9W6|qS&}?~m{|&% + + + + AboutDialog + + + About %1 + + + + + <span style=" font-weight:600;">%1</span><br/> +<br/> +%2<br/> +<br/> +Version %3<br/> +Created on %4<br/> +Built with Qt %5<br/> +Running with Qt %6<br/> +<br/> +%7 + + + + + &Close + + + + + Using %1 %2 + Using specific library, example Using libmyfuck + + + + + Translated by %1 + Translated by translator, example Translated by Syping + + + + + NAME_OF_TRANSLATOR + Enter your name there + Syping + + + + TRANSLATOR_PROFILE + Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage + https://github.com/Syping/ + + + + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> +Pictures and Savegames + + + + + 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> + + + + + Release + + + + + Release Candidate + + + + + Daily Build + + + + + Developer + + + + + Beta + + + + + Alpha + + + + + CrewDatabase + + + No Crew + + + + + ExportDialog + + + Dialog + + + + + Export Format + + + + + &JPEG/PNG format + + + + + GTA &Snapmatic format + + + + + Export Size + + + + + Default &Size + + + + + &Desktop Size + + + + + &Custom Size + + + + + Custom Size: + + + + + x + + + + + &Export + + + + + &Close + + + + + ImportDialog + + + Import... + + + + + Settings + + + + + + + Background Colour: <span style="color: %1">%1</span> + Background Color: <span style="color: %1">%1</span> + + + + ... + + + + + Avatar + + + + + Ignore Aspect Ratio + + + + + Import picture + + + + + &OK + + + + + Discard picture + + + + + &Cancel + + + + + 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... + + + + MapPreviewDialog + + + Snapmatic Map Viewer + + + + + OptionsDialog + + + %1 - Settings + + + + + Profiles + + + + + Content Open/Select Mode + + + + + Open with Singleclick + + + + + Open with Doubleclick + + + + + Select with Singleclick + + + + + Default Profile + + + + + Custom GTA V Folder + + + + + Force using Custom Folder + + + + + ... + + + + + Pictures + + + + + Export Size + + + + + Default: %1x%2 + + + + + Screen Resolution: %1x%2 + + + + + + Custom Size: + + + + + x + + + + + Ignore Aspect Ratio + + + + + Export Quality + + + + + Enable Custom Quality + + + + + Quality: + + + + + %1% + + + + + Picture Viewer + + + + + Enable Navigation Bar + + + + + Players + + + + + ID + + + + + Name + + + + + + Language + + + + + Sync + + + + + Sync is not implemented at current time + + + + + Apply changes + + + + + &OK + OK, Cancel, Apply + + + + + Discard changes + + + + + &Cancel + OK, Cancel, Apply + + + + + %1 (Next Closest Language) + First language a person can talk with a different person/application. "Native" or "Not Native". + + + + + System + System in context of System default + + + + + %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 + + + + + PictureDialog + + + %1 - Snapmatic Picture Viewer + + + + + <span style=" font-weight:600;">Title: </span>%6<br/> +<span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> +<span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> +<span style=" font-weight:600;">Created: </span>%8 + + + + + Manage picture + + + + + &Manage + + + + + Close viewer + + + + + &Close + + + + + Export as &Picture... + + + + + Export as &Snapmatic... + + + + + Open &Map View... + + + + + &Edit Properties... + + + + + 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 + + + + + Export as Picture... + + + + + + Export + + + + + JPEG Graphics (*.jpg *.jpeg) + + + + + Portable Network Graphics (*.png) + + + + + + + + Export as Picture + + + + + + Overwrite %1 with current Snapmatic picture? + + + + + + Failed to overwrite %1 with current Snapmatic picture + + + + + + + Failed to export current Snapmatic picture + + + + + + No valid file is selected + + + + + Export as Snapmatic... + + + + + GTA V Export (*.g5e) + + + + + GTA V Raw Export (*.auto) + + + + + Snapmatic pictures (PGTA*) + + + + + + + + + + Export as Snapmatic + + + + + Exported Snapmatic to "%1" because of using the .auto extension. + + + + + ProfileInterface + + + Profile Interface + + + + + Loading file %1 of %2 files + + + + + %1 %2 + + + + + Import file + + + + + &Import... + + + + + Close profile + + + + + &Close + + + + + + + Export file %1 of %2 files + + + + + Enabled pictures: %1 of %2 + + + + + Loading... + + + + + + Import... + + + + + + + + + + + + + + + + + Import + + + + + Importable files (%1) + + + + + + GTA V Export (*.g5e) + + + + + + Savegames files (SGTA*) + + + + + + Snapmatic pictures (PGTA*) + + + + + All image files (%1) + + + + + + All files (**) + + + + + + + No valid file is selected + + + + + + Import file %1 of %2 files + + + + + Import failed with... + +%1 + + + + + + Failed to read Snapmatic picture + + + + + + Failed to read Savegame file + + + + + Can't import %1 because file can't be parsed properly + + + + + Can't import %1 because file format can't be detected + + + + + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e + + + + + Failed to import the Snapmatic picture, the picture is already in the game + + + + + Failed to import the Snapmatic picture, can't copy the file into profile + + + + + Failed to import the Savegame, can't copy the file into profile + + + + + Failed to import the Savegame, no Savegame slot is left + + + + + + + + Export selected + + + + + + JPG pictures and GTA Snapmatic + + + + + + JPG pictures only + + + + + + GTA Snapmatic only + + + + + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: + + + + + Export selected... + + + + + Initialising export... + Initializing export... + + + + Export failed with... + +%1 + + + + + + No Snapmatic pictures or Savegames files are selected + + + + + + + Remove selected + + + + + You really want remove the selected Snapmatic picutres and Savegame files? + + + + + Failed at remove the complete selected Snapmatic pictures and/or Savegame files + + + + + All profile files (*.g5e SGTA* PGTA*) + + + + + QApplication + + + Font + + + + + Selected Font: %1 + + + + + SavegameDialog + + + + Savegame Viewer + + + + + <span style=" font-weight:600;">Savegame</span><br><br>%1 + + + + + &Export + + + + + &Close + + + + + Failed at %1 + + + + + SavegameWidget + + + Savegame Widget + + + + + SAVE %3 - %1<br>%2 + + + + + View savegame + + + + + View + + + + + Copy savegame + + + + + + Export + + + + + + + Delete savegame + + + + + Delete + + + + + &View + + + + + &Export + + + + + &Remove + + + + + &Select + + + + + &Deselect + + + + + Select &All + + + + + &Deselect All + + + + + Savegame files (SGTA*) + + + + + All files (**) + + + + + + + + Export Savegame + + + + + Overwrite %1 with current Savegame? + + + + + Failed to overwrite %1 with current Savegame + + + + + Failed to export current Savegame + + + + + No valid file is selected + + + + + Export Savegame... + + + + + + AUTOSAVE - %1 +%2 + + + + + + SAVE %3 - %1 +%2 + + + + + + WRONG FORMAT + + + + + UNKNOWN + + + + + Are you sure to delete %1 from your savegames? + + + + + Failed at deleting %1 from your savegames + + + + + SnapmaticEditor + + + + + Snapmatic Properties + + + + + Snapmatic Type + + + + + Editor + + + + + Selfie + + + + + Regular + + + + + Mugshot + + + + + Meme + + + + + Director + + + + + Snapmatic Values + + + + + + Crew: %1 (%2) + + + + + + Title: %1 (%2) + + + + + + + Appropriate: %1 + + + + + Extras + + + + + Qualify as Avatar automatically at apply + + + + + Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture + + + + + &Apply + + + + + &Cancel + + + + + + Edit + + + + + Yes + Yes, should work fine + + + + + No + No, could lead to issues + + + + + Patching of Snapmatic Properties failed because of I/O Error + + + + + Snapmatic Title + + + + + New Snapmatic title: + + + + + Snapmatic Crew + + + + + New Snapmatic crew: + + + + + SnapmaticPicture + + + PHOTO - %1 + + + + + SnapmaticWidget + + + Snapmatic Widget + + + + + PHOTO - 00/00/00 00:00:00 + + + + + View picture + + + + + View + + + + + Copy picture + + + + + Copy + + + + + Export picture + + + + + Export + + + + + + + Delete picture + + + + + Delete + + + + + Edi&t + + + + + Show &In-game + + + + + Hide &In-game + + + + + &Edit Properties... + + + + + &Export + + + + + Export as &Picture... + + + + + Export as &Snapmatic... + + + + + &View + + + + + &Remove + + + + + &Select + + + + + &Deselect + + + + + Select &All + + + + + &Deselect All + + + + + Are you sure to delete %1 from your Snapmatic pictures? + + + + + Failed at deleting %1 from your Snapmatic pictures + + + + + UserInterface + + + + %2 - %1 + + + + + Select profile + + + + + %1 %2 + + + + + Reload profile overview + + + + + &Reload + + + + + Close %1 + Close %1 <- (gta5view/gta5sync) - %1 will be replaced automatically + + + + + &Close + + + + + &File + + + + + &Help + + + + + &Edit + + + + + &Profile + + + + + &Selection visibility + + + + + + + &About %1 + + + + + Ctrl+P + + + + + &Exit + + + + + Exit + + + + + Ctrl+Q + + + + + Close &Profile + + + + + Ctrl+End + + + + + &Settings + + + + + Ctrl+S + + + + + Select &All + + + + + Ctrl+A + + + + + &Deselect All + + + + + Ctrl+D + + + + + &Export selected... + + + + + Ctrl+E + + + + + &Remove selected + + + + + Ctrl+Del + + + + + &Import files... + + + + + Ctrl+I + + + + + &Open File... + + + + + Ctrl+O + + + + + + Select &GTA V Folder... + + + + + + + + Select GTA V Folder... + + + + + Ctrl+G + + + + + Show In-gam&e + + + + + Shift+E + + + + + Hi&de In-game + + + + + Shift+D + + + + + + + Select Profile + + + + + Open File... + + + + + + + + Open File + + + + + Can't open %1 because of not valid file format + + + + diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index 2b5dd18f811ea60d0e80dc7589cceb57babdac1b..affe051b68b31e35db7fe008f38fc898fa6add59 100644 GIT binary patch delta 2261 zcmX|?c~BH*8pfZQ>7l2)XBdScpdy0A4VQQTg5bd+BH>UjQREmd6OBUTP*as;Fs=zi z7k4v@WD}w>qNPGA#t~)1f&pQ(Mg@W_o882iwZM{cU01W@FqG~?x@!OE`hDH~eQ&?V z^S*uTwq|@-V_Vi<;_>PggGmbu#b#r zK~f8uu@<)MG{Eu&_J1@)2L&82nNEj4M{8XlGve^C`?ThI(qkaZ zp!tvKV<6<3Hup2`OE1@M-zRx+V`!C0I%0nF596!xoauyOlVIpX#h0I zDh(MbXSk|-#&%m>L`jsYvb(zdmQ0kI?6^F6*m%vEid;148R&|W@d2Ilr? z2X^p%ey8^4(4^i&ylQYfe;?UgR3)zbrDB^xHh47dIrT7ARKs; zHCMhBev?yAfkJ4he*okzCz-k29VE}?-Xwnj^3uqk$bIA!@{dBxL7vLHM`~b0z7H2V zMv^781|0{YLsX`B3LovwW-aFn9ZC^vUL|xL2?Y{egn^yEXK5-_M)#}CcwHE1-^+ci z!kxSh!1Y7n$Du1^tT6dW7)y0mFHD^ac}s6O*$5cir)UFwM)f)UJ-{k={r2~ZDc!gA zO+kzxB~pL%Q6@0|kiL1(MvC%?{>oy&7`o>8g?f`TzJI(H6yKUI!l%6*a zSn!5Zv9=so`pD_|EM`n-6~!?Zz@uK2C#qPw=TwG|lQuqx+bH@?UZT3+5$AtM&h-%s zUTC9-wc?f-s@J$rWoWPX!asTMH%Bc0+bzI%O#JPUYPRWPv7x_#?e!P2xx0+qCw`pt zZ`L?b<+@_AZ7387pC$J6P(#yhh~K8Lea&qKy=^sXp5-vi?hEGd*kXuz)XbEZ7-AnD zrD(o0B%d4r(s~W4XPFU~Cd2ll$AHjyLwR>8#hGlV@%cN&_QcTD!?sM(8Txve8UGf; z{SG?h93r`2?B?KkS#rM-O))-@e)Xd-X_5SQ^Spdmvi-7{K3_^`tf%KuQl7|^x>=;6 zMtZ#JOKIC0iYq%n+P0Z=(n}RTEC!aHm#W@k$;2V)KyVo6!>3YncPgh`hIBcaC0$u2 z4dy;et>j4~!Qp`CIqCig11oGKkCXkf<}MwGF0;udx4HaKrR<$T!)~?myc$j@U#q+@ zlqrnACr52=BHvY+WmQ>Vms7^MFWyVezV8fJi{%n90~T3+JCXa9OqHf)l?fqoyQdom zT7rD#ZZ%M(m#@Wgj7Qmy$OAji0g}JUsA84NKUKMIP#&3+#ewsa{N?F~OzA0k^z3C0 zr0?bND->7QD~jg)tH6>WWyZNa*0e~;`GSG0IHT-!W(M4nl>=d!6fge{tH(G2Csn4I zl={b>?El>3%0Y~>A6=COcTTM2{Yq2duW2AsWm>Y*wVj3wqevRC-c)*5j8lYt%0LxA zTrjE(y;n*Nlq=U8IMY*JRKD-{2Ln2x((GXr-ihZvPos2q0tnt}w7lWUQYIQ_|7j-s zKe5*s==U8X$TU_aF*OU{GuFj5Q2hhO#`(OL#*IxHfu4J*Tzk>jY^I}272_xOE7{jZ zV~2(`_8G4xxpUOkm}ZSrq$ypdfUjsL)youK$96Qjs&w%;MVlzf0B=+5o?(h5P%&j% zSj(q3sa(3>bfJ^|KIfjwkVU3T8{Met?WWN(8V($E7N#a;&;jRj)-BA$W|b?an`dsN zV~ekvS3G2G6UxkGLudJ$&N07O&k{(*<`14^ag>YZmTR>ic~dyrdzeW|;LeU+PwyAd(ii9%HIs^AZu8JxQ8ldhijoLN?Ti^avh z-tD+!(^L7f!|v0qu`jT0upjbwan$=>)Y%U|6X6&NaMn2@gHts^Tt(?F`;H*@1v6>2 z8pXWI;Ek;)=c<%f1uFml4LP;kd)>Cemr5%tr_MNTFUWVY4=y?Bm=j@@9bd;rX&l3= M+Pxe#CC8lq2Wk0ih5!Hn delta 3548 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 - Using %1 %2 Exp. Using libmyfuck - Utilise %1 %2 + Utilise %1 %2 + + + Translated by %1 + Exp. Translated by Syping + Traduit par %1 + + + NAME_OF_TRANSLATOR + Your Name (The person behind your screen looking at this text!) + Ganjalo + + + TRANSLATOR_PROFILE + mailto: http:// https:// Exp. https://github.com/Syping/ + https://github.com/Ganjalo/ - Translated by %1 - Exp. Translated by Syping - Traduit par %1 - - - - NAME_OF_TRANSLATOR - Your Name (The person behind your screen looking at this text!) - Ganjalo + Using %1 %2 + Using specific library, example Using libmyfuck + Utilise %1 %2 + Translated by %1 + Translated by translator, example Translated by Syping + Traduit par %1 + + + + NAME_OF_TRANSLATOR + Enter your name there + Ganjalo + + + TRANSLATOR_PROFILE - mailto: http:// https:// Exp. https://github.com/Syping/ + Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage https://github.com/Ganjalo/ - + 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> @@ -156,17 +176,47 @@ et les fichiers de sauvegarde de Grand Theft Auto V Copyright &copy; <a href="%1">%2</a> %3<br/>%4 est distribué sous license <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> Pictures and Savegames Un outil pour gérer et synchroniser les photos Snapmatic<br/> et les fichiers de sauvegarde de Grand Theft Auto V + + + Release + + + + + Release Candidate + + + + + Daily Build + + + + + Developer + + + + + Beta + + + + + Alpha + + CrewDatabase - + No Crew Aucun crew @@ -247,30 +297,87 @@ et les fichiers de sauvegarde de Grand Theft Auto V Paramètres - &Keep Aspect Ratio - &Conserver le rapport d'aspect + &Conserver le rapport d'aspect - &Ignore Aspect Ratio - &Ignorer le rapport d'aspect + &Ignorer le rapport d'aspect - &Avatar - &Avatar + &Avatar - + Keep Aspect Ratio + Conserver le rapport d'aspect + + + + Ignore Aspect Ratio + Déverrouiller le ratio d'aspect + + + + Avatar + Avatar + + + + + + Background Colour: <span style="color: %1">%1</span> + + + + + ... + ... + + + + Import picture + + + + &OK &OK - + + Discard picture + + + + &Cancel A&nnuler + + + 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 + + + + + Select Colour... + + + + + MapPreviewDialog + + + Snapmatic Map Viewer + + OptionsDialog @@ -423,55 +530,77 @@ et les fichiers de sauvegarde de Grand Theft Auto V + Apply changes + + + + &OK OK, Cancel, Apply &OK - + + Discard changes + + + + &Cancel OK, Cancel, Apply &Annuler - %1 (%2 if available) System like PC System = %1, System Language like Deutsch = %2 - %1 (%2 si disponible) + %1 (%2 si disponible) - System System like PC System + Système + + + + %1 (Next Closest Language) + First language a person can talk with a different person/application. "Native" or "Not Native". + + + + + System + System in context of System default Système - - + %1 %1 %1 - + + The new Custom Folder will initialise after you restart %1. + + + The new Custom Folder will initialize after you restart %1. - Le répertoire personnalisé sera actif au prochain lancement de %1. + Le répertoire personnalisé sera actif au prochain lancement de %1. - The language change will take effect after you restart %1. - Le changement de langue sera actif au prochain lancement de %1. + Le changement de langue sera actif au prochain lancement de %1. - + No Profile No Profile, as default Aucun profil - - - + + + Profile: %1 Profil : %1 @@ -484,7 +613,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V %1 - Visionneuse de photo Snapmatic - + <span style=" font-weight:600;">Title: </span>%6<br/> <span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> <span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> @@ -495,47 +624,73 @@ et les fichiers de sauvegarde de Grand Theft Auto V <span style=" font-weight:600;">Créé le : </span>%8 - + + Manage picture + + + Export picture - Exporter la photo + Exporter la photo + + + + &Manage + - &Export - &Exporter + &Exporter + + + + Close viewer + - Close - Fermer la visionneuse + Fermer la visionneuse - + &Close &Fermer - Export as GTA Snapmatic... - Exporter comme Snapmatic... + Exporter comme Snapmatic... - + + Export as Snapmatic... + + + + GTA V Export (*.g5e) GTA V Export (*.g5e) - + GTA V Raw Export (*.auto) GTA V Export Brut (*.g5e) - + Snapmatic pictures (PGTA*) Fichiers GTA Snapmatic (PGTA*) - + + + + + + + Export as Snapmatic + + + + Exported Snapmatic to "%1" because of using the .auto extension. Exporté comme "%1" avec l'utilisation de l'extension .auto. @@ -544,24 +699,36 @@ et les fichiers de sauvegarde de Grand Theft Auto V Tous les fichiers (**) - - - - - - Export as GTA Snapmatic - Exporter comme GTA Snapmatic + Exporter comme GTA Snapmatic - - + + Overwrite %1 with current Snapmatic picture? %1 existe déjà. Vous-vous le remplacer ? - - + + Export as Picture... + + + + + JPEG Graphics (*.jpg *.jpeg) + + + + + + + + Export as Picture + + + + + Failed to overwrite %1 with current Snapmatic picture Echec du remplacement de %1 @@ -570,23 +737,45 @@ et les fichiers de sauvegarde de Grand Theft Auto V Echec de la copie - - + + No valid file is selected Fichier invalide - Export as &JPG picture... - Exporter comme image &JPG... + Exporter comme image &JPG... + + + + Export as &Picture... + - Export as &GTA Snapmatic... - Exporter comme &GTA Snapmatic... + Exporter comme &GTA Snapmatic... - + + Export as &Snapmatic... + + + + Edi&t + Édi&ter + + + + Open &Map View... + + + + + &Edit Properties... + Modifier les &propriétés... + + + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -595,19 +784,31 @@ 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 @@ -618,55 +819,45 @@ Appuyer sur 1 pour le mode par défaut Aperçu avatar<br>Appuyer sur A pour la vue par défaut - - No player - Aucun joueur + Aucun joueur - - No crew - Aucun crew + Aucun crew - + Unknown Location Emplacement inconnu - Export as JPG picture... - Exporter comme image JPG... + Exporter comme image JPG... - - + + Export Exporter - JPEG picture (*.jpg) - Image JPEG (*.jpg) + Image JPEG (*.jpg) - + Portable Network Graphics (*.png) Portable Network Graphics (*.png) - - - - Export as JPG picture - Exporter comme image JPG + Exporter comme image JPG - - - + + + Failed to export current Snapmatic picture Échec de l'export de la photo Snapmatic @@ -684,66 +875,71 @@ Appuyer sur 1 pour le mode par défaut Chargement du fichier %1 sur %2 - + %1 %2 %1 %2 - - Import exported file - Importer un profil + + Import file + - + Import exported file + Importer un profil + + + &Import... &Importer... - + Close profile Fermer - + &Close &Fermer - - - + + + Export file %1 of %2 files Copie du fichier %1 sur %2 - + Enabled pictures: %1 of %2 Photos activées : %1 sur %2 - + Loading... Chargement... - - + + Import... Importer... - - - - - - - - - - + + + + + + - + + + + + + Import Importer @@ -752,31 +948,36 @@ Appuyer sur 1 pour le mode par défaut Fichiers de profil GTA (SGTA* PGTA*) - - + + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - - + + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) - - + + All image files (%1) + + + + + All files (**) Tous les fichiers (**) - - + + Import file %1 of %2 files Importation du fichier %1 sur %2 - + Import failed with... %1 @@ -785,111 +986,127 @@ Appuyer sur 1 pour le mode par défaut %1 - - - + + + No valid file is selected Fichier invalide - - + + Importable files (%1) + + + + + 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 of not valid file format - Impossible d'importer %1, format invalide + Impossible d'importer %1, format invalide Failed to import the Snapmatic picture, file not begin with PGTA Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*) - Importable files (*.g5e *.jpg *.png SGTA* PGTA*) - Fichiers importables (*.g5e *.jpg *.png SGTA* PGTA*) + Fichiers importables (*.g5e *.jpg *.png SGTA* PGTA*) - All image files (*.jpg *.png) - Tous les fichiers image (*.jpg *.png) + Tous les fichiers image (*.jpg *.png) - + + Can't import %1 because file can't be parsed properly + + + + + Can't import %1 because file format can't be detected + + + + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*, *.g5e) - + Failed to import the Snapmatic picture, the picture is already in the game Impossible d'importer la photo Snapmatic, un fichier du même nom existe déjà - + Failed to import the Snapmatic picture, can't copy the file into profile Impossible d'importer la photo Snapmatic, impossible de copier le fichier dans le profil - + Failed to import the Savegame, can't copy the file into profile Impossible d'importer la sauvegarde, impossible de copier le fichier dans le profil - + Failed to import the Savegame, no Savegame slot is left Impossible d'importer la sauvegarde, aucun emplacement libre - - - - + + + + Export selected Exporter la sélection - - + + JPG pictures and GTA Snapmatic Images JPG et GTA Snapmatic - - + + JPG pictures only Images JPG seulement - - + + GTA Snapmatic only GTA Snapmatic seulement - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exporter les photos Snapmatic%2<br><br>Les fichiers JPG permettent d'ouvrir les photos avec une visionneuse d'images<br>Les GTA Snapmatic permettent d'importer les photos dans le jeu<br><br>Exporter comme : - + Export selected... Exporter la sélection... - - Initializing export... - Initialisation de l'export... + + Initialising export... + - + Initializing export... + Initialisation de l'export... + + + Export failed with... %1 @@ -898,36 +1115,36 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No Snapmatic pictures or Savegames files are selected Aucun fichier de sauvegarde ou photo Snapmatic sélectionné - - - + + + Remove selected Supprimer la sélection - + You really want remove the selected Snapmatic picutres and Savegame files? Supprimer la sélection ? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Impossible de 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) @@ -935,12 +1152,12 @@ Appuyer sur 1 pour le mode par défaut QApplication - + Font Police - + Selected Font: %1 Police sélectionnée : %1 @@ -954,17 +1171,17 @@ Appuyer sur 1 pour le mode par défaut Gestionnaire de sauvegardes - + <span style=" font-weight:600;">Savegame</span><br><br>%1 <span style=" font-weight:600;">Sauvegarde</span><br><br>%1 - + &Export &Exporter - + &Close &Fermer @@ -982,45 +1199,45 @@ Appuyer sur 1 pour le mode par défaut Sauvegarde - + SAVE %3 - %1<br>%2 SAUVEGARDE %3 - %1<br>%2 - + View savegame Voir la sauvegarde - + View Voir - + Copy savegame Copier la sauvegarde - + Export Exporter - - - + + + Delete savegame Supprimer la sauvegarde - + Delete Supprimer - + &Export &Exporter @@ -1068,69 +1285,69 @@ Appuyer sur 1 pour le mode par défaut Exporter la sauvegarde... - + + AUTOSAVE - %1 %2 SAUVEGARDE AUTO - %1 %2 - + + SAVE %3 - %1 %2 SAUVEGARDE %3 - %1 %2 - - + + WRONG FORMAT Format invalide - + UNKNOWN Inconnu - + Are you sure to delete %1 from your savegames? Supprimer %1 ? - + Failed at deleting %1 from your savegames Impossible de supprimer %1 - + &View &Voir - + &Remove &Supprimer - - + &Select &Sélectionner - + &Deselect &Déselectionner - - + Select &All Sélectionner to&ut - + &Deselect All &Déselectionner tout @@ -1140,7 +1357,7 @@ Appuyer sur 1 pour le mode par défaut - + Snapmatic Properties Propriétés Snapmatic @@ -1184,7 +1401,7 @@ Appuyer sur 1 pour le mode par défaut Meme - + Snapmatic Title Titre Snapmatic @@ -1195,20 +1412,20 @@ Appuyer sur 1 pour le mode par défaut - + Crew: %1 (%2) Crew : %1 (%2) - + Title: %1 (%2) Titre : %1 (%2) - - + + Appropriate: %1 Valide : %1 @@ -1238,42 +1455,42 @@ 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 - + 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 : @@ -1281,7 +1498,7 @@ Appuyer sur 1 pour le mode par défaut SnapmaticPicture - + PHOTO - %1 PHOTO - %1 @@ -1294,126 +1511,132 @@ Appuyer sur 1 pour le mode par défaut Snapmatic - + PHOTO - 00/00/00 00:00:00 Photo - 00/00/00 00:00:00 - + View picture Voir la photo - + View Voir - + Copy picture Copier la photo - + Copy Copier - + Export picture Exporter la photo - + Export Exporter - - - + + + Delete picture Supprimer la photo - + Delete 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 - + Edi&t Édi&ter - + Show &In-game &Visible en jeu - + Hide &In-game &Invisible en jeu - + &Edit Properties... Modifier les &propriétés... - + &Export &Exporter - Export as &JPG picture... - Exporter comme image &JPG... + Exporter comme image &JPG... + + + + Export as &Picture... + - Export as &GTA Snapmatic... - Exporter comme &GTA Snapmatic... + Exporter comme &GTA Snapmatic... - + + Export as &Snapmatic... + + + + &View &Voir - + &Remove S&upprimer - - + &Select &Sélectionner - + &Deselect &Déselectionner - - + Select &All Sélectionner &tout - + &Deselect All &Déselectionner tout @@ -1436,31 +1659,42 @@ Appuyer sur 1 pour le mode par défaut + Reload profile overview + + + + &Reload &Rafraîchir - + + Close %1 + Close %1 <- (gta5view/gta5sync) - %1 will be replaced automatically + + + + &Close Fer&mer - + &File &Fichier - + &Help Ai&de - + &Edit &Éditer - + &Profile &Profil @@ -1469,182 +1703,184 @@ Appuyer sur 1 pour le mode par défaut &À propos de gta5sync - + Ctrl+P Ctrl+P - + &Exit &Quitter - + Exit Quitter - + Ctrl+Q Ctrl+Q - + Close &Profile Fermer le &profil - + Ctrl+End Ctrl + Fin - + &Settings Paramètre&s - + Ctrl+S Ctrl+S - + Select &All Sélectionner &tout - + Ctrl+A Ctrl+A - + &Deselect All &Désélectionner tout - + Ctrl+D Ctrl+D - + &Export selected... &Exporter la sélection... - + Ctrl+E Ctrl+E - + &Remove selected &Supprimer la sélection - + Ctrl+Del Ctrl+Del - + &Import files... &Importer... - + Ctrl+I Ctrl+I - + &Open File... &Ouvrir... - + Ctrl+O Ctrl+O - - + + Select &GTA V Folder... Modifier l'emplacement de &GTA V... - - - - + + + + Select GTA V Folder... Modifier l'emplacement de GTA V... - + Ctrl+G Ctrl+G - + Show In-gam&e Rendre visible &en jeu - + Shift+E Shift+E - + &Selection visibility &Visibilité de la sélection - + Hi&de In-game Ren&dre invisible en jeu - + Shift+D Shift+D - + %2 - %1 %2 - %1 - - + + + &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 diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index 6a271c0e64bef67eda16b519391756c41112d962..ebb1842d4ba233af9c2e6d19771f73ac68e93d5c 100644 GIT binary patch delta 2192 zcmXAqd0Z6d8OMLKJIn0M?6PvBVnnElKoEfi4&V1gh(adv&XMs!^;{G>)xd{-PMPSB0h_-Gn3Lir3%?75H!Vpb^ zso5~hAYFICa5Mq%^oODQJdnIrV_r3kb#v%Q0RqC_27YlwW4<>6hYZh4MBtF!d2b-_ z(paEiI0Em7k~0z1k_z}55Hw^jCKR@x7jq_J`s5^f`xHr~jBx%Dq--K5TangCW*5Vj zmj$@*#(PJ4=y@3$mblR29XM3g0XQAT$tRUGydHg5xL-MqJNpbk+F?8>&!B_z1?Agd zV7iaS%yy0W-`RvwANm2qvW2qTK}MP-tPXz!q$t9#YZn2de1$L4o&yn|3I8=81H$dP z1?RbMu1&XmQ#P=mL045#4tR~w?Jb(b{f{+9PtqM&JB4=gbO$4A03l4HbX}u&mB#V5 zXl*g|zQ+6}-J#+>;FUIAQ7Ay4}gV@Br~`0I>~d3(#apmX7YbzKly@M^A{Vp@l;_RDZqxp_qfpW#ToHXa03uK zQsdk&#UmT@0Qsiatd=nHUa@sg1jYG|*u7>4;Pb7<*aI4~-xs@2ZRGc1;+=)ffZIy( zanA+PC_ekdO2_6K#G!NH83y+QI~j1p5N*Ji?S_Jj?LcCsVfo(0z=Z!8YJ(X;`dYq=08;B9x&>L5@l~R<^#`R;qqR1S^)^@gI`etLtr_4yeQ)7QK9daHmd!1?Hz=@E( zuEp}AN%FYI{uHC1JYgNrE2}iRSY%tu&T4wTL0%{^mF_p>lAZK8DN=rY21S*>UVgod zG}OqeehdSm-;^u1vs6-nyfwtixo}CYZ_8j89Fsd^S;|*D0kf>>S1H;m49+wkf{pH0+VBj9t&kLWFT~jXHs{|HXl&*LI zm{zECuQ|a|+dkG7)5dC?UZFATEv0vK4kNTER}T&_rFP}^@lL>cSh;(FqOyjo!biVh zZQoLdpXgvsBh`Y-3?ycmy3v^#@bFf*TC=H*W$M=CK2E;V8naHS)zA4~S>&c}!)^Be zq77<|7bn%M3u{-n`m&>U-~C?`~y<2PKP=!?zS?x_@w|Gl9F4L>xW zY+;{|{y<~ccjmM6JQ#7K`F1%C2SqrGLlZK1hVzM{SJ{rAX^iQ#j95m;!m2GX1FUVz zMN4_laYlH~@~di=!1%(l??nzpciqz1MLX^xmb0grxk;-mgMU;)INK9wZE=ZXi!n*H zpY!y$2e`Z1pLu%Q2i#ok zyRCSZecgCh$0ffOy}f;0q9ZY|Nbe9sTm^ghumJleKR3sYi8Gz-1(7=(XQS>Yj=%(~ P;0R7K`Z{9D_B#I`RApyK delta 3630 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 diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index 3a3e584..1518d41 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -71,43 +71,63 @@ Running with Qt %6<br/> Закрыть - Using %1 %2 Exp. Using libmyfuck - ИÑпользует %1 %2 + ИÑпользует %1 %2 + + + Translated by %1 + Exp. Translated by Syping + Перевёл %1 + + + NAME_OF_TRANSLATOR + Your Name (The person behind your screen looking at this text!) + VADemon + + + TRANSLATOR_PROFILE + mailto: http:// https:// Exp. https://github.com/Syping/ + https://github.com/VADemon/ - Translated by %1 - Exp. Translated by Syping - Перевёл %1 - - - - NAME_OF_TRANSLATOR - Your Name (The person behind your screen looking at this text!) - VADemon + Using %1 %2 + Using specific library, example Using libmyfuck + ИÑпользует %1 %2 + Translated by %1 + Translated by translator, example Translated by Syping + Перевёл %1 + + + + NAME_OF_TRANSLATOR + Enter your name there + VADemon + + + TRANSLATOR_PROFILE - mailto: http:// https:// Exp. https://github.com/Syping/ + Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage 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> @@ -116,17 +136,47 @@ Pictures and Savegames Copyright &copy; <a href="%1">%2</a> %3<br/>%4 под лицензией <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> Pictures and Savegames Проект Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра и ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ <br/> Grand Theft Auto V Snapmatic картинок и Ñохранений + + + Release + + + + + Release Candidate + + + + + Daily Build + + + + + Developer + + + + + Beta + + + + + Alpha + + CrewDatabase - + No Crew Вне банды @@ -208,31 +258,88 @@ Grand Theft Auto V Snapmatic картинок и ÑохраненийÐаÑтройки - &Keep Aspect Ratio - О&Ñтавить Ñоотношение Ñторон + О&Ñтавить Ñоотношение Ñторон - &Ignore Aspect Ratio - &Игнорировать Ñоотношение Ñторон + &Игнорировать Ñоотношение Ñторон - &Avatar - &Ðватар + &Ðватар - + Keep Aspect Ratio + ОÑтавить Ñоотношение Ñторон + + + + Ignore Aspect Ratio + Игнорировать Ñоотношение Ñторон + + + + Avatar + Ðватар + + + + + + Background Colour: <span style="color: %1">%1</span> + + + + + ... + ... + + + + Import picture + + + + &OK &ОК - + + Discard picture + + + + &Cancel Я не уверен наÑчет горÑчих клавиш... От&мена + + + 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 + + + + + Select Colour... + + + + + MapPreviewDialog + + + Snapmatic Map Viewer + + OptionsDialog @@ -385,56 +492,78 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений + Apply changes + + + + &OK OK, Cancel, Apply &ОК - + + Discard changes + + + + &Cancel OK, Cancel, Apply От&мена - System System like PC System может быть надо прилагательное + СиÑтема + + + %1 (%2 if available) + System like PC System = %1, System Language like Deutsch = %2 + %1 (%2 еÑли имеетÑÑ) + + + + %1 (Next Closest Language) + First language a person can talk with a different person/application. "Native" or "Not Native". + + + + + System + System in context of System default СиÑтема - - %1 (%2 if available) - System like PC System = %1, System Language like Deutsch = %2 - %1 (%2 еÑли имеетÑÑ) - - - - + %1 %1 %1 - + + The new Custom Folder will initialise after you restart %1. + + + The new Custom Folder will initialize after you restart %1. - Ð”Ñ€ÑƒÐ³Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° будет загружена поÑле перезапуÑка %1. + Ð”Ñ€ÑƒÐ³Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° будет загружена поÑле перезапуÑка %1. - The language change will take effect after you restart %1. - Язык изменитÑÑ Ð¿Ð¾Ñле перезапуÑка %1. + Язык изменитÑÑ Ð¿Ð¾Ñле перезапуÑка %1. - + No Profile No Profile, as default Ðет Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - - - + + + Profile: %1 Профиль: %1 @@ -457,7 +586,7 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений - + <span style=" font-weight:600;">Title: </span>%6<br/> <span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> <span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> @@ -468,23 +597,36 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений - Export picture - ЭкÑпорт картинки + ЭкÑпорт картинки + + + + &Manage + - &Export - &ЭкÑпорт + &ЭкÑпорт - + + Manage picture + + + + + Close viewer + + + + &Close &Закрыть - - + + Export ЭкÑпортировать @@ -493,22 +635,43 @@ Grand Theft Auto V Snapmatic картинок и ÑохраненийКопировать - Close - Закрыть + Закрыть - Export as &JPG picture... - ЭкÑп&ортировать как картинку JPG... + ЭкÑп&ортировать как картинку JPG... + + + + Export as &Picture... + - Export as &GTA Snapmatic... - ЭкÑ&портировать как GTA Snapmatic... + ЭкÑ&портировать как GTA Snapmatic... - + + Export as &Snapmatic... + + + + Edi&t + &Правка + + + + Open &Map View... + + + + + &Edit Properties... + &Изменить ÑвойÑтва... + + + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -517,101 +680,130 @@ Arrow Keys - Navigate Стрелки - ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ - - + + Snapmatic Picture Viewer ПроÑмотрщик фотографий Snapmatic - - + + Failed at %1 Ошибка при %1 - + + + No Crew + Вне банды + + + + + No Players + + + + Avatar Preview Mode Press 1 for Default View Режим проÑмотра аватарок Ðажмите 1 Ð´Ð»Ñ Ñтандартного проÑмотра - - No player - Игроков нет + Игроков нет - - No crew - Без группы + Без группы - + Unknown Location ÐеизвеÑтное меÑто - Export as JPG picture... - ЭкÑпортировать картинкой JPG... + ЭкÑпортировать картинкой JPG... - JPEG picture (*.jpg) - Картинка JPEG (*.jpg) + Картинка JPEG (*.jpg) - + Portable Network Graphics (*.png) Картинка Portable Network Graphics (*.png) - - - - Export as JPG picture - ЭкÑпортировать как картинку JPG + ЭкÑпортировать как картинку JPG - - + + Overwrite %1 with current Snapmatic picture? ПерезапиÑать %1 текущей картинкой Snapmatic? - - - - - - Export as GTA Snapmatic - ЭкÑпортировать как GTA Snapmatic + ЭкÑпортировать как GTA Snapmatic - - + + Failed to overwrite %1 with current Snapmatic picture Ðе удалоÑÑŒ перезапиÑать %1 картинкой Snapmatic - - - + + Export as Picture... + + + + + JPEG Graphics (*.jpg *.jpeg) + + + + + + + + Export as Picture + + + + + + Failed to export current Snapmatic picture Ðе удалоÑÑŒ ÑкÑпортировать текущую картинку Snapmatic - + + Export as Snapmatic... + + + + + + + + + + Export as Snapmatic + + + + Exported Snapmatic to "%1" because of using the .auto extension. Snapmatic был ÑкÑпортирован как "%1" из-за раÑÑˆÐ¸Ñ€ÐµÐ½Ñ Ñ„Ð°Ð¹Ð»Ð°. - - + + No valid file is selected Выбранный файл неверен @@ -620,22 +812,21 @@ Press 1 for Default View Скопировать картинку - Export as GTA Snapmatic... - ЭкÑпортировать как GTA Snapmatic... + ЭкÑпортировать как GTA Snapmatic... - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + GTA V Raw Export (*.auto) GTA V ЭкÑпорт ИÑходника (*.auto) - + Snapmatic pictures (PGTA*) Картинки Snapmatic (PGTA*) @@ -661,27 +852,31 @@ Press 1 for Default View ЗагружаетÑÑ Ñ„Ð°Ð¹Ð» %1 из %2 - + %1 %2 %1 %2 - - Import exported file - Импортировать ÑкÑпортированный файл + + Import file + - + Import exported file + Импортировать ÑкÑпортированный файл + + + &Import... &Импортировать... - + Close profile Закрыть профиль - + &Close &Закрыть @@ -694,29 +889,30 @@ Press 1 for Default View Закрыть профиль - + Loading... Загрузка... - - + + Import... Импортировать... - - - - - - - - - - + + + + + + - + + + + + + Import Импортировать @@ -725,31 +921,31 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (SGTA* PGTA*) - - + + Savegames files (SGTA*) Файлы ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ (SGTA*) - - + + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) - - + + All files (**) Ð’Ñе файлы (**) - - + + Import file %1 of %2 files ИмпортируютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ %1 из %2 - + Import failed with... %1 @@ -758,107 +954,129 @@ Press 1 for Default View %1 - - + + Failed to read Snapmatic picture Ðе удалоÑÑŒ загрузить картинку Snapmatic - - + + Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - Can't import %1 because of not valid file format - Ðе получилоÑÑŒ импортировать %1 из-за неправильного формата файла + Ðе получилоÑÑŒ импортировать %1 из-за неправильного формата файла - - - + + + No valid file is selected Выбранный файл неверен - + Enabled pictures: %1 of %2 Включенные картинки: %1 из %2 - Importable files (*.g5e *.jpg *.png SGTA* PGTA*) - ПодходÑщие Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° файлы (*.g5e *.jpg *.png SGTA* PGTA*) + ПодходÑщие Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° файлы (*.g5e *.jpg *.png SGTA* PGTA*) - All image files (*.jpg *.png) - Ð’Ñе Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (*.jpg *.png) + Ð’Ñе Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (*.jpg *.png) - + + Importable files (%1) + + + + + All image files (%1) + + + + + Can't import %1 because file can't be parsed properly + + + + + Can't import %1 because file format can't be detected + + + + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе удалоÑÑŒ импортировать картинку Snapmatic, название не начинаетÑÑ Ñ PGTA или не заканчиваетÑÑ Ñ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе удалоÑÑŒ импортировать картинку Snapmatic, картинка уже в игре - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе удалоÑÑŒ импортировать картинку Snapmatic, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, can't copy the file into profile Ðе удалоÑÑŒ импортировать Ñохранение, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, no Savegame slot is left Ðе удалоÑÑŒ импортировать Ñохранение, нет пуÑтых Ñчеек под ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + JPG pictures and GTA Snapmatic Картинки JPG и GTA Snapmatic - - + + JPG pictures only Только картинки JPG - - + + GTA Snapmatic only Только GTA Snapmatic - - + + Initialising export... + + + + + No Snapmatic pictures or Savegames files are selected Ðе выделены ни один Snapmatic или Ñохранение - - - + + + Remove selected СнÑть выделение - + You really want remove the selected Snapmatic picutres and Savegame files? Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Ðе удалоÑÑŒ удалить полноÑтью выбранные картинки Snapmatic и/или файлы Ñохранений @@ -879,30 +1097,29 @@ Press 1 for Default View Ðе получилоÑÑŒ имортировать копию ÑохранениÑ, потому что не оÑталоÑÑŒ Ñвободных под них Ñлотов - - - - + + + + Export selected ЭкÑпортировать выделенное - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1ЭÑкпортировать картинки Snapmatic%2<br><br>Картинки JPG можно открыть любым проÑмотрщиком<br>Картинки формата GTA Snapmatic можно Ñнова импортировать в игру<br><br>ЭкÑпортировать как: - + Export selected... Экпортировать выделенное... - Initializing export... - Подготавливаю ÑÑкпорт... + Подготавливаю ÑÑкпорт... - + Export failed with... %1 @@ -911,20 +1128,20 @@ Press 1 for Default View %1 - - - + + + Export file %1 of %2 files ЭкÑпортируетÑÑ Ñ„Ð°Ð¹Ð» %1 из %2 - + All profile files (*.g5e SGTA* PGTA*) Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (*.g5e SGTA* PGTA*) - - + + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -932,12 +1149,12 @@ Press 1 for Default View QApplication - + Font Шрифт - + Selected Font: %1 Выбранный шрифт: %1 @@ -951,17 +1168,17 @@ Press 1 for Default View ПроÑмотрщик Ñохранений - + <span style=" font-weight:600;">Savegame</span><br><br>%1 <span style=" font-weight:600;">Сохранение</span><br><br>%1 - + &Export &ЭкÑпорт - + &Close &Закрыть @@ -991,17 +1208,17 @@ Press 1 for Default View Третий путь (100%) - 00/00/00 00:00:00 - + View savegame ПроÑмотреть Ñохранение - + View ПроÑмотр - + Export ЭкÑпорт @@ -1011,14 +1228,14 @@ Press 1 for Default View Копировать - + Delete Удалить - - - + + + Delete savegame Удалить Ñохранение @@ -1028,84 +1245,84 @@ Press 1 for Default View ЭкÑпортировать Ñохранение... - + SAVE %3 - %1<br>%2 СОХРÐÐЕÐИЕ %3 - %1<br>%2 - - + + WRONG FORMAT ÐЕВЕРÐЫЙ ФОРМÐТ - + + AUTOSAVE - %1 %2 ÐВТОСОХРÐÐЕÐИЕ - %1 %2 - + + SAVE %3 - %1 %2 СОХРÐÐЕÐИЕ %3 - %1 %2 - + UNKNOWN ÐЕИЗВЕСТÐО - + Are you sure to delete %1 from your savegames? Ð’Ñ‹ уверены, что хотите удалить Ñохранение %1? - + Failed at deleting %1 from your savegames Ðе удалоÑÑŒ удалить Ñохранение %1 - + &View &ПроÑмотр - + &Remove &Удалить - - + &Select &Выбрать - + &Deselect Сн&Ñть выбор - - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех - + Copy savegame Копировать Ñохранение - + &Export &ЭкÑпортировать @@ -1165,7 +1382,7 @@ Press 1 for Default View - + Snapmatic Properties СвойÑтва Snapmatic @@ -1206,7 +1423,7 @@ Press 1 for Default View - + Crew: %1 (%2) Банда: %1 (%2) @@ -1216,20 +1433,20 @@ Press 1 for Default View Meme - + Snapmatic Title Заголовок Snapmatic - + Title: %1 (%2) Заголовок: %1 (%2) - - + + Appropriate: %1 Разумные: %1 @@ -1259,40 +1476,40 @@ Press 1 for Default View &Отмена - - + + Edit Правка - + Yes Yes, should work fine Да - + No No, could lead to issues Ðет - + Patching of Snapmatic Properties failed because of I/O Error Ðе удалоÑÑŒ измененить ÑвойÑтва Snapmatic из-за проблемы ввода/вывода - + New Snapmatic title: Ðовый заголовок Snapmatic: - + Snapmatic Crew Банда на Snapmatic - + New Snapmatic crew: ÐÐ¾Ð²Ð°Ñ Ð±Ð°Ð½Ð´Ð° на Snapmatic: @@ -1300,7 +1517,7 @@ Press 1 for Default View SnapmaticPicture - + PHOTO - %1 ФОТО - %1 @@ -1313,126 +1530,132 @@ Press 1 for Default View Виджет Snapmatic - + PHOTO - 00/00/00 00:00:00 ФОТО - 00/00/00 00:00:00 - + View picture ПроÑмотр картинки - + View ПроÑмотр - + Copy Копировать - + Export ЭкÑпорт - + Delete Удалить - - - + + + Delete picture Удалить картинку - + Are you sure to delete %1 from your Snapmatic pictures? Уверены, что хотите удалить %1 из коллекции картинок Snapmatic? - + Failed at deleting %1 from your Snapmatic pictures Ðе удалоÑÑŒ удалить %1 из колелкции картинок Snapmatic - + Edi&t &Правка - + Show &In-game Показывать в &игре - + Hide &In-game Ск&рыть в игре - + &Edit Properties... &Изменить ÑвойÑтва... - + &Export &ЭкÑпорт - Export as &JPG picture... - ЭкÑп&ортировать как картинку JPG... + ЭкÑп&ортировать как картинку JPG... + + + + Export as &Picture... + - Export as &GTA Snapmatic... - ЭкÑ&портировать как GTA Snapmatic... + ЭкÑ&портировать как GTA Snapmatic... - + + Export as &Snapmatic... + + + + &View По&казать - + &Remove У&далить - - + &Select &Выделить - + &Deselect Сн&Ñть выделение - - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех - + Copy picture Скопировать картинку - + Export picture ЭкÑпорт картинки @@ -1454,123 +1677,134 @@ Press 1 for Default View %1 %2 - + + Reload profile overview + + + + + Close %1 + Close %1 <- (gta5view/gta5sync) - %1 will be replaced automatically + + + + &File &Файл - + &Help &Справка - + &Edit &Правка - + &Profile П&рофиль - + &Exit Ð’&ыход - + Exit Выход - + Close &Profile Закрыть п&рофиль - + Ctrl+End Ctrl+End - + &Settings &ÐаÑтройки - + Ctrl+Del Ctrl+Del - + &Import files... &Импортировать файлы... - + Ctrl+I Ctrl+I - - + + Select &GTA V Folder... Выбрать &папку GTA V... - + Ctrl+G Ctrl+G - + Show In-gam&e Показывать в и&гре - + Shift+E Shift+E - + Hi&de In-game Скры&ть в игре - + Shift+D Shift+D - + &Close &Закрыть - + &Selection visibility Ð’&идимоÑть выделение - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех - + &Export selected... &Экпортировать выделенное... - + &Remove selected &Удалить выделенное @@ -1587,7 +1821,7 @@ Press 1 for Default View О программе gta5sync - + Ctrl+A Ctrl+A @@ -1596,81 +1830,83 @@ Press 1 for Default View Закрыть - + Ctrl+Q Ctrl+Q - + Ctrl+P Ctrl+P - + &Open File... &Открыть файл... - + Ctrl+O Ctrl+O - + Ctrl+S Ctrl+S - + Ctrl+E Ctrl+E - + Ctrl+D Ctrl+D - - + + + Select Profile Выбор Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - - - - + + + + Select GTA V Folder... Выбрать папку GTA V... - + %2 - %1 %2 - %1 - - + + + &About %1 &О %1 - + Open File... Открыть файл... - - - - + + + + Open File Открыть файл - + Can't open %1 because of not valid file format Ðе удалоÑÑŒ открыть %1 из-за неверного формата файла @@ -1679,7 +1915,7 @@ Press 1 for Default View gta5sync - + &Reload Пере&загрузить diff --git a/res/mappreview.jpg b/res/mappreview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00496923d32fe9af67c6dfe55df3d105359cb1ab GIT binary patch literal 207939 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
cnf^T}eP!43sW# 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%0D5q4Vta9Ob0n+GyXDDWFG$oKoGne}40jk5TovFt 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 Kap9-_hyU5!Uw`5N literal 0 HcmV?d00001 diff --git a/res/pointmaker-16.png b/res/pointmaker-16.png new file mode 100644 index 0000000000000000000000000000000000000000..3244d6e50852fecd18bee7486b92df4616572b22 GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwtQjy!pvMMHf6>978Pp?@r#$d&oeZa ziqdrjS(kf%AM{W1(sY~eDRacthV`&mT1LgPa=k;FcXXL;V7+I#>0f$#`6CrMr%UW- zE_`^<%M+=8@=)xSg>n_Mgf`uqemnZHSjFOo9NP`|Hq|$pbDg->9x9W1_OE9ne<5cg z%O1gRioc}JEA};*bJg^^%Y93FqV@4XFViN?ZfRzgTh+G{+pe{oOj-Ho+vz8h96wx} s-nm{QQB|k2_GiNWgtj*I>oK1CK3=UelKSUY0R6_`>FVdQ&MBb@0Ls0HJpcdz literal 0 HcmV?d00001 diff --git a/res/pointmaker-24.png b/res/pointmaker-24.png new file mode 100644 index 0000000000000000000000000000000000000000..d3373572cd99c4f7552b25915299ef3d427c0a12 GIT binary patch literal 444 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwtQjy!pvMQ*}ID978<3-%hhGVlotPc^dtLp{1I|$;pZD!ETE$hBYEUCKDgyOy-^U zGnUMHx_tw;WXRrCQ?Fd!`%A&Y^11Ps$gcQ}!XBrVy{-jY6dSC3o z0pm(`o=^W%XrP{W&56>n3Yhrep;(+_M-K6v=7`N!`IetW!( za6WdXWmeX^xLEEF6I^){yVg9mmF{QDjTQSIVRHZ11I4);o=S0U{r2pvu~}65%?iH; k*@ui57VQ17U3Gc=zsfh4?tGeZ8W^|?p00i_>zopr0J}1}ZU6uP literal 0 HcmV?d00001 diff --git a/res/pointmaker-32.png b/res/pointmaker-32.png new file mode 100644 index 0000000000000000000000000000000000000000..610efd47adb3d48e6bd0ce240fb6e8c377148a95 GIT binary patch literal 611 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pk#?_L`iUdT1k0gQ7S`0VrE{6US4X6f{C7i zo}syM-uz^ssh2%n977`9k4{$%Vm1_MQ`XY53`tF8Wje?x;PLJNqn3az3%i5D1W^yZ zMhAuI|G7Qy-G2Md$695fas0CPU!T?{PQDv?$bhH&#b&|kLXr5UCzb)HWuE0dt4e=1 zSurP=`TiIE3)$AMrC1f$u&n+zIos*|)f1Kz?YoU0dfn+1|EQVtQxc@%(&6tS7N?XR zO%OBqb$b0#)k~@`9QE%P=cH4(hasPPw-gxJEXS`@C z=i)XgIcVL=Dz)pu+(S&fu^;>r8{70MmTz!y7T*&bv0x$hJx!ep7g*nmh#{1_{y5h- zuY0p_R+IAYN!ELwADO*ig{s9S{hfz{{cJe8qCmp8L9@gP3+(x}FFICsp*e2fb_|x-aMV`t;prN^>M*)lpmf!n3N5^6&Wagx`hA qNj&YWWV>S2zVnO3U*{~IhwK%z?};{QD9#6_0R~T3KbLh*2~7aojsqY7 literal 0 HcmV?d00001 diff --git a/res/pointmaker-8.png b/res/pointmaker-8.png new file mode 100644 index 0000000000000000000000000000000000000000..a116c729441fee61f374d8ff9a07921195fd4c0c GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwtQjy!pvMMJb*xjv*Sst$iDL8w_|@)-Oq7x}hz5cv*s=S_7k8y+M!&m(t#(|Fts8 zoffHW%6aCecBw4ZDY(XP(QN0o^tQ{kZ=5Y(a>vj7%Wjh<-;lb#*6`rAL#BF}=XGSZ h2Iz_Wsm$~jGM|^3FxPOY(@vm$44$rjF6*2UngCLkOlSZA literal 0 HcmV?d00001 diff --git a/res/qtbase_en_GB.qm b/res/qtbase_en_GB.qm new file mode 100644 index 0000000000000000000000000000000000000000..f88ef8869e2c72f1c18f44a93d77208331255171 GIT binary patch literal 941 zcma)4&npB`9RKbvyV`asQqrcUc$bmlD5;$xyG53fv**pjFlM&-QIbDElyXoGE_)|e zi4=#8a^xZ>7Z*8`;yX)fGi%JZdEfVa-|zc;zCYgJvDS9|vcG%NnK_>=oju3^Py}gf z4IokiY0uYXkjihUpJ8Hs6CipNJ>2o_&e+}N1=_cD`BfF~LEZMf?^hD@ea-04HRNC3 z(OybEoerS;HPw6dhP6J+mIR33Pt7*iwh~hb}wL%ojuxuxRp44PzKddvuT8Q`z8Dx-wA*K!-5jmp$ zMod$gIXWl&52Ox6s?IJLtC4=ERTJz3zn@|fbkr8Y90*9iDlSfQ)8k`7VOS+aDO4(4 z#u`9Sw3!xkzD!i^Q-Ad@jK7{v2`z}eD$9DRGWQ=*Gt3B$YRXchxX1`! zWTq*? + gta5sync_en_US.qm gta5sync_de.qm gta5sync_fr.qm gta5sync_ru.qm diff --git a/res/tr_qt5.qrc b/res/tr_qt5.qrc index f34728d..4adfa51 100644 --- a/res/tr_qt5.qrc +++ b/res/tr_qt5.qrc @@ -1,5 +1,6 @@ + qtbase_en_GB.qm qtbase_de.qm qtbase_fr.qm qtbase_ru.qm diff --git a/uimod/UiModLabel.cpp b/uimod/UiModLabel.cpp index 0051a7a..27c6a7d 100755 --- a/uimod/UiModLabel.cpp +++ b/uimod/UiModLabel.cpp @@ -1,75 +1,75 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "UiModLabel.h" -#include -#include - -UiModLabel::UiModLabel(const QString &text, QWidget *parent) : QLabel(parent) -{ - setText(text); -} - -UiModLabel::UiModLabel(QWidget *parent, const QString &text) : QLabel(parent) -{ - setText(text); -} - -UiModLabel::UiModLabel(QWidget *parent) : QLabel(parent) -{ -} - -UiModLabel::~UiModLabel() -{ -} - -void UiModLabel::paintEvent(QPaintEvent *ev) -{ - QLabel::paintEvent(ev); - emit labelPainted(); -} - -void UiModLabel::mouseMoveEvent(QMouseEvent *ev) -{ - QLabel::mouseMoveEvent(ev); - emit mouseMoved(); -} - -void UiModLabel::mousePressEvent(QMouseEvent *ev) -{ - QLabel::mousePressEvent(ev); - emit mousePressed(ev->button()); -} - -void UiModLabel::mouseReleaseEvent(QMouseEvent *ev) -{ - QLabel::mouseReleaseEvent(ev); - emit mouseReleased(ev->button()); -} - -void UiModLabel::mouseDoubleClickEvent(QMouseEvent *ev) -{ - QLabel::mouseDoubleClickEvent(ev); - emit mouseDoubleClicked(ev->button()); -} - -void UiModLabel::resizeEvent(QResizeEvent *ev) -{ - QLabel::resizeEvent(ev); - emit resized(ev->size()); -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "UiModLabel.h" +#include +#include + +UiModLabel::UiModLabel(const QString &text, QWidget *parent) : QLabel(parent) +{ + setText(text); +} + +UiModLabel::UiModLabel(QWidget *parent, const QString &text) : QLabel(parent) +{ + setText(text); +} + +UiModLabel::UiModLabel(QWidget *parent) : QLabel(parent) +{ +} + +UiModLabel::~UiModLabel() +{ +} + +void UiModLabel::paintEvent(QPaintEvent *ev) +{ + QLabel::paintEvent(ev); + emit labelPainted(); +} + +void UiModLabel::mouseMoveEvent(QMouseEvent *ev) +{ + QLabel::mouseMoveEvent(ev); + emit mouseMoved(); +} + +void UiModLabel::mousePressEvent(QMouseEvent *ev) +{ + QLabel::mousePressEvent(ev); + emit mousePressed(ev->button()); +} + +void UiModLabel::mouseReleaseEvent(QMouseEvent *ev) +{ + QLabel::mouseReleaseEvent(ev); + emit mouseReleased(ev->button()); +} + +void UiModLabel::mouseDoubleClickEvent(QMouseEvent *ev) +{ + QLabel::mouseDoubleClickEvent(ev); + emit mouseDoubleClicked(ev->button()); +} + +void UiModLabel::resizeEvent(QResizeEvent *ev) +{ + QLabel::resizeEvent(ev); + emit resized(ev->size()); +} diff --git a/uimod/UiModLabel.h b/uimod/UiModLabel.h index 545ee27..7d35e87 100755 --- a/uimod/UiModLabel.h +++ b/uimod/UiModLabel.h @@ -1,53 +1,53 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef UIMODLABEL_H -#define UIMODLABEL_H - -#include -#include -#include -#include - -class UiModLabel : public QLabel -{ - Q_OBJECT -public: - UiModLabel(const QString &text, QWidget *parent = 0); - UiModLabel(QWidget *parent, const QString &text); - UiModLabel(QWidget *parent = 0); - ~UiModLabel(); - -protected: - void mouseMoveEvent(QMouseEvent *ev); - void mousePressEvent(QMouseEvent *ev); - void mouseReleaseEvent(QMouseEvent *ev); - void mouseDoubleClickEvent(QMouseEvent *ev); - void paintEvent(QPaintEvent *ev); - void resizeEvent(QResizeEvent *ev); - -signals: - void mouseMoved(); - void mousePressed(Qt::MouseButton button); - void mouseReleased(Qt::MouseButton button); - void mouseDoubleClicked(Qt::MouseButton button); - void labelPainted(); - void resized(QSize newSize); -}; - -#endif // UIMODLABEL_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef UIMODLABEL_H +#define UIMODLABEL_H + +#include +#include +#include +#include + +class UiModLabel : public QLabel +{ + Q_OBJECT +public: + UiModLabel(const QString &text, QWidget *parent = 0); + UiModLabel(QWidget *parent, const QString &text); + UiModLabel(QWidget *parent = 0); + ~UiModLabel(); + +protected: + void mouseMoveEvent(QMouseEvent *ev); + void mousePressEvent(QMouseEvent *ev); + void mouseReleaseEvent(QMouseEvent *ev); + void mouseDoubleClickEvent(QMouseEvent *ev); + void paintEvent(QPaintEvent *ev); + void resizeEvent(QResizeEvent *ev); + +signals: + void mouseMoved(); + void mousePressed(Qt::MouseButton button); + void mouseReleased(Qt::MouseButton button); + void mouseDoubleClicked(Qt::MouseButton button); + void labelPainted(); + void resized(QSize newSize); +}; + +#endif // UIMODLABEL_H diff --git a/uimod/UiModWidget.cpp b/uimod/UiModWidget.cpp index f9dd61f..b517463 100644 --- a/uimod/UiModWidget.cpp +++ b/uimod/UiModWidget.cpp @@ -1,76 +1,76 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "UiModWidget.h" -#include -#include -#include -#include -#include -#include - -UiModWidget::UiModWidget(QWidget *parent) : QWidget(parent) -{ - filesMode = false; -} - -UiModWidget::~UiModWidget() -{ -} - -void UiModWidget::setFilesMode(bool filesModeEnabled) -{ - filesMode = filesModeEnabled; -} - -void UiModWidget::dragEnterEvent(QDragEnterEvent *dragEnterEvent) -{ - if (filesMode && dragEnterEvent->mimeData()->hasUrls()) - { - QStringList pathList; - QList urlList = dragEnterEvent->mimeData()->urls(); - - foreach(const QUrl ¤tUrl, urlList) - { - if (currentUrl.isLocalFile()) - { - pathList.append(currentUrl.toLocalFile()); - } - } - - if (!pathList.isEmpty()) - { - dragEnterEvent->acceptProposedAction(); - } - } -} - -void UiModWidget::dropEvent(QDropEvent *dropEvent) -{ - dropEvent->acceptProposedAction(); - emit dropped(dropEvent->mimeData()); -} - -void UiModWidget::paintEvent(QPaintEvent *paintEvent) -{ - Q_UNUSED(paintEvent) - QStyleOption opt; - opt.init(this); - QPainter p(this); - style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); -} +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "UiModWidget.h" +#include +#include +#include +#include +#include +#include + +UiModWidget::UiModWidget(QWidget *parent) : QWidget(parent) +{ + filesMode = false; +} + +UiModWidget::~UiModWidget() +{ +} + +void UiModWidget::setFilesMode(bool filesModeEnabled) +{ + filesMode = filesModeEnabled; +} + +void UiModWidget::dragEnterEvent(QDragEnterEvent *dragEnterEvent) +{ + if (filesMode && dragEnterEvent->mimeData()->hasUrls()) + { + QStringList pathList; + QList urlList = dragEnterEvent->mimeData()->urls(); + + foreach(const QUrl ¤tUrl, urlList) + { + if (currentUrl.isLocalFile()) + { + pathList.append(currentUrl.toLocalFile()); + } + } + + if (!pathList.isEmpty()) + { + dragEnterEvent->acceptProposedAction(); + } + } +} + +void UiModWidget::dropEvent(QDropEvent *dropEvent) +{ + dropEvent->acceptProposedAction(); + emit dropped(dropEvent->mimeData()); +} + +void UiModWidget::paintEvent(QPaintEvent *paintEvent) +{ + Q_UNUSED(paintEvent) + QStyleOption opt; + opt.init(this); + QPainter p(this); + style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); +} diff --git a/uimod/UiModWidget.h b/uimod/UiModWidget.h index 3858425..d30637d 100644 --- a/uimod/UiModWidget.h +++ b/uimod/UiModWidget.h @@ -1,47 +1,47 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#ifndef UIMODWIDGET_H -#define UIMODWIDGET_H - -#include -#include -#include -#include - -class UiModWidget : public QWidget -{ - Q_OBJECT -public: - UiModWidget(QWidget *parent = 0); - void setFilesMode(bool enabled); - ~UiModWidget(); - -protected: - void dragEnterEvent(QDragEnterEvent *dragEnterEvent); - void dropEvent(QDropEvent *dropEvent); - void paintEvent(QPaintEvent *paintEvent); - -private: - bool filesMode; - -signals: - void dropped(const QMimeData *mimeData); -}; - -#endif // UIMODWIDGET_H +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef UIMODWIDGET_H +#define UIMODWIDGET_H + +#include +#include +#include +#include + +class UiModWidget : public QWidget +{ + Q_OBJECT +public: + UiModWidget(QWidget *parent = 0); + void setFilesMode(bool enabled); + ~UiModWidget(); + +protected: + void dragEnterEvent(QDragEnterEvent *dragEnterEvent); + void dropEvent(QDropEvent *dropEvent); + void paintEvent(QPaintEvent *paintEvent); + +private: + bool filesMode; + +signals: + void dropped(const QMimeData *mimeData); +}; + +#endif // UIMODWIDGET_H From a6d5062ff6200b41aebcd37256e452f8bd156014 Mon Sep 17 00:00:00 2001 From: Syping Date: Mon, 9 Oct 2017 08:45:32 +0200 Subject: [PATCH 002/359] update build readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c81da0c..3887125 100644 --- a/README.md +++ b/README.md @@ -12,12 +12,12 @@ Grand Theft Auto V Savegame and Snapmatic viewer #### Build gta5view Debian/Ubuntu - apt-get install git gcc g++ qtbase5-dev qt5-qmake make checkinstall + apt-get install git gcc g++ qtbase5-dev qttranslations5-l10n qt5-qmake make checkinstall git clone https://github.com/SyDevTeam/gta5view mkdir build && cd build - qmake -qt=5 ../gta5view.pro # or just qmake ../gta5view.pro + qmake -qt=5 GTA5SYNC_PREFIX=/usr ../gta5view.pro # or just qmake GTA5SYNC_PREFIX=/usr ../gta5view.pro make - INSTALL_ROOT=/usr checkinstall --pkgname=gta5view --pkggroup=utility --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5 + checkinstall --pkgname=gta5view --pkggroup=utility --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n #### Build gta5view Windows From 68bbfbd843072948ea5f2c263883a3da8a3d5997 Mon Sep 17 00:00:00 2001 From: Syping Date: Mon, 9 Oct 2017 08:47:31 +0200 Subject: [PATCH 003/359] fix build readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3887125..7ef7ffb 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,8 @@ Grand Theft Auto V Savegame and Snapmatic viewer apt-get install git gcc g++ qtbase5-dev qttranslations5-l10n qt5-qmake make checkinstall git clone https://github.com/SyDevTeam/gta5view - mkdir build && cd build - qmake -qt=5 GTA5SYNC_PREFIX=/usr ../gta5view.pro # or just qmake GTA5SYNC_PREFIX=/usr ../gta5view.pro + mkdir gta5view.build && cd gta5view.build + qmake -qt=5 GTA5SYNC_PREFIX=/usr ../gta5view/gta5view.pro # or just qmake GTA5SYNC_PREFIX=/usr ../gta5view/gta5view.pro make checkinstall --pkgname=gta5view --pkggroup=utility --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n From 38cefbbe4571017996537452376e58144877dc1e Mon Sep 17 00:00:00 2001 From: Syping Date: Mon, 9 Oct 2017 08:52:12 +0200 Subject: [PATCH 004/359] update .travis.yml --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0a356bb..777b249 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,12 +34,12 @@ script: - cd qt5 - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view --pkgversion=$APPLICATION_VERSION --pkgrelease=travis1 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view-qt4 --replaces=gta5view-qt4 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$APPLICATION_VERSION --pkgrelease=travis1 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package - cd .. - cd qt4 - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$APPLICATION_VERSION --pkgrelease=travis1 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view --replaces=gta5view --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$APPLICATION_VERSION --pkgrelease=travis1 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package - cd .. deploy: From 1edf71eedc63bd7990387ec8ecd41b4329e9394b Mon Sep 17 00:00:00 2001 From: Syping Date: Mon, 9 Oct 2017 10:31:52 +0200 Subject: [PATCH 005/359] english mode fix --- TranslationClass.cpp | 26 +++++++++++++++++++++++--- TranslationClass.h | 1 + 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/TranslationClass.cpp b/TranslationClass.cpp index 6dc4d7f..de6efc5 100644 --- a/TranslationClass.cpp +++ b/TranslationClass.cpp @@ -69,6 +69,7 @@ void TranslationClass::loadTranslation(QApplication *app) #ifndef GTA5SYNC_QCONF // Classic modable loading method QString externalLanguageStr; bool externalLanguageReady = false; + bool externalEnglishMode = false; bool loadInternalLang = false; bool trLoadSuccess = false; if (isUserLanguageSystem_p()) @@ -115,11 +116,12 @@ void TranslationClass::loadTranslation(QApplication *app) } if (trLoadSuccess) { - if (currentLangIndex != 0) // Don't install the language until we know we not have a better language for the user + if (currentLangIndex != 0 || isEnglishMode) // Don't install the language until we know we not have a better language for the user { #ifdef GTA5SYNC_DEBUG qDebug() << "externalLanguageReady" << currentLanguage; #endif + externalEnglishMode = isEnglishMode; externalLanguageStr = currentLanguage; externalLanguageReady = true; } @@ -157,8 +159,9 @@ void TranslationClass::loadTranslation(QApplication *app) trLoadSuccess = loadSystemTranslation_p(inLangPath, &inAppTranslator); #ifdef GTA5SYNC_DEBUG qDebug() << "externalLangIndex" << externalLangIndex << "internalLangIndex" << currentLangIndex; + qDebug() << "externalEnglishMode" << externalEnglishMode << "internalEnglishMode" << isEnglishMode; #endif - if (trLoadSuccess && externalLangIndex > currentLangIndex) + if ((trLoadSuccess && externalLangIndex > currentLangIndex) || (trLoadSuccess && externalEnglishMode && !isEnglishMode)) { #ifdef GTA5SYNC_DEBUG qDebug() << "installInternalTranslation"; @@ -180,6 +183,7 @@ void TranslationClass::loadTranslation(QApplication *app) #ifdef GTA5SYNC_DEBUG qDebug() << "installExternalTranslation"; #endif + isEnglishMode = externalEnglishMode; currentLanguage = externalLanguageStr; app->installTranslator(&exAppTranslator); if (loadQtTranslation_p(exLangPath, &exQtTranslator)) @@ -306,6 +310,7 @@ bool TranslationClass::loadSystemTranslation_p(const QString &langPath, QTransla #ifdef GTA5SYNC_DEBUG qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm"); #endif + isEnglishMode = false; currentLanguage = languageName; currentLangIndex = currentLangCounter; return true; @@ -321,16 +326,28 @@ bool TranslationClass::loadSystemTranslation_p(const QString &langPath, QTransla #ifdef GTA5SYNC_DEBUG qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); #endif + isEnglishMode = false; + currentLanguage = languageName; + currentLangIndex = currentLangCounter; + return true; + } + else if (langList.at(0) == "en") + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "languageEnglishMode index" << currentLangCounter; +#endif + isEnglishMode = true; currentLanguage = languageName; currentLangIndex = currentLangCounter; return true; } } - if (langList.at(0) == "en") + else if (langList.at(0) == "en") { #ifdef GTA5SYNC_DEBUG qDebug() << "languageEnglishMode index" << currentLangCounter; #endif + isEnglishMode = true; currentLanguage = languageName; currentLangIndex = currentLangCounter; return true; @@ -345,10 +362,12 @@ bool TranslationClass::loadSystemTranslation_p(const QString &langPath, QTransla { if (appTranslator->load(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) { + isEnglishMode = false; #ifdef GTA5SYNC_DEBUG qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); #endif currentLanguage = languageName; + currentLangIndex = currentLangCounter; return true; } } @@ -505,6 +524,7 @@ void TranslationClass::unloadTranslation(QApplication *app) currentLangIndex = 0; currentLanguage = QString(); QLocale::setDefault(QLocale::c()); + isEnglishMode = false; isLangLoaded = false; } #ifdef _MSC_VER // Fix dumb Microsoft compiler warning diff --git a/TranslationClass.h b/TranslationClass.h index 4ad4242..532be3b 100644 --- a/TranslationClass.h +++ b/TranslationClass.h @@ -53,6 +53,7 @@ private: QString currentLanguage; QString userLanguage; int currentLangIndex; + bool isEnglishMode; bool isLangLoaded; }; From 948d12694cf130eeb519770eb51f28caf7cf1709 Mon Sep 17 00:00:00 2001 From: Syping Date: Mon, 9 Oct 2017 12:32:05 +0200 Subject: [PATCH 006/359] english mode move --- TranslationClass.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TranslationClass.cpp b/TranslationClass.cpp index de6efc5..ccd67d1 100644 --- a/TranslationClass.cpp +++ b/TranslationClass.cpp @@ -362,10 +362,10 @@ bool TranslationClass::loadSystemTranslation_p(const QString &langPath, QTransla { if (appTranslator->load(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) { - isEnglishMode = false; #ifdef GTA5SYNC_DEBUG qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); #endif + isEnglishMode = false; currentLanguage = languageName; currentLangIndex = currentLangCounter; return true; From cfdc36d20799149cc573ffe9cdcb583f96dea800 Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 10 Oct 2017 07:54:20 +0200 Subject: [PATCH 007/359] replace round with qRound --- MapPreviewDialog.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/MapPreviewDialog.cpp b/MapPreviewDialog.cpp index 1efd416..8477bf0 100644 --- a/MapPreviewDialog.cpp +++ b/MapPreviewDialog.cpp @@ -22,9 +22,6 @@ #include "AppEnv.h" #include #include -#ifdef __MINGW32__ -#include -#endif MapPreviewDialog::MapPreviewDialog(QWidget *parent) : QDialog(parent), @@ -55,14 +52,14 @@ void MapPreviewDialog::drawPointOnMap(double xpos_d, double ypos_d) QSize mapPixelSize = size(); int pointMakerHalfSize = pointMakerSize / 2; - long xpos_ms = std::round(xpos_d); - long ypos_ms = std::round(ypos_d); + long xpos_ms = qRound(xpos_d); + long ypos_ms = qRound(ypos_d); double xpos_ma = xpos_ms + 4000; double ypos_ma = ypos_ms + 4000; double xrat = (double)mapPixelSize.width() / 10000; double yrat = (double)mapPixelSize.height() / 12000; - long xpos_mp = std::round(xpos_ma * xrat); - long ypos_mp = std::round(ypos_ma * yrat); + long xpos_mp = qRound(xpos_ma * xrat); + long ypos_mp = qRound(ypos_ma * yrat); long xpos_pr = xpos_mp - pointMakerHalfSize; long ypos_pr = ypos_mp + pointMakerHalfSize; From 4169e86f3162edf6518d5e06a47b2e5090d73768 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 12 Oct 2017 22:21:45 +0200 Subject: [PATCH 008/359] latest changes from gta5sync --- CrewDatabase.cpp | 2 +- OptionsDialog.cpp | 20 ++- OptionsDialog.h | 2 +- PictureExport.cpp | 83 ++++++----- ProfileDatabase.cpp | 2 +- ProfileInterface.cpp | 65 ++++----- ProfileInterface.h | 2 +- ProfileLoader.cpp | 6 +- SavegameCopy.cpp | 14 +- SavegameWidget.cpp | 4 +- SnapmaticEditor.cpp | 14 +- SnapmaticPicture.cpp | 100 +++++++++++-- SnapmaticPicture.h | 2 + StringParser.cpp | 33 ++--- StringParser.h | 4 +- TranslationClass.cpp | 48 +++---- UserInterface.cpp | 13 +- UserInterface.h | 2 +- config.h | 7 +- gta5view.pro | 9 +- res/gta5sync_de.qm | Bin 32293 -> 32872 bytes res/gta5sync_de.ts | 326 +++++++++++++++++++++++------------------- res/gta5sync_en_US.qm | Bin 18703 -> 18413 bytes res/gta5sync_en_US.ts | 322 +++++++++++++++++++++-------------------- res/gta5sync_fr.qm | Bin 27241 -> 26687 bytes res/gta5sync_fr.ts | 318 +++++++++++++++++++++------------------- res/gta5sync_ru.qm | Bin 27502 -> 26894 bytes res/gta5sync_ru.ts | 318 +++++++++++++++++++++------------------- 28 files changed, 943 insertions(+), 773 deletions(-) diff --git a/CrewDatabase.cpp b/CrewDatabase.cpp index a1b4919..69e4b06 100755 --- a/CrewDatabase.cpp +++ b/CrewDatabase.cpp @@ -31,7 +31,7 @@ CrewDatabase::CrewDatabase(QObject *parent) : QObject(parent) dir.mkpath(StandardPaths::dataLocation()); dir.setPath(StandardPaths::dataLocation()); QString dirPath = dir.absolutePath(); - QString defaultConfPath = dirPath % QDir::separator() % "crews.ini"; + QString defaultConfPath = dirPath % "/crews.ini"; QSettings confPathSettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); confPathSettings.beginGroup("Database"); diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp index 76f1105..b907978 100755 --- a/OptionsDialog.cpp +++ b/OptionsDialog.cpp @@ -171,17 +171,17 @@ void OptionsDialog::setupRadioButtons() if (contentModeOk) { - if (contentMode == 0) + switch (contentMode) { + case 0: ui->rbOpenWithSC->setChecked(true); - } - else if (contentMode == 1) - { + break; + case 1: ui->rbOpenWithDC->setChecked(true); - } - else if (contentMode == 2) - { + break; + case 2: ui->rbSelectWithSC->setChecked(true); + break; } } } @@ -267,11 +267,7 @@ void OptionsDialog::applySettings() TCInstance->loadTranslation(qApp); } -#if QT_VERSION >= 0x050000 - emit settingsApplied(newContentMode, ui->cbLanguage->currentData().toString()); -#else - emit settingsApplied(newContentMode, ui->cbLanguage->itemData(ui->cbLanguage->currentIndex()).toString()); -#endif + emit settingsApplied(newContentMode, languageChanged); if ((forceCustomFolder && ui->txtFolder->text() != currentCFolder) || (forceCustomFolder != currentFFolder && forceCustomFolder)) { diff --git a/OptionsDialog.h b/OptionsDialog.h index 763d1df..d48ab85 100755 --- a/OptionsDialog.h +++ b/OptionsDialog.h @@ -48,7 +48,7 @@ private slots: void on_cmdExploreFolder_clicked(); signals: - void settingsApplied(int contentMode, QString language); + void settingsApplied(int contentMode, bool languageChanged); private: ProfileDatabase *profileDB; diff --git a/PictureExport.cpp b/PictureExport.cpp index d3fb040..41d0f0c 100755 --- a/PictureExport.cpp +++ b/PictureExport.cpp @@ -30,6 +30,10 @@ #include #include +#if QT_VERSION >= 0x050000 +#include +#endif + PictureExport::PictureExport() { @@ -76,6 +80,7 @@ void PictureExport::exportAsPicture(QWidget *parent, SnapmaticPicture *picture) // End Picture Settings settings.beginGroup("FileDialogs"); + bool dontUseNativeDialog = settings.value("DontUseNativeDialog", false).toBool(); settings.beginGroup("ExportAsPicture"); fileDialogPreSave: //Work? @@ -83,7 +88,7 @@ fileDialogPreSave: //Work? fileDialog.setFileMode(QFileDialog::AnyFile); fileDialog.setViewMode(QFileDialog::Detail); fileDialog.setAcceptMode(QFileDialog::AcceptSave); - fileDialog.setOption(QFileDialog::DontUseNativeDialog, false); + fileDialog.setOption(QFileDialog::DontUseNativeDialog, dontUseNativeDialog); fileDialog.setOption(QFileDialog::DontConfirmOverwrite, true); fileDialog.setDefaultSuffix("suffix"); fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); @@ -99,7 +104,7 @@ fileDialogPreSave: //Work? fileDialog.setSidebarUrls(sidebarUrls); fileDialog.setDirectory(settings.value("Directory", StandardPaths::picturesLocation()).toString()); - fileDialog.restoreGeometry(settings.value(parent->objectName() % "+Geomtery", "").toByteArray()); + fileDialog.restoreGeometry(settings.value(parent->objectName() % "+Geometry", "").toByteArray()); QString newPictureFileName = getPictureFileName(picture) % defaultExportFormat; fileDialog.selectFile(newPictureFileName); @@ -142,15 +147,7 @@ fileDialogPreSave: //Work? if (QFile::exists(selectedFile)) { - if (QMessageBox::Yes == QMessageBox::warning(parent, PictureDialog::tr("Export as Picture"), PictureDialog::tr("Overwrite %1 with current Snapmatic picture?").arg("\""+selectedFile+"\""), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) - { - if (!QFile::remove(selectedFile)) - { - QMessageBox::warning(parent, PictureDialog::tr("Export as Picture"), PictureDialog::tr("Failed to overwrite %1 with current Snapmatic picture").arg("\""+selectedFile+"\"")); - goto fileDialogPreSave; //Work? - } - } - else + if (QMessageBox::No == QMessageBox::warning(parent, PictureDialog::tr("Export as Picture"), PictureDialog::tr("Overwrite %1 with current Snapmatic picture?").arg("\""+selectedFile+"\""), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) { goto fileDialogPreSave; //Work? } @@ -168,19 +165,51 @@ fileDialogPreSave: //Work? exportPicture = exportPicture.scaled(cusExportSize, aspectRatio, Qt::SmoothTransformation); } - bool isSaved; - if (useCustomQuality) + int errorId = 0; + bool isSaved = false; +#if QT_VERSION >= 0x050000 + QSaveFile *picFile = new QSaveFile(selectedFile); +#else + QFile *picFile = new QFile(selectedFile); +#endif + if (picFile->open(QIODevice::WriteOnly)) { - isSaved = exportPicture.save(selectedFile, saveFileFormat.toStdString().c_str(), customQuality); + isSaved = exportPicture.save(picFile, saveFileFormat.toStdString().c_str(), useCustomQuality ? customQuality : defaultQuality); +#if QT_VERSION >= 0x050000 + if (isSaved) + { + isSaved = picFile->commit(); + } + else + { + errorId = 1; + } +#else + picFile->close(); +#endif } else { - isSaved = exportPicture.save(selectedFile, saveFileFormat.toStdString().c_str(), 100); + errorId = 2; } + delete picFile; if (!isSaved) { - QMessageBox::warning(parent, PictureDialog::tr("Export as Picture"), PictureDialog::tr("Failed to export current Snapmatic picture")); + switch (errorId) + { + case 0: + QMessageBox::warning(parent, PictureDialog::tr("Export as Picture"), PictureDialog::tr("Failed to export the picture because the system occurred a write failure")); + break; + case 1: + QMessageBox::warning(parent, PictureDialog::tr("Export as Picture"), PictureDialog::tr("Failed to export the picture because the format detection failures")); + break; + case 2: + QMessageBox::warning(parent, PictureDialog::tr("Export as Picture"), PictureDialog::tr("Failed to export the picture because the file can't be written")); + break; + default: + QMessageBox::warning(parent, PictureDialog::tr("Export as Picture"), PictureDialog::tr("Failed to export the picture because of an unknown reason")); + } goto fileDialogPreSave; //Work? } } @@ -201,13 +230,10 @@ void PictureExport::exportAsSnapmatic(QWidget *parent, SnapmaticPicture *picture { QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); settings.beginGroup("FileDialogs"); + bool dontUseNativeDialog = settings.value("DontUseNativeDialog", false).toBool(); settings.beginGroup("ExportAsSnapmatic"); - QString adjustedPicPath = picture->getPictureFileName(); - if (adjustedPicPath.right(7) == ".hidden") // for the hidden file system - { - adjustedPicPath.remove(adjustedPicPath.length() - 7, 7); - } + QString adjustedPicPath = picture->getOriginalPictureFileName(); fileDialogPreSave: //Work? QFileInfo sgdFileInfo(adjustedPicPath); @@ -215,7 +241,7 @@ fileDialogPreSave: //Work? fileDialog.setFileMode(QFileDialog::AnyFile); fileDialog.setViewMode(QFileDialog::Detail); fileDialog.setAcceptMode(QFileDialog::AcceptSave); - fileDialog.setOption(QFileDialog::DontUseNativeDialog, false); + fileDialog.setOption(QFileDialog::DontUseNativeDialog, dontUseNativeDialog); fileDialog.setOption(QFileDialog::DontConfirmOverwrite, true); fileDialog.setDefaultSuffix(".rem"); fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); @@ -232,9 +258,8 @@ fileDialogPreSave: //Work? fileDialog.setSidebarUrls(sidebarUrls); fileDialog.setDirectory(settings.value("Directory", StandardPaths::documentsLocation()).toString()); + fileDialog.restoreGeometry(settings.value(parent->objectName() % "+Geometry", "").toByteArray()); fileDialog.selectFile(QString(picture->getExportPictureFileName() % ".g5e")); - fileDialog.restoreGeometry(settings.value(parent->objectName() % "+Geomtery", "").toByteArray()); - if (fileDialog.exec()) { @@ -257,15 +282,7 @@ fileDialogPreSave: //Work? if (QFile::exists(selectedFile)) { - if (QMessageBox::Yes == QMessageBox::warning(parent, PictureDialog::tr("Export as Snapmatic"), PictureDialog::tr("Overwrite %1 with current Snapmatic picture?").arg("\""+selectedFile+"\""), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) - { - if (!QFile::remove(selectedFile)) - { - QMessageBox::warning(parent, PictureDialog::tr("Export as Snapmatic"), PictureDialog::tr("Failed to overwrite %1 with current Snapmatic picture").arg("\""+selectedFile+"\"")); - goto fileDialogPreSave; //Work? - } - } - else + if (QMessageBox::No == QMessageBox::warning(parent, PictureDialog::tr("Export as Snapmatic"), PictureDialog::tr("Overwrite %1 with current Snapmatic picture?").arg("\""+selectedFile+"\""), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) { goto fileDialogPreSave; //Work? } diff --git a/ProfileDatabase.cpp b/ProfileDatabase.cpp index 9d4e814..4f7e870 100755 --- a/ProfileDatabase.cpp +++ b/ProfileDatabase.cpp @@ -31,7 +31,7 @@ ProfileDatabase::ProfileDatabase(QObject *parent) : QObject(parent) dir.mkpath(StandardPaths::dataLocation()); dir.setPath(StandardPaths::dataLocation()); QString dirPath = dir.absolutePath(); - QString defaultConfPath = dirPath % QDir::separator() % "players.ini"; + QString defaultConfPath = dirPath % "/players.ini"; QSettings confPathSettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); confPathSettings.beginGroup("Database"); diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 1507a90..176353e 100755 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -414,6 +414,7 @@ void ProfileInterface::on_cmdImport_clicked() { QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); settings.beginGroup("FileDialogs"); + bool dontUseNativeDialog = settings.value("DontUseNativeDialog", false).toBool(); settings.beginGroup("ImportCopy"); fileDialogPreOpen: //Work? @@ -421,7 +422,7 @@ fileDialogPreOpen: //Work? fileDialog.setFileMode(QFileDialog::ExistingFiles); fileDialog.setViewMode(QFileDialog::Detail); fileDialog.setAcceptMode(QFileDialog::AcceptOpen); - fileDialog.setOption(QFileDialog::DontUseNativeDialog, false); + fileDialog.setOption(QFileDialog::DontUseNativeDialog, dontUseNativeDialog); fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); fileDialog.setWindowTitle(tr("Import...")); fileDialog.setLabelText(QFileDialog::Accept, tr("Import")); @@ -634,16 +635,16 @@ bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) SnapmaticProperties spJson = picture->getSnapmaticProperties(); spJson.uid = QString(currentTime + QString::number(QDate::currentDate().dayOfYear())).toInt(); - bool fExists = QFile::exists(profileFolder % QDir::separator() % "PGTA5" % QString::number(spJson.uid)); - bool fExistsHidden = QFile::exists(profileFolder % QDir::separator() % "PGTA5" % QString::number(spJson.uid) % ".hidden"); + bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); + bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); int cEnough = 0; while ((fExists || fExistsHidden) && cEnough < 5000) { currentTime = QString::number(currentTime.toInt() - 1); spJson.uid = QString(currentTime + QString::number(QDate::currentDate().dayOfYear())).toInt(); - fExists = QFile::exists(profileFolder % QDir::separator() % "PGTA5" % QString::number(spJson.uid)); - fExistsHidden = QFile::exists(profileFolder % QDir::separator() % "PGTA5" % QString::number(spJson.uid) % ".hidden"); + fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); + fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); cEnough++; } spJson.createdDateTime = QDateTime::currentDateTime(); @@ -689,16 +690,16 @@ bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) SnapmaticProperties spJson = picture->getSnapmaticProperties(); spJson.uid = QString(currentTime + QString::number(QDate::currentDate().dayOfYear())).toInt(); - bool fExists = QFile::exists(profileFolder % QDir::separator() % "PGTA5" % QString::number(spJson.uid)); - bool fExistsHidden = QFile::exists(profileFolder % QDir::separator() % "PGTA5" % QString::number(spJson.uid) % ".hidden"); + bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); + bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); int cEnough = 0; while ((fExists || fExistsHidden) && cEnough < 25) { currentTime = QString::number(currentTime.toInt() - 1); spJson.uid = QString(currentTime + QString::number(QDate::currentDate().dayOfYear())).toInt(); - fExists = QFile::exists(profileFolder % QDir::separator() % "PGTA5" % QString::number(spJson.uid)); - fExistsHidden = QFile::exists(profileFolder % QDir::separator() % "PGTA5" % QString::number(spJson.uid) % ".hidden"); + fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); + fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); cEnough++; } spJson.createdDateTime = QDateTime::currentDateTime(); @@ -764,28 +765,20 @@ bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) bool ProfileInterface::importSnapmaticPicture(SnapmaticPicture *picture, bool warn) { QString picFileName = picture->getPictureFileName(); - QString adjustedFileName = picFileName; - if (adjustedFileName.right(7) == ".hidden") // for the hidden file system - { - adjustedFileName.remove(adjustedFileName.length() - 7, 7); - } - if (adjustedFileName.right(4) == ".bak") // for the backup file system - { - adjustedFileName.remove(adjustedFileName.length() - 4, 4); - } + QString adjustedFileName = picture->getOriginalPictureFileName(); if (picFileName.left(4) != "PGTA") { if (warn) QMessageBox::warning(this, tr("Import"), tr("Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e")); return false; } - else if (QFile::exists(profileFolder % QDir::separator() % adjustedFileName) || QFile::exists(profileFolder % QDir::separator() % adjustedFileName % ".hidden")) + else if (QFile::exists(profileFolder % "/" % adjustedFileName) || QFile::exists(profileFolder % "/" % adjustedFileName % ".hidden")) { if (warn) QMessageBox::warning(this, tr("Import"), tr("Failed to import the Snapmatic picture, the picture is already in the game")); return false; } - else if (picture->exportPicture(profileFolder % QDir::separator() % adjustedFileName, SnapmaticFormat::PGTA_Format)) + else if (picture->exportPicture(profileFolder % "/" % adjustedFileName, SnapmaticFormat::PGTA_Format)) { - picture->setPicFilePath(profileFolder % QDir::separator() % adjustedFileName); + picture->setPicFilePath(profileFolder % "/" % adjustedFileName); pictureLoaded(picture, true); return true; } @@ -811,7 +804,7 @@ bool ProfileInterface::importSavegameData(SavegameData *savegame, QString sgdPat } sgdFileName = "SGTA500" % sgdNumber; - if (!QFile::exists(profileFolder % QDir::separator() % sgdFileName)) + if (!QFile::exists(profileFolder % "/" % sgdFileName)) { foundFree = true; } @@ -820,10 +813,10 @@ bool ProfileInterface::importSavegameData(SavegameData *savegame, QString sgdPat if (foundFree) { - if (QFile::copy(sgdPath, profileFolder % QDir::separator() % sgdFileName)) + if (QFile::copy(sgdPath, profileFolder % "/" % sgdFileName)) { - savegame->setSavegameFileName(profileFolder % QDir::separator() % sgdFileName); - savegameLoaded(savegame, profileFolder % QDir::separator() % sgdFileName, true); + savegame->setSavegameFileName(profileFolder % "/" % sgdFileName); + savegameLoaded(savegame, profileFolder % "/" % sgdFileName, true); return true; } else @@ -896,6 +889,7 @@ void ProfileInterface::exportSelected() QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); settings.beginGroup("FileDialogs"); + //bool dontUseNativeDialog = settings.value("DontUseNativeDialog", false).toBool(); settings.beginGroup("ExportDirectory"); QString exportDirectory = QFileDialog::getExistingDirectory(this, tr("Export selected"), settings.value(profileName, profileFolder).toString()); if (exportDirectory != "") @@ -1085,24 +1079,17 @@ void ProfileInterface::importFiles() on_cmdImport_clicked(); } -void ProfileInterface::settingsApplied(int _contentMode, QString _language) +void ProfileInterface::settingsApplied(int _contentMode, bool languageChanged) { - bool translationUpdated = false; - if (language != _language) - { - retranslateUi(); - language = _language; - translationUpdated = true; - } + if (languageChanged) retranslateUi(); contentMode = _contentMode; - if (contentMode == 2) { foreach(ProfileWidget *widget, widgets.keys()) { widget->setSelectionMode(true); widget->setContentMode(contentMode); - if (translationUpdated) widget->retranslate(); + if (languageChanged) widget->retranslate(); } } else @@ -1114,7 +1101,7 @@ void ProfileInterface::settingsApplied(int _contentMode, QString _language) widget->setSelectionMode(false); } widget->setContentMode(contentMode); - if (translationUpdated) widget->retranslate(); + if (languageChanged) widget->retranslate(); } } } @@ -1184,10 +1171,10 @@ void ProfileInterface::contextMenuTriggeredPIC(QContextMenuEvent *ev) { editMenu.addAction(SnapmaticWidget::tr("Hide &In-game"), picWidget, SLOT(makePictureHiddenSlot())); } - editMenu.addAction(SnapmaticWidget::tr("&Edit Properties..."), picWidget, SLOT(editSnapmaticProperties())); + editMenu.addAction(PictureDialog::tr("&Edit Properties..."), picWidget, SLOT(editSnapmaticProperties())); QMenu exportMenu(SnapmaticWidget::tr("&Export"), this); - exportMenu.addAction(SnapmaticWidget::tr("Export as &Picture..."), picWidget, SLOT(on_cmdExport_clicked())); - exportMenu.addAction(SnapmaticWidget::tr("Export as &Snapmatic..."), picWidget, SLOT(on_cmdCopy_clicked())); + exportMenu.addAction(PictureDialog::tr("Export as &Picture..."), picWidget, SLOT(on_cmdExport_clicked())); + exportMenu.addAction(PictureDialog::tr("Export as &Snapmatic..."), picWidget, SLOT(on_cmdCopy_clicked())); contextMenu.addAction(SnapmaticWidget::tr("&View"), picWidget, SLOT(on_cmdView_clicked())); contextMenu.addMenu(&editMenu); contextMenu.addMenu(&exportMenu); diff --git a/ProfileInterface.h b/ProfileInterface.h index a45ed9e..f93297c 100755 --- a/ProfileInterface.h +++ b/ProfileInterface.h @@ -45,7 +45,7 @@ class ProfileInterface : public QWidget public: explicit ProfileInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent = 0); void setProfileFolder(QString folder, QString profile); - void settingsApplied(int contentMode, QString language); + void settingsApplied(int contentMode, bool languageChanged); void setupProfileInterface(); void disableSelected(); void enableSelected(); diff --git a/ProfileLoader.cpp b/ProfileLoader.cpp index 243721e..d5349ea 100755 --- a/ProfileLoader.cpp +++ b/ProfileLoader.cpp @@ -23,6 +23,8 @@ #include #include #include +#include +#include #include #include @@ -61,7 +63,7 @@ void ProfileLoader::run() foreach(const QString &SavegameFile, SavegameFiles) { emit loadingProgress(curFile, maximumV); - QString sgdPath = profileFolder % QDir::separator() % SavegameFile; + QString sgdPath = profileFolder % "/" % SavegameFile; SavegameData *savegame = new SavegameData(sgdPath); if (savegame->readingSavegame()) { @@ -72,7 +74,7 @@ void ProfileLoader::run() foreach(const QString &SnapmaticPic, SnapmaticPics) { emit loadingProgress(curFile, maximumV); - QString picturePath = profileFolder % QDir::separator() % SnapmaticPic; + QString picturePath = profileFolder % "/" % SnapmaticPic; SnapmaticPicture *picture = new SnapmaticPicture(picturePath); if (picture->readingPicture(true, true, true)) { diff --git a/SavegameCopy.cpp b/SavegameCopy.cpp index 2bcad1f..b0f8064 100755 --- a/SavegameCopy.cpp +++ b/SavegameCopy.cpp @@ -18,8 +18,10 @@ #include "SidebarGenerator.h" #include "SavegameWidget.h" +#include "StandardPaths.h" #include "SavegameCopy.h" #include "config.h" +#include #include #include #include @@ -32,7 +34,10 @@ SavegameCopy::SavegameCopy() void SavegameCopy::copySavegame(QWidget *parent, QString sgdPath) { QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("FileDialogs"); + bool dontUseNativeDialog = settings.value("DontUseNativeDialog", false).toBool(); + settings.beginGroup("SavegameCopy"); fileDialogPreSave: //Work? QFileInfo sgdFileInfo(sgdPath); @@ -40,7 +45,7 @@ fileDialogPreSave: //Work? fileDialog.setFileMode(QFileDialog::AnyFile); fileDialog.setViewMode(QFileDialog::Detail); fileDialog.setAcceptMode(QFileDialog::AcceptSave); - fileDialog.setOption(QFileDialog::DontUseNativeDialog, false); + fileDialog.setOption(QFileDialog::DontUseNativeDialog, dontUseNativeDialog); fileDialog.setOption(QFileDialog::DontConfirmOverwrite, true); fileDialog.setDefaultSuffix(""); fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); @@ -55,7 +60,8 @@ fileDialogPreSave: //Work? QList sidebarUrls = SidebarGenerator::generateSidebarUrls(fileDialog.sidebarUrls()); fileDialog.setSidebarUrls(sidebarUrls); - fileDialog.restoreState(settings.value("CopySavegame","").toByteArray()); + fileDialog.setDirectory(settings.value("Directory", StandardPaths::picturesLocation()).toString()); + fileDialog.restoreGeometry(settings.value(parent->objectName() % "+Geometry", "").toByteArray()); fileDialog.selectFile(sgdFileInfo.fileName()); if (fileDialog.exec()) @@ -95,6 +101,8 @@ fileDialogPreSave: //Work? } } - settings.setValue("CopySavegame", fileDialog.saveState()); + settings.setValue(parent->objectName() % "+Geometry", fileDialog.saveGeometry()); + settings.setValue("Directory", fileDialog.directory().absolutePath()); + settings.endGroup(); settings.endGroup(); } diff --git a/SavegameWidget.cpp b/SavegameWidget.cpp index ce21f46..7d81d92 100755 --- a/SavegameWidget.cpp +++ b/SavegameWidget.cpp @@ -128,7 +128,7 @@ void SavegameWidget::on_cmdCopy_clicked() void SavegameWidget::on_cmdDelete_clicked() { - int uchoice = QMessageBox::question(this, tr("Delete savegame"), tr("Are you sure to delete %1 from your savegames?").arg("\""+sgdStr+"\""), QMessageBox::No | QMessageBox::Yes, QMessageBox::No); + int uchoice = QMessageBox::question(this, tr("Delete Savegame"), tr("Are you sure to delete %1 from your savegames?").arg("\""+sgdStr+"\""), QMessageBox::No | QMessageBox::Yes, QMessageBox::No); if (uchoice == QMessageBox::Yes) { if (!QFile::exists(sgdPath)) @@ -141,7 +141,7 @@ void SavegameWidget::on_cmdDelete_clicked() } else { - QMessageBox::warning(this, tr("Delete savegame"), tr("Failed at deleting %1 from your savegames").arg("\""+sgdStr+"\"")); + QMessageBox::warning(this, tr("Delete Savegame"), tr("Failed at deleting %1 from your savegames").arg("\""+sgdStr+"\"")); } } } diff --git a/SnapmaticEditor.cpp b/SnapmaticEditor.cpp index 10239a3..7cdbcfa 100644 --- a/SnapmaticEditor.cpp +++ b/SnapmaticEditor.cpp @@ -225,22 +225,18 @@ void SnapmaticEditor::on_cmdApply_clicked() localSpJson.isMeme = ui->cbMeme->isChecked(); if (smpic) { - QString originalFileName = smpic->getPictureFilePath(); - QString adjustedFileName = originalFileName; - if (adjustedFileName.right(7) == ".hidden") // for the hidden file system - { - adjustedFileName.remove(adjustedFileName.length() - 7, 7); - } - QString backupFileName = adjustedFileName % ".bak"; + QString currentFilePath = smpic->getPictureFilePath(); + QString originalFilePath = smpic->getOriginalPictureFilePath(); + QString backupFileName = originalFilePath % ".bak"; if (!QFile::exists(backupFileName)) { - QFile::copy(adjustedFileName, backupFileName); + QFile::copy(currentFilePath, backupFileName); } SnapmaticProperties fallbackProperties = smpic->getSnapmaticProperties(); QString fallbackTitle = smpic->getPictureTitle(); smpic->setSnapmaticProperties(localSpJson); smpic->setPictureTitle(snapmaticTitle); - if (!smpic->exportPicture(originalFileName)) + if (!smpic->exportPicture(currentFilePath)) { QMessageBox::warning(this, tr("Snapmatic Properties"), tr("Patching of Snapmatic Properties failed because of I/O Error")); smpic->setSnapmaticProperties(fallbackProperties); diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp index 3a209bd..7fa186a 100755 --- a/SnapmaticPicture.cpp +++ b/SnapmaticPicture.cpp @@ -33,6 +33,12 @@ #include #include +#if QT_VERSION >= 0x050000 +#include +#else +#include "StandardPaths.h" +#endif + // PARSER ALLOCATIONS #define snapmaticHeaderLength 278 #define snapmaticUsefulLength 260 @@ -546,6 +552,34 @@ QString SnapmaticPicture::getExportPictureFileName() return picExportFileName; } +QString SnapmaticPicture::getOriginalPictureFileName() +{ + QString newPicFileName = picFileName; + if (picFileName.right(4) == ".bak") + { + newPicFileName = QString(picFileName).remove(picFileName.length() - 4, 4); + } + if (picFileName.right(7) == ".hidden") + { + newPicFileName = QString(picFileName).remove(picFileName.length() - 7, 7); + } + return newPicFileName; +} + +QString SnapmaticPicture::getOriginalPictureFilePath() +{ + QString newPicFilePath = picFilePath; + if (picFilePath.right(4) == ".bak") + { + newPicFilePath = QString(picFilePath).remove(picFilePath.length() - 4, 4); + } + if (picFilePath.right(7) == ".hidden") + { + newPicFilePath = QString(picFilePath).remove(picFilePath.length() - 7, 7); + } + return newPicFilePath; +} + QString SnapmaticPicture::getPictureFileName() { return picFileName; @@ -887,7 +921,13 @@ bool SnapmaticPicture::exportPicture(const QString &fileName, SnapmaticFormat fo } } - QFile *picFile = new QFile(fileName); + bool saveSuccess = false; + bool writeFailure = false; +#if QT_VERSION >= 0x050000 + QSaveFile *picFile = new QSaveFile(fileName); +#else + QFile *picFile = new QFile(StandardPaths::tempLocation() % "/" % QFileInfo(fileName).fileName() % ".tmp"); +#endif if (picFile->open(QIODevice::WriteOnly)) { if (format == SnapmaticFormat::G5E_Format) @@ -913,16 +953,22 @@ bool SnapmaticPicture::exportPicture(const QString &fileName, SnapmaticFormat fo g5eHeader += QByteArray("FIL"); // Before File Name g5eHeader += stockFileNameUTF8; // File Name g5eHeader += QByteArray("COM"); // Before Compressed - picFile->write(g5eHeader); + if (picFile->write(g5eHeader) == -1) { writeFailure = true; } if (!lowRamMode) { - picFile->write(qCompress(rawPicContent, 9)); // Compressed Snapmatic + if (picFile->write(qCompress(rawPicContent, 9)) == -1) { writeFailure = true; } // Compressed Snapmatic } else { - picFile->write(rawPicContent); + if (picFile->write(rawPicContent) == -1) { writeFailure = true; } } +#if QT_VERSION >= 0x050000 + if (writeFailure) { picFile->cancelWriting(); } + else { saveSuccess = picFile->commit(); } +#else + if (!writeFailure) { saveSuccess = true; } picFile->close(); +#endif delete picFile; } else if (format == SnapmaticFormat::JPEG_Format) @@ -937,9 +983,15 @@ bool SnapmaticPicture::exportPicture(const QString &fileName, SnapmaticFormat fo { jpegRawContent = jpegRawContent.left(jpegRawContentSizeE); } - picFile->write(jpegRawContent); + if (picFile->write(jpegRawContent) == -1) { writeFailure = true; } +#if QT_VERSION >= 0x050000 + if (writeFailure) { picFile->cancelWriting(); } + else { saveSuccess = picFile->commit(); } +#else + if (!writeFailure) { saveSuccess = true; } + picFile->close(); +#endif } - picFile->close(); delete picFile; } else @@ -947,21 +999,49 @@ bool SnapmaticPicture::exportPicture(const QString &fileName, SnapmaticFormat fo // Classic straight export if (!lowRamMode) { - picFile->write(rawPicContent); + if (picFile->write(rawPicContent) == -1) { writeFailure = true; } } else { - picFile->write(qUncompress(rawPicContent)); + if (picFile->write(qUncompress(rawPicContent)) == -1) { writeFailure = true; } } +#if QT_VERSION >= 0x050000 + if (writeFailure) { picFile->cancelWriting(); } + else { saveSuccess = picFile->commit(); } +#else + if (!writeFailure) { saveSuccess = true; } picFile->close(); +#endif delete picFile; } - return true; +#if QT_VERSION <= 0x050000 + if (saveSuccess) + { + bool tempBakCreated = false; + if (QFile::exists(fileName)) + { + if (!QFile::rename(fileName, fileName % ".tmp")) + { + QFile::remove(StandardPaths::tempLocation() % "/" % QFileInfo(fileName).fileName() % ".tmp"); + return false; + } + tempBakCreated = true; + } + if (!QFile::rename(StandardPaths::tempLocation() % "/" % QFileInfo(fileName).fileName() % ".tmp", fileName)) + { + QFile::remove(StandardPaths::tempLocation() % "/" % QFileInfo(fileName).fileName() % ".tmp"); + if (tempBakCreated) { QFile::rename(fileName % ".tmp", fileName); } + return false; + } + if (tempBakCreated) { QFile::remove(fileName % ".tmp"); } + } +#endif + return saveSuccess; } else { delete picFile; - return false; + return saveSuccess; } } diff --git a/SnapmaticPicture.h b/SnapmaticPicture.h index 706dc3b..e0db134 100755 --- a/SnapmaticPicture.h +++ b/SnapmaticPicture.h @@ -70,6 +70,8 @@ public: QString getPictureFileName(); QString getPictureFilePath(); QString getExportPictureFileName(); + QString getOriginalPictureFileName(); + QString getOriginalPictureFilePath(); int getContentMaxLength(); bool setImage(const QImage &picture); bool setPictureTitl(const QString &newTitle); diff --git a/StringParser.cpp b/StringParser.cpp index 1854c88..b93fda5 100755 --- a/StringParser.cpp +++ b/StringParser.cpp @@ -17,12 +17,8 @@ *****************************************************************************/ #include "StringParser.h" -#include "config.h" #include #include -#ifndef GTA5VIEW_CMD -#include -#endif #include #include #include @@ -30,6 +26,11 @@ #include #include +#ifdef GTA5SYNC_PROJECT +#include +#include "config.h" +#endif + StringParser::StringParser() { @@ -46,16 +47,25 @@ QString StringParser::parseTitleString(const QByteArray &commitBytes, int maxLen QString StringParser::convertDrawStringForLog(const QString &inputStr) { QString outputStr = inputStr; - return outputStr.replace("&","&u;").replace(",","&c;"); + return outputStr.replace("&","&u;").replace(",", "&c;"); } QString StringParser::convertLogStringForDraw(const QString &inputStr) { QString outputStr = inputStr; - return outputStr.replace("&c;",",").replace("&u;","&"); + return outputStr.replace("&c;",",").replace("&u;", "&"); } -#ifndef GTA5VIEW_CMD +QString StringParser::escapeString(const QString &toEscape) +{ +#if QT_VERSION >= 0x050000 + return toEscape.toHtmlEscaped(); +#else + return Qt::escape(toEscape); +#endif +} + +#ifdef GTA5SYNC_PROJECT QString StringParser::convertBuildedString(const QString &buildedStr) { QString outputStr = buildedStr; @@ -69,12 +79,3 @@ QString StringParser::convertBuildedString(const QString &buildedStr) return outputStr; } #endif - -QString StringParser::escapeString(const QString &toEscape) -{ -#if QT_VERSION >= 0x050000 - return toEscape.toHtmlEscaped(); -#else - return Qt::escape(toEscape); -#endif -} diff --git a/StringParser.h b/StringParser.h index 0b5d7e3..f15b537 100755 --- a/StringParser.h +++ b/StringParser.h @@ -29,10 +29,10 @@ public: static QString parseTitleString(const QByteArray &commitBytes, int maxLength); static QString convertDrawStringForLog(const QString &inputStr); static QString convertLogStringForDraw(const QString &inputStr); -#ifndef GTA5VIEW_CMD + static QString escapeString(const QString &toEscape); +#ifdef GTA5SYNC_PROJECT static QString convertBuildedString(const QString &buildedStr); #endif - static QString escapeString(const QString &toEscape); }; #endif // STRINGPARSER_H diff --git a/TranslationClass.cpp b/TranslationClass.cpp index ccd67d1..e3b8e8f 100644 --- a/TranslationClass.cpp +++ b/TranslationClass.cpp @@ -301,14 +301,14 @@ bool TranslationClass::loadSystemTranslation_p(const QString &langPath, QTransla if (langList.length() == 2) { #ifdef GTA5SYNC_DEBUG - qDebug() << "loadLanguageFile" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm"); + qDebug() << "loadLanguageFile" << QString(langPath % "/gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm"); #endif - if (QFile::exists(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm")) + if (QFile::exists(langPath % "/gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm")) { - if (appTranslator->load(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm")) + if (appTranslator->load(langPath % "/gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm")) { #ifdef GTA5SYNC_DEBUG - qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm"); + qDebug() << "loadLanguageFileSuccess" << QString(langPath % "/gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm"); #endif isEnglishMode = false; currentLanguage = languageName; @@ -317,14 +317,14 @@ bool TranslationClass::loadSystemTranslation_p(const QString &langPath, QTransla } } #ifdef GTA5SYNC_DEBUG - qDebug() << "loadLanguageFile" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); + qDebug() << "loadLanguageFile" << QString(langPath % "/gta5sync_" % langList.at(0) % ".qm"); #endif - if (QFile::exists(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) + if (QFile::exists(langPath % "/gta5sync_" % langList.at(0) % ".qm")) { - if (appTranslator->load(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) + if (appTranslator->load(langPath % "/gta5sync_" % langList.at(0) % ".qm")) { #ifdef GTA5SYNC_DEBUG - qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); + qDebug() << "loadLanguageFileSuccess" << QString(langPath % "/gta5sync_" % langList.at(0) % ".qm"); #endif isEnglishMode = false; currentLanguage = languageName; @@ -356,14 +356,14 @@ bool TranslationClass::loadSystemTranslation_p(const QString &langPath, QTransla else if (langList.length() == 1) { #ifdef GTA5SYNC_DEBUG - qDebug() << "loadLanguageFile" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); + qDebug() << "loadLanguageFile" << QString(langPath % "/gta5sync_" % langList.at(0) % ".qm"); #endif - if (QFile::exists(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) + if (QFile::exists(langPath % "/gta5sync_" % langList.at(0) % ".qm")) { - if (appTranslator->load(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) + if (appTranslator->load(langPath % "/gta5sync_" % langList.at(0) % ".qm")) { #ifdef GTA5SYNC_DEBUG - qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); + qDebug() << "loadLanguageFileSuccess" << QString(langPath % "/gta5sync_" % langList.at(0) % ".qm"); #endif isEnglishMode = false; currentLanguage = languageName; @@ -390,28 +390,28 @@ bool TranslationClass::loadUserTranslation_p(const QString &langPath, QTranslato if (langList.length() == 2) { #ifdef GTA5SYNC_DEBUG - qDebug() << "loadLanguageFile" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm"); + qDebug() << "loadLanguageFile" << QString(langPath % "/gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm"); #endif - if (QFile::exists(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm")) + if (QFile::exists(langPath % "/gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm")) { - if (appTranslator->load(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm")) + if (appTranslator->load(langPath % "/gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm")) { #ifdef GTA5SYNC_DEBUG - qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm"); + qDebug() << "loadLanguageFileSuccess" << QString(langPath % "/gta5sync_" % langList.at(0) % "_" % langList.at(1) % ".qm"); #endif currentLanguage = languageName; return true; } } #ifdef GTA5SYNC_DEBUG - qDebug() << "loadLanguageFile" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); + qDebug() << "loadLanguageFile" << QString(langPath % "/gta5sync_" % langList.at(0) % ".qm"); #endif - if (QFile::exists(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) + if (QFile::exists(langPath % "/gta5sync_" % langList.at(0) % ".qm")) { - if (appTranslator->load(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) + if (appTranslator->load(langPath % "/gta5sync_" % langList.at(0) % ".qm")) { #ifdef GTA5SYNC_DEBUG - qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); + qDebug() << "loadLanguageFileSuccess" << QString(langPath % "/gta5sync_" % langList.at(0) % ".qm"); #endif currentLanguage = languageName; return true; @@ -421,14 +421,14 @@ bool TranslationClass::loadUserTranslation_p(const QString &langPath, QTranslato else if (langList.length() == 1) { #ifdef GTA5SYNC_DEBUG - qDebug() << "loadLanguageFile" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); + qDebug() << "loadLanguageFile" << QString(langPath % "/gta5sync_" % langList.at(0) % ".qm"); #endif - if (QFile::exists(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) + if (QFile::exists(langPath % "/gta5sync_" % langList.at(0) % ".qm")) { - if (appTranslator->load(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm")) + if (appTranslator->load(langPath % "/gta5sync_" % langList.at(0) % ".qm")) { #ifdef GTA5SYNC_DEBUG - qDebug() << "loadLanguageFileSuccess" << QString(langPath % QDir::separator() % "gta5sync_" % langList.at(0) % ".qm"); + qDebug() << "loadLanguageFileSuccess" << QString(langPath % "/gta5sync_" % langList.at(0) % ".qm"); #endif currentLanguage = languageName; return true; diff --git a/UserInterface.cpp b/UserInterface.cpp index e6c4cf0..ded69dd 100755 --- a/UserInterface.cpp +++ b/UserInterface.cpp @@ -132,7 +132,7 @@ void UserInterface::setupDirEnv() if (folderExists) { QDir GTAV_ProfilesDir; - GTAV_ProfilesFolder = GTAV_Folder % QDir::separator() % "Profiles"; + GTAV_ProfilesFolder = GTAV_Folder % "/Profiles"; GTAV_ProfilesDir.setPath(GTAV_ProfilesFolder); GTAV_Profiles = GTAV_ProfilesDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::NoSort); @@ -213,7 +213,7 @@ void UserInterface::openProfile(const QString &profileName_) ui->swProfile->addWidget(profileUI); ui->swProfile->setCurrentWidget(profileUI); profileUI->setProfileFolder(GTAV_ProfilesFolder % QDir::separator() % profileName, profileName); - profileUI->settingsApplied(contentMode, language); + profileUI->settingsApplied(contentMode, false); profileUI->setupProfileInterface(); QObject::connect(profileUI, SIGNAL(profileClosed()), this, SLOT(closeProfile())); QObject::connect(profileUI, SIGNAL(profileLoaded()), this, SLOT(profileLoaded())); @@ -323,7 +323,7 @@ void UserInterface::on_actionOptions_triggered() OptionsDialog *optionsDialog = new OptionsDialog(profileDB, this); optionsDialog->setWindowIcon(windowIcon()); optionsDialog->commitProfiles(GTAV_Profiles); - QObject::connect(optionsDialog, SIGNAL(settingsApplied(int, QString)), this, SLOT(settingsApplied(int, QString))); + QObject::connect(optionsDialog, SIGNAL(settingsApplied(int, bool)), this, SLOT(settingsApplied(int, bool))); optionsDialog->setModal(true); #ifdef Q_OS_ANDROID @@ -494,17 +494,16 @@ void UserInterface::openSavegameFile(SavegameData *savegame) sgdDialog.exec(); } -void UserInterface::settingsApplied(int _contentMode, QString _language) +void UserInterface::settingsApplied(int _contentMode, bool languageChanged) { - if (language != _language) + if (languageChanged) { retranslateUi(); - language = _language; } contentMode = _contentMode; if (profileOpen) { - profileUI->settingsApplied(contentMode, language); + profileUI->settingsApplied(contentMode, languageChanged); } } diff --git a/UserInterface.h b/UserInterface.h index 0ce9e7c..29bce56 100755 --- a/UserInterface.h +++ b/UserInterface.h @@ -62,7 +62,7 @@ private slots: void on_actionSelect_GTA_Folder_triggered(); void on_action_Enable_In_game_triggered(); void on_action_Disable_In_game_triggered(); - void settingsApplied(int contentMode, QString language); + void settingsApplied(int contentMode, bool languageChanged); protected: void closeEvent(QCloseEvent *ev); diff --git a/config.h b/config.h index 5e52fdf..b68e57c 100755 --- a/config.h +++ b/config.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5view Grand Theft Auto V Profile Viewer +* gta5sync GRAND THEFT AUTO V SYNC * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify @@ -18,7 +18,6 @@ #ifndef CONFIG_H #define CONFIG_H -#include #include #ifndef GTA5SYNC_APPVENDOR @@ -95,12 +94,12 @@ #ifdef GTA5SYNC_DAILYB #ifndef GTA5SYNC_BUILDTYPE -#define GTA5SYNC_BUILDTYPE "Daily Build" +#define GTA5SYNC_BUILDTYPE QT_TRANSLATE_NOOP("AboutDialog", "Daily Build") #endif #endif #ifndef GTA5SYNC_BUILDTYPE -#define GTA5SYNC_BUILDTYPE "Custom" +#define GTA5SYNC_BUILDTYPE QT_TRANSLATE_NOOP("AboutDialog", "Custom") #endif #ifdef GTA5SYNC_QCONF diff --git a/gta5view.pro b/gta5view.pro index e2a3418..d1812a9 100755 --- a/gta5view.pro +++ b/gta5view.pro @@ -21,13 +21,10 @@ QT += core gui network greaterThan(QT_MAJOR_VERSION, 4): QT += widgets greaterThan(QT_MAJOR_VERSION, 4): greaterThan(QT_MINOR_VERSION, 1): win32: QT += winextras -DEFINES += GTA5SYNC_DISABLED - DEPLOYMENT.display_name = gta5view TARGET = gta5view TEMPLATE = app -DEFINES += GTA5SYNC_CSDF # Not assisting at proper usage of SnapmaticPicture class HEADERS += config.h PRECOMPILED_HEADER += config.h @@ -136,6 +133,12 @@ DISTFILES += res/app.rc \ INCLUDEPATH += ./uimod +# GTA5SYNC/GTA5VIEW ONLY + +DEFINES += GTA5SYNC_DISABLED +DEFINES += GTA5SYNC_PROJECT # Enable exclusive gta5sync/gta5view functions +DEFINES += GTA5SYNC_CSDF # Not assisting at proper usage of SnapmaticPicture class + # WINDOWS ONLY win32: DEFINES += GTA5SYNC_WIN diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index 8b620e235c46595c44bc1cd69094c173ea6a9d75..fe43ac6480a12c41bfce3f14865614d3cf43cb0f 100755 GIT binary patch delta 3117 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 Oa6K)f&DV=}=>HAvyz5Q? diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index 6fcde10..3a76041 100755 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -219,35 +219,41 @@ Pictures and Savegames Grand Theft Auto V Snapmatic Bilder und Spielständen - + Release Release - + Release Candidate Release Candidate - + + Daily Build Daily Build - + Developer Entwickler - + Beta Beta - + Alpha Alpha + + + Custom + Eigener + CrewDatabase @@ -667,7 +673,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! %1 (%2 wenn verfügbar) - + %1 %1 %1 @@ -693,7 +699,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! System - + The new Custom Folder will initialise after you restart %1. Der eigene Ordner wird initialisiert sobald du %1 neugestartet hast. @@ -702,15 +708,15 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! Die Änderung der Sprache nimmt Effekt sobald du %1 neugestartet hast. - + No Profile No Profile, as default Kein Profil - - - + + + Profile: %1 Profil: %1 @@ -806,8 +812,8 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! <span style=" font-weight:600;">Crew ID: </span>%5 - - + + Export Exportieren @@ -825,8 +831,9 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! + Export as &Picture... - Exportiere als &Bild... + Als &Bild exportieren... Export as &GTA Snapmatic... @@ -834,8 +841,9 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! + Export as &Snapmatic... - Exportiere als &Snapmatic... + Als &Snapmatic exportieren... Edi&t @@ -848,6 +856,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! + &Edit Properties... Eigenschaften bearb&eiten... @@ -956,7 +965,7 @@ Drücke A für Standardansicht JPEG Bild (*.jpg) - + Portable Network Graphics (*.png) Portable Network Graphics (*.png) @@ -965,8 +974,8 @@ Drücke A für Standardansicht Exportiere als JPG Bild - - + + Overwrite %1 with current Snapmatic picture? Überschreibe %1 mit aktuellen Snapmatic Bild? @@ -975,53 +984,71 @@ Drücke A für Standardansicht Exportiere als GTA Snapmatic - - Failed to overwrite %1 with current Snapmatic picture - Fehlgeschlagen beim Überschreiben von %1 mit aktuellen Snapmatic Bild + Fehlgeschlagen beim Überschreiben von %1 mit aktuellen Snapmatic Bild - + Export as Picture... - Exportiere als Bild... + Als Bild exportieren... - + JPEG Graphics (*.jpg *.jpeg) JPEG Graphics (*.jpg *.jpeg) - - - - + + + + + + Export as Picture - Exportiere als Bild + Als Bild exportieren - - - + + Failed to export the picture because the system occurred a write failure + Fehlgeschlagen beim Exportieren weil das System ein Schreibfehler ausgelöst hat + + + + Failed to export the picture because the format detection failures + Fehlgeschlagen beim Exportieren weil die Formaterkennung fehlschlägt + + + + Failed to export the picture because the file can't be written + Fehlgeschlagen beim Exportieren weil die Datei nicht beschrieben werden kann + + + + Failed to export the picture because of an unknown reason + Fehlgeschlagen beim Exportieren wegen einen unbekannten Grund + + + + Failed to export current Snapmatic picture Fehlgeschlagen beim Exportieren vom aktuellen Snapmatic Bild - + Export as Snapmatic... - Exportiere als Snapmatic... + Als Snapmatic exportieren... - - - - - - + + + + + Export as Snapmatic - Export as Snapmatic + Als Snapmatic exportieren - + Exported Snapmatic to "%1" because of using the .auto extension. Snapmatic wurde wegen Benutzung der .auto Erweiterung zu "%1" exportiert. @@ -1042,17 +1069,17 @@ Drücke A für Standardansicht Exportiere als GTA Snapmatic... - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + GTA V Raw Export (*.auto) GTA V Roher Export (*.auto) - + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) @@ -1085,8 +1112,8 @@ Drücke A für Standardansicht Beim Speichern des Bildes ist ein Fehler aufgetreten - - + + No valid file is selected Keine gültige Datei wurde ausgewählt @@ -1155,25 +1182,25 @@ Drücke A für Standardansicht Lade... - - + + Import... Importieren... - - - - - - - - - - - - - + + + + + + + + + + + + + Import Importieren @@ -1186,13 +1213,13 @@ Drücke A für Standardansicht Importfähige Dateien (*.g5e *.jpg *.png SGTA* PGTA*) - + Savegames files (SGTA*) Spielstanddateien (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) @@ -1202,29 +1229,29 @@ Drücke A für Standardansicht Alle Bilddateien (*.jpg *.png) - + Importable files (%1) Importfähige Dateien (%1) - + All image files (%1) Alle Bilddateien (%1) - + All files (**) Alle Dateien (**) - - + + Import file %1 of %2 files Importiere Datei %1 von %2 Dateien - + Import failed with... %1 @@ -1233,29 +1260,29 @@ Drücke A für Standardansicht %1 - + 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 parsed properly Kann %1 nicht importieren weil die Datei nicht richtig gelesen werden kann - + Can't import %1 because file format can't be detected Kann %1 nicht importieren weil das Dateiformat nicht erkannt werden kann - + Initialising export... Initialisiere Export... @@ -1264,23 +1291,23 @@ Drücke A für Standardansicht Kann %1 nicht importieren weil das Dateiformat nicht gültig ist - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA oder endet mit .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Fehlgeschlagen beim Importieren vom Snapmatic Bild, dieses Bild ist bereits im Spiel - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exportiere Snapmatic Bilder%2<br><br>JPG Bilder machen es möglich sie mit ein Bildansicht Programm zu öffnen<br>Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren<br><br>Exportieren als: - - + + No valid file is selected Keine gültige Datei wurde ausgewählt @@ -1295,35 +1322,35 @@ Drücke A für Standardansicht Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA - + Failed to import the Snapmatic picture, can't copy the file into profile Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren - + Failed to import the Savegame, can't copy the file into profile Fehlgeschlagen beim Importieren vom Spielstand, kann Spielstanddatei nicht ins Profil kopieren - + Failed to import the Savegame, no Savegame slot is left Fehlgeschlagen beim Importieren vom Spielstand, kein Spielstandslot mehr frei - - + + JPG pictures and GTA Snapmatic JPG Bilder und GTA Snapmatic - - + + JPG pictures only Nur JPG Bilder - - + + GTA Snapmatic only Nur GTA Snapmatic @@ -1342,25 +1369,25 @@ Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren Exportieren als: - - + + No Snapmatic pictures or Savegames files are selected Keine Snapmatic Bilder oder Spielstände ausgewählt - + + - Remove selected Auswahl löschen - + You really want remove the selected Snapmatic picutres and Savegame files? Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Fehlgeschlagen beim kompletten entfernen der ausgewählten Snapmatic Bilder und/oder der Spielstanddateien @@ -1381,10 +1408,10 @@ Exportieren als: Fehlgeschlagenen beim Import vom Spielstand weil kein Spielstandslot mehr übrig ist - - - - + + + + Export selected Auswahl exportieren @@ -1405,7 +1432,7 @@ Exportieren als: Wie sollen wir mit den Snapmatic Bilder umgehen? - + Export selected... Auswahl exportieren... @@ -1418,7 +1445,7 @@ Exportieren als: Initialisierung... - + Export failed with... %1 @@ -1453,7 +1480,7 @@ Exportieren als: Alle Profildateien (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1541,7 +1568,7 @@ Exportieren als: - + Export Exportieren @@ -1556,8 +1583,6 @@ Exportieren als: - - Delete savegame Savegame löschen @@ -1607,38 +1632,44 @@ Exportieren als: Are you sure to delete %1 from your savegames? Bist du sicher %1 von deinen Spielständen zu löschen? + + + + Delete Savegame + Savegame löschen + Failed at deleting %1 from your savegames Fehlgeschlagen beim Löschen %1 von deinen Spielständen - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All &Alles auswählen - + &Deselect All Alles a&bwählen @@ -1677,40 +1708,40 @@ Exportieren als: Spielstand kopieren - + &Export &Exportieren - + Savegame files (SGTA*) Spielstanddateien (SGTA*) - + All files (**) Alle Dateien (**) - - - + + + Export Savegame Spielstand exportieren - + Overwrite %1 with current Savegame? Überschreibe %1 mit aktuellen Spielstand? - + Failed to overwrite %1 with current Savegame Fehlgeschlagen beim Überschrieben von %1 mit aktuellen Spielstand - + Failed to export current Savegame Fehlgeschlagen beim Exportieren vom aktuellen Spielstand @@ -1735,7 +1766,7 @@ Exportieren als: Beim Kopieren vom Spielstand ist ein Fehler aufgetreten - + No valid file is selected Keine gültige Datei wurde ausgewählt @@ -1753,7 +1784,7 @@ Exportieren als: - + Snapmatic Properties Snapmatic Eigenschaften @@ -1797,7 +1828,7 @@ Exportieren als: Meme - + Snapmatic Title Snapmatic Titel @@ -1877,22 +1908,22 @@ Exportieren als: Nein - + 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: @@ -1900,7 +1931,7 @@ Exportieren als: SnapmaticPicture - + PHOTO - %1 FOTO - %1 @@ -1950,7 +1981,7 @@ Exportieren als: Bist du sicher %1 von deine Snapmatic Bilder zu löschen? - + Edi&t Bearbei&ten @@ -1963,7 +1994,7 @@ Exportieren als: &Im Spiel deaktivieren - + &Export &Exportieren @@ -1976,12 +2007,12 @@ Exportieren als: Exportiere als &GTA Snapmatic - + Show &In-game &Im Spiel anzeigen - + Hide &In-game &Im Spiel ausblenden @@ -1994,55 +2025,52 @@ Exportieren als: FOTO - %1 - &Edit Properties... - &Eigenschaften bearbeiten... + &Eigenschaften bearbeiten... Export as &JPG picture... Exportiere als &JPG Bild... - Export as &Picture... - Exportiere als &Bild... + Exportiere als &Bild... Export as &GTA Snapmatic... Exportiere als &GTA Snapmatic... - Export as &Snapmatic... - Exportiere als &Snapmatic... + Exportiere als &Snapmatic... - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All Alles &auswählen - + &Deselect All Alles a&bwählen @@ -2382,15 +2410,15 @@ Exportieren als: - + Select Profile Profil auswählen - + - + Select GTA V Folder... Wähle GTA V Ordner... @@ -2416,7 +2444,7 @@ Exportieren als: - + &About %1 &Über %1 diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm index a7fe0365dd97100a27318bb3caf55c4bfcc03940..a017ab7fb6f68d45df27e8578c6f80bd1e12bf79 100644 GIT binary patch delta 2102 zcmXAqdsI~Q7RUFT`3-YkGsg!sAPhPnG{6jR7)ZcJp%Fo9s7uR26z`<~EyeC_Ef`E& zY0iaU?nn>JFfgo0cwFN#?~&e4F>nJ^b^TbI$L#f8V|LcmJrZ z*IcR91Y~rr2>g1a(R0EQa=5VR;MrM3{H3~pNG`6cE;BA+3o%y{5m!%a*FTApA0yVy zh+B1-*^_@?M< z2NXRPBrTGn`y;^DDEjw!a5u#q%po$FC}u2<)ul4&3(8E(Cb9%mcJXPV^o=y{Rx-P}v0{gw9LslY*R z(a>pZ^m~IY?a&d$XVD+!`9wk2HR4Y;qKD6^Ofsr;^lQw!!;o04X63?BqH$+6Ym%-L z*;i^R8=oV0n`Xkiahj`!PoecLXX$nm1-#A8wGHE_`P{Q#VM}r;SN3`V(IbJ}%kS?d z3Yo*X;_zNbnXHH`(dn_N01{zz&s;7H;pdA)=@fuA?J` zD8`@b^oA2fZ{!ZKC?ss=j&D_n0;EkpXE%>xy&&W+w7@qZrXOp+RiqOf0{@fV6Hb|1pV*qUrTBTf2_6U4@C2V zsNW;Mf!H@K1H1{=fVaU;@Bw&^wbo)+h99T_V?iyrknOeYL>b;u=}c~9pKMr!hWfE? zsR(u0!47RtCW;GXzIFeG>;{!l*Hxxin6GOC)_ub+E$xPJ1a@nnkH|Q{?j1;huzDRE z+h^(5`L{Gcc8kiuXx);NUL-iAEBjzMk$I2K8M}ajN!02ZZOA0Srfa%WKs4E=YhJ$? zmhE&KSm=bbJiqx%Bk+3EZ#lOL4*toV$xKmBy*Rp-XzFJwW0vdv*+)c~Hof&;4^+LY zw|@)N^IK5&e0+*9&hLiuJ$bVLIilyl!?cdc2x9_r?;1n)#V`no&DDKkFJs-%-Fn+2SKg z8s_uckdkpBU)J;?rYx+4Uv;DyX6xsxEkD9Mi}^!dOj&}4_jVzmwwCWbisGB?{75$h zNyh}!;UierCYa97z=2GNycG_!RSHr6KpekkR2n=&>gH^iEnS$?P=o8BU&yOFj^{yP zslFX$xGEGiB$JbDPYR`v!#<8mp>!q4WeYFgOvJcW3v27q6;>&{Ir|*CeOPeCrr@Al zq4`KY?DCgze1;Qt2^9LDeFCn?5e8!&SQjje3?lQa<={@xC2B51Sd>>Z1cVXUOyZP0 z#2@#V7*U;r0728l_+*sUHY844*$D1enL1NtX0ezzoP+mO;-V2F8rdf<>#V{-H^dc$ zN+~nMw{x)1?`M@#q)Pi?u`471t-2}pU9NzT4)L2}7$c-fJTVKtj~o?!>zw4Yuf;N%6kZN3zL*mDiN=ERF_C}sEoakviy8UBi-851-$UeeC+ zM+NUoLHl~Ku2@Q&GYZfAA}#qA8C&;B8;q#bxJi;Lr2w9KMshi458*?as2{kLNCvbqWTIuORHK&|W`cHPC`fz(-2VO)Ye@V344G@MoL(>d58gCK{{R30 delta 2214 zcmXAqdsGzX8OGn8o!QyB>@Fzx`$cXGEY}58Kv2;b1S18FNld}GSfW6pVA`IV#b9D> zCNZYQ0nwJ=$PwP%)+#o#Ci`%p&*{SE{wwo|1Z}-*C=+X_Pm77WL2OMk5z|0y>u-n>M~UrY ziA-M*>j2ZLh#k)-3f)Iss+lMzr~V^%YcX+-b41CPN!y%9q#K~{_;-lBwkS-AA>;HW zvsGlA-eh(-883!_+sJq?7VMzN{v|~2WfVERPx!wTCgxIFN)}PzM#{2WBAW9aEq)ga z*+$PLU5Ch0%I?6k)%+e=S1uQtrXz&BlTbr+Vt^Ok5r+3Hiy+naN5nzntz-FM-Q^enbDhD+|U5~&I`zC(Isf0-t4bqG#%K{W6oAN>jF(a!&JeK!O@;!83S zX`x7A&@+Dhbv%2Y;L9&tZy+LL{LVd<=(v@)kJzC!fp0m32+U#mquJk~aEHQ#-F)|G zBGIfKeqaC*(^>dyIXL9=YI^*239QA*cR4QE;@d zn(u-`_k}f$Xe4UCVBPTC_fTjRHWY(Qmay?rJW<$Xp`rn^Ww!`_SoAN1=CnfdS3-@+ zjDk5r%b8qQPQv*Nj4+~HxcJKR$k1M4+?0&<-onH<9GGVT4}i6z>MjHtJw=^s5DJ%x z0XeASw9qPsR4u^>8pPN{SRI`z&Mj^N^$L?0C`?}`=G?)$s4;QngdT;5#iE|KQRtz< zq#5E`f^&up@q;D!UUOBU6spkVCieQc;=arkFWjw!pyT4-EXb0N^|3fSAIB+dsp!~z zjEKuq7#5^3+@dgHSackOmBRbtxPJkWIbZy;{Q+jrh&MZ7?JQ^U&IN=uctlc73!AlF zQfIip(VryGV?$VHkx~{iu*)**!K@~-l0%Vme~)paIuWZ!d)o#zbdUSEhl}OHU|6Z{kvC<70R!@m1$OK+OKyzDGxw$3q+%gZP?(S+ zw-_Kiq*p#Uu?Y=N$bG6!wkbZ?`Km5F8Sxi)>x^Gxhj@2ewAS4^sGGm_5>8WwF5d;C z_cAC9`9XKQe--{tQWOS$ryE@5ibIm8yIF=)<=3HSr|(^Vf4%qTINjoG{jtIl9QWG_ zBhvN#Wq9wg+~D;(^aLI^q(49cOqqr?Z%*P5VZ=~2+6m)g&4xE>F&XZ+hJDWp5Z($y z$1n;Q-Y^XI!ok2e!^M$qI38n|{F4dqTMbinuOiFNs5bALE=HJelg*2YN;X*522_*> vl-rIbdf7aKoVqUhTYYSO-X1n{nt#`_RGG0ke7&Y0Y#KkGpMQKgy+Qat3_M}g diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index 7720a27..0d7e70e 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -74,35 +74,41 @@ Pictures and Savegames - + Release - + Release Candidate - + + Daily Build - + Developer - + Beta - + Alpha + + + Custom + + CrewDatabase @@ -438,26 +444,26 @@ When you want to use it as Avatar the image will be detached! - + %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 @@ -499,11 +505,13 @@ When you want to use it as Avatar the image will be detached! + Export as &Picture... + Export as &Snapmatic... @@ -514,6 +522,7 @@ When you want to use it as Avatar the image will be detached! + &Edit Properties... @@ -560,91 +569,105 @@ Press 1 for Default View - + Export as Picture... - - + + Export - + JPEG Graphics (*.jpg *.jpeg) - + Portable Network Graphics (*.png) - - - - + + + + + + Export as Picture - - + + Overwrite %1 with current Snapmatic picture? - - - Failed to overwrite %1 with current Snapmatic picture - - - - - - + + Failed to export current Snapmatic picture - - + + No valid file is selected - + + Failed to export the picture because the system occurred a write failure + + + + + Failed to export the picture because the format detection failures + + + + + Failed to export the picture because the file can't be written + + + + + Failed to export the picture because of an unknown reason + + + + Export as Snapmatic... - + GTA V Export (*.g5e) - + GTA V Raw Export (*.auto) - + Snapmatic pictures (PGTA*) - - - - - - + + + + + Export as Snapmatic - + Exported Snapmatic to "%1" because of using the .auto extension. @@ -704,197 +727,197 @@ Press 1 for Default View - - + + Import... - - - - - - - - - - - - - + + + + + + + + + + + + + Import - + Importable files (%1) - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) - + All image files (%1) - + All files (**) - - + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - + Failed to read Snapmatic picture - + Failed to read Savegame file - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - - - + + + + Export selected - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - + Export selected... - + Initialising export... Initializing export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - + + - Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files @@ -975,14 +998,12 @@ Press 1 for Default View - + Export - - Delete savegame @@ -992,75 +1013,75 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All - + Savegame files (SGTA*) - + All files (**) - - - + + + Export Savegame - + Overwrite %1 with current Savegame? - + Failed to overwrite %1 with current Savegame - + Failed to export current Savegame - + No valid file is selected @@ -1099,6 +1120,12 @@ Press 1 for Default View Are you sure to delete %1 from your savegames? + + + + Delete Savegame + + Failed at deleting %1 from your savegames @@ -1110,7 +1137,7 @@ Press 1 for Default View - + Snapmatic Properties @@ -1217,27 +1244,27 @@ Press 1 for Default View - + Patching of Snapmatic Properties failed because of I/O Error - + Snapmatic Title - + New Snapmatic title: - + Snapmatic Crew - + New Snapmatic crew: @@ -1245,7 +1272,7 @@ Press 1 for Default View SnapmaticPicture - + PHOTO - %1 @@ -1305,67 +1332,52 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - - &Edit Properties... - - - - + &Export - - Export as &Picture... - - - - - Export as &Snapmatic... - - - - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1447,7 +1459,7 @@ Press 1 for Default View - + &About %1 @@ -1559,9 +1571,9 @@ Press 1 for Default View - + - + Select GTA V Folder... @@ -1593,7 +1605,7 @@ Press 1 for Default View - + Select Profile diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index affe051b68b31e35db7fe008f38fc898fa6add59..1750a3e81909b81a84f8b685ddb765cde1b67899 100644 GIT binary patch delta 2104 zcmXAqdsGzn70183JG-+pvkw+`iwY=8Q655g2ndRTh+sejWkm^yF+#Ko!~iCqJ{Ds= z(UhRkZ0TvpQ3x6%v>E~936T^KQ(|N-r9@*|8>=Q9dc+seVouX9oxeW6nYq8a_wl`V zM}{dj z%=AUrq`yViRIYL%X+au;RghLP1Q*tYBYiJ3jW-~(h0INYD?b--Sn-=vgN(cw$2Qx5 zgdnu;?*qg_d^Ax_$NO-5i1vyfzH8D0D?Y&e@@xk9o<{z99B#0@8GvUp8z2{6)<@^M^q6yV}CfXpmE+E!)ddtzW1;x-p91Z>UWC zLVMzs1m4Tho{Vz?nk<#Zw^UAjN#&fgDidB;>3m+>`uuHRah$fJBNj-B(w^;c1p>)) zwOv98GxgT?|JDl3I;8dNph01a_C|juBTdxaJZ=Zp+|xddoWkA;I_db|fYr6S*y?d0 zuT&e%rIRyP{TyT3xYvm#byKwu}>3$pFShRr_g@cDIsUU5n!p8u+L>% zLs4xJYTsaQO*4cy3+gCD2rYH@fr2pd5m`*~V!>tdG4R|H@;_uH`6Kzh&~kvcp1V$J z7`TDD(+w$G|>QA3M5BMC^-@L z@mgD8SX~qZMC2P@&{lAKoQ5qp;%3>UiA?3wz%yZzL+y6R(yFAnB5^BJW|aJ7m4lxH;{i;Z0;^6 zE5#2p?*dbgiyedWf!Lj5PY<{re(-&;(=3L^Dg>WL)~7 zky`o2n03MftU6=NKEq15yuUJ*HNFSLIE)qDB^2ZP#+q5zD6#@$R}aT8bAz$(0xJ^y zbK_Vi1F`Iod_L{w_b(-%zb8|KH>5dF0!ghD@+$AkU#qljlhW(!7;uPGB(jo@)zYSV z2AmorZO@>#oKvOkrT01i2EFw1<7m#SO{zM?UKzcl+K5>0fj>&k-Pu404e%!>Dt$H-4)%_sv{+%KCQv)S_jIbbFIIxfmVHC#lqBjw2X ztlY8;d0}Y-1NnZEbi5{8eNnVqUO7U;)LnA^m<8C7D{lrXV9$_$w}KaxLn_TTRi@R+ z=lmQ%T$6lhw3-1tlrJx(`V%H(&(3y0dQoLUm&!%HDzm%f;h9eEmv7~(CtVL%(r@Kk zXZnHpx$?**iYn%+qB;93_BLFZ*51dS9#snd!c3ABWsijwaJ-?^#^$lKca_@Zx4ByL zRc1d`>i+A;F+Hptz%7oWMsfRaQ9XM{X$bo@?c6F?B`RHI^jjRFbh*mtV8dnQ!r~EN zu3Pa`@rR2BmBDvQfUM7zzq+}*GcPIMcYei;ZmG1cH3`2@qn&J$M#q8hM3epXDV*yS zCjU>S^UrFgDJ=LQ6FOz8%w%PrDKqU)b@RU2R3FY~d9JBJBe3PWOs@YQvZtGxt&B9j z)b#OKCC72X)TtrOI@1@KK3uUiX5SHtG;5kU^g117?J~#j=NOuDReHZ@PBv4N!S~Ed zcMoySubcDiY-M1W%J@6xkIr+$jE3o2tWxcQAKXXR-W4YjDI$0rXGIFYnEt8t*)%9C_B7EvbX)q c(&E)t5%Ad1_HeGRqis*po#}1E>kixg2a)k_ z>SDJk#cgS=U366FR7KP+t5yWNt`{u2Zg;y@>xd&`U8^m&wT|wKXSS0`o|FIl|98I2 z`+do=^P0hnnm7I3Hvy~zlo*vG9e{QNVA2A@MZi}B=;j0SqJarkuCE0mZQQ?ErRg#d z>&@>6ReBqM~UEk+Ga+u0RsW5EM0eseD!lYM$ut=4Qx)CvKcrg$$Y&yb4xuB8%GZC1%Qsn|!W&UnW z(C$!R#41hsq9F#_rm2bh!Oci_Xlv8%x}aB> z$>5WM)&0wK)^xcLKZggCbA<&{w*hlIg?gWb6kCL_`S+~3a#i?4K_dkUp{?;QuyiK* z1G$FexusXgAA!Pb@@KM+d`$jDXxqY5g||rxd07bQMdk_Z6L$a!af18FMa~i7la2YT zWt7mRl(6P5;pn!>K$@@6_rlvOO|{B|b1E0UF7zGV$bId?&B89g?_=So{?lZl@bFVB zOLa>p44;d8OXt6<888H@47si=IM)q48>p-Nu$0Q(>ejVPWCWShb=x200#WbiS~n~K z3byI??m5C*=jg88phNnv^}6^D!0RP_P%qnUafLpoFbw$Z8~Rdh6)^3Aeq|mrCbWy< zfG;qzQIv;VEZqu~@q;SoE)gd@JV9~4D@J`xhPp$<<1F8cVP?YH40pQdkawIEc%Xe;N#XHx6&EKa$F(y0Wt?`)@Ze(5}FrBJ#Q9S@8-AlmoH@uz zmJ}@K-|+^DO64*z1OBqSHI4g~T$QF)l__!Z;V}UmXesjPTeU!mPClDR_1m_|eJ>mU zq;QqCQqs+ZnV+c(3(m`z#^!P0{49UD=N?nKTfV;k6bI6MdGIvFWqn!E9DD_s(yxp< z(94>ZCaK!&o}noIHW*CBa;b|0$DHYtsd#;{FyC|huy?dYd81#)0z zY*Jd>k+0FfbfsmO*%`{wN*XSCdk1=w>_Y5G{Sd-4o#Jq2G zH_UCK`umK{QCyG)jV&61o(HR(f6Ulwrl->siW1Dc7H+eC9co(>A$HhmNq{$KF;M z7i&7PB!H@}G+lSnaO8P!VR%$d-0Xdz$iYmMtDNm)9=(c=O*&(qb&s`8ahjd|`}s3n zU|!wG5=f=yj~?f7l#AxJv$W%1W~v);cOGEDoo`ho@nQ%1!WlaqnhsS4GHvoXV;tf++Uw+^(;#Z z^V|;~;aNRR=-4_wI>0m?X>`=_B#>fHOjw8~YP=yd8hrhF?5VW>d*pDgu-MnFuBvu< a)=UcOIBB~v+Vi$$vBzEz(9yog et les fichiers de sauvegarde de Grand Theft Auto V - + Release - + Release Candidate - + + Daily Build - + Developer - + Beta - + Alpha + + + Custom + Personnalisé + CrewDatabase @@ -573,13 +579,13 @@ When you want to use it as Avatar the image will be detached! Système - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. @@ -592,15 +598,15 @@ When you want to use it as Avatar the image will be detached! Le changement de langue sera actif au prochain lancement de %1. - + No Profile No Profile, as default Aucun profil - - - + + + Profile: %1 Profil : %1 @@ -660,37 +666,56 @@ When you want to use it as Avatar the image will be detached! Exporter comme Snapmatic... - + + Failed to export the picture because the system occurred a write failure + + + + + Failed to export the picture because the format detection failures + + + + + Failed to export the picture because the file can't be written + + + + + Failed to export the picture because of an unknown reason + + + + Export as Snapmatic... - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + GTA V Raw Export (*.auto) GTA V Export Brut (*.g5e) - + Snapmatic pictures (PGTA*) Fichiers GTA Snapmatic (PGTA*) - - - - - - + + + + + Export as Snapmatic - + Exported Snapmatic to "%1" because of using the .auto extension. Exporté comme "%1" avec l'utilisation de l'extension .auto. @@ -703,42 +728,42 @@ When you want to use it as Avatar the image will be detached! Exporter comme GTA Snapmatic - - + + Overwrite %1 with current Snapmatic picture? %1 existe déjà. Vous-vous le remplacer ? - + Export as Picture... - + JPEG Graphics (*.jpg *.jpeg) - - - - + + + + + + Export as Picture - - Failed to overwrite %1 with current Snapmatic picture - Echec du remplacement de %1 + Echec du remplacement de %1 Failed to copy current Snapmatic picture Echec de la copie - - + + No valid file is selected Fichier invalide @@ -748,6 +773,7 @@ When you want to use it as Avatar the image will be detached! + Export as &Picture... @@ -757,6 +783,7 @@ When you want to use it as Avatar the image will be detached! + Export as &Snapmatic... @@ -771,6 +798,7 @@ When you want to use it as Avatar the image will be detached! + &Edit Properties... Modifier les &propriétés... @@ -836,8 +864,8 @@ Appuyer sur 1 pour le mode par défaut Exporter comme image JPG... - - + + Export Exporter @@ -846,7 +874,7 @@ Appuyer sur 1 pour le mode par défaut Image JPEG (*.jpg) - + Portable Network Graphics (*.png) Portable Network Graphics (*.png) @@ -855,9 +883,8 @@ Appuyer sur 1 pour le mode par défaut Exporter comme image JPG - - - + + Failed to export current Snapmatic picture Échec de l'export de la photo Snapmatic @@ -921,25 +948,25 @@ Appuyer sur 1 pour le mode par défaut Chargement... - - + + Import... Importer... - - - - - - - - - - - - - + + + + + + + + + + + + + Import Importer @@ -948,36 +975,36 @@ Appuyer sur 1 pour le mode par défaut Fichiers de profil GTA (SGTA* PGTA*) - + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) - + All image files (%1) - + All files (**) Tous les fichiers (**) - - + + Import file %1 of %2 files Importation du fichier %1 sur %2 - + Import failed with... %1 @@ -986,25 +1013,25 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No valid file is selected Fichier invalide - + Importable files (%1) - + Failed to read Snapmatic picture Impossible d'ouvrir la photo Snapmatic - + Failed to read Savegame file Impossible de lire le fichier de sauvegarde @@ -1026,78 +1053,78 @@ Appuyer sur 1 pour le mode par défaut Tous les fichiers image (*.jpg *.png) - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*, *.g5e) - + Failed to import the Snapmatic picture, the picture is already in the game Impossible d'importer la photo Snapmatic, un fichier du même nom existe déjà - + Failed to import the Snapmatic picture, can't copy the file into profile Impossible d'importer la photo Snapmatic, impossible de copier le fichier dans le profil - + Failed to import the Savegame, can't copy the file into profile Impossible d'importer la sauvegarde, impossible de copier le fichier dans le profil - + Failed to import the Savegame, no Savegame slot is left Impossible d'importer la sauvegarde, aucun emplacement libre - - - - + + + + Export selected Exporter la sélection - - + + JPG pictures and GTA Snapmatic Images JPG et GTA Snapmatic - - + + JPG pictures only Images JPG seulement - - + + GTA Snapmatic only GTA Snapmatic seulement - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exporter les photos Snapmatic%2<br><br>Les fichiers JPG permettent d'ouvrir les photos avec une visionneuse d'images<br>Les GTA Snapmatic permettent d'importer les photos dans le jeu<br><br>Exporter comme : - + Export selected... Exporter la sélection... - + Initialising export... @@ -1106,7 +1133,7 @@ Appuyer sur 1 pour le mode par défaut Initialisation de l'export... - + Export failed with... %1 @@ -1115,25 +1142,25 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No Snapmatic pictures or Savegames files are selected Aucun fichier de sauvegarde ou photo Snapmatic sélectionné - + + - Remove selected Supprimer la sélection - + You really want remove the selected Snapmatic picutres and Savegame files? Supprimer la sélection ? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Impossible de supprimer la sélection @@ -1143,7 +1170,7 @@ Appuyer sur 1 pour le mode par défaut Tous les fichiers de profil (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1220,14 +1247,12 @@ Appuyer sur 1 pour le mode par défaut - + Export Exporter - - Delete savegame Supprimer la sauvegarde @@ -1237,45 +1262,45 @@ Appuyer sur 1 pour le mode par défaut Supprimer - + &Export &Exporter - + Savegame files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - + All files (**) Tous les fichiers (**) - - - + + + Export Savegame Exporter la sauvegarde - + Overwrite %1 with current Savegame? Remplacer %1 ? - + Failed to overwrite %1 with current Savegame Impossible de remplacer %1 - + Failed to export current Savegame Impossible d'exporter la sauvegarde - + No valid file is selected Fichier invalide @@ -1316,38 +1341,44 @@ Appuyer sur 1 pour le mode par défaut Are you sure to delete %1 from your savegames? Supprimer %1 ? + + + + Delete Savegame + + Failed at deleting %1 from your savegames Impossible de supprimer %1 - + &View &Voir - + &Remove &Supprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner to&ut - + &Deselect All &Déselectionner tout @@ -1357,7 +1388,7 @@ Appuyer sur 1 pour le mode par défaut - + Snapmatic Properties Propriétés Snapmatic @@ -1401,7 +1432,7 @@ Appuyer sur 1 pour le mode par défaut Meme - + Snapmatic Title Titre Snapmatic @@ -1475,22 +1506,22 @@ Appuyer sur 1 pour le mode par défaut Non - + 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 : @@ -1498,7 +1529,7 @@ Appuyer sur 1 pour le mode par défaut SnapmaticPicture - + PHOTO - %1 PHOTO - %1 @@ -1568,27 +1599,26 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + Edi&t Édi&ter - + Show &In-game &Visible en jeu - + Hide &In-game &Invisible en jeu - &Edit Properties... - Modifier les &propriétés... + Modifier les &propriétés... - + &Export &Exporter @@ -1596,47 +1626,37 @@ Appuyer sur 1 pour le mode par défaut Export as &JPG picture... Exporter comme image &JPG... - - - Export as &Picture... - - Export as &GTA Snapmatic... Exporter comme &GTA Snapmatic... - - Export as &Snapmatic... - - - - + &View &Voir - + &Remove S&upprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner &tout - + &Deselect All &Déselectionner tout @@ -1810,9 +1830,9 @@ Appuyer sur 1 pour le mode par défaut - + - + Select GTA V Folder... Modifier l'emplacement de GTA V... @@ -1855,14 +1875,14 @@ Appuyer sur 1 pour le mode par défaut - + &About %1 &À propos de %1 - + Select Profile Sélectionner un profil diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index ebb1842d4ba233af9c2e6d19771f73ac68e93d5c..7fe9420cb62e0958f89e55e8761dfed2419a3dac 100644 GIT binary patch delta 1975 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 G*#7{MbYZ~& diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index 1518d41..0db3db5 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -143,35 +143,41 @@ Pictures and Savegames Grand Theft Auto V Snapmatic картинок и Ñохранений - + Release - + Release Candidate - + + Daily Build - + Developer - + Beta - + Alpha + + + Custom + + CrewDatabase @@ -536,13 +542,13 @@ When you want to use it as Avatar the image will be detached! СиÑтема - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. @@ -555,15 +561,15 @@ When you want to use it as Avatar the image will be detached! Язык изменитÑÑ Ð¿Ð¾Ñле перезапуÑка %1. - + No Profile No Profile, as default Ðет Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - - - + + + Profile: %1 Профиль: %1 @@ -625,8 +631,8 @@ When you want to use it as Avatar the image will be detached! &Закрыть - - + + Export ЭкÑпортировать @@ -644,6 +650,7 @@ When you want to use it as Avatar the image will be detached! + Export as &Picture... @@ -653,6 +660,7 @@ When you want to use it as Avatar the image will be detached! + Export as &Snapmatic... @@ -667,6 +675,7 @@ When you want to use it as Avatar the image will be detached! + &Edit Properties... &Изменить ÑвойÑтва... @@ -732,7 +741,7 @@ Press 1 for Default View Картинка JPEG (*.jpg) - + Portable Network Graphics (*.png) Картинка Portable Network Graphics (*.png) @@ -741,8 +750,8 @@ Press 1 for Default View ЭкÑпортировать как картинку JPG - - + + Overwrite %1 with current Snapmatic picture? ПерезапиÑать %1 текущей картинкой Snapmatic? @@ -751,59 +760,77 @@ Press 1 for Default View ЭкÑпортировать как GTA Snapmatic - - Failed to overwrite %1 with current Snapmatic picture - Ðе удалоÑÑŒ перезапиÑать %1 картинкой Snapmatic + Ðе удалоÑÑŒ перезапиÑать %1 картинкой Snapmatic - + Export as Picture... - + JPEG Graphics (*.jpg *.jpeg) - - - - + + + + + + Export as Picture - - - + + Failed to export the picture because the system occurred a write failure + + + + + Failed to export the picture because the format detection failures + + + + + Failed to export the picture because the file can't be written + + + + + Failed to export the picture because of an unknown reason + + + + + Failed to export current Snapmatic picture Ðе удалоÑÑŒ ÑкÑпортировать текущую картинку Snapmatic - + Export as Snapmatic... - - - - - - + + + + + Export as Snapmatic - + Exported Snapmatic to "%1" because of using the .auto extension. Snapmatic был ÑкÑпортирован как "%1" из-за раÑÑˆÐ¸Ñ€ÐµÐ½Ñ Ñ„Ð°Ð¹Ð»Ð°. - - + + No valid file is selected Выбранный файл неверен @@ -816,17 +843,17 @@ Press 1 for Default View ЭкÑпортировать как GTA Snapmatic... - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + GTA V Raw Export (*.auto) GTA V ЭкÑпорт ИÑходника (*.auto) - + Snapmatic pictures (PGTA*) Картинки Snapmatic (PGTA*) @@ -894,25 +921,25 @@ Press 1 for Default View Загрузка... - - + + Import... Импортировать... - - - - - - - - - - - - - + + + + + + + + + + + + + Import Импортировать @@ -921,31 +948,31 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (SGTA* PGTA*) - + Savegames files (SGTA*) Файлы ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ (SGTA*) - + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) - + All files (**) Ð’Ñе файлы (**) - - + + Import file %1 of %2 files ИмпортируютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ %1 из %2 - + Import failed with... %1 @@ -954,13 +981,13 @@ Press 1 for Default View %1 - + Failed to read Snapmatic picture Ðе удалоÑÑŒ загрузить картинку Snapmatic - + Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ @@ -970,8 +997,8 @@ Press 1 for Default View Ðе получилоÑÑŒ импортировать %1 из-за неправильного формата файла - - + + No valid file is selected Выбранный файл неверен @@ -990,93 +1017,93 @@ Press 1 for Default View Ð’Ñе Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (*.jpg *.png) - + Importable files (%1) - + All image files (%1) - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе удалоÑÑŒ импортировать картинку Snapmatic, название не начинаетÑÑ Ñ PGTA или не заканчиваетÑÑ Ñ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе удалоÑÑŒ импортировать картинку Snapmatic, картинка уже в игре - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе удалоÑÑŒ импортировать картинку Snapmatic, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, can't copy the file into profile Ðе удалоÑÑŒ импортировать Ñохранение, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, no Savegame slot is left Ðе удалоÑÑŒ импортировать Ñохранение, нет пуÑтых Ñчеек под ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + JPG pictures and GTA Snapmatic Картинки JPG и GTA Snapmatic - - + + JPG pictures only Только картинки JPG - - + + GTA Snapmatic only Только GTA Snapmatic - + Initialising export... - - + + No Snapmatic pictures or Savegames files are selected Ðе выделены ни один Snapmatic или Ñохранение - + + - Remove selected СнÑть выделение - + You really want remove the selected Snapmatic picutres and Savegame files? Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Ðе удалоÑÑŒ удалить полноÑтью выбранные картинки Snapmatic и/или файлы Ñохранений @@ -1097,20 +1124,20 @@ Press 1 for Default View Ðе получилоÑÑŒ имортировать копию ÑохранениÑ, потому что не оÑталоÑÑŒ Ñвободных под них Ñлотов - - - - + + + + Export selected ЭкÑпортировать выделенное - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1ЭÑкпортировать картинки Snapmatic%2<br><br>Картинки JPG можно открыть любым проÑмотрщиком<br>Картинки формата GTA Snapmatic можно Ñнова импортировать в игру<br><br>ЭкÑпортировать как: - + Export selected... Экпортировать выделенное... @@ -1119,7 +1146,7 @@ Press 1 for Default View Подготавливаю ÑÑкпорт... - + Export failed with... %1 @@ -1140,7 +1167,7 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1219,7 +1246,7 @@ Press 1 for Default View - + Export ЭкÑпорт @@ -1234,8 +1261,6 @@ Press 1 for Default View - - Delete savegame Удалить Ñохранение @@ -1281,38 +1306,44 @@ Press 1 for Default View Are you sure to delete %1 from your savegames? Ð’Ñ‹ уверены, что хотите удалить Ñохранение %1? + + + + Delete Savegame + + Failed at deleting %1 from your savegames Ðе удалоÑÑŒ удалить Ñохранение %1 - + &View &ПроÑмотр - + &Remove &Удалить - + &Select &Выбрать - + &Deselect Сн&Ñть выбор - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1322,40 +1353,40 @@ Press 1 for Default View Копировать Ñохранение - + &Export &ЭкÑпортировать - + Savegame files (SGTA*) Файлы Ñохранений (SGTA*) - + All files (**) Ð’Ñе файлы (**) - - - + + + Export Savegame ЭкÑпортировать Ñохранение - + Overwrite %1 with current Savegame? ПерезапиÑать %1 текущим Ñохранением? - + Failed to overwrite %1 with current Savegame Ðе удалоÑÑŒ перепиÑать %1 текущим Ñохранением - + Failed to export current Savegame Ðе удалоÑÑŒ ÑкÑпортировать текущее Ñохранение @@ -1372,7 +1403,7 @@ Press 1 for Default View Ðе удалоÑÑŒ Ñкопировать текущее Ñохранение - + No valid file is selected Выбранный файл неверен @@ -1382,7 +1413,7 @@ Press 1 for Default View - + Snapmatic Properties СвойÑтва Snapmatic @@ -1433,7 +1464,7 @@ Press 1 for Default View Meme - + Snapmatic Title Заголовок Snapmatic @@ -1494,22 +1525,22 @@ Press 1 for Default View Ðет - + Patching of Snapmatic Properties failed because of I/O Error Ðе удалоÑÑŒ измененить ÑвойÑтва Snapmatic из-за проблемы ввода/вывода - + New Snapmatic title: Ðовый заголовок Snapmatic: - + Snapmatic Crew Банда на Snapmatic - + New Snapmatic crew: ÐÐ¾Ð²Ð°Ñ Ð±Ð°Ð½Ð´Ð° на Snapmatic: @@ -1517,7 +1548,7 @@ Press 1 for Default View SnapmaticPicture - + PHOTO - %1 ФОТО - %1 @@ -1577,27 +1608,26 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить %1 из колелкции картинок Snapmatic - + Edi&t &Правка - + Show &In-game Показывать в &игре - + Hide &In-game Ск&рыть в игре - &Edit Properties... - &Изменить ÑвойÑтва... + &Изменить ÑвойÑтва... - + &Export &ЭкÑпорт @@ -1605,47 +1635,37 @@ Press 1 for Default View Export as &JPG picture... ЭкÑп&ортировать как картинку JPG... - - - Export as &Picture... - - Export as &GTA Snapmatic... ЭкÑ&портировать как GTA Snapmatic... - - Export as &Snapmatic... - - - - + &View По&казать - + &Remove У&далить - + &Select &Выделить - + &Deselect Сн&Ñть выделение - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1867,15 +1887,15 @@ Press 1 for Default View - + Select Profile Выбор Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - + - + Select GTA V Folder... Выбрать папку GTA V... @@ -1888,7 +1908,7 @@ Press 1 for Default View - + &About %1 &О %1 From 9bb5e6755e4ad1178045448bfbfe23a3fd19f4af Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 12 Oct 2017 22:42:15 +0200 Subject: [PATCH 009/359] isRemoteEmited code change --- ProfileInterface.cpp | 24 +--- lang/gta5sync_no.ts | 316 ++++++++++++++++++++++-------------------- res/gta5sync_de.ts | 148 ++++++++++---------- res/gta5sync_en_US.ts | 148 ++++++++++---------- res/gta5sync_fr.ts | 148 ++++++++++---------- res/gta5sync_ru.ts | 148 ++++++++++---------- 6 files changed, 464 insertions(+), 468 deletions(-) diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 176353e..9a398e3 100755 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -350,6 +350,7 @@ void ProfileInterface::savegameDeleted(SavegameWidget *sgdWidget, bool isRemoteE if (sgdWidget->isSelected()) { sgdWidget->setSelected(false); } widgets.remove(sgdWidget); + sgdWidget->disconnect(); sgdWidget->removeEventFilter(this); if (sgdWidget == previousWidget) { @@ -357,16 +358,7 @@ void ProfileInterface::savegameDeleted(SavegameWidget *sgdWidget, bool isRemoteE } // Deleting when the widget did send a event cause a crash - if (isRemoteEmited) - { - sgdWidget->disconnect(); - sgdWidget->deleteLater(); - } - else - { - sgdWidget->disconnect(); - delete sgdWidget; - } + isRemoteEmited ? sgdWidget->deleteLater() : delete sgdWidget; savegames.removeAll(savegame); delete savegame; @@ -383,6 +375,7 @@ void ProfileInterface::pictureDeleted(SnapmaticWidget *picWidget, bool isRemoteE if (picWidget->isSelected()) { picWidget->setSelected(false); } widgets.remove(picWidget); + picWidget->disconnect(); picWidget->removeEventFilter(this); if (picWidget == previousWidget) { @@ -390,16 +383,7 @@ void ProfileInterface::pictureDeleted(SnapmaticWidget *picWidget, bool isRemoteE } // Deleting when the widget did send a event cause a crash - if (isRemoteEmited) - { - picWidget->disconnect(); - picWidget->deleteLater(); - } - else - { - picWidget->disconnect(); - delete picWidget; - } + isRemoteEmited ? picWidget->deleteLater() : delete picWidget; pictures.removeAll(picture); delete picture; diff --git a/lang/gta5sync_no.ts b/lang/gta5sync_no.ts index f18d088..81a61d4 100644 --- a/lang/gta5sync_no.ts +++ b/lang/gta5sync_no.ts @@ -74,35 +74,41 @@ Pictures and Savegames - + Release - + Release Candidate - + + Daily Build - + Developer - + Beta - + Alpha + + + Custom + + CrewDatabase @@ -438,26 +444,26 @@ When you want to use it as Avatar the image will be detached! - + %1 %1 - + The new Custom Folder will initialise after you restart %1. - + No Profile No Profile, as default - - - + + + Profile: %1 @@ -499,11 +505,13 @@ When you want to use it as Avatar the image will be detached! + Export as &Picture... + Export as &Snapmatic... @@ -514,6 +522,7 @@ When you want to use it as Avatar the image will be detached! + &Edit Properties... @@ -560,91 +569,105 @@ Press 1 for Default View - - + + Export - + Export as Picture... - + JPEG Graphics (*.jpg *.jpeg) - + Portable Network Graphics (*.png) - - + + Overwrite %1 with current Snapmatic picture? - - - - + + + + + + Export as Picture - - - Failed to overwrite %1 with current Snapmatic picture - - - - - - + + Failed to export current Snapmatic picture - - + + No valid file is selected - + + Failed to export the picture because the system occurred a write failure + + + + + Failed to export the picture because the format detection failures + + + + + Failed to export the picture because the file can't be written + + + + + Failed to export the picture because of an unknown reason + + + + Export as Snapmatic... - + GTA V Export (*.g5e) - + GTA V Raw Export (*.auto) - + Snapmatic pictures (PGTA*) - - - - - - + + + + + Export as Snapmatic - + Exported Snapmatic to "%1" because of using the .auto extension. @@ -704,197 +727,197 @@ Press 1 for Default View - - + + Import... - - - - - - + + + + + + + + - - - - - + + + Import - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) - + Importable files (%1) - + All image files (%1) - + All files (**) - - + + No valid file is selected + - Import file %1 of %2 files - + Import failed with... %1 - + Failed to read Snapmatic picture - + Failed to read Savegame file - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - - - + + + + Export selected - - + + JPG pictures and GTA Snapmatic + - JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - + Export selected... - + Initialising export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - - + + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files @@ -975,14 +998,12 @@ Press 1 for Default View - + Export - - Delete savegame @@ -992,75 +1013,75 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All - + Savegame files (SGTA*) - + All files (**) - - - + + + Export Savegame - + Overwrite %1 with current Savegame? - + Failed to overwrite %1 with current Savegame - + Failed to export current Savegame - + No valid file is selected @@ -1099,6 +1120,12 @@ Press 1 for Default View Are you sure to delete %1 from your savegames? + + + + Delete Savegame + + Failed at deleting %1 from your savegames @@ -1110,7 +1137,7 @@ Press 1 for Default View - + Snapmatic Properties @@ -1217,27 +1244,27 @@ Press 1 for Default View - + Patching of Snapmatic Properties failed because of I/O Error - + Snapmatic Title - + New Snapmatic title: - + Snapmatic Crew - + New Snapmatic crew: @@ -1245,7 +1272,7 @@ Press 1 for Default View SnapmaticPicture - + PHOTO - %1 @@ -1305,67 +1332,52 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - - &Edit Properties... - - - - + &Export - - Export as &Picture... - - - - - Export as &Snapmatic... - - - - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1447,7 +1459,7 @@ Press 1 for Default View - + &About %1 @@ -1559,9 +1571,9 @@ Press 1 for Default View - + - + Select GTA V Folder... @@ -1593,7 +1605,7 @@ Press 1 for Default View - + Select Profile diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index 3a76041..3f3a4ae 100755 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -831,7 +831,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! - + Export as &Picture... Als &Bild exportieren... @@ -841,7 +841,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! - + Export as &Snapmatic... Als &Snapmatic exportieren... @@ -856,7 +856,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! - + &Edit Properties... Eigenschaften bearb&eiten... @@ -1182,25 +1182,25 @@ Drücke A für Standardansicht Lade... - - + + Import... Importieren... - - - + + + + - - - - + + + + + - - - - + + Import Importieren @@ -1213,13 +1213,13 @@ Drücke A für Standardansicht Importfähige Dateien (*.g5e *.jpg *.png SGTA* PGTA*) - + Savegames files (SGTA*) Spielstanddateien (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) @@ -1229,29 +1229,29 @@ Drücke A für Standardansicht Alle Bilddateien (*.jpg *.png) - + Importable files (%1) Importfähige Dateien (%1) - + All image files (%1) Alle Bilddateien (%1) - + All files (**) Alle Dateien (**) - - + + Import file %1 of %2 files Importiere Datei %1 von %2 Dateien - + Import failed with... %1 @@ -1260,29 +1260,29 @@ Drücke A für Standardansicht %1 - + 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 parsed properly Kann %1 nicht importieren weil die Datei nicht richtig gelesen werden kann - + Can't import %1 because file format can't be detected Kann %1 nicht importieren weil das Dateiformat nicht erkannt werden kann - + Initialising export... Initialisiere Export... @@ -1291,23 +1291,23 @@ Drücke A für Standardansicht Kann %1 nicht importieren weil das Dateiformat nicht gültig ist - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA oder endet mit .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Fehlgeschlagen beim Importieren vom Snapmatic Bild, dieses Bild ist bereits im Spiel - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exportiere Snapmatic Bilder%2<br><br>JPG Bilder machen es möglich sie mit ein Bildansicht Programm zu öffnen<br>Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren<br><br>Exportieren als: - - + + No valid file is selected Keine gültige Datei wurde ausgewählt @@ -1322,35 +1322,35 @@ Drücke A für Standardansicht Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA - + Failed to import the Snapmatic picture, can't copy the file into profile Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren - + Failed to import the Savegame, can't copy the file into profile Fehlgeschlagen beim Importieren vom Spielstand, kann Spielstanddatei nicht ins Profil kopieren - + Failed to import the Savegame, no Savegame slot is left Fehlgeschlagen beim Importieren vom Spielstand, kein Spielstandslot mehr frei - - + + JPG pictures and GTA Snapmatic JPG Bilder und GTA Snapmatic - - + + JPG pictures only Nur JPG Bilder - - + + GTA Snapmatic only Nur GTA Snapmatic @@ -1369,25 +1369,25 @@ Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren Exportieren als: - - + + No Snapmatic pictures or Savegames files are selected Keine Snapmatic Bilder oder Spielstände ausgewählt - - - + + + Remove selected Auswahl löschen - + You really want remove the selected Snapmatic picutres and Savegame files? Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Fehlgeschlagen beim kompletten entfernen der ausgewählten Snapmatic Bilder und/oder der Spielstanddateien @@ -1408,10 +1408,10 @@ Exportieren als: Fehlgeschlagenen beim Import vom Spielstand weil kein Spielstandslot mehr übrig ist - - - - + + + + Export selected Auswahl exportieren @@ -1432,7 +1432,7 @@ Exportieren als: Wie sollen wir mit den Snapmatic Bilder umgehen? - + Export selected... Auswahl exportieren... @@ -1445,7 +1445,7 @@ Exportieren als: Initialisierung... - + Export failed with... %1 @@ -1480,7 +1480,7 @@ Exportieren als: Alle Profildateien (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1644,32 +1644,32 @@ Exportieren als: Fehlgeschlagen beim Löschen %1 von deinen Spielständen - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All &Alles auswählen - + &Deselect All Alles a&bwählen @@ -1708,7 +1708,7 @@ Exportieren als: Spielstand kopieren - + &Export &Exportieren @@ -1981,7 +1981,7 @@ Exportieren als: Bist du sicher %1 von deine Snapmatic Bilder zu löschen? - + Edi&t Bearbei&ten @@ -1994,7 +1994,7 @@ Exportieren als: &Im Spiel deaktivieren - + &Export &Exportieren @@ -2007,12 +2007,12 @@ Exportieren als: Exportiere als &GTA Snapmatic - + Show &In-game &Im Spiel anzeigen - + Hide &In-game &Im Spiel ausblenden @@ -2045,32 +2045,32 @@ Exportieren als: Exportiere als &Snapmatic... - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All Alles &auswählen - + &Deselect All Alles a&bwählen diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index 0d7e70e..b706409 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -505,13 +505,13 @@ When you want to use it as Avatar the image will be detached! - + Export as &Picture... - + Export as &Snapmatic... @@ -522,7 +522,7 @@ When you want to use it as Avatar the image will be detached! - + &Edit Properties... @@ -727,197 +727,197 @@ Press 1 for Default View - - + + Import... - - - + + + + - - - - + + + + + - - - - + + Import - + Importable files (%1) - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) - + All image files (%1) - + All files (**) - - + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - + Failed to read Snapmatic picture - + Failed to read Savegame file - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - - - + + + + Export selected - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - + Export selected... - + Initialising export... Initializing export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - - + + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files @@ -1013,37 +1013,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1332,52 +1332,52 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index ecf9c2a..f535aa3 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -773,7 +773,7 @@ When you want to use it as Avatar the image will be detached! - + Export as &Picture... @@ -783,7 +783,7 @@ When you want to use it as Avatar the image will be detached! - + Export as &Snapmatic... @@ -798,7 +798,7 @@ When you want to use it as Avatar the image will be detached! - + &Edit Properties... Modifier les &propriétés... @@ -948,25 +948,25 @@ Appuyer sur 1 pour le mode par défaut Chargement... - - + + Import... Importer... - - - + + + + - - - - + + + + + - - - - + + Import Importer @@ -975,36 +975,36 @@ Appuyer sur 1 pour le mode par défaut Fichiers de profil GTA (SGTA* PGTA*) - + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) - + All image files (%1) - + All files (**) Tous les fichiers (**) - - + + Import file %1 of %2 files Importation du fichier %1 sur %2 - + Import failed with... %1 @@ -1013,25 +1013,25 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No valid file is selected Fichier invalide - + Importable files (%1) - + Failed to read Snapmatic picture Impossible d'ouvrir la photo Snapmatic - + Failed to read Savegame file Impossible de lire le fichier de sauvegarde @@ -1053,78 +1053,78 @@ Appuyer sur 1 pour le mode par défaut Tous les fichiers image (*.jpg *.png) - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*, *.g5e) - + Failed to import the Snapmatic picture, the picture is already in the game Impossible d'importer la photo Snapmatic, un fichier du même nom existe déjà - + Failed to import the Snapmatic picture, can't copy the file into profile Impossible d'importer la photo Snapmatic, impossible de copier le fichier dans le profil - + Failed to import the Savegame, can't copy the file into profile Impossible d'importer la sauvegarde, impossible de copier le fichier dans le profil - + Failed to import the Savegame, no Savegame slot is left Impossible d'importer la sauvegarde, aucun emplacement libre - - - - + + + + Export selected Exporter la sélection - - + + JPG pictures and GTA Snapmatic Images JPG et GTA Snapmatic - - + + JPG pictures only Images JPG seulement - - + + GTA Snapmatic only GTA Snapmatic seulement - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exporter les photos Snapmatic%2<br><br>Les fichiers JPG permettent d'ouvrir les photos avec une visionneuse d'images<br>Les GTA Snapmatic permettent d'importer les photos dans le jeu<br><br>Exporter comme : - + Export selected... Exporter la sélection... - + Initialising export... @@ -1133,7 +1133,7 @@ Appuyer sur 1 pour le mode par défaut Initialisation de l'export... - + Export failed with... %1 @@ -1142,25 +1142,25 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No Snapmatic pictures or Savegames files are selected Aucun fichier de sauvegarde ou photo Snapmatic sélectionné - - - + + + Remove selected Supprimer la sélection - + You really want remove the selected Snapmatic picutres and Savegame files? Supprimer la sélection ? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Impossible de supprimer la sélection @@ -1170,7 +1170,7 @@ Appuyer sur 1 pour le mode par défaut Tous les fichiers de profil (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1262,7 +1262,7 @@ Appuyer sur 1 pour le mode par défaut Supprimer - + &Export &Exporter @@ -1353,32 +1353,32 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + &View &Voir - + &Remove &Supprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner to&ut - + &Deselect All &Déselectionner tout @@ -1599,17 +1599,17 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + Edi&t Édi&ter - + Show &In-game &Visible en jeu - + Hide &In-game &Invisible en jeu @@ -1618,7 +1618,7 @@ Appuyer sur 1 pour le mode par défaut Modifier les &propriétés... - + &Export &Exporter @@ -1631,32 +1631,32 @@ Appuyer sur 1 pour le mode par défaut Exporter comme &GTA Snapmatic... - + &View &Voir - + &Remove S&upprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner &tout - + &Deselect All &Déselectionner tout diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index 0db3db5..04cd173 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -650,7 +650,7 @@ When you want to use it as Avatar the image will be detached! - + Export as &Picture... @@ -660,7 +660,7 @@ When you want to use it as Avatar the image will be detached! - + Export as &Snapmatic... @@ -675,7 +675,7 @@ When you want to use it as Avatar the image will be detached! - + &Edit Properties... &Изменить ÑвойÑтва... @@ -921,25 +921,25 @@ Press 1 for Default View Загрузка... - - + + Import... Импортировать... - - - + + + + - - - - + + + + + - - - - + + Import Импортировать @@ -948,31 +948,31 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (SGTA* PGTA*) - + Savegames files (SGTA*) Файлы ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ (SGTA*) - + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) - + All files (**) Ð’Ñе файлы (**) - - + + Import file %1 of %2 files ИмпортируютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ %1 из %2 - + Import failed with... %1 @@ -981,13 +981,13 @@ Press 1 for Default View %1 - + Failed to read Snapmatic picture Ðе удалоÑÑŒ загрузить картинку Snapmatic - + Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ @@ -997,8 +997,8 @@ Press 1 for Default View Ðе получилоÑÑŒ импортировать %1 из-за неправильного формата файла - - + + No valid file is selected Выбранный файл неверен @@ -1017,93 +1017,93 @@ Press 1 for Default View Ð’Ñе Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (*.jpg *.png) - + Importable files (%1) - + All image files (%1) - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе удалоÑÑŒ импортировать картинку Snapmatic, название не начинаетÑÑ Ñ PGTA или не заканчиваетÑÑ Ñ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе удалоÑÑŒ импортировать картинку Snapmatic, картинка уже в игре - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе удалоÑÑŒ импортировать картинку Snapmatic, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, can't copy the file into profile Ðе удалоÑÑŒ импортировать Ñохранение, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, no Savegame slot is left Ðе удалоÑÑŒ импортировать Ñохранение, нет пуÑтых Ñчеек под ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + JPG pictures and GTA Snapmatic Картинки JPG и GTA Snapmatic - - + + JPG pictures only Только картинки JPG - - + + GTA Snapmatic only Только GTA Snapmatic - + Initialising export... - - + + No Snapmatic pictures or Savegames files are selected Ðе выделены ни один Snapmatic или Ñохранение - - - + + + Remove selected СнÑть выделение - + You really want remove the selected Snapmatic picutres and Savegame files? Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Ðе удалоÑÑŒ удалить полноÑтью выбранные картинки Snapmatic и/или файлы Ñохранений @@ -1124,20 +1124,20 @@ Press 1 for Default View Ðе получилоÑÑŒ имортировать копию ÑохранениÑ, потому что не оÑталоÑÑŒ Ñвободных под них Ñлотов - - - - + + + + Export selected ЭкÑпортировать выделенное - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1ЭÑкпортировать картинки Snapmatic%2<br><br>Картинки JPG можно открыть любым проÑмотрщиком<br>Картинки формата GTA Snapmatic можно Ñнова импортировать в игру<br><br>ЭкÑпортировать как: - + Export selected... Экпортировать выделенное... @@ -1146,7 +1146,7 @@ Press 1 for Default View Подготавливаю ÑÑкпорт... - + Export failed with... %1 @@ -1167,7 +1167,7 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1318,32 +1318,32 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить Ñохранение %1 - + &View &ПроÑмотр - + &Remove &Удалить - + &Select &Выбрать - + &Deselect Сн&Ñть выбор - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1353,7 +1353,7 @@ Press 1 for Default View Копировать Ñохранение - + &Export &ЭкÑпортировать @@ -1608,17 +1608,17 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить %1 из колелкции картинок Snapmatic - + Edi&t &Правка - + Show &In-game Показывать в &игре - + Hide &In-game Ск&рыть в игре @@ -1627,7 +1627,7 @@ Press 1 for Default View &Изменить ÑвойÑтва... - + &Export &ЭкÑпорт @@ -1640,32 +1640,32 @@ Press 1 for Default View ЭкÑ&портировать как GTA Snapmatic... - + &View По&казать - + &Remove У&далить - + &Select &Выделить - + &Deselect Сн&Ñть выделение - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех From a2cb844c5694947d69365870c1ce132b7a60496b Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 12 Oct 2017 22:58:44 +0200 Subject: [PATCH 010/359] change to alpha11 --- config.h | 2 +- res/app.rc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config.h b/config.h index b68e57c..fa816ad 100755 --- a/config.h +++ b/config.h @@ -50,7 +50,7 @@ #ifndef GTA5SYNC_APPVER #ifndef GTA5SYNC_DAILYB -#define GTA5SYNC_APPVER "1.5.0-dev1" +#define GTA5SYNC_APPVER "1.5.0-alpha1" #else #define GTA5SYNC_APPVER GTA5SYNC_DAILYB #endif diff --git a/res/app.rc b/res/app.rc index 2a09572..626338c 100755 --- a/res/app.rc +++ b/res/app.rc @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view\0" - VALUE "FileVersion", "1.5.0\0" + VALUE "FileVersion", "1.5.0-alpha11\0" VALUE "InternalName", "gta5view\0" VALUE "LegalCopyright", "Copyright © 2016-2017 Syping\0" VALUE "OriginalFilename", "gta5view.exe\0" VALUE "ProductName", "gta5view\0" - VALUE "ProductVersion", "1.5.0\0" + VALUE "ProductVersion", "1.5.0-alpha11\0" END END END From d5572d42123f25045fd4795dc49ceb76fadf6576 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 12 Oct 2017 23:04:32 +0200 Subject: [PATCH 011/359] adapt travis script to alpha11 temporary --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 777b249..eb8ee12 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,14 +32,14 @@ before_script: script: - cd qt5 - - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$APPLICATION_VERSION --pkgrelease=travis1 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=alpha11 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package - cd .. - cd qt4 - - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$APPLICATION_VERSION --pkgrelease=travis1 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=alpha11 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package - cd .. deploy: From 61ead2c7e4a48bad7e6e45e44c0db9e43db6adc6 Mon Sep 17 00:00:00 2001 From: Vadim VADemon Date: Fri, 13 Oct 2017 01:35:10 +0200 Subject: [PATCH 012/359] Update ru_RU translation --- res/gta5sync_ru.qm | Bin 26894 -> 32283 bytes res/gta5sync_ru.ts | 103 +++++++++++++++++++++++---------------------- 2 files changed, 52 insertions(+), 51 deletions(-) diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index 7fe9420cb62e0958f89e55e8761dfed2419a3dac..dfb9929824d2f51ea76a36df84785760ae874696 100644 GIT binary patch delta 6112 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 Na&zQ5cDMO8{{zy}wOjxI delta 2382 zcmZ9NeRNEB8pppg^P9}vduKB8P9!3n5DAfBz;qhG8bArr7!(ZX*8!HF0MQBfv;)RMAh#Ka zv;)=`f#_sDze=OE4T$sR^&X8@+Ettb3ZfwPzXB8)Aese`a}L7k;i23Oan%7Nya8hh z9Zsl$F_-k+0po|6K;U2)Jr{ti?HY>NQ|+vc}@C5Y_9rR3NI?Z)qZ; zzKkHRA?jW%FkMD;%S2$n9}wN^FQo|1=ZC^>j7!J{VmBarJ~NzAjR~)lV@r^CkenJ0 zXK4}OzYA|4?qK8_&^XVB0UyJmjje#!2l)7L4G?C*?M^-~pTrM)jle_??k_C>27RxS z|2`Z@9;dP3rpA)@ox0HX1_6B>x~h^MW?H0MG5RMUJ6iXfy4gTTh3-e|N5H5s{j3YT zUo>97KOldNLE8TpU|NI0Uef~X<- zI0sjY_;ea%dBl{2-9Uy}yy-KIq6!h4-ePZ+FU0T5YAHmBgSGd8nTtqPXy$H`cC)PH zL-JMf5qX$=M&1+$H`A&-h}4mJq=9sbL&F<^)RgCRqG+2qyuK8WZir@OE;D{8PVF8; z5jG0Xsx53me~qba8mCSdo)hbNKTiBm&I#~aE`IK~NSeiyPwfn>zftts#eHq`Z`#I; z8#N9bU@W_ImI-b(F4^+}CufzhZg`Iq$h%>zf9&AsbQl}f&7k-$7(YDFLM_}fc74Zy zyq0qp9J{QnKFkQQp7UTbPb@i~+`Una-Z2R{FG6{MR#8s^7CMhX_qu?4ejNZHTu}33EOHJ zaJp1(Vg>!bmF8|^z?r4e;#_K}Bu#QIuHwPyl3so|3P{>1t$dd~GL=c2V(fJIj?{3b z0GPd8YD;6Q#>Got&YHyDemle(`mv&uPSBe`AH-DLo&D`acHAolu!JTRYr z0~~V1S}vaODmiuxE0eOS`?fHW$kCzzX36i1Jsqo*U1laJZ!7D)S%HAQ$|k#m zVvSNZ<=p0GyRNZtwNm?({~I%}D4TJMW0)Q%mUASsBCw z9aOX{=Tq-ceESs7O1`*4uXOC1PYn!LuDH0XCx<$?EAm*Gkv7Z5OcyIsVc9l<*U}#?bvgkjk{&%j zpkS+|!Ny3(Hd#LHUcnVR#L}!IEuUEaoEOBEy1?514n;b7wKeK*bTs*jHGU(N6_nz62v{HN97&sGjvtufx;`f&@#d%$Roaj#g<%?O~VhQ?cOEv4gOr@ck* zYK-diK3chum2hZG`G+m|B?cB3Y)gH>-ez~(mUbLrhTq$k)v^WVXSTi1in+33JJ?P? z{xP<5Cs?_WPi;LrWBB_#I-4`dz-4$85s1S;FPt44>h6=~Ugxt{ zuci-(cTe_r>C}xwebt_TIyJcOXmwwBrCJ>5tNH{_QV#?tt0($Lxch~8>D((rKi8?| z@DTUmuzn`@#-Uj{w`Ew1K@A;|<-R|%Q>VUWzvjL?)>o&l@r_g~68zM~5oYydLWO%- z;!UG^di)l5-;C*sdOp9^T~=7ExQ#P&O}2p|R>X@;ks`*4JYjdwn(Hxy?MEhKPGZ!t zBAuTEk;QKkuX0Gcnp738x&woa`65H4s_DxE)g4uSI=lKo)t3BaB21)-gy*@FbZn>V y-fzP5Ut`6nUMv0{OD2d3yq8Yjy%zuf#vJu>Zh-r(7u#)a*Xq3nchjpY^#29 Release - + Релиз Release Candidate - + Предварительный выпуÑк Daily Build - + Ð”Ð½ÐµÐ²Ð½Ð°Ñ Ñборка Developer - + Разработчик Beta - + Бета Alpha - + Ðльфа Custom - + Ðе извеÑтен контекÑÑ‚ + Ð¡Ð²Ð¾Ñ @@ -233,12 +234,12 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений Custom Size: - Другой размер: + Размер: x - x + на @@ -282,7 +283,7 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений Ignore Aspect Ratio - Игнорировать Ñоотношение Ñторон + Игнорировать Ñоотн. Ñторон @@ -294,17 +295,17 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений Background Colour: <span style="color: %1">%1</span> - + Цвет фона: <span style="color: %1">%1</span> ... - ... + ... Import picture - + Импортировать картинку @@ -314,7 +315,7 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений Discard picture - + Отклонить картинку @@ -326,17 +327,17 @@ Grand Theft Auto V 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! - + Ты точно хочешь иÑпользовать квадратное изображение вне зоны аватарки? ЕÑли Ñто аватар, то изображение будет обрезано! Snapmatic Avatar Zone - + Зона Snapmatic Ðватарки Select Colour... - + Выбрать цвет... @@ -344,7 +345,7 @@ When you want to use it as Avatar the image will be detached! Snapmatic Map Viewer - + ПроÑмотрщик карты Snapmatic @@ -499,7 +500,7 @@ When you want to use it as Avatar the image will be detached! Apply changes - + Применить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ @@ -510,7 +511,7 @@ When you want to use it as Avatar the image will be detached! Discard changes - + Отвергнуть Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ @@ -533,7 +534,7 @@ When you want to use it as Avatar the image will be detached! %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + @@ -550,7 +551,7 @@ When you want to use it as Avatar the image will be detached! The new Custom Folder will initialise after you restart %1. - + Ð”Ñ€ÑƒÐ³Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° будет загружена поÑле перезапуÑка %1. The new Custom Folder will initialize after you restart %1. @@ -609,7 +610,7 @@ When you want to use it as Avatar the image will be detached! &Manage - + &Управление &Export @@ -618,12 +619,12 @@ When you want to use it as Avatar the image will be detached! Manage picture - + ÐаÑтройки картинки Close viewer - + Закрыть проÑмотрщик @@ -652,7 +653,7 @@ When you want to use it as Avatar the image will be detached! Export as &Picture... - + ЭкÑпортировать как &картинку... Export as &GTA Snapmatic... @@ -662,7 +663,7 @@ When you want to use it as Avatar the image will be detached! Export as &Snapmatic... - + ЭкÑпортировать как &Snapmatic... Edi&t @@ -671,13 +672,13 @@ When you want to use it as Avatar the image will be detached! Open &Map View... - + Открыть &карту... &Edit Properties... - &Изменить ÑвойÑтва... + &Изменить ÑвойÑтва... @@ -710,7 +711,7 @@ Arrow Keys - Navigate No Players - + Игроков нет @@ -766,12 +767,12 @@ Press 1 for Default View Export as Picture... - + ЭкÑпорт как картинку... JPEG Graphics (*.jpg *.jpeg) - + Картинка JPEG (*.jpg *.jpeg) @@ -781,27 +782,27 @@ Press 1 for Default View Export as Picture - + ЭкÑпорт как картинку Failed to export the picture because the system occurred a write failure - + Ðе удалоÑÑŒ ÑкÑпортировать картинку из-за ошибки ÑиÑтемы при запиÑи Failed to export the picture because the format detection failures - + Ðе удалоÑÑŒ ÑкÑпортировать картинку, потому что произошла ошибка при раÑпозновании формата Failed to export the picture because the file can't be written - + Ðе удалоÑÑŒ ÑкÑпортировать картинку, так как файл не может быть запиÑан Failed to export the picture because of an unknown reason - + Ðе удалоÑÑŒ ÑкÑпортировать картинку по неизвеÑтной причине @@ -812,7 +813,7 @@ Press 1 for Default View Export as Snapmatic... - + ЭкÑпортировать как Snapmatic... @@ -821,7 +822,7 @@ Press 1 for Default View Export as Snapmatic - + ЭкÑпортировать как Snapmatic @@ -886,7 +887,7 @@ Press 1 for Default View Import file - + Импортировать файл Import exported file @@ -1019,22 +1020,22 @@ Press 1 for Default View Importable files (%1) - + Файлы Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° (%1) All image files (%1) - + Ð’Ñе файлы изображений (%1) Can't import %1 because file can't be parsed properly - + Ðе получилоÑÑŒ импортировать %1, файл не может быть правильно обработан Can't import %1 because file format can't be detected - + Ðе получилоÑÑŒ импортировать %1, не удалоÑÑŒ определить формат файла @@ -1082,7 +1083,7 @@ Press 1 for Default View Initialising export... - + Подготовка к ÑкÑпорту... @@ -1310,7 +1311,7 @@ Press 1 for Default View Delete Savegame - + Удалить Ñохранение @@ -1479,7 +1480,7 @@ Press 1 for Default View Appropriate: %1 - Разумные: %1 + Подходит: %1 @@ -1489,12 +1490,12 @@ Press 1 for Default View Qualify as Avatar automatically at apply - При применении автоматичеÑки клаÑÑифицировать как аватар + При применении наÑтроек пометить как аватар Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture - C клаÑÑификацией аватара можно иÑпользовать Ñтот Snapmatic в профиле на Social Club + C меткой аватара можно загрузить Ñту картинку Snapmatic в профиль на Social Club @@ -1699,13 +1700,13 @@ Press 1 for Default View Reload profile overview - + Перезагрузить обзор профилей Close %1 Close %1 <- (gta5view/gta5sync) - %1 will be replaced automatically - + Закрыть %1 From 15255874ff9ffa3d2361b5d970a97acfe73c52e8 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 13 Oct 2017 01:40:32 +0200 Subject: [PATCH 013/359] update to dev1 --- .travis.yml | 8 ++++---- config.h | 2 +- res/app.rc | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index eb8ee12..dee4fc3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,14 +32,14 @@ before_script: script: - cd qt5 - - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev1\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=alpha11 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev1 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package - cd .. - cd qt4 - - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev1\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=alpha11 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev1 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package - cd .. deploy: diff --git a/config.h b/config.h index fa816ad..b68e57c 100755 --- a/config.h +++ b/config.h @@ -50,7 +50,7 @@ #ifndef GTA5SYNC_APPVER #ifndef GTA5SYNC_DAILYB -#define GTA5SYNC_APPVER "1.5.0-alpha1" +#define GTA5SYNC_APPVER "1.5.0-dev1" #else #define GTA5SYNC_APPVER GTA5SYNC_DAILYB #endif diff --git a/res/app.rc b/res/app.rc index 626338c..d609442 100755 --- a/res/app.rc +++ b/res/app.rc @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view\0" - VALUE "FileVersion", "1.5.0-alpha11\0" + VALUE "FileVersion", "1.5.0-dev1\0" VALUE "InternalName", "gta5view\0" VALUE "LegalCopyright", "Copyright © 2016-2017 Syping\0" VALUE "OriginalFilename", "gta5view.exe\0" VALUE "ProductName", "gta5view\0" - VALUE "ProductVersion", "1.5.0-alpha11\0" + VALUE "ProductVersion", "1.5.0-dev1\0" END END END From f62b1b08c07b6b84ac637ec6dc3ae822b1398bcf Mon Sep 17 00:00:00 2001 From: Syping Date: Sat, 21 Oct 2017 05:59:10 +0200 Subject: [PATCH 014/359] last code patch from gta5sync --- .travis.yml | 8 ++--- DatabaseThread.cpp | 27 ++++++++++++----- DatabaseThread.h | 1 + GlobalString.cpp | 5 ++-- GlobalString.h | 2 +- OptionsDialog.cpp | 20 ++++++------- OptionsDialog.h | 2 +- PictureDialog.cpp | 2 +- ProfileInterface.cpp | 37 +++++++++++------------ ProfileLoader.cpp | 8 ++--- SnapmaticEditor.cpp | 4 +-- SnapmaticPicture.cpp | 2 +- TranslationClass.cpp | 4 +-- UserInterface.cpp | 7 ++--- config.h | 2 +- main.cpp | 8 ++--- res/app.rc | 4 +-- res/gta5sync_de.ts | 66 ++++++++++++++++++++-------------------- res/gta5sync_en_US.ts | 66 ++++++++++++++++++++-------------------- res/gta5sync_fr.ts | 66 ++++++++++++++++++++-------------------- res/gta5sync_ru.qm | Bin 32283 -> 32303 bytes res/gta5sync_ru.ts | 68 +++++++++++++++++++++--------------------- 22 files changed, 208 insertions(+), 201 deletions(-) diff --git a/.travis.yml b/.travis.yml index dee4fc3..9597e9f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,14 +32,14 @@ before_script: script: - cd qt5 - - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev1\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev2\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev1 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev2 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package - cd .. - cd qt4 - - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev1\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev2\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev1 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev2 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package - cd .. deploy: diff --git a/DatabaseThread.cpp b/DatabaseThread.cpp index 4e7d90d..aba55b9 100755 --- a/DatabaseThread.cpp +++ b/DatabaseThread.cpp @@ -125,9 +125,9 @@ void DatabaseThread::run() void DatabaseThread::scanCrewReference(const QStringList &crewList, const int &requestDelay) { - foreach (const QString &crewID, crewList) + for (QString crewID : crewList) { - if (threadRunning && crewID != "0") + if (threadRunning && crewID != QLatin1String("0")) { QNetworkAccessManager *netManager = new QNetworkAccessManager(); @@ -182,9 +182,9 @@ void DatabaseThread::scanCrewReference(const QStringList &crewList, const int &r void DatabaseThread::scanCrewMembersList(const QStringList &crewList, const int &maxPages, const int &requestDelay) { - foreach (const QString &crewID, crewList) + for (QString crewID : crewList) { - if (threadRunning && crewID != "0") + if (threadRunning && crewID != QLatin1String("0")) { int currentPage = 0; int foundPlayers = 0; @@ -223,8 +223,8 @@ void DatabaseThread::scanCrewMembersList(const QStringList &crewList, const int if (crewMap.contains("Members")) { - QList memberList = crewMap["Members"].toList(); - foreach (const QVariant &memberVariant, memberList) + const QList memberList = crewMap["Members"].toList(); + for (QVariant memberVariant : memberList) { QMap memberMap = memberVariant.toMap(); foundPlayers++; @@ -232,7 +232,7 @@ void DatabaseThread::scanCrewMembersList(const QStringList &crewList, const int { int RockstarId = memberMap["RockstarId"].toInt(); QString memberName = memberMap["Name"].toString(); - if (memberName != "" && RockstarId != 0) + if (!memberName.isEmpty() && RockstarId != 0) { emit playerNameFound(RockstarId, memberName); } @@ -256,10 +256,21 @@ void DatabaseThread::scanCrewMembersList(const QStringList &crewList, const int } } +void DatabaseThread::deleteCompatibleCrews(QStringList *crewList) +{ + for (QString& crewNID : *crewList) + { + if (crewDB->isCompatibleCrew(crewNID)) + { + crewList->removeAll(crewNID); + } + } +} + QStringList DatabaseThread::deleteCompatibleCrews(const QStringList &crewList) { QStringList crewListR = crewList; - foreach(const QString &crewNID, crewListR) + for (QString& crewNID : crewListR) { if (crewDB->isCompatibleCrew(crewNID)) { diff --git a/DatabaseThread.h b/DatabaseThread.h index 10a3b47..3abf047 100755 --- a/DatabaseThread.h +++ b/DatabaseThread.h @@ -36,6 +36,7 @@ private: CrewDatabase *crewDB; void scanCrewMembersList(const QStringList &crewList, const int &maxPages, const int &requestDelay); void scanCrewReference(const QStringList &crewList, const int &requestDelay); + void deleteCompatibleCrews(QStringList *crewList); QStringList deleteCompatibleCrews(const QStringList &crewList); bool threadRunning; int plyrPerReq; diff --git a/GlobalString.cpp b/GlobalString.cpp index fb94678..f0a63ae 100755 --- a/GlobalString.cpp +++ b/GlobalString.cpp @@ -37,8 +37,7 @@ QMap GlobalString::getGlobalMap() QSettings globalFile(getLanguageFile(), QSettings::IniFormat); globalFile.setIniCodec("UTF-8"); globalFile.beginGroup("Global"); - QStringList globalStrList = globalFile.childKeys(); - foreach(const QString &globalStr, globalStrList) + for (QString globalStr : globalFile.childKeys()) { globalMap[globalStr] = globalFile.value(globalStr, globalStr).toString(); } @@ -55,7 +54,7 @@ QString GlobalString::getString(QString valueStr, bool *ok) QStringList globalStrList = globalFile.childKeys(); if (globalStrList.contains(valueStr)) { - if (ok != NULL) *ok = true; + if (ok != nullptr) *ok = true; globalString = globalFile.value(valueStr, valueStr).toString(); } globalFile.endGroup(); diff --git a/GlobalString.h b/GlobalString.h index 9c2d77c..2d1f4ba 100755 --- a/GlobalString.h +++ b/GlobalString.h @@ -26,7 +26,7 @@ class GlobalString { public: GlobalString(); - static QString getString(QString valueStr, bool *ok = 0); + static QString getString(QString valueStr, bool *ok = nullptr); static QString getLanguageFile(); static QString getLanguage(); static QMap getGlobalMap(); diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp index b907978..a6db0c2 100755 --- a/OptionsDialog.cpp +++ b/OptionsDialog.cpp @@ -94,16 +94,14 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : OptionsDialog::~OptionsDialog() { delete settings; - foreach(QTreeWidgetItem *playerItem, playerItems) - { - delete playerItem; - } + qDeleteAll(playerItems.begin(), playerItems.end()); + playerItems.clear(); delete ui; } void OptionsDialog::setupTreeWidget() { - foreach(const QString &playerIDStr, profileDB->getPlayers()) + for (QString playerIDStr : profileDB->getPlayers()) { bool ok; int playerID = playerIDStr.toInt(&ok); @@ -112,8 +110,8 @@ void OptionsDialog::setupTreeWidget() QString playerName = profileDB->getPlayerName(playerID); QStringList playerTreeViewList; - playerTreeViewList << playerIDStr; - playerTreeViewList << playerName; + playerTreeViewList += playerIDStr; + playerTreeViewList += playerName; QTreeWidgetItem *playerItem = new QTreeWidgetItem(playerTreeViewList); ui->twPlayers->addTopLevelItem(playerItem); @@ -126,7 +124,7 @@ void OptionsDialog::setupTreeWidget() void OptionsDialog::setupLanguageBox() { settings->beginGroup("Interface"); - currentLanguage = settings->value("Language","System").toString(); + currentLanguage = settings->value("Language", "System").toString(); settings->endGroup(); QString cbSysStr = tr("%1 (Next Closest Language)", "First language a person can talk with a different person/application. \"Native\" or \"Not Native\".").arg(tr("System", @@ -142,7 +140,7 @@ void OptionsDialog::setupLanguageBox() availableLanguages.removeDuplicates(); availableLanguages.sort(); - foreach(const QString &lang, availableLanguages) + for (QString lang : availableLanguages) { QLocale langLocale(lang); QString cbLangStr = langLocale.nativeLanguageName() % " (" % langLocale.nativeCountryName() % ") [" % lang % "]"; @@ -285,9 +283,9 @@ void OptionsDialog::setupDefaultProfile() ui->cbProfiles->addItem(cbNoneStr, ""); } -void OptionsDialog::commitProfiles(QStringList profiles) +void OptionsDialog::commitProfiles(const QStringList &profiles) { - foreach(const QString &profile, profiles) + for (QString profile : profiles) { ui->cbProfiles->addItem(tr("Profile: %1").arg(profile), profile); if (defaultProfile == profile) diff --git a/OptionsDialog.h b/OptionsDialog.h index d48ab85..af57d87 100755 --- a/OptionsDialog.h +++ b/OptionsDialog.h @@ -36,7 +36,7 @@ class OptionsDialog : public QDialog public: explicit OptionsDialog(ProfileDatabase *profileDB, QWidget *parent = 0); - void commitProfiles(QStringList profiles); + void commitProfiles(const QStringList &profiles); ~OptionsDialog(); private slots: diff --git a/PictureDialog.cpp b/PictureDialog.cpp index dd9cc28..61c255c 100755 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -594,7 +594,7 @@ QString PictureDialog::generatePlayersString() QString plyrsStr; if (plyrsList.length() >= 1) { - foreach (const QString &player, plyrsList) + for (QString player : plyrsList) { QString playerName; if (withDatabase) diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 9a398e3..af7058b 100755 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -96,19 +96,19 @@ ProfileInterface::ProfileInterface(ProfileDatabase *profileDB, CrewDatabase *cre ProfileInterface::~ProfileInterface() { - foreach(ProfileWidget *widget, widgets.keys()) + foreach (ProfileWidget *widget, widgets.keys()) { widgets.remove(widget); widget->removeEventFilter(this); widget->disconnect(); delete widget; } - foreach(SavegameData *savegame, savegames) + foreach (SavegameData *savegame, savegames) { savegames.removeAll(savegame); delete savegame; } - foreach(SnapmaticPicture *picture, pictures) + foreach (SnapmaticPicture *picture, pictures) { pictures.removeAll(picture); delete picture; @@ -308,7 +308,7 @@ void ProfileInterface::sortingProfileInterface() QStringList widgetsKeyList = widgets.values(); qSort(widgetsKeyList.begin(), widgetsKeyList.end()); - foreach(QString widgetKey, widgetsKeyList) + for (QString widgetKey : widgetsKeyList) { ProfileWidget *widget = widgets.key(widgetKey); if (widget->getWidgetType() == "SnapmaticWidget") @@ -413,7 +413,7 @@ fileDialogPreOpen: //Work? // Getting readable Image formats QString imageFormatsStr = " "; - foreach(const QByteArray &imageFormat, QImageReader::supportedImageFormats()) + for (QByteArray imageFormat : QImageReader::supportedImageFormats()) { imageFormatsStr += QString("*.") % QString::fromUtf8(imageFormat).toLower() % " "; } @@ -486,7 +486,7 @@ void ProfileInterface::importFilesProgress(QStringList selectedFiles) QTime t; t.start(); - foreach(const QString &selectedFile, selectedFiles) + for (QString selectedFile : selectedFiles) { pbDialog.setValue(overallId); pbDialog.setLabelText(tr("Import file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId))); @@ -497,7 +497,7 @@ void ProfileInterface::importFilesProgress(QStringList selectedFiles) overallId++; } pbDialog.close(); - foreach (const QString &curErrorStr, failedFiles) + for (QString curErrorStr : failedFiles) { errorStr += ", " % curErrorStr; } @@ -820,7 +820,7 @@ void ProfileInterface::profileWidgetSelected() { if (selectedWidgts == 0) { - foreach(ProfileWidget *widget, widgets.keys()) + foreach (ProfileWidget *widget, widgets.keys()) { widget->setSelectionMode(true); } @@ -833,7 +833,7 @@ void ProfileInterface::profileWidgetDeselected() if (selectedWidgts == 1) { int scrollBarValue = ui->saProfile->verticalScrollBar()->value(); - foreach(ProfileWidget *widget, widgets.keys()) + foreach (ProfileWidget *widget, widgets.keys()) { if (contentMode != 2) { @@ -847,7 +847,7 @@ void ProfileInterface::profileWidgetDeselected() void ProfileInterface::selectAllWidgets() { - foreach(ProfileWidget *widget, widgets.keys()) + foreach (ProfileWidget *widget, widgets.keys()) { widget->setSelected(true); } @@ -855,7 +855,7 @@ void ProfileInterface::selectAllWidgets() void ProfileInterface::deselectAllWidgets() { - foreach(ProfileWidget *widget, widgets.keys()) + foreach (ProfileWidget *widget, widgets.keys()) { widget->setSelected(false); } @@ -985,7 +985,7 @@ void ProfileInterface::exportSelected() errorList << getFailedCopyPictures; errorList << getFailedSavegames; - foreach (const QString &curErrorStr, errorList) + for (QString curErrorStr : errorList) { errorStr += ", " % curErrorStr; } @@ -1069,7 +1069,7 @@ void ProfileInterface::settingsApplied(int _contentMode, bool languageChanged) contentMode = _contentMode; if (contentMode == 2) { - foreach(ProfileWidget *widget, widgets.keys()) + foreach (ProfileWidget *widget, widgets.keys()) { widget->setSelectionMode(true); widget->setContentMode(contentMode); @@ -1078,7 +1078,7 @@ void ProfileInterface::settingsApplied(int _contentMode, bool languageChanged) } else { - foreach(ProfileWidget *widget, widgets.keys()) + foreach (ProfileWidget *widget, widgets.keys()) { if (selectedWidgts == 0) { @@ -1217,9 +1217,8 @@ void ProfileInterface::on_saProfileContent_dropped(const QMimeData *mimeData) { if (!mimeData) return; QStringList pathList; - QList urlList = mimeData->urls(); - foreach(const QUrl ¤tUrl, urlList) + for (QUrl currentUrl : mimeData->urls()) { if (currentUrl.isLocalFile()) { @@ -1287,7 +1286,7 @@ bool ProfileInterface::eventFilter(QObject *watched, QEvent *event) if ((watched->objectName() == "SavegameWidget" || watched->objectName() == "SnapmaticWidget") && isProfileLoaded) { ProfileWidget *pWidget = nullptr; - foreach(ProfileWidget *widget, widgets.keys()) + foreach (ProfileWidget *widget, widgets.keys()) { QPoint mousePos = widget->mapFromGlobal(QCursor::pos()); if (widget->rect().contains(mousePos)) @@ -1356,7 +1355,7 @@ bool ProfileInterface::eventFilter(QObject *watched, QEvent *event) void ProfileInterface::hoverProfileWidgetCheck() { ProfileWidget *pWidget = nullptr; - foreach(ProfileWidget *widget, widgets.keys()) + foreach (ProfileWidget *widget, widgets.keys()) { if (widget->underMouse()) { @@ -1424,7 +1423,7 @@ void ProfileInterface::updatePalette() bool ProfileInterface::isSupportedImageFile(QString selectedFileName) { - foreach(const QByteArray &imageFormat, QImageReader::supportedImageFormats()) + for (QByteArray imageFormat : QImageReader::supportedImageFormats()) { QString imageFormatStr = QString(".") % QString::fromUtf8(imageFormat).toLower(); if (selectedFileName.length() >= imageFormatStr.length() && selectedFileName.toLower().right(imageFormatStr.length()) == imageFormatStr) diff --git a/ProfileLoader.cpp b/ProfileLoader.cpp index d5349ea..ec7b28a 100755 --- a/ProfileLoader.cpp +++ b/ProfileLoader.cpp @@ -50,7 +50,7 @@ void ProfileLoader::run() SavegameFiles.removeDuplicates(); SnapmaticPics.removeDuplicates(); - foreach(const QString &BackupFile, BackupFiles) + for (QString BackupFile : BackupFiles) { SavegameFiles.removeAll(BackupFile); SnapmaticPics.removeAll(BackupFile); @@ -60,7 +60,7 @@ void ProfileLoader::run() // Loading pictures and savegames emit loadingProgress(curFile, maximumV); - foreach(const QString &SavegameFile, SavegameFiles) + for (QString SavegameFile : SavegameFiles) { emit loadingProgress(curFile, maximumV); QString sgdPath = profileFolder % "/" % SavegameFile; @@ -71,7 +71,7 @@ void ProfileLoader::run() } curFile++; } - foreach(const QString &SnapmaticPic, SnapmaticPics) + for (QString SnapmaticPic : SnapmaticPics) { emit loadingProgress(curFile, maximumV); QString picturePath = profileFolder % "/" % SnapmaticPic; @@ -90,7 +90,7 @@ void ProfileLoader::run() // adding found crews crewDB->setAddingCrews(true); - foreach(int crewID, crewList) + for (int crewID : crewList) { crewDB->addCrew(crewID); } diff --git a/SnapmaticEditor.cpp b/SnapmaticEditor.cpp index 7cdbcfa..619e855 100644 --- a/SnapmaticEditor.cpp +++ b/SnapmaticEditor.cpp @@ -309,7 +309,7 @@ void SnapmaticEditor::on_labCrew_linkActivated(const QString &link) crewList += QLatin1String("0"); } crewList.sort(); - foreach(const QString &crew, crewList) + for (QString crew : crewList) { itemList += QString("%1 (%2)").arg(crew, returnCrewName(crew.toInt())); } @@ -322,7 +322,7 @@ void SnapmaticEditor::on_labCrew_linkActivated(const QString &link) { if (newCrew.contains(" ")) newCrew = newCrew.split(" ").at(0); if (newCrew.length() > 10) return; - foreach (const QChar &crewChar, newCrew) + for (QChar crewChar : newCrew) { if (!crewChar.isNumber()) { diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp index 7fa186a..e1ca220 100755 --- a/SnapmaticPicture.cpp +++ b/SnapmaticPicture.cpp @@ -1137,7 +1137,7 @@ bool SnapmaticPicture::verifyTitle(const QString &title) // VERIFY TITLE FOR BE A VALID SNAPMATIC TITLE if (title.length() <= titlStreamCharacterMax) { - foreach(const QChar &titleChar, title) + for (QChar titleChar : title) { if (!verifyTitleChar(titleChar)) return false; } diff --git a/TranslationClass.cpp b/TranslationClass.cpp index e3b8e8f..fcb00d7 100644 --- a/TranslationClass.cpp +++ b/TranslationClass.cpp @@ -279,7 +279,7 @@ QStringList TranslationClass::listTranslations(const QString &langPath) langDir.setNameFilters(QStringList("gta5sync_*.qm")); langDir.setPath(langPath); QStringList availableLanguages; - foreach(const QString &lang, langDir.entryList(QDir::Files | QDir::NoDotAndDotDot, QDir::NoSort)) + for (QString &lang : langDir.entryList(QDir::Files | QDir::NoDotAndDotDot, QDir::NoSort)) { availableLanguages << QString(lang).remove("gta5sync_").remove(".qm"); } @@ -292,7 +292,7 @@ bool TranslationClass::loadSystemTranslation_p(const QString &langPath, QTransla qDebug() << "loadSystemTranslation_p"; #endif int currentLangCounter = 0; - foreach(const QString &languageName, QLocale::system().uiLanguages()) + for (QString languageName : QLocale::system().uiLanguages()) { #ifdef GTA5SYNC_DEBUG qDebug() << "loadLanguage" << languageName; diff --git a/UserInterface.cpp b/UserInterface.cpp index ded69dd..41dc44a 100755 --- a/UserInterface.cpp +++ b/UserInterface.cpp @@ -40,7 +40,6 @@ #include #include #include -#include #include #include #include @@ -158,7 +157,7 @@ void UserInterface::setupDirEnv() void UserInterface::setupProfileUi() { qreal screenRatio = AppEnv::screenRatio(); - if (GTAV_Profiles.length() == 0) + if (GTAV_Profiles.isEmpty()) { QPushButton *changeDirBtn = new QPushButton(tr("Select >A V Folder..."), ui->swSelection); changeDirBtn->setObjectName("cmdChangeDir"); @@ -169,7 +168,7 @@ void UserInterface::setupProfileUi() QObject::connect(changeDirBtn, SIGNAL(clicked(bool)), this, SLOT(changeFolder_clicked())); } - else foreach(const QString >AV_Profile, GTAV_Profiles) + else for (QString GTAV_Profile : GTAV_Profiles) { QPushButton *profileBtn = new QPushButton(GTAV_Profile, ui->swSelection); profileBtn->setObjectName(GTAV_Profile); @@ -190,7 +189,7 @@ void UserInterface::changeFolder_clicked() void UserInterface::on_cmdReload_clicked() { - foreach(QPushButton *profileBtn, profileBtns) + foreach (QPushButton *profileBtn, profileBtns) { ui->vlButtons->removeWidget(profileBtn); profileBtns.removeAll(profileBtn); diff --git a/config.h b/config.h index b68e57c..a7b1b70 100755 --- a/config.h +++ b/config.h @@ -50,7 +50,7 @@ #ifndef GTA5SYNC_APPVER #ifndef GTA5SYNC_DAILYB -#define GTA5SYNC_APPVER "1.5.0-dev1" +#define GTA5SYNC_APPVER "1.5.0-dev2" #else #define GTA5SYNC_APPVER GTA5SYNC_DAILYB #endif diff --git a/main.cpp b/main.cpp index 8ba3e9b..918d281 100755 --- a/main.cpp +++ b/main.cpp @@ -50,6 +50,7 @@ int main(int argc, char *argv[]) QApplication a(argc, argv); a.setApplicationName(GTA5SYNC_APPSTR); a.setApplicationVersion(GTA5SYNC_APPVER); + a.setQuitOnLastWindowClosed(false); #ifdef GTA5SYNC_WIN #if QT_VERSION >= 0x050400 @@ -87,7 +88,7 @@ int main(int argc, char *argv[]) QString arg1; applicationArgs.removeAt(0); - foreach(QString currentArg, applicationArgs) + for (QString currentArg : applicationArgs) { QString reworkedArg; if (currentArg.left(9) == "-showpic=" && selectedAction == "") @@ -182,10 +183,9 @@ int main(int argc, char *argv[]) ProfileDatabase profileDB; DatabaseThread threadDB(&crewDB); - QEventLoop threadLoop; QObject::connect(&threadDB, SIGNAL(crewNameFound(int,QString)), &crewDB, SLOT(setCrewName(int, QString))); QObject::connect(&threadDB, SIGNAL(playerNameFound(int, QString)), &profileDB, SLOT(setPlayerName(int, QString))); - QObject::connect(&threadDB, SIGNAL(finished()), &threadLoop, SLOT(quit())); + QObject::connect(&threadDB, SIGNAL(finished()), &a, SLOT(quit())); threadDB.start(); UserInterface uiWindow(&profileDB, &crewDB, &threadDB); @@ -197,7 +197,7 @@ int main(int argc, char *argv[]) uiWindow.show(); #endif - threadLoop.exec(); + a.exec(); return 0; } diff --git a/res/app.rc b/res/app.rc index d609442..43bfa7a 100755 --- a/res/app.rc +++ b/res/app.rc @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view\0" - VALUE "FileVersion", "1.5.0-dev1\0" + VALUE "FileVersion", "1.5.0-dev2\0" VALUE "InternalName", "gta5view\0" VALUE "LegalCopyright", "Copyright © 2016-2017 Syping\0" VALUE "OriginalFilename", "gta5view.exe\0" VALUE "ProductName", "gta5view\0" - VALUE "ProductVersion", "1.5.0-dev1\0" + VALUE "ProductVersion", "1.5.0-dev2\0" END END END diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index 3f3a4ae..c55f317 100755 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -673,7 +673,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! %1 (%2 wenn verfügbar) - + %1 %1 %1 @@ -687,19 +687,19 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! Der eigene Ordner initialisiert sobald du %1 neugestartet hast. - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (Erste näheste Sprache) - + System System in context of System default System - + The new Custom Folder will initialise after you restart %1. Der eigene Ordner wird initialisiert sobald du %1 neugestartet hast. @@ -708,15 +708,15 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! Die Änderung der Sprache nimmt Effekt sobald du %1 neugestartet hast. - + No Profile No Profile, as default Kein Profil - + + - Profile: %1 Profil: %1 @@ -1214,13 +1214,13 @@ Drücke A für Standardansicht - + Savegames files (SGTA*) Spielstanddateien (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) @@ -1240,7 +1240,7 @@ Drücke A für Standardansicht - + All files (**) Alle Dateien (**) @@ -1261,13 +1261,13 @@ Drücke A für Standardansicht - + Failed to read Snapmatic picture Fehler beim Lesen vom Snapmatic Bild - + Failed to read Savegame file Fehler beim Lesen von Spielstanddatei @@ -1308,7 +1308,7 @@ Drücke A für Standardansicht - + No valid file is selected Keine gültige Datei wurde ausgewählt @@ -1475,13 +1475,13 @@ Exportieren als: 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) @@ -1489,12 +1489,12 @@ Exportieren als: QApplication - + Font Schrift - + Selected Font: %1 Ausgewähle Schrift: %1 @@ -2305,7 +2305,7 @@ Exportieren als: - + Select &GTA V Folder... Wähle &GTA V Ordner... @@ -2408,17 +2408,17 @@ Exportieren als: GTA V Ordner nicht gefunden! - - - + + + Select Profile Profil auswählen - - - + + + Select GTA V Folder... Wähle GTA V Ordner... @@ -2427,7 +2427,7 @@ Exportieren als: Wähle GTA V &Ordner... - + Open File... Datei öffnen... @@ -2437,27 +2437,27 @@ Exportieren als: - + %2 - %1 %2 - %1 - - + + &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 diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index b706409..be65ee6 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -432,38 +432,38 @@ When you want to use it as Avatar the image will be detached! - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default - + %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 @@ -756,19 +756,19 @@ Press 1 for Default View - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) @@ -779,14 +779,14 @@ Press 1 for Default View - + All files (**) - + No valid file is selected @@ -805,13 +805,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture - + Failed to read Savegame file @@ -922,7 +922,7 @@ Press 1 for Default View - + All profile files (*.g5e SGTA* PGTA*) @@ -930,12 +930,12 @@ Press 1 for Default View QApplication - + Font - + Selected Font: %1 @@ -1396,7 +1396,7 @@ Press 1 for Default View UserInterface - + %2 - %1 @@ -1458,8 +1458,8 @@ Press 1 for Default View - - + + &About %1 @@ -1565,15 +1565,15 @@ Press 1 for Default View - + Select &GTA V Folder... - - - + + + Select GTA V Folder... @@ -1603,27 +1603,27 @@ Press 1 for Default View - - - + + + Select Profile - + Open File... - - - - + + + + Open File - + Can't open %1 because of not valid file format diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index f535aa3..f83a274 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -567,25 +567,25 @@ When you want to use it as Avatar the image will be detached! Système - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default Système - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. @@ -598,15 +598,15 @@ When you want to use it as Avatar the image will be detached! Le changement de langue sera actif au prochain lancement de %1. - + No Profile No Profile, as default Aucun profil - + + - Profile: %1 Profil : %1 @@ -976,13 +976,13 @@ Appuyer sur 1 pour le mode par défaut - + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) @@ -993,7 +993,7 @@ Appuyer sur 1 pour le mode par défaut - + All files (**) Tous les fichiers (**) @@ -1015,7 +1015,7 @@ Appuyer sur 1 pour le mode par défaut - + No valid file is selected Fichier invalide @@ -1026,13 +1026,13 @@ 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 @@ -1165,13 +1165,13 @@ Appuyer sur 1 pour le mode par défaut Impossible de 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) @@ -1179,12 +1179,12 @@ Appuyer sur 1 pour le mode par défaut QApplication - + Font Police - + Selected Font: %1 Police sélectionnée : %1 @@ -1824,15 +1824,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... @@ -1868,39 +1868,39 @@ Appuyer sur 1 pour le mode par défaut - + %2 - %1 %2 - %1 - - + + &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 diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index dfb9929824d2f51ea76a36df84785760ae874696..ff96a180195b84d39143a4aaa5634c3c375e8e55 100644 GIT binary patch delta 325 zcmWO0Pbh-{7{~GFdEa+?y?bk=NIPu1nAIyyD=v#sSk&4<*+G(nmOtCrCMVohta-Pd zCXy3QJ2>npBqX7ca8eY9g?3;qrFbsC&*gXcZvNulFJ@B0teQ;+EH==J62RmjXg3b_ z3$%|`fT_l8#fi&g#d$oZ90qZTK6!QO6oY?ZxZ ze*k7=_K)>Qc^%j&i|jTlvX2xNLl~!f(T6W&mF$?L4#|u4v>^4FrcLtBafEyJ=~_C% zVM-eUctKAFyP_%Ohh2cg7#WPd+N8-}>IWFQH3iFNfVi7Rj9y%)Eu)S-)FL-1&8iNs z9JWDz*=2cF55sT#TT@RvO91UFYB8}05WA$D?Bs+4c@(<})|xuR_kvp)m=JByL|0}< IArnif|0tPi@Bjb+ delta 323 zcmWO0F-QV&6vy%R&i{Gc9YjGS4k`_GAcfMB>ej$t699`L@Za^b zFW~ %1 (%2 еÑли имеетÑÑ) - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default СиÑтема - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. Ð”Ñ€ÑƒÐ³Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° будет загружена поÑле перезапуÑка %1. @@ -562,15 +562,15 @@ When you want to use it as Avatar the image will be detached! Язык изменитÑÑ Ð¿Ð¾Ñле перезапуÑка %1. - + No Profile No Profile, as default Ðет Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - + + - Profile: %1 Профиль: %1 @@ -950,19 +950,19 @@ Press 1 for Default View - + Savegames files (SGTA*) Файлы ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ (SGTA*) - + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) - + All files (**) Ð’Ñе файлы (**) @@ -983,13 +983,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture Ðе удалоÑÑŒ загрузить картинку Snapmatic - + Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ @@ -1000,7 +1000,7 @@ Press 1 for Default View - + No valid file is selected Выбранный файл неверен @@ -1163,13 +1163,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) @@ -1177,12 +1177,12 @@ Press 1 for Default View QApplication - + Font Шрифт - + Selected Font: %1 Выбранный шрифт: %1 @@ -1770,7 +1770,7 @@ Press 1 for Default View - + Select &GTA V Folder... Выбрать &папку GTA V... @@ -1886,48 +1886,48 @@ Press 1 for Default View Ctrl+D - - - + + + Select Profile Выбор Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - - - + + + Select GTA V Folder... Выбрать папку GTA V... - + %2 - %1 %2 - %1 - - + + &About %1 - &О %1 + &О программе %1 - + Open File... Открыть файл... - - - - + + + + Open File Открыть файл - + Can't open %1 because of not valid file format Ðе удалоÑÑŒ открыть %1 из-за неверного формата файла From a591adf6eadadcb642fa60bf36f75dd68c02f475 Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 12 Nov 2017 15:58:59 +0100 Subject: [PATCH 015/359] added ability to change Snapmatic Location --- .travis.yml | 8 +- DatabaseThread.cpp | 64 +++-- DatabaseThread.h | 5 +- ExportThread.cpp | 2 +- GlobalString.cpp | 8 +- ImportDialog.cpp | 36 ++- ImportDialog.h | 2 +- MapLocationDialog.cpp | 197 ++++++++++++++ MapPreviewDialog.h => MapLocationDialog.h | 38 ++- MapLocationDialog.ui | 218 +++++++++++++++ MapPreviewDialog.cpp | 73 ----- MapPreviewDialog.ui | 71 ----- OptionsDialog.cpp | 69 ++++- OptionsDialog.h | 1 + OptionsDialog.ui | 28 +- PictureDialog.cpp | 50 +++- ProfileInterface.cpp | 52 ++-- TranslationClass.cpp | 65 ++++- TranslationClass.h | 5 +- UserInterface.cpp | 32 ++- UserInterface.h | 1 + config.h | 2 +- gta5view.pro | 6 +- main.cpp | 14 +- res/app.qrc | 1 + res/app.rc | 4 +- res/global.zh.loc | 1 + res/gta5sync_de.qm | Bin 32872 -> 33883 bytes res/gta5sync_de.ts | 317 +++++++++++++-------- res/gta5sync_en_US.ts | 311 +++++++++++++-------- res/gta5sync_fr.ts | 318 ++++++++++++++-------- res/gta5sync_ru.qm | Bin 32303 -> 32539 bytes res/gta5sync_ru.ts | 317 +++++++++++++-------- 33 files changed, 1586 insertions(+), 730 deletions(-) create mode 100644 MapLocationDialog.cpp rename MapPreviewDialog.h => MapLocationDialog.h (54%) create mode 100644 MapLocationDialog.ui delete mode 100644 MapPreviewDialog.cpp delete mode 100644 MapPreviewDialog.ui create mode 100644 res/global.zh.loc diff --git a/.travis.yml b/.travis.yml index 9597e9f..c1e15cf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,14 +32,14 @@ before_script: script: - cd qt5 - - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev2\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev3\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev2 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev3 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package - cd .. - cd qt4 - - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev2\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev3\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev2 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev3 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package - cd .. deploy: diff --git a/DatabaseThread.cpp b/DatabaseThread.cpp index aba55b9..2344dca 100755 --- a/DatabaseThread.cpp +++ b/DatabaseThread.cpp @@ -32,9 +32,11 @@ #include #define crewMaxPages 83 +#define maxLoadFails 3 DatabaseThread::DatabaseThread(CrewDatabase *crewDB, QObject *parent) : QThread(parent), crewDB(crewDB) { + continueLastCrew = true; threadRunning = true; } @@ -46,7 +48,7 @@ void DatabaseThread::run() QStringList crewListR; // Register thread loop end signal - QObject::connect(this, SIGNAL(threadEndCommited()), &threadLoop, SLOT(quit())); + QObject::connect(this, SIGNAL(threadTerminated()), &threadLoop, SLOT(quit())); // Setup crewList for Quick time scan crewList = crewDB->getCrews(); @@ -130,7 +132,6 @@ void DatabaseThread::scanCrewReference(const QStringList &crewList, const int &r if (threadRunning && crewID != QLatin1String("0")) { QNetworkAccessManager *netManager = new QNetworkAccessManager(); - QNetworkRequest netRequest(AppEnv::getCrewFetchingUrl(crewID)); #if QT_VERSION >= 0x050600 netRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); @@ -144,9 +145,10 @@ void DatabaseThread::scanCrewReference(const QStringList &crewList, const int &r QEventLoop *downloadLoop = new QEventLoop(); QObject::connect(netReply, SIGNAL(finished()), downloadLoop, SLOT(quit())); - QObject::connect(this, SIGNAL(threadEndCommited()), downloadLoop, SLOT(quit())); + if (!continueLastCrew) { QObject::connect(this, SIGNAL(threadTerminated()), downloadLoop, SLOT(quit())); } QTimer::singleShot(30000, downloadLoop, SLOT(quit())); downloadLoop->exec(); + downloadLoop->disconnect(); delete downloadLoop; if (netReply->isFinished()) @@ -168,11 +170,15 @@ void DatabaseThread::scanCrewReference(const QStringList &crewList, const int &r } } - QEventLoop *waitingLoop = new QEventLoop(); - QTimer::singleShot(requestDelay, waitingLoop, SLOT(quit())); - QObject::connect(this, SIGNAL(threadEndCommited()), waitingLoop, SLOT(quit())); - waitingLoop->exec(); - delete waitingLoop; + if (threadRunning) + { + QEventLoop *waitingLoop = new QEventLoop(); + QTimer::singleShot(requestDelay, waitingLoop, SLOT(quit())); + if (!continueLastCrew) { QObject::connect(this, SIGNAL(threadTerminated()), waitingLoop, SLOT(quit())); } + waitingLoop->exec(); + waitingLoop->disconnect(); + delete waitingLoop; + } delete netReply; delete netManager; @@ -186,14 +192,14 @@ void DatabaseThread::scanCrewMembersList(const QStringList &crewList, const int { if (threadRunning && crewID != QLatin1String("0")) { + int currentFail = 0; int currentPage = 0; int foundPlayers = 0; int totalPlayers = 1000; - while(foundPlayers < totalPlayers && currentPage < maxPages) + while(foundPlayers < totalPlayers && currentPage < maxPages && (continueLastCrew ? true : threadRunning)) { QNetworkAccessManager *netManager = new QNetworkAccessManager(); - QNetworkRequest netRequest(AppEnv::getPlayerFetchingUrl(crewID, currentPage)); #if QT_VERSION >= 0x050600 netRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); @@ -207,9 +213,10 @@ void DatabaseThread::scanCrewMembersList(const QStringList &crewList, const int QEventLoop *downloadLoop = new QEventLoop(); QObject::connect(netReply, SIGNAL(finished()), downloadLoop, SLOT(quit())); - QObject::connect(this, SIGNAL(threadEndCommited()), downloadLoop, SLOT(quit())); + if (!continueLastCrew) { QObject::connect(this, SIGNAL(threadTerminated()), downloadLoop, SLOT(quit())); } QTimer::singleShot(30000, downloadLoop, SLOT(quit())); downloadLoop->exec(); + downloadLoop->disconnect(); delete downloadLoop; if (netReply->isFinished()) @@ -227,30 +234,43 @@ void DatabaseThread::scanCrewMembersList(const QStringList &crewList, const int for (QVariant memberVariant : memberList) { QMap memberMap = memberVariant.toMap(); - foundPlayers++; if (memberMap.contains("RockstarId") && memberMap.contains("Name")) { int RockstarId = memberMap["RockstarId"].toInt(); QString memberName = memberMap["Name"].toString(); if (!memberName.isEmpty() && RockstarId != 0) { + foundPlayers++; emit playerNameFound(RockstarId, memberName); } } } } - QEventLoop *waitingLoop = new QEventLoop(); - QTimer::singleShot(requestDelay, waitingLoop, SLOT(quit())); - QObject::connect(this, SIGNAL(threadEndCommited()), waitingLoop, SLOT(quit())); - waitingLoop->exec(); - delete waitingLoop; - currentPage++; } + else + { + currentFail++; + if (currentFail == maxLoadFails) + { + currentFail = 0; + currentPage++; + } + } delete netReply; delete netManager; + + if (foundPlayers < totalPlayers && currentPage < maxPages && (continueLastCrew ? true : threadRunning)) + { + QEventLoop *waitingLoop = new QEventLoop(); + QTimer::singleShot(requestDelay, waitingLoop, SLOT(quit())); + if (!continueLastCrew) { QObject::connect(this, SIGNAL(threadTerminated()), waitingLoop, SLOT(quit())); } + waitingLoop->exec(); + waitingLoop->disconnect(); + delete waitingLoop; + } } } } @@ -258,7 +278,7 @@ void DatabaseThread::scanCrewMembersList(const QStringList &crewList, const int void DatabaseThread::deleteCompatibleCrews(QStringList *crewList) { - for (QString& crewNID : *crewList) + for (QString crewNID : *crewList) { if (crewDB->isCompatibleCrew(crewNID)) { @@ -270,7 +290,7 @@ void DatabaseThread::deleteCompatibleCrews(QStringList *crewList) QStringList DatabaseThread::deleteCompatibleCrews(const QStringList &crewList) { QStringList crewListR = crewList; - for (QString& crewNID : crewListR) + for (QString crewNID : crewListR) { if (crewDB->isCompatibleCrew(crewNID)) { @@ -280,8 +300,8 @@ QStringList DatabaseThread::deleteCompatibleCrews(const QStringList &crewList) return crewListR; } -void DatabaseThread::doEndThread() +void DatabaseThread::terminateThread() { threadRunning = false; - emit threadEndCommited(); + emit threadTerminated(); } diff --git a/DatabaseThread.h b/DatabaseThread.h index 3abf047..8d8bbfa 100755 --- a/DatabaseThread.h +++ b/DatabaseThread.h @@ -30,7 +30,7 @@ public: explicit DatabaseThread(CrewDatabase *crewDB, QObject *parent = 0); public slots: - void doEndThread(); + void terminateThread(); private: CrewDatabase *crewDB; @@ -38,6 +38,7 @@ private: void scanCrewReference(const QStringList &crewList, const int &requestDelay); void deleteCompatibleCrews(QStringList *crewList); QStringList deleteCompatibleCrews(const QStringList &crewList); + bool continueLastCrew; bool threadRunning; int plyrPerReq; @@ -49,7 +50,7 @@ signals: void crewNameUpdated(); void playerNameFound(int playerID, QString playerName); void playerNameUpdated(); - void threadEndCommited(); + void threadTerminated(); }; #endif // DATABASETHREAD_H diff --git a/ExportThread.cpp b/ExportThread.cpp index 05af7db..b795824 100755 --- a/ExportThread.cpp +++ b/ExportThread.cpp @@ -76,7 +76,7 @@ void ExportThread::run() // End Picture Settings int intExportProgress = 0; - foreach(ProfileWidget *widget, profileMap.keys()) + for (ProfileWidget *widget : profileMap.keys()) { if (widget->isSelected()) { diff --git a/GlobalString.cpp b/GlobalString.cpp index f0a63ae..77c1591 100755 --- a/GlobalString.cpp +++ b/GlobalString.cpp @@ -74,11 +74,5 @@ QString GlobalString::getLanguageFile() QString GlobalString::getLanguage() { - QString language = TCInstance->getCurrentLanguage(); - QStringList langList = QString(language).replace("-", "_").split("_"); - if (langList.length() >= 1) - { - language = langList.at(0); - } - return language; + return TCInstance->getCurrentAreaLanguage(); } diff --git a/ImportDialog.cpp b/ImportDialog.cpp index 5f485a1..687da8a 100644 --- a/ImportDialog.cpp +++ b/ImportDialog.cpp @@ -73,6 +73,7 @@ ImportDialog::~ImportDialog() void ImportDialog::processImage() { + if (workImage.isNull()) return; QImage snapmaticImage = workImage; QPixmap snapmaticPixmap(snapmaticResolutionW, snapmaticResolutionH); snapmaticPixmap.fill(selectedColour); @@ -101,7 +102,7 @@ void ImportDialog::processImage() snapmaticImage = snapmaticImage.scaled(snapmaticAvatarResolution, snapmaticAvatarResolution, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); } snapmaticPainter.drawImage(snapmaticAvatarPlacementW + diffWidth, snapmaticAvatarPlacementH + diffHeight, snapmaticImage); - imageTitle = "Custom Avatar"; + imageTitle = tr("Custom Avatar", "Custom Avatar Description in SC, don't use Special Character!"); } else { @@ -127,7 +128,7 @@ void ImportDialog::processImage() snapmaticImage = snapmaticImage.scaled(snapmaticResolutionW, snapmaticResolutionH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); } snapmaticPainter.drawImage(0 + diffWidth, 0 + diffHeight, snapmaticImage); - imageTitle = "Custom Picture"; + imageTitle = tr("Custom Picture", "Custom Picture Description in SC, don't use Special Character!"); } snapmaticPainter.end(); newImage = snapmaticPixmap.toImage(); @@ -139,13 +140,38 @@ QImage ImportDialog::image() return newImage; } -void ImportDialog::setImage(const QImage &image_) +void ImportDialog::setImage(QImage *image_) { - workImage = image_; - if (workImage.width() == workImage.height()) + workImage = QImage(); + if (image_->width() == image_->height()) { insideAvatarZone = true; ui->cbAvatar->setChecked(true); + if (image_->height() > snapmaticResolutionH) + { + workImage = image_->scaled(snapmaticResolutionH, snapmaticResolutionH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + delete image_; + } + else + { + workImage = *image_; + delete image_; + } + } + else if (image_->width() > snapmaticResolutionW && image_->width() > image_->height()) + { + workImage = image_->scaledToWidth(snapmaticResolutionW, Qt::SmoothTransformation); + delete image_; + } + else if (image_->height() > snapmaticResolutionH && image_->height() > image_->width()) + { + workImage = image_->scaledToHeight(snapmaticResolutionH, Qt::SmoothTransformation); + delete image_; + } + else + { + workImage = *image_; + delete image_; } processImage(); } diff --git a/ImportDialog.h b/ImportDialog.h index 7953490..92a27c6 100644 --- a/ImportDialog.h +++ b/ImportDialog.h @@ -34,7 +34,7 @@ public: ~ImportDialog(); QImage image(); QString getImageTitle(); - void setImage(const QImage &image); + void setImage(QImage *image); bool isImportAgreed(); private slots: diff --git a/MapLocationDialog.cpp b/MapLocationDialog.cpp new file mode 100644 index 0000000..03c2a45 --- /dev/null +++ b/MapLocationDialog.cpp @@ -0,0 +1,197 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "MapLocationDialog.h" +#include "ui_MapLocationDialog.h" +#include "IconLoader.h" +#include "AppEnv.h" +#include +#include + +MapLocationDialog::MapLocationDialog(double x, double y, QWidget *parent) : + QDialog(parent), xpos_old(x), ypos_old(y), + ui(new Ui::MapLocationDialog) +{ + // Set Window Flags + setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); + ui->setupUi(this); + ui->cmdDone->setVisible(false); + ui->cmdApply->setVisible(false); + ui->cmdRevert->setVisible(false); + ui->cmdDone->setCursor(Qt::ArrowCursor); + + // DPI calculation + qreal screenRatio = AppEnv::screenRatio(); + int widgetMargin = qRound(3 * screenRatio); + ui->hlMapDialog->setContentsMargins(widgetMargin, widgetMargin, widgetMargin, widgetMargin); + 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() +{ + delete ui; +} + +void MapLocationDialog::drawPointOnMap(double xpos_d, double ypos_d) +{ + qreal screenRatio = AppEnv::screenRatio(); + int pointMakerSize = 8 * screenRatio; + QPixmap pointMakerPixmap = IconLoader::loadingPointmakerIcon().pixmap(QSize(pointMakerSize, pointMakerSize)); + QSize mapPixelSize = size(); + + int pointMakerHalfSize = pointMakerSize / 2; + long xpos_ms = qRound(xpos_d); + long ypos_ms = qRound(ypos_d); + double xpos_ma = xpos_ms + 4000; + double ypos_ma = ypos_ms + 4000; + double xrat = (double)mapPixelSize.width() / 10000; + double yrat = (double)mapPixelSize.height() / 12000; + long xpos_mp = qRound(xpos_ma * xrat); + long ypos_mp = qRound(ypos_ma * yrat); + long xpos_pr = xpos_mp - pointMakerHalfSize; + long ypos_pr = ypos_mp + pointMakerHalfSize; + + QPixmap mapPixmap(mapPixelSize); + QPainter mapPainter(&mapPixmap); + mapPainter.drawPixmap(0, 0, mapPixelSize.width(), mapPixelSize.height(), QPixmap(":/img/mappreview.jpg").scaled(mapPixelSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + mapPainter.drawPixmap(xpos_pr, mapPixelSize.height() - ypos_pr, pointMakerSize, pointMakerSize, pointMakerPixmap); + mapPainter.end(); + + QPalette backgroundPalette; + backgroundPalette.setBrush(backgroundRole(), QBrush(mapPixmap)); + setPalette(backgroundPalette); + + xpos_new = xpos_d; + ypos_new = ypos_d; + ui->labPos->setText(tr("X: %1\nY: %2", "X and Y position").arg(QString::number(xpos_d), QString::number(ypos_d))); +} + +void MapLocationDialog::on_cmdChange_clicked() +{ + qreal screenRatio = AppEnv::screenRatio(); + int pointMakerSize = 8 * screenRatio; + QPixmap pointMakerPixmap = IconLoader::loadingPointmakerIcon().pixmap(QSize(pointMakerSize, pointMakerSize)); + QCursor pointMakerCursor(pointMakerPixmap); + ui->cmdDone->setVisible(true); + ui->cmdApply->setVisible(false); + ui->cmdChange->setVisible(false); + ui->cmdRevert->setVisible(false); + + setCursor(pointMakerCursor); + changeMode = true; +} + +void MapLocationDialog::on_cmdDone_clicked() +{ + ui->cmdDone->setVisible(false); + ui->cmdChange->setVisible(true); + if (xpos_new != xpos_old || ypos_new != ypos_old) + { + ui->cmdApply->setVisible(true); + ui->cmdRevert->setVisible(true); + } + + setCursor(Qt::ArrowCursor); + changeMode = false; +} + +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); +} + +void MapLocationDialog::mouseMoveEvent(QMouseEvent *ev) +{ + if (!changeMode) { ev->ignore(); } + else if (ev->buttons() & Qt::LeftButton) + { + updatePosFromEvent(ev->x(), ev->y()); + ev->accept(); + } + else + { + ev->ignore(); + } +} + +void MapLocationDialog::mouseReleaseEvent(QMouseEvent *ev) +{ + if (!changeMode) { ev->ignore(); } + else if (ev->button() == Qt::LeftButton) + { + updatePosFromEvent(ev->x(), ev->y()); + ev->accept(); + } + else + { + ev->ignore(); + } +} + +void MapLocationDialog::on_cmdApply_clicked() +{ + propUpdate = true; + xpos_old = xpos_new; + ypos_old = ypos_new; + ui->cmdApply->setVisible(false); + ui->cmdRevert->setVisible(false); +} + +void MapLocationDialog::on_cmdRevert_clicked() +{ + drawPointOnMap(xpos_old, ypos_old); + ui->cmdApply->setVisible(false); + ui->cmdRevert->setVisible(false); +} + +bool MapLocationDialog::propUpdated() +{ + return propUpdate; +} + +double MapLocationDialog::getXpos() +{ + return xpos_old; +} + +double MapLocationDialog::getYpos() +{ + return ypos_old; +} + +void MapLocationDialog::on_cmdClose_clicked() +{ + close(); +} diff --git a/MapPreviewDialog.h b/MapLocationDialog.h similarity index 54% rename from MapPreviewDialog.h rename to MapLocationDialog.h index e69666b..5d0793a 100644 --- a/MapPreviewDialog.h +++ b/MapLocationDialog.h @@ -16,26 +16,48 @@ * along with this program. If not, see . *****************************************************************************/ -#ifndef MAPPREVIEWDIALOG_H -#define MAPPREVIEWDIALOG_H +#ifndef MAPLOCATIONDIALOG_H +#define MAPLOCATIONDIALOG_H #include +#include namespace Ui { -class MapPreviewDialog; +class MapLocationDialog; } -class MapPreviewDialog : public QDialog +class MapLocationDialog : public QDialog { Q_OBJECT public: - explicit MapPreviewDialog(QWidget *parent = 0); + explicit MapLocationDialog(double x, double y, QWidget *parent = 0); void drawPointOnMap(double x, double y); - ~MapPreviewDialog(); + bool propUpdated(); + double getXpos(); + double getYpos(); + ~MapLocationDialog(); + +protected: + void mouseMoveEvent(QMouseEvent *ev); + void mouseReleaseEvent(QMouseEvent *ev); + +private slots: + void on_cmdDone_clicked(); + void on_cmdApply_clicked(); + void on_cmdChange_clicked(); + void on_cmdRevert_clicked(); + void updatePosFromEvent(int x, int y); + void on_cmdClose_clicked(); private: - Ui::MapPreviewDialog *ui; + Ui::MapLocationDialog *ui; + double xpos_old; + double ypos_old; + double xpos_new; + double ypos_new; + bool propUpdate; + bool changeMode; }; -#endif // MAPPREVIEWDIALOG_H +#endif // MAPLOCATIONDIALOG_H diff --git a/MapLocationDialog.ui b/MapLocationDialog.ui new file mode 100644 index 0000000..d62edf0 --- /dev/null +++ b/MapLocationDialog.ui @@ -0,0 +1,218 @@ + + + MapLocationDialog + + + + 0 + 0 + 500 + 600 + + + + + 500 + 600 + + + + + 500 + 600 + + + + Snapmatic Map Viewer + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QLabel{ +color: rgb(255, 255, 255); +} + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::NoFocus + + + &Close + + + false + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + Qt::NoFocus + + + &Apply + + + false + + + + + + + Qt::NoFocus + + + &Revert + + + false + + + + + + + Qt::NoFocus + + + &Set + + + false + + + + + + + Qt::NoFocus + + + &Done + + + false + + + + + + + + + + + + diff --git a/MapPreviewDialog.cpp b/MapPreviewDialog.cpp deleted file mode 100644 index 8477bf0..0000000 --- a/MapPreviewDialog.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2017 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 -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*****************************************************************************/ - -#include "MapPreviewDialog.h" -#include "ui_MapPreviewDialog.h" -#include "IconLoader.h" -#include "AppEnv.h" -#include -#include - -MapPreviewDialog::MapPreviewDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::MapPreviewDialog) -{ - // Set Window Flags - setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); - - ui->setupUi(this); - - // DPI calculation - qreal screenRatio = AppEnv::screenRatio(); - setMinimumSize(500 * screenRatio, 600 * screenRatio); - setMaximumSize(500 * screenRatio, 600 * screenRatio); - setFixedSize(500 * screenRatio, 600 * screenRatio); -} - -MapPreviewDialog::~MapPreviewDialog() -{ - delete ui; -} - -void MapPreviewDialog::drawPointOnMap(double xpos_d, double ypos_d) -{ - qreal screenRatio = AppEnv::screenRatio(); - int pointMakerSize = 8 * screenRatio; - QPixmap pointMakerPixmap = IconLoader::loadingPointmakerIcon().pixmap(QSize(pointMakerSize, pointMakerSize)); - QSize mapPixelSize = size(); - - int pointMakerHalfSize = pointMakerSize / 2; - long xpos_ms = qRound(xpos_d); - long ypos_ms = qRound(ypos_d); - double xpos_ma = xpos_ms + 4000; - double ypos_ma = ypos_ms + 4000; - double xrat = (double)mapPixelSize.width() / 10000; - double yrat = (double)mapPixelSize.height() / 12000; - long xpos_mp = qRound(xpos_ma * xrat); - long ypos_mp = qRound(ypos_ma * yrat); - long xpos_pr = xpos_mp - pointMakerHalfSize; - long ypos_pr = ypos_mp + pointMakerHalfSize; - - QPixmap mapPixmap(mapPixelSize); - QPainter mapPainter(&mapPixmap); - mapPainter.drawPixmap(0, 0, mapPixelSize.width(), mapPixelSize.height(), QPixmap(":/img/mappreview.jpg").scaled(mapPixelSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); - mapPainter.drawPixmap(xpos_pr, mapPixelSize.height() - ypos_pr, pointMakerSize, pointMakerSize, pointMakerPixmap); - mapPainter.end(); - - ui->labPicture->setPixmap(mapPixmap); -} diff --git a/MapPreviewDialog.ui b/MapPreviewDialog.ui deleted file mode 100644 index 35fed61..0000000 --- a/MapPreviewDialog.ui +++ /dev/null @@ -1,71 +0,0 @@ - - - MapPreviewDialog - - - - 0 - 0 - 500 - 600 - - - - - 500 - 600 - - - - - 500 - 600 - - - - Snapmatic Map Viewer - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - true - - - - - - - - UiModLabel - QLabel -

uimod/UiModLabel.h
- - mouseMoved() - mouseReleased() - mousePressed() - mouseDoubleClicked() - - - - - - diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp index a6db0c2..a9d8fea 100755 --- a/OptionsDialog.cpp +++ b/OptionsDialog.cpp @@ -125,18 +125,21 @@ void OptionsDialog::setupLanguageBox() { settings->beginGroup("Interface"); currentLanguage = settings->value("Language", "System").toString(); + currentAreaLanguage = settings->value("AreaLanguage", "Auto").toString(); settings->endGroup(); QString cbSysStr = tr("%1 (Next Closest Language)", "First language a person can talk with a different person/application. \"Native\" or \"Not Native\".").arg(tr("System", "System in context of System default")); + QString cbAutoStr = tr("%1 (Closest to Interface)", "Next closest language compared to the Interface").arg(tr("Auto", "Automatic language choice.")); ui->cbLanguage->addItem(cbSysStr, "System"); + ui->cbAreaLanguage->addItem(cbAutoStr, "Auto"); QStringList availableLanguages; availableLanguages << QString("en_GB"); #ifndef GTA5SYNC_QCONF - availableLanguages << TCInstance->listTranslations(AppEnv::getExLangFolder()); + availableLanguages << TranslationClass::listTranslations(AppEnv::getExLangFolder()); #endif - availableLanguages << TCInstance->listTranslations(AppEnv::getInLangFolder()); + availableLanguages << TranslationClass::listTranslations(AppEnv::getInLangFolder()); availableLanguages.removeDuplicates(); availableLanguages.sort(); @@ -144,7 +147,6 @@ void OptionsDialog::setupLanguageBox() { QLocale langLocale(lang); QString cbLangStr = langLocale.nativeLanguageName() % " (" % langLocale.nativeCountryName() % ") [" % lang % "]"; - QString langIconStr = "flag-" % TranslationClass::getCountryCode(langLocale); ui->cbLanguage->addItem(QIcon::fromTheme(langIconStr), cbLangStr, lang); @@ -158,6 +160,59 @@ void OptionsDialog::setupLanguageBox() #endif } } + + QString aCurrentLanguage = QString("en_GB"); + if (TCInstance->isLanguageLoaded()) { aCurrentLanguage = TCInstance->getCurrentLanguage(); } + QLocale currentLocale = QLocale(aCurrentLanguage); + ui->labCurrentLanguage->setText(tr("Current: %1").arg(currentLocale.nativeLanguageName() % " (" % currentLocale.nativeCountryName() % ") [" % aCurrentLanguage % "]")); + + availableLanguages.clear(); + availableLanguages << TranslationClass::listAreaTranslations(); + availableLanguages.removeDuplicates(); + availableLanguages.sort(); + + for (QString lang : availableLanguages) + { + // correcting Language Location if possible + QString aLang = lang; + if (QFile::exists(":/global/global." % lang % ".loc")) + { + QFile locFile(":/global/global." % lang % ".loc"); + if (locFile.open(QFile::ReadOnly)) + { + aLang = QString::fromUtf8(locFile.readLine()).trimmed(); + locFile.close(); + } + } + + QLocale langLocale(aLang); + QString cbLangStr = langLocale.nativeLanguageName() % " (" % langLocale.nativeCountryName() % ") [" % aLang % "]"; + QString langIconStr = "flag-" % TranslationClass::getCountryCode(langLocale); + + ui->cbAreaLanguage->addItem(QIcon::fromTheme(langIconStr), cbLangStr, lang); + if (currentAreaLanguage == lang) + { +#if QT_VERSION >= 0x050000 + ui->cbAreaLanguage->setCurrentText(cbLangStr); +#else + int indexOfLang = ui->cbAreaLanguage->findText(cbLangStr); + ui->cbAreaLanguage->setCurrentIndex(indexOfLang); +#endif + } + } + + QString aCurrentAreaLanguage = TCInstance->getCurrentAreaLanguage(); + if (QFile::exists(":/global/global." % currentAreaLanguage % ".loc")) + { + QFile locFile(":/global/global." % currentAreaLanguage % ".loc"); + if (locFile.open(QFile::ReadOnly)) + { + aCurrentAreaLanguage = QString::fromUtf8(locFile.readLine()).trimmed(); + locFile.close(); + } + } + currentLocale = QLocale(aCurrentAreaLanguage); + ui->labCurrentAreaLanguage->setText(tr("Current: %1").arg(currentLocale.nativeLanguageName() % " (" % currentLocale.nativeCountryName() % ") [" % aCurrentAreaLanguage % "]")); } void OptionsDialog::setupRadioButtons() @@ -195,8 +250,10 @@ void OptionsDialog::applySettings() settings->beginGroup("Interface"); #if QT_VERSION >= 0x050000 settings->setValue("Language", ui->cbLanguage->currentData()); + settings->setValue("AreaLanguage", ui->cbAreaLanguage->currentData()); #else settings->setValue("Language", ui->cbLanguage->itemData(ui->cbLanguage->currentIndex())); + settings->setValue("AreaLanguage", ui->cbAreaLanguage->itemData(ui->cbAreaLanguage->currentIndex())); #endif #ifdef GTA5SYNC_WIN #if QT_VERSION >= 0x050200 @@ -255,8 +312,10 @@ void OptionsDialog::applySettings() #if QT_VERSION >= 0x050000 bool languageChanged = ui->cbLanguage->currentData().toString() != currentLanguage; + bool languageAreaChanged = ui->cbAreaLanguage->currentData().toString() != currentAreaLanguage; #else bool languageChanged = ui->cbLanguage->itemData(ui->cbLanguage->currentIndex()).toString() != currentLanguage; + bool languageAreaChanged = ui->cbAreaLanguage->itemData(ui->cbLanguage->currentIndex()).toString() != currentAreaLanguage; #endif if (languageChanged) { @@ -264,6 +323,10 @@ void OptionsDialog::applySettings() TCInstance->initUserLanguage(); TCInstance->loadTranslation(qApp); } + else if (languageAreaChanged) + { + TCInstance->initUserLanguage(); + } emit settingsApplied(newContentMode, languageChanged); diff --git a/OptionsDialog.h b/OptionsDialog.h index af57d87..18715b6 100755 --- a/OptionsDialog.h +++ b/OptionsDialog.h @@ -55,6 +55,7 @@ private: Ui::OptionsDialog *ui; QList playerItems; Qt::AspectRatioMode aspectRatio; + QString currentAreaLanguage; QString currentLanguage; QString currentCFolder; QString defaultProfile; diff --git a/OptionsDialog.ui b/OptionsDialog.ui index 7025371..c23d9ba 100755 --- a/OptionsDialog.ui +++ b/OptionsDialog.ui @@ -390,12 +390,38 @@ - Language + Interface + + + + Current: %1 + + + + + + + + + + Areas + + + + + + + + + Current: %1 + + + diff --git a/PictureDialog.cpp b/PictureDialog.cpp index 61c255c..d8c1646 100755 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -21,7 +21,7 @@ #include "ProfileDatabase.h" #include "ui_PictureDialog.h" #include "SidebarGenerator.h" -#include "MapPreviewDialog.h" +#include "MapLocationDialog.h" #include "SnapmaticEditor.h" #include "StandardPaths.h" #include "PictureExport.h" @@ -691,21 +691,48 @@ int PictureDialog::getIndex() void PictureDialog::openPreviewMap() { - MapPreviewDialog *mapPreviewDialog; + MapLocationDialog *mapLocDialog; if (rqFullscreen && fullscreenWidget != nullptr) { - mapPreviewDialog = new MapPreviewDialog(fullscreenWidget); + mapLocDialog = new MapLocationDialog(smpic->getSnapmaticProperties().location.x, smpic->getSnapmaticProperties().location.y, fullscreenWidget); } else { - mapPreviewDialog = new MapPreviewDialog(this); + mapLocDialog = new MapLocationDialog(smpic->getSnapmaticProperties().location.x, smpic->getSnapmaticProperties().location.y, this); } - mapPreviewDialog->setWindowIcon(windowIcon()); - mapPreviewDialog->setModal(true); - mapPreviewDialog->drawPointOnMap(smpic->getSnapmaticProperties().location.x, smpic->getSnapmaticProperties().location.y); - mapPreviewDialog->show(); - mapPreviewDialog->exec(); - delete mapPreviewDialog; + mapLocDialog->setWindowIcon(windowIcon()); + mapLocDialog->setModal(true); + mapLocDialog->show(); + mapLocDialog->exec(); + if (mapLocDialog->propUpdated()) + { + // Update Snapmatic Properties + SnapmaticProperties localSpJson = smpic->getSnapmaticProperties(); + localSpJson.location.x = mapLocDialog->getXpos(); + localSpJson.location.y = mapLocDialog->getYpos(); + localSpJson.location.z = 0; + + // Update Snapmatic Picture + QString currentFilePath = smpic->getPictureFilePath(); + QString originalFilePath = smpic->getOriginalPictureFilePath(); + QString backupFileName = originalFilePath % ".bak"; + if (!QFile::exists(backupFileName)) + { + QFile::copy(currentFilePath, backupFileName); + } + SnapmaticProperties fallbackProperties = smpic->getSnapmaticProperties(); + smpic->setSnapmaticProperties(localSpJson); + if (!smpic->exportPicture(currentFilePath)) + { + QMessageBox::warning(this, SnapmaticEditor::tr("Snapmatic Properties"), SnapmaticEditor::tr("Patching of Snapmatic Properties failed because of I/O Error")); + smpic->setSnapmaticProperties(fallbackProperties); + } + else + { + updated(); + } + } + delete mapLocDialog; } void PictureDialog::editSnapmaticProperties() @@ -739,6 +766,9 @@ void PictureDialog::updated() crewID = QString::number(smpic->getSnapmaticProperties().crewID); crewStr = QString::number(smpic->getSnapmaticProperties().crewID); } + locX = QString::number(smpic->getSnapmaticProperties().location.x); + locY = QString::number(smpic->getSnapmaticProperties().location.y); + locZ = QString::number(smpic->getSnapmaticProperties().location.z); picTitl = StringParser::escapeString(smpic->getPictureTitle()); ui->labJSON->setText(jsonDrawString.arg(locX, locY, locZ, generatePlayersString(), generateCrewString(), picTitl, picAreaStr, created)); } diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index af7058b..88dbcdd 100755 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -96,25 +96,27 @@ ProfileInterface::ProfileInterface(ProfileDatabase *profileDB, CrewDatabase *cre ProfileInterface::~ProfileInterface() { - foreach (ProfileWidget *widget, widgets.keys()) + for (ProfileWidget *widget : widgets.keys()) { - widgets.remove(widget); widget->removeEventFilter(this); widget->disconnect(); delete widget; } - foreach (SavegameData *savegame, savegames) + widgets.clear(); + + for (SavegameData *savegame : savegames) { - savegames.removeAll(savegame); delete savegame; } - foreach (SnapmaticPicture *picture, pictures) + savegames.clear(); + + for (SnapmaticPicture *picture : pictures) { - pictures.removeAll(picture); delete picture; } - delete profileLoader; + pictures.clear(); + delete profileLoader; delete ui; } @@ -617,7 +619,7 @@ bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) } QString currentTime = QTime::currentTime().toString("HHmmss"); SnapmaticProperties spJson = picture->getSnapmaticProperties(); - spJson.uid = QString(currentTime + + spJson.uid = QString(currentTime % QString::number(QDate::currentDate().dayOfYear())).toInt(); bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); @@ -625,7 +627,7 @@ bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) while ((fExists || fExistsHidden) && cEnough < 5000) { currentTime = QString::number(currentTime.toInt() - 1); - spJson.uid = QString(currentTime + + spJson.uid = QString(currentTime % QString::number(QDate::currentDate().dayOfYear())).toInt(); fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); @@ -650,11 +652,11 @@ bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) delete picture; return false; } - QImage snapmaticImage; + QImage *importImage = new QImage(); QImageReader snapmaticImageReader; snapmaticImageReader.setDecideFormatFromContent(true); snapmaticImageReader.setDevice(&snapmaticFile); - if (!snapmaticImageReader.read(&snapmaticImage)) + if (!snapmaticImageReader.read(importImage)) { QMessageBox::warning(this, tr("Import"), tr("Can't import %1 because file can't be parsed properly").arg("\""+selectedFileName+"\"")); delete picture; @@ -662,7 +664,7 @@ bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) } ImportDialog *importDialog = new ImportDialog(this); importDialog->setWindowFlags(importDialog->windowFlags()^Qt::WindowContextHelpButtonHint); - importDialog->setImage(snapmaticImage); + importDialog->setImage(importImage); importDialog->setModal(true); importDialog->show(); importDialog->exec(); @@ -680,7 +682,7 @@ bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) while ((fExists || fExistsHidden) && cEnough < 25) { currentTime = QString::number(currentTime.toInt() - 1); - spJson.uid = QString(currentTime + + spJson.uid = QString(currentTime % QString::number(QDate::currentDate().dayOfYear())).toInt(); fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); @@ -820,7 +822,7 @@ void ProfileInterface::profileWidgetSelected() { if (selectedWidgts == 0) { - foreach (ProfileWidget *widget, widgets.keys()) + for (ProfileWidget *widget : widgets.keys()) { widget->setSelectionMode(true); } @@ -833,7 +835,7 @@ void ProfileInterface::profileWidgetDeselected() if (selectedWidgts == 1) { int scrollBarValue = ui->saProfile->verticalScrollBar()->value(); - foreach (ProfileWidget *widget, widgets.keys()) + for (ProfileWidget *widget : widgets.keys()) { if (contentMode != 2) { @@ -847,7 +849,7 @@ void ProfileInterface::profileWidgetDeselected() void ProfileInterface::selectAllWidgets() { - foreach (ProfileWidget *widget, widgets.keys()) + for (ProfileWidget *widget : widgets.keys()) { widget->setSelected(true); } @@ -855,7 +857,7 @@ void ProfileInterface::selectAllWidgets() void ProfileInterface::deselectAllWidgets() { - foreach (ProfileWidget *widget, widgets.keys()) + for (ProfileWidget *widget : widgets.keys()) { widget->setSelected(false); } @@ -879,7 +881,7 @@ void ProfileInterface::exportSelected() if (exportDirectory != "") { settings.setValue(profileName, exportDirectory); - foreach (ProfileWidget *widget, widgets.keys()) + for (ProfileWidget *widget : widgets.keys()) { if (widget->isSelected()) { @@ -1022,7 +1024,7 @@ void ProfileInterface::deleteSelected() { if (QMessageBox::Yes == QMessageBox::warning(this, tr("Remove selected"), tr("You really want remove the selected Snapmatic picutres and Savegame files?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No)) { - foreach (ProfileWidget *widget, widgets.keys()) + for (ProfileWidget *widget : widgets.keys()) { if (widget->isSelected()) { @@ -1069,7 +1071,7 @@ void ProfileInterface::settingsApplied(int _contentMode, bool languageChanged) contentMode = _contentMode; if (contentMode == 2) { - foreach (ProfileWidget *widget, widgets.keys()) + for (ProfileWidget *widget : widgets.keys()) { widget->setSelectionMode(true); widget->setContentMode(contentMode); @@ -1078,7 +1080,7 @@ void ProfileInterface::settingsApplied(int _contentMode, bool languageChanged) } else { - foreach (ProfileWidget *widget, widgets.keys()) + for (ProfileWidget *widget : widgets.keys()) { if (selectedWidgts == 0) { @@ -1093,7 +1095,7 @@ void ProfileInterface::settingsApplied(int _contentMode, bool languageChanged) void ProfileInterface::enableSelected() { int fails = 0; - foreach (ProfileWidget *widget, widgets.keys()) + for (ProfileWidget *widget : widgets.keys()) { if (widget->isSelected()) { @@ -1112,7 +1114,7 @@ void ProfileInterface::enableSelected() void ProfileInterface::disableSelected() { int fails = 0; - foreach (ProfileWidget *widget, widgets.keys()) + for (ProfileWidget *widget : widgets.keys()) { if (widget->isSelected()) { @@ -1286,7 +1288,7 @@ bool ProfileInterface::eventFilter(QObject *watched, QEvent *event) if ((watched->objectName() == "SavegameWidget" || watched->objectName() == "SnapmaticWidget") && isProfileLoaded) { ProfileWidget *pWidget = nullptr; - foreach (ProfileWidget *widget, widgets.keys()) + for (ProfileWidget *widget : widgets.keys()) { QPoint mousePos = widget->mapFromGlobal(QCursor::pos()); if (widget->rect().contains(mousePos)) @@ -1355,7 +1357,7 @@ bool ProfileInterface::eventFilter(QObject *watched, QEvent *event) void ProfileInterface::hoverProfileWidgetCheck() { ProfileWidget *pWidget = nullptr; - foreach (ProfileWidget *widget, widgets.keys()) + for (ProfileWidget *widget : widgets.keys()) { if (widget->underMouse()) { diff --git a/TranslationClass.cpp b/TranslationClass.cpp index fcb00d7..279d2cb 100644 --- a/TranslationClass.cpp +++ b/TranslationClass.cpp @@ -42,6 +42,7 @@ void TranslationClass::initUserLanguage() QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); settings.beginGroup("Interface"); userLanguage = settings.value("Language", "System").toString(); + userAreaLanguage = settings.value("AreaLanguage", "Auto").toString(); settings.endGroup(); } @@ -279,13 +280,26 @@ QStringList TranslationClass::listTranslations(const QString &langPath) langDir.setNameFilters(QStringList("gta5sync_*.qm")); langDir.setPath(langPath); QStringList availableLanguages; - for (QString &lang : langDir.entryList(QDir::Files | QDir::NoDotAndDotDot, QDir::NoSort)) + for (QString lang : langDir.entryList(QDir::Files | QDir::NoDotAndDotDot, QDir::NoSort)) { availableLanguages << QString(lang).remove("gta5sync_").remove(".qm"); } return availableLanguages; } +QStringList TranslationClass::listAreaTranslations() +{ + QDir langDir; + langDir.setNameFilters(QStringList("global.*.ini")); + langDir.setPath(":/global"); + QStringList availableLanguages; + for (QString lang : langDir.entryList(QDir::Files | QDir::NoDotAndDotDot, QDir::NoSort)) + { + availableLanguages << QString(lang).remove("global.").remove(".ini"); + } + return availableLanguages; +} + bool TranslationClass::loadSystemTranslation_p(const QString &langPath, QTranslator *appTranslator) { #ifdef GTA5SYNC_DEBUG @@ -498,6 +512,55 @@ bool TranslationClass::isUserLanguageSystem_p() return (userLanguage == "System" || userLanguage.trimmed().isEmpty()); } +QString TranslationClass::getCurrentAreaLanguage() +{ + const QStringList areaTranslations = listAreaTranslations(); + if (userAreaLanguage == "Auto" || userAreaLanguage.trimmed().isEmpty()) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "autoAreaLanguageMode"; +#endif + QString langCode = QString(currentLanguage).replace("-", "_"); + if (areaTranslations.contains(langCode)) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "autoAreaLanguageSelected" << langCode; +#endif + return langCode; + } + else if (langCode.contains("_")) + { + langCode = langCode.split("_").at(0); + if (!areaTranslations.contains(langCode)) goto outputDefaultLanguage; +#ifdef GTA5SYNC_DEBUG + qDebug() << "autoAreaLanguageSelected" << langCode; +#endif + return langCode; + } + } + else if (areaTranslations.contains(userAreaLanguage)) + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "userAreaLanguageSelected" << userAreaLanguage; +#endif + return userAreaLanguage; + } + else if (userAreaLanguage.contains("_")) + { + QString langCode = QString(userAreaLanguage).replace("-", "_").split("_").at(0); + if (!areaTranslations.contains(langCode)) goto outputDefaultLanguage; +#ifdef GTA5SYNC_DEBUG + qDebug() << "userAreaLanguageSelected" << langCode; +#endif + return langCode; + } +outputDefaultLanguage: +#ifdef GTA5SYNC_DEBUG + qDebug() << "defaultAreaLanguageSelected"; +#endif + return "en"; +} + QString TranslationClass::getCurrentLanguage() { return currentLanguage; diff --git a/TranslationClass.h b/TranslationClass.h index 532be3b..db62010 100644 --- a/TranslationClass.h +++ b/TranslationClass.h @@ -36,7 +36,9 @@ public: void initUserLanguage(); void loadTranslation(QApplication *app); void unloadTranslation(QApplication *app); - QStringList listTranslations(const QString &langPath); + static QStringList listTranslations(const QString &langPath); + static QStringList listAreaTranslations(); + QString getCurrentAreaLanguage(); QString getCurrentLanguage(); bool isLanguageLoaded(); @@ -50,6 +52,7 @@ private: QTranslator exQtTranslator; QTranslator inAppTranslator; QTranslator inQtTranslator; + QString userAreaLanguage; QString currentLanguage; QString userLanguage; int currentLangIndex; diff --git a/UserInterface.cpp b/UserInterface.cpp index 41dc44a..67d4a97 100755 --- a/UserInterface.cpp +++ b/UserInterface.cpp @@ -189,12 +189,12 @@ void UserInterface::changeFolder_clicked() void UserInterface::on_cmdReload_clicked() { - foreach (QPushButton *profileBtn, profileBtns) + for (QPushButton *profileBtn : profileBtns) { ui->vlButtons->removeWidget(profileBtn); - profileBtns.removeAll(profileBtn); delete profileBtn; } + profileBtns.clear(); setupDirEnv(); } @@ -223,28 +223,40 @@ void UserInterface::closeProfile() { if (profileOpen) { - profileOpen = false; - profileName.clear(); - ui->menuProfile->setEnabled(false); - ui->actionSelect_profile->setEnabled(false); - ui->swProfile->removeWidget(profileUI); - delete profileUI; + closeProfile_p(); } this->setWindowTitle(defaultWindowTitle.arg(tr("Select Profile"))); } +void UserInterface::closeProfile_p() +{ + profileOpen = false; + profileName.clear(); + profileName.squeeze(); + ui->menuProfile->setEnabled(false); + ui->actionSelect_profile->setEnabled(false); + ui->swProfile->removeWidget(profileUI); + profileUI->disconnect(); + delete profileUI; +} + void UserInterface::closeEvent(QCloseEvent *ev) { Q_UNUSED(ev) - threadDB->doEndThread(); + threadDB->terminateThread(); } UserInterface::~UserInterface() { - foreach (QPushButton *profileBtn, profileBtns) + if (profileOpen) + { + closeProfile_p(); + } + for (QPushButton *profileBtn : profileBtns) { delete profileBtn; } + profileBtns.clear(); delete ui; } diff --git a/UserInterface.h b/UserInterface.h index 29bce56..38557b6 100755 --- a/UserInterface.h +++ b/UserInterface.h @@ -84,6 +84,7 @@ private: QStringList GTAV_Profiles; void setupProfileUi(); void openProfile(const QString &profileName); + void closeProfile_p(); void openSelectProfile(); void retranslateUi(); diff --git a/config.h b/config.h index a7b1b70..f43dc83 100755 --- a/config.h +++ b/config.h @@ -50,7 +50,7 @@ #ifndef GTA5SYNC_APPVER #ifndef GTA5SYNC_DAILYB -#define GTA5SYNC_APPVER "1.5.0-dev2" +#define GTA5SYNC_APPVER "1.5.0-dev3" #else #define GTA5SYNC_APPVER GTA5SYNC_DAILYB #endif diff --git a/gta5view.pro b/gta5view.pro index d1812a9..9d7ec08 100755 --- a/gta5view.pro +++ b/gta5view.pro @@ -38,7 +38,7 @@ SOURCES += main.cpp \ GlobalString.cpp \ IconLoader.cpp \ ImportDialog.cpp \ - MapPreviewDialog.cpp \ + MapLocationDialog.cpp \ OptionsDialog.cpp \ PictureDialog.cpp \ PictureExport.cpp \ @@ -72,7 +72,7 @@ HEADERS += \ GlobalString.h \ IconLoader.h \ ImportDialog.h \ - MapPreviewDialog.h \ + MapLocationDialog.h \ OptionsDialog.h \ PictureDialog.h \ PictureExport.h \ @@ -100,7 +100,7 @@ FORMS += \ AboutDialog.ui \ ExportDialog.ui \ ImportDialog.ui \ - MapPreviewDialog.ui \ + MapLocationDialog.ui \ OptionsDialog.ui \ PictureDialog.ui \ ProfileInterface.ui \ diff --git a/main.cpp b/main.cpp index 918d281..ebd7d6b 100755 --- a/main.cpp +++ b/main.cpp @@ -148,20 +148,17 @@ int main(int argc, char *argv[]) if (crewID != 0) { crewDB.addCrew(crewID); } if (!readOk) { return 1; } - QEventLoop threadLoop; QObject::connect(&threadDB, SIGNAL(crewNameFound(int, QString)), &crewDB, SLOT(setCrewName(int, QString))); QObject::connect(&threadDB, SIGNAL(crewNameUpdated()), &picDialog, SLOT(crewNameUpdated())); QObject::connect(&threadDB, SIGNAL(playerNameFound(int, QString)), &profileDB, SLOT(setPlayerName(int, QString))); QObject::connect(&threadDB, SIGNAL(playerNameUpdated()), &picDialog, SLOT(playerNameUpdated())); - QObject::connect(&threadDB, SIGNAL(finished()), &threadLoop, SLOT(quit())); - QObject::connect(&picDialog, SIGNAL(endDatabaseThread()), &threadDB, SLOT(doEndThread())); + QObject::connect(&threadDB, SIGNAL(finished()), &a, SLOT(quit())); + QObject::connect(&picDialog, SIGNAL(endDatabaseThread()), &threadDB, SLOT(terminateThread())); threadDB.start(); picDialog.show(); - threadLoop.exec(); - - return 0; + return a.exec(); } else if (selectedAction == "showsgd") { @@ -174,6 +171,7 @@ int main(int argc, char *argv[]) if (!readOk) { return 1; } + a.setQuitOnLastWindowClosed(true); savegameDialog.show(); return a.exec(); @@ -197,7 +195,5 @@ int main(int argc, char *argv[]) uiWindow.show(); #endif - a.exec(); - - return 0; + return a.exec(); } diff --git a/res/app.qrc b/res/app.qrc index 26fe7f2..d5a3d0e 100755 --- a/res/app.qrc +++ b/res/app.qrc @@ -30,6 +30,7 @@ global.ja.ini global.ru.ini global.zh.ini + global.zh.loc
template.g5e diff --git a/res/app.rc b/res/app.rc index 43bfa7a..ee9308c 100755 --- a/res/app.rc +++ b/res/app.rc @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view\0" - VALUE "FileVersion", "1.5.0-dev2\0" + VALUE "FileVersion", "1.5.0-dev3\0" VALUE "InternalName", "gta5view\0" VALUE "LegalCopyright", "Copyright © 2016-2017 Syping\0" VALUE "OriginalFilename", "gta5view.exe\0" VALUE "ProductName", "gta5view\0" - VALUE "ProductVersion", "1.5.0-dev2\0" + VALUE "ProductVersion", "1.5.0-dev3\0" END END END diff --git a/res/global.zh.loc b/res/global.zh.loc new file mode 100644 index 0000000..dad8857 --- /dev/null +++ b/res/global.zh.loc @@ -0,0 +1 @@ +zh_TW diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index fe43ac6480a12c41bfce3f14865614d3cf43cb0f..c934152338f2f829b6bc74e5b7a40975a4431b77 100755 GIT binary patch delta 3228 zcmZ{m3sh8f9>>3P=MFRX&J2T!ypchLctwhWuSy>B62TXw5FiM{OPC=TP&ua^%w8Ic zC6VneW+sxUn*~`aX)9u7nz&S2R+gqEYxyd&ho|;C+?KV@?(vMDJ2U_P@A3UThKr5D z$Bzn+yE_^ItN;wpD;%2%2&(}1Za{n=@cjnR%moV910m6XhbIs|12Ae8dN_cIu6#dH zp~rS$$swTR3kZ9Afl<8>n>GV36UbeFXDP&vl|cD(5W7Xdv7{4XA0O(sLp(|6^BmCJ zNk;`a(4>%lH=ubb0Wdc})AtsT_lQEP1l{HZ46p(rQ4aty?Fy}rAnesdI-Z3vrvqCT z!kqSPR}pq12&i6*u&*bO`w_lB6%I_;gm9uPUHw#{9$Sk?FriNDTyq%EmE*Oa z>ZsDgxbQyj8Ip1FISu7o+JS4<3}!G}C4UkDEX+_?+N{u4qVj)XEZ|e2D!FHnN^Dcr zPWleWcT?TpmJftgtDdO;f~EOD_1x>dy$D9Z6%Rql9xE?m*RU;l~7KW|}1YJYf`@D?zRHd67+8td=@H04mee9&i5w zL^P_s?K~G~Q%Bbg0@j)8teuYn5}jQVpsdhYBgp^f~I| zjg(B+C%WiatMJ#w=%1&vBp-@X;%F%Eb#dO*O+e0o_~?j*!02AFX)T-11o6)~&72&F zTM}9O$aHZ>^EJSpPqIYz^(61t3FHm3hWwH2Ab%xKJH#F9c)i}0RFUzdnyeRhMr;M{ zNmW=eUfj7OkIi>Y+_icUpnp>A)-R=Um&F5{CUaWWihcD@GP53qi^eOgxFGiJSQ zZgW|X7X-|j=29fsfVm|uWm#0xAwHnhUKk0CU8$7^?ZBi`h3WSy%&}?L>mJ>lZGAx5DP2Y<74dsRSG9Qykh)T5J7{5df39l`{D{rksyoob zeNbGd>)Atl+OxXDy;SHfo9;??E9c*Hi{$ynL7>!C^87TG-P|q(|1b_%wpr$WeS_odPS-% zAvH&(nj2BTf_;*GJxePENNbZEXSmlPHAP0#VUW~*kkTz*AsvZjU|Cb86S=e5Jblv1 z$SFYZo6?n&RAA*dqUW#j0v?3qtxb2=RbY?Xr=Q#say@`TBk zIYo2j86|C`N@3Lqd4|LJ!HQ{e`T!5+J|)lpinVf^DlfX?%Fi#!i@##c?wBSQzWOHy zS}GTVQjQ6gpHAgH!%>AE@e1=d%6t4q1LKPSNgCy&muRn{R6b^5Z{0abem9;| zHh-PmSN{qiSIdr}hxzHs2MgO2mVPStJx^&zyd$3s$l{LAl|S5m9q`JP&v#Plw5Q~O zqwL-^U%kp1*qj2rI@X=F4bpqRLdV`J{nX?^E}m9>&OfO{=6d~VS1K7$u5XIYWb>WU zHzi%*sz2jU9?H!6relm~)cyMAU;H?iZ|c|KJQqZa{)wBb`15+NzSVOYQ1p?$E&M?m z^ix>2M89|S82$!8f1rwvS8gO}cxAf2_wE5Mwq5!@I|E$tu)cqz1+d)Ezt_qiyW;Em z@4HX4nH?(S!E3KU{A(g>A8n8>G4cf2;Qq)cE}UG0zn+qLc^mv+_u=0Gk%sV)Z<+Z; zL%}#otMf3_rjd!u4QmowDQU1_!|i;pPcgKqL}uuwuyn4W-NXbk))@9(spY;nV(3

QM+gUo|@C?~V&! z#)P_ByRFLHlJ4af?uA>g)bdI^O;nVc{yn)Ji9a4VLzJSSvITX zkCtw^=);RSsAFC?QG{ivr4c(CoY@W=(FQND)LUxoG?Vzdh;Fgt44{_^6%PgR-@9V) zLW}d_@9wqa`sV(>Ogyj{)2UbxCPGH`Z_iQAVB8j)3$4ZGY;(1(w%nE@t` zayI{u`lFv);uD<)hcgm_CboR$>zNZX&|y2?K@-g(36-{5ORe2(x0zF|c1ul3VUZ=YB{0CV>wDkRs=$$0IMgdnZEVz; z_J{9l;%Y2~Et~zkf;`w&b^OkTs-fO0XC(ACd{T_7v)i0TTTb}bhd56!4vzQjN*Xg>yv_Z8WiotT`cL33<^Zp*im|`s{TuNYQPKba delta 2410 zcmXArc~}(p9me0Con>}rc3FiL1O#I6KtR9)@JI}(2#O%53W@>(iX0vsrhT4fF_cCV ziW);yidV!FVvLAdsYXE_Lrq-8qw&b0(JIACHIf+h(Y`$M*N54e-}iXG$B&z9ga_rq zdaG?9fOi4YUX5NIfUp{H+6;(SfPp&!!z^Hd1o(yk&J}?FM8M4FK00>;qa67>N~6^U zSl9+EnhUXtXB~ne?)d|d>k6?&1m+KiXeW!kAzn)cY%`z2@D>fvx5E%kx)s21XbLc> z2L}5&AoZojrSHMGGm!y#!FTlgz!*1;OJBmT&v1b+{Q3+Rfg^fH4opo|n?m3*5WHbEYUf_{=~xJn*ZQw_-3xen>Wara1=1>Yf2vym47;b>Q1&xmjnG}5Q3ON{ z*Zt4@B@pQ%3~t%T_l`n*Ko=cX3iHqLeC{lvure7~Rw=C9wjT&PAyftN_kQ)ljtrJ* z_;rnO*MxnmY~$&uQ#cS>1L(pv%Jmw(Gc|_%q%pQqWBzubG4mdfxI}1f4gqG%!qHYA zAbG2BN*qCDb_gAxT7ckI!M=j;i<5*OJ7QSUHNu@eR$!^0@cR@dVi_a6umw88n!1Jy?q_md@j_6Yw*8p!s>GR441Ir`y1@(skpZofCb7Yoe zzrHP#3WT1~Unr+CM!V>svLwEv#E=&g*ekJOSOo2)jS}O>Z3pHo5ZCliV)F)zwyF== zOcscLO{?YvK-?9{8vC`14b_k7=rYMttdK|=Sh0%yjl56(4y^PbUz4-MhIKr>vVzo+ z$4EWdEj9-1rc$Rg=57%i8`9ZZkHs%4<^bv^HnBy`V)ri+Pi-Gdz839ep8!L`G$w7) zxHwI;AFts1E#iap7Qp=-@mc42PRlLv<%tjmy4oQ2ott{qVBNO~ke6r-N;RZiXl2H~ z8VYwT0w(-yumz?7{Vy5n0+>*y&Bw6wc``6*t)YH(DyQIk!=VEwDg7bCoqsbhX_tc` ztO?LBb?|I=GTB+tj4Fk1G^=FDW-|fT6tx|L6SYW!7)Y{4>bp1&BDVF=fMKBtsu@~~L z8a>+sfr+P$5zp%>eT#AOlbxLZ{E^0)`|Lo@Ok><(O5!%wSh#Z+$Lo=C*_j+5CB;}i z_&PV5Vm#H#xzG5IvGq6&O1F*eXQ|NmyT+at24t<3UB5cR?1@5AZPO&<2lhx_B9 zJmOv2G3hnBUYA4HM$-N^Icifi=f5yVj@{4!Oly(TB}(nFN6y;BOy(Yw3!>SC`Pp(o zE@?O~ul#K^7f6s?@-b^Fd&?hA`+>buDpv)D&{3^ie};+`|5xq^r`?3l<%{!Y0O?cZ zYk^^$mWguDHD+FxMeZiIE4nTlBTMX6blqf9lwuz6CLJd#Z^Y8kAa`YG`E*LZR0$qS ziBr!i6LagxGL3nE(O7a&iS6Qdsj4!k#}O#aQ0CsJBK`-J%%kryz*|Z-sGR#YW%G2N zH=Wn$d{EhJ>-%AzlX85}0IuHI%K7e6Ms`d2CWlQlZlCh)WR6pusMyPn0LpTWv8@{8 z`)kZjRP1}J+12BfYu+i`fR~i-4m<${^i%F0rn1qh(siCq8ns^4^#v4tRn>=ES;C>J z&Fx4#KWtXVMfGyQC~DdzW}YCa6^@k7;|H}WB$>@NQ>~hIkC#W1#_Srk`qd!rfr;um z+$9^-4KG*o7M!QnxN@Ur#Hn@uf9CfaG-h8>|6bw6Rb8r{Dx|+MCzAF`TW#vuNnPC0 zLsWYSBP)5Kc5cn#Ml4V-*YLK=T&(`ua)aHf(>S2eB-Tc<#s^GtHv@jhX0m?Z%!M-F zMCK%i8)rf*_gc}M)w)V+;09(us+(ZwmrY&QFbaXOq% zoBeLmL6(O(Y%TXfzX=)#c9_G>oQeta%#&AN;rQj6ldbHP(McL@F$LyhCsTodqZ+4{ znA=hZaI8Ky-z}npw|pGMzFq!yo} - + Background Colour: <span style="color: %1">%1</span> Hintergrundfarbe: <span style="color: %1">%1</span> @@ -425,25 +425,37 @@ When you plan to use it as Avatar the picture will be cut! Wenn du planst es als Avatar zu verwenden das Bild wird abgetrennt! - + + 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 + + + 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... - MapPreviewDialog + MapLocationDialog Map Preview Map Vorschau @@ -453,10 +465,50 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! Snapmatic Koordinatenansicht - + Snapmatic Map Viewer Snapmatic Kartenansicht + + X: %1 +Y: %2 + X and Y position + X: %1 +Y: %2 + + + + &Close + S&chließen + + + + &Apply + &Übernehmen + + + + &Revert + &Zurücksetzen + + + + &Set + &Ändern + + + + &Done + &Fertig + + + + X: %1 +Y: %2 + X and Y position + X: %1 +Y: %2 + OptionsDialog @@ -621,38 +673,55 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! - Language Sprache - + + Interface + Oberfläche + + + + + + + Current: %1 + Aktuell: %1 + + + + Areas + Standorte + + + Sync Sync - + Sync is not implemented at current time Sync wurde bisher nicht implementiert - + Apply changes Änderungen übernehmen - + &OK OK, Cancel, Apply &OK - + Discard changes Änderungen verwerfen - + &Cancel OK, Cancel, Apply Abbre&chen @@ -673,7 +742,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! %1 (%2 wenn verfügbar) - + %1 %1 %1 @@ -687,19 +756,31 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! Der eigene Ordner initialisiert sobald du %1 neugestartet hast. - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (Erste näheste Sprache) - + System System in context of System default System - + + %1 (Closest to Interface) + Next closest language compared to the Interface + %1 (Näheste zur Oberfläche) + + + + Auto + Automatic language choice. + Automatisch + + + The new Custom Folder will initialise after you restart %1. Der eigene Ordner wird initialisiert sobald du %1 neugestartet hast. @@ -708,15 +789,15 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! Die Änderung der Sprache nimmt Effekt sobald du %1 neugestartet hast. - + No Profile No Profile, as default Kein Profil - - - + + + Profile: %1 Profil: %1 @@ -831,7 +912,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! - + Export as &Picture... Als &Bild exportieren... @@ -841,7 +922,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! - + Export as &Snapmatic... Als &Snapmatic exportieren... @@ -856,7 +937,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! - + &Edit Properties... Eigenschaften bearb&eiten... @@ -1177,30 +1258,30 @@ Drücke A für Standardansicht Profil schließen - + Loading... Lade... - - + + Import... Importieren... - - - - - - - - - - - - - + + + + + + + + + + + + + Import Importieren @@ -1213,14 +1294,14 @@ Drücke A für Standardansicht Importfähige Dateien (*.g5e *.jpg *.png SGTA* PGTA*) - - + + Savegames files (SGTA*) Spielstanddateien (SGTA*) - - + + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) @@ -1229,29 +1310,29 @@ Drücke A für Standardansicht Alle Bilddateien (*.jpg *.png) - + Importable files (%1) Importfähige Dateien (%1) - + All image files (%1) Alle Bilddateien (%1) - - + + All files (**) Alle Dateien (**) - - + + Import file %1 of %2 files Importiere Datei %1 von %2 Dateien - + Import failed with... %1 @@ -1260,29 +1341,29 @@ Drücke A für Standardansicht %1 - - + + 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 parsed properly Kann %1 nicht importieren weil die Datei nicht richtig gelesen werden kann - + Can't import %1 because file format can't be detected Kann %1 nicht importieren weil das Dateiformat nicht erkannt werden kann - + Initialising export... Initialisiere Export... @@ -1291,24 +1372,24 @@ Drücke A für Standardansicht Kann %1 nicht importieren weil das Dateiformat nicht gültig ist - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA oder endet mit .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Fehlgeschlagen beim Importieren vom Snapmatic Bild, dieses Bild ist bereits im Spiel - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exportiere Snapmatic Bilder%2<br><br>JPG Bilder machen es möglich sie mit ein Bildansicht Programm zu öffnen<br>Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren<br><br>Exportieren als: - - - + + + No valid file is selected Keine gültige Datei wurde ausgewählt @@ -1322,35 +1403,35 @@ Drücke A für Standardansicht Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA - + Failed to import the Snapmatic picture, can't copy the file into profile Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren - + Failed to import the Savegame, can't copy the file into profile Fehlgeschlagen beim Importieren vom Spielstand, kann Spielstanddatei nicht ins Profil kopieren - + Failed to import the Savegame, no Savegame slot is left Fehlgeschlagen beim Importieren vom Spielstand, kein Spielstandslot mehr frei - - + + JPG pictures and GTA Snapmatic JPG Bilder und GTA Snapmatic - - + + JPG pictures only Nur JPG Bilder - - + + GTA Snapmatic only Nur GTA Snapmatic @@ -1369,25 +1450,25 @@ Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren Exportieren als: - - + + No Snapmatic pictures or Savegames files are selected Keine Snapmatic Bilder oder Spielstände ausgewählt - - - + + + Remove selected Auswahl löschen - + You really want remove the selected Snapmatic picutres and Savegame files? Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Fehlgeschlagen beim kompletten entfernen der ausgewählten Snapmatic Bilder und/oder der Spielstanddateien @@ -1408,10 +1489,10 @@ Exportieren als: Fehlgeschlagenen beim Import vom Spielstand weil kein Spielstandslot mehr übrig ist - - - - + + + + Export selected Auswahl exportieren @@ -1432,7 +1513,7 @@ Exportieren als: Wie sollen wir mit den Snapmatic Bilder umgehen? - + Export selected... Auswahl exportieren... @@ -1445,7 +1526,7 @@ Exportieren als: Initialisierung... - + Export failed with... %1 @@ -1475,13 +1556,13 @@ Exportieren als: 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) @@ -1644,32 +1725,32 @@ Exportieren als: Fehlgeschlagen beim Löschen %1 von deinen Spielständen - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All &Alles auswählen - + &Deselect All Alles a&bwählen @@ -1708,7 +1789,7 @@ Exportieren als: Spielstand kopieren - + &Export &Exportieren @@ -1784,6 +1865,7 @@ Exportieren als: + Snapmatic Properties Snapmatic Eigenschaften @@ -1908,6 +1990,7 @@ Exportieren als: Nein + Patching of Snapmatic Properties failed because of I/O Error Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen I/O Fehler @@ -1981,7 +2064,7 @@ Exportieren als: Bist du sicher %1 von deine Snapmatic Bilder zu löschen? - + Edi&t Bearbei&ten @@ -1994,7 +2077,7 @@ Exportieren als: &Im Spiel deaktivieren - + &Export &Exportieren @@ -2007,12 +2090,12 @@ Exportieren als: Exportiere als &GTA Snapmatic - + Show &In-game &Im Spiel anzeigen - + Hide &In-game &Im Spiel ausblenden @@ -2045,32 +2128,32 @@ Exportieren als: Exportiere als &Snapmatic... - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All Alles &auswählen - + &Deselect All Alles a&bwählen @@ -2409,16 +2492,16 @@ Exportieren als: - - + + Select Profile Profil auswählen - + - + Select GTA V Folder... Wähle GTA V Ordner... @@ -2427,7 +2510,7 @@ Exportieren als: Wähle GTA V &Ordner... - + Open File... Datei öffnen... @@ -2444,20 +2527,20 @@ Exportieren als: - + &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 diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index be65ee6..cc2c4b6 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -196,7 +196,7 @@ Pictures and Savegames - + Background Colour: <span style="color: %1">%1</span> Background Color: <span style="color: %1">%1</span> @@ -236,28 +236,72 @@ Pictures and Savegames - + + Custom Avatar + Custom Avatar Description in SC, don't use Special Character! + + + + + Custom Picture + Custom Picture Description in SC, don't use Special Character! + + + + 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... - MapPreviewDialog + MapLocationDialog - + Snapmatic Map Viewer - + + + + + &Close + + + + + &Apply + + + + + &Revert + + + + + &Set + + + + + &Done + + + + + X: %1 +Y: %2 + X and Y position + @@ -395,75 +439,104 @@ When you want to use it as Avatar the image will be detached! - Language - + + Interface + + + + + + + + Current: %1 + + + + + Areas + + + + Sync - + Sync is not implemented at current time - + Apply changes - + &OK OK, Cancel, Apply - + Discard changes - + &Cancel OK, Cancel, Apply - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default - + + %1 (Closest to Interface) + Next closest language compared to the Interface + + + + + Auto + Automatic language choice. + + + + %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 @@ -505,13 +578,13 @@ When you want to use it as Avatar the image will be detached! - + Export as &Picture... - + Export as &Snapmatic... @@ -522,7 +595,7 @@ When you want to use it as Avatar the image will be detached! - + &Edit Properties... @@ -722,207 +795,207 @@ Press 1 for Default View - + Loading... - - + + Import... - - - - - - - - - - - - - + + + + + + + + + + + + + Import - + Importable files (%1) - - + + GTA V Export (*.g5e) - - + + Savegames files (SGTA*) - - + + Snapmatic pictures (PGTA*) - + All image files (%1) - - + + All files (**) - - - + + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - - + + Failed to read Snapmatic picture - - + + Failed to read Savegame file - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - - - + + + + Export selected - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - + Export selected... - + Initialising export... Initializing export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - - + + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files - + All profile files (*.g5e SGTA* PGTA*) @@ -1013,37 +1086,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1137,6 +1210,7 @@ Press 1 for Default View + Snapmatic Properties @@ -1244,6 +1318,7 @@ Press 1 for Default View + Patching of Snapmatic Properties failed because of I/O Error @@ -1332,52 +1407,52 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1459,7 +1534,7 @@ Press 1 for Default View - + &About %1 @@ -1571,9 +1646,9 @@ Press 1 for Default View - + - + Select GTA V Folder... @@ -1604,26 +1679,26 @@ Press 1 for Default View - - + + Select Profile - + Open File... - - - - + + + + Open File - + Can't open %1 because of not valid file format diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index f83a274..caa233d 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -331,7 +331,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V - + Background Colour: <span style="color: %1">%1</span> @@ -361,28 +361,79 @@ et les fichiers de sauvegarde de Grand Theft Auto V A&nnuler - + + Custom Avatar + Custom Avatar Description in SC, don't use Special Character! + + + + + Custom Picture + Custom Picture Description in SC, don't use Special Character! + + + + 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 - + Select Colour... + + MapLocationDialog + + + Snapmatic Map Viewer + + + + + &Close + + + + + &Apply + A&ppliquer + + + + &Revert + + + + + &Set + + + + + &Done + + + + + X: %1 +Y: %2 + X and Y position + + + MapPreviewDialog - - Snapmatic Map Viewer - + &Apply + A&ppliquer @@ -520,38 +571,55 @@ When you want to use it as Avatar the image will be detached! - Language Langue - + + Interface + + + + + + + + Current: %1 + + + + + Areas + + + + Sync Synchronisation - + Sync is not implemented at current time La synchronisation n'est pas encore implémentée - + Apply changes - + &OK OK, Cancel, Apply &OK - + Discard changes - + &Cancel OK, Cancel, Apply &Annuler @@ -567,25 +635,37 @@ When you want to use it as Avatar the image will be detached! Système - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default Système - + + %1 (Closest to Interface) + Next closest language compared to the Interface + + + + + Auto + Automatic language choice. + + + + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. @@ -598,15 +678,15 @@ When you want to use it as Avatar the image will be detached! Le changement de langue sera actif au prochain lancement de %1. - + No Profile No Profile, as default Aucun profil - - - + + + Profile: %1 Profil : %1 @@ -773,7 +853,7 @@ When you want to use it as Avatar the image will be detached! - + Export as &Picture... @@ -783,7 +863,7 @@ When you want to use it as Avatar the image will be detached! - + Export as &Snapmatic... @@ -798,7 +878,7 @@ When you want to use it as Avatar the image will be detached! - + &Edit Properties... Modifier les &propriétés... @@ -943,30 +1023,30 @@ Appuyer sur 1 pour le mode par défaut Photos activées : %1 sur %2 - + Loading... Chargement... - - + + Import... Importer... - - - - - - - - - - - - - + + + + + + + + + + + + + Import Importer @@ -975,36 +1055,36 @@ Appuyer sur 1 pour le mode par défaut Fichiers de profil GTA (SGTA* PGTA*) - - + + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - - + + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) - + All image files (%1) - - + + All files (**) Tous les fichiers (**) - - + + Import file %1 of %2 files Importation du fichier %1 sur %2 - + Import failed with... %1 @@ -1013,26 +1093,26 @@ Appuyer sur 1 pour le mode par défaut %1 - - - + + + No valid file is selected Fichier invalide - + Importable files (%1) - - + + Failed to read Snapmatic picture Impossible d'ouvrir la photo Snapmatic - - + + Failed to read Savegame file Impossible de lire le fichier de sauvegarde @@ -1053,78 +1133,78 @@ Appuyer sur 1 pour le mode par défaut Tous les fichiers image (*.jpg *.png) - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*, *.g5e) - + Failed to import the Snapmatic picture, the picture is already in the game Impossible d'importer la photo Snapmatic, un fichier du même nom existe déjà - + Failed to import the Snapmatic picture, can't copy the file into profile Impossible d'importer la photo Snapmatic, impossible de copier le fichier dans le profil - + Failed to import the Savegame, can't copy the file into profile Impossible d'importer la sauvegarde, impossible de copier le fichier dans le profil - + Failed to import the Savegame, no Savegame slot is left Impossible d'importer la sauvegarde, aucun emplacement libre - - - - + + + + Export selected Exporter la sélection - - + + JPG pictures and GTA Snapmatic Images JPG et GTA Snapmatic - - + + JPG pictures only Images JPG seulement - - + + GTA Snapmatic only GTA Snapmatic seulement - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exporter les photos Snapmatic%2<br><br>Les fichiers JPG permettent d'ouvrir les photos avec une visionneuse d'images<br>Les GTA Snapmatic permettent d'importer les photos dans le jeu<br><br>Exporter comme : - + Export selected... Exporter la sélection... - + Initialising export... @@ -1133,7 +1213,7 @@ Appuyer sur 1 pour le mode par défaut Initialisation de l'export... - + Export failed with... %1 @@ -1142,36 +1222,36 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No Snapmatic pictures or Savegames files are selected Aucun fichier de sauvegarde ou photo Snapmatic sélectionné - - - + + + Remove selected Supprimer la sélection - + You really want remove the selected Snapmatic picutres and Savegame files? Supprimer la sélection ? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Impossible de 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) @@ -1262,7 +1342,7 @@ Appuyer sur 1 pour le mode par défaut Supprimer - + &Export &Exporter @@ -1353,32 +1433,32 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + &View &Voir - + &Remove &Supprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner to&ut - + &Deselect All &Déselectionner tout @@ -1388,6 +1468,7 @@ Appuyer sur 1 pour le mode par défaut + Snapmatic Properties Propriétés Snapmatic @@ -1506,6 +1587,7 @@ Appuyer sur 1 pour le mode par défaut Non + Patching of Snapmatic Properties failed because of I/O Error La modification des propriétés Snapmatic a échoué : erreur d'entrée/sortie @@ -1599,17 +1681,17 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + Edi&t Édi&ter - + Show &In-game &Visible en jeu - + Hide &In-game &Invisible en jeu @@ -1618,7 +1700,7 @@ Appuyer sur 1 pour le mode par défaut Modifier les &propriétés... - + &Export &Exporter @@ -1631,32 +1713,32 @@ Appuyer sur 1 pour le mode par défaut Exporter comme &GTA Snapmatic... - + &View &Voir - + &Remove S&upprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner &tout - + &Deselect All &Déselectionner tout @@ -1830,9 +1912,9 @@ Appuyer sur 1 pour le mode par défaut - + - + Select GTA V Folder... Modifier l'emplacement de GTA V... @@ -1875,32 +1957,32 @@ 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 diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index ff96a180195b84d39143a4aaa5634c3c375e8e55..8579c33255d6edb154d0109202a0e5d00730acbe 100644 GIT binary patch delta 2481 zcmY+Fc~n&A8OEQPxwG7RXHgtM1QazW0s;~?F>yl_1XK`&K~Z)Efl)z|_EZP7u`wl} zQfeA8xZsM$4UCasjv&WyXv7e;TAR2;(@>LGO^NH#KGT~&(tqZ6zdPUe-gkN4_dD`j zwe5v!lhqLn;7!2Tq;U8cKwSw8nhyw<0C#slI|o?U0{DgjRxRK^5isc$T9*Lh&0LRH zXx#!V?f`NG2vs`)odLq$-vD`EL1-0#j5Y{8*uA~5t1V3nBqu~X1Xk$tDZ=pRJ z4R~?ga~??FqOi~xhMmd4kiGB?SqHqjQDNb6_&E(1J%pdr@Uk)RyXZrnhu`-MZrNk_ zx5WYD*23RuZ%)6$+%CKx83PBRb%@Dlq$Qb{`4$=X6tUsA81*&8H*uZ+434xUz@rZp z6}th~tN7!QUPe-hJ$VCx1RD-*>;w$)_~_{>AkdDxmw3(?kMDLdTbW&WP&%6qhpD80 z1OT&dDa>he(m~I+sk{!11l)G03g-7S^6jd!SN{Xpd{k@d7Xf2xRGU|S!_>E_zMNGG z%y?JzZ__bg`UmO}t+l}DL+ZH!eT?vldf|DV&v#dsyp;l!&Qq`a-~bTuP+b+o_X8@_ zJF-|N-z5qYe^&2*!!ZGH8N>(Dwo-jCybe%>C=`FE&}E*&;g=PLyDCgLrm!eieJJ}b zkhDSF(h>%w{G>kFJ_?xEtv(}+Wu`*aU4OPX^`Y)r!T(oU)Hk}~8K|Vb?bvGtmR?dn ziDqOLH}$jNK|pr0Ml;*73SL0sJeZvYgVXOLq!Yobdp|=6= zCQae$5rAFP6gM6RURk24NfVjT@tTfoW+wcB=0XKCW;h|}WR}YJh!FNHiX~|i91&A# zD7{OV8`%KNR|{_soJaMa7OLK%$jo+o?kwJ zd_?XepODwdmsGh$XsY4q715-Me1p`GO~RpoJeo5~Q-Og;wDkdWe{rjJ=hGB6pHS5P6CW8m)7cXl;?H0ksaZSJM)@;@+NpJt#Z6G9Gzo}sr zV|3BiU8nTf1;PPnc!XlJn2OC1KU z&Ol&duVL!bMnG;cOnb<|RQQb{VSf(?lVF&AoH=lBHk9n#%^bw!80=^Bsp2$4#fWPZ zkRFuXi(o~=sd@qMClCoTj|hX7t!t0vz&NAqT5$fDAsOq^y5)L!6)L_ zH)+SHQaEIR7``zEh%t*Zw^lQNATe=s7u$J^n5k!OJp;s?t)U!9X-Q&nEJao{R4gta zwRPgkMlg08atfJwO_|A;4sg9RoRbUuDR3tW@oz0|f7rUl#p3J>2UR*efD!D0M z35)YkG&l4;p>W+^z7 zDNaw3CKl9_W`#>56_#a4iGAFcwns|4Z{`PdQu;rck$?~>`{Y`{r(DVdGv_fpM=EU74b>CY>$BL!D<~t~x$g9%l)7UPFuSh+sn*nLQ!i0Y*oHIdT zuB+6ukEtB!BV8Gu%E@;?x_a;-OR_<_bDXK2Stj*$Q9f&Qe$q;Dr66Y@A}^Z=2n~AO1UAZ(lWG&en$VrGU*|eVe7Nxtmx;Ban4fOdz|s# zvMjG=!K8Z2d*>Gce!-SqFH@=QrJgJ=W#?7c~sCX#fBK delta 2393 zcmXAqc~n&A8OEQvbB8;38Ae$|MYJd=0wPie+(Hlnf(W9rxF8CG0TGnNrRNj}V>QuI z&{z~JafxUYG$tsCkw}jqH53DiMq^A;wHlpc8>=ZLE=T)t?q9#T_s;h&&%1nkUl~rm zG;DXX4+gLv&>D0Op9csV0hf0G@ft8V8ZgZU7Tp2-Y=G+oAYdwBk#xH51SUB1neY4Q z+5#+T12TglRvZMJ%n*&(qJ#7x)>5lU9 zL%<*re>~a4Oiti%_CO$hGmdX<2h8#K{P`MS++N(j#&cRc9)4&7(tGiwFp&Xg8kFw? zfkcbWOh-TMK;A`z*Rhc_e95ppwU?Q97)pNoUtsgFt;2A2W+4#$ zh2cMzPl2ev3*OC?-}hS~DbPX3zC!v%p3jaJ3N|ML1$Lo$-!UL;xKJ^k?+26%2bQu- zV|MCH7%3cGXP-<*`-J+?YQPYpQ~tfq5eA*MNS*ON=*+7Uj%VHnk{X4kCL54ELint8 z6fn0>Xc5O!nWaLSg3IKh#Qa#;aLywl%#xP+?3t{vI&mhB0rgH&AFZuB>YWM(s3KrO8xo zv9T?a3WRzYyUMAI`IP9SvLs_}iMAJ0D7`}rn@&4vy<*a&{Xj~P_})M^y30?ZyVCb9oq)Mk_0(cOR?sdK!+w6Lp{8GmUi zIIs+u;%%}Ar2qp@nrZ`?P=@`1>EQEZ;Egg<-Npr+f;*;9>d#U7bkp6R7?@P%WC}Y4 z7*n0R+MPL8Tb$-D_66Qt@3c%<1Jx^XNQEJcma@KBUl3FIOjAaw%#mFm{ zlcs99xGw}q$d^msXHCt0^0t^C0iOW5BFIKZyX3m_RII2&?uek>BuT!UK9j3kldlJb z0V6x*$Jd#8sXuv`%v1~xJ0qJDr5GOdbB|(iA4$i9mER=Lk>@4Fw>*w>d|L^gNQu+R zm8r{X$tgPD&emDHMM-e*f2miLw8zdsNr*E40Tl_zP%=N;zyJ>@*`RVm6P21cp4YDE zbWK-k?ENq1f3KVw<_^SmDV>kjFtQruQVyGFlBj$g$#I&Mq;#)64JfHPXARPsn4>c* zQtAGvl3neqTpy9b4fu`nZT(Z0q*1xoNM&R8D~?V!X^f9*=nrT{fohC!;~4g-_93U+ z*(53Iq#37XJzDZ z>$S6wOL%!iXw3$4V5!y?D9}*2b}8P2cSNrCXdi3rTWaxia7vbxS^UB{9WM12|66ph z z*8Z;LULhS!&36|2clk8Cv*%ZL>B!aj^wK=;g)W`5&pMwg;JnWoDTp1 diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index b28a2bf..f73b9a3 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -293,7 +293,7 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений - + Background Colour: <span style="color: %1">%1</span> Цвет фона: <span style="color: %1">%1</span> @@ -324,29 +324,81 @@ Grand Theft Auto V Snapmatic картинок и ÑохраненийОт&мена - + + Custom Avatar + Custom Avatar Description in SC, don't use Special Character! + + + + + Custom Picture + Custom Picture Description in SC, don't use Special Character! + + + + 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... Выбрать цвет... - MapPreviewDialog + MapLocationDialog - + Snapmatic Map Viewer ПроÑмотрщик карты Snapmatic + + X: %1 +Y: %2 + X and Y position + X: %1 +Y: %2 + + + + &Close + &Закрыть + + + + &Apply + &Применить + + + + &Revert + + + + + &Set + + + + + &Done + + + + + X: %1 +Y: %2 + X and Y position + X: %1 +Y: %2 + OptionsDialog @@ -483,38 +535,55 @@ When you want to use it as Avatar the image will be detached! - Language Язык - + + Interface + + + + + + + + Current: %1 + + + + + Areas + + + + Sync Sync - + Sync is not implemented at current time Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ð¾ÐºÐ° ещё не реализована - + Apply changes Применить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ - + &OK OK, Cancel, Apply &ОК - + Discard changes Отвергнуть Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ - + &Cancel OK, Cancel, Apply От&мена @@ -531,25 +600,37 @@ When you want to use it as Avatar the image will be detached! %1 (%2 еÑли имеетÑÑ) - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default СиÑтема - + + %1 (Closest to Interface) + Next closest language compared to the Interface + + + + + Auto + Automatic language choice. + + + + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. Ð”Ñ€ÑƒÐ³Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° будет загружена поÑле перезапуÑка %1. @@ -562,15 +643,15 @@ When you want to use it as Avatar the image will be detached! Язык изменитÑÑ Ð¿Ð¾Ñле перезапуÑка %1. - + No Profile No Profile, as default Ðет Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - - - + + + Profile: %1 Профиль: %1 @@ -651,7 +732,7 @@ When you want to use it as Avatar the image will be detached! - + Export as &Picture... ЭкÑпортировать как &картинку... @@ -661,7 +742,7 @@ When you want to use it as Avatar the image will be detached! - + Export as &Snapmatic... ЭкÑпортировать как &Snapmatic... @@ -676,7 +757,7 @@ When you want to use it as Avatar the image will be detached! - + &Edit Properties... &Изменить ÑвойÑтва... @@ -917,30 +998,30 @@ Press 1 for Default View Закрыть профиль - + Loading... Загрузка... - - + + Import... Импортировать... - - - - - - - - - - - - - + + + + + + + + + + + + + Import Импортировать @@ -949,31 +1030,31 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (SGTA* PGTA*) - - + + Savegames files (SGTA*) Файлы ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ (SGTA*) - - + + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) - - + + All files (**) Ð’Ñе файлы (**) - - + + Import file %1 of %2 files ИмпортируютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ %1 из %2 - + Import failed with... %1 @@ -982,14 +1063,14 @@ Press 1 for Default View %1 - - + + Failed to read Snapmatic picture Ðе удалоÑÑŒ загрузить картинку Snapmatic - - + + Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ @@ -998,9 +1079,9 @@ Press 1 for Default View Ðе получилоÑÑŒ импортировать %1 из-за неправильного формата файла - - - + + + No valid file is selected Выбранный файл неверен @@ -1018,93 +1099,93 @@ Press 1 for Default View Ð’Ñе Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (*.jpg *.png) - + Importable files (%1) Файлы Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° (%1) - + All image files (%1) Ð’Ñе файлы изображений (%1) - + Can't import %1 because file can't be parsed properly Ðе получилоÑÑŒ импортировать %1, файл не может быть правильно обработан - + Can't import %1 because file format can't be detected Ðе получилоÑÑŒ импортировать %1, не удалоÑÑŒ определить формат файла - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе удалоÑÑŒ импортировать картинку Snapmatic, название не начинаетÑÑ Ñ PGTA или не заканчиваетÑÑ Ñ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе удалоÑÑŒ импортировать картинку Snapmatic, картинка уже в игре - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе удалоÑÑŒ импортировать картинку Snapmatic, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, can't copy the file into profile Ðе удалоÑÑŒ импортировать Ñохранение, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, no Savegame slot is left Ðе удалоÑÑŒ импортировать Ñохранение, нет пуÑтых Ñчеек под ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + JPG pictures and GTA Snapmatic Картинки JPG и GTA Snapmatic - - + + JPG pictures only Только картинки JPG - - + + GTA Snapmatic only Только GTA Snapmatic - + Initialising export... Подготовка к ÑкÑпорту... - - + + No Snapmatic pictures or Savegames files are selected Ðе выделены ни один Snapmatic или Ñохранение - - - + + + Remove selected СнÑть выделение - + You really want remove the selected Snapmatic picutres and Savegame files? Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Ðе удалоÑÑŒ удалить полноÑтью выбранные картинки Snapmatic и/или файлы Ñохранений @@ -1125,20 +1206,20 @@ Press 1 for Default View Ðе получилоÑÑŒ имортировать копию ÑохранениÑ, потому что не оÑталоÑÑŒ Ñвободных под них Ñлотов - - - - + + + + Export selected ЭкÑпортировать выделенное - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1ЭÑкпортировать картинки Snapmatic%2<br><br>Картинки JPG можно открыть любым проÑмотрщиком<br>Картинки формата GTA Snapmatic можно Ñнова импортировать в игру<br><br>ЭкÑпортировать как: - + Export selected... Экпортировать выделенное... @@ -1147,7 +1228,7 @@ Press 1 for Default View Подготавливаю ÑÑкпорт... - + Export failed with... %1 @@ -1163,13 +1244,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) @@ -1319,32 +1400,32 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить Ñохранение %1 - + &View &ПроÑмотр - + &Remove &Удалить - + &Select &Выбрать - + &Deselect Сн&Ñть выбор - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1354,7 +1435,7 @@ Press 1 for Default View Копировать Ñохранение - + &Export &ЭкÑпортировать @@ -1414,6 +1495,7 @@ Press 1 for Default View + Snapmatic Properties СвойÑтва Snapmatic @@ -1526,6 +1608,7 @@ Press 1 for Default View Ðет + Patching of Snapmatic Properties failed because of I/O Error Ðе удалоÑÑŒ измененить ÑвойÑтва Snapmatic из-за проблемы ввода/вывода @@ -1609,17 +1692,17 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить %1 из колелкции картинок Snapmatic - + Edi&t &Правка - + Show &In-game Показывать в &игре - + Hide &In-game Ск&рыть в игре @@ -1628,7 +1711,7 @@ Press 1 for Default View &Изменить ÑвойÑтва... - + &Export &ЭкÑпорт @@ -1641,32 +1724,32 @@ Press 1 for Default View ЭкÑ&портировать как GTA Snapmatic... - + &View По&казать - + &Remove У&далить - + &Select &Выделить - + &Deselect Сн&Ñть выделение - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1887,16 +1970,16 @@ Press 1 for Default View - - + + Select Profile Выбор Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - + - + Select GTA V Folder... Выбрать папку GTA V... @@ -1909,25 +1992,25 @@ Press 1 for Default View - + &About %1 &О программе %1 - + Open File... Открыть файл... - - - - + + + + Open File Открыть файл - + Can't open %1 because of not valid file format Ðе удалоÑÑŒ открыть %1 из-за неверного формата файла From f9eee757575dd8ce97a0882a5fdaaae923cf61b8 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 22 Nov 2017 14:59:40 +0100 Subject: [PATCH 016/359] add JSON Editor + Interface improvements --- .travis.yml | 8 +- CrewDatabase.cpp | 11 + CrewDatabase.h | 1 + JsonEditorDialog.cpp | 164 ++++++++++++++ JsonEditorDialog.h | 56 +++++ JsonEditorDialog.ui | 124 +++++++++++ MapLocationDialog.cpp | 1 + MapLocationDialog.h | 2 +- OptionsDialog.cpp | 86 +++++++- OptionsDialog.h | 3 + OptionsDialog.ui | 73 ++++++- PictureDialog.cpp | 117 +++++----- PictureDialog.h | 12 +- ProfileInterface.cpp | 57 +++-- ProfileInterface.h | 3 +- SnapmaticEditor.cpp | 13 +- SnapmaticPicture.cpp | 95 ++++++-- SnapmaticPicture.h | 3 +- SnapmaticWidget.cpp | 48 +++- SnapmaticWidget.h | 2 + anpro/JSHighlighter.cpp | 72 ++++++ anpro/JSHighlighter.h | 56 +++++ config.h | 2 +- gta5view.pro | 7 +- lang/gta5sync_no.ts | 473 ++++++++++++++++++++++++++-------------- main.cpp | 38 +++- res/app.rc | 4 +- res/gta5sync_de.qm | Bin 33883 -> 35652 bytes res/gta5sync_de.ts | 380 ++++++++++++++++++++------------ res/gta5sync_en_US.qm | Bin 18413 -> 18239 bytes res/gta5sync_en_US.ts | 364 +++++++++++++++++++------------ res/gta5sync_fr.qm | Bin 26687 -> 26755 bytes res/gta5sync_fr.ts | 368 +++++++++++++++++++------------ res/gta5sync_ru.qm | Bin 32539 -> 32511 bytes res/gta5sync_ru.ts | 366 +++++++++++++++++++------------ 35 files changed, 2153 insertions(+), 856 deletions(-) create mode 100644 JsonEditorDialog.cpp create mode 100644 JsonEditorDialog.h create mode 100644 JsonEditorDialog.ui create mode 100644 anpro/JSHighlighter.cpp create mode 100644 anpro/JSHighlighter.h diff --git a/.travis.yml b/.travis.yml index c1e15cf..7969f5b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,14 +32,14 @@ before_script: script: - cd qt5 - - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev3\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev4\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev3 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev4 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package - cd .. - cd qt4 - - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev3\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev4\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev3 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev4 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package - cd .. deploy: diff --git a/CrewDatabase.cpp b/CrewDatabase.cpp index 69e4b06..73d9bed 100755 --- a/CrewDatabase.cpp +++ b/CrewDatabase.cpp @@ -92,6 +92,17 @@ QStringList CrewDatabase::getCompatibleCrews_p() return crewDB->childKeys(); } +QString CrewDatabase::getCrewName(QString crewID) +{ + QMutexLocker locker(&mutex); +#ifdef GTA5SYNC_DEBUG + qDebug() << "getCrewName" << crewID; +#endif + QString crewStr = crewDB->value(crewID, crewID).toString(); + if (crewID == "0") crewStr = tr("No Crew", ""); + return crewStr; +} + QString CrewDatabase::getCrewName(int crewID) { QMutexLocker locker(&mutex); diff --git a/CrewDatabase.h b/CrewDatabase.h index b5c7ee0..0bb9933 100755 --- a/CrewDatabase.h +++ b/CrewDatabase.h @@ -29,6 +29,7 @@ class CrewDatabase : public QObject Q_OBJECT public: explicit CrewDatabase(QObject *parent = 0); + QString getCrewName(QString crewID); QString getCrewName(int crewID); QStringList getCompatibleCrews(); QStringList getCrews(); diff --git a/JsonEditorDialog.cpp b/JsonEditorDialog.cpp new file mode 100644 index 0000000..ddf72bd --- /dev/null +++ b/JsonEditorDialog.cpp @@ -0,0 +1,164 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "JsonEditorDialog.h" +#include "ui_JsonEditorDialog.h" +#include "SnapmaticEditor.h" +#include "AppEnv.h" +#include +#include +#include + +#if QT_VERSION >= 0x050200 +#include +#include +#endif + +JsonEditorDialog::JsonEditorDialog(SnapmaticPicture *picture, QWidget *parent) : + QDialog(parent), smpic(picture), + ui(new Ui::JsonEditorDialog) +{ + // Set Window Flags + setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowMinMaxButtonsHint); + + ui->setupUi(this); + if (QIcon::hasThemeIcon("dialog-close")) + { + ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); + } + jsonCode = picture->getJsonStr(); + +#if QT_VERSION >= 0x050200 + ui->txtJSON->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont)); +#endif + QFontMetrics fm(ui->txtJSON->font()); + ui->txtJSON->setTabStopWidth(fm.width(" ")); + + QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonCode.toUtf8()); + ui->txtJSON->setStyleSheet("QPlainTextEdit{background-color: rgb(46, 47, 48); color: rgb(238, 231, 172);}"); + ui->txtJSON->setPlainText(QString::fromUtf8(jsonDocument.toJson(QJsonDocument::Indented)).trimmed()); + jsonHl = new JSHighlighter(ui->txtJSON->document()); + + // DPI calculation + qreal screenRatio = AppEnv::screenRatio(); + ui->hlButtons->setContentsMargins(9 * screenRatio, 0, 9 * screenRatio, 0); + if (screenRatio > 1) + { + ui->lineJSON->setMinimumHeight(qRound(1 * screenRatio)); + ui->lineJSON->setMaximumHeight(qRound(1 * screenRatio)); + } + resize(450 * screenRatio, 550 * screenRatio); +} + +JsonEditorDialog::~JsonEditorDialog() +{ + delete jsonHl; + delete ui; +} + +void JsonEditorDialog::closeEvent(QCloseEvent *ev) +{ + QString jsonPatched = QString(ui->txtJSON->toPlainText()).replace("\t", " "); + QJsonDocument jsonNew = QJsonDocument::fromJson(jsonPatched.toUtf8()); + 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) + { + 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()) + { + ev->accept(); + } + else + { + ev->ignore(); + } + return; + } + else if (button == QMessageBox::No) + { + ev->accept(); + return; + } + else + { + ev->ignore(); + return; + } + } +} + +bool JsonEditorDialog::saveJsonContent() +{ + QString jsonPatched = QString(ui->txtJSON->toPlainText()).replace("\t", " "); + QJsonDocument jsonNew = QJsonDocument::fromJson(jsonPatched.toUtf8()); + 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) + { + QString currentFilePath = smpic->getPictureFilePath(); + QString originalFilePath = smpic->getOriginalPictureFilePath(); + QString backupFileName = originalFilePath % ".bak"; + if (!QFile::exists(backupFileName)) + { + QFile::copy(currentFilePath, backupFileName); + } + smpic->setJsonStr(newCode, true); + if (!smpic->isJsonOk()) + { + QMessageBox::warning(this, SnapmaticEditor::tr("Snapmatic Properties"), SnapmaticEditor::tr("Patching of Snapmatic Properties failed because of JSON Error")); + smpic->setJsonStr(originalCode, true); + return false; + } + 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; + } + jsonCode = newCode; + smpic->emitUpdate(); + return true; + } + return true; + } + else + { + QMessageBox::warning(this, SnapmaticEditor::tr("Snapmatic Properties"), SnapmaticEditor::tr("Patching of Snapmatic Properties failed because of JSON Error")); + return false; + } +} + +void JsonEditorDialog::on_cmdClose_clicked() +{ + this->close(); +} + +void JsonEditorDialog::on_cmdSave_clicked() +{ + if (saveJsonContent()) + { + this->close(); + } +} diff --git a/JsonEditorDialog.h b/JsonEditorDialog.h new file mode 100644 index 0000000..b881088 --- /dev/null +++ b/JsonEditorDialog.h @@ -0,0 +1,56 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef JSONEDITORDIALOG_H +#define JSONEDITORDIALOG_H + +#include "SnapmaticPicture.h" +#include "JSHighlighter.h" +#include + +namespace Ui { +class JsonEditorDialog; +} + +class JsonEditorDialog : public QDialog +{ + Q_OBJECT + +public: + explicit JsonEditorDialog(SnapmaticPicture *picture, QWidget *parent = 0); + bool saveJsonContent(); + ~JsonEditorDialog(); + +protected: + void closeEvent(QCloseEvent *ev); + +private slots: + void on_cmdClose_clicked(); + void on_cmdSave_clicked(); + +signals: + void codeUpdated(QString jsonCode); + +private: + QString jsonCode; + JSHighlighter *jsonHl; + SnapmaticPicture *smpic; + Ui::JsonEditorDialog *ui; +}; + +#endif // JSONEDITORDIALOG_H diff --git a/JsonEditorDialog.ui b/JsonEditorDialog.ui new file mode 100644 index 0000000..3221c12 --- /dev/null +++ b/JsonEditorDialog.ui @@ -0,0 +1,124 @@ + + + JsonEditorDialog + + + + 0 + 0 + 550 + 450 + + + + Snapmatic JSON Editor + + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + QFrame[frameShape="4"] +{ + color: black; +} + + + QFrame::Plain + + + 1 + + + Qt::Horizontal + + + + + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + &Save + + + + + + + &Close + + + + + + + + + + diff --git a/MapLocationDialog.cpp b/MapLocationDialog.cpp index 03c2a45..64f7271 100644 --- a/MapLocationDialog.cpp +++ b/MapLocationDialog.cpp @@ -34,6 +34,7 @@ MapLocationDialog::MapLocationDialog(double x, double y, QWidget *parent) : ui->cmdApply->setVisible(false); ui->cmdRevert->setVisible(false); ui->cmdDone->setCursor(Qt::ArrowCursor); + ui->cmdClose->setCursor(Qt::ArrowCursor); // DPI calculation qreal screenRatio = AppEnv::screenRatio(); diff --git a/MapLocationDialog.h b/MapLocationDialog.h index 5d0793a..1abfa93 100644 --- a/MapLocationDialog.h +++ b/MapLocationDialog.h @@ -51,13 +51,13 @@ private slots: void on_cmdClose_clicked(); private: - Ui::MapLocationDialog *ui; double xpos_old; double ypos_old; double xpos_new; double ypos_new; bool propUpdate; bool changeMode; + Ui::MapLocationDialog *ui; }; #endif // MAPLOCATIONDIALOG_H diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp index a9d8fea..a7b9ce7 100755 --- a/OptionsDialog.cpp +++ b/OptionsDialog.cpp @@ -25,6 +25,7 @@ #include "config.h" #include #include +#include #include #include #include @@ -72,18 +73,19 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel")); } - // DPI calculation - qreal screenRatio = AppEnv::screenRatio(); - resize(435 * screenRatio, 405 * screenRatio); - setupTreeWidget(); setupLanguageBox(); setupRadioButtons(); setupDefaultProfile(); setupPictureSettings(); setupCustomGTAFolder(); + setupInterfaceSettings(); setupSnapmaticPictureViewer(); + // DPI calculation + qreal screenRatio = AppEnv::screenRatio(); + resize(435 * screenRatio, 405 * screenRatio); + #ifdef GTA5SYNC_DISABLED ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabSync)); #endif @@ -239,6 +241,61 @@ void OptionsDialog::setupRadioButtons() } } +void OptionsDialog::setupInterfaceSettings() +{ + settings->beginGroup("Startup"); + bool alwaysUseMessageFont = settings->value("AlwaysUseMessageFont", false).toBool(); + ui->cbAlwaysUseMessageFont->setChecked(alwaysUseMessageFont); +#ifdef GTA5SYNC_WIN + if (QSysInfo::windowsVersion() >= 0x0080) + { + ui->gbFont->setVisible(false); + ui->cbAlwaysUseMessageFont->setVisible(false); + } +#else + ui->gbFont->setVisible(false); + ui->cbAlwaysUseMessageFont->setVisible(false); +#endif + QString currentStyle = qApp->style()->objectName(); + QString appStyle = settings->value("AppStyle", currentStyle).toString(); + bool customStyle = settings->value("CustomStyle", false).toBool(); + const QStringList availableStyles = QStyleFactory::keys(); + ui->cbStyleList->addItems(availableStyles); + if (availableStyles.contains(appStyle, Qt::CaseInsensitive)) + { + // use 'for' for select to be sure it's case insensitive + int currentIndex = 0; + for (QString currentStyleFF : availableStyles) + { + if (currentStyleFF.toLower() == appStyle.toLower()) + { + ui->cbStyleList->setCurrentIndex(currentIndex); + } + currentIndex++; + } + } + else + { + if (availableStyles.contains(currentStyle, Qt::CaseInsensitive)) + { + int currentIndex = 0; + for (QString currentStyleFF : availableStyles) + { + if (currentStyleFF.toLower() == currentStyle.toLower()) + { + ui->cbStyleList->setCurrentIndex(currentIndex); + } + currentIndex++; + } + } + } + if (customStyle) + { + ui->cbDefaultStyle->setChecked(false); + } + settings->endGroup(); +} + void OptionsDialog::on_cmdOK_clicked() { applySettings(); @@ -310,6 +367,22 @@ void OptionsDialog::applySettings() settings->setValue("force", forceCustomFolder); settings->endGroup(); + bool defaultStyle = ui->cbDefaultStyle->isChecked(); + settings->beginGroup("Startup"); + if (!defaultStyle) + { + QString newStyle = ui->cbStyleList->currentText(); + settings->setValue("CustomStyle", true); + settings->setValue("AppStyle", newStyle); + qApp->setStyle(QStyleFactory::create(newStyle)); + } + else + { + settings->setValue("CustomStyle", false); + } + settings->setValue("AlwaysUseMessageFont", ui->cbAlwaysUseMessageFont->isChecked()); + settings->endGroup(); + #if QT_VERSION >= 0x050000 bool languageChanged = ui->cbLanguage->currentData().toString() != currentLanguage; bool languageAreaChanged = ui->cbAreaLanguage->currentData().toString() != currentAreaLanguage; @@ -494,3 +567,8 @@ void OptionsDialog::on_cmdExploreFolder_clicked() ui->txtFolder->setText(GTAV_Folder); } } + +void OptionsDialog::on_cbDefaultStyle_toggled(bool checked) +{ + ui->cbStyleList->setDisabled(checked); +} diff --git a/OptionsDialog.h b/OptionsDialog.h index 18715b6..03d2e81 100755 --- a/OptionsDialog.h +++ b/OptionsDialog.h @@ -46,6 +46,7 @@ private slots: void on_hsPicQuality_valueChanged(int value); void on_cbIgnoreAspectRatio_toggled(bool checked); void on_cmdExploreFolder_clicked(); + void on_cbDefaultStyle_toggled(bool checked); signals: void settingsApplied(int contentMode, bool languageChanged); @@ -61,6 +62,7 @@ private: QString defaultProfile; QString percentString; QSettings *settings; + bool withoutPlayers; bool currentFFolder; int contentMode; int customQuality; @@ -73,6 +75,7 @@ private: void setupDefaultProfile(); void setupPictureSettings(); void setupCustomGTAFolder(); + void setupInterfaceSettings(); void setupSnapmaticPictureViewer(); void applySettings(); }; diff --git a/OptionsDialog.ui b/OptionsDialog.ui index c23d9ba..1a70c0f 100755 --- a/OptionsDialog.ui +++ b/OptionsDialog.ui @@ -314,7 +314,7 @@ - + Qt::Vertical @@ -382,15 +382,15 @@ - + - Language + Interface - + - Interface + Language for Interface @@ -409,9 +409,9 @@ - Areas + Language for Areas - + @@ -425,6 +425,65 @@ + + + + Style + + + + + + Use Default Style (Restart) + + + true + + + + + + + + + Style: + + + + + + + false + + + + 0 + 0 + + + + + + + + + + + + + Font + + + + + + Always use Message Font (Windows 2003 and earlier) + + + + + + diff --git a/PictureDialog.cpp b/PictureDialog.cpp index d8c1646..1e8837c 100755 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -22,6 +22,7 @@ #include "ui_PictureDialog.h" #include "SidebarGenerator.h" #include "MapLocationDialog.h" +#include "JsonEditorDialog.h" #include "SnapmaticEditor.h" #include "StandardPaths.h" #include "PictureExport.h" @@ -62,6 +63,17 @@ #include #include +// Macros for better Overview + RAM +#define locX QString::number(picture->getSnapmaticProperties().location.x) +#define locY QString::number(picture->getSnapmaticProperties().location.y) +#define locZ QString::number(picture->getSnapmaticProperties().location.z) +#define crewID QString::number(picture->getSnapmaticProperties().crewID) +#define picArea picture->getSnapmaticProperties().location.area +#define picPath picture->getPictureFilePath() +#define picTitl StringParser::escapeString(picture->getPictureTitle()) +#define plyrsList picture->getSnapmaticProperties().playersList +#define created picture->getSnapmaticProperties().createdDateTime.toString(Qt::DefaultLocaleShortDate) + PictureDialog::PictureDialog(ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent) : QDialog(parent), profileDB(profileDB), crewDB(crewDB), ui(new Ui::PictureDialog) @@ -102,22 +114,13 @@ void PictureDialog::setupPictureDialog(bool withDatabase_) windowTitleStr = this->windowTitle(); jsonDrawString = ui->labJSON->text(); ui->cmdManage->setEnabled(false); - plyrsList = QStringList(); fullscreenWidget = nullptr; rqFullscreen = false; previewMode = false; naviEnabled = false; indexed = false; - picArea = ""; - picTitl = ""; - picPath = ""; - created = ""; - crewStr = ""; - crewID = ""; - locX = ""; - locY = ""; - locZ = ""; smpic = nullptr; + crewStr = ""; // With datebase withDatabase = withDatabase_; @@ -145,9 +148,11 @@ void PictureDialog::setupPictureDialog(bool withDatabase_) jpegExportAction = manageMenu->addAction(tr("Export as &Picture..."), this, SLOT(exportSnapmaticPicture())); pgtaExportAction = manageMenu->addAction(tr("Export as &Snapmatic..."), this, SLOT(copySnapmaticPicture())); manageMenuSep1 = manageMenu->addSeparator(); - openViewerAction = manageMenu->addAction(tr("Open &Map View..."), this, SLOT(openPreviewMap())); - openViewerAction->setShortcut(Qt::Key_M); propEditorAction = manageMenu->addAction(tr("&Edit Properties..."), this, SLOT(editSnapmaticProperties())); + manageMenuSep2 = manageMenu->addSeparator(); + openViewerAction = manageMenu->addAction(tr("Open &Map Viewer..."), this, SLOT(openPreviewMap())); + openViewerAction->setShortcut(Qt::Key_M); + jsonEditorAction = manageMenu->addAction(tr("Open &JSON Editor..."), this, SLOT(editSnapmaticRawJson())); ui->cmdManage->setMenu(manageMenu); // Global map @@ -176,9 +181,11 @@ PictureDialog::~PictureDialog() { delete propEditorAction; delete openViewerAction; + delete jsonEditorAction; delete jpegExportAction; delete pgtaExportAction; delete manageMenuSep1; + delete manageMenuSep2; delete manageMenu; delete ui; } @@ -426,7 +433,6 @@ void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, snapmaticPicture = QImage(); indexed = _indexed; index = _index; - picPath = picture->getPictureFilePath(); smpic = picture; if (!readOk) { @@ -441,23 +447,14 @@ void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, } if (picture->isJsonOk()) { - locX = QString::number(picture->getSnapmaticProperties().location.x); - locY = QString::number(picture->getSnapmaticProperties().location.y); - locZ = QString::number(picture->getSnapmaticProperties().location.z); if (withDatabase) { - crewID = QString::number(picture->getSnapmaticProperties().crewID); - crewStr = crewDB->getCrewName(picture->getSnapmaticProperties().crewID); + crewStr = crewDB->getCrewName(crewID); } else { - crewID = QString::number(picture->getSnapmaticProperties().crewID); - crewStr = QString::number(picture->getSnapmaticProperties().crewID); + crewStr = crewID; } - created = picture->getSnapmaticProperties().createdDateTime.toString(Qt::DefaultLocaleShortDate); - plyrsList = picture->getSnapmaticProperties().playersList; - picTitl = StringParser::escapeString(picture->getPictureTitle()); - picArea = picture->getSnapmaticProperties().location.area; if (globalMap.contains(picArea)) { picAreaStr = globalMap[picArea]; @@ -565,15 +562,18 @@ void PictureDialog::renderPicture() void PictureDialog::crewNameUpdated() { - if (withDatabase && crewID == crewStr) + SnapmaticPicture *picture = smpic; // used by macro + QString crewIDStr = crewID; + if (withDatabase && crewIDStr == crewStr) { - crewStr = crewDB->getCrewName(crewID.toInt()); + crewStr = crewDB->getCrewName(crewIDStr); ui->labJSON->setText(jsonDrawString.arg(locX, locY, locZ, generatePlayersString(), generateCrewString(), picTitl, picAreaStr, created)); } } void PictureDialog::playerNameUpdated() { + SnapmaticPicture *picture = smpic; // used by macro if (plyrsList.count() >= 1) { ui->labJSON->setText(jsonDrawString.arg(locX, locY, locZ, generatePlayersString(), generateCrewString(), picTitl, picAreaStr, created)); @@ -582,19 +582,23 @@ void PictureDialog::playerNameUpdated() QString PictureDialog::generateCrewString() { - if (crewID != "0" && !crewID.isEmpty()) + SnapmaticPicture *picture = smpic; // used by macro + QString crewIDStr = crewID; // save operation time + if (crewIDStr != "0" && !crewIDStr.isEmpty()) { - return QString("
" % crewStr % ""); + return QString("" % crewStr % ""); } return tr("No Crew"); } QString PictureDialog::generatePlayersString() { + SnapmaticPicture *picture = smpic; // used by macro + const QStringList playersList = plyrsList; // save operation time QString plyrsStr; - if (plyrsList.length() >= 1) + if (playersList.length() >= 1) { - for (QString player : plyrsList) + for (QString player : playersList) { QString playerName; if (withDatabase) @@ -691,14 +695,15 @@ int PictureDialog::getIndex() void PictureDialog::openPreviewMap() { + SnapmaticPicture *picture = smpic; MapLocationDialog *mapLocDialog; if (rqFullscreen && fullscreenWidget != nullptr) { - mapLocDialog = new MapLocationDialog(smpic->getSnapmaticProperties().location.x, smpic->getSnapmaticProperties().location.y, fullscreenWidget); + mapLocDialog = new MapLocationDialog(picture->getSnapmaticProperties().location.x, picture->getSnapmaticProperties().location.y, fullscreenWidget); } else { - mapLocDialog = new MapLocationDialog(smpic->getSnapmaticProperties().location.x, smpic->getSnapmaticProperties().location.y, this); + mapLocDialog = new MapLocationDialog(picture->getSnapmaticProperties().location.x, picture->getSnapmaticProperties().location.y, this); } mapLocDialog->setWindowIcon(windowIcon()); mapLocDialog->setModal(true); @@ -707,25 +712,25 @@ void PictureDialog::openPreviewMap() if (mapLocDialog->propUpdated()) { // Update Snapmatic Properties - SnapmaticProperties localSpJson = smpic->getSnapmaticProperties(); + SnapmaticProperties localSpJson = picture->getSnapmaticProperties(); localSpJson.location.x = mapLocDialog->getXpos(); localSpJson.location.y = mapLocDialog->getYpos(); localSpJson.location.z = 0; // Update Snapmatic Picture - QString currentFilePath = smpic->getPictureFilePath(); - QString originalFilePath = smpic->getOriginalPictureFilePath(); + QString currentFilePath = picture->getPictureFilePath(); + QString originalFilePath = picture->getOriginalPictureFilePath(); QString backupFileName = originalFilePath % ".bak"; if (!QFile::exists(backupFileName)) { QFile::copy(currentFilePath, backupFileName); } - SnapmaticProperties fallbackProperties = smpic->getSnapmaticProperties(); - smpic->setSnapmaticProperties(localSpJson); - if (!smpic->exportPicture(currentFilePath)) + SnapmaticProperties fallbackProperties = picture->getSnapmaticProperties(); + picture->setSnapmaticProperties(localSpJson); + if (!picture->exportPicture(currentFilePath)) { QMessageBox::warning(this, SnapmaticEditor::tr("Snapmatic Properties"), SnapmaticEditor::tr("Patching of Snapmatic Properties failed because of I/O Error")); - smpic->setSnapmaticProperties(fallbackProperties); + picture->setSnapmaticProperties(fallbackProperties); } else { @@ -737,6 +742,7 @@ void PictureDialog::openPreviewMap() void PictureDialog::editSnapmaticProperties() { + SnapmaticPicture *picture = smpic; SnapmaticEditor *snapmaticEditor; if (rqFullscreen && fullscreenWidget != nullptr) { @@ -746,29 +752,42 @@ void PictureDialog::editSnapmaticProperties() { snapmaticEditor = new SnapmaticEditor(crewDB, this); } - snapmaticEditor->setWindowFlags(snapmaticEditor->windowFlags()^Qt::WindowContextHelpButtonHint); snapmaticEditor->setWindowIcon(windowIcon()); - snapmaticEditor->setSnapmaticPicture(smpic); + snapmaticEditor->setSnapmaticPicture(picture); snapmaticEditor->setModal(true); + snapmaticEditor->show(); snapmaticEditor->exec(); delete snapmaticEditor; } +void PictureDialog::editSnapmaticRawJson() +{ + SnapmaticPicture *picture = smpic; + JsonEditorDialog *jsonEditor = new JsonEditorDialog(picture, this); + jsonEditor->setModal(true); + jsonEditor->show(); + jsonEditor->exec(); + delete jsonEditor; +} + void PictureDialog::updated() { + SnapmaticPicture *picture = smpic; // used by macro if (withDatabase) { - crewID = QString::number(smpic->getSnapmaticProperties().crewID); - crewStr = crewDB->getCrewName(smpic->getSnapmaticProperties().crewID); + crewStr = crewDB->getCrewName(crewID); } else { - crewID = QString::number(smpic->getSnapmaticProperties().crewID); - crewStr = QString::number(smpic->getSnapmaticProperties().crewID); + crewStr = crewID; + } + if (globalMap.contains(picArea)) + { + picAreaStr = globalMap[picArea]; + } + else + { + picAreaStr = picArea; } - locX = QString::number(smpic->getSnapmaticProperties().location.x); - locY = QString::number(smpic->getSnapmaticProperties().location.y); - locZ = QString::number(smpic->getSnapmaticProperties().location.z); - picTitl = StringParser::escapeString(smpic->getPictureTitle()); ui->labJSON->setText(jsonDrawString.arg(locX, locY, locZ, generatePlayersString(), generateCrewString(), picTitl, picAreaStr, created)); } diff --git a/PictureDialog.h b/PictureDialog.h index 6a02338..89d154e 100755 --- a/PictureDialog.h +++ b/PictureDialog.h @@ -69,6 +69,7 @@ private slots: void nextPictureRequestedSlot(); void previousPictureRequestedSlot(); void editSnapmaticProperties(); + void editSnapmaticRawJson(); void renderOverlayPicture(); void renderPicture(); void openPreviewMap(); @@ -100,23 +101,16 @@ private: QAction *pgtaExportAction; QAction *propEditorAction; QAction *openViewerAction; + QAction *jsonEditorAction; QAction *manageMenuSep1; + QAction *manageMenuSep2; QImage avatarAreaPicture; QImage snapmaticPicture; QImage overlayTempImage; QString jsonDrawString; QString windowTitleStr; - QStringList plyrsList; QString picAreaStr; - QString picArea; - QString picTitl; - QString picPath; - QString created; QString crewStr; - QString crewID; - QString locX; - QString locY; - QString locZ; bool overlayEnabled; bool withDatabase; bool rqFullscreen; diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 88dbcdd..50ea5c5 100755 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -54,6 +54,9 @@ #include #include +#define importTimeFormat "HHmmss" +#define findRetryLimit 500 + ProfileInterface::ProfileInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent) : QWidget(parent), profileDB(profileDB), crewDB(crewDB), threadDB(threadDB), ui(new Ui::ProfileInterface) @@ -446,7 +449,9 @@ fileDialogPreOpen: //Work? if (selectedFiles.length() == 1) { QString selectedFile = selectedFiles.at(0); - if (!importFile(selectedFile, true)) goto fileDialogPreOpen; //Work? + QDateTime importDateTime = QDateTime::currentDateTime(); + int currentTime = importDateTime.toString(importTimeFormat).toInt(); + if (!importFile(selectedFile, importDateTime, ¤tTime, true)) goto fileDialogPreOpen; //Work? } else if (selectedFiles.length() > 1) { @@ -486,13 +491,14 @@ void ProfileInterface::importFilesProgress(QStringList selectedFiles) pbBar.at(0)->setTextVisible(false); pbDialog.show(); - QTime t; - t.start(); + QDateTime importDateTime = QDateTime::currentDateTime(); + int currentTime = importDateTime.time().toString(importTimeFormat).toInt(); for (QString selectedFile : selectedFiles) { pbDialog.setValue(overallId); pbDialog.setLabelText(tr("Import file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId))); - if (!importFile(selectedFile, false)) + importDateTime = QDateTime::currentDateTime(); + if (!importFile(selectedFile, importDateTime, ¤tTime, false)) { failedFiles << QFileInfo(selectedFile).fileName(); } @@ -510,7 +516,7 @@ void ProfileInterface::importFilesProgress(QStringList selectedFiles) } } -bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) +bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime, int *currentTime, bool notMultiple) { QString selectedFileName = QFileInfo(selectedFile).fileName(); if (QFile::exists(selectedFile)) @@ -590,7 +596,7 @@ bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) diffWidth = diffWidth / 2; } snapmaticPainter.drawImage(145 + diffWidth, 66 + diffHeight, snapmaticImage); - customImageTitle = "Custom Avatar"; + customImageTitle = ImportDialog::tr("Custom Avatar", "Custom Avatar Description in SC, don't use Special Character!"); } else { @@ -609,7 +615,7 @@ bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) diffHeight = diffHeight / 2; } snapmaticPainter.drawImage(0 + diffWidth, 0 + diffHeight, snapmaticImage); - customImageTitle = "Custom Picture"; + customImageTitle = ImportDialog::tr("Custom Picture", "Custom Picture Description in SC, don't use Special Character!"); } snapmaticPainter.end(); if (!picture->setImage(snapmaticPixmap.toImage())) @@ -617,23 +623,22 @@ bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) delete picture; return false; } - QString currentTime = QTime::currentTime().toString("HHmmss"); SnapmaticProperties spJson = picture->getSnapmaticProperties(); - spJson.uid = QString(currentTime % - QString::number(QDate::currentDate().dayOfYear())).toInt(); + spJson.uid = QString(QString::number(*currentTime) % + QString::number(importDateTime.date().dayOfYear())).toInt(); bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); int cEnough = 0; - while ((fExists || fExistsHidden) && cEnough < 5000) + while ((fExists || fExistsHidden) && cEnough < findRetryLimit) { - currentTime = QString::number(currentTime.toInt() - 1); - spJson.uid = QString(currentTime % - QString::number(QDate::currentDate().dayOfYear())).toInt(); + *currentTime = *currentTime - 1; + spJson.uid = QString(QString::number(*currentTime) % + QString::number(importDateTime.date().dayOfYear())).toInt(); fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); cEnough++; } - spJson.createdDateTime = QDateTime::currentDateTime(); + spJson.createdDateTime = importDateTime; spJson.createdTimestamp = spJson.createdDateTime.toTime_t(); picture->setSnapmaticProperties(spJson); picture->setPicFileName(QString("PGTA5%1").arg(QString::number(spJson.uid))); @@ -672,23 +677,22 @@ bool ProfileInterface::importFile(QString selectedFile, bool notMultiple) { if (picture->setImage(importDialog->image())) { - QString currentTime = QTime::currentTime().toString("HHmmss"); SnapmaticProperties spJson = picture->getSnapmaticProperties(); - spJson.uid = QString(currentTime + - QString::number(QDate::currentDate().dayOfYear())).toInt(); + spJson.uid = QString(QString::number(*currentTime) % + QString::number(importDateTime.date().dayOfYear())).toInt(); bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); int cEnough = 0; - while ((fExists || fExistsHidden) && cEnough < 25) + while ((fExists || fExistsHidden) && cEnough < findRetryLimit) { - currentTime = QString::number(currentTime.toInt() - 1); - spJson.uid = QString(currentTime % - QString::number(QDate::currentDate().dayOfYear())).toInt(); + *currentTime = *currentTime - 1; + spJson.uid = QString(QString::number(*currentTime) % + QString::number(importDateTime.date().dayOfYear())).toInt(); fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); cEnough++; } - spJson.createdDateTime = QDateTime::currentDateTime(); + spJson.createdDateTime = importDateTime; spJson.createdTimestamp = spJson.createdDateTime.toTime_t(); picture->setSnapmaticProperties(spJson); picture->setPicFileName(QString("PGTA5%1").arg(QString::number(spJson.uid))); @@ -1158,6 +1162,9 @@ void ProfileInterface::contextMenuTriggeredPIC(QContextMenuEvent *ev) editMenu.addAction(SnapmaticWidget::tr("Hide &In-game"), picWidget, SLOT(makePictureHiddenSlot())); } editMenu.addAction(PictureDialog::tr("&Edit Properties..."), picWidget, SLOT(editSnapmaticProperties())); + editMenu.addSeparator(); + editMenu.addAction(PictureDialog::tr("Open &Map Viewer..."), picWidget, SLOT(openMapViewer())); + editMenu.addAction(PictureDialog::tr("Open &JSON Editor..."), picWidget, SLOT(editSnapmaticRawJson())); QMenu exportMenu(SnapmaticWidget::tr("&Export"), this); exportMenu.addAction(PictureDialog::tr("Export as &Picture..."), picWidget, SLOT(on_cmdExport_clicked())); exportMenu.addAction(PictureDialog::tr("Export as &Snapmatic..."), picWidget, SLOT(on_cmdCopy_clicked())); @@ -1231,7 +1238,9 @@ void ProfileInterface::on_saProfileContent_dropped(const QMimeData *mimeData) if (pathList.length() == 1) { QString selectedFile = pathList.at(0); - importFile(selectedFile, true); + QDateTime importDateTime = QDateTime::currentDateTime(); + int currentTime = importDateTime.toString(importTimeFormat).toInt(); + importFile(selectedFile, QDateTime::currentDateTime(), ¤tTime, true); } else if (pathList.length() > 1) { diff --git a/ProfileInterface.h b/ProfileInterface.h index f93297c..8ccf76b 100755 --- a/ProfileInterface.h +++ b/ProfileInterface.h @@ -31,6 +31,7 @@ #include "CrewDatabase.h" #include #include +#include #include #include #include @@ -107,7 +108,7 @@ private: int contentMode; bool isSupportedImageFile(QString selectedFileName); - bool importFile(QString selectedFile, bool notMultiple); + bool importFile(QString selectedFile, QDateTime importDateTime, int *currentTime, bool notMultiple); void importFilesProgress(QStringList selectedFiles); bool importSnapmaticPicture(SnapmaticPicture *picture, bool warn = true); bool importSavegameData(SavegameData *savegame, QString sgdPath, bool warn = true); diff --git a/SnapmaticEditor.cpp b/SnapmaticEditor.cpp index 619e855..768013a 100644 --- a/SnapmaticEditor.cpp +++ b/SnapmaticEditor.cpp @@ -32,13 +32,24 @@ SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, QWidget *parent) : QDialog(parent), crewDB(crewDB), ui(new Ui::SnapmaticEditor) { + // Set Window Flags + setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); + ui->setupUi(this); ui->cmdApply->setDefault(true); - if (QIcon::hasThemeIcon("dialog-apply")) + if (QIcon::hasThemeIcon("dialog-ok-apply")) + { + ui->cmdApply->setIcon(QIcon::fromTheme("dialog-ok-apply")); + } + else if (QIcon::hasThemeIcon("dialog-apply")) { ui->cmdApply->setIcon(QIcon::fromTheme("dialog-apply")); } + else if (QIcon::hasThemeIcon("dialog-ok")) + { + ui->cmdApply->setIcon(QIcon::fromTheme("dialog-ok")); + } if (QIcon::hasThemeIcon("dialog-cancel")) { ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel")); diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp index e1ca220..4d9147e 100755 --- a/SnapmaticPicture.cpp +++ b/SnapmaticPicture.cpp @@ -774,60 +774,119 @@ void SnapmaticPicture::parseJsonContent() { QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonStr.toUtf8()); QJsonObject jsonObject = jsonDocument.object(); - QVariantMap jsonMap = jsonObject.toVariantMap(); // backward compatibility + QVariantMap jsonMap = jsonObject.toVariantMap(); + bool jsonIncomplete = false; + bool jsonError = false; if (jsonObject.contains("loc")) { - QJsonObject locObject = jsonObject["loc"].toObject(); - if (locObject.contains("x")) { localSpJson.location.x = locObject["x"].toDouble(); } - if (locObject.contains("y")) { localSpJson.location.y = locObject["y"].toDouble(); } - if (locObject.contains("z")) { localSpJson.location.z = locObject["z"].toDouble(); } + if (jsonObject["loc"].isObject()) + { + QJsonObject locObject = jsonObject["loc"].toObject(); + if (locObject.contains("x")) + { + if (locObject["x"].isDouble()) { localSpJson.location.x = locObject["x"].toDouble(); } + else { jsonError = true; } + } + else { jsonIncomplete = true; } + if (locObject.contains("y")) + { + if (locObject["y"].isDouble()) { localSpJson.location.y = locObject["y"].toDouble(); } + else { jsonError = true; } + } + else { jsonIncomplete = true; } + if (locObject.contains("z")) + { + if (locObject["z"].isDouble()) { localSpJson.location.z = locObject["z"].toDouble(); } + else { jsonError = true; } + } + else { jsonIncomplete = true; } + } + else { jsonError = true; } } + else { jsonIncomplete = true; } if (jsonObject.contains("uid")) { - localSpJson.uid = jsonObject["uid"].toInt(); + bool uidOk; + localSpJson.uid = jsonMap["uid"].toInt(&uidOk); + if (!uidOk) { jsonError = true; } } + else { jsonIncomplete = true; } if (jsonObject.contains("area")) { - localSpJson.location.area = jsonObject["area"].toString(); + if (jsonObject["area"].isString()) { localSpJson.location.area = jsonObject["area"].toString(); } + else { jsonError = true; } } + else { jsonIncomplete = true; } if (jsonObject.contains("crewid")) { - localSpJson.crewID = jsonObject["crewid"].toInt(); + bool crewIDOk; + localSpJson.crewID = jsonMap["crewid"].toInt(&crewIDOk); + if (!crewIDOk) { jsonError = true; } } + else { jsonIncomplete = true; } + if (jsonObject.contains("street")) + { + bool streetIDOk; + localSpJson.streetID = jsonMap["street"].toInt(&streetIDOk); + if (!streetIDOk) { jsonError = true; } + } + else { jsonIncomplete = true; } if (jsonObject.contains("creat")) { + bool timestampOk; QDateTime createdTimestamp; - localSpJson.createdTimestamp = jsonMap["creat"].toUInt(); + localSpJson.createdTimestamp = jsonMap["creat"].toUInt(×tampOk); createdTimestamp.setTime_t(localSpJson.createdTimestamp); localSpJson.createdDateTime = createdTimestamp; + if (!timestampOk) { jsonError = true; } } + else { jsonIncomplete = true; } if (jsonObject.contains("plyrs")) { - localSpJson.playersList = jsonMap["plyrs"].toStringList(); + if (jsonObject["plyrs"].isArray()) { localSpJson.playersList = jsonMap["plyrs"].toStringList(); } + else { jsonError = true; } } + else { jsonIncomplete = true; } if (jsonObject.contains("meme")) { - localSpJson.isMeme = jsonObject["meme"].toBool(); + if (jsonObject["meme"].isBool()) { localSpJson.isMeme = jsonObject["meme"].toBool(); } + else { jsonError = true; } } + else { jsonIncomplete = true; } if (jsonObject.contains("mug")) { - localSpJson.isMug = jsonObject["mug"].toBool(); + if (jsonObject["mug"].isBool()) { localSpJson.isMug = jsonObject["mug"].toBool(); } + else { jsonError = true; } } + else { jsonIncomplete = true; } if (jsonObject.contains("slf")) { - localSpJson.isSelfie = jsonObject["slf"].toBool(); + if (jsonObject["slf"].isBool()) { localSpJson.isSelfie = jsonObject["slf"].toBool(); } + else { jsonError = true; } } + else { jsonIncomplete = true; } if (jsonObject.contains("drctr")) { - localSpJson.isFromDirector = jsonObject["drctr"].toBool(); + if (jsonObject["drctr"].isBool()) { localSpJson.isFromDirector = jsonObject["drctr"].toBool(); } + else { jsonError = true; } } + else { jsonIncomplete = true; } if (jsonObject.contains("rsedtr")) { - localSpJson.isFromRSEditor = jsonObject["rsedtr"].toBool(); + if (jsonObject["rsedtr"].isBool()) { localSpJson.isFromRSEditor = jsonObject["rsedtr"].toBool(); } + else { jsonError = true; } } + else { jsonIncomplete = true; } - jsonOk = true; + if (!jsonIncomplete && !jsonError) + { + jsonOk = true; + } + else + { + jsonOk = false; + } } bool SnapmaticPicture::setSnapmaticProperties(SnapmaticProperties newSpJson) @@ -844,6 +903,7 @@ bool SnapmaticPicture::setSnapmaticProperties(SnapmaticProperties newSpJson) jsonObject["uid"] = newSpJson.uid; jsonObject["area"] = newSpJson.location.area; jsonObject["crewid"] = newSpJson.crewID; + jsonObject["street"] = newSpJson.streetID; jsonObject["creat"] = QJsonValue::fromVariant(newSpJson.createdTimestamp); jsonObject["plyrs"] = QJsonValue::fromVariant(newSpJson.playersList); jsonObject["meme"] = newSpJson.isMeme; @@ -862,7 +922,7 @@ bool SnapmaticPicture::setSnapmaticProperties(SnapmaticProperties newSpJson) return false; } -bool SnapmaticPicture::setJsonStr(const QString &newJsonStr) +bool SnapmaticPicture::setJsonStr(const QString &newJsonStr, bool updateProperties) { if (newJsonStr.length() < jsonStreamEditorLength) { @@ -887,6 +947,7 @@ bool SnapmaticPicture::setJsonStr(const QString &newJsonStr) { jsonStr = newJsonStr; if (lowRamMode) { rawPicContent = qCompress(rawPicContent, 9); } + if (updateProperties) { parseJsonContent(); } return true; } else diff --git a/SnapmaticPicture.h b/SnapmaticPicture.h index e0db134..206a9ec 100755 --- a/SnapmaticPicture.h +++ b/SnapmaticPicture.h @@ -37,6 +37,7 @@ struct SnapmaticProperties { }; int uid; int crewID; + int streetID; QStringList playersList; uint createdTimestamp; QDateTime createdDateTime; @@ -96,7 +97,7 @@ public: QString getJsonStr(); SnapmaticProperties getSnapmaticProperties(); bool setSnapmaticProperties(SnapmaticProperties newSpJson); - bool setJsonStr(const QString &jsonStr); + bool setJsonStr(const QString &jsonStr, bool updateProperties = false); // VISIBILITY bool isHidden(); diff --git a/SnapmaticWidget.cpp b/SnapmaticWidget.cpp index dd5ca98..789c2e9 100755 --- a/SnapmaticWidget.cpp +++ b/SnapmaticWidget.cpp @@ -18,6 +18,8 @@ #include "SnapmaticWidget.h" #include "ui_SnapmaticWidget.h" +#include "MapLocationDialog.h" +#include "JsonEditorDialog.h" #include "SnapmaticPicture.h" #include "SnapmaticEditor.h" #include "DatabaseThread.h" @@ -283,13 +285,57 @@ void SnapmaticWidget::makePictureVisibleSlot() void SnapmaticWidget::editSnapmaticProperties() { SnapmaticEditor *snapmaticEditor = new SnapmaticEditor(crewDB, this); - snapmaticEditor->setWindowFlags(snapmaticEditor->windowFlags()^Qt::WindowContextHelpButtonHint); snapmaticEditor->setSnapmaticPicture(smpic); snapmaticEditor->setModal(true); + snapmaticEditor->show(); snapmaticEditor->exec(); delete snapmaticEditor; } +void SnapmaticWidget::editSnapmaticRawJson() +{ + JsonEditorDialog *jsonEditor = new JsonEditorDialog(smpic, this); + jsonEditor->setModal(true); + jsonEditor->show(); + jsonEditor->exec(); + delete jsonEditor; +} + +void SnapmaticWidget::openMapViewer() +{ + SnapmaticPicture *picture = smpic; + MapLocationDialog *mapLocDialog; + mapLocDialog = new MapLocationDialog(picture->getSnapmaticProperties().location.x, picture->getSnapmaticProperties().location.y, this); + mapLocDialog->setModal(true); + mapLocDialog->show(); + 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; + + // Update Snapmatic Picture + QString currentFilePath = picture->getPictureFilePath(); + QString originalFilePath = picture->getOriginalPictureFilePath(); + QString backupFileName = originalFilePath % ".bak"; + if (!QFile::exists(backupFileName)) + { + QFile::copy(currentFilePath, backupFileName); + } + SnapmaticProperties fallbackProperties = picture->getSnapmaticProperties(); + picture->setSnapmaticProperties(localSpJson); + 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); + } + } + delete mapLocDialog; +} + bool SnapmaticWidget::isSelected() { return ui->cbSelected->isChecked(); diff --git a/SnapmaticWidget.h b/SnapmaticWidget.h index 9a7b3f3..bc5b087 100755 --- a/SnapmaticWidget.h +++ b/SnapmaticWidget.h @@ -68,6 +68,8 @@ private slots: void makePictureVisibleSlot(); void makePictureHiddenSlot(); void editSnapmaticProperties(); + void editSnapmaticRawJson(); + void openMapViewer(); void snapmaticUpdated(); protected: diff --git a/anpro/JSHighlighter.cpp b/anpro/JSHighlighter.cpp new file mode 100644 index 0000000..6d3b93c --- /dev/null +++ b/anpro/JSHighlighter.cpp @@ -0,0 +1,72 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "JSHighlighter.h" +#include + +JSHighlighter::JSHighlighter(QTextDocument *parent) : + QSyntaxHighlighter(parent) +{ + HighlightingRule rule; + + QBrush keywordBrush(QColor::fromRgb(66, 137, 244)); + keywordFormat.setForeground(keywordBrush); + keywordFormat.setFontItalic(true); + QStringList keywordPatterns; + keywordPatterns << "\\btrue\\b" << "\\bfalse\\b"; + for (QString pattern : keywordPatterns) + { + rule.pattern = QRegExp(pattern); + rule.format = keywordFormat; + highlightingRules.append(rule); + } + + QBrush doubleBrush(QColor::fromRgb(66, 137, 244)); + doubleFormat.setForeground(doubleBrush); + rule.pattern = QRegExp("[+-]?\\d*\\.?\\d+"); + rule.format = doubleFormat; + highlightingRules.append(rule); + + QBrush quotationBrush(QColor::fromRgb(66, 244, 104)); + quotationFormat.setForeground(quotationBrush); + rule.pattern = QRegExp("\"[^\"]*\""); + rule.format = quotationFormat; + highlightingRules.append(rule); + + QBrush objectBrush(QColor::fromRgb(255, 80, 80)); + objectFormat.setForeground(objectBrush); + rule.pattern = QRegExp("\"[^\"]*\"(?=:)"); + rule.format = objectFormat; + highlightingRules.append(rule); +} + +void JSHighlighter::highlightBlock(const QString &text) +{ + for (HighlightingRule rule : highlightingRules) + { + QRegExp expression(rule.pattern); + int index = expression.indexIn(text); + while (index >= 0) + { + int length = expression.matchedLength(); + setFormat(index, length, rule.format); + index = expression.indexIn(text, index + length); + } + } + setCurrentBlockState(0); +} diff --git a/anpro/JSHighlighter.h b/anpro/JSHighlighter.h new file mode 100644 index 0000000..08a0eb5 --- /dev/null +++ b/anpro/JSHighlighter.h @@ -0,0 +1,56 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef JSHIGHLIGHTER_H +#define JSHIGHLIGHTER_H + +#include +#include +#include +#include +#include +#include +#include +#include + +class QTextDocument; + +class JSHighlighter : public QSyntaxHighlighter +{ + Q_OBJECT + +public: + struct HighlightingRule + { + QRegExp pattern; + QTextCharFormat format; + }; + QVector highlightingRules; + + QTextCharFormat keywordFormat; + QTextCharFormat doubleFormat; + QTextCharFormat quotationFormat; + QTextCharFormat objectFormat; + + JSHighlighter(QTextDocument *parent = 0); + +protected: + void highlightBlock(const QString &text) override; +}; + +#endif // JSHIGHLIGHTER_H diff --git a/config.h b/config.h index f43dc83..0848287 100755 --- a/config.h +++ b/config.h @@ -50,7 +50,7 @@ #ifndef GTA5SYNC_APPVER #ifndef GTA5SYNC_DAILYB -#define GTA5SYNC_APPVER "1.5.0-dev3" +#define GTA5SYNC_APPVER "1.5.0-dev4" #else #define GTA5SYNC_APPVER GTA5SYNC_DAILYB #endif diff --git a/gta5view.pro b/gta5view.pro index 9d7ec08..61fb0d4 100755 --- a/gta5view.pro +++ b/gta5view.pro @@ -38,6 +38,7 @@ SOURCES += main.cpp \ GlobalString.cpp \ IconLoader.cpp \ ImportDialog.cpp \ + JsonEditorDialog.cpp \ MapLocationDialog.cpp \ OptionsDialog.cpp \ PictureDialog.cpp \ @@ -59,6 +60,7 @@ SOURCES += main.cpp \ StringParser.cpp \ TranslationClass.cpp \ UserInterface.cpp \ + anpro/JSHighlighter.cpp \ uimod/UiModLabel.cpp \ uimod/UiModWidget.cpp @@ -72,6 +74,7 @@ HEADERS += \ GlobalString.h \ IconLoader.h \ ImportDialog.h \ + JsonEditorDialog.h \ MapLocationDialog.h \ OptionsDialog.h \ PictureDialog.h \ @@ -93,6 +96,7 @@ HEADERS += \ StringParser.h \ TranslationClass.h \ UserInterface.h \ + anpro/JSHighlighter.h \ uimod/UiModLabel.h \ uimod/UiModWidget.h @@ -100,6 +104,7 @@ FORMS += \ AboutDialog.ui \ ExportDialog.ui \ ImportDialog.ui \ + JsonEditorDialog.ui \ MapLocationDialog.ui \ OptionsDialog.ui \ PictureDialog.ui \ @@ -131,7 +136,7 @@ DISTFILES += res/app.rc \ lang/gta5sync_no.ts \ lang/README.txt -INCLUDEPATH += ./uimod +INCLUDEPATH += ./anpro ./uimod # GTA5SYNC/GTA5VIEW ONLY diff --git a/lang/gta5sync_no.ts b/lang/gta5sync_no.ts index 81a61d4..c6a588e 100644 --- a/lang/gta5sync_no.ts +++ b/lang/gta5sync_no.ts @@ -114,6 +114,7 @@ Pictures and Savegames CrewDatabase + No Crew @@ -196,7 +197,7 @@ Pictures and Savegames - + Background Colour: <span style="color: %1">%1</span> @@ -236,29 +237,93 @@ Pictures and Savegames - + + + Custom Avatar + Custom Avatar Description in SC, don't use Special Character! + + + + + + Custom Picture + Custom Picture Description in SC, don't use Special Character! + + + + 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 - + Select Colour... - MapPreviewDialog + JsonEditorDialog - + + Snapmatic JSON Editor + + + + + &Save + + + + + &Close + + + + + MapLocationDialog + + Snapmatic Map Viewer + + + &Close + + + + + &Apply + + + + + &Revert + + + + + &Set + + + + + &Done + + + + + X: %1 +Y: %2 + X and Y position + + OptionsDialog @@ -395,75 +460,129 @@ When you want to use it as Avatar the image will be detached! - - Language + Interface - + + Language for Interface + + + + + + + + Current: %1 + + + + + Language for Areas + + + + + Style + + + + + Use Default Style (Restart) + + + + + Style: + + + + + Font + + + + + Always use Message Font (Windows 2003 and earlier) + + + + Sync - + Sync is not implemented at current time - + Apply changes - + &OK OK, Cancel, Apply - + Discard changes - + &Cancel OK, Cancel, Apply - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default - + + %1 (Closest to Interface) + Next closest language compared to the Interface + + + + + Auto + Automatic language choice. + + + + %1 %1 - + The new Custom Folder will initialise after you restart %1. - + No Profile No Profile, as default - - - + + + Profile: %1 @@ -504,66 +623,73 @@ When you want to use it as Avatar the image will be detached! - - + + Export as &Picture... - - + + Export as &Snapmatic... - - Open &Map View... - - - - - + + &Edit Properties... - + + + 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 Crew - + Unknown Location - - + + No Players - + Avatar Preview Mode Press 1 for Default View @@ -717,212 +843,212 @@ Press 1 for Default View - + Enabled pictures: %1 of %2 - + Loading... - - + + Import... - - - - - - - - - - - - + + + + + + + + + + + + Import - - + + GTA V Export (*.g5e) - - + + Savegames files (SGTA*) - - + + Snapmatic pictures (PGTA*) - + Importable files (%1) - + All image files (%1) - - + + All files (**) - - - + + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - - + + Failed to read Snapmatic picture - - + + Failed to read Savegame file - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - - - + + + + Export selected - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - + Export selected... - + Initialising export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files - + All profile files (*.g5e SGTA* PGTA*) @@ -930,15 +1056,20 @@ Press 1 for Default View QApplication - + Font - + Selected Font: %1 + + + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? + + SavegameDialog @@ -1013,37 +1144,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1137,7 +1268,13 @@ Press 1 for Default View - + + + + + + + Snapmatic Properties @@ -1183,20 +1320,20 @@ Press 1 for Default View - + Crew: %1 (%2) - + Title: %1 (%2) - - + + Appropriate: %1 @@ -1226,45 +1363,59 @@ 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 JSON Error + + + + + + + Patching of Snapmatic Properties failed because of I/O Error - + Snapmatic Title - + New Snapmatic title: - + Snapmatic Crew - + New Snapmatic crew: @@ -1321,8 +1472,8 @@ Press 1 for Default View - - + + Delete picture @@ -1332,62 +1483,62 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All - + Are you sure to delete %1 from your Snapmatic pictures? - + Failed at deleting %1 from your Snapmatic pictures @@ -1396,7 +1547,7 @@ Press 1 for Default View UserInterface - + %2 - %1 @@ -1458,8 +1609,8 @@ Press 1 for Default View - - + + &About %1 @@ -1565,15 +1716,15 @@ Press 1 for Default View - + Select &GTA V Folder... - - - + + + Select GTA V Folder... @@ -1603,27 +1754,27 @@ Press 1 for Default View - - - + + + Select Profile - + Open File... - - - - + + + + Open File - + Can't open %1 because of not valid file format diff --git a/main.cpp b/main.cpp index ebd7d6b..d8d6a3b 100755 --- a/main.cpp +++ b/main.cpp @@ -21,6 +21,7 @@ #include "ProfileDatabase.h" #include "DatabaseThread.h" #include "SavegameDialog.h" +#include "OptionsDialog.h" #include "PictureDialog.h" #include "UserInterface.h" #include "CrewDatabase.h" @@ -28,8 +29,11 @@ #include "IconLoader.h" #include "AppEnv.h" #include "config.h" +#include #include +#include #include +#include #include #include #include @@ -52,9 +56,25 @@ int main(int argc, char *argv[]) a.setApplicationVersion(GTA5SYNC_APPVER); a.setQuitOnLastWindowClosed(false); + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("Startup"); + + bool isFirstStart = settings.value("IsFirstStart", true).toBool(); + bool customStyle = settings.value("CustomStyle", false).toBool(); + QString appStyle = settings.value("AppStyle", "Default").toString(); + + if (customStyle) + { + if (QStyleFactory::keys().contains(appStyle, Qt::CaseInsensitive)) + { + a.setStyle(QStyleFactory::create(appStyle)); + } + } + #ifdef GTA5SYNC_WIN #if QT_VERSION >= 0x050400 - if (QSysInfo::windowsVersion() >= 0x0080) + bool alwaysUseMessageFont = settings.value("AlwaysUseMessageFont", false).toBool(); + if (QSysInfo::windowsVersion() >= 0x0080 || alwaysUseMessageFont) { // Get Windows Font NONCLIENTMETRICS ncm; @@ -83,6 +103,22 @@ int main(int argc, char *argv[]) TCInstance->initUserLanguage(); TCInstance->loadTranslation(&a); + if (isFirstStart) + { + QMessageBox::StandardButton button = QMessageBox::information(a.desktop(), QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER), QApplication::tr("

Welcome to %1!

You want to configure %1 before you start using it?").arg(GTA5SYNC_APPSTR), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); + if (button == QMessageBox::Yes) + { + ProfileDatabase profileDB; + OptionsDialog optionsDialog(&profileDB); + optionsDialog.setWindowIcon(IconLoader::loadingAppIcon()); + optionsDialog.show(); + optionsDialog.exec(); + } + settings.setValue("IsFirstStart", false); + } + + settings.endGroup(); + QStringList applicationArgs = a.arguments(); QString selectedAction; QString arg1; diff --git a/res/app.rc b/res/app.rc index ee9308c..3cfc1b1 100755 --- a/res/app.rc +++ b/res/app.rc @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view\0" - VALUE "FileVersion", "1.5.0-dev3\0" + VALUE "FileVersion", "1.5.0-dev4\0" VALUE "InternalName", "gta5view\0" VALUE "LegalCopyright", "Copyright © 2016-2017 Syping\0" VALUE "OriginalFilename", "gta5view.exe\0" VALUE "ProductName", "gta5view\0" - VALUE "ProductVersion", "1.5.0-dev3\0" + VALUE "ProductVersion", "1.5.0-dev4\0" END END END diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index c934152338f2f829b6bc74e5b7a40975a4431b77..dcb336bee2c3375338532808ab313a139c686fb9 100755 GIT binary patch delta 3886 zcma)8d015C8h>Zz3^V7<3?qx82zn491QbLOH4za(1px&|lw25w1B?u3U=~o*2D2VF zvSlK=Wtq7zr8%yVdPOV^6E*YNt!`P8`q<6v=92o<{mmSu<@U#Y=7Hat^L^jD{NCUD ze)HKfdD~0!=Ym~d5z#y%?IsDMW)sO56Lnur#GE4vf0js@PgIda6q8KU;|@{WqeMED zgdrtFgZ=S+u!JEiiRK(7s+5LIE)y zcvv)qnDbMK!Y)WS^%5yZ!J%-MloNn`BT2b4gD6r(%8n0+jNeJ^aLNXnFzg~SlTpq#e6LNQ;=jXizm4Q7nnDy2 zMhy+?hrRD(t|dX1rQlRX!~;bQ=4huU8jp^=yTM04hFR2>B^f*B69-W5c7ye z?3Zz$#}gHKBosp=bY7Q*Z|Mia7i8trZi10ynSIDlM5RvIqSYwhzy-4B>%IZi3uPZ? zi$r<6><8UDM3eOLh!!_d{5tvM_^a?6Dxdj*3kGUT^2!2GSD7WRetIg={J+U?8MZGYivC<-u8SaAU{F}r?;?s_sCc%B1;r-C-sC)@VLvI38bMj= zyNXi{pi>t{t7fP+t7)$uo)-=wgVNw zUzzRk8^GM#64t!MY~MBuqP)TESW-l!d68++ltO%~m_uuZ5|zg?9d$1v!IKg`=2|X2 z)QU{U{w3Jh#$1`zf_A&b+&SA0bTjwgO-7_mO2&II=ae#db2AZJDPi*W%HmV4$oN}j z^&2Ll^v{*9K?b70QswG+Bvh56TzhvaQRb7%^^0eqdu}MV%U7UupD1^3J&68~Jg)ru zTSTZ@=ci2Z5Gm&Rg&*@rpYHT4m=#4dev_X`ZY3%>=T~U}rOcCl`!)mn7*(pyK%%H6 zD({r#{#|9CNJ)lm%yB;NJQIGu*6VaKjp0v3G z8?7bk>b2|8pO@9vBLdW)scwk)6eF~c`cNwd$J}4kt@~j}by0n+4NQ&sLVdjj0rd)C zLk=IozGgP$i!pFCknK~~31$wn(RU)DdSVC6gFUT6!Z0_Rl!z`!nZ^!Vo(X@=?6A|W z189>rc6{?HWHz78ef|Vd?rwIL3Z;mc#g;ZB!;(#`WdhXdoX1+qfy#E)b~_1!sW0nz z0kvoQvP%ym(4aJSMb^J?FK}$*pkz$Mx7qba@=yX9dtwX{o$(sme(6^tQ#yNkW;VoV zWzV|?r4S7`&0aqbY8vW*8-N~8b`_BqcXG08z{gTJUH5(nWGu($!g0hIE~;T7N@U^^ zhoTh5-Q1()xUh`n653yp@QGF~_bT?4+~cNPMk%`u=ZdcTLv#*q`eiVfl)<@-d!InW zwOkn?1Kz;BJQ0Sp?GlDWN@$XE`@_0p=I3+An~#Cweq8%C7;N}~J1IbXX=}NU#-c3^ zKXDy(yNS3O2@Sg>oGz14Eay5lf$4w`x$}Jun7o}X?!wj|QOggxOS?dQKEqvYhr08Y zYh>QQ@=s|LV}eopC{3^3a2#sY3?F|J;#;FBJ_9DE-_|Vg2bB>`n#Sa*5NU~~F{=~r zGb9wZXc|uRlkH`uH(jK+V*KYrt4Rucg}X_d+3tQ`)$g{~+UO+LB06tL~w- z=Kv>kYL{m;fzoJg^FVypOwg{DF%X|q!s-j!^?D>Q<+k?S>vmjT1@1-aUarsXAjput z+H0?)-tlR=-dE9KRVQ>YDd?;o$-3CjVAGPIOIeQD(yd*>@O`>5I&@U}RNdIc=g_iq zbW?+&pAnNJED&`24$i<&gd7QTs&z+abVo<7)Ljx`KO@Ya@m>q#N?rcFk7I@ef8n2% zhBE2D_upM&#%vKJoRRH+P{hXMH}#=&5qwUte)NxEqimtRwDu+fa_PmhyYQ>4L|?NC zW#xA2U;bb=QQ{o^o4*>+5Xbe~K7vDjhyLh(us`v>{`9Fm(D5bxjXnstzyC%3%~uEE z291W-#TlMg*!Kh7E8+)C?3Qh}ikW3*ht)RDY_wP_WC~m>!4yq}R6_!p$wZYv8;NQx zkRSe((S^o3L4~K^op$TeA~LdZDxdO*r%WotSqE9k)^)CXp=hkBHag5EKD#hKkC)v3 z$&SYm)`xM~Xd+eP<8{o#pwSnG?LjyWycfyd^{yO_c)W1}7x>nAilHLx77>P(>amxn zBud0*2%en2_dJ!u`uzv#4d@CpDczD-Z=7%EopyoG73_9ng}`T7MF$^KWERV;^>#if zF>wfQ6w7$QXtS6F+W_}qKE!S3XLytm3dS8?9O1dyzfz`;^|5Gs5We7Eli1yTf$tU+ zILRnhIK6hutu{X0CK&Br3*F=YxF4aG(|z~reR_s;Mc3mGN8PE>yr(I8sUpaMY%N{8 zl!cD@7Wa|Zp7^y{2v)F0BfD1pysN@Uk1Y0vtb7cO^-=baJl=P}=%dI8g31uZLla(F z^RU|qLLJD;hX212*V_QX#tG#{r^UhhT<|dkg56=XIV6HIdjz_Z`5;e7d~HClcxdb| z_2Q0L93B{)Un7Wo^zU@yK9d^iUY0sCAV^xuHP-Oc%tF0j^PEYY6y|EAQ7Gk58tp5* z1qoN7^pc1~eO6%e}dsOAn(M5vAWUUr>hn0^S95E^ZuVz@Ce7zB(!aI{yEH_s; zZ30&LQURI}`1x4(Q3n~C#R}f+Nb`1zc1n6pjm2z27gg=tA3yVAcq(yj=d- z`CqeF=W}eqJ!JQB{Tq3OUh)j09pk2qH&vo(1Up|QI0TbJDEl88?Z*Cf;J8wd#tT?= z2q5@(gw{GiqsLhJjY77}J*Udvw<~hWLJ*a{68|=^Qr*|9hH#PwZ8odTZLI9&8D|OU F`Css}3-SN} delta 2621 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 diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index a6b2420..f920076 100755 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -259,6 +259,7 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen CrewDatabase + No Crew Keine Crew @@ -426,12 +427,14 @@ Wenn du planst es als Avatar zu verwenden das Bild wird abgetrennt! + 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 @@ -454,6 +457,28 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! Farbe auswählen...
+ + JsonEditorDialog + + + Snapmatic JSON Editor + Snapmatic JSON Editor + + + + &Save + &Speichern + + + + &Close + S&chließen + + + Patching of Snapmatic Properties failed because of JSON Error + Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen JSON Fehler + + MapLocationDialog @@ -502,7 +527,7 @@ Y: %2 &Fertig - + X: %1 Y: %2 X and Y position @@ -672,56 +697,93 @@ Y: %2 Name - - Language - Sprache + + Language for Areas + Sprache für Standorte - + + Style + Stil + + + + Use Default Style (Restart) + Benutze Standard Stil (Neustart) + + + Use Default Style + Benutze Standard Stil + + + + Style: + Stil: + + + + Font + Schrift + + + + Always use Message Font (Windows 2003 and earlier) + Immer Nachrichtenschrift nutzen (Windows 2003 und früher) + + + Language + Sprache + + + Interface Oberfläche + + + Language for Interface + Sprache für Oberfläche + - - + + Current: %1 Aktuell: %1 - Areas - Standorte + Standorte - + Sync Sync - + Sync is not implemented at current time Sync wurde bisher nicht implementiert - + Apply changes Änderungen übernehmen - + &OK OK, Cancel, Apply &OK - + Discard changes Änderungen verwerfen - + &Cancel OK, Cancel, Apply Abbre&chen @@ -742,7 +804,7 @@ Y: %2 %1 (%2 wenn verfügbar) - + %1 %1 %1 @@ -756,31 +818,31 @@ Y: %2 Der eigene Ordner initialisiert sobald du %1 neugestartet hast. - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (Erste näheste Sprache) - + System System in context of System default System - + %1 (Closest to Interface) Next closest language compared to the Interface %1 (Näheste zur Oberfläche) - + Auto Automatic language choice. Automatisch - + The new Custom Folder will initialise after you restart %1. Der eigene Ordner wird initialisiert sobald du %1 neugestartet hast. @@ -789,15 +851,15 @@ Y: %2 Die Änderung der Sprache nimmt Effekt sobald du %1 neugestartet hast. - + No Profile No Profile, as default Kein Profil - - - + + + Profile: %1 Profil: %1 @@ -911,8 +973,8 @@ Y: %2 Exportiere als &JPG Bild... - - + + Export as &Picture... Als &Bild exportieren... @@ -921,8 +983,8 @@ Y: %2 Exportiere als &GTA Snapmatic... - - + + Export as &Snapmatic... Als &Snapmatic exportieren... @@ -931,13 +993,12 @@ Y: %2 Bearbei&ten - Open &Map View... - &Kartenansicht öffnen... + &Kartenansicht öffnen... - - + + &Edit Properties... Eigenschaften bearb&eiten... @@ -951,7 +1012,13 @@ Y: %2 Erweitert (&A) - + + + Open &Map Viewer... + &Kartenansicht öffnen... + + + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -960,31 +1027,31 @@ Taste 2 - Overlay umschalten Pfeiltasten - Navigieren - - + + Snapmatic Picture Viewer Snapmatic Bildansicht - - + + Failed at %1 Fehlgeschlagen bei %1 - - + + No Crew Keine Crew - - + + No Players Keine Spieler - + Avatar Preview Mode Press 1 for Default View Avatar Vorschaumodus @@ -1029,7 +1096,7 @@ Drücke A für Standardansicht Keine Crew - + Unknown Location Unbekannter Standort @@ -1198,6 +1265,12 @@ Drücke A für Standardansicht No valid file is selected Keine gültige Datei wurde ausgewählt + + + + Open &JSON Editor... + &JSON Editor öffnen... + ProfileInterface @@ -1258,30 +1331,30 @@ Drücke A für Standardansicht Profil schließen - + Loading... Lade... - - + + Import... Importieren... - - - - - - - - - - - - - + + + + + + + + + + + + + Import Importieren @@ -1294,13 +1367,13 @@ Drücke A für Standardansicht Importfähige Dateien (*.g5e *.jpg *.png SGTA* PGTA*) - + Savegames files (SGTA*) Spielstanddateien (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) @@ -1310,29 +1383,29 @@ Drücke A für Standardansicht Alle Bilddateien (*.jpg *.png) - + Importable files (%1) Importfähige Dateien (%1) - + All image files (%1) Alle Bilddateien (%1) - + All files (**) Alle Dateien (**) - - + + Import file %1 of %2 files Importiere Datei %1 von %2 Dateien - + Import failed with... %1 @@ -1341,29 +1414,29 @@ Drücke A für Standardansicht %1 - + 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 parsed properly Kann %1 nicht importieren weil die Datei nicht richtig gelesen werden kann - + Can't import %1 because file format can't be detected Kann %1 nicht importieren weil das Dateiformat nicht erkannt werden kann - + Initialising export... Initialisiere Export... @@ -1372,29 +1445,29 @@ Drücke A für Standardansicht Kann %1 nicht importieren weil das Dateiformat nicht gültig ist - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA oder endet mit .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Fehlgeschlagen beim Importieren vom Snapmatic Bild, dieses Bild ist bereits im Spiel - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exportiere Snapmatic Bilder%2<br><br>JPG Bilder machen es möglich sie mit ein Bildansicht Programm zu öffnen<br>Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren<br><br>Exportieren als: - - + + No valid file is selected Keine gültige Datei wurde ausgewählt - + Enabled pictures: %1 of %2 Aktivierte Bilder: %1 von %2 @@ -1403,35 +1476,35 @@ Drücke A für Standardansicht Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA - + Failed to import the Snapmatic picture, can't copy the file into profile Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren - + Failed to import the Savegame, can't copy the file into profile Fehlgeschlagen beim Importieren vom Spielstand, kann Spielstanddatei nicht ins Profil kopieren - + Failed to import the Savegame, no Savegame slot is left Fehlgeschlagen beim Importieren vom Spielstand, kein Spielstandslot mehr frei - - + + JPG pictures and GTA Snapmatic JPG Bilder und GTA Snapmatic - - + + JPG pictures only Nur JPG Bilder - - + + GTA Snapmatic only Nur GTA Snapmatic @@ -1450,25 +1523,25 @@ Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren Exportieren als: - - + + No Snapmatic pictures or Savegames files are selected Keine Snapmatic Bilder oder Spielstände ausgewählt - - - + + + Remove selected Auswahl löschen - + You really want remove the selected Snapmatic picutres and Savegame files? Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Fehlgeschlagen beim kompletten entfernen der ausgewählten Snapmatic Bilder und/oder der Spielstanddateien @@ -1489,10 +1562,10 @@ Exportieren als: Fehlgeschlagenen beim Import vom Spielstand weil kein Spielstandslot mehr übrig ist - - - - + + + + Export selected Auswahl exportieren @@ -1513,7 +1586,7 @@ Exportieren als: Wie sollen wir mit den Snapmatic Bilder umgehen? - + Export selected... Auswahl exportieren... @@ -1526,7 +1599,7 @@ Exportieren als: Initialisierung... - + Export failed with... %1 @@ -1561,7 +1634,7 @@ Exportieren als: Alle Profildateien (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1570,15 +1643,20 @@ Exportieren als: QApplication - + Font Schrift - + Selected Font: %1 Ausgewähle Schrift: %1 + + + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? + <h4>Willkommen zu %1!</h4>Möchtest du %1 einstellen bevor du es nutzt? + SavegameDialog @@ -1725,32 +1803,32 @@ Exportieren als: Fehlgeschlagen beim Löschen %1 von deinen Spielständen - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All &Alles auswählen - + &Deselect All Alles a&bwählen @@ -1789,7 +1867,7 @@ Exportieren als: Spielstand kopieren - + &Export &Exportieren @@ -1865,8 +1943,13 @@ Exportieren als: - - + + + + + + + Snapmatic Properties Snapmatic Eigenschaften @@ -1910,7 +1993,7 @@ Exportieren als: Meme - + Snapmatic Title Snapmatic Titel @@ -1921,20 +2004,20 @@ Exportieren als: - + Crew: %1 (%2) Crew: %1 (%2) - + Title: %1 (%2) Titel: %1 (%2) - - + + Appropriate: %1 Angemessen: %1 @@ -1972,41 +2055,54 @@ Exportieren als: Cancel - - + + 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 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: @@ -2053,18 +2149,18 @@ Exportieren als: - - + + 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? - + Edi&t Bearbei&ten @@ -2077,7 +2173,7 @@ Exportieren als: &Im Spiel deaktivieren - + &Export &Exportieren @@ -2090,12 +2186,12 @@ Exportieren als: Exportiere als &GTA Snapmatic - + Show &In-game &Im Spiel anzeigen - + Hide &In-game &Im Spiel ausblenden @@ -2128,32 +2224,32 @@ Exportieren als: Exportiere als &Snapmatic... - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All Alles &auswählen - + &Deselect All Alles a&bwählen @@ -2201,7 +2297,7 @@ Exportieren als: Bist du sicher %1 von deinen Snapmatic Bilder zu löschen? - + Failed at deleting %1 from your Snapmatic pictures Fehlgeschlagen beim Löschen von %1 von deinen Snapmatic Bildern @@ -2499,7 +2595,7 @@ Exportieren als: - + Select GTA V Folder... diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm index a017ab7fb6f68d45df27e8578c6f80bd1e12bf79..f097a03af3f3321ccba17fb238037e4e7d104ed9 100644 GIT binary patch delta 2332 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 CrewDatabase + No Crew @@ -237,12 +238,14 @@ Pictures and Savegames + Custom Avatar Custom Avatar Description in SC, don't use Special Character! + Custom Picture Custom Picture Description in SC, don't use Special Character! @@ -264,6 +267,24 @@ When you want to use it as Avatar the image will be detached! Select Color... + + JsonEditorDialog + + + Snapmatic JSON Editor + + + + + &Save + + + + + &Close + + + MapLocationDialog @@ -297,7 +318,7 @@ When you want to use it as Avatar the image will be detached! - + X: %1 Y: %2 X and Y position @@ -437,106 +458,131 @@ Y: %2 Name + + + Language for Areas + + + + + Style + + + + + Style: + + + + + Font + + + + + Always use Message Font (Windows 2003 and earlier) + + - Language - + Interface + - Interface + Language for Interface - - + + Current: %1 - - Areas + + Use Default Style (Restart) - + Sync - + Sync is not implemented at current time - + Apply changes - + &OK OK, Cancel, Apply - + Discard changes - + &Cancel OK, Cancel, Apply - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default - + %1 (Closest to Interface) Next closest language compared to the Interface - + Auto Automatic language choice. - + %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 @@ -577,66 +623,67 @@ Y: %2 - - + + Export as &Picture... - - + + Export as &Snapmatic... - - Open &Map View... - - - - - + + &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 @@ -744,6 +791,12 @@ Press 1 for Default View Exported Snapmatic to "%1" because of using the .auto extension. + + + + Open &JSON Editor... + + ProfileInterface @@ -790,207 +843,207 @@ Press 1 for Default View - + Enabled pictures: %1 of %2 - + Loading... - - + + Import... - - - - - - - - - - - - - + + + + + + + + + + + + + Import - + Importable files (%1) - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) - + All image files (%1) - + All files (**) - - + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - + Failed to read Snapmatic picture - + Failed to read Savegame file - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - - - + + + + Export selected - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - + Export selected... - + Initialising export... Initializing export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - - + + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files @@ -1003,15 +1056,20 @@ Press 1 for Default View QApplication - + Font - + Selected Font: %1 + + + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? + + SavegameDialog @@ -1086,37 +1144,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1210,8 +1268,13 @@ Press 1 for Default View - - + + + + + + + Snapmatic Properties @@ -1257,20 +1320,20 @@ Press 1 for Default View - + Crew: %1 (%2) - + Title: %1 (%2) - - + + Appropriate: %1 @@ -1300,46 +1363,59 @@ 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 JSON Error + + + + + + + Patching of Snapmatic Properties failed because of I/O Error - + Snapmatic Title - + New Snapmatic title: - + Snapmatic Crew - + New Snapmatic crew: @@ -1396,8 +1472,8 @@ Press 1 for Default View - - + + Delete picture @@ -1407,62 +1483,62 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All - + Are you sure to delete %1 from your Snapmatic pictures? - + Failed at deleting %1 from your Snapmatic pictures @@ -1646,7 +1722,7 @@ Press 1 for Default View - + Select GTA V Folder... diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index 1750a3e81909b81a84f8b685ddb765cde1b67899..53ccfdd44cfc6d84d33aeda2d23be8b26914b9f8 100644 GIT binary patch delta 1994 zcmXAqeN+_Z6~>=kW|*Cs{SaBQQNcv05f&tfd`J}JLqNJLi0(o~5RE}=6-ZTxo}P3u znkHIAn=P6~jDeyDh1L%wdV-n*Xj8O`5NotGCNYv|NTX6|3^Ce=Gk^VN-9fzV49wL!Sz0{k9p^dv+`{)7rC9q$bO#TG>w^2Yr z48l)k0nZd5d^BESfX3VoB+f{O2h%c;u@afDlkur=w2*ll;3>!h0v!1Lp?+4d z8~a}J0}_^^bqm#yig0|Sl7Y`);4;5g197`i1hNKjzdQ#B`Anx=j{s&q(U{Yq(fzS5 z=s++q=C*Em{%|&6o2*+q{Q;0ZTlZ@HVjw6@ch5xGqp#_UKBC<7{-iH^-32UsMgQKC zX~4t@8fO~x&95Y|CCM7oYrGe9HczYmU|b#W+>pkEZjJ6e`qrfbK++n0dpmVbDbv5- z6#^tL)1MZ?SYD34XQu_2bWz{?YrZe~TK`#(gMFyd-`sBnToL*oqx{*}WFL9|KY{sw z_ld0>=6a)#yY)?AoYQA}fed)Yyy0`Pn(0et1YeapO)L>&e|&)rTP4J&aKoHIVcv|r zKx($|rr!dl-z?N@WkZb8kkbRmS6+WSD^3X-xE?k2f!kxYJ1{)YU4JVZVrzZ6=w zb61g#)UlyO4nFvB!6URr>|@2}G|u~4Xl*G5d~XPcHWdKMDxpJtkz*ykvDUve0j*VKYF|Jx;$~`IcQ8)c+m8SlMoHW(@ zlaI}FNm}&<-8dy&s`%t45PVef1*)vo<^tj<}2NN(Kk!>G#0y+M&?bBo)FhPFq zVF>+|B!{hM0Oh(yzZN-jS1l7Qm5Ze|mRT#mxQmIVRmiL7(k^b7ym~q5E6QuWkLK7p z<#lg$(GG?&a!q6`=lL7CsWS&CepT*C_Rtohe5vT?Z0iI0N@P3`=#=kXVMQgK?>c3#mHbg*c_R>KGue z(3miyaaMuGoDt>9Gj0|bqFg;V1X!jhw~qDzG24_o=RI^zj8)aW|6BHSr8@4|S$^=j zTG+=*5;N6JW-1WyH?=0#MIYMLnv4NpmRDnLyjuG>kOuEnx8oKkEm5tr@xpNgtM%cV z`CXsJ+$!~S8RM3elH6Y+t7nq#&~triZ~i(Syx6Sv?i;_a#fole zwCpqr@1(Oe8Af?<7?@gRw7%ibUS=7CPLAiF&mv=Z=zm$rpmD8($~=F-`yXH1xOQW` zPM~x0jZGG&72jz5;O<)9lX2c4$>wpJ?EkLgS?#9yEgU0bp2o4)OvxttEiA&6y74lN zY%{s6Y-h*{jWdEx$4_x6C;p%@I?>dPF@ IczlZU|3{rGkN^Mx delta 2029 zcmXAqeNr6y>l4`VMhgDl2v&TLKKiUnbXVyF6Y?jLhL_vQCI_j#W0 z^E|Wj3*qC7!ahIOMF1}XYK>0&CxBrGpd|z1CBSzDU|I!a?E!+L`MehhOW^s>bb1E> zi@kaOK&SUgplk@pI|}jecAy{xVxI`Cd=sLFEPVmuSl&H_>?KA5bho`eYg}G%#%GjOeAZKC^?w=tuFu?;jUqQ)rNWOe|P-07&%_ciYym zgEoncuTePBYn5&I7;1v0Be&$c&!K#$H9 zAvz1|M9-<6d@qSVIQ!U{W8%Y+b7X_~^M}#Y_?2#qtROm?t{?dH^bZES;Y&ACTBz^W7G{1eR4_bYRC+uLl1 zCI05E0~PGEcgzisU1k52nEMAgMmg)vXV0+u!7rJ|`xuD#bF%&80lxoIwtth%{<uY9f3wpq?>X=1=3vQz5jSgw{gwlLtdCGwUmwvA)Dyrq)#GRe>X6vcK( zu*r4%se;)@Zj6ZLJpV)P7{~{lDe`c#3rHH4FP1(*c~8lgBVsAPO&-6@%*u9=hsci< zVT=JRA67K~c~tX)GB+=ZAO1v{-@t`3FH(tI%F3l@DG8OW4CF_hYx1Ya4>)%yd80g- zwp}S6_XgG%D$jrw@XJ#EmQ4e7zfSFj&WtAIRG>c))2^Hwt7icBmGh|r7tW;O+13Nd zRXXGPbtVSr%5} z4f`|Cxpl6JSNp5!w=9ID{rdCj8Q1brV4+*})bYd45q0FP3Ly70^nk9}V; zqnkRdYc1m6Gk8w1$YT>gc)Z2$)oIi++cN8;nf%k4V+jks&xDRyYI9hb$Ez)S(%iJy zEG^-@R~A}Y1(B>kdXrBJ7Dm6oirDTD85sXH!lg0E>sev~pOOlRzO+6SjO!Lv{6j1sh=b^bh` zq}{Bc-_V0jZ*gh~hLw8vZ1@8!5u-C{i*@E78Q9`h>+*ZlHe=XYGjf6%_FA89q6BiA zwf$EIuwtXN^E@5-wOfZyv2u}h)`>SG`23%Awjsa!o|LY2Z}Wde>|QW4P?&8&F3M4Z fD%7LGJhe-`_%r90*HqP)S2f$FPw!3*NXh#Rq+lm9 diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index caa233d..096568d 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -223,6 +223,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V CrewDatabase + No Crew Aucun crew @@ -362,12 +363,14 @@ et les fichiers de sauvegarde de Grand Theft Auto V + Custom Avatar Custom Avatar Description in SC, don't use Special Character! + Custom Picture Custom Picture Description in SC, don't use Special Character! @@ -389,6 +392,24 @@ When you want to use it as Avatar the image will be detached! + + JsonEditorDialog + + + Snapmatic JSON Editor + + + + + &Save + + + + + &Close + + + MapLocationDialog @@ -422,7 +443,7 @@ When you want to use it as Avatar the image will be detached! - + X: %1 Y: %2 X and Y position @@ -570,56 +591,85 @@ Y: %2 Nom - + + Language for Areas + + + + + Style + + + + + Style: + + + + + Font + Police + + + + Always use Message Font (Windows 2003 and earlier) + + + Language - Langue + Langue + + + + Interface + - Interface + Language for Interface - - + + Current: %1 - - Areas + + Use Default Style (Restart) - + Sync Synchronisation - + Sync is not implemented at current time La synchronisation n'est pas encore implémentée - + Apply changes - + &OK OK, Cancel, Apply &OK - + Discard changes - + &Cancel OK, Cancel, Apply &Annuler @@ -635,37 +685,37 @@ Y: %2 Système - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default Système - + %1 (Closest to Interface) Next closest language compared to the Interface - + Auto Automatic language choice. - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. @@ -678,15 +728,15 @@ Y: %2 Le changement de langue sera actif au prochain lancement de %1. - + No Profile No Profile, as default Aucun profil - - - + + + Profile: %1 Profil : %1 @@ -852,8 +902,8 @@ Y: %2 Exporter comme image &JPG... - - + + Export as &Picture... @@ -862,8 +912,8 @@ Y: %2 Exporter comme &GTA Snapmatic... - - + + Export as &Snapmatic... @@ -872,18 +922,19 @@ Y: %2 Édi&ter - - Open &Map View... - - - - - + + &Edit Properties... Modifier les &propriétés... - + + + Open &Map Viewer... + + + + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -892,31 +943,31 @@ 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 @@ -935,7 +986,7 @@ Appuyer sur 1 pour le mode par défaut Aucun crew - + Unknown Location Emplacement inconnu @@ -968,6 +1019,12 @@ Appuyer sur 1 pour le mode par défaut Failed to export current Snapmatic picture Échec de l'export de la photo Snapmatic + + + + Open &JSON Editor... + + ProfileInterface @@ -1018,35 +1075,35 @@ Appuyer sur 1 pour le mode par défaut Copie du fichier %1 sur %2 - + Enabled pictures: %1 of %2 Photos activées : %1 sur %2 - + Loading... Chargement... - - + + Import... Importer... - - - - - - - - - - - - - + + + + + + + + + + + + + Import Importer @@ -1055,36 +1112,36 @@ Appuyer sur 1 pour le mode par défaut Fichiers de profil GTA (SGTA* PGTA*) - + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) - + All image files (%1) - + All files (**) Tous les fichiers (**) - - + + Import file %1 of %2 files Importation du fichier %1 sur %2 - + Import failed with... %1 @@ -1093,25 +1150,25 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No valid file is selected Fichier invalide - + Importable files (%1) - + Failed to read Snapmatic picture Impossible d'ouvrir la photo Snapmatic - + Failed to read Savegame file Impossible de lire le fichier de sauvegarde @@ -1133,78 +1190,78 @@ Appuyer sur 1 pour le mode par défaut Tous les fichiers image (*.jpg *.png) - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*, *.g5e) - + Failed to import the Snapmatic picture, the picture is already in the game Impossible d'importer la photo Snapmatic, un fichier du même nom existe déjà - + Failed to import the Snapmatic picture, can't copy the file into profile Impossible d'importer la photo Snapmatic, impossible de copier le fichier dans le profil - + Failed to import the Savegame, can't copy the file into profile Impossible d'importer la sauvegarde, impossible de copier le fichier dans le profil - + Failed to import the Savegame, no Savegame slot is left Impossible d'importer la sauvegarde, aucun emplacement libre - - - - + + + + Export selected Exporter la sélection - - + + JPG pictures and GTA Snapmatic Images JPG et GTA Snapmatic - - + + JPG pictures only Images JPG seulement - - + + GTA Snapmatic only GTA Snapmatic seulement - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exporter les photos Snapmatic%2<br><br>Les fichiers JPG permettent d'ouvrir les photos avec une visionneuse d'images<br>Les GTA Snapmatic permettent d'importer les photos dans le jeu<br><br>Exporter comme : - + Export selected... Exporter la sélection... - + Initialising export... @@ -1213,7 +1270,7 @@ Appuyer sur 1 pour le mode par défaut Initialisation de l'export... - + Export failed with... %1 @@ -1222,25 +1279,25 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No Snapmatic pictures or Savegames files are selected Aucun fichier de sauvegarde ou photo Snapmatic sélectionné - - - + + + Remove selected Supprimer la sélection - + You really want remove the selected Snapmatic picutres and Savegame files? Supprimer la sélection ? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Impossible de supprimer la sélection @@ -1250,7 +1307,7 @@ Appuyer sur 1 pour le mode par défaut Tous les fichiers de profil (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1259,15 +1316,20 @@ Appuyer sur 1 pour le mode par défaut QApplication - + Font Police - + Selected Font: %1 Police sélectionnée : %1 + + + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? + + SavegameDialog @@ -1342,7 +1404,7 @@ Appuyer sur 1 pour le mode par défaut Supprimer - + &Export &Exporter @@ -1433,32 +1495,32 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + &View &Voir - + &Remove &Supprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner to&ut - + &Deselect All &Déselectionner tout @@ -1468,8 +1530,13 @@ Appuyer sur 1 pour le mode par défaut - - + + + + + + + Snapmatic Properties Propriétés Snapmatic @@ -1513,7 +1580,7 @@ Appuyer sur 1 pour le mode par défaut Meme - + Snapmatic Title Titre Snapmatic @@ -1524,20 +1591,20 @@ Appuyer sur 1 pour le mode par défaut - + Crew: %1 (%2) Crew : %1 (%2) - + Title: %1 (%2) Titre : %1 (%2) - - + + Appropriate: %1 Valide : %1 @@ -1567,43 +1634,56 @@ 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? + + + + + + Patching of Snapmatic Properties failed because of JSON Error + + + + + + + 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 : @@ -1660,8 +1740,8 @@ Appuyer sur 1 pour le mode par défaut - - + + Delete picture Supprimer la photo @@ -1671,27 +1751,27 @@ 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 - + Edi&t Édi&ter - + Show &In-game &Visible en jeu - + Hide &In-game &Invisible en jeu @@ -1700,7 +1780,7 @@ Appuyer sur 1 pour le mode par défaut Modifier les &propriétés... - + &Export &Exporter @@ -1713,32 +1793,32 @@ Appuyer sur 1 pour le mode par défaut Exporter comme &GTA Snapmatic... - + &View &Voir - + &Remove S&upprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner &tout - + &Deselect All &Déselectionner tout @@ -1912,7 +1992,7 @@ Appuyer sur 1 pour le mode par défaut - + Select GTA V Folder... diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index 8579c33255d6edb154d0109202a0e5d00730acbe..71a4dafadf758d144676dcffe6583704e8e702e4 100644 GIT binary patch delta 2372 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 C@}nI9 diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index f73b9a3..272f721 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -184,6 +184,7 @@ Grand Theft Auto V Snapmatic картинок и ÑохраненийCrewDatabase + No Crew Вне банды @@ -325,12 +326,14 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений + Custom Avatar Custom Avatar Description in SC, don't use Special Character! + Custom Picture Custom Picture Description in SC, don't use Special Character! @@ -352,6 +355,24 @@ When you want to use it as Avatar the image will be detached! Выбрать цвет... + + JsonEditorDialog + + + Snapmatic JSON Editor + + + + + &Save + + + + + &Close + &Закрыть + + MapLocationDialog @@ -392,7 +413,7 @@ Y: %2 - + X: %1 Y: %2 X and Y position @@ -534,56 +555,85 @@ Y: %2 Ð˜Ð¼Ñ - + + Language for Areas + + + + + Style + + + + + Style: + + + + + Font + Шрифт + + + + Always use Message Font (Windows 2003 and earlier) + + + Language - Язык + Язык + + + + Interface + - Interface + Language for Interface - - + + Current: %1 - - Areas + + Use Default Style (Restart) - + Sync Sync - + Sync is not implemented at current time Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ð¾ÐºÐ° ещё не реализована - + Apply changes Применить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ - + &OK OK, Cancel, Apply &ОК - + Discard changes Отвергнуть Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ - + &Cancel OK, Cancel, Apply От&мена @@ -600,37 +650,37 @@ Y: %2 %1 (%2 еÑли имеетÑÑ) - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default СиÑтема - + %1 (Closest to Interface) Next closest language compared to the Interface - + Auto Automatic language choice. - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. Ð”Ñ€ÑƒÐ³Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° будет загружена поÑле перезапуÑка %1. @@ -643,15 +693,15 @@ Y: %2 Язык изменитÑÑ Ð¿Ð¾Ñле перезапуÑка %1. - + No Profile No Profile, as default Ðет Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - - - + + + Profile: %1 Профиль: %1 @@ -731,8 +781,8 @@ Y: %2 ЭкÑп&ортировать как картинку JPG... - - + + Export as &Picture... ЭкÑпортировать как &картинку... @@ -741,8 +791,8 @@ Y: %2 ЭкÑ&портировать как GTA Snapmatic... - - + + Export as &Snapmatic... ЭкÑпортировать как &Snapmatic... @@ -751,18 +801,23 @@ Y: %2 &Правка - Open &Map View... - Открыть &карту... + Открыть &карту... - - + + &Edit Properties... &Изменить ÑвойÑтва... - + + + Open &Map Viewer... + + + + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -771,31 +826,31 @@ Arrow Keys - Navigate Стрелки - ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ - - + + Snapmatic Picture Viewer ПроÑмотрщик фотографий Snapmatic - - + + Failed at %1 Ошибка при %1 - - + + No Crew Вне банды - - + + No Players Игроков нет - + Avatar Preview Mode Press 1 for Default View Режим проÑмотра аватарок @@ -810,7 +865,7 @@ Press 1 for Default View Без группы - + Unknown Location ÐеизвеÑтное меÑто @@ -947,6 +1002,12 @@ Press 1 for Default View Failed to copy current Snapmatic picture Ðе удалоÑÑŒ Ñкопировать текущую картинку Snapmatic + + + + Open &JSON Editor... + + ProfileInterface @@ -998,30 +1059,30 @@ Press 1 for Default View Закрыть профиль - + Loading... Загрузка... - - + + Import... Импортировать... - - - - - - - - - - - - - + + + + + + + + + + + + + Import Импортировать @@ -1030,31 +1091,31 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (SGTA* PGTA*) - + Savegames files (SGTA*) Файлы ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ (SGTA*) - + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) - + All files (**) Ð’Ñе файлы (**) - - + + Import file %1 of %2 files ИмпортируютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ %1 из %2 - + Import failed with... %1 @@ -1063,13 +1124,13 @@ Press 1 for Default View %1 - + Failed to read Snapmatic picture Ðе удалоÑÑŒ загрузить картинку Snapmatic - + Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ @@ -1079,14 +1140,14 @@ Press 1 for Default View Ðе получилоÑÑŒ импортировать %1 из-за неправильного формата файла - - + + No valid file is selected Выбранный файл неверен - + Enabled pictures: %1 of %2 Включенные картинки: %1 из %2 @@ -1099,93 +1160,93 @@ Press 1 for Default View Ð’Ñе Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (*.jpg *.png) - + Importable files (%1) Файлы Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° (%1) - + All image files (%1) Ð’Ñе файлы изображений (%1) - + Can't import %1 because file can't be parsed properly Ðе получилоÑÑŒ импортировать %1, файл не может быть правильно обработан - + Can't import %1 because file format can't be detected Ðе получилоÑÑŒ импортировать %1, не удалоÑÑŒ определить формат файла - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе удалоÑÑŒ импортировать картинку Snapmatic, название не начинаетÑÑ Ñ PGTA или не заканчиваетÑÑ Ñ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе удалоÑÑŒ импортировать картинку Snapmatic, картинка уже в игре - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе удалоÑÑŒ импортировать картинку Snapmatic, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, can't copy the file into profile Ðе удалоÑÑŒ импортировать Ñохранение, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, no Savegame slot is left Ðе удалоÑÑŒ импортировать Ñохранение, нет пуÑтых Ñчеек под ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + JPG pictures and GTA Snapmatic Картинки JPG и GTA Snapmatic - - + + JPG pictures only Только картинки JPG - - + + GTA Snapmatic only Только GTA Snapmatic - + Initialising export... Подготовка к ÑкÑпорту... - - + + No Snapmatic pictures or Savegames files are selected Ðе выделены ни один Snapmatic или Ñохранение - - - + + + Remove selected СнÑть выделение - + You really want remove the selected Snapmatic picutres and Savegame files? Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Ðе удалоÑÑŒ удалить полноÑтью выбранные картинки Snapmatic и/или файлы Ñохранений @@ -1206,20 +1267,20 @@ Press 1 for Default View Ðе получилоÑÑŒ имортировать копию ÑохранениÑ, потому что не оÑталоÑÑŒ Ñвободных под них Ñлотов - - - - + + + + Export selected ЭкÑпортировать выделенное - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1ЭÑкпортировать картинки Snapmatic%2<br><br>Картинки JPG можно открыть любым проÑмотрщиком<br>Картинки формата GTA Snapmatic можно Ñнова импортировать в игру<br><br>ЭкÑпортировать как: - + Export selected... Экпортировать выделенное... @@ -1228,7 +1289,7 @@ Press 1 for Default View Подготавливаю ÑÑкпорт... - + Export failed with... %1 @@ -1249,7 +1310,7 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1258,15 +1319,20 @@ Press 1 for Default View QApplication - + Font Шрифт - + Selected Font: %1 Выбранный шрифт: %1 + + + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? + + SavegameDialog @@ -1400,32 +1466,32 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить Ñохранение %1 - + &View &ПроÑмотр - + &Remove &Удалить - + &Select &Выбрать - + &Deselect Сн&Ñть выбор - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1435,7 +1501,7 @@ Press 1 for Default View Копировать Ñохранение - + &Export &ЭкÑпортировать @@ -1495,8 +1561,13 @@ Press 1 for Default View - - + + + + + + + Snapmatic Properties СвойÑтва Snapmatic @@ -1537,7 +1608,7 @@ Press 1 for Default View - + Crew: %1 (%2) Банда: %1 (%2) @@ -1547,20 +1618,20 @@ Press 1 for Default View Meme - + Snapmatic Title Заголовок Snapmatic - + Title: %1 (%2) Заголовок: %1 (%2) - - + + Appropriate: %1 Подходит: %1 @@ -1590,41 +1661,54 @@ 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 JSON Error + + + + + + + Patching of Snapmatic Properties failed because of I/O Error Ðе удалоÑÑŒ измененить ÑвойÑтва Snapmatic из-за проблемы ввода/вывода - + New Snapmatic title: Ðовый заголовок Snapmatic: - + Snapmatic Crew Банда на Snapmatic - + New Snapmatic crew: ÐÐ¾Ð²Ð°Ñ Ð±Ð°Ð½Ð´Ð° на Snapmatic: @@ -1676,33 +1760,33 @@ 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 - + Edi&t &Правка - + Show &In-game Показывать в &игре - + Hide &In-game Ск&рыть в игре @@ -1711,7 +1795,7 @@ Press 1 for Default View &Изменить ÑвойÑтва... - + &Export &ЭкÑпорт @@ -1724,32 +1808,32 @@ Press 1 for Default View ЭкÑ&портировать как GTA Snapmatic... - + &View По&казать - + &Remove У&далить - + &Select &Выделить - + &Deselect Сн&Ñть выделение - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1977,7 +2061,7 @@ Press 1 for Default View - + Select GTA V Folder... From eeb0c01a5f9e802292c9f647c66116ba47768c80 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 22 Nov 2017 20:23:36 +0100 Subject: [PATCH 017/359] repair broken Snapmatics and fix Snapmatic format issue --- .travis.yml | 8 +- PictureDialog.cpp | 11 ++- ProfileInterface.cpp | 23 ++++++ ProfileInterface.h | 2 + ProfileLoader.cpp | 8 ++ ProfileLoader.h | 1 + SnapmaticPicture.cpp | 68 +++++++++++++++-- SnapmaticPicture.h | 6 ++ SnapmaticWidget.cpp | 2 +- config.h | 2 +- res/app.rc | 4 +- res/gta5sync_de.qm | Bin 35652 -> 35946 bytes res/gta5sync_de.ts | 174 ++++++++++++++++++++++-------------------- res/gta5sync_en_US.qm | Bin 18239 -> 18413 bytes res/gta5sync_en_US.ts | 174 ++++++++++++++++++++++-------------------- res/gta5sync_fr.qm | Bin 26755 -> 26687 bytes res/gta5sync_fr.ts | 174 ++++++++++++++++++++++-------------------- res/gta5sync_ru.qm | Bin 32511 -> 32539 bytes res/gta5sync_ru.ts | 174 ++++++++++++++++++++++-------------------- 19 files changed, 487 insertions(+), 344 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7969f5b..1d9d418 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,14 +32,14 @@ before_script: script: - cd qt5 - - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev4\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev5\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev4 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev5 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package - cd .. - cd qt4 - - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev4\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev5\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev4 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev5 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package - cd .. deploy: diff --git a/PictureDialog.cpp b/PictureDialog.cpp index 1e8837c..e5124ed 100755 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -763,7 +763,16 @@ void PictureDialog::editSnapmaticProperties() void PictureDialog::editSnapmaticRawJson() { SnapmaticPicture *picture = smpic; - JsonEditorDialog *jsonEditor = new JsonEditorDialog(picture, this); + JsonEditorDialog *jsonEditor; + if (rqFullscreen && fullscreenWidget != nullptr) + { + jsonEditor = new JsonEditorDialog(picture, fullscreenWidget); + } + else + { + jsonEditor = new JsonEditorDialog(picture, this); + } + jsonEditor->setWindowIcon(windowIcon()); jsonEditor->setModal(true); jsonEditor->show(); jsonEditor->exec(); diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 50ea5c5..a315b5a 100755 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -131,10 +131,12 @@ void ProfileInterface::setProfileFolder(QString folder, QString profile) void ProfileInterface::setupProfileInterface() { + fixedPictures.clear(); ui->labProfileLoading->setText(tr("Loading...")); profileLoader = new ProfileLoader(profileFolder, crewDB); QObject::connect(profileLoader, SIGNAL(savegameLoaded(SavegameData*, QString)), this, SLOT(savegameLoaded_event(SavegameData*, QString))); QObject::connect(profileLoader, SIGNAL(pictureLoaded(SnapmaticPicture*)), this, SLOT(pictureLoaded_event(SnapmaticPicture*))); + QObject::connect(profileLoader, SIGNAL(pictureFixed(SnapmaticPicture*)), this, SLOT(pictureFixed_event(SnapmaticPicture*))); QObject::connect(profileLoader, SIGNAL(loadingProgress(int,int)), this, SLOT(loadingProgress(int,int))); QObject::connect(profileLoader, SIGNAL(finished()), this, SLOT(profileLoaded_p())); profileLoader->start(); @@ -169,6 +171,12 @@ void ProfileInterface::pictureLoaded_event(SnapmaticPicture *picture) pictureLoaded(picture, false); } +void ProfileInterface::pictureFixed_event(SnapmaticPicture *picture) +{ + QString fixedPicture = picture->getPictureStr() % " (" % picture->getPictureTitl() % ")"; + fixedPictures << fixedPicture; +} + void ProfileInterface::pictureLoaded(SnapmaticPicture *picture, bool inserted) { SnapmaticWidget *picWidget = new SnapmaticWidget(profileDB, crewDB, threadDB, this); @@ -342,6 +350,19 @@ void ProfileInterface::profileLoaded_p() ui->cmdImport->setEnabled(true); isProfileLoaded = true; emit profileLoaded(); + + if (!fixedPictures.isEmpty()) + { + int fixedInt = 0; + QString fixedStr; + for (QString fixedPicture : fixedPictures) + { + if (fixedInt != 0) { fixedStr += "
"; } + fixedStr += fixedPicture; + fixedInt++; + } + QMessageBox::information(this, tr("Snapmatic Loader"), tr("

Following Snapmatic Pictures got repaired

%1").arg(fixedStr)); + } } void ProfileInterface::savegameDeleted_event() @@ -755,6 +776,7 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime bool ProfileInterface::importSnapmaticPicture(SnapmaticPicture *picture, bool warn) { QString picFileName = picture->getPictureFileName(); + qDebug() << picFileName; QString adjustedFileName = picture->getOriginalPictureFileName(); if (picFileName.left(4) != "PGTA") { @@ -768,6 +790,7 @@ bool ProfileInterface::importSnapmaticPicture(SnapmaticPicture *picture, bool wa } else if (picture->exportPicture(profileFolder % "/" % adjustedFileName, SnapmaticFormat::PGTA_Format)) { + picture->setSnapmaticFormat(SnapmaticFormat::PGTA_Format); picture->setPicFilePath(profileFolder % "/" % adjustedFileName); pictureLoaded(picture, true); return true; diff --git a/ProfileInterface.h b/ProfileInterface.h index 8ccf76b..ad0f666 100755 --- a/ProfileInterface.h +++ b/ProfileInterface.h @@ -69,6 +69,7 @@ private slots: void on_cmdCloseProfile_clicked(); void on_cmdImport_clicked(); void pictureLoaded_event(SnapmaticPicture *picture); + void pictureFixed_event(SnapmaticPicture *picture); void savegameLoaded_event(SavegameData *savegame, QString savegamePath); void loadingProgress(int value, int maximum); void pictureDeleted_event(); @@ -95,6 +96,7 @@ private: QList pictures; QMap widgets; QSpacerItem *saSpacerItem; + QStringList fixedPictures; QColor highlightBackColor; QColor highlightTextColor; QString enabledPicStr; diff --git a/ProfileLoader.cpp b/ProfileLoader.cpp index ec7b28a..3874140 100755 --- a/ProfileLoader.cpp +++ b/ProfileLoader.cpp @@ -78,6 +78,14 @@ void ProfileLoader::run() SnapmaticPicture *picture = new SnapmaticPicture(picturePath); if (picture->readingPicture(true, true, true)) { + if (picture->isFormatSwitched()) + { + picture->setSnapmaticFormat(SnapmaticFormat::PGTA_Format); + if (picture->exportPicture(picturePath, SnapmaticFormat::PGTA_Format)) + { + emit pictureFixed(picture); + } + } emit pictureLoaded(picture); int crewNumber = picture->getSnapmaticProperties().crewID; if (!crewList.contains(crewNumber)) diff --git a/ProfileLoader.h b/ProfileLoader.h index 4de52fe..472c27d 100755 --- a/ProfileLoader.h +++ b/ProfileLoader.h @@ -45,6 +45,7 @@ private slots: signals: void pictureLoaded(SnapmaticPicture *picture); + void pictureFixed(SnapmaticPicture *picture); void savegameLoaded(SavegameData *savegame, QString savegamePath); void loadingProgress(int value, int maximum); }; diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp index 4d9147e..a25b7f0 100755 --- a/SnapmaticPicture.cpp +++ b/SnapmaticPicture.cpp @@ -91,6 +91,7 @@ void SnapmaticPicture::reset() // INIT PIC BOOLS isCustomFormat = false; + isFormatSwitch = false; isLoadedInRAM = false; lowRamMode = false; picOk = false; @@ -115,6 +116,9 @@ bool SnapmaticPicture::preloadFile() QFile *picFile = new QFile(picFilePath); picFileName = QFileInfo(picFilePath).fileName(); + bool g5eMode = false; + isFormatSwitch = false; + if (!picFile->open(QFile::ReadOnly)) { lastStep = "1;/1,OpenFile," % StringParser::convertDrawStringForLog(picFilePath); @@ -123,19 +127,38 @@ bool SnapmaticPicture::preloadFile() } if (picFilePath.right(4) != QLatin1String(".g5e")) { - rawPicContent = picFile->read(snapmaticFileMaxSize); + rawPicContent = picFile->read(snapmaticFileMaxSize + 1024); picFile->close(); delete picFile; - // Setting is values - isCustomFormat = false; - isLoadedInRAM = true; + if (rawPicContent.mid(1, 3) == QByteArray("G5E")) + { + isFormatSwitch = true; + } + else + { + isCustomFormat = false; + isLoadedInRAM = true; + } } else { - QByteArray g5eContent = picFile->read(snapmaticFileMaxSize + 1024); - picFile->close(); - delete picFile; + g5eMode = true; + } + if (g5eMode || isFormatSwitch) + { + QByteArray g5eContent; + if (!isFormatSwitch) + { + g5eContent = picFile->read(snapmaticFileMaxSize + 1024); + picFile->close(); + delete picFile; + } + else + { + g5eContent = rawPicContent; + rawPicContent.clear(); + } // Set Custom Format isCustomFormat = true; @@ -1191,6 +1214,37 @@ void SnapmaticPicture::setSnapmaticDefaultsEnforced(bool enforced) careSnapDefault = enforced; } +// SNAPMATIC FORMAT + +SnapmaticFormat SnapmaticPicture::getSnapmaticFormat() +{ + if (isCustomFormat) + { + return SnapmaticFormat::G5E_Format; + } + return SnapmaticFormat::PGTA_Format; +} + +void SnapmaticPicture::setSnapmaticFormat(SnapmaticFormat format) +{ + if (format == SnapmaticFormat::G5E_Format) + { + isCustomFormat = true; + return; + } + else if (format == SnapmaticFormat::PGTA_Format) + { + isCustomFormat = false; + return; + } + qDebug() << "setSnapmaticFormat: Invalid SnapmaticFormat defined, valid SnapmaticFormats are G5E_Format and PGTA_Format"; +} + +bool SnapmaticPicture::isFormatSwitched() +{ + return isFormatSwitch; +} + // VERIFY CONTENT bool SnapmaticPicture::verifyTitle(const QString &title) diff --git a/SnapmaticPicture.h b/SnapmaticPicture.h index 206a9ec..c41015f 100755 --- a/SnapmaticPicture.h +++ b/SnapmaticPicture.h @@ -111,6 +111,11 @@ public: bool isSnapmaticDefaultsEnforced(); void setSnapmaticDefaultsEnforced(bool enforced); + // SNAPMATIC FORMAT + SnapmaticFormat getSnapmaticFormat(); + void setSnapmaticFormat(SnapmaticFormat format); + bool isFormatSwitched(); + // VERIFY CONTENT static bool verifyTitle(const QString &title); @@ -134,6 +139,7 @@ private: bool cacheEnabled; bool isLoadedInRAM; bool isCustomFormat; + bool isFormatSwitch; bool careSnapDefault; int jpegRawContentSize; int jpegRawContentSizeE; diff --git a/SnapmaticWidget.cpp b/SnapmaticWidget.cpp index 789c2e9..23210d5 100755 --- a/SnapmaticWidget.cpp +++ b/SnapmaticWidget.cpp @@ -72,7 +72,7 @@ void SnapmaticWidget::setSnapmaticPicture(SnapmaticPicture *picture) ui->labPicture->setFixedSize(48 * screenRatio, 27 * screenRatio); QPixmap SnapmaticPixmap = QPixmap::fromImage(picture->getImage().scaled(ui->labPicture->width(), ui->labPicture->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation), Qt::AutoColor); - ui->labPicStr->setText(smpic->getPictureStr() % "\n" % smpic->getPictureTitl() % ""); + ui->labPicStr->setText(smpic->getPictureStr() % "\n" % smpic->getPictureTitl()); ui->labPicture->setPixmap(SnapmaticPixmap); picture->clearCache(); diff --git a/config.h b/config.h index 0848287..7740d23 100755 --- a/config.h +++ b/config.h @@ -50,7 +50,7 @@ #ifndef GTA5SYNC_APPVER #ifndef GTA5SYNC_DAILYB -#define GTA5SYNC_APPVER "1.5.0-dev4" +#define GTA5SYNC_APPVER "1.5.0-dev5" #else #define GTA5SYNC_APPVER GTA5SYNC_DAILYB #endif diff --git a/res/app.rc b/res/app.rc index 3cfc1b1..7e7ea47 100755 --- a/res/app.rc +++ b/res/app.rc @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view\0" - VALUE "FileVersion", "1.5.0-dev4\0" + VALUE "FileVersion", "1.5.0-dev5\0" VALUE "InternalName", "gta5view\0" VALUE "LegalCopyright", "Copyright © 2016-2017 Syping\0" VALUE "OriginalFilename", "gta5view.exe\0" VALUE "ProductName", "gta5view\0" - VALUE "ProductVersion", "1.5.0-dev4\0" + VALUE "ProductVersion", "1.5.0-dev5\0" END END END diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index dcb336bee2c3375338532808ab313a139c686fb9..77abfa839cca02c56cd76a90491146039927befc 100755 GIT binary patch delta 2382 zcmYL~dsGzn7016jJIn6O?6QK31Of_`*`L{p5mg+u?D_m==l8q6`}p2F z-TRm)`v;+`I_v?F7K-j>yE9kcDW0 zHIpEVB2IOO>_j-=E{Ck|3XsK!EI9&2LpVqtfTOmxFBUvWWhYln?r`87elAN1*|`b z$Zf><97N3?0<0v6Zl-6G&XO*1$z1J=!`U`Kk{?=jkXc18&b}-Gg7#qK7Hv~T;_)FF zuvUlXh9$t%7g*jS($OeS$YIt_UDj%0PxIK{1%6wUfK#l6dNPhy|(56Snc zlR(S>ffK-%+~7kx9Eky9?JdIq{T@+%zVCTLSR=8$>4GWsa21r6e?p%(`PqWM-R_b}`3h*8-(IOiRWHu)@H!wrYV7)XbSKcOboy zxxh{b^g~R~J~a^B&h!=1`^}q}2R+fiwE4`Vk2OF^0`qgY0Z`9kUIk1B@*hd1j-LT` zIw|+@AW-x~I_2scV8%|VLow}he=XIPjAJrN?n@I}{s4I1mFAYZ0UOp?oTV;-p_`;P zDkywKA8RF0lKsDAy$WrCWnQfI)q5m@2sU`ZI3+8Xjhj;stjf0NrJm*u|6!Y}DTf

=)haXs6-8^lkE65?eRZ%kodw)4aq_zHW$AI`191@#{yxoX7G#^(Ex!QhDu-T55(+dDBHISot&g z$>=evQ=q(cAP9)NA@AxUVL0jJ4`Zo29lwx|oHGN7QiUvn3Re79;e6R22;Zn!@Un?A z*RELjqJe~#tcW?%2NaYl@*5gqM(i<#@uD7Bxk6Fl_BX%~q`1&EK#^(`U2SAYKBTzZ zO(|b+Q1Pst9CEPX>^m>gzE3&(dtr1@IOkG20=RT?o7eX%gLTnD$>cq1qP7v zf|Iz}J9I#7DmT0T94WJ#i>#|AkIQ#+u{Axwk}@t`ehP3)=Q8Uk!i)|sFX}mYT+QXJ zCdzs_(~p7F$6Bstcc1GL>e0Z+PUrS@6n`^pA88zE;Jz-=&^%U1T z{1(Vg=K9kXlV-MYxBY{G>HXZZ+h$5lWfd(B6MJ~cD0#l(6)$;8OpE1JcGJj_<-BVw zUF>#~_o!GzCCcIhf~XXk*ZB8WA0TcNS$smI`3@gDO8YWx_@&=cDJRY0lb=}w6+8Lm z-%2lPfykt*B2(-|8aMKNpH$QAxyIj~nn*M16@Ta03o6+)e)x0B@b9khqrJRkacTlc! zrwl8mD2t-Cv{-aRxg)%mQtPR#^P^`WN_jxSlGt{MG>j>m)D%hldFAmO+KT zIq!kWE0~&QidN1?YN{lELcRaWN+93^ z^`WC-ZItlEo$CG@t)$Um^>Y_;_%}o9@jv;~_b4QnbeSTh+1&+? zQxZONp2J#%AO}GRMFfnEJvRYS$5|}3bq*t!A(xU(w#9UgL zP)sIf{A$DlGZkbWR`d%B$q5RLFy`eM%W@5CT$dR#3i30GbF*CIalyZ<;u9Dl2Ws F|G(q%s+#}+ delta 2056 zcmXAqdsGv57RSGt%#h4X!iWYrB8ehPY6AvW3~09~j|EZ02ND$(#ULmO0fgYIHBh(5 zrFCi9l;XB_TNLX9)>`p_Qt+5U1+j!>DaY>W+1f)^Sz9S?sr7MmFV0_|On!HM_jkYd z`@8esgG~GT%)2_pch&wzX7jA-7&B9lUtM5u7KMRrVS$`9upZ*;kzfbXfuI{Q(+9!5 zYN7SV;F5_`LcpC)076vYJXe8@KgcZoGt_lyfL?>?v)%w+886c@4yN;ofG!lKu{>q3 z!ZenrY!^(up;&<(6JYvbCa@z3VFx>a2?~U@E(9V^AZ#qb>dP_!BCBWQfg>W+*Sk)xc9w5^(tk9pB228%8$Xz)~bz2lAkv{`AhwGLiVB=K9 zPukCc#S#p z3-d|VZvnGi=E|>_<2&Y(2uEbv+%78<<+M7OlTkH*qlszU=mplSX3m|n0GW@N^X?E} z-Jh5?_GMsGH`DdL1Vpzmo?=>meKYg#t`uO}eCGR4bwKGn=23zjkRq8UGbaG~*Okh^ zQ-FV>lK=D@V0*uEV&^j;;w|N*Qi=E9&3N=58jgA{7k%HM}b3O((EO8Ymjn3V7*oG?7ZqH;QE$?}o z_>lO7_y~9{g7}=6%{IIPVl7cY>?SIS&)LTCqg4JWnMHqN8yhmI^&{+O`&I$sdu)qn zBd=DmZ6D7Da!stK>^;DA{RN#^TPgohY-c^q`zWxTy_?xWrv8QfwXd7#VxL|j-FDY- z?AVJbJ)G`%Ex>P)X}Qm>>2Xs%|KSQg$p+$Xa!#`q7;obag;PP>qPe=q=|JKeTzy3b zd31zpWZokEzu``wY;{$$f#b_g`=n)t0t=4$WHW_8TEDB6HI84_r4mL5|%S*mk=vw>xz%I&7U2PLY$OQp*f_=U=Q z(Fv^hQOzY$KT3ww`VKP?e^DLxxSj-RQO7^1BOk@77a#Wkg<0x?x+7%YJLbbesL`y)q9cr)y^-dt)lbq;!~@;fYh^mrm6`D&g5;iR7ch^K0kSc z&b5=z&n0r*{Pu^l=rT@mrTQ40#i#iCD@#Ze1>Y4*Wd~E$$@RXeegd&;NGcs2zWZH8D&oPq8@0u_$#Y)q| zE8IBwfYiPw44xs`ma@W7_X=Q1rKmW+m!5k>WvmXaGpb3>)epsezNAHPjd;M4PS(p3 z4rV%4)Cx^qj#cQ8o2ELK0Q0JLkxnt-{~a+`Q4><{!_g-rWh z@!~!MFhdaA3aGYnBa!xX4v6jZhG>%MMNjEoIN_AUzK?Qfrj(2SsG+&NZIAd%%Rk9; z3Ymc~Y1j`EX(qL4_$!_%rsZfav}Vxv zC`D#Uf%eM`f4T~9YX|LgcM^hp*|FL8dzBho4)? zy`56S*OYMTXVRC=B=o|kQg6>WAZ$ - + 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 @@ -974,7 +974,7 @@ Y: %2 - + Export as &Picture... Als &Bild exportieren... @@ -984,7 +984,7 @@ Y: %2 - + Export as &Snapmatic... Als &Snapmatic exportieren... @@ -998,7 +998,7 @@ Y: %2 - + &Edit Properties... Eigenschaften bearb&eiten... @@ -1013,7 +1013,7 @@ Y: %2 - + Open &Map Viewer... &Kartenansicht öffnen... @@ -1267,7 +1267,7 @@ Drücke A für Standardansicht - + Open &JSON Editor... &JSON Editor öffnen... @@ -1331,30 +1331,40 @@ Drücke A für Standardansicht Profil schließen - + Loading... Lade... - - + + Snapmatic Loader + Snapmatic Lader + + + + <h4>Following Snapmatic Pictures got repaired</h4>%1 + <h4>Folgende Snapmatic Bilder wurden repariert</h4>%1 + + + + Import... Importieren... - - - - - - - - - - - - - + + + + + + + + + + + + + Import Importieren @@ -1367,13 +1377,13 @@ Drücke A für Standardansicht Importfähige Dateien (*.g5e *.jpg *.png SGTA* PGTA*) - + Savegames files (SGTA*) Spielstanddateien (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) @@ -1383,29 +1393,29 @@ Drücke A für Standardansicht Alle Bilddateien (*.jpg *.png) - + Importable files (%1) Importfähige Dateien (%1) - + All image files (%1) Alle Bilddateien (%1) - + All files (**) Alle Dateien (**) - - + + Import file %1 of %2 files Importiere Datei %1 von %2 Dateien - + Import failed with... %1 @@ -1414,29 +1424,29 @@ Drücke A für Standardansicht %1 - + 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 parsed properly Kann %1 nicht importieren weil die Datei nicht richtig gelesen werden kann - + Can't import %1 because file format can't be detected Kann %1 nicht importieren weil das Dateiformat nicht erkannt werden kann - + Initialising export... Initialisiere Export... @@ -1445,23 +1455,23 @@ Drücke A für Standardansicht Kann %1 nicht importieren weil das Dateiformat nicht gültig ist - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA oder endet mit .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Fehlgeschlagen beim Importieren vom Snapmatic Bild, dieses Bild ist bereits im Spiel - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exportiere Snapmatic Bilder%2<br><br>JPG Bilder machen es möglich sie mit ein Bildansicht Programm zu öffnen<br>Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren<br><br>Exportieren als: - - + + No valid file is selected Keine gültige Datei wurde ausgewählt @@ -1476,35 +1486,35 @@ Drücke A für Standardansicht Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA - + Failed to import the Snapmatic picture, can't copy the file into profile Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren - + Failed to import the Savegame, can't copy the file into profile Fehlgeschlagen beim Importieren vom Spielstand, kann Spielstanddatei nicht ins Profil kopieren - + Failed to import the Savegame, no Savegame slot is left Fehlgeschlagen beim Importieren vom Spielstand, kein Spielstandslot mehr frei - - + + JPG pictures and GTA Snapmatic JPG Bilder und GTA Snapmatic - - + + JPG pictures only Nur JPG Bilder - - + + GTA Snapmatic only Nur GTA Snapmatic @@ -1523,25 +1533,25 @@ Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren Exportieren als: - - + + No Snapmatic pictures or Savegames files are selected Keine Snapmatic Bilder oder Spielstände ausgewählt - - - + + + Remove selected Auswahl löschen - + You really want remove the selected Snapmatic picutres and Savegame files? Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Fehlgeschlagen beim kompletten entfernen der ausgewählten Snapmatic Bilder und/oder der Spielstanddateien @@ -1562,10 +1572,10 @@ Exportieren als: Fehlgeschlagenen beim Import vom Spielstand weil kein Spielstandslot mehr übrig ist - - - - + + + + Export selected Auswahl exportieren @@ -1586,7 +1596,7 @@ Exportieren als: Wie sollen wir mit den Snapmatic Bilder umgehen? - + Export selected... Auswahl exportieren... @@ -1599,7 +1609,7 @@ Exportieren als: Initialisierung... - + Export failed with... %1 @@ -1634,7 +1644,7 @@ Exportieren als: Alle Profildateien (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1803,32 +1813,32 @@ Exportieren als: Fehlgeschlagen beim Löschen %1 von deinen Spielständen - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All &Alles auswählen - + &Deselect All Alles a&bwählen @@ -1867,7 +1877,7 @@ Exportieren als: Spielstand kopieren - + &Export &Exportieren @@ -2110,7 +2120,7 @@ Exportieren als: SnapmaticPicture - + PHOTO - %1 FOTO - %1 @@ -2160,7 +2170,7 @@ Exportieren als: Bist du sicher %1 von deine Snapmatic Bilder zu löschen? - + Edi&t Bearbei&ten @@ -2173,7 +2183,7 @@ Exportieren als: &Im Spiel deaktivieren - + &Export &Exportieren @@ -2186,12 +2196,12 @@ Exportieren als: Exportiere als &GTA Snapmatic - + Show &In-game &Im Spiel anzeigen - + Hide &In-game &Im Spiel ausblenden @@ -2224,32 +2234,32 @@ Exportieren als: Exportiere als &Snapmatic... - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All Alles &auswählen - + &Deselect All Alles a&bwählen diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm index f097a03af3f3321ccba17fb238037e4e7d104ed9..a017ab7fb6f68d45df27e8578c6f80bd1e12bf79 100644 GIT binary patch delta 2371 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 - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! @@ -624,25 +624,25 @@ Y: %2 - + Export as &Picture... - + Export as &Snapmatic... - + &Edit Properties... - + Open &Map Viewer... @@ -793,7 +793,7 @@ Press 1 for Default View - + Open &JSON Editor... @@ -848,202 +848,212 @@ Press 1 for Default View - + Loading... - - + + Snapmatic Loader + + + + + <h4>Following Snapmatic Pictures got repaired</h4>%1 + + + + + Import... - - - - - - - - - - - - - + + + + + + + + + + + + + Import - + Importable files (%1) - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) - + All image files (%1) - + All files (**) - - + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - + Failed to read Snapmatic picture - + Failed to read Savegame file - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - - - + + + + Export selected - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - + Export selected... - + Initialising export... Initializing export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - - + + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files @@ -1144,37 +1154,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1423,7 +1433,7 @@ Press 1 for Default View SnapmaticPicture - + PHOTO - %1 @@ -1483,52 +1493,52 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index 53ccfdd44cfc6d84d33aeda2d23be8b26914b9f8..1750a3e81909b81a84f8b685ddb765cde1b67899 100644 GIT binary patch delta 2029 zcmXAqeNr6y>l4`VMhgDl2v&TLKKiUnbXVyF6Y?jLhL_vQCI_j#W0 z^E|Wj3*qC7!ahIOMF1}XYK>0&CxBrGpd|z1CBSzDU|I!a?E!+L`MehhOW^s>bb1E> zi@kaOK&SUgplk@pI|}jecAy{xVxI`Cd=sLFEPVmuSl&H_>?KA5bho`eYg}G%#%GjOeAZKC^?w=tuFu?;jUqQ)rNWOe|P-07&%_ciYym zgEoncuTePBYn5&I7;1v0Be&$c&!K#$H9 zAvz1|M9-<6d@qSVIQ!U{W8%Y+b7X_~^M}#Y_?2#qtROm?t{?dH^bZES;Y&ACTBz^W7G{1eR4_bYRC+uLl1 zCI05E0~PGEcgzisU1k52nEMAgMmg)vXV0+u!7rJ|`xuD#bF%&80lxoIwtth%{<uY9f3wpq?>X=1=3vQz5jSgw{gwlLtdCGwUmwvA)Dyrq)#GRe>X6vcK( zu*r4%se;)@Zj6ZLJpV)P7{~{lDe`c#3rHH4FP1(*c~8lgBVsAPO&-6@%*u9=hsci< zVT=JRA67K~c~tX)GB+=ZAO1v{-@t`3FH(tI%F3l@DG8OW4CF_hYx1Ya4>)%yd80g- zwp}S6_XgG%D$jrw@XJ#EmQ4e7zfSFj&WtAIRG>c))2^Hwt7icBmGh|r7tW;O+13Nd zRXXGPbtVSr%5} z4f`|Cxpl6JSNp5!w=9ID{rdCj8Q1brV4+*})bYd45q0FP3Ly70^nk9}V; zqnkRdYc1m6Gk8w1$YT>gc)Z2$)oIi++cN8;nf%k4V+jks&xDRyYI9hb$Ez)S(%iJy zEG^-@R~A}Y1(B>kdXrBJ7Dm6oirDTD85sXH!lg0E>sev~pOOlRzO+6SjO!Lv{6j1sh=b^bh` zq}{Bc-_V0jZ*gh~hLw8vZ1@8!5u-C{i*@E78Q9`h>+*ZlHe=XYGjf6%_FA89q6BiA zwf$EIuwtXN^E@5-wOfZyv2u}h)`>SG`23%Awjsa!o|LY2Z}Wde>|QW4P?&8&F3M4Z fD%7LGJhe-`_%r90*HqP)S2f$FPw!3*NXh#Rq+lm9 delta 1994 zcmXAqeN+_Z6~>=kW|*Cs{SaBQQNcv05f&tfd`J}JLqNJLi0(o~5RE}=6-ZTxo}P3u znkHIAn=P6~jDeyDh1L%wdV-n*Xj8O`5NotGCNYv|NTX6|3^Ce=Gk^VN-9fzV49wL!Sz0{k9p^dv+`{)7rC9q$bO#TG>w^2Yr z48l)k0nZd5d^BESfX3VoB+f{O2h%c;u@afDlkur=w2*ll;3>!h0v!1Lp?+4d z8~a}J0}_^^bqm#yig0|Sl7Y`);4;5g197`i1hNKjzdQ#B`Anx=j{s&q(U{Yq(fzS5 z=s++q=C*Em{%|&6o2*+q{Q;0ZTlZ@HVjw6@ch5xGqp#_UKBC<7{-iH^-32UsMgQKC zX~4t@8fO~x&95Y|CCM7oYrGe9HczYmU|b#W+>pkEZjJ6e`qrfbK++n0dpmVbDbv5- z6#^tL)1MZ?SYD34XQu_2bWz{?YrZe~TK`#(gMFyd-`sBnToL*oqx{*}WFL9|KY{sw z_ld0>=6a)#yY)?AoYQA}fed)Yyy0`Pn(0et1YeapO)L>&e|&)rTP4J&aKoHIVcv|r zKx($|rr!dl-z?N@WkZb8kkbRmS6+WSD^3X-xE?k2f!kxYJ1{)YU4JVZVrzZ6=w zb61g#)UlyO4nFvB!6URr>|@2}G|u~4Xl*G5d~XPcHWdKMDxpJtkz*ykvDUve0j*VKYF|Jx;$~`IcQ8)c+m8SlMoHW(@ zlaI}FNm}&<-8dy&s`%t45PVef1*)vo<^tj<}2NN(Kk!>G#0y+M&?bBo)FhPFq zVF>+|B!{hM0Oh(yzZN-jS1l7Qm5Ze|mRT#mxQmIVRmiL7(k^b7ym~q5E6QuWkLK7p z<#lg$(GG?&a!q6`=lL7CsWS&CepT*C_Rtohe5vT?Z0iI0N@P3`=#=kXVMQgK?>c3#mHbg*c_R>KGue z(3miyaaMuGoDt>9Gj0|bqFg;V1X!jhw~qDzG24_o=RI^zj8)aW|6BHSr8@4|S$^=j zTG+=*5;N6JW-1WyH?=0#MIYMLnv4NpmRDnLyjuG>kOuEnx8oKkEm5tr@xpNgtM%cV z`CXsJ+$!~S8RM3elH6Y+t7nq#&~triZ~i(Syx6Sv?i;_a#fole zwCpqr@1(Oe8Af?<7?@gRw7%ibUS=7CPLAiF&mv=Z=zm$rpmD8($~=F-`yXH1xOQW` zPM~x0jZGG&72jz5;O<)9lX2c4$>wpJ?EkLgS?#9yEgU0bp2o4)OvxttEiA&6y74lN zY%{s6Y-h*{jWdEx$4_x6C;p%@I?>dPF@ IczlZU|3{rGkN^Mx diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index 096568d..cbdeee8 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -363,14 +363,14 @@ et les fichiers de sauvegarde de Grand Theft Auto V - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! @@ -903,7 +903,7 @@ Y: %2 - + Export as &Picture... @@ -913,7 +913,7 @@ Y: %2 - + Export as &Snapmatic... @@ -923,13 +923,13 @@ Y: %2 - + &Edit Properties... Modifier les &propriétés... - + Open &Map Viewer... @@ -1021,7 +1021,7 @@ Appuyer sur 1 pour le mode par défaut - + Open &JSON Editor... @@ -1080,30 +1080,40 @@ Appuyer sur 1 pour le mode par défaut Photos activées : %1 sur %2 - + Loading... Chargement... - - + + Snapmatic Loader + + + + + <h4>Following Snapmatic Pictures got repaired</h4>%1 + + + + + Import... Importer... - - - - - - - - - - - - - + + + + + + + + + + + + + Import Importer @@ -1112,36 +1122,36 @@ Appuyer sur 1 pour le mode par défaut Fichiers de profil GTA (SGTA* PGTA*) - + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) - + All image files (%1) - + All files (**) Tous les fichiers (**) - - + + Import file %1 of %2 files Importation du fichier %1 sur %2 - + Import failed with... %1 @@ -1150,25 +1160,25 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No valid file is selected Fichier invalide - + Importable files (%1) - + Failed to read Snapmatic picture Impossible d'ouvrir la photo Snapmatic - + Failed to read Savegame file Impossible de lire le fichier de sauvegarde @@ -1190,78 +1200,78 @@ Appuyer sur 1 pour le mode par défaut Tous les fichiers image (*.jpg *.png) - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*, *.g5e) - + Failed to import the Snapmatic picture, the picture is already in the game Impossible d'importer la photo Snapmatic, un fichier du même nom existe déjà - + Failed to import the Snapmatic picture, can't copy the file into profile Impossible d'importer la photo Snapmatic, impossible de copier le fichier dans le profil - + Failed to import the Savegame, can't copy the file into profile Impossible d'importer la sauvegarde, impossible de copier le fichier dans le profil - + Failed to import the Savegame, no Savegame slot is left Impossible d'importer la sauvegarde, aucun emplacement libre - - - - + + + + Export selected Exporter la sélection - - + + JPG pictures and GTA Snapmatic Images JPG et GTA Snapmatic - - + + JPG pictures only Images JPG seulement - - + + GTA Snapmatic only GTA Snapmatic seulement - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exporter les photos Snapmatic%2<br><br>Les fichiers JPG permettent d'ouvrir les photos avec une visionneuse d'images<br>Les GTA Snapmatic permettent d'importer les photos dans le jeu<br><br>Exporter comme : - + Export selected... Exporter la sélection... - + Initialising export... @@ -1270,7 +1280,7 @@ Appuyer sur 1 pour le mode par défaut Initialisation de l'export... - + Export failed with... %1 @@ -1279,25 +1289,25 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No Snapmatic pictures or Savegames files are selected Aucun fichier de sauvegarde ou photo Snapmatic sélectionné - - - + + + Remove selected Supprimer la sélection - + You really want remove the selected Snapmatic picutres and Savegame files? Supprimer la sélection ? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Impossible de supprimer la sélection @@ -1307,7 +1317,7 @@ Appuyer sur 1 pour le mode par défaut Tous les fichiers de profil (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1404,7 +1414,7 @@ Appuyer sur 1 pour le mode par défaut Supprimer - + &Export &Exporter @@ -1495,32 +1505,32 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + &View &Voir - + &Remove &Supprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner to&ut - + &Deselect All &Déselectionner tout @@ -1691,7 +1701,7 @@ Appuyer sur 1 pour le mode par défaut SnapmaticPicture - + PHOTO - %1 PHOTO - %1 @@ -1761,17 +1771,17 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + Edi&t Édi&ter - + Show &In-game &Visible en jeu - + Hide &In-game &Invisible en jeu @@ -1780,7 +1790,7 @@ Appuyer sur 1 pour le mode par défaut Modifier les &propriétés... - + &Export &Exporter @@ -1793,32 +1803,32 @@ Appuyer sur 1 pour le mode par défaut Exporter comme &GTA Snapmatic... - + &View &Voir - + &Remove S&upprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner &tout - + &Deselect All &Déselectionner tout diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index 71a4dafadf758d144676dcffe6583704e8e702e4..8579c33255d6edb154d0109202a0e5d00730acbe 100644 GIT binary patch delta 2433 zcmX|?2~={P*5}`Ih(l{=xrh zcD~YVonV~=Xe)scivV#IaCQdt^MR#pfJXpeuLr!Q17?Ft`#fNZEuW{TwBHV7bOBic zqG}IdV}v;HYhcA!5bXj;>wxGb*W8A~tLjNZBT~Y#l6lrz-2lU4xfH8d0dl6W? zU1h!pjC&FRrvvct-w3?1MP>d8cn)n`@ED#$8?TxK&&%%QMRO#I26zqa zH-A87b~k1OM*Lw9_<-1nUR{R?f#QxNFUnXHT=HTqP^W6Lq}!pHwWy2l~=XTBIuaKQTxK` zHv-5^)ahJ4re%XV>A*E0Z-dU^^H;#+Y@Kr%C%%@e3n(7|@|Ww9o8JLkn{@f>#sMXg zuCVb0FdRKj7;Do-K7df%-AAq6sF4Ks0erw!jyD~pfK*UxLYg;ZU7c( zh4r1`3#tCoqUv3W%=VsmFRdE<6Z;~Wd#}-=srnHQ+Cef!B|RiJSUrt=LLMZak+;Y} zs@x))YPfn$1gRm{lRC0VG<)x7#O|ofStFX8(pfFtR&jJw3ZSeO?MfCy_eh*+n9A~K z5WVaENYC0;CU&XJ^%uRTHu1Zc_%6L2aOn_F`+CSE@$z&44Vg^BhU`oSP z`d-tgUFxLATlGb|vw@HSz11ff7(VW(zTTT2Wwh(}JWm2Y0Q&}Eu`eR2r7<#|j zIN@kbvq?;M2SQ_Qvb7~ZjF-*IWX4S_H5l&O0b^qg@<18jm#8v2SY`4D277Uk3g|a@ zyzF94wHjXki1Zs~$XL}z^I8n~VeypeEtQcs4Xf_*IWWOc^4D(w{}{v8hH`cZ7du1U zr8=PSYeVBXDx$E)a6INmD#2`M>zfKhZ8mgvQhH93;Z7X8hQmgqehxFg(rO%Y!3UV$ zXAFDZ$T+td!ymIv<$r68J=DuKC5-VW=)QBSv1rdeATrBXaxRCGPBB)DyGdn!Y&_H1 z$1ahv(b##48yY%{7tS+LAvVT`?KEhlo#c4-9Q&WI8D|djQ^Dpb9(c@mzayN$3@S~|Th77B&H5(nBcbV!nf)ZVAYP8VId9kL`4@-Gp z*w@Z5j7bhfM!Pg*)sDnb&%R`$yzhO+v2>XxbFm=y=z%r&Gg9imiI3% z13djKdk2##dXR^wt6z9LA(h!7(uz=r?E*v#U*^31&2N;jvLBDX6J)5nX~ zM7RhMp_~^kV&RI3eDdRSxQKwy(C`1NhtFS~Q|vl1E_1c(qWqlowRe47T0%q4&i)^} C@}nI9 delta 2372 zcmXAqc~lfv7RJBsuBN)GdQlriwzv=sf+89lh(=Tp6cI!P5!{e1HnPa(WX_zVL1HFG z#2A8_galDs!66Y*BS8<_QO8k?3yIOu(ddlm7$+E_QKR#5s{i>_z3TVw_TBqFf1!E# zhvuVK9m#;U1h8%fgiCzEaIlhI#6R2|>bZ@`f-5AYa?;^Liv zixnFhE-<2W>`EI5%$b7v^__qr3P+w60seb&=MwiBqi}bJ9$0z+zvRTwVONcOZ4408 zsWPQTWu`;pxo@O{2Vd1>EbL?C-I{{ee+3dH%{x`gfY(lGHm~`KC3vE_I6DW3$kY7K z^ffSJt#(9n1u*K4Hg-%84NuT6Im!KLe`vGU#Q`}%+War~0YTl`vT8CZE#`+FF}vAAfT z1z4$^K%LI*Z&ZSHl1|!v8F(v2H{{d{V04wvwUB>&rCMhz>I3XEbn*2c0K;$V>}y6a z&Ih`z+JnHW+jW}~B<3+o*S>=J2)wL2SIj&a8U-hX1@gHo*q%*dA!>x6={#rA0U?bSN;o-`xlah$!#Ecz-mwOF}Z>K zojgIlBp(TNo47mgHBv(^CUxW{p?=IRW~@VHdc06yx0JndT4*Ru0F>22vywt3BwZGc zS5E{MmkM2LK4E0Ps+_+^WyTPp>u4#zTZFqyo7pqJ2~RGZAvX%okJ;#;pI+$SH)D$4 zdGA(03RM|k)+e270~QwQv$v-Lldk9;{_()T27T2S2DH3dU-NWu91vpD*Onv#*`Mma z+TX&|+bgCBE{+hV`AfZlX#q~D+FT&Y;;hPQ~TZt^|QCgy&B3z#rY{HVH! z%5aMkE6-H|S#4r%D;1GdAbuV7GnEh_HeHwq%*qto+9AFlTQUkb2jUU9%Gik1*u6rc=t34aFm_P?8@Tj<>PZ zmuDE-j&@QRVvC`(BL#Tlp5b9L9T^-gxtwSPQmm58KRF@aYLG@f@d7foOQYZBK}L@V;z*A4ZF0awW_D4qJUOF^ zj`flbKCJXm7Yah;=pOztVZEI2&Fyo5L4Vx`iB({oveQsws^H&m-kU9Egm`U=PQeC2pH4Hj-Ad0=6T(h<_bu^g&& z71FVSQsu%I=|J*5`QJ z>;U7jhXri*ClxlsFh_~Wy@$P!Y%}=;u?MW*n0&ADl;q8(p!IC}0Yg=~)|;l8DE&#P zrqGg0?5$W+oHGS6VV}y`Ri+~?iM)3cRfb(NwI>c{>wIRqox}6r^fC+mQ+Y~|+5Hro ze9+&`hm!4V^1%1ihuC~`OAh}q?wG|blWvB+V+rY{G7`^PQu6wEZ**94E*xa|otD+* zESOwn*>-Xn;A^++co|P=U$@kqr6Ko5OZ!pgH*|&N{JADxm!m9wpZoKk3Z=E8ojMNc zL-59U3>T&fAwpx4Bo3-bn>tFKU67j-o@Ou1&2L=j{-smJ+wq - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! @@ -782,7 +782,7 @@ Y: %2 - + Export as &Picture... ЭкÑпортировать как &картинку... @@ -792,7 +792,7 @@ Y: %2 - + Export as &Snapmatic... ЭкÑпортировать как &Snapmatic... @@ -806,13 +806,13 @@ Y: %2 - + &Edit Properties... &Изменить ÑвойÑтва... - + Open &Map Viewer... @@ -1004,7 +1004,7 @@ Press 1 for Default View - + Open &JSON Editor... @@ -1059,30 +1059,40 @@ Press 1 for Default View Закрыть профиль - + Loading... Загрузка... - - + + Snapmatic Loader + + + + + <h4>Following Snapmatic Pictures got repaired</h4>%1 + + + + + Import... Импортировать... - - - - - - - - - - - - - + + + + + + + + + + + + + Import Импортировать @@ -1091,31 +1101,31 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (SGTA* PGTA*) - + Savegames files (SGTA*) Файлы ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ (SGTA*) - + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) - + All files (**) Ð’Ñе файлы (**) - - + + Import file %1 of %2 files ИмпортируютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ %1 из %2 - + Import failed with... %1 @@ -1124,13 +1134,13 @@ Press 1 for Default View %1 - + Failed to read Snapmatic picture Ðе удалоÑÑŒ загрузить картинку Snapmatic - + Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ @@ -1140,8 +1150,8 @@ Press 1 for Default View Ðе получилоÑÑŒ импортировать %1 из-за неправильного формата файла - - + + No valid file is selected Выбранный файл неверен @@ -1160,93 +1170,93 @@ Press 1 for Default View Ð’Ñе Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (*.jpg *.png) - + Importable files (%1) Файлы Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° (%1) - + All image files (%1) Ð’Ñе файлы изображений (%1) - + Can't import %1 because file can't be parsed properly Ðе получилоÑÑŒ импортировать %1, файл не может быть правильно обработан - + Can't import %1 because file format can't be detected Ðе получилоÑÑŒ импортировать %1, не удалоÑÑŒ определить формат файла - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе удалоÑÑŒ импортировать картинку Snapmatic, название не начинаетÑÑ Ñ PGTA или не заканчиваетÑÑ Ñ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе удалоÑÑŒ импортировать картинку Snapmatic, картинка уже в игре - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе удалоÑÑŒ импортировать картинку Snapmatic, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, can't copy the file into profile Ðе удалоÑÑŒ импортировать Ñохранение, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, no Savegame slot is left Ðе удалоÑÑŒ импортировать Ñохранение, нет пуÑтых Ñчеек под ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + JPG pictures and GTA Snapmatic Картинки JPG и GTA Snapmatic - - + + JPG pictures only Только картинки JPG - - + + GTA Snapmatic only Только GTA Snapmatic - + Initialising export... Подготовка к ÑкÑпорту... - - + + No Snapmatic pictures or Savegames files are selected Ðе выделены ни один Snapmatic или Ñохранение - - - + + + Remove selected СнÑть выделение - + You really want remove the selected Snapmatic picutres and Savegame files? Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Ðе удалоÑÑŒ удалить полноÑтью выбранные картинки Snapmatic и/или файлы Ñохранений @@ -1267,20 +1277,20 @@ Press 1 for Default View Ðе получилоÑÑŒ имортировать копию ÑохранениÑ, потому что не оÑталоÑÑŒ Ñвободных под них Ñлотов - - - - + + + + Export selected ЭкÑпортировать выделенное - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1ЭÑкпортировать картинки Snapmatic%2<br><br>Картинки JPG можно открыть любым проÑмотрщиком<br>Картинки формата GTA Snapmatic можно Ñнова импортировать в игру<br><br>ЭкÑпортировать как: - + Export selected... Экпортировать выделенное... @@ -1289,7 +1299,7 @@ Press 1 for Default View Подготавливаю ÑÑкпорт... - + Export failed with... %1 @@ -1310,7 +1320,7 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1466,32 +1476,32 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить Ñохранение %1 - + &View &ПроÑмотр - + &Remove &Удалить - + &Select &Выбрать - + &Deselect Сн&Ñть выбор - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1501,7 +1511,7 @@ Press 1 for Default View Копировать Ñохранение - + &Export &ЭкÑпортировать @@ -1716,7 +1726,7 @@ Press 1 for Default View SnapmaticPicture - + PHOTO - %1 ФОТО - %1 @@ -1776,17 +1786,17 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить %1 из колелкции картинок Snapmatic - + Edi&t &Правка - + Show &In-game Показывать в &игре - + Hide &In-game Ск&рыть в игре @@ -1795,7 +1805,7 @@ Press 1 for Default View &Изменить ÑвойÑтва... - + &Export &ЭкÑпорт @@ -1808,32 +1818,32 @@ Press 1 for Default View ЭкÑ&портировать как GTA Snapmatic... - + &View По&казать - + &Remove У&далить - + &Select &Выделить - + &Deselect Сн&Ñть выделение - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех From 6938ca577da0348e8952002efc9d33e8b19dcd94 Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 12 Dec 2017 04:45:46 +0100 Subject: [PATCH 018/359] added Snapmatic Players Editor --- .travis.yml | 8 +- AboutDialog.cpp | 4 + ImportDialog.cpp | 23 +++- ImportDialog.ui | 2 +- JsonEditorDialog.cpp | 37 +++++- JsonEditorDialog.ui | 3 + MapLocationDialog.cpp | 5 + OptionsDialog.cpp | 10 +- PictureDialog.cpp | 295 ++++++++++++++++++++++++++++++------------ PictureDialog.h | 37 ++++-- PlayerListDialog.cpp | 241 ++++++++++++++++++++++++++++++++++ PlayerListDialog.h | 55 ++++++++ PlayerListDialog.ui | 152 ++++++++++++++++++++++ ProfileDatabase.cpp | 9 ++ ProfileDatabase.h | 1 + ProfileInterface.cpp | 29 ++++- SavegameDialog.cpp | 4 + SnapmaticEditor.cpp | 109 +++++++++++++--- SnapmaticEditor.h | 12 +- SnapmaticEditor.ui | 19 ++- SnapmaticPicture.cpp | 183 ++++++++++++++++++++------ SnapmaticPicture.h | 49 ++++--- SnapmaticWidget.cpp | 2 +- config.h | 2 +- gta5view.pro | 3 + res/app.rc | 4 +- 26 files changed, 1104 insertions(+), 194 deletions(-) create mode 100644 PlayerListDialog.cpp create mode 100644 PlayerListDialog.h create mode 100644 PlayerListDialog.ui diff --git a/.travis.yml b/.travis.yml index 1d9d418..18df08f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,14 +32,14 @@ before_script: script: - cd qt5 - - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev5\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev6\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev5 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev6 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package - cd .. - cd qt4 - - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev5\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev6\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev5 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev6 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package - cd .. deploy: diff --git a/AboutDialog.cpp b/AboutDialog.cpp index bf2d4ed..7bb069f 100755 --- a/AboutDialog.cpp +++ b/AboutDialog.cpp @@ -28,6 +28,10 @@ AboutDialog::AboutDialog(QWidget *parent) : { // Set Window Flags setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); +#ifdef Q_OS_LINUX + // for stupid Window Manager (GNOME 3 should feel triggered) + setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); +#endif // Build Strings QString appVersion = qApp->applicationVersion(); diff --git a/ImportDialog.cpp b/ImportDialog.cpp index 687da8a..87a719f 100644 --- a/ImportDialog.cpp +++ b/ImportDialog.cpp @@ -38,6 +38,13 @@ ImportDialog::ImportDialog(QWidget *parent) : QDialog(parent), ui(new Ui::ImportDialog) { + // Set Window Flags + setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowMinMaxButtonsHint); +#ifdef Q_OS_LINUX + // for stupid Window Manager (GNOME 3 should feel triggered) + setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); +#endif + ui->setupUi(this); importAgreed = false; insideAvatarZone = false; @@ -56,14 +63,26 @@ ImportDialog::ImportDialog(QWidget *parent) : ui->cbIgnore->setChecked(false); ui->labColour->setText(tr("Background Colour: %1").arg(selectedColour.name())); + // DPI calculation qreal screenRatio = AppEnv::screenRatio(); snapmaticResolutionLW = 430 * screenRatio; snapmaticResolutionLH = 240 * screenRatio; + ui->vlButtom->setSpacing(6 * screenRatio); +#ifndef Q_OS_MAC + ui->vlButtom->setContentsMargins(9 * screenRatio, 6 * screenRatio, 9 * screenRatio, 9 * screenRatio); +#else + if (QApplication::style()->objectName() == "macintosh") + { + ui->vlButtom->setContentsMargins(9 * screenRatio, 9 * screenRatio, 9 * screenRatio, 9 * screenRatio); + } + else + { + ui->vlButtom->setContentsMargins(9 * screenRatio, 6 * screenRatio, 9 * screenRatio, 9 * screenRatio); + } +#endif setMinimumSize(430 * screenRatio, 380 * screenRatio); setMaximumSize(430 * screenRatio, 380 * screenRatio); setFixedSize(430 * screenRatio, 380 * screenRatio); - ui->vlButtom->setSpacing(6 * screenRatio); - ui->vlButtom->setContentsMargins(9 * screenRatio, 6 * screenRatio, 9 * screenRatio, 9 * screenRatio); } ImportDialog::~ImportDialog() diff --git a/ImportDialog.ui b/ImportDialog.ui index 3f95cad..06fc3b3 100644 --- a/ImportDialog.ui +++ b/ImportDialog.ui @@ -89,7 +89,7 @@ Settings - + diff --git a/JsonEditorDialog.cpp b/JsonEditorDialog.cpp index ddf72bd..e10fdeb 100644 --- a/JsonEditorDialog.cpp +++ b/JsonEditorDialog.cpp @@ -35,8 +35,13 @@ JsonEditorDialog::JsonEditorDialog(SnapmaticPicture *picture, QWidget *parent) : { // Set Window Flags setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowMinMaxButtonsHint); +#ifdef Q_OS_LINUX + // for stupid Window Manager (GNOME 3 should feel triggered) + setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); +#endif ui->setupUi(this); + ui->cmdClose->setDefault(true); if (QIcon::hasThemeIcon("dialog-close")) { ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); @@ -46,8 +51,8 @@ JsonEditorDialog::JsonEditorDialog(SnapmaticPicture *picture, QWidget *parent) : #if QT_VERSION >= 0x050200 ui->txtJSON->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont)); #endif - QFontMetrics fm(ui->txtJSON->font()); - ui->txtJSON->setTabStopWidth(fm.width(" ")); + QFontMetrics fontMetrics(ui->txtJSON->font()); + ui->txtJSON->setTabStopWidth(fontMetrics.width(" ")); QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonCode.toUtf8()); ui->txtJSON->setStyleSheet("QPlainTextEdit{background-color: rgb(46, 47, 48); color: rgb(238, 231, 172);}"); @@ -56,7 +61,15 @@ JsonEditorDialog::JsonEditorDialog(SnapmaticPicture *picture, QWidget *parent) : // DPI calculation qreal screenRatio = AppEnv::screenRatio(); +#ifndef Q_OS_MAC + ui->hlButtons->setSpacing(6 * screenRatio); ui->hlButtons->setContentsMargins(9 * screenRatio, 0, 9 * screenRatio, 0); + ui->vlInterface->setContentsMargins(0, 0, 0, 9 * screenRatio); +#else + ui->hlButtons->setSpacing(6 * screenRatio); + ui->hlButtons->setContentsMargins(9 * screenRatio, 0, 9 * screenRatio, 0); + ui->vlInterface->setContentsMargins(0, 0, 0, 9 * screenRatio); +#endif if (screenRatio > 1) { ui->lineJSON->setMinimumHeight(qRound(1 * screenRatio)); @@ -127,7 +140,25 @@ bool JsonEditorDialog::saveJsonContent() smpic->setJsonStr(newCode, true); if (!smpic->isJsonOk()) { - QMessageBox::warning(this, SnapmaticEditor::tr("Snapmatic Properties"), SnapmaticEditor::tr("Patching of Snapmatic Properties failed because of JSON Error")); + QString lastStep = smpic->getLastStep(false); + QString readableError; + if (lastStep.contains("JSONINCOMPLETE") && lastStep.contains("JSONERROR")) + { + readableError = SnapmaticPicture::tr("JSON is incomplete and malformed"); + } + else if (lastStep.contains("JSONINCOMPLETE")) + { + readableError = SnapmaticPicture::tr("JSON is incomplete"); + } + else if (lastStep.contains("JSONERROR")) + { + readableError = SnapmaticPicture::tr("JSON is malformed"); + } + 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; } diff --git a/JsonEditorDialog.ui b/JsonEditorDialog.ui index 3221c12..ad5736e 100644 --- a/JsonEditorDialog.ui +++ b/JsonEditorDialog.ui @@ -23,6 +23,9 @@ 0 + + 9 + diff --git a/MapLocationDialog.cpp b/MapLocationDialog.cpp index 64f7271..450c112 100644 --- a/MapLocationDialog.cpp +++ b/MapLocationDialog.cpp @@ -29,6 +29,11 @@ MapLocationDialog::MapLocationDialog(double x, double y, QWidget *parent) : { // Set Window Flags setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); +#ifdef Q_OS_LINUX + // for stupid Window Manager (GNOME 3 should feel triggered) + setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); +#endif + ui->setupUi(this); ui->cmdDone->setVisible(false); ui->cmdApply->setVisible(false); diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp index a7b9ce7..df5d122 100755 --- a/OptionsDialog.cpp +++ b/OptionsDialog.cpp @@ -42,13 +42,17 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : { // Set Window Flags setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); +#ifdef Q_OS_LINUX + // for stupid Window Manager (GNOME 3 should feel triggered) + setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); +#endif // Setup User Interface ui->setupUi(this); ui->tabWidget->setCurrentIndex(0); ui->labPicCustomRes->setVisible(false); - QRect desktopResolution = qApp->desktop()->screenGeometry(parent); + QRect desktopResolution = QApplication::desktop()->screenGeometry(this); int desktopSizeWidth = desktopResolution.width(); int desktopSizeHeight = desktopResolution.height(); aspectRatio = Qt::KeepAspectRatio; @@ -256,7 +260,7 @@ void OptionsDialog::setupInterfaceSettings() ui->gbFont->setVisible(false); ui->cbAlwaysUseMessageFont->setVisible(false); #endif - QString currentStyle = qApp->style()->objectName(); + QString currentStyle = QApplication::style()->objectName(); QString appStyle = settings->value("AppStyle", currentStyle).toString(); bool customStyle = settings->value("CustomStyle", false).toBool(); const QStringList availableStyles = QStyleFactory::keys(); @@ -374,7 +378,7 @@ void OptionsDialog::applySettings() QString newStyle = ui->cbStyleList->currentText(); settings->setValue("CustomStyle", true); settings->setValue("AppStyle", newStyle); - qApp->setStyle(QStyleFactory::create(newStyle)); + QApplication::setStyle(QStyleFactory::create(newStyle)); } else { diff --git a/PictureDialog.cpp b/PictureDialog.cpp index e5124ed..5c4b87c 100755 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -42,6 +42,8 @@ #include #include #include +#include +#include #include #include #include @@ -79,35 +81,24 @@ PictureDialog::PictureDialog(ProfileDatabase *profileDB, CrewDatabase *crewDB, Q ui(new Ui::PictureDialog) { primaryWindow = false; - setupPictureDialog(true); -} - -PictureDialog::PictureDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::PictureDialog) -{ - primaryWindow = false; - setupPictureDialog(false); + setupPictureDialog(); } PictureDialog::PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent) : QDialog(parent), primaryWindow(primaryWindow), profileDB(profileDB), crewDB(crewDB), ui(new Ui::PictureDialog) { - setupPictureDialog(true); + setupPictureDialog(); } -PictureDialog::PictureDialog(bool primaryWindow, QWidget *parent) : - QDialog(parent), primaryWindow(primaryWindow), - ui(new Ui::PictureDialog) -{ - setupPictureDialog(false); -} - -void PictureDialog::setupPictureDialog(bool withDatabase_) +void PictureDialog::setupPictureDialog() { // Set Window Flags - setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); + setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint^Qt::CustomizeWindowHint); +#ifdef Q_OS_LINUX + // for stupid Window Manager (GNOME 3 should feel triggered) + setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); +#endif // Setup User Interface ui->setupUi(this); @@ -122,9 +113,6 @@ void PictureDialog::setupPictureDialog(bool withDatabase_) smpic = nullptr; crewStr = ""; - // With datebase - withDatabase = withDatabase_; - // Avatar area qreal screenRatio = AppEnv::screenRatio(); if (screenRatio != 1) @@ -145,14 +133,14 @@ void PictureDialog::setupPictureDialog(bool withDatabase_) // Manage menu manageMenu = new QMenu(this); - jpegExportAction = manageMenu->addAction(tr("Export as &Picture..."), this, SLOT(exportSnapmaticPicture())); - pgtaExportAction = manageMenu->addAction(tr("Export as &Snapmatic..."), this, SLOT(copySnapmaticPicture())); - manageMenuSep1 = manageMenu->addSeparator(); - propEditorAction = manageMenu->addAction(tr("&Edit Properties..."), this, SLOT(editSnapmaticProperties())); - manageMenuSep2 = manageMenu->addSeparator(); - openViewerAction = manageMenu->addAction(tr("Open &Map Viewer..."), this, SLOT(openPreviewMap())); + manageMenu->addAction(tr("Export as &Picture..."), this, SLOT(exportSnapmaticPicture())); + manageMenu->addAction(tr("Export as &Snapmatic..."), this, SLOT(copySnapmaticPicture())); + manageMenu->addSeparator(); + manageMenu->addAction(tr("&Edit Properties..."), this, SLOT(editSnapmaticProperties())); + manageMenu->addSeparator(); + QAction *openViewerAction = manageMenu->addAction(tr("Open &Map Viewer..."), this, SLOT(openPreviewMap())); openViewerAction->setShortcut(Qt::Key_M); - jsonEditorAction = manageMenu->addAction(tr("Open &JSON Editor..."), this, SLOT(editSnapmaticRawJson())); + manageMenu->addAction(tr("Open &JSON Editor..."), this, SLOT(editSnapmaticRawJson())); ui->cmdManage->setMenu(manageMenu); // Global map @@ -179,13 +167,22 @@ void PictureDialog::setupPictureDialog(bool withDatabase_) PictureDialog::~PictureDialog() { - delete propEditorAction; - delete openViewerAction; - delete jsonEditorAction; - delete jpegExportAction; - delete pgtaExportAction; - delete manageMenuSep1; - delete manageMenuSep2; +#ifdef GTA5SYNC_WIN +#if QT_VERSION >= 0x050200 + if (naviEnabled) + { + for (QObject *obj : layout()->menuBar()->children()) + { + delete obj; + } + delete layout()->menuBar(); + } +#endif +#endif + for (QObject *obj : manageMenu->children()) + { + delete obj; + } delete manageMenu; delete ui; } @@ -193,7 +190,7 @@ PictureDialog::~PictureDialog() void PictureDialog::closeEvent(QCloseEvent *ev) { Q_UNUSED(ev) - if (primaryWindow && withDatabase) + if (primaryWindow) { emit endDatabaseThread(); } @@ -204,25 +201,140 @@ void PictureDialog::addPreviousNextButtons() // Windows Vista additions #ifdef GTA5SYNC_WIN #if QT_VERSION >= 0x050200 - QPalette palette; QToolBar *uiToolbar = new QToolBar("Picture Toolbar", this); - layout()->setMenuBar(uiToolbar); + uiToolbar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); + uiToolbar->setObjectName("uiToolbar"); uiToolbar->addAction(QIcon(":/img/back.png"), "", this, SLOT(previousPictureRequestedSlot())); uiToolbar->addAction(QIcon(":/img/next.png"), "", this, SLOT(nextPictureRequestedSlot())); - ui->jsonFrame->setStyleSheet(QString("QFrame { background: %1; }").arg(palette.window().color().name())); + layout()->setMenuBar(uiToolbar); + naviEnabled = true; #endif #endif } +#ifdef GTA5SYNC_WIN +#if QT_VERSION >= 0x050200 +#ifdef GTA5SYNC_APV +bool PictureDialog::nativeEvent(const QByteArray &eventType, void *message, long *result) +{ + *result = 0; + MSG *msg = static_cast(message); + LRESULT lRet = 0; + + if (naviEnabled && QtWin::isCompositionEnabled()) + { + if (msg->message == WM_NCCALCSIZE && msg->wParam == TRUE) + { + NCCALCSIZE_PARAMS *pncsp = reinterpret_cast(msg->lParam); + + int sideBorderSize = ((frameSize().width() - size().width()) / 2); +#ifdef GTA5SYNC_APV_SIDE + int buttomBorderSize = sideBorderSize; +#else + int buttomBorderSize = (frameSize().height() - size().height()); +#endif + pncsp->rgrc[0].left += sideBorderSize; + pncsp->rgrc[0].right -= sideBorderSize; + pncsp->rgrc[0].bottom -= buttomBorderSize; + } + else if (msg->message == WM_NCHITTEST) + { + int CLOSE_BUTTON_ID = 20; + lRet = HitTestNCA(msg->hwnd, msg->lParam); + DwmDefWindowProc(msg->hwnd, msg->message, msg->wParam, msg->lParam, &lRet); + *result = lRet; + if (lRet != CLOSE_BUTTON_ID) { return QWidget::nativeEvent(eventType, message, result); } + } + else + { + return QWidget::nativeEvent(eventType, message, result); + } + } + else + { + return QWidget::nativeEvent(eventType, message, result); + } + return true; +} + +LRESULT PictureDialog::HitTestNCA(HWND hWnd, LPARAM lParam) +{ + int LEFTEXTENDWIDTH = 0; + int RIGHTEXTENDWIDTH = 0; + int BOTTOMEXTENDWIDTH = 0; + int TOPEXTENDWIDTH = layout()->menuBar()->height(); + + POINT ptMouse = {(int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)}; + + RECT rcWindow; + GetWindowRect(hWnd, &rcWindow); + + RECT rcFrame = {}; + AdjustWindowRectEx(&rcFrame, WS_OVERLAPPEDWINDOW & ~WS_CAPTION, FALSE, NULL); + + USHORT uRow = 1; + USHORT uCol = 1; + bool fOnResizeBorder = false; + + if (ptMouse.y >= rcWindow.top && ptMouse.y < rcWindow.top + TOPEXTENDWIDTH) + { + fOnResizeBorder = (ptMouse.y < (rcWindow.top - rcFrame.top)); + uRow = 0; + } + else if (ptMouse.y < rcWindow.bottom && ptMouse.y >= rcWindow.bottom - BOTTOMEXTENDWIDTH) + { + uRow = 2; + } + + if (ptMouse.x >= rcWindow.left && ptMouse.x < rcWindow.left + LEFTEXTENDWIDTH) + { + uCol = 0; + } + else if (ptMouse.x < rcWindow.right && ptMouse.x >= rcWindow.right - RIGHTEXTENDWIDTH) + { + uCol = 2; + } + + LRESULT hitTests[3][3] = + { + { HTTOPLEFT, fOnResizeBorder ? HTTOP : HTCAPTION, HTTOPRIGHT }, + { HTLEFT, HTNOWHERE, HTRIGHT }, + { HTBOTTOMLEFT, HTBOTTOM, HTBOTTOMRIGHT }, + }; + + return hitTests[uRow][uCol]; +} + +void PictureDialog::resizeEvent(QResizeEvent *event) +{ + Q_UNUSED(event) + // int newDialogHeight = ui->labPicture->pixmap()->height(); + // newDialogHeight = newDialogHeight + ui->jsonFrame->height(); + // if (naviEnabled) newDialogHeight = newDialogHeight + layout()->menuBar()->height(); + // int buttomBorderSize = (frameSize().height() - size().height()); + // int sideBorderSize = ((frameSize().width() - size().width()) / 2); + // int brokenDialogHeight = newDialogHeight + (buttomBorderSize - sideBorderSize); + // if (event->size().height() == brokenDialogHeight) + // { + // qDebug() << "BROKEN 1"; + // setGeometry(geometry().x(), geometry().y(), width(), newDialogHeight); + // qDebug() << "BROKEN 2"; + // event->ignore(); + // } +} +#endif +#endif +#endif + void PictureDialog::adaptNewDialogSize(QSize newLabelSize) { Q_UNUSED(newLabelSize) int newDialogHeight = ui->labPicture->pixmap()->height(); newDialogHeight = newDialogHeight + ui->jsonFrame->height(); if (naviEnabled) newDialogHeight = newDialogHeight + layout()->menuBar()->height(); - setMinimumSize(width(), newDialogHeight); setMaximumSize(width(), newDialogHeight); + setMinimumSize(width(), newDialogHeight); setFixedHeight(newDialogHeight); ui->labPicture->updateGeometry(); ui->jsonFrame->updateGeometry(); @@ -235,15 +347,16 @@ void PictureDialog::stylizeDialog() #if QT_VERSION >= 0x050200 if (QtWin::isCompositionEnabled()) { + QPalette palette; QtWin::extendFrameIntoClientArea(this, 0, this->layout()->menuBar()->height(), 0, 0); - setAttribute(Qt::WA_TranslucentBackground, true); - setAttribute(Qt::WA_NoSystemBackground, false); + ui->jsonFrame->setStyleSheet(QString("QFrame { background: %1; }").arg(palette.window().color().name())); setStyleSheet("PictureDialog { background: transparent; }"); } else { + QPalette palette; QtWin::resetExtendedFrame(this); - setAttribute(Qt::WA_TranslucentBackground, false); + ui->jsonFrame->setStyleSheet(QString("QFrame { background: %1; }").arg(palette.window().color().name())); setStyleSheet(QString("PictureDialog { background: %1; }").arg(QtWin::realColorizationColor().name())); } #endif @@ -283,7 +396,7 @@ bool PictureDialog::eventFilter(QObject *obj, QEvent *ev) { if (ev->type() == QEvent::KeyPress) { - QKeyEvent *keyEvent = (QKeyEvent*)ev; + QKeyEvent *keyEvent = dynamic_cast(ev); switch (keyEvent->key()){ case Qt::Key_Left: emit previousPictureRequested(); @@ -337,6 +450,49 @@ bool PictureDialog::eventFilter(QObject *obj, QEvent *ev) break; } } +#ifdef GTA5SYNC_WIN +#if QT_VERSION >= 0x050200 + if (obj != ui->labPicture && naviEnabled) + { + if (ev->type() == QEvent::MouseButtonPress) + { + QMouseEvent *mouseEvent = dynamic_cast(ev); + if (mouseEvent->pos().y() <= layout()->menuBar()->height()) + { + if (mouseEvent->button() == Qt::LeftButton) + { + dragPosition = mouseEvent->pos(); + dragStart = true; + } + } + } + if (ev->type() == QEvent::MouseButtonRelease) + { + QMouseEvent *mouseEvent = dynamic_cast(ev); + if (mouseEvent->pos().y() <= layout()->menuBar()->height()) + { + if (mouseEvent->button() == Qt::LeftButton) + { + dragStart = false; + } + } + } + if (ev->type() == QEvent::MouseMove && dragStart) + { + QMouseEvent *mouseEvent = dynamic_cast(ev); + if (mouseEvent->pos().y() <= layout()->menuBar()->height()) + { + if (mouseEvent->buttons() & Qt::LeftButton) + { + QPoint diff = mouseEvent->pos() - dragPosition; + move(QPoint(pos() + diff)); + updateGeometry(); + } + } + } + } +#endif +#endif } return returnValue; } @@ -378,15 +534,11 @@ void PictureDialog::renderOverlayPicture() qreal screenRatio = AppEnv::screenRatio(); QRect preferedRect = QRect(0, 0, 200 * screenRatio, 160 * screenRatio); QString overlayText = tr("Key 1 - Avatar Preview Mode\nKey 2 - Toggle Overlay\nArrow Keys - Navigate"); - QImage overlayImage(1, 1, QImage::Format_ARGB32_Premultiplied); - overlayImage.fill(Qt::transparent); - QPainter overlayPainter(&overlayImage); QFont overlayPainterFont; overlayPainterFont.setPixelSize(12 * screenRatio); - overlayPainter.setFont(overlayPainterFont); - QRect overlaySpace = overlayPainter.boundingRect(preferedRect, Qt::AlignLeft | Qt::AlignTop | Qt::TextDontClip | Qt::TextWordWrap, overlayText); - overlayPainter.end(); + QFontMetrics fontMetrics(overlayPainterFont); + QRect overlaySpace = fontMetrics.boundingRect(preferedRect, Qt::AlignLeft | Qt::AlignTop | Qt::TextDontClip | Qt::TextWordWrap, overlayText); int hOverlay = Qt::AlignTop; if (overlaySpace.height() < 74 * screenRatio) @@ -400,8 +552,10 @@ void PictureDialog::renderOverlayPicture() overlaySpace.setHeight(overlaySpace.height() + 6 * screenRatio); } - overlayImage = overlayImage.scaled(overlaySpace.size()); - overlayPainter.begin(&overlayImage); + QImage overlayImage(overlaySpace.size(), QImage::Format_ARGB32_Premultiplied); + overlayImage.fill(Qt::transparent); + + QPainter overlayPainter(&overlayImage); overlayPainter.setPen(QColor::fromRgb(255, 255, 255, 255)); overlayPainter.setFont(overlayPainterFont); overlayPainter.drawText(preferedRect, Qt::AlignLeft | hOverlay | Qt::TextDontClip | Qt::TextWordWrap, overlayText); @@ -447,14 +601,7 @@ void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, } if (picture->isJsonOk()) { - if (withDatabase) - { - crewStr = crewDB->getCrewName(crewID); - } - else - { - crewStr = crewID; - } + crewStr = crewDB->getCrewName(crewID); if (globalMap.contains(picArea)) { picAreaStr = globalMap[picArea]; @@ -564,7 +711,7 @@ void PictureDialog::crewNameUpdated() { SnapmaticPicture *picture = smpic; // used by macro QString crewIDStr = crewID; - if (withDatabase && crewIDStr == crewStr) + if (crewIDStr == crewStr) { crewStr = crewDB->getCrewName(crewIDStr); ui->labJSON->setText(jsonDrawString.arg(locX, locY, locZ, generatePlayersString(), generateCrewString(), picTitl, picAreaStr, created)); @@ -601,17 +748,10 @@ QString PictureDialog::generatePlayersString() for (QString player : playersList) { QString playerName; - if (withDatabase) - { - playerName = profileDB->getPlayerName(player.toInt()); - } - else - { - playerName = player; - } + playerName = profileDB->getPlayerName(player); plyrsStr += ", " % playerName % ""; } - plyrsStr.remove(0,2); + plyrsStr.remove(0, 2); } else { @@ -746,11 +886,11 @@ void PictureDialog::editSnapmaticProperties() SnapmaticEditor *snapmaticEditor; if (rqFullscreen && fullscreenWidget != nullptr) { - snapmaticEditor = new SnapmaticEditor(crewDB, fullscreenWidget); + snapmaticEditor = new SnapmaticEditor(crewDB, profileDB, fullscreenWidget); } else { - snapmaticEditor = new SnapmaticEditor(crewDB, this); + snapmaticEditor = new SnapmaticEditor(crewDB, profileDB, this); } snapmaticEditor->setWindowIcon(windowIcon()); snapmaticEditor->setSnapmaticPicture(picture); @@ -782,14 +922,7 @@ void PictureDialog::editSnapmaticRawJson() void PictureDialog::updated() { SnapmaticPicture *picture = smpic; // used by macro - if (withDatabase) - { - crewStr = crewDB->getCrewName(crewID); - } - else - { - crewStr = crewID; - } + crewStr = crewDB->getCrewName(crewID); if (globalMap.contains(picArea)) { picAreaStr = globalMap[picArea]; diff --git a/PictureDialog.h b/PictureDialog.h index 89d154e..66d2c51 100755 --- a/PictureDialog.h +++ b/PictureDialog.h @@ -22,11 +22,21 @@ #include "SnapmaticPicture.h" #include "ProfileDatabase.h" #include "CrewDatabase.h" +#include #include +#include #include #include #include +#ifdef GTA5SYNC_WIN +#if QT_VERSION >= 0x050200 +#ifdef GTA5SYNC_APV +#include +#endif +#endif +#endif + namespace Ui { class PictureDialog; } @@ -36,10 +46,8 @@ class PictureDialog : public QDialog Q_OBJECT public: explicit PictureDialog(ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent = 0); - explicit PictureDialog(QWidget *parent = 0); explicit PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent = 0); - explicit PictureDialog(bool primaryWindow, QWidget *parent = 0); - void setupPictureDialog(bool withDatabase); + void setupPictureDialog(); void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, bool indexed, int index); void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, int index); void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk); @@ -86,6 +94,15 @@ protected: bool eventFilter(QObject *obj, QEvent *ev); void mousePressEvent(QMouseEvent *ev); bool event(QEvent *event); +#ifdef GTA5SYNC_WIN +#if QT_VERSION >= 0x050200 +#ifdef GTA5SYNC_APV + bool nativeEvent(const QByteArray &eventType, void *message, long *result); + LRESULT HitTestNCA(HWND hWnd, LPARAM lParam); + void resizeEvent(QResizeEvent *event); +#endif +#endif +#endif private: QString generateCrewString(); @@ -97,13 +114,6 @@ private: QMap globalMap; SnapmaticPicture *smpic; QWidget *fullscreenWidget; - QAction *jpegExportAction; - QAction *pgtaExportAction; - QAction *propEditorAction; - QAction *openViewerAction; - QAction *jsonEditorAction; - QAction *manageMenuSep1; - QAction *manageMenuSep2; QImage avatarAreaPicture; QImage snapmaticPicture; QImage overlayTempImage; @@ -112,7 +122,6 @@ private: QString picAreaStr; QString crewStr; bool overlayEnabled; - bool withDatabase; bool rqFullscreen; bool naviEnabled; bool previewMode; @@ -122,6 +131,12 @@ private: int avatarLocY; int avatarSize; QMenu *manageMenu; +#ifdef GTA5SYNC_WIN +#if QT_VERSION >= 0x050200 + QPoint dragPosition; + bool dragStart; +#endif +#endif }; #endif // PICTUREDIALOG_H diff --git a/PlayerListDialog.cpp b/PlayerListDialog.cpp new file mode 100644 index 0000000..748c5e9 --- /dev/null +++ b/PlayerListDialog.cpp @@ -0,0 +1,241 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "PlayerListDialog.h" +#include "ui_PlayerListDialog.h" +#include "AppEnv.h" +#include +#include +#include +#include +#include +#include + +PlayerListDialog::PlayerListDialog(QStringList players, ProfileDatabase *profileDB, QWidget *parent) : + QDialog(parent), players(players), profileDB(profileDB), + ui(new Ui::PlayerListDialog) +{ + // Set Window Flags + setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); +#ifdef Q_OS_LINUX + // for stupid Window Manager (GNOME 3 should feel triggered) + setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); +#endif + + ui->setupUi(this); + ui->cmdCancel->setDefault(true); + + if (QIcon::hasThemeIcon("dialog-ok-apply")) + { + ui->cmdApply->setIcon(QIcon::fromTheme("dialog-ok-apply")); + } + else if (QIcon::hasThemeIcon("dialog-apply")) + { + ui->cmdApply->setIcon(QIcon::fromTheme("dialog-apply")); + } + else if (QIcon::hasThemeIcon("dialog-ok")) + { + ui->cmdApply->setIcon(QIcon::fromTheme("dialog-ok")); + } + if (QIcon::hasThemeIcon("dialog-cancel")) + { + ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel")); + } + + drawSwitchButtons(); + buildInterface(); + + // DPI calculation + qreal screenRatio = AppEnv::screenRatio(); + resize(500 * screenRatio, 350 * screenRatio); +} + +PlayerListDialog::~PlayerListDialog() +{ + for (QObject *object : ui->listAvPlayers->children()) + { + delete object; + } + for (QObject *object : ui->listSePlayers->children()) + { + delete object; + } + delete ui; +} + +void PlayerListDialog::drawSwitchButtons() +{ + QFont painterFont = ui->cmdApply->font(); + QPalette palette; + + QFontMetrics fontMetrics(painterFont); + QRect makeAvRect = fontMetrics.boundingRect(QRect(0, 0, 0, 0), Qt::AlignCenter | Qt::TextDontClip, "<"); + QRect makeSeRect = fontMetrics.boundingRect(QRect(0, 0, 0, 0), Qt::AlignCenter | Qt::TextDontClip, ">"); + QRect makeAdRect = fontMetrics.boundingRect(QRect(0, 0, 0, 0), Qt::AlignCenter | Qt::TextDontClip, "+"); + + int makeAvSize; + if (makeAvRect.height() > makeAvRect.width()) + { + makeAvSize = makeAvRect.height(); + } + else + { + makeAvSize = makeAvRect.width(); + } + int makeSeSize; + if (makeSeRect.height() > makeSeRect.width()) + { + makeSeSize = makeSeRect.height(); + } + else + { + makeSeSize = makeSeRect.width(); + } + int makeAdSize; + if (makeAdRect.height() > makeAdRect.width()) + { + makeAdSize = makeAdRect.height(); + } + else + { + makeAdSize = makeAdRect.width(); + } + + QImage avImage(makeAvSize, makeAvSize, QImage::Format_ARGB32_Premultiplied); + avImage.fill(Qt::transparent); + QImage seImage(makeSeSize, makeSeSize, QImage::Format_ARGB32_Premultiplied); + seImage.fill(Qt::transparent); + QImage adImage(makeAdSize, makeAdSize, QImage::Format_ARGB32_Premultiplied); + adImage.fill(Qt::transparent); + + QPainter avPainter(&avImage); + avPainter.setFont(painterFont); + avPainter.setBrush(palette.buttonText()); + avPainter.drawText(0, 0, makeAvSize, makeAvSize, Qt::AlignCenter | Qt::TextDontClip, "<"); + avPainter.end(); + QPainter sePainter(&seImage); + sePainter.setFont(painterFont); + sePainter.setBrush(palette.buttonText()); + sePainter.drawText(0, 0, makeSeSize, makeSeSize, Qt::AlignCenter | Qt::TextDontClip, ">"); + sePainter.end(); + QPainter adPainter(&adImage); + adPainter.setFont(painterFont); + adPainter.setBrush(palette.buttonText()); + adPainter.drawText(0, 0, makeAdSize, makeAdSize, Qt::AlignCenter | Qt::TextDontClip, "+"); + adPainter.end(); + + ui->cmdMakeAv->setIconSize(avImage.size()); + ui->cmdMakeSe->setIconSize(seImage.size()); + ui->cmdMakeAd->setIconSize(adImage.size()); + + ui->cmdMakeAv->setIcon(QIcon(QPixmap::fromImage(avImage))); + ui->cmdMakeSe->setIcon(QIcon(QPixmap::fromImage(seImage))); + ui->cmdMakeAd->setIcon(QIcon(QPixmap::fromImage(adImage))); +} + +void PlayerListDialog::on_cmdCancel_clicked() +{ + close(); +} + +void PlayerListDialog::buildInterface() +{ + const QStringList dbPlayers = profileDB->getPlayers(); + for (QString sePlayer : players) + { + ui->listSePlayers->addItem(QString("%1 (%2)").arg(sePlayer, profileDB->getPlayerName(sePlayer))); + } + for (QString dbPlayer : dbPlayers) + { + if (!players.contains(dbPlayer)) + { + ui->listAvPlayers->addItem(QString("%1 (%2)").arg(dbPlayer, profileDB->getPlayerName(dbPlayer))); + } + } +} + +void PlayerListDialog::on_cmdMakeAv_clicked() +{ + for (QListWidgetItem *item : ui->listSePlayers->selectedItems()) + { + QString playerItemText = item->text(); + delete item; + ui->listAvPlayers->addItem(playerItemText); + ui->listAvPlayers->sortItems(Qt::AscendingOrder); + } +} + +void PlayerListDialog::on_cmdMakeSe_clicked() +{ + int maxPlayers = 30; + 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()) + { + QString playerItemText = item->text(); + delete item; + ui->listSePlayers->addItem(playerItemText); + } +} + +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) + { + QListWidgetItem *item = ui->listAvPlayers->item(i); + QString playerItemText = item->text(); + if (playerItemText.split(" ").at(0) == QString::number(playerID)) + { + delete item; + ui->listSePlayers->addItem(playerItemText); + return; + } + } + for (int i = 0; i < ui->listSePlayers->count(); ++i) + { + QListWidgetItem *item = ui->listSePlayers->item(i); + QString playerItemText = item->text(); + if (playerItemText.split(" ").at(0) == QString::number(playerID)) + { + QMessageBox::warning(this, tr("Add Player..."), tr("Failed to add Player %1 because Player %1 is already added!").arg(QString::number(playerID))); + //ui->listSePlayers->setCurrentItem(item); + return; + } + } + QString playerItemText = QString("%1 (%1)").arg(QString::number(playerID)); + ui->listSePlayers->addItem(playerItemText); + } +} + +void PlayerListDialog::on_cmdApply_clicked() +{ + players.clear(); + for (int i = 0; i < ui->listSePlayers->count(); ++i) + { + players += ui->listSePlayers->item(i)->text().split(" ").at(0); + } + emit playerListUpdated(players); + close(); +} diff --git a/PlayerListDialog.h b/PlayerListDialog.h new file mode 100644 index 0000000..31f91ed --- /dev/null +++ b/PlayerListDialog.h @@ -0,0 +1,55 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef PLAYERLISTDIALOG_H +#define PLAYERLISTDIALOG_H + +#include "ProfileDatabase.h" +#include + +namespace Ui { +class PlayerListDialog; +} + +class PlayerListDialog : public QDialog +{ + Q_OBJECT + +public: + explicit PlayerListDialog(QStringList players, ProfileDatabase *profileDB, QWidget *parent = 0); + ~PlayerListDialog(); + +private slots: + void on_cmdCancel_clicked(); + void on_cmdMakeAv_clicked(); + void on_cmdMakeSe_clicked(); + void on_cmdMakeAd_clicked(); + void on_cmdApply_clicked(); + +private: + QStringList players; + ProfileDatabase *profileDB; + Ui::PlayerListDialog *ui; + void drawSwitchButtons(); + void buildInterface(); + +signals: + void playerListUpdated(QStringList playerList); +}; + +#endif // PLAYERLISTDIALOG_H diff --git a/PlayerListDialog.ui b/PlayerListDialog.ui new file mode 100644 index 0000000..6373657 --- /dev/null +++ b/PlayerListDialog.ui @@ -0,0 +1,152 @@ + + + PlayerListDialog + + + + 0 + 0 + 500 + 350 + + + + Edit Players... + + + + + + + + + + Available Players: + + + + + + + QAbstractItemView::ExtendedSelection + + + + + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + + + + false + + + + + + + + + + false + + + + + + + + + + false + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + + + + + Selected Players: + + + + + + + QAbstractItemView::ExtendedSelection + + + + + + + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + &Apply + + + + + + + &Cancel + + + + + + + + + + diff --git a/ProfileDatabase.cpp b/ProfileDatabase.cpp index 4f7e870..b04a4fd 100755 --- a/ProfileDatabase.cpp +++ b/ProfileDatabase.cpp @@ -57,6 +57,15 @@ QStringList ProfileDatabase::getPlayers() return profileDB->childKeys(); } +QString ProfileDatabase::getPlayerName(QString playerID) +{ + QMutexLocker locker(&mutex); +#ifdef GTA5SYNC_DEBUG + qDebug() << "getPlayerName" << playerID; +#endif + return profileDB->value(playerID, playerID).toString(); +} + QString ProfileDatabase::getPlayerName(int playerID) { QMutexLocker locker(&mutex); diff --git a/ProfileDatabase.h b/ProfileDatabase.h index 7a1fbd8..89ae497 100755 --- a/ProfileDatabase.h +++ b/ProfileDatabase.h @@ -29,6 +29,7 @@ class ProfileDatabase : public QObject Q_OBJECT public: explicit ProfileDatabase(QObject *parent = 0); + QString getPlayerName(QString playerID); QString getPlayerName(int playerID); QStringList getPlayers(); ~ProfileDatabase(); diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index a315b5a..5578ed8 100755 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -89,8 +89,16 @@ ProfileInterface::ProfileInterface(ProfileDatabase *profileDB, CrewDatabase *cre ui->hlButtons->setSpacing(6 * screenRatio); ui->hlButtons->setContentsMargins(9 * screenRatio, 9 * screenRatio, 9 * screenRatio, 9 * screenRatio); #else - ui->hlButtons->setSpacing(6 * screenRatio); - ui->hlButtons->setContentsMargins(9 * screenRatio, 15 * screenRatio, 15 * screenRatio, 17 * screenRatio); + if (QApplication::style()->objectName() == "macintosh") + { + ui->hlButtons->setSpacing(6 * screenRatio); + ui->hlButtons->setContentsMargins(9 * screenRatio, 15 * screenRatio, 15 * screenRatio, 17 * screenRatio); + } + else + { + ui->hlButtons->setSpacing(6 * screenRatio); + ui->hlButtons->setContentsMargins(9 * screenRatio, 9 * screenRatio, 9 * screenRatio, 9 * screenRatio); + } #endif setMouseTracking(true); @@ -512,6 +520,7 @@ void ProfileInterface::importFilesProgress(QStringList selectedFiles) pbBar.at(0)->setTextVisible(false); pbDialog.show(); + // THREADING HERE PLEASE QDateTime importDateTime = QDateTime::currentDateTime(); int currentTime = importDateTime.time().toString(importTimeFormat).toInt(); for (QString selectedFile : selectedFiles) @@ -525,6 +534,7 @@ void ProfileInterface::importFilesProgress(QStringList selectedFiles) } overallId++; } + pbDialog.close(); for (QString curErrorStr : failedFiles) { @@ -689,7 +699,6 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime return false; } ImportDialog *importDialog = new ImportDialog(this); - importDialog->setWindowFlags(importDialog->windowFlags()^Qt::WindowContextHelpButtonHint); importDialog->setImage(importImage); importDialog->setModal(true); importDialog->show(); @@ -1117,6 +1126,20 @@ void ProfileInterface::settingsApplied(int _contentMode, bool languageChanged) if (languageChanged) widget->retranslate(); } } +#ifdef Q_OS_MAC + // DPI calculation + qreal screenRatio = AppEnv::screenRatio(); + if (QApplication::style()->objectName() == "macintosh") + { + ui->hlButtons->setSpacing(6 * screenRatio); + ui->hlButtons->setContentsMargins(9 * screenRatio, 15 * screenRatio, 15 * screenRatio, 17 * screenRatio); + } + else + { + ui->hlButtons->setSpacing(6 * screenRatio); + ui->hlButtons->setContentsMargins(9 * screenRatio, 9 * screenRatio, 9 * screenRatio, 9 * screenRatio); + } +#endif } void ProfileInterface::enableSelected() diff --git a/SavegameDialog.cpp b/SavegameDialog.cpp index a3e52d3..d99c089 100755 --- a/SavegameDialog.cpp +++ b/SavegameDialog.cpp @@ -10,6 +10,10 @@ SavegameDialog::SavegameDialog(QWidget *parent) : { // Set Window Flags setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); +#ifdef Q_OS_LINUX + // for stupid Window Manager (GNOME 3 should feel triggered) + setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); +#endif // Setup User Interface ui->setupUi(this); diff --git a/SnapmaticEditor.cpp b/SnapmaticEditor.cpp index 768013a..17830f2 100644 --- a/SnapmaticEditor.cpp +++ b/SnapmaticEditor.cpp @@ -19,8 +19,10 @@ #include "SnapmaticEditor.h" #include "ui_SnapmaticEditor.h" #include "SnapmaticPicture.h" +#include "PlayerListDialog.h" #include "StringParser.h" #include "AppEnv.h" +#include #include #include #include @@ -28,15 +30,19 @@ #include #include -SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, QWidget *parent) : - QDialog(parent), crewDB(crewDB), +SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, ProfileDatabase *profileDB, QWidget *parent) : + QDialog(parent), crewDB(crewDB), profileDB(profileDB), ui(new Ui::SnapmaticEditor) { // Set Window Flags setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); +#ifdef Q_OS_LINUX + // for stupid Window Manager (GNOME 3 should feel triggered) + setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); +#endif ui->setupUi(this); - ui->cmdApply->setDefault(true); + ui->cmdCancel->setDefault(true); if (QIcon::hasThemeIcon("dialog-ok-apply")) { @@ -55,7 +61,7 @@ SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, QWidget *parent) : ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel")); } - snapmaticTitle = ""; + snapmaticTitle = QString(); smpic = 0; // DPI calculation @@ -154,14 +160,15 @@ void SnapmaticEditor::on_rbCustom_toggled(bool checked) void SnapmaticEditor::setSnapmaticPicture(SnapmaticPicture *picture) { smpic = picture; - localSpJson = smpic->getSnapmaticProperties(); + snapmaticProperties = smpic->getSnapmaticProperties(); ui->rbCustom->setChecked(true); - crewID = localSpJson.crewID; - isSelfie = localSpJson.isSelfie; - isMugshot = localSpJson.isMug; - isEditor = localSpJson.isFromRSEditor; - ui->cbDirector->setChecked(localSpJson.isFromDirector); - ui->cbMeme->setChecked(localSpJson.isMeme); + crewID = snapmaticProperties.crewID; + isSelfie = snapmaticProperties.isSelfie; + isMugshot = snapmaticProperties.isMug; + isEditor = snapmaticProperties.isFromRSEditor; + playersList = snapmaticProperties.playersList; + ui->cbDirector->setChecked(snapmaticProperties.isFromDirector); + ui->cbMeme->setChecked(snapmaticProperties.isMeme); if (isSelfie) { ui->rbSelfie->setChecked(true); @@ -180,6 +187,47 @@ void SnapmaticEditor::setSnapmaticPicture(SnapmaticPicture *picture) } setSnapmaticCrew(returnCrewName(crewID)); setSnapmaticTitle(picture->getPictureTitle()); + setSnapmaticPlayers(insertPlayerNames(playersList)); +} + +void SnapmaticEditor::insertPlayerNames(QStringList *players) +{ + for (int i = 0; i < players->size(); ++i) + { + players->replace(i, profileDB->getPlayerName(players->at(i))); + } +} + +QStringList SnapmaticEditor::insertPlayerNames(const QStringList &players) +{ + QStringList playersWI = players; + insertPlayerNames(&playersWI); + return playersWI; +} + +void SnapmaticEditor::setSnapmaticPlayers(const QStringList &players) +{ + QString editStr = QString("%1").arg(tr("Edit")); + QString playersStr; + if (players.length() != 1) + { + playersStr = tr("Players: %1 (%2)", "Multiple Player are inserted here"); + } + else + { + playersStr = tr("Player: %1 (%2)", "One Player is inserted here"); + } + if (players.length() != 0) + { + ui->labPlayers->setText(playersStr.arg(players.join(", "), editStr)); + } + else + { + ui->labPlayers->setText(playersStr.arg(QApplication::translate("PictureDialog", "No Players"), editStr)); + } + ui->gbValues->resize(ui->gbValues->sizeHint()); + ui->frameWidget->resize(ui->frameWidget->sizeHint()); + resize(width(), heightForWidth(width())); } void SnapmaticEditor::setSnapmaticTitle(const QString &title) @@ -203,6 +251,9 @@ void SnapmaticEditor::setSnapmaticTitle(const QString &title) { ui->labAppropriate->setText(tr("Appropriate: %1").arg(QString("%1").arg(tr("No", "No, could lead to issues")))); } + ui->gbValues->resize(ui->gbValues->sizeHint()); + ui->frameWidget->resize(ui->frameWidget->sizeHint()); + resize(width(), heightForWidth(width())); } void SnapmaticEditor::setSnapmaticCrew(const QString &crew) @@ -210,6 +261,9 @@ void SnapmaticEditor::setSnapmaticCrew(const QString &crew) QString editStr = QString("%1").arg(tr("Edit")); QString crewStr = tr("Crew: %1 (%2)").arg(StringParser::escapeString(crew), editStr); ui->labCrew->setText(crewStr); + ui->gbValues->resize(ui->gbValues->sizeHint()); + ui->frameWidget->resize(ui->frameWidget->sizeHint()); + resize(width(), heightForWidth(width())); } QString SnapmaticEditor::returnCrewName(int crewID_) @@ -228,12 +282,13 @@ void SnapmaticEditor::on_cmdApply_clicked() { qualifyAvatar(); } - localSpJson.crewID = crewID; - localSpJson.isSelfie = isSelfie; - localSpJson.isMug = isMugshot; - localSpJson.isFromRSEditor = isEditor; - localSpJson.isFromDirector = ui->cbDirector->isChecked(); - localSpJson.isMeme = ui->cbMeme->isChecked(); + snapmaticProperties.crewID = crewID; + snapmaticProperties.isSelfie = isSelfie; + snapmaticProperties.isMug = isMugshot; + snapmaticProperties.isFromRSEditor = isEditor; + snapmaticProperties.isFromDirector = ui->cbDirector->isChecked(); + snapmaticProperties.isMeme = ui->cbMeme->isChecked(); + snapmaticProperties.playersList = playersList; if (smpic) { QString currentFilePath = smpic->getPictureFilePath(); @@ -245,7 +300,7 @@ void SnapmaticEditor::on_cmdApply_clicked() } SnapmaticProperties fallbackProperties = smpic->getSnapmaticProperties(); QString fallbackTitle = smpic->getPictureTitle(); - smpic->setSnapmaticProperties(localSpJson); + smpic->setSnapmaticProperties(snapmaticProperties); smpic->setPictureTitle(snapmaticTitle); if (!smpic->exportPicture(currentFilePath)) { @@ -294,6 +349,18 @@ void SnapmaticEditor::on_cbQualify_toggled(bool checked) } } +void SnapmaticEditor::on_labPlayers_linkActivated(const QString &link) +{ + if (link == "g5e://editplayers") + { + PlayerListDialog *playerListDialog = new PlayerListDialog(playersList, profileDB, this); + connect(playerListDialog, SIGNAL(playerListUpdated(QStringList)), this, SLOT(playerListUpdated(QStringList))); + playerListDialog->show(); + playerListDialog->exec(); + delete playerListDialog; + } +} + void SnapmaticEditor::on_labTitle_linkActivated(const QString &link) { if (link == "g5e://edittitle") @@ -345,3 +412,9 @@ void SnapmaticEditor::on_labCrew_linkActivated(const QString &link) } } } + +void SnapmaticEditor::playerListUpdated(QStringList playerList) +{ + playersList = playerList; + setSnapmaticPlayers(insertPlayerNames(playerList)); +} diff --git a/SnapmaticEditor.h b/SnapmaticEditor.h index 243d85a..1e57294 100644 --- a/SnapmaticEditor.h +++ b/SnapmaticEditor.h @@ -21,6 +21,7 @@ #include #include "CrewDatabase.h" +#include "ProfileDatabase.h" #include "SnapmaticPicture.h" namespace Ui { @@ -32,8 +33,9 @@ class SnapmaticEditor : public QDialog Q_OBJECT public: - explicit SnapmaticEditor(CrewDatabase *crewDB, QWidget *parent = 0); + explicit SnapmaticEditor(CrewDatabase *crewDB, ProfileDatabase *profileDB, QWidget *parent = 0); void setSnapmaticPicture(SnapmaticPicture *picture); + void setSnapmaticPlayers(const QStringList &players); void setSnapmaticTitle(const QString &title); void setSnapmaticCrew(const QString &crew = ""); QString returnCrewName(int crewID); @@ -47,14 +49,18 @@ private slots: void on_cmdCancel_clicked(); void on_cmdApply_clicked(); void on_cbQualify_toggled(bool checked); + void on_labPlayers_linkActivated(const QString &link); void on_labTitle_linkActivated(const QString &link); void on_labCrew_linkActivated(const QString &link); + void playerListUpdated(QStringList playerList); private: CrewDatabase *crewDB; + ProfileDatabase *profileDB; Ui::SnapmaticEditor *ui; - SnapmaticProperties localSpJson; + SnapmaticProperties snapmaticProperties; SnapmaticPicture *smpic; + QStringList playersList; QString snapmaticTitle; int crewID; bool isSelfie; @@ -64,6 +70,8 @@ private: void mugshot_toggled(bool checked); void editor_toggled(bool checked); void qualifyAvatar(); + void insertPlayerNames(QStringList *players); + QStringList insertPlayerNames(const QStringList &players); }; #endif // SNAPMATICEDITOR_H diff --git a/SnapmaticEditor.ui b/SnapmaticEditor.ui index 6a8a538..f368efa 100644 --- a/SnapmaticEditor.ui +++ b/SnapmaticEditor.ui @@ -104,13 +104,26 @@ Snapmatic Values + + + + Qt::NoContextMenu + + + + + + true + + + Qt::NoContextMenu - Crew: %1 (%2) + true @@ -123,7 +136,7 @@ Qt::NoContextMenu - Title: %1 (%2) + true @@ -133,7 +146,7 @@ - Appropriate: %1 + true diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp index a25b7f0..48822da 100755 --- a/SnapmaticPicture.cpp +++ b/SnapmaticPicture.cpp @@ -108,7 +108,7 @@ void SnapmaticPicture::reset() #endif // SNAPMATIC PROPERTIES - localSpJson = {}; + localProperties = {}; } bool SnapmaticPicture::preloadFile() @@ -437,9 +437,9 @@ void SnapmaticPicture::updateStrings() cmpPicTitl.remove('*'); cmpPicTitl.remove('?'); cmpPicTitl.remove('.'); - pictureStr = tr("PHOTO - %1").arg(localSpJson.createdDateTime.toString("MM/dd/yy HH:mm:ss")); - sortStr = localSpJson.createdDateTime.toString("yyMMddHHmmss") % QString::number(localSpJson.uid); - QString exportStr = localSpJson.createdDateTime.toString("yyyyMMdd") % "-" % QString::number(localSpJson.uid); + 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); picExportFileName = exportStr % "_" % cmpPicTitl; } @@ -496,12 +496,12 @@ bool SnapmaticPicture::setImage(const QImage &picture) return false; } -bool SnapmaticPicture::setPictureStream(const QByteArray &picByteArray_) // clean method +bool SnapmaticPicture::setPictureStream(const QByteArray &streamArray) // clean method { if (writeEnabled) { bool customEOI = false; - QByteArray picByteArray = picByteArray_; + QByteArray picByteArray = streamArray; if (lowRamMode) { rawPicContent = qUncompress(rawPicContent); } QBuffer snapmaticStream(&rawPicContent); snapmaticStream.open(QIODevice::ReadWrite); @@ -638,9 +638,89 @@ QString SnapmaticPicture::getPictureStr() return pictureStr; } -QString SnapmaticPicture::getLastStep() +QString SnapmaticPicture::getLastStep(bool readable) { + if (readable) + { + QStringList lastStepList = lastStep.split(";/"); + if (lastStepList.length() < 2) { return lastStep; } + bool intOk; + //int stepNumber = lastStepList.at(0).toInt(&intOk); + //if (!intOk) { return lastStep; } + QStringList descStepList = lastStepList.at(1).split(","); + if (descStepList.length() < 1) { return lastStep; } + int argsCount = descStepList.at(0).toInt(&intOk); + if (!intOk) { return lastStep; } + if (argsCount == 1) + { + QString currentAction = descStepList.at(1); + QString actionFile = descStepList.at(2); + if (currentAction == "OpenFile") + { + return tr("open file %1").arg(actionFile); + } + } + else if (argsCount == 3 || argsCount == 4) + { + QString currentAction = descStepList.at(1); + QString actionFile = descStepList.at(2); + //QString actionStep = descStepList.at(3); + QString actionError = descStepList.at(4); + QString actionError2; + if (argsCount == 4) { actionError2 = descStepList.at(5); } + if (currentAction == "ReadingFile") + { + QString readableError = actionError; + if (actionError == "NOHEADER") + { + readableError = tr("header not exists"); + } + else if (actionError == "MALFORMEDHEADER") + { + readableError = tr("header is malformed"); + } + else if (actionError == "NOJPEG" || actionError == "NOPIC") + { + readableError = tr("picture not exists (%1)").arg(actionError); + } + else if (actionError == "NOJSON" || actionError == "CTJSON") + { + readableError = tr("JSON not exists (%1)").arg(actionError); + } + else if (actionError == "NOTITL" || actionError == "CTTITL") + { + readableError = tr("title not exists (%1)").arg(actionError); + } + else if (actionError == "NODESC" || actionError == "CTDESC") + { + readableError = tr("description not exists (%1)").arg(actionError); + } + else if (actionError == "JSONINCOMPLETE" && actionError2 == "JSONERROR") + { + readableError = tr("JSON is incomplete and malformed"); + } + else if (actionError == "JSONINCOMPLETE") + { + readableError = tr("JSON is incomplete"); + } + 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 + { + return lastStep; + } + } + else + { + return lastStep; + } + } return lastStep; + } QImage SnapmaticPicture::getImage(bool fastLoad) @@ -790,7 +870,7 @@ QString SnapmaticPicture::getJsonStr() SnapmaticProperties SnapmaticPicture::getSnapmaticProperties() { - return localSpJson; + return localProperties; } void SnapmaticPicture::parseJsonContent() @@ -808,19 +888,19 @@ void SnapmaticPicture::parseJsonContent() QJsonObject locObject = jsonObject["loc"].toObject(); if (locObject.contains("x")) { - if (locObject["x"].isDouble()) { localSpJson.location.x = locObject["x"].toDouble(); } + if (locObject["x"].isDouble()) { localProperties.location.x = locObject["x"].toDouble(); } else { jsonError = true; } } else { jsonIncomplete = true; } if (locObject.contains("y")) { - if (locObject["y"].isDouble()) { localSpJson.location.y = locObject["y"].toDouble(); } + if (locObject["y"].isDouble()) { localProperties.location.y = locObject["y"].toDouble(); } else { jsonError = true; } } else { jsonIncomplete = true; } if (locObject.contains("z")) { - if (locObject["z"].isDouble()) { localSpJson.location.z = locObject["z"].toDouble(); } + if (locObject["z"].isDouble()) { localProperties.location.z = locObject["z"].toDouble(); } else { jsonError = true; } } else { jsonIncomplete = true; } @@ -831,27 +911,27 @@ void SnapmaticPicture::parseJsonContent() if (jsonObject.contains("uid")) { bool uidOk; - localSpJson.uid = jsonMap["uid"].toInt(&uidOk); + localProperties.uid = jsonMap["uid"].toInt(&uidOk); if (!uidOk) { jsonError = true; } } else { jsonIncomplete = true; } if (jsonObject.contains("area")) { - if (jsonObject["area"].isString()) { localSpJson.location.area = jsonObject["area"].toString(); } + if (jsonObject["area"].isString()) { localProperties.location.area = jsonObject["area"].toString(); } else { jsonError = true; } } else { jsonIncomplete = true; } if (jsonObject.contains("crewid")) { bool crewIDOk; - localSpJson.crewID = jsonMap["crewid"].toInt(&crewIDOk); + localProperties.crewID = jsonMap["crewid"].toInt(&crewIDOk); if (!crewIDOk) { jsonError = true; } } else { jsonIncomplete = true; } if (jsonObject.contains("street")) { bool streetIDOk; - localSpJson.streetID = jsonMap["street"].toInt(&streetIDOk); + localProperties.streetID = jsonMap["street"].toInt(&streetIDOk); if (!streetIDOk) { jsonError = true; } } else { jsonIncomplete = true; } @@ -859,45 +939,45 @@ void SnapmaticPicture::parseJsonContent() { bool timestampOk; QDateTime createdTimestamp; - localSpJson.createdTimestamp = jsonMap["creat"].toUInt(×tampOk); - createdTimestamp.setTime_t(localSpJson.createdTimestamp); - localSpJson.createdDateTime = createdTimestamp; + localProperties.createdTimestamp = jsonMap["creat"].toUInt(×tampOk); + createdTimestamp.setTime_t(localProperties.createdTimestamp); + localProperties.createdDateTime = createdTimestamp; if (!timestampOk) { jsonError = true; } } else { jsonIncomplete = true; } if (jsonObject.contains("plyrs")) { - if (jsonObject["plyrs"].isArray()) { localSpJson.playersList = jsonMap["plyrs"].toStringList(); } + if (jsonObject["plyrs"].isArray()) { localProperties.playersList = jsonMap["plyrs"].toStringList(); } else { jsonError = true; } } - else { jsonIncomplete = 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["meme"].isBool()) { localSpJson.isMeme = jsonObject["meme"].toBool(); } + if (jsonObject["meme"].isBool()) { localProperties.isMeme = jsonObject["meme"].toBool(); } else { jsonError = true; } } else { jsonIncomplete = true; } if (jsonObject.contains("mug")) { - if (jsonObject["mug"].isBool()) { localSpJson.isMug = jsonObject["mug"].toBool(); } + if (jsonObject["mug"].isBool()) { localProperties.isMug = jsonObject["mug"].toBool(); } else { jsonError = true; } } else { jsonIncomplete = true; } if (jsonObject.contains("slf")) { - if (jsonObject["slf"].isBool()) { localSpJson.isSelfie = jsonObject["slf"].toBool(); } + if (jsonObject["slf"].isBool()) { localProperties.isSelfie = jsonObject["slf"].toBool(); } else { jsonError = true; } } else { jsonIncomplete = true; } if (jsonObject.contains("drctr")) { - if (jsonObject["drctr"].isBool()) { localSpJson.isFromDirector = jsonObject["drctr"].toBool(); } + if (jsonObject["drctr"].isBool()) { localProperties.isFromDirector = jsonObject["drctr"].toBool(); } else { jsonError = true; } } else { jsonIncomplete = true; } if (jsonObject.contains("rsedtr")) { - if (jsonObject["rsedtr"].isBool()) { localSpJson.isFromRSEditor = jsonObject["rsedtr"].toBool(); } + if (jsonObject["rsedtr"].isBool()) { localProperties.isFromRSEditor = jsonObject["rsedtr"].toBool(); } else { jsonError = true; } } else { jsonIncomplete = true; } @@ -908,38 +988,50 @@ void SnapmaticPicture::parseJsonContent() } else { + if (jsonIncomplete && jsonError) + { + lastStep = "2;/4,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",3,JSONINCOMPLETE,JSONERROR"; + } + else if (jsonIncomplete) + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",3,JSONINCOMPLETE"; + } + else if (jsonError) + { + lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",3,JSONERROR"; + } jsonOk = false; } } -bool SnapmaticPicture::setSnapmaticProperties(SnapmaticProperties newSpJson) +bool SnapmaticPicture::setSnapmaticProperties(SnapmaticProperties properties) { QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonStr.toUtf8()); QJsonObject jsonObject = jsonDocument.object(); QJsonObject locObject; - locObject["x"] = newSpJson.location.x; - locObject["y"] = newSpJson.location.y; - locObject["z"] = newSpJson.location.z; + locObject["x"] = properties.location.x; + locObject["y"] = properties.location.y; + locObject["z"] = properties.location.z; jsonObject["loc"] = locObject; - jsonObject["uid"] = newSpJson.uid; - jsonObject["area"] = newSpJson.location.area; - jsonObject["crewid"] = newSpJson.crewID; - jsonObject["street"] = newSpJson.streetID; - jsonObject["creat"] = QJsonValue::fromVariant(newSpJson.createdTimestamp); - jsonObject["plyrs"] = QJsonValue::fromVariant(newSpJson.playersList); - jsonObject["meme"] = newSpJson.isMeme; - jsonObject["mug"] = newSpJson.isMug; - jsonObject["slf"] = newSpJson.isSelfie; - jsonObject["drctr"] = newSpJson.isFromDirector; - jsonObject["rsedtr"] = newSpJson.isFromRSEditor; + jsonObject["uid"] = properties.uid; + jsonObject["area"] = properties.location.area; + jsonObject["crewid"] = properties.crewID; + jsonObject["street"] = properties.streetID; + jsonObject["creat"] = QJsonValue::fromVariant(properties.createdTimestamp); + jsonObject["plyrs"] = QJsonValue::fromVariant(properties.playersList); + jsonObject["meme"] = properties.isMeme; + jsonObject["mug"] = properties.isMug; + jsonObject["slf"] = properties.isSelfie; + jsonObject["drctr"] = properties.isFromDirector; + jsonObject["rsedtr"] = properties.isFromRSEditor; jsonDocument.setObject(jsonObject); if (setJsonStr(QString::fromUtf8(jsonDocument.toJson(QJsonDocument::Compact)))) { - localSpJson = newSpJson; + localProperties = properties; return true; } return false; @@ -1157,6 +1249,15 @@ bool SnapmaticPicture::isHidden() return false; } +bool SnapmaticPicture::isVisible() +{ + if (picFilePath.right(7) == QLatin1String(".hidden")) + { + return false; + } + return true; +} + bool SnapmaticPicture::setPictureHidden() { if (isCustomFormat) diff --git a/SnapmaticPicture.h b/SnapmaticPicture.h index c41015f..71f15f8 100755 --- a/SnapmaticPicture.h +++ b/SnapmaticPicture.h @@ -59,10 +59,10 @@ public: bool preloadFile(); bool readingPictureFromFile(const QString &fileName, bool writeEnabled = true, bool cacheEnabled = false, bool fastLoad = true, bool lowRamMode = false); bool readingPicture(bool writeEnabled = true, bool cacheEnabled = false, bool fastLoad = true, bool lowRamMode = false); - bool isPicOk(); + bool isPicOk(); // Please use isPictureOk instead void clearCache(); QImage getImage(bool fastLoad = false); - QString getLastStep(); + QString getLastStep(bool readable = true); QString getPictureStr(); QString getPictureHead(); QString getPictureTitl(); @@ -75,35 +75,48 @@ public: QString getOriginalPictureFilePath(); int getContentMaxLength(); bool setImage(const QImage &picture); - bool setPictureTitl(const QString &newTitle); - bool setPictureStream(const QByteArray &picByteArray); + bool setPictureTitl(const QString &newTitle); // Please use setPictureTitle instead + bool setPictureStream(const QByteArray &streamArray); void updateStrings(); void emitUpdate(); // FILE MANAGEMENT bool exportPicture(const QString &fileName, SnapmaticFormat format = SnapmaticFormat::Auto_Format); - void setPicFileName(const QString &picFileName); - void setPicFilePath(const QString &picFilePath); - bool deletePicFile(); - - // ALTERNATIVES - QString getPictureTitle() { return getPictureTitl(); } - QString getPictureString() { return getPictureStr(); } - QString getPictureDescription() { return getPictureDesc(); } - bool setPictureTitle(const QString &newTitle) { return setPictureTitl(newTitle); } + void setPicFileName(const QString &picFileName); // Please use setPictureFileName instead + void setPicFilePath(const QString &picFilePath); // Please use setPictureFilePath instead + bool deletePicFile(); // Please use deletePictureFile instead // JSON bool isJsonOk(); - QString getJsonStr(); + QString getJsonStr(); // Please use getPictureJson instead SnapmaticProperties getSnapmaticProperties(); - bool setSnapmaticProperties(SnapmaticProperties newSpJson); - bool setJsonStr(const QString &jsonStr, bool updateProperties = false); + bool setSnapmaticProperties(SnapmaticProperties properties); + bool setJsonStr(const QString &jsonStr, bool updateProperties = false); // Please use setPictureJson instead // VISIBILITY - bool isHidden(); + bool isHidden(); // Please use isPictureHidden instead + bool isVisible(); // Please use isPictureVisible instead bool setPictureHidden(); bool setPictureVisible(); + // ALTERNATIVES (MORE DEVELOPER FRIENDLY FUNCTION CALLS) + QString getJsonString() { return getJsonStr(); } // Please use getPictureJson instead + QString getPictureJson() { return getJsonStr(); } + QString getPictureTitle() { return getPictureTitl(); } + QString getPictureString() { return getPictureStr(); } + QString getPictureDescription() { return getPictureDesc(); } + bool setJsonString(const QString &jsonString, bool updateProperties = false) { return setJsonStr(jsonString, updateProperties); } // Please use setPictureJson instead + bool setPictureJson(const QString &json, bool updateProperties = false) { return setJsonStr(json, updateProperties); } + bool setPictureTitle(const QString &title) { return setPictureTitl(title); } + void setPictureFileName(const QString &fileName) { return setPicFileName(fileName); } + void setPictureFilePath(const QString &filePath) { return setPicFilePath(filePath); } + bool deletePictureFile() { return deletePicFile(); } + bool isPictureOk() { return isPicOk(); } + bool isPictureHidden() { return isHidden(); } + bool isPictureVisible() { return isVisible(); } + bool setHidden() { return setPictureHidden(); } // Please use setPictureHidden instead + bool setVisible() { return setPictureVisible(); } // Please use setPictureVisible instead + // PREDEFINED PROPERTIES QSize getSnapmaticResolution(); @@ -151,7 +164,7 @@ private: void parseJsonContent(); bool jsonOk; QString jsonStr; - SnapmaticProperties localSpJson; + SnapmaticProperties localProperties; // VERIFY CONTENT static bool verifyTitleChar(const QChar &titleChar); diff --git a/SnapmaticWidget.cpp b/SnapmaticWidget.cpp index 23210d5..0707f32 100755 --- a/SnapmaticWidget.cpp +++ b/SnapmaticWidget.cpp @@ -284,7 +284,7 @@ void SnapmaticWidget::makePictureVisibleSlot() void SnapmaticWidget::editSnapmaticProperties() { - SnapmaticEditor *snapmaticEditor = new SnapmaticEditor(crewDB, this); + SnapmaticEditor *snapmaticEditor = new SnapmaticEditor(crewDB, profileDB, this); snapmaticEditor->setSnapmaticPicture(smpic); snapmaticEditor->setModal(true); snapmaticEditor->show(); diff --git a/config.h b/config.h index 7740d23..393c41f 100755 --- a/config.h +++ b/config.h @@ -50,7 +50,7 @@ #ifndef GTA5SYNC_APPVER #ifndef GTA5SYNC_DAILYB -#define GTA5SYNC_APPVER "1.5.0-dev5" +#define GTA5SYNC_APPVER "1.5.0-dev6" #else #define GTA5SYNC_APPVER GTA5SYNC_DAILYB #endif diff --git a/gta5view.pro b/gta5view.pro index 61fb0d4..35736a9 100755 --- a/gta5view.pro +++ b/gta5view.pro @@ -44,6 +44,7 @@ SOURCES += main.cpp \ PictureDialog.cpp \ PictureExport.cpp \ PictureWidget.cpp \ + PlayerListDialog.cpp \ ProfileDatabase.cpp \ ProfileInterface.cpp \ ProfileLoader.cpp \ @@ -80,6 +81,7 @@ HEADERS += \ PictureDialog.h \ PictureExport.h \ PictureWidget.h \ + PlayerListDialog.h \ ProfileDatabase.h \ ProfileInterface.h \ ProfileLoader.h \ @@ -108,6 +110,7 @@ FORMS += \ MapLocationDialog.ui \ OptionsDialog.ui \ PictureDialog.ui \ + PlayerListDialog.ui \ ProfileInterface.ui \ SavegameDialog.ui \ SavegameWidget.ui \ diff --git a/res/app.rc b/res/app.rc index 7e7ea47..dd5a131 100755 --- a/res/app.rc +++ b/res/app.rc @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view\0" - VALUE "FileVersion", "1.5.0-dev5\0" + VALUE "FileVersion", "1.5.0-dev6\0" VALUE "InternalName", "gta5view\0" VALUE "LegalCopyright", "Copyright © 2016-2017 Syping\0" VALUE "OriginalFilename", "gta5view.exe\0" VALUE "ProductName", "gta5view\0" - VALUE "ProductVersion", "1.5.0-dev5\0" + VALUE "ProductVersion", "1.5.0-dev6\0" END END END From 98b7c766fea26b45373fe15d1d8e63350b9aae59 Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 12 Dec 2017 04:49:56 +0100 Subject: [PATCH 019/359] did forget updated translation :) --- res/gta5sync_de.qm | Bin 35946 -> 39030 bytes res/gta5sync_de.ts | 525 ++++++++++++++++++++++++++++-------------- res/gta5sync_en_US.qm | Bin 18413 -> 18239 bytes res/gta5sync_en_US.ts | 473 +++++++++++++++++++++++-------------- res/gta5sync_fr.qm | Bin 26687 -> 26826 bytes res/gta5sync_fr.ts | 473 +++++++++++++++++++++++-------------- res/gta5sync_ru.qm | Bin 32539 -> 32582 bytes res/gta5sync_ru.ts | 473 +++++++++++++++++++++++-------------- 8 files changed, 1263 insertions(+), 681 deletions(-) diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index 77abfa839cca02c56cd76a90491146039927befc..922f0e1fae8f4bcdd548c19b9137b23882e2b2f6 100755 GIT binary patch delta 5065 zcma)A3s@6p7QIO(Br{2f2#BC)z{N$R2q>UpRZtK_MFq6tGeCf7NH7VA_!vN3MN!wL zR@+ir6|GgaK2Ymp)#78TMMcH6Znuxsl~!xNs%@=pb#>2V1gc^`zJBy%CNuY*d+xdS z&*!)6q(ASJ@`Ltgb^hdb)ta+@U60P#aQKT@B5pqs6%nc56ER>Dk+hV^^C}T@iO3g! z@?@gC`9y&cL|!iw^^PXeC`9zyOcdsd>o5_$&J#^PPE-&~(gP=mJiaBSas!b|C^3BH z4kB+KVz$gBn!lKsLk!WZDq$-BqShWQ~xJo@oW*x5+%Ox zgGg6jN%n+$P^wsB>-!UwIx1OEHI3*c{-|X2pn*iu4$11m{}OeslQi5%qN1-QjU&xO zsa}#hnq5TWU8H`897Mr4q+^3`f{nT0`x|XQFRN62b-&fR0 zzdD^nJo%SPuWj)lDp@DJc_R%johbcv7%JEHl|Be{C$d+{WIi9j{mW$RmVXlQA+k=V z9uf7qAoI54xj)6oA`0#imHNxlYL*iH*-vIH^dtJq4wXLlreWeOAV04*6(%tXZ?aPBN-Z2xzN4C|Ps zZYe~azGW(xL2@lIE7DhDM2XoH2M>jgJN0h88eoE+1|McH5#* zG@)eyrxe^hJ5l6*5hr{kqQOJq!C;FndruMg@Hpl@Nb%C&fRR?k^jUjR@K?OT7z0zd zm5Z37SIoMK>)25W%cs{c*L@U!eWw7Dy{=euZVeVqnWDPR4D74emGnJP&pC>{7g6~H zsp8l%xV-B!#eYVRhuI{GrUU40dX(bPKA0{4Eu}mj9xEB9^gS6ul(177^IJ7q$sbb2 z{(xOv`j&Fk)&`<^2bFmnHeuesR9fl`M479U^R7bDL1UB)%#d>M4P}Ynzc3YFDvuny z2A!{mqJjcG|D7JtMw zya&nMKH)BRPs8aoguAls2O=LWcYQZnkotgYQrU1uL~u9jF$Jk5Dv3Ze?W9UJ)B|1! zPPQ}lRF(h{zcN&HVlbv*xQD924#LZgD*ocz2Do{ss&Ng@cU!dT=R==i zEF>cOnAFUhahTuEYW5Z?8D&wseQ*Ke`G(qKi90sp6t%Akl6s#}`~KYrzlb`kdk6jq zB}S`f^nmorPHI~caLniGieYOYc~AA)mvF60P*+J9nDl68@k4RAx>}2hCVsCzcpK6# zu5mOeyYmm!x7NcE!R4ARH!+m93Qb@XhObkxCg|S?XS=P5s=!+6P%onIL(Nc49rk3B zCbkp;Crr?!dccYU93sB5LsN7Kx)vPN?3e({&P~;Pcz6_pWK_ZN}_-Aj)ga7k3kx=W6p;qVe2L?YfVr5ruBiZhV}E!@8q(`&lH` z{iLla9!#MWeMftIKN^($qxSr{y-=c;_L~1L2)#{vw;L)8=&8N;RtR3q2b&dd*K*u2 zcS$G57q;#yZe&XG7+svzYO&V#^-b&|33iwV_NuM!KVRkeIR?<-}uFODF=7W6e9em#N*_GKTS+l zmQD;F5)z`oop!|L+Zo)oHMs2$qxYlWwCShRN`R zylr4RxjU(6Ai9u4KqJ}l|7Ug4#$_4p&9R^5?rQtJ?1LTW?cRo`sp=?^hNA!>yxA$d zkjmU#0CkBo+YMG-iX{{6(+x8fWIV~GOC0{yE()y}-(fEDZ|i&IlaaRx z57egEa~VFEMq>DqX$<&_qUlhb+1U~kDidV9j_WLZo72LkqjQU)??!W`B`@D(up68` zPciHB^YnIO=2&Bqn04)8Ad%rmB2JqiQhsH(}BKWa2bsL$*em)kvyTCfUg|)A+evRfFCvjmXH*aZdwt(=q qN*8CdAElx^VSNe5$nypEd(N>>Rp@Cq+Ho?sitKc3?X{w%?*9i|fiUF& delta 2598 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 XPh8Qgscu-ADHcD-534q;&2s)f`L*S) diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index 190af4e..8357dda 100755 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -147,13 +147,13 @@ Copyright &copy; <a href="%5">%6</a> %7<br/>%8 i <span style=" font-weight:600;">gta5sync</span><br/><br/>Ein Projekt zum ansehen und synchronisieren von Grand Theft Auto 5 Snapmatic Bilder und Spielständen<br/><br/>Projektversion: %1<br/>Gebaut mit Qt %2<br/>Läuft auf Qt %3<br/><br/>Copyright &copy; <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync is lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + Using %1 %2 Using specific library, example Using libmyfuck Verwendet %1 %2 - + Translated by %1 Translated by translator, example Translated by Syping Übersetzt von %1 @@ -179,31 +179,31 @@ Copyright &copy; <a href="%5">%6</a> %7<br/>%8 i https://github.com/Syping/ - + NAME_OF_TRANSLATOR Enter your name there Syping - + TRANSLATOR_PROFILE Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage https://github.com/Syping/ - + 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> @@ -212,45 +212,45 @@ Snapmatic Bilder und Spielständen Copyright &copy; <a href="%1">%2</a> %3<br/>%4 ist lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> Pictures and Savegames Ein Projekt zum ansehen und synchronisieren von<br/> Grand Theft Auto V Snapmatic Bilder und Spielständen - + Release Release - + Release Candidate Release Candidate - - + + Daily Build Daily Build - + Developer Entwickler - + Beta Beta - + Alpha Alpha - + Custom Eigener @@ -385,8 +385,8 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen - - + + Background Colour: <span style="color: %1">%1</span> Hintergrundfarbe: <span style="color: %1">%1</span> @@ -426,33 +426,33 @@ When you plan to use it as Avatar the picture will be cut! Wenn du planst es als Avatar zu verwenden das Bild wird abgetrennt! - - + + 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 - + 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... @@ -465,12 +465,12 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! Snapmatic JSON Editor - + &Save &Speichern - + &Close S&chließen @@ -478,6 +478,11 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! Patching of Snapmatic Properties failed because of JSON Error Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen JSON Fehler + + + JSON Error + JSON Fehler + MapLocationDialog @@ -527,7 +532,7 @@ Y: %2 &Fertig - + X: %1 Y: %2 X and Y position @@ -747,8 +752,8 @@ Y: %2 - - + + Current: %1 Aktuell: %1 @@ -804,7 +809,7 @@ Y: %2 %1 (%2 wenn verfügbar) - + %1 %1 %1 @@ -818,31 +823,31 @@ Y: %2 Der eigene Ordner initialisiert sobald du %1 neugestartet hast. - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (Erste näheste Sprache) - + System System in context of System default System - + %1 (Closest to Interface) Next closest language compared to the Interface %1 (Näheste zur Oberfläche) - + Auto Automatic language choice. Automatisch - + The new Custom Folder will initialise after you restart %1. Der eigene Ordner wird initialisiert sobald du %1 neugestartet hast. @@ -851,15 +856,15 @@ Y: %2 Die Änderung der Sprache nimmt Effekt sobald du %1 neugestartet hast. - + No Profile No Profile, as default Kein Profil - - + + Profile: %1 Profil: %1 @@ -973,8 +978,8 @@ Y: %2 Exportiere als &JPG Bild... - - + + Export as &Picture... Als &Bild exportieren... @@ -983,8 +988,8 @@ Y: %2 Exportiere als &GTA Snapmatic... - - + + Export as &Snapmatic... Als &Snapmatic exportieren... @@ -997,8 +1002,8 @@ Y: %2 &Kartenansicht öffnen... - - + + &Edit Properties... Eigenschaften bearb&eiten... @@ -1012,13 +1017,13 @@ Y: %2 Erweitert (&A) - - + + Open &Map Viewer... &Kartenansicht öffnen... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -1027,31 +1032,32 @@ Taste 2 - Overlay umschalten Pfeiltasten - Navigieren - - + + Snapmatic Picture Viewer Snapmatic Bildansicht - - + + Failed at %1 - Fehlgeschlagen bei %1 + Fehlgeschlagen beim %1 - - + + No Crew Keine Crew - - + + + No Players Keine Spieler - + Avatar Preview Mode Press 1 for Default View Avatar Vorschaumodus @@ -1096,7 +1102,7 @@ Drücke A für Standardansicht Keine Crew - + Unknown Location Unbekannter Standort @@ -1266,12 +1272,70 @@ Drücke A für Standardansicht Keine gültige Datei wurde ausgewählt - - + + Open &JSON Editor... &JSON Editor öffnen... + + PlayerListDialog + + Edit Players + Spieler bearbeiten + + + + Edit Players... + Spieler bearbeiten... + + + + Available Players: + Verfügbare Spieler: + + + + Selected Players: + Ausgewählte Spieler: + + + + &Apply + &Übernehmen + + + + &Cancel + 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! + + ProfileInterface @@ -1331,40 +1395,40 @@ Drücke A für Standardansicht Profil schließen - + Loading... Lade... - + Snapmatic Loader Snapmatic Lader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>Folgende Snapmatic Bilder wurden repariert</h4>%1 - - + + Import... Importieren... - - - - - - - - - - - - - + + + + + + + + + + + + + Import Importieren @@ -1377,13 +1441,13 @@ Drücke A für Standardansicht Importfähige Dateien (*.g5e *.jpg *.png SGTA* PGTA*) - + Savegames files (SGTA*) Spielstanddateien (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) @@ -1393,29 +1457,29 @@ Drücke A für Standardansicht Alle Bilddateien (*.jpg *.png) - + Importable files (%1) Importfähige Dateien (%1) - + All image files (%1) Alle Bilddateien (%1) - + All files (**) Alle Dateien (**) - - + + Import file %1 of %2 files Importiere Datei %1 von %2 Dateien - + Import failed with... %1 @@ -1424,29 +1488,29 @@ Drücke A für Standardansicht %1 - + 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 parsed properly Kann %1 nicht importieren weil die Datei nicht richtig gelesen werden kann - + Can't import %1 because file format can't be detected Kann %1 nicht importieren weil das Dateiformat nicht erkannt werden kann - + Initialising export... Initialisiere Export... @@ -1455,23 +1519,23 @@ Drücke A für Standardansicht Kann %1 nicht importieren weil das Dateiformat nicht gültig ist - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA oder endet mit .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Fehlgeschlagen beim Importieren vom Snapmatic Bild, dieses Bild ist bereits im Spiel - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exportiere Snapmatic Bilder%2<br><br>JPG Bilder machen es möglich sie mit ein Bildansicht Programm zu öffnen<br>Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren<br><br>Exportieren als: - - + + No valid file is selected Keine gültige Datei wurde ausgewählt @@ -1486,35 +1550,35 @@ Drücke A für Standardansicht Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA - + Failed to import the Snapmatic picture, can't copy the file into profile Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren - + Failed to import the Savegame, can't copy the file into profile Fehlgeschlagen beim Importieren vom Spielstand, kann Spielstanddatei nicht ins Profil kopieren - + Failed to import the Savegame, no Savegame slot is left Fehlgeschlagen beim Importieren vom Spielstand, kein Spielstandslot mehr frei - - + + JPG pictures and GTA Snapmatic JPG Bilder und GTA Snapmatic - - + + JPG pictures only Nur JPG Bilder - - + + GTA Snapmatic only Nur GTA Snapmatic @@ -1533,25 +1597,25 @@ Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren Exportieren als: - - + + No Snapmatic pictures or Savegames files are selected Keine Snapmatic Bilder oder Spielstände ausgewählt - - - + + + Remove selected Auswahl löschen - + You really want remove the selected Snapmatic picutres and Savegame files? Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Fehlgeschlagen beim kompletten entfernen der ausgewählten Snapmatic Bilder und/oder der Spielstanddateien @@ -1572,10 +1636,10 @@ Exportieren als: Fehlgeschlagenen beim Import vom Spielstand weil kein Spielstandslot mehr übrig ist - - - - + + + + Export selected Auswahl exportieren @@ -1596,7 +1660,7 @@ Exportieren als: Wie sollen wir mit den Snapmatic Bilder umgehen? - + Export selected... Auswahl exportieren... @@ -1609,7 +1673,7 @@ Exportieren als: Initialisierung... - + Export failed with... %1 @@ -1644,7 +1708,7 @@ Exportieren als: Alle Profildateien (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1672,7 +1736,7 @@ Exportieren als: SavegameDialog - + Savegame Viewer Spielstandanzeiger @@ -1704,7 +1768,7 @@ Exportieren als: Schließen - + Failed at %1 Fehlgeschlagen bei %1 @@ -1813,32 +1877,32 @@ Exportieren als: Fehlgeschlagen beim Löschen %1 von deinen Spielständen - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All &Alles auswählen - + &Deselect All Alles a&bwählen @@ -1877,7 +1941,7 @@ Exportieren als: Spielstand kopieren - + &Export &Exportieren @@ -1953,12 +2017,12 @@ Exportieren als: - - - - - - + + + + + + Snapmatic Properties Snapmatic Eigenschaften @@ -2003,7 +2067,7 @@ Exportieren als: Meme - + Snapmatic Title Snapmatic Titel @@ -2013,46 +2077,55 @@ Exportieren als: 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 - + Extras Extras - + Qualify as Avatar automatically at apply Beim Übernehmen als Avatar qualifizieren - + Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture Das Qualifizieren als Avatar erlaubt dir dieses Snapmatic als Social Club Profilbild zu nutzen - + &Apply &Übernehmen - + &Cancel Abbre&chen @@ -2065,54 +2138,69 @@ Exportieren als: Cancel - + + Edit Bearbeiten - + Players: %1 (%2) + Multiple Player + Spieler: (%1) (%2) + + + Player: %1 (%2) + One Player + Spieler: (%1) (%2) + + + 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: @@ -2124,6 +2212,101 @@ Exportieren als: PHOTO - %1 FOTO - %1 + + + open file %1 + Datei öffnen %1 + + + + header not exists + Header existiert nicht + + + + header is malformed + Header ist fehlerhaft + + + + picture not exists (%1) + Bild existiert nicht (%1) + + + + JSON not exists (%1) + JSON existiert nicht (%1) + + + + title not exists (%1) + Titel existiert nicht (%1) + + + + description not exists (%1) + Beschreibung existiert nicht (%1) + + + header not exists error + Header existiert nicht Fehler + + + header is malformed error + Header ist fehlerhaft Fehler + + + picture not exists error (%1) + Bild existiert nicht Fehler (%1) + + + JSON not exists error (%1) + JSON existiert nicht Fehler (%1) + + + title not exists error (%1) + Titel existiert nicht Fehler (%1) + + + description not exists error (%1) + Beschreibung existiert nicht Fehler (%1) + + + JSON is incomplete and malformed error + JSON ist unvollständig und Fehlerhaft Fehler + + + JSON is incomplete error + JSON ist unvollständig Fehler + + + JSON is malformed error + JSON ist Fehlerhaft Fehler + + + + reading file %1 because of %2 + Example for %2: JSON is malformed error + Datei lesen %1 wegen %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 + SnapmaticWidget @@ -2170,7 +2353,7 @@ Exportieren als: Bist du sicher %1 von deine Snapmatic Bilder zu löschen? - + Edi&t Bearbei&ten @@ -2183,7 +2366,7 @@ Exportieren als: &Im Spiel deaktivieren - + &Export &Exportieren @@ -2196,12 +2379,12 @@ Exportieren als: Exportiere als &GTA Snapmatic - + Show &In-game &Im Spiel anzeigen - + Hide &In-game &Im Spiel ausblenden @@ -2234,32 +2417,32 @@ Exportieren als: Exportiere als &Snapmatic... - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All Alles &auswählen - + &Deselect All Alles a&bwählen @@ -2605,7 +2788,7 @@ Exportieren als: - + Select GTA V Folder... diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm index a017ab7fb6f68d45df27e8578c6f80bd1e12bf79..f097a03af3f3321ccba17fb238037e4e7d104ed9 100644 GIT binary patch delta 2332 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 - + Using %1 %2 Using specific library, example Using libmyfuck - + Translated by %1 Translated by translator, example Translated by Syping - + NAME_OF_TRANSLATOR Enter your name there Syping - + TRANSLATOR_PROFILE Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage https://github.com/Syping/ - + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> Pictures and Savegames - + 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> - + Release - + Release Candidate - - + + Daily Build - + Developer - + Beta - + Alpha - + Custom @@ -196,8 +196,8 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> Background Color: <span style="color: %1">%1</span> @@ -237,32 +237,32 @@ Pictures and Savegames - - + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! - + 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... @@ -275,15 +275,20 @@ When you want to use it as Avatar the image will be detached! - + &Save - + &Close + + + JSON Error + + MapLocationDialog @@ -318,7 +323,7 @@ When you want to use it as Avatar the image will be detached! - + X: %1 Y: %2 X and Y position @@ -496,8 +501,8 @@ Y: %2 - - + + Current: %1 @@ -539,50 +544,50 @@ Y: %2 - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default - + %1 (Closest to Interface) Next closest language compared to the Interface - + Auto Automatic language choice. - + %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 @@ -623,67 +628,68 @@ Y: %2 - - + + Export as &Picture... - - + + Export as &Snapmatic... - - + + &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 @@ -792,12 +798,66 @@ Press 1 for Default View - - + + Open &JSON Editor... + + PlayerListDialog + + + Edit Players... + + + + + Available Players: + + + + + Selected Players: + + + + + &Apply + + + + + &Cancel + + + + + 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! + + + ProfileInterface @@ -848,212 +908,212 @@ Press 1 for Default View - + Loading... - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - - + + Import... - - - - - - - - - - - - - + + + + + + + + + + + + + Import - + Importable files (%1) - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) - + All image files (%1) - + All files (**) - - + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - + Failed to read Snapmatic picture - + Failed to read Savegame file - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - - - + + + + Export selected - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - + Export selected... - + Initialising export... Initializing export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - - + + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files @@ -1085,7 +1145,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer @@ -1105,7 +1165,7 @@ Press 1 for Default View - + Failed at %1 @@ -1154,37 +1214,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1278,12 +1338,12 @@ Press 1 for Default View - - - - - - + + + + + + Snapmatic Properties @@ -1329,103 +1389,117 @@ 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 - + Extras - + Qualify as Avatar automatically at apply - + Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture - + &Apply - + &Cancel - + + 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: @@ -1437,6 +1511,65 @@ Press 1 for Default View 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 + + SnapmaticWidget @@ -1493,52 +1626,52 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1732,7 +1865,7 @@ Press 1 for Default View - + Select GTA V Folder... diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index 1750a3e81909b81a84f8b685ddb765cde1b67899..a016b0369573c5ffa8cfbd387ab7360e27b30e0d 100644 GIT binary patch delta 2042 zcmXAqdsJ0b9>>4;a4zSbbM6E5B0j(pL|#gO&=o;M617pdJaGWF^=%Fr~FLVC-?7Pq2zrBCI?|1+1 zv2(g_ztiooIRq>DgMH0MWw&{(ejR-<_Z5Mk!; z5sl`pKv6HSH~`}Qmw_eC5WBcHbpphGvfw_%iw?l^u|{W11@v(YoZ1O}8aX}_`Y#p& z69%F0{{~2UsL{~|L(@`TC>%kNuLIL-H0FdNWbA<4QiO~hkoyTj&IJH@aR~WOI9Z9% zqv^mCc?cbgH_xFl>jCD?Nrn>`plIvH`CQyz}`0ka8LO zp7jJ`_Q196Bp?;ws|VE#d;+)5bG_<=p}l%w(RAD^Ukv#Fs8g=Y1mfZ~F21fYcbv}m zuYQ2XkZx`6r~~j0&{fVJ0g_+Sz1p}E@Lj0;*~GHXo+uQ2!*VbAL0G?q>y{r9_7q0| zQ>SQ*O%+=H979PGG)}i^Og>eAM(6Ex2?w5T00JX4&J{G~ToGI)w}ALIp`(NKUf>cA z_4oq`dxdT>m}$N%^zF0&)6NS0FYL04$T- zqN_(aKj@a@dJC9jciWyP15S@O-Og@g8qx{TU1hzd7Kzah=Tf)>qHO^;B!`Gg=IjO% z-x1&PT*fq7#M-whtZ}ONZhjrz2(h*99+1DEWO?#0liar=jr^57O#V*ZCI6ta{KVGn z+*OcE>L_f%+Z?!YqFZ#$+y~5;HD=EcU9E+H`!(_N&3S-QCU&W-=)gr{_wFciNbIk9 zpE{@-=QnH29v1sMH}m`J;!t51U=0+18#qPB9uXfMj^+g&dU0%D43w17DhgGp@#$k46Q7cT9`(|LYK*c-WrO@3_`Fo{{SCnHp0s0kHPhK3HJojrfX_ro&Bx36g6>Lf z8FzW$4XI-w3W&ZZ_4Lpwo-3s5cD_iD*#>Y2s~?g35}bS*N%FaZMI5BfmM@0c z03W+Ne32OygWN~j6x|(OV1ANf^77+B>B^IK2A&`&0UOzC{MISqQLI=}uM)eqk$h3( zvObN4j}-fDu3I>w$9colu zuAE8K0duRB{+fe;{G7(QF&g7`YRrmJEs5~$q#vJZ$lt=v9EFGVd= zb%$P~q%G>CgD3g@x|;tT6PdSF-Rv|kVky5?Yoi@(j-_gC$}Kjt0gYKTYTaWWK0dR$ z9XH8W)CO<%qKp!?G4u@v@X(mmp?0rl;G$-d`-{@l6Y;mHv4`4U#e-Mc)q#)K&;!Zp z-x}DRGgH)Gx-K)Jo2u>q1ItdM_+c`&*SNZ^wm+m)2Y8}jC{q^yWES(bee9K)7YU? z%;H$53;o`Fu(*^jt4-s)e_19!&s#)#TjK9iHCsxOrF`H^{;7srUZ`VrFs1y!iO!RABC|u$1+-RU;DqMBvXC7J=o}JFL@!eVs%MXX+?Rvzt=Xg veus}(|IdUe^&OMPx4S0!=-MAozT+{rR`po2uH@x4FJ+ciR<&OXEs6UdjyE|I delta 2036 zcmXAqeNYtl8OOi3?B3q)-f@7?Q(mHxYIqNVaDt$sARu@Gau5lKm;j~l(m^S?~`^U{^cklT<`@DRg zXU~3N`1GP-kH708fY$-7R;TR@AZ!IJivaNw;I|NvRsdN$fv^NV?*Ss`)BdbZ?;v1~ zH}4-4+6`NKs>Y=$P0(qD*{X3hUg(nUxRqL5SaG}QVRXKGE*UC@nVV(q+?5f zpB;qc`5Z`Z)LEDaQ)>a>+lR2YH-OM5Itz~>V$!kmE+Qr!7lk6?;w-Ws5&w=QA0zTq zHZVO1k(2&XuIgOjLh8H>2CE^X@)BHlE*hEJnW^1~oDMQS6|UlZAi#>>9UWohdQK3pU|1~rcP&t&{=T{Sdb|6^dtajbA%HEu25jn zGeVyj&P@G;;Xhh|r}qk;S7=b$AzUBMVWi2zjYIyx%6r0-*eUF-=%pO`J5aF8E1_W= zD6H~wcJ2VC`FiaxR+wR?*M&wVBA*tG8Y}ixsF?618Tk3LqCJiF=|{!9dHaFIKH?6e z?@EelUGoQm%@rwjG(7@J%1N4)oF{((o?l4*hpZ!iBHt4`c2lj-Un30+(@J`gOT^Bo zgUqiMk)=O!QijPOmk&WVyA1AOOS0!=sVBA{C|L{J*rgs+oY zqL@gITWXys1fr^>_N}Xc=YB68J8}xJ?U8QWW~Wp%usjk4=ZOxKy#Er4%-qdy>L+?UJO_b|XS z@=Ixyrg>0j{9E$+Z+Jg@Oy2nA4Pa)Eyk~y{r8p%;c3*G<#V6$U{#vq5{xIh*F!hk! zGcp%Q*dz}OP$|Aa^1qgID6J1o(o%MKWveMJQqQ%&o;Kzx8{V}B);_nxWo>8n&!iK%bE#bL`?Z5lewl7#)zG}g;NykAjl zpZ3$>OU3pNuB3wN%IwFXq@aYqP6z7OI(^qGnfsa;aJW(?cX4ulMoKa^ra_!8FRb%I}a_L#>{HhiP z^1aTL4xMFN)#Z0+w`8+gJmw9o&R1P8f)()3Qva0A1KM7lmK!=Vn$(lQ0YGA#dTz9V z0X$UCFQ)pFCRER+Za}HlnbfB*x3!kY-_Xvjb49Y&S3|$$;Uv$mKChi#a0htCt$FJC;<6EK8meYxbR39IHv7Lhg}ux+hkO#qPt$aBWY|My zbktmz!^%8c)BInfZQ5pYi$Me&f#!BA!?IVIKOU>&@J%#F%Qn|EOT;xdU%J_1-^mFx z=j-&Vwk)zxZ(;W=i??3l2w$@l`m;@;kvi?SEgzlY2tRd7XPm(@xGI45sg|3y6n4Y` zZ*g+vMV5MZuX%|{ChAPxU=92QqnOiTUGRWivu6xjYe$YV_#W%aO{}icYHj<;2`pS| z?Kn?I{%zL5ldMW?y>https://github.com/Ganjalo/ - + Using %1 %2 Using specific library, example Using libmyfuck Utilise %1 %2 - + Translated by %1 Translated by translator, example Translated by Syping Traduit par %1 - + NAME_OF_TRANSLATOR Enter your name there Ganjalo - + TRANSLATOR_PROFILE Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage https://github.com/Ganjalo/ - + 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> @@ -176,45 +176,45 @@ et les fichiers de sauvegarde de Grand Theft Auto V Copyright &copy; <a href="%1">%2</a> %3<br/>%4 est distribué sous license <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> Pictures and Savegames Un outil pour gérer et synchroniser les photos Snapmatic<br/> et les fichiers de sauvegarde de Grand Theft Auto V - + Release - + Release Candidate - - + + Daily Build - + Developer - + Beta - + Alpha - + Custom Personnalisé @@ -331,8 +331,8 @@ et les fichiers de sauvegarde de Grand Theft Auto V - - + + Background Colour: <span style="color: %1">%1</span> @@ -362,32 +362,32 @@ et les fichiers de sauvegarde de Grand Theft Auto V A&nnuler - - + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! - + 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 - + Select Colour... @@ -400,15 +400,20 @@ When you want to use it as Avatar the image will be detached! - + &Save - + &Close + + + JSON Error + + MapLocationDialog @@ -443,7 +448,7 @@ When you want to use it as Avatar the image will be detached! - + X: %1 Y: %2 X and Y position @@ -632,8 +637,8 @@ Y: %2 - - + + Current: %1 @@ -685,37 +690,37 @@ Y: %2 Système - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default Système - + %1 (Closest to Interface) Next closest language compared to the Interface - + Auto Automatic language choice. - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. @@ -728,15 +733,15 @@ Y: %2 Le changement de langue sera actif au prochain lancement de %1. - + No Profile No Profile, as default Aucun profil - - + + Profile: %1 Profil : %1 @@ -902,8 +907,8 @@ Y: %2 Exporter comme image &JPG... - - + + Export as &Picture... @@ -912,8 +917,8 @@ Y: %2 Exporter comme &GTA Snapmatic... - - + + Export as &Snapmatic... @@ -922,19 +927,19 @@ Y: %2 Édi&ter - - + + &Edit Properties... Modifier les &propriétés... - - + + Open &Map Viewer... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -943,31 +948,32 @@ 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 @@ -986,7 +992,7 @@ Appuyer sur 1 pour le mode par défaut Aucun crew - + Unknown Location Emplacement inconnu @@ -1020,12 +1026,66 @@ Appuyer sur 1 pour le mode par défaut Échec de l'export de la photo Snapmatic - - + + Open &JSON Editor... + + PlayerListDialog + + + Edit Players... + + + + + Available Players: + + + + + Selected Players: + + + + + &Apply + A&ppliquer + + + + &Cancel + + + + + 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! + + + ProfileInterface @@ -1080,40 +1140,40 @@ Appuyer sur 1 pour le mode par défaut Photos activées : %1 sur %2 - + Loading... Chargement... - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - - + + Import... Importer... - - - - - - - - - - - - - + + + + + + + + + + + + + Import Importer @@ -1122,36 +1182,36 @@ Appuyer sur 1 pour le mode par défaut Fichiers de profil GTA (SGTA* PGTA*) - + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) - + All image files (%1) - + All files (**) Tous les fichiers (**) - - + + Import file %1 of %2 files Importation du fichier %1 sur %2 - + Import failed with... %1 @@ -1160,25 +1220,25 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No valid file is selected Fichier invalide - + Importable files (%1) - + Failed to read Snapmatic picture Impossible d'ouvrir la photo Snapmatic - + Failed to read Savegame file Impossible de lire le fichier de sauvegarde @@ -1200,78 +1260,78 @@ Appuyer sur 1 pour le mode par défaut Tous les fichiers image (*.jpg *.png) - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*, *.g5e) - + Failed to import the Snapmatic picture, the picture is already in the game Impossible d'importer la photo Snapmatic, un fichier du même nom existe déjà - + Failed to import the Snapmatic picture, can't copy the file into profile Impossible d'importer la photo Snapmatic, impossible de copier le fichier dans le profil - + Failed to import the Savegame, can't copy the file into profile Impossible d'importer la sauvegarde, impossible de copier le fichier dans le profil - + Failed to import the Savegame, no Savegame slot is left Impossible d'importer la sauvegarde, aucun emplacement libre - - - - + + + + Export selected Exporter la sélection - - + + JPG pictures and GTA Snapmatic Images JPG et GTA Snapmatic - - + + JPG pictures only Images JPG seulement - - + + GTA Snapmatic only GTA Snapmatic seulement - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exporter les photos Snapmatic%2<br><br>Les fichiers JPG permettent d'ouvrir les photos avec une visionneuse d'images<br>Les GTA Snapmatic permettent d'importer les photos dans le jeu<br><br>Exporter comme : - + Export selected... Exporter la sélection... - + Initialising export... @@ -1280,7 +1340,7 @@ Appuyer sur 1 pour le mode par défaut Initialisation de l'export... - + Export failed with... %1 @@ -1289,25 +1349,25 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No Snapmatic pictures or Savegames files are selected Aucun fichier de sauvegarde ou photo Snapmatic sélectionné - - - + + + Remove selected Supprimer la sélection - + You really want remove the selected Snapmatic picutres and Savegame files? Supprimer la sélection ? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Impossible de supprimer la sélection @@ -1317,7 +1377,7 @@ Appuyer sur 1 pour le mode par défaut Tous les fichiers de profil (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1345,7 +1405,7 @@ Appuyer sur 1 pour le mode par défaut SavegameDialog - + Savegame Viewer Gestionnaire de sauvegardes @@ -1365,7 +1425,7 @@ Appuyer sur 1 pour le mode par défaut &Fermer - + Failed at %1 Échec de %1 @@ -1414,7 +1474,7 @@ Appuyer sur 1 pour le mode par défaut Supprimer - + &Export &Exporter @@ -1505,32 +1565,32 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + &View &Voir - + &Remove &Supprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner to&ut - + &Deselect All &Déselectionner tout @@ -1540,12 +1600,12 @@ Appuyer sur 1 pour le mode par défaut - - - - - - + + + + + + Snapmatic Properties Propriétés Snapmatic @@ -1590,7 +1650,7 @@ Appuyer sur 1 pour le mode par défaut Meme - + Snapmatic Title Titre Snapmatic @@ -1600,100 +1660,114 @@ 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 + + + + + Player: %1 (%2) + One Player is inserted here + + + + + Appropriate: %1 Valide : %1 - + Extras Extras - + Qualify as Avatar automatically at apply Qualifier comme Avatar - + Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture Qualifier comme Avatar permet d'utiliser cette image en tant que photo de profil sur le Social Club - + &Apply A&ppliquer - + &Cancel 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? - - + + 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 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 : @@ -1705,6 +1779,65 @@ Appuyer sur 1 pour le mode par défaut PHOTO - %1 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 + + SnapmaticWidget @@ -1771,17 +1904,17 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + Edi&t Édi&ter - + Show &In-game &Visible en jeu - + Hide &In-game &Invisible en jeu @@ -1790,7 +1923,7 @@ Appuyer sur 1 pour le mode par défaut Modifier les &propriétés... - + &Export &Exporter @@ -1803,32 +1936,32 @@ Appuyer sur 1 pour le mode par défaut Exporter comme &GTA Snapmatic... - + &View &Voir - + &Remove S&upprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner &tout - + &Deselect All &Déselectionner tout @@ -2002,7 +2135,7 @@ Appuyer sur 1 pour le mode par défaut - + Select GTA V Folder... diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index 8579c33255d6edb154d0109202a0e5d00730acbe..dccda8d3ec81b4719a2fca3b795fd8481bacfc24 100644 GIT binary patch delta 2417 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 Qb83wW{hiP%%$^tiKT24p5C8xG diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index bdfc27a..d76c32d 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -91,43 +91,43 @@ Running with Qt %6<br/> https://github.com/VADemon/ - + Using %1 %2 Using specific library, example Using libmyfuck ИÑпользует %1 %2 - + Translated by %1 Translated by translator, example Translated by Syping Перевёл %1 - + NAME_OF_TRANSLATOR Enter your name there VADemon - + TRANSLATOR_PROFILE Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage 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> @@ -136,45 +136,45 @@ Pictures and Savegames Copyright &copy; <a href="%1">%2</a> %3<br/>%4 под лицензией <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> Pictures and Savegames Проект Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра и ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ <br/> Grand Theft Auto V Snapmatic картинок и Ñохранений - + Release Релиз - + Release Candidate Предварительный выпуÑк - - + + Daily Build Ð”Ð½ÐµÐ²Ð½Ð°Ñ Ñборка - + Developer Разработчик - + Beta Бета - + Alpha Ðльфа - + Custom Ðе извеÑтен контекÑÑ‚ Ð¡Ð²Ð¾Ñ @@ -293,8 +293,8 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений - - + + Background Colour: <span style="color: %1">%1</span> Цвет фона: <span style="color: %1">%1</span> @@ -325,32 +325,32 @@ Grand Theft Auto V Snapmatic картинок и ÑохраненийОт&мена - - + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! - + 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... Выбрать цвет... @@ -363,15 +363,20 @@ When you want to use it as Avatar the image will be detached! - + &Save - + &Close &Закрыть + + + JSON Error + + MapLocationDialog @@ -413,7 +418,7 @@ Y: %2 - + X: %1 Y: %2 X and Y position @@ -596,8 +601,8 @@ Y: %2 - - + + Current: %1 @@ -650,37 +655,37 @@ Y: %2 %1 (%2 еÑли имеетÑÑ) - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default СиÑтема - + %1 (Closest to Interface) Next closest language compared to the Interface - + Auto Automatic language choice. - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. Ð”Ñ€ÑƒÐ³Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° будет загружена поÑле перезапуÑка %1. @@ -693,15 +698,15 @@ Y: %2 Язык изменитÑÑ Ð¿Ð¾Ñле перезапуÑка %1. - + No Profile No Profile, as default Ðет Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - - + + Profile: %1 Профиль: %1 @@ -781,8 +786,8 @@ Y: %2 ЭкÑп&ортировать как картинку JPG... - - + + Export as &Picture... ЭкÑпортировать как &картинку... @@ -791,8 +796,8 @@ Y: %2 ЭкÑ&портировать как GTA Snapmatic... - - + + Export as &Snapmatic... ЭкÑпортировать как &Snapmatic... @@ -805,19 +810,19 @@ Y: %2 Открыть &карту... - - + + &Edit Properties... &Изменить ÑвойÑтва... - - + + Open &Map Viewer... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -826,31 +831,32 @@ Arrow Keys - Navigate Стрелки - ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ - - + + Snapmatic Picture Viewer ПроÑмотрщик фотографий Snapmatic - - + + Failed at %1 Ошибка при %1 - - + + No Crew Вне банды - - + + + No Players Игроков нет - + Avatar Preview Mode Press 1 for Default View Режим проÑмотра аватарок @@ -865,7 +871,7 @@ Press 1 for Default View Без группы - + Unknown Location ÐеизвеÑтное меÑто @@ -1003,12 +1009,66 @@ Press 1 for Default View Ðе удалоÑÑŒ Ñкопировать текущую картинку Snapmatic - - + + Open &JSON Editor... + + PlayerListDialog + + + Edit Players... + + + + + Available Players: + + + + + Selected Players: + + + + + &Apply + &Применить + + + + &Cancel + + + + + 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! + + + ProfileInterface @@ -1059,40 +1119,40 @@ Press 1 for Default View Закрыть профиль - + Loading... Загрузка... - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - - + + Import... Импортировать... - - - - - - - - - - - - - + + + + + + + + + + + + + Import Импортировать @@ -1101,31 +1161,31 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (SGTA* PGTA*) - + Savegames files (SGTA*) Файлы ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ (SGTA*) - + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) - + All files (**) Ð’Ñе файлы (**) - - + + Import file %1 of %2 files ИмпортируютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ %1 из %2 - + Import failed with... %1 @@ -1134,13 +1194,13 @@ Press 1 for Default View %1 - + Failed to read Snapmatic picture Ðе удалоÑÑŒ загрузить картинку Snapmatic - + Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ @@ -1150,8 +1210,8 @@ Press 1 for Default View Ðе получилоÑÑŒ импортировать %1 из-за неправильного формата файла - - + + No valid file is selected Выбранный файл неверен @@ -1170,93 +1230,93 @@ Press 1 for Default View Ð’Ñе Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (*.jpg *.png) - + Importable files (%1) Файлы Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° (%1) - + All image files (%1) Ð’Ñе файлы изображений (%1) - + Can't import %1 because file can't be parsed properly Ðе получилоÑÑŒ импортировать %1, файл не может быть правильно обработан - + Can't import %1 because file format can't be detected Ðе получилоÑÑŒ импортировать %1, не удалоÑÑŒ определить формат файла - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе удалоÑÑŒ импортировать картинку Snapmatic, название не начинаетÑÑ Ñ PGTA или не заканчиваетÑÑ Ñ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе удалоÑÑŒ импортировать картинку Snapmatic, картинка уже в игре - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе удалоÑÑŒ импортировать картинку Snapmatic, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, can't copy the file into profile Ðе удалоÑÑŒ импортировать Ñохранение, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, no Savegame slot is left Ðе удалоÑÑŒ импортировать Ñохранение, нет пуÑтых Ñчеек под ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + JPG pictures and GTA Snapmatic Картинки JPG и GTA Snapmatic - - + + JPG pictures only Только картинки JPG - - + + GTA Snapmatic only Только GTA Snapmatic - + Initialising export... Подготовка к ÑкÑпорту... - - + + No Snapmatic pictures or Savegames files are selected Ðе выделены ни один Snapmatic или Ñохранение - - - + + + Remove selected СнÑть выделение - + You really want remove the selected Snapmatic picutres and Savegame files? Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Ðе удалоÑÑŒ удалить полноÑтью выбранные картинки Snapmatic и/или файлы Ñохранений @@ -1277,20 +1337,20 @@ Press 1 for Default View Ðе получилоÑÑŒ имортировать копию ÑохранениÑ, потому что не оÑталоÑÑŒ Ñвободных под них Ñлотов - - - - + + + + Export selected ЭкÑпортировать выделенное - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1ЭÑкпортировать картинки Snapmatic%2<br><br>Картинки JPG можно открыть любым проÑмотрщиком<br>Картинки формата GTA Snapmatic можно Ñнова импортировать в игру<br><br>ЭкÑпортировать как: - + Export selected... Экпортировать выделенное... @@ -1299,7 +1359,7 @@ Press 1 for Default View Подготавливаю ÑÑкпорт... - + Export failed with... %1 @@ -1320,7 +1380,7 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1348,7 +1408,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer ПроÑмотрщик Ñохранений @@ -1376,7 +1436,7 @@ Press 1 for Default View Закрыть - + Failed at %1 Ошибка при %1 @@ -1476,32 +1536,32 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить Ñохранение %1 - + &View &ПроÑмотр - + &Remove &Удалить - + &Select &Выбрать - + &Deselect Сн&Ñть выбор - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1511,7 +1571,7 @@ Press 1 for Default View Копировать Ñохранение - + &Export &ЭкÑпортировать @@ -1571,12 +1631,12 @@ Press 1 for Default View - - - - - - + + + + + + Snapmatic Properties СвойÑтва Snapmatic @@ -1617,8 +1677,7 @@ Press 1 for Default View Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² Snapmatic - - + Crew: %1 (%2) Банда: %1 (%2) @@ -1628,97 +1687,112 @@ Press 1 for Default View Meme - + Snapmatic Title Заголовок Snapmatic - - + Title: %1 (%2) Заголовок: %1 (%2) - - - + + Players: %1 (%2) + Multiple Player are inserted here + + + + + Player: %1 (%2) + One Player is inserted here + + + + + Appropriate: %1 Подходит: %1 - + Extras Дополнительно - + Qualify as Avatar automatically at apply При применении наÑтроек пометить как аватар - + Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture C меткой аватара можно загрузить Ñту картинку Snapmatic в профиль на Social Club - + &Apply &Применить - + &Cancel &Отмена - + + 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 из-за проблемы ввода/вывода - + New Snapmatic title: Ðовый заголовок Snapmatic: - + Snapmatic Crew Банда на Snapmatic - + New Snapmatic crew: ÐÐ¾Ð²Ð°Ñ Ð±Ð°Ð½Ð´Ð° на Snapmatic: @@ -1730,6 +1804,65 @@ Press 1 for Default View PHOTO - %1 ФОТО - %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 + + SnapmaticWidget @@ -1786,17 +1919,17 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить %1 из колелкции картинок Snapmatic - + Edi&t &Правка - + Show &In-game Показывать в &игре - + Hide &In-game Ск&рыть в игре @@ -1805,7 +1938,7 @@ Press 1 for Default View &Изменить ÑвойÑтва... - + &Export &ЭкÑпорт @@ -1818,32 +1951,32 @@ Press 1 for Default View ЭкÑ&портировать как GTA Snapmatic... - + &View По&казать - + &Remove У&далить - + &Select &Выделить - + &Deselect Сн&Ñть выделение - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -2071,7 +2204,7 @@ Press 1 for Default View - + Select GTA V Folder... From 9b6253b848773c612b6c064833ed58139cea3708 Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 17 Dec 2017 13:03:43 +0100 Subject: [PATCH 020/359] added mass tool and improved import --- .travis.yml | 8 +- AboutDialog.cpp | 4 - ImageEditorDialog.cpp | 185 + ImageEditorDialog.h | 53 + ImageEditorDialog.ui | 130 + ImportDialog.cpp | 148 +- ImportDialog.h | 6 + ImportDialog.ui | 194 +- JsonEditorDialog.cpp | 4 - MapLocationDialog.cpp | 4 - OptionsDialog.cpp | 6 +- PictureDialog.cpp | 70 +- PictureDialog.h | 5 + PlayerListDialog.cpp | 17 +- PlayerListDialog.h | 3 + ProfileInterface.cpp | 427 +- ProfileInterface.h | 3 + SavegameDialog.cpp | 23 +- SavegameDialog.h | 1 + SnapmaticEditor.cpp | 13 +- SnapmaticPicture.cpp | 26 +- SnapmaticPicture.h | 3 + SnapmaticWidget.cpp | 33 +- SnapmaticWidget.h | 5 +- UserInterface.cpp | 22 + UserInterface.h | 4 + UserInterface.ui | 68 +- config.h | 2 +- gta5view.pro | 3 + main.cpp | 4 + res/app.rc | 4 +- res/gta5sync_de.qm | Bin 39030 -> 42321 bytes res/gta5sync_de.ts | 778 +- res/gta5sync_en_US.qm | Bin 18239 -> 24091 bytes res/gta5sync_en_US.ts | 858 ++- res/gta5sync_fr.qm | Bin 26826 -> 26035 bytes res/gta5sync_fr.ts | 710 +- res/gta5sync_ru.qm | Bin 32582 -> 31928 bytes res/gta5sync_ru.ts | 714 +- res/qtbase_en_GB.ts | 16450 ++++++++++++++++++++++++++++++++++++++++ 40 files changed, 19799 insertions(+), 1189 deletions(-) create mode 100644 ImageEditorDialog.cpp create mode 100644 ImageEditorDialog.h create mode 100644 ImageEditorDialog.ui create mode 100644 res/qtbase_en_GB.ts diff --git a/.travis.yml b/.travis.yml index 18df08f..7397324 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,14 +32,14 @@ before_script: script: - cd qt5 - - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev6\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev7\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev6 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev7 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package - cd .. - cd qt4 - - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev6\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro + - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev7\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev6 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package + - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev7 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package - cd .. deploy: diff --git a/AboutDialog.cpp b/AboutDialog.cpp index 7bb069f..bf2d4ed 100755 --- a/AboutDialog.cpp +++ b/AboutDialog.cpp @@ -28,10 +28,6 @@ AboutDialog::AboutDialog(QWidget *parent) : { // Set Window Flags setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); -#ifdef Q_OS_LINUX - // for stupid Window Manager (GNOME 3 should feel triggered) - setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); -#endif // Build Strings QString appVersion = qApp->applicationVersion(); diff --git a/ImageEditorDialog.cpp b/ImageEditorDialog.cpp new file mode 100644 index 0000000..7fffbd9 --- /dev/null +++ b/ImageEditorDialog.cpp @@ -0,0 +1,185 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "ImageEditorDialog.h" +#include "ui_ImageEditorDialog.h" +#include "ProfileInterface.h" +#include "SidebarGenerator.h" +#include "StandardPaths.h" +#include "ImportDialog.h" +#include "AppEnv.h" +#include "config.h" +#include +#include +#include +#include + +ImageEditorDialog::ImageEditorDialog(SnapmaticPicture *picture, QString profileName, QWidget *parent) : + QDialog(parent), smpic(picture), profileName(profileName), + ui(new Ui::ImageEditorDialog) +{ + // Set Window Flags + setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); + + ui->setupUi(this); + ui->cmdClose->setFocus(); + + // DPI calculation + qreal screenRatio = AppEnv::screenRatio(); + + snapmaticResolutionLW = 516 * screenRatio; // 430 + snapmaticResolutionLH = 288 * screenRatio; // 240 + ui->labPicture->setMinimumSize(snapmaticResolutionLW, snapmaticResolutionLH); + ui->labCapacity->setText(tr("Capacity: %1").arg(QString::number(qRound((double)picture->getContentMaxLength() / 1024)) % " KB")); + + imageIsChanged = false; + pictureCache = picture->getImage(); + ui->labPicture->setPixmap(QPixmap::fromImage(pictureCache).scaled(snapmaticResolutionLW, snapmaticResolutionLH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + + setMaximumSize(sizeHint()); + setMinimumSize(sizeHint()); + setFixedSize(sizeHint()); +} + +ImageEditorDialog::~ImageEditorDialog() +{ + delete ui; +} + +void ImageEditorDialog::on_cmdClose_clicked() +{ + close(); +} + +void ImageEditorDialog::on_cmdReplace_clicked() +{ + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("FileDialogs"); + bool dontUseNativeDialog = settings.value("DontUseNativeDialog", false).toBool(); + settings.beginGroup("ImportReplace"); + +fileDialogPreOpen: //Work? + QFileDialog fileDialog(this); + fileDialog.setFileMode(QFileDialog::ExistingFile); + fileDialog.setViewMode(QFileDialog::Detail); + fileDialog.setAcceptMode(QFileDialog::AcceptOpen); + fileDialog.setOption(QFileDialog::DontUseNativeDialog, dontUseNativeDialog); + fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); + fileDialog.setWindowTitle(ProfileInterface::tr("Import...")); + fileDialog.setLabelText(QFileDialog::Accept, ProfileInterface::tr("Import")); + + // Getting readable Image formats + QString imageFormatsStr = " "; + for (QByteArray imageFormat : QImageReader::supportedImageFormats()) + { + imageFormatsStr += QString("*.") % QString::fromUtf8(imageFormat).toLower() % " "; + } + + QStringList filters; + filters << ProfileInterface::tr("All image files (%1)").arg(imageFormatsStr.trimmed()); + filters << ProfileInterface::tr("All files (**)"); + fileDialog.setNameFilters(filters); + + QList sidebarUrls = SidebarGenerator::generateSidebarUrls(fileDialog.sidebarUrls()); + + fileDialog.setSidebarUrls(sidebarUrls); + fileDialog.setDirectory(settings.value(profileName % "+Directory", StandardPaths::documentsLocation()).toString()); + fileDialog.restoreGeometry(settings.value(profileName % "+Geometry", "").toByteArray()); + + if (fileDialog.exec()) + { + QStringList selectedFiles = fileDialog.selectedFiles(); + if (selectedFiles.length() == 1) + { + QString selectedFile = selectedFiles.at(0); + QString selectedFileName = QFileInfo(selectedFile).fileName(); + + QFile snapmaticFile(selectedFile); + if (!snapmaticFile.open(QFile::ReadOnly)) + { + QMessageBox::warning(this, ProfileInterface::tr("Import"), ProfileInterface::tr("Can't import %1 because file can't be open").arg("\""+selectedFileName+"\"")); + goto fileDialogPreOpen; + } + QImage *importImage = new QImage(); + QImageReader snapmaticImageReader; + snapmaticImageReader.setDecideFormatFromContent(true); + snapmaticImageReader.setDevice(&snapmaticFile); + if (!snapmaticImageReader.read(importImage)) + { + QMessageBox::warning(this, ProfileInterface::tr("Import"), ProfileInterface::tr("Can't import %1 because file can't be parsed properly").arg("\""+selectedFileName+"\"")); + delete importImage; + goto fileDialogPreOpen; + } + ImportDialog *importDialog = new ImportDialog(this); + importDialog->setImage(importImage); + importDialog->setModal(true); + importDialog->show(); + importDialog->exec(); + if (importDialog->isImportAgreed()) + { + pictureCache = importDialog->image(); + ui->labPicture->setPixmap(QPixmap::fromImage(pictureCache).scaled(snapmaticResolutionLW, snapmaticResolutionLH, Qt::KeepAspectRatio, Qt::SmoothTransformation)); + imageIsChanged = true; + } + delete importDialog; + } + } + + settings.setValue(profileName % "+Geometry", fileDialog.saveGeometry()); + settings.setValue(profileName % "+Directory", fileDialog.directory().absolutePath()); + settings.endGroup(); + settings.endGroup(); +} + +void ImageEditorDialog::on_cmdSave_clicked() +{ + if (imageIsChanged) + { + const QByteArray previousPicture = smpic->getPictureStream(); + bool success = smpic->setImage(pictureCache); + if (success) + { + QString currentFilePath = smpic->getPictureFilePath(); + QString originalFilePath = smpic->getOriginalPictureFilePath(); + QString backupFileName = originalFilePath % ".bak"; + if (!QFile::exists(backupFileName)) + { + QFile::copy(currentFilePath, backupFileName); + } + if (!smpic->exportPicture(currentFilePath)) + { + smpic->setPictureStream(previousPicture); + QMessageBox::warning(this, tr("Snapmatic Image Editor"), tr("Patching of Snapmatic Image failed because of I/O Error")); + return; + } + smpic->emitCustomSignal("PictureUpdated"); + } + else + { + QMessageBox::warning(this, tr("Snapmatic Image Editor"), tr("Patching of Snapmatic Image failed because of Image Error")); + return; + } + } + close(); +} + +void ImageEditorDialog::on_cmdQuestion_clicked() +{ + QMessageBox::information(this, tr("Snapmatic Image Editor"), tr("Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality.")); + +} diff --git a/ImageEditorDialog.h b/ImageEditorDialog.h new file mode 100644 index 0000000..a9417cd --- /dev/null +++ b/ImageEditorDialog.h @@ -0,0 +1,53 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2017 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef IMAGEEDITORDIALOG_H +#define IMAGEEDITORDIALOG_H + +#include "SnapmaticPicture.h" +#include + +namespace Ui { +class ImageEditorDialog; +} + +class ImageEditorDialog : public QDialog +{ + Q_OBJECT + +public: + explicit ImageEditorDialog(SnapmaticPicture *picture, QString profileName, QWidget *parent = 0); + ~ImageEditorDialog(); + +private slots: + void on_cmdClose_clicked(); + void on_cmdReplace_clicked(); + void on_cmdSave_clicked(); + void on_cmdQuestion_clicked(); + +private: + SnapmaticPicture *smpic; + QString profileName; + Ui::ImageEditorDialog *ui; + int snapmaticResolutionLW; + int snapmaticResolutionLH; + bool imageIsChanged; + QImage pictureCache; +}; + +#endif // IMAGEEDITORDIALOG_H diff --git a/ImageEditorDialog.ui b/ImageEditorDialog.ui new file mode 100644 index 0000000..090941c --- /dev/null +++ b/ImageEditorDialog.ui @@ -0,0 +1,130 @@ + + + ImageEditorDialog + + + + 0 + 0 + 516 + 335 + + + + Overwrite Image... + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 516 + 288 + + + + + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + + + + + Capacity: %1 + + + + + + + ? + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + + + + &Import... + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + &Overwrite + + + + + + + &Close + + + + + + + + + + + + + diff --git a/ImportDialog.cpp b/ImportDialog.cpp index 87a719f..e128f6f 100644 --- a/ImportDialog.cpp +++ b/ImportDialog.cpp @@ -18,13 +18,21 @@ #include "ImportDialog.h" #include "ui_ImportDialog.h" +#include "SidebarGenerator.h" +#include "StandardPaths.h" #include "AppEnv.h" +#include "config.h" +#include +#include #include +#include #include +#include #include #include #include #include +#include #include // IMAGES VALUES @@ -39,11 +47,7 @@ ImportDialog::ImportDialog(QWidget *parent) : ui(new Ui::ImportDialog) { // Set Window Flags - setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowMinMaxButtonsHint); -#ifdef Q_OS_LINUX - // for stupid Window Manager (GNOME 3 should feel triggered) - setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); -#endif + setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); ui->setupUi(this); importAgreed = false; @@ -62,11 +66,15 @@ ImportDialog::ImportDialog(QWidget *parent) : ui->cbIgnore->setChecked(false); ui->labColour->setText(tr("Background Colour: %1").arg(selectedColour.name())); + ui->labBackgroundImage->setText(tr("Background Image:")); + ui->cmdBackgroundWipe->setVisible(false); // DPI calculation qreal screenRatio = AppEnv::screenRatio(); - snapmaticResolutionLW = 430 * screenRatio; - snapmaticResolutionLH = 240 * screenRatio; + snapmaticResolutionLW = 516 * screenRatio; // 430 + snapmaticResolutionLH = 288 * screenRatio; // 240 + ui->labPicture->setMinimumSize(snapmaticResolutionLW, snapmaticResolutionLH); + ui->vlButtom->setSpacing(6 * screenRatio); #ifndef Q_OS_MAC ui->vlButtom->setContentsMargins(9 * screenRatio, 6 * screenRatio, 9 * screenRatio, 9 * screenRatio); @@ -80,9 +88,10 @@ ImportDialog::ImportDialog(QWidget *parent) : ui->vlButtom->setContentsMargins(9 * screenRatio, 6 * screenRatio, 9 * screenRatio, 9 * screenRatio); } #endif - setMinimumSize(430 * screenRatio, 380 * screenRatio); - setMaximumSize(430 * screenRatio, 380 * screenRatio); - setFixedSize(430 * screenRatio, 380 * screenRatio); + + setMaximumSize(sizeHint()); + setMinimumSize(sizeHint()); + setFixedSize(sizeHint()); } ImportDialog::~ImportDialog() @@ -97,6 +106,33 @@ void ImportDialog::processImage() QPixmap snapmaticPixmap(snapmaticResolutionW, snapmaticResolutionH); snapmaticPixmap.fill(selectedColour); QPainter snapmaticPainter(&snapmaticPixmap); + if (!backImage.isNull()) + { + if (!ui->cbStretch->isChecked()) + { + int diffWidth = 0; + int diffHeight = 0; + if (backImage.width() != snapmaticResolutionW) + { + diffWidth = snapmaticResolutionW - backImage.width(); + diffWidth = diffWidth / 2; + } + else if (backImage.height() != snapmaticResolutionH) + { + diffHeight = snapmaticResolutionH - backImage.height(); + diffHeight = diffHeight / 2; + } + snapmaticPainter.drawImage(0 + diffWidth, 0 + diffHeight, backImage); + } + else + { + snapmaticPainter.drawImage(0, 0, QImage(backImage).scaled(snapmaticResolutionW, snapmaticResolutionH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + } + if (ui->cbAvatar->isChecked() && ui->cbForceAvatarColour->isChecked()) + { + snapmaticPainter.fillRect(snapmaticAvatarPlacementW, snapmaticAvatarPlacementH, snapmaticAvatarResolution, snapmaticAvatarResolution, selectedColour); + } + } if (insideAvatarZone) { // Avatar mode @@ -262,3 +298,95 @@ void ImportDialog::on_cmdColourChange_clicked() processImage(); } } + +void ImportDialog::on_cmdBackgroundChange_clicked() +{ + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("FileDialogs"); + bool dontUseNativeDialog = settings.value("DontUseNativeDialog", false).toBool(); + settings.beginGroup("ImportBackground"); + +fileDialogPreOpen: + QFileDialog fileDialog(this); + fileDialog.setFileMode(QFileDialog::ExistingFiles); + fileDialog.setViewMode(QFileDialog::Detail); + fileDialog.setAcceptMode(QFileDialog::AcceptOpen); + fileDialog.setOption(QFileDialog::DontUseNativeDialog, dontUseNativeDialog); + fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); + fileDialog.setWindowTitle(QApplication::translate("ProfileInterface", "Import...")); + fileDialog.setLabelText(QFileDialog::Accept, QApplication::translate("ProfileInterface", "Import")); + + // Getting readable Image formats + QString imageFormatsStr = " "; + for (QByteArray imageFormat : QImageReader::supportedImageFormats()) + { + imageFormatsStr += QString("*.") % QString::fromUtf8(imageFormat).toLower() % " "; + } + + QStringList filters; + filters << QApplication::translate("ProfileInterface", "All image files (%1)").arg(imageFormatsStr.trimmed()); + filters << QApplication::translate("ProfileInterface", "All files (**)"); + fileDialog.setNameFilters(filters); + + QList sidebarUrls = SidebarGenerator::generateSidebarUrls(fileDialog.sidebarUrls()); + + fileDialog.setSidebarUrls(sidebarUrls); + fileDialog.setDirectory(settings.value("Directory", StandardPaths::documentsLocation()).toString()); + fileDialog.restoreGeometry(settings.value("Geometry", "").toByteArray()); + + if (fileDialog.exec()) + { + QStringList selectedFiles = fileDialog.selectedFiles(); + if (selectedFiles.length() == 1) + { + QString selectedFile = selectedFiles.at(0); + QString selectedFileName = QFileInfo(selectedFile).fileName(); + + QFile snapmaticFile(selectedFile); + if (!snapmaticFile.open(QFile::ReadOnly)) + { + QMessageBox::warning(this, QApplication::translate("ProfileInterface", "Import"), QApplication::translate("ProfileInterface", "Can't import %1 because file can't be open").arg("\""+selectedFileName+"\"")); + goto fileDialogPreOpen; + } + QImage importImage; + QImageReader snapmaticImageReader; + snapmaticImageReader.setDecideFormatFromContent(true); + snapmaticImageReader.setDevice(&snapmaticFile); + if (!snapmaticImageReader.read(&importImage)) + { + QMessageBox::warning(this, QApplication::translate("ProfileInterface", "Import"), QApplication::translate("ProfileInterface", "Can't import %1 because file can't be parsed properly").arg("\""+selectedFileName+"\"")); + goto fileDialogPreOpen; + } + backImage = importImage.scaled(snapmaticResolutionW, snapmaticResolutionH, Qt::KeepAspectRatio, Qt::SmoothTransformation); + backgroundPath = selectedFile; + ui->labBackgroundImage->setText(tr("Background Image: %1").arg(tr("File", "Background Image: File"))); + ui->cmdBackgroundWipe->setVisible(true); + processImage(); + } + } + + settings.setValue("Geometry", fileDialog.saveGeometry()); + settings.setValue("Directory", fileDialog.directory().absolutePath()); + settings.endGroup(); + settings.endGroup(); +} + +void ImportDialog::on_cmdBackgroundWipe_clicked() +{ + backImage = QImage(); + ui->labBackgroundImage->setText(tr("Background Image:")); + ui->cmdBackgroundWipe->setVisible(false); + processImage(); +} + +void ImportDialog::on_cbStretch_toggled(bool checked) +{ + Q_UNUSED(checked) + processImage(); +} + +void ImportDialog::on_cbForceAvatarColour_toggled(bool checked) +{ + Q_UNUSED(checked) + processImage(); +} diff --git a/ImportDialog.h b/ImportDialog.h index 92a27c6..e095ff2 100644 --- a/ImportDialog.h +++ b/ImportDialog.h @@ -45,11 +45,17 @@ private slots: void on_cmdOK_clicked(); void on_labPicture_labelPainted(); void on_cmdColourChange_clicked(); + void on_cmdBackgroundChange_clicked(); + void on_cmdBackgroundWipe_clicked(); + void on_cbStretch_toggled(bool checked); + void on_cbForceAvatarColour_toggled(bool checked); private: Ui::ImportDialog *ui; QImage avatarAreaImage; + QString backgroundPath; QString imageTitle; + QImage backImage; QImage workImage; QImage newImage; QColor selectedColour; diff --git a/ImportDialog.ui b/ImportDialog.ui index 06fc3b3..61c15fe 100644 --- a/ImportDialog.ui +++ b/ImportDialog.ui @@ -6,20 +6,14 @@ 0 0 - 430 - 380 + 516 + 425 - 430 - 380 - - - - - 430 - 380 + 516 + 425 @@ -45,8 +39,8 @@ - 430 - 240 + 516 + 288 @@ -87,40 +81,9 @@ - Settings + Picture - - - - - - Background Colour: <span style="color: %1">%1</span> - - - - - - - ... - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - - @@ -155,7 +118,148 @@ - + + + Background + + + + + + + + + + Background Colour: <span style="color: %1">%1</span> + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + ... + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Background Image: + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + ... + + + + + + + X + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + Force Colour in Avatar Zone + + + + + + + true + + + Ignore Aspect Ratio + + + + + + + + + + Qt::Vertical diff --git a/JsonEditorDialog.cpp b/JsonEditorDialog.cpp index e10fdeb..8906c91 100644 --- a/JsonEditorDialog.cpp +++ b/JsonEditorDialog.cpp @@ -35,10 +35,6 @@ JsonEditorDialog::JsonEditorDialog(SnapmaticPicture *picture, QWidget *parent) : { // Set Window Flags setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowMinMaxButtonsHint); -#ifdef Q_OS_LINUX - // for stupid Window Manager (GNOME 3 should feel triggered) - setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); -#endif ui->setupUi(this); ui->cmdClose->setDefault(true); diff --git a/MapLocationDialog.cpp b/MapLocationDialog.cpp index 450c112..9ebb53f 100644 --- a/MapLocationDialog.cpp +++ b/MapLocationDialog.cpp @@ -29,10 +29,6 @@ MapLocationDialog::MapLocationDialog(double x, double y, QWidget *parent) : { // Set Window Flags setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); -#ifdef Q_OS_LINUX - // for stupid Window Manager (GNOME 3 should feel triggered) - setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); -#endif ui->setupUi(this); ui->cmdDone->setVisible(false); diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp index df5d122..a967d56 100755 --- a/OptionsDialog.cpp +++ b/OptionsDialog.cpp @@ -42,10 +42,6 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : { // Set Window Flags setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); -#ifdef Q_OS_LINUX - // for stupid Window Manager (GNOME 3 should feel triggered) - setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); -#endif // Setup User Interface ui->setupUi(this); @@ -86,9 +82,11 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : setupInterfaceSettings(); setupSnapmaticPictureViewer(); +#ifndef Q_QS_ANDROID // DPI calculation qreal screenRatio = AppEnv::screenRatio(); resize(435 * screenRatio, 405 * screenRatio); +#endif #ifdef GTA5SYNC_DISABLED ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabSync)); diff --git a/PictureDialog.cpp b/PictureDialog.cpp index 5c4b87c..603fa42 100755 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -22,6 +22,7 @@ #include "ui_PictureDialog.h" #include "SidebarGenerator.h" #include "MapLocationDialog.h" +#include "ImageEditorDialog.h" #include "JsonEditorDialog.h" #include "SnapmaticEditor.h" #include "StandardPaths.h" @@ -84,6 +85,14 @@ PictureDialog::PictureDialog(ProfileDatabase *profileDB, CrewDatabase *crewDB, Q setupPictureDialog(); } +PictureDialog::PictureDialog(ProfileDatabase *profileDB, CrewDatabase *crewDB, QString profileName, QWidget *parent) : + QDialog(parent), profileDB(profileDB), crewDB(crewDB), profileName(profileName), + ui(new Ui::PictureDialog) +{ + primaryWindow = false; + setupPictureDialog(); +} + PictureDialog::PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent) : QDialog(parent), primaryWindow(primaryWindow), profileDB(profileDB), crewDB(crewDB), ui(new Ui::PictureDialog) @@ -91,6 +100,13 @@ PictureDialog::PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, Cre setupPictureDialog(); } +PictureDialog::PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, CrewDatabase *crewDB, QString profileName, QWidget *parent) : + QDialog(parent), primaryWindow(primaryWindow), profileDB(profileDB), crewDB(crewDB), profileName(profileName), + ui(new Ui::PictureDialog) +{ + setupPictureDialog(); +} + void PictureDialog::setupPictureDialog() { // Set Window Flags @@ -137,6 +153,7 @@ void PictureDialog::setupPictureDialog() manageMenu->addAction(tr("Export as &Snapmatic..."), this, SLOT(copySnapmaticPicture())); manageMenu->addSeparator(); manageMenu->addAction(tr("&Edit Properties..."), this, SLOT(editSnapmaticProperties())); + manageMenu->addAction(tr("&Overwrite Image..."), this, SLOT(editSnapmaticImage())); manageMenu->addSeparator(); QAction *openViewerAction = manageMenu->addAction(tr("Open &Map Viewer..."), this, SLOT(openPreviewMap())); openViewerAction->setShortcut(Qt::Key_M); @@ -583,7 +600,7 @@ void PictureDialog::renderOverlayPicture() void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, bool _indexed, int _index) { - if (smpic != nullptr) smpic->disconnect(this, SLOT(updated())); + if (smpic != nullptr) smpic->disconnect(); snapmaticPicture = QImage(); indexed = _indexed; index = _index; @@ -620,6 +637,7 @@ void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, QMessageBox::warning(this,tr("Snapmatic Picture Viewer"),tr("Failed at %1").arg(picture->getLastStep())); } QObject::connect(smpic, SIGNAL(updated()), this, SLOT(updated())); + QObject::connect(smpic, SIGNAL(customSignal(QString)), this, SLOT(customSignal(QString))); emit newPictureCommited(snapmaticPicture); } @@ -808,6 +826,11 @@ void PictureDialog::on_labPicture_mouseDoubleClicked(Qt::MouseButton button) pictureWidget->move(desktopRect.x(), desktopRect.y()); pictureWidget->resize(desktopRect.width(), desktopRect.height()); +#ifdef GTA5SYNC_WIN +#if QT_VERSION >= 0x050200 + QtWin::markFullscreenWindow(pictureWidget, true); +#endif +#endif pictureWidget->showFullScreen(); pictureWidget->setFocus(); pictureWidget->raise(); @@ -847,7 +870,11 @@ void PictureDialog::openPreviewMap() } mapLocDialog->setWindowIcon(windowIcon()); mapLocDialog->setModal(true); +#ifndef Q_OS_ANDROID mapLocDialog->show(); +#else + mapLocDialog->showMaximized(); +#endif mapLocDialog->exec(); if (mapLocDialog->propUpdated()) { @@ -895,11 +922,38 @@ void PictureDialog::editSnapmaticProperties() snapmaticEditor->setWindowIcon(windowIcon()); snapmaticEditor->setSnapmaticPicture(picture); snapmaticEditor->setModal(true); +#ifndef Q_OS_ANDROID snapmaticEditor->show(); +#else + snapmaticEditor->showMaximized(); +#endif snapmaticEditor->exec(); delete snapmaticEditor; } +void PictureDialog::editSnapmaticImage() +{ + SnapmaticPicture *picture = smpic; + ImageEditorDialog *imageEditor; + if (rqFullscreen && fullscreenWidget != nullptr) + { + imageEditor = new ImageEditorDialog(picture, profileName, fullscreenWidget); + } + else + { + imageEditor = new ImageEditorDialog(picture, profileName, this); + } + imageEditor->setWindowIcon(windowIcon()); + imageEditor->setModal(true); +#ifndef Q_OS_ANDROID + imageEditor->show(); +#else + snapmaticEditor->showMaximized(); +#endif + imageEditor->exec(); + delete imageEditor; +} + void PictureDialog::editSnapmaticRawJson() { SnapmaticPicture *picture = smpic; @@ -914,7 +968,11 @@ void PictureDialog::editSnapmaticRawJson() } jsonEditor->setWindowIcon(windowIcon()); jsonEditor->setModal(true); +#ifndef Q_OS_ANDROID jsonEditor->show(); +#else + jsonEditor->showMaximized(); +#endif jsonEditor->exec(); delete jsonEditor; } @@ -933,3 +991,13 @@ void PictureDialog::updated() } ui->labJSON->setText(jsonDrawString.arg(locX, locY, locZ, generatePlayersString(), generateCrewString(), picTitl, picAreaStr, created)); } + +void PictureDialog::customSignal(QString signal) +{ + SnapmaticPicture *picture = smpic; // used by macro + if (signal == "PictureUpdated") + { + snapmaticPicture = picture->getImage(); + renderPicture(); + } +} diff --git a/PictureDialog.h b/PictureDialog.h index 66d2c51..0c3155c 100755 --- a/PictureDialog.h +++ b/PictureDialog.h @@ -46,7 +46,9 @@ class PictureDialog : public QDialog Q_OBJECT public: explicit PictureDialog(ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent = 0); + explicit PictureDialog(ProfileDatabase *profileDB, CrewDatabase *crewDB, QString profileName, QWidget *parent = 0); explicit PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent = 0); + explicit PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, CrewDatabase *crewDB, QString profileName, QWidget *parent = 0); void setupPictureDialog(); void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, bool indexed, int index); void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, int index); @@ -78,10 +80,12 @@ private slots: void previousPictureRequestedSlot(); void editSnapmaticProperties(); void editSnapmaticRawJson(); + void editSnapmaticImage(); void renderOverlayPicture(); void renderPicture(); void openPreviewMap(); void updated(); + void customSignal(QString signal); signals: void nextPictureRequested(); @@ -110,6 +114,7 @@ private: bool primaryWindow; ProfileDatabase *profileDB; CrewDatabase *crewDB; + QString profileName; Ui::PictureDialog *ui; QMap globalMap; SnapmaticPicture *smpic; diff --git a/PlayerListDialog.cpp b/PlayerListDialog.cpp index 748c5e9..019871c 100644 --- a/PlayerListDialog.cpp +++ b/PlayerListDialog.cpp @@ -32,10 +32,8 @@ PlayerListDialog::PlayerListDialog(QStringList players, ProfileDatabase *profile { // Set Window Flags setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); -#ifdef Q_OS_LINUX - // for stupid Window Manager (GNOME 3 should feel triggered) - setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); -#endif + + listUpdated = false; ui->setupUi(this); ui->cmdCancel->setDefault(true); @@ -237,5 +235,16 @@ void PlayerListDialog::on_cmdApply_clicked() players += ui->listSePlayers->item(i)->text().split(" ").at(0); } emit playerListUpdated(players); + listUpdated = true; close(); } + +QStringList PlayerListDialog::getPlayerList() const +{ + return players; +} + +bool PlayerListDialog::isListUpdated() +{ + return listUpdated; +} diff --git a/PlayerListDialog.h b/PlayerListDialog.h index 31f91ed..fb779d7 100644 --- a/PlayerListDialog.h +++ b/PlayerListDialog.h @@ -32,6 +32,8 @@ class PlayerListDialog : public QDialog public: explicit PlayerListDialog(QStringList players, ProfileDatabase *profileDB, QWidget *parent = 0); + QStringList getPlayerList() const; + bool isListUpdated(); ~PlayerListDialog(); private slots: @@ -45,6 +47,7 @@ private: QStringList players; ProfileDatabase *profileDB; Ui::PlayerListDialog *ui; + bool listUpdated; void drawSwitchButtons(); void buildInterface(); diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 5578ed8..9a7a258 100755 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -18,6 +18,7 @@ #include "ProfileInterface.h" #include "ui_ProfileInterface.h" +#include "PlayerListDialog.h" #include "SidebarGenerator.h" #include "SnapmaticWidget.h" #include "DatabaseThread.h" @@ -187,7 +188,7 @@ void ProfileInterface::pictureFixed_event(SnapmaticPicture *picture) void ProfileInterface::pictureLoaded(SnapmaticPicture *picture, bool inserted) { - SnapmaticWidget *picWidget = new SnapmaticWidget(profileDB, crewDB, threadDB, this); + SnapmaticWidget *picWidget = new SnapmaticWidget(profileDB, crewDB, threadDB, profileName, this); picWidget->setSnapmaticPicture(picture); picWidget->setContentMode(contentMode); picWidget->setMouseTracking(true); @@ -502,15 +503,15 @@ fileDialogPreOpen: //Work? void ProfileInterface::importFilesProgress(QStringList selectedFiles) { int maximumId = selectedFiles.length(); - int overallId = 1; + int overallId = 0; QString errorStr; - QStringList failedFiles; + QStringList failed; // Progress dialog QProgressDialog pbDialog(this); pbDialog.setWindowFlags(pbDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint); pbDialog.setWindowTitle(tr("Import...")); - pbDialog.setLabelText(tr("Import file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId))); + pbDialog.setLabelText(tr("Import file %1 of %2 files").arg(QString::number(1), QString::number(maximumId))); pbDialog.setRange(1, maximumId); pbDialog.setValue(1); pbDialog.setModal(true); @@ -518,6 +519,7 @@ void ProfileInterface::importFilesProgress(QStringList selectedFiles) pbBtn.at(0)->setDisabled(true); QList pbBar = pbDialog.findChildren(); pbBar.at(0)->setTextVisible(false); + pbDialog.setAutoClose(false); pbDialog.show(); // THREADING HERE PLEASE @@ -525,18 +527,18 @@ void ProfileInterface::importFilesProgress(QStringList selectedFiles) int currentTime = importDateTime.time().toString(importTimeFormat).toInt(); for (QString selectedFile : selectedFiles) { + overallId++; pbDialog.setValue(overallId); pbDialog.setLabelText(tr("Import file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId))); importDateTime = QDateTime::currentDateTime(); if (!importFile(selectedFile, importDateTime, ¤tTime, false)) { - failedFiles << QFileInfo(selectedFile).fileName(); + failed << QFileInfo(selectedFile).fileName(); } - overallId++; } pbDialog.close(); - for (QString curErrorStr : failedFiles) + for (QString curErrorStr : failed) { errorStr += ", " % curErrorStr; } @@ -685,6 +687,7 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime QFile snapmaticFile(selectedFile); if (!snapmaticFile.open(QFile::ReadOnly)) { + QMessageBox::warning(this, tr("Import"), tr("Can't import %1 because file can't be open").arg("\""+selectedFileName+"\"")); delete picture; return false; } @@ -695,6 +698,7 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime if (!snapmaticImageReader.read(importImage)) { QMessageBox::warning(this, tr("Import"), tr("Can't import %1 because file can't be parsed properly").arg("\""+selectedFileName+"\"")); + delete importImage; delete picture; return false; } @@ -913,7 +917,7 @@ void ProfileInterface::exportSelected() settings.beginGroup("FileDialogs"); //bool dontUseNativeDialog = settings.value("DontUseNativeDialog", false).toBool(); settings.beginGroup("ExportDirectory"); - QString exportDirectory = QFileDialog::getExistingDirectory(this, tr("Export selected"), settings.value(profileName, profileFolder).toString()); + QString exportDirectory = QFileDialog::getExistingDirectory(this, tr("Export selected..."), settings.value(profileName, profileFolder).toString()); if (exportDirectory != "") { settings.setValue(profileName, exportDirectory); @@ -951,7 +955,7 @@ void ProfileInterface::exportSelected() #endif bool itemSelected = false; - QString selectedItem = inputDialog.getItem(this, tr("Export selected"), tr("%1Export Snapmatic pictures%2

JPG pictures make it possible to open the picture with a Image Viewer
GTA Snapmatic make it possible to import the picture into the game

Export as:").arg(ExportPreSpan, ExportPostSpan), inputDialogItems, 0, false, &itemSelected, inputDialog.windowFlags()^Qt::WindowContextHelpButtonHint); + QString selectedItem = inputDialog.getItem(this, tr("Export selected..."), tr("%1Export Snapmatic pictures%2

JPG pictures make it possible to open the picture with a Image Viewer
GTA Snapmatic make it possible to import the picture into the game

Export as:").arg(ExportPreSpan, ExportPostSpan), inputDialogItems, 0, false, &itemSelected, inputDialog.windowFlags()^Qt::WindowContextHelpButtonHint); if (itemSelected) { if (selectedItem == tr("JPG pictures and GTA Snapmatic")) @@ -1012,6 +1016,7 @@ void ProfileInterface::exportSelected() QObject::connect(exportThread, SIGNAL(exportFinished()), &pbDialog, SLOT(close())); exportThread->start(); + pbDialog.setAutoClose(false); pbDialog.exec(); QStringList getFailedSavegames = exportThread->getFailedSavegames(); QStringList getFailedCopyPictures = exportThread->getFailedCopyPictures(); @@ -1208,6 +1213,7 @@ void ProfileInterface::contextMenuTriggeredPIC(QContextMenuEvent *ev) editMenu.addAction(SnapmaticWidget::tr("Hide &In-game"), picWidget, SLOT(makePictureHiddenSlot())); } editMenu.addAction(PictureDialog::tr("&Edit Properties..."), picWidget, SLOT(editSnapmaticProperties())); + editMenu.addAction(PictureDialog::tr("&Overwrite Image..."), picWidget, SLOT(editSnapmaticImage())); editMenu.addSeparator(); editMenu.addAction(PictureDialog::tr("Open &Map Viewer..."), picWidget, SLOT(openMapViewer())); editMenu.addAction(PictureDialog::tr("Open &JSON Editor..."), picWidget, SLOT(editSnapmaticRawJson())); @@ -1490,3 +1496,406 @@ bool ProfileInterface::isSupportedImageFile(QString selectedFileName) } return false; } + +void ProfileInterface::massTool(MassTool tool) +{ + switch(tool) + { + case MassTool::Qualify: + { + QList snapmaticWidgets; + for (ProfileWidget *widget : widgets.keys()) + { + if (widget->isSelected()) + { + if (widget->getWidgetType() == "SnapmaticWidget") + { + SnapmaticWidget *snapmaticWidget = qobject_cast(widget); + snapmaticWidgets += snapmaticWidget; + } + } + } + + if (snapmaticWidgets.isEmpty()) + { + QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("You don't have any Snapmatics selected!")); + return; + } + + // Prepare Progress + + int maximumId = snapmaticWidgets.length(); + int overallId = 0; + + QProgressDialog pbDialog(this); + pbDialog.setWindowFlags(pbDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint); + pbDialog.setWindowTitle(tr("Patch selected...")); + pbDialog.setLabelText(tr("Patch file %1 of %2 files").arg(QString::number(1), QString::number(maximumId))); + pbDialog.setRange(1, maximumId); + pbDialog.setValue(1); + pbDialog.setModal(true); + QList pbBtn = pbDialog.findChildren(); + pbBtn.at(0)->setDisabled(true); + QList pbBar = pbDialog.findChildren(); + pbBar.at(0)->setTextVisible(false); + pbDialog.setAutoClose(false); + pbDialog.show(); + + // Begin Progress + + QStringList fails; + for (SnapmaticWidget *snapmaticWidget : snapmaticWidgets) + { + // Update Progress + overallId++; + pbDialog.setValue(overallId); + pbDialog.setLabelText(tr("Patch file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId))); + + SnapmaticPicture *picture = snapmaticWidget->getPicture(); + + SnapmaticProperties snapmaticProperties = picture->getSnapmaticProperties(); + snapmaticProperties.isSelfie = true; + snapmaticProperties.isMug = false; + snapmaticProperties.isFromRSEditor = false; + snapmaticProperties.isFromDirector = false; + snapmaticProperties.isMeme = false; + + QString currentFilePath = picture->getPictureFilePath(); + QString originalFilePath = picture->getOriginalPictureFilePath(); + QString backupFileName = originalFilePath % ".bak"; + if (!QFile::exists(backupFileName)) + { + QFile::copy(currentFilePath, backupFileName); + } + SnapmaticProperties fallbackProperties = picture->getSnapmaticProperties(); + picture->setSnapmaticProperties(snapmaticProperties); + if (!picture->exportPicture(currentFilePath)) + { + picture->setSnapmaticProperties(fallbackProperties); + fails << QString("%1 [%2]").arg(picture->getPictureTitle(), picture->getPictureString()); + } + else + { + picture->emitUpdate(); + qApp->processEvents(); + } + } + pbDialog.close(); + if (!fails.isEmpty()) + { + QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Qualify", "%1 failed with..."), fails.join(", "))); + } + } + break; + case MassTool::Players: + { + QList snapmaticWidgets; + for (ProfileWidget *widget : widgets.keys()) + { + if (widget->isSelected()) + { + if (widget->getWidgetType() == "SnapmaticWidget") + { + SnapmaticWidget *snapmaticWidget = qobject_cast(widget); + snapmaticWidgets += snapmaticWidget; + } + } + } + + if (snapmaticWidgets.isEmpty()) + { + QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("You don't have any Snapmatics selected!")); + return; + } + + PlayerListDialog *playerListDialog = new PlayerListDialog(QStringList(), profileDB, this); + playerListDialog->setModal(true); + playerListDialog->show(); + playerListDialog->exec(); + if (!playerListDialog->isListUpdated()) + { + return; + } + QStringList players = playerListDialog->getPlayerList(); + delete playerListDialog; + + // Prepare Progress + + int maximumId = snapmaticWidgets.length(); + int overallId = 0; + + QProgressDialog pbDialog(this); + pbDialog.setWindowFlags(pbDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint); + pbDialog.setWindowTitle(tr("Patch selected...")); + pbDialog.setLabelText(tr("Patch file %1 of %2 files").arg(QString::number(1), QString::number(maximumId))); + pbDialog.setRange(1, maximumId); + pbDialog.setValue(1); + pbDialog.setModal(true); + QList pbBtn = pbDialog.findChildren(); + pbBtn.at(0)->setDisabled(true); + QList pbBar = pbDialog.findChildren(); + pbBar.at(0)->setTextVisible(false); + pbDialog.setAutoClose(false); + pbDialog.show(); + + // Begin Progress + + QStringList fails; + for (SnapmaticWidget *snapmaticWidget : snapmaticWidgets) + { + // Update Progress + overallId++; + pbDialog.setValue(overallId); + pbDialog.setLabelText(tr("Patch file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId))); + + SnapmaticPicture *picture = snapmaticWidget->getPicture(); + + SnapmaticProperties snapmaticProperties = picture->getSnapmaticProperties(); + snapmaticProperties.playersList = players; + + QString currentFilePath = picture->getPictureFilePath(); + QString originalFilePath = picture->getOriginalPictureFilePath(); + QString backupFileName = originalFilePath % ".bak"; + if (!QFile::exists(backupFileName)) + { + QFile::copy(currentFilePath, backupFileName); + } + SnapmaticProperties fallbackProperties = picture->getSnapmaticProperties(); + picture->setSnapmaticProperties(snapmaticProperties); + if (!picture->exportPicture(currentFilePath)) + { + picture->setSnapmaticProperties(fallbackProperties); + fails << QString("%1 [%2]").arg(picture->getPictureTitle(), picture->getPictureString()); + } + else + { + picture->emitUpdate(); + qApp->processEvents(); + } + } + pbDialog.close(); + if (!fails.isEmpty()) + { + QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Players", "%1 failed with..."), fails.join(", "))); + } + } + break; + case MassTool::Crew: + { + QList snapmaticWidgets; + for (ProfileWidget *widget : widgets.keys()) + { + if (widget->isSelected()) + { + if (widget->getWidgetType() == "SnapmaticWidget") + { + SnapmaticWidget *snapmaticWidget = qobject_cast(widget); + snapmaticWidgets += snapmaticWidget; + } + } + } + + if (snapmaticWidgets.isEmpty()) + { + QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("You don't have any Snapmatics selected!")); + return; + } + + int crewID = 0; + { +preSelectionCrewID: + bool ok; + QStringList itemList; + QStringList crewList = crewDB->getCrews(); + if (!crewList.contains(QLatin1String("0"))) + { + crewList += QLatin1String("0"); + } + crewList.sort(); + for (QString crew : crewList) + { + itemList += QString("%1 (%2)").arg(crew, crewDB->getCrewName(crew.toInt())); + } + QString newCrew = QInputDialog::getItem(this, QApplication::translate("SnapmaticEditor", "Snapmatic Crew"), QApplication::translate("SnapmaticEditor", "New Snapmatic crew:"), itemList, 0, true, &ok, windowFlags()^Qt::Dialog^Qt::WindowMinMaxButtonsHint); + if (ok && !newCrew.isEmpty()) + { + if (newCrew.contains(" ")) newCrew = newCrew.split(" ").at(0); + if (newCrew.length() > 10) return; + for (QChar crewChar : newCrew) + { + if (!crewChar.isNumber()) + { + QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("Failed to enter a valid Snapmatic Crew ID")); + goto preSelectionCrewID; + } + } + crewID = newCrew.toInt(); + } + else + { + return; + } + } + + // Prepare Progress + + int maximumId = snapmaticWidgets.length(); + int overallId = 0; + + QProgressDialog pbDialog(this); + pbDialog.setWindowFlags(pbDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint); + pbDialog.setWindowTitle(tr("Patch selected...")); + pbDialog.setLabelText(tr("Patch file %1 of %2 files").arg(QString::number(1), QString::number(maximumId))); + pbDialog.setRange(1, maximumId); + pbDialog.setValue(1); + pbDialog.setModal(true); + QList pbBtn = pbDialog.findChildren(); + pbBtn.at(0)->setDisabled(true); + QList pbBar = pbDialog.findChildren(); + pbBar.at(0)->setTextVisible(false); + pbDialog.setAutoClose(false); + pbDialog.show(); + + // Begin Progress + + QStringList fails; + for (SnapmaticWidget *snapmaticWidget : snapmaticWidgets) + { + // Update Progress + overallId++; + pbDialog.setValue(overallId); + pbDialog.setLabelText(tr("Patch file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId))); + + SnapmaticPicture *picture = snapmaticWidget->getPicture(); + + SnapmaticProperties snapmaticProperties = picture->getSnapmaticProperties(); + snapmaticProperties.crewID = crewID; + + QString currentFilePath = picture->getPictureFilePath(); + QString originalFilePath = picture->getOriginalPictureFilePath(); + QString backupFileName = originalFilePath % ".bak"; + if (!QFile::exists(backupFileName)) + { + QFile::copy(currentFilePath, backupFileName); + } + SnapmaticProperties fallbackProperties = picture->getSnapmaticProperties(); + picture->setSnapmaticProperties(snapmaticProperties); + if (!picture->exportPicture(currentFilePath)) + { + picture->setSnapmaticProperties(fallbackProperties); + fails << QString("%1 [%2]").arg(picture->getPictureTitle(), picture->getPictureString()); + } + else + { + picture->emitUpdate(); + qApp->processEvents(); + } + } + pbDialog.close(); + if (!fails.isEmpty()) + { + QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Crew", "%1 failed with..."), fails.join(", "))); + } + } + break; + case MassTool::Title: + { + QList snapmaticWidgets; + for (ProfileWidget *widget : widgets.keys()) + { + if (widget->isSelected()) + { + if (widget->getWidgetType() == "SnapmaticWidget") + { + SnapmaticWidget *snapmaticWidget = qobject_cast(widget); + snapmaticWidgets += snapmaticWidget; + } + } + } + + if (snapmaticWidgets.isEmpty()) + { + QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("You don't have any Snapmatics selected!")); + return; + } + + QString snapmaticTitle; + { +preSelectionTitle: + bool ok; + QString newTitle = QInputDialog::getText(this, QApplication::translate("SnapmaticEditor", "Snapmatic Title"), QApplication::translate("SnapmaticEditor", "New Snapmatic title:"), QLineEdit::Normal, snapmaticTitle, &ok, windowFlags()^Qt::Dialog^Qt::WindowMinMaxButtonsHint); + if (ok && !newTitle.isEmpty()) + { + if (!SnapmaticPicture::verifyTitle(newTitle)) + { + QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("Failed to enter a valid Snapmatic title")); + goto preSelectionTitle; + } + snapmaticTitle = newTitle; + } + else + { + return; + } + } + + // Prepare Progress + + int maximumId = snapmaticWidgets.length(); + int overallId = 0; + + QProgressDialog pbDialog(this); + pbDialog.setWindowFlags(pbDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint); + pbDialog.setWindowTitle(tr("Patch selected...")); + pbDialog.setLabelText(tr("Patch file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId))); + pbDialog.setRange(1, maximumId); + pbDialog.setValue(1); + pbDialog.setModal(true); + QList pbBtn = pbDialog.findChildren(); + pbBtn.at(0)->setDisabled(true); + QList pbBar = pbDialog.findChildren(); + pbBar.at(0)->setTextVisible(false); + pbDialog.setAutoClose(false); + pbDialog.show(); + + // Begin Progress + + QStringList fails; + for (SnapmaticWidget *snapmaticWidget : snapmaticWidgets) + { + // Update Progress + overallId++; + pbDialog.setValue(overallId); + pbDialog.setLabelText(tr("Patch file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId))); + + SnapmaticPicture *picture = snapmaticWidget->getPicture(); + + QString currentFilePath = picture->getPictureFilePath(); + QString originalFilePath = picture->getOriginalPictureFilePath(); + QString backupFileName = originalFilePath % ".bak"; + if (!QFile::exists(backupFileName)) + { + QFile::copy(currentFilePath, backupFileName); + } + QString fallbackTitle = picture->getPictureTitle(); + picture->setPictureTitle(snapmaticTitle); + if (!picture->exportPicture(currentFilePath)) + { + picture->setPictureTitle(fallbackTitle); + fails << QString("%1 [%2]").arg(picture->getPictureTitle(), picture->getPictureString()); + } + else + { + picture->emitUpdate(); + qApp->processEvents(); + } + } + pbDialog.close(); + if (!fails.isEmpty()) + { + QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Title", "%1 failed with..."), fails.join(", "))); + } + } + break; + } +} diff --git a/ProfileInterface.h b/ProfileInterface.h index ad0f666..cba5d88 100755 --- a/ProfileInterface.h +++ b/ProfileInterface.h @@ -40,6 +40,8 @@ namespace Ui { class ProfileInterface; } +enum class MassTool : int { Qualify = 0, Players = 1, Crew = 2, Title = 3 }; + class ProfileInterface : public QWidget { Q_OBJECT @@ -48,6 +50,7 @@ public: void setProfileFolder(QString folder, QString profile); void settingsApplied(int contentMode, bool languageChanged); void setupProfileInterface(); + void massTool(MassTool tool); void disableSelected(); void enableSelected(); int selectedWidgets(); diff --git a/SavegameDialog.cpp b/SavegameDialog.cpp index d99c089..016c231 100755 --- a/SavegameDialog.cpp +++ b/SavegameDialog.cpp @@ -3,6 +3,7 @@ #include "SavegameCopy.h" #include "AppEnv.h" #include +#include SavegameDialog::SavegameDialog(QWidget *parent) : QDialog(parent), @@ -10,10 +11,6 @@ SavegameDialog::SavegameDialog(QWidget *parent) : { // Set Window Flags setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); -#ifdef Q_OS_LINUX - // for stupid Window Manager (GNOME 3 should feel triggered) - setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); -#endif // Setup User Interface ui->setupUi(this); @@ -24,9 +21,7 @@ SavegameDialog::SavegameDialog(QWidget *parent) : ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); } - // DPI calculation - qreal screenRatio = AppEnv::screenRatio(); - resize(400 * screenRatio, 105 * screenRatio); + refreshWindowSize(); } SavegameDialog::~SavegameDialog() @@ -34,6 +29,19 @@ SavegameDialog::~SavegameDialog() delete ui; } +void SavegameDialog::refreshWindowSize() +{ + // DPI calculation + qreal screenRatio = AppEnv::screenRatio(); + int dpiWindowWidth = 400 * screenRatio; + int dpiWindowHeight = 105 * screenRatio; + if (dpiWindowHeight < heightForWidth(dpiWindowWidth)) + { + dpiWindowHeight = heightForWidth(dpiWindowWidth); + } + resize(dpiWindowWidth, dpiWindowHeight); +} + void SavegameDialog::setSavegameData(SavegameData *savegame, QString savegamePath, bool readOk) { // Showing error if reading error @@ -44,6 +52,7 @@ void SavegameDialog::setSavegameData(SavegameData *savegame, QString savegamePat } sgdPath = savegamePath; ui->labSavegameText->setText(savegameLabStr.arg(savegame->getSavegameStr())); + refreshWindowSize(); } void SavegameDialog::on_cmdClose_clicked() diff --git a/SavegameDialog.h b/SavegameDialog.h index 9fe8f35..aaabf4f 100755 --- a/SavegameDialog.h +++ b/SavegameDialog.h @@ -19,6 +19,7 @@ public: private slots: void on_cmdClose_clicked(); void on_cmdCopy_clicked(); + void refreshWindowSize(); private: Ui::SavegameDialog *ui; diff --git a/SnapmaticEditor.cpp b/SnapmaticEditor.cpp index 17830f2..fe1390e 100644 --- a/SnapmaticEditor.cpp +++ b/SnapmaticEditor.cpp @@ -36,10 +36,6 @@ SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, ProfileDatabase *profileD { // Set Window Flags setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); -#ifdef Q_OS_LINUX - // for stupid Window Manager (GNOME 3 should feel triggered) - setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); -#endif ui->setupUi(this); ui->cmdCancel->setDefault(true); @@ -64,9 +60,11 @@ SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, ProfileDatabase *profileD snapmaticTitle = QString(); smpic = 0; +#ifndef Q_OS_ANDROID // DPI calculation qreal screenRatio = AppEnv::screenRatio(); resize(400 * screenRatio, 360 * screenRatio); +#endif } SnapmaticEditor::~SnapmaticEditor() @@ -225,9 +223,11 @@ void SnapmaticEditor::setSnapmaticPlayers(const QStringList &players) { ui->labPlayers->setText(playersStr.arg(QApplication::translate("PictureDialog", "No Players"), editStr)); } +#ifndef Q_OS_ANDROID ui->gbValues->resize(ui->gbValues->sizeHint()); ui->frameWidget->resize(ui->frameWidget->sizeHint()); resize(width(), heightForWidth(width())); +#endif } void SnapmaticEditor::setSnapmaticTitle(const QString &title) @@ -251,9 +251,11 @@ void SnapmaticEditor::setSnapmaticTitle(const QString &title) { 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->sizeHint()); ui->frameWidget->resize(ui->frameWidget->sizeHint()); resize(width(), heightForWidth(width())); +#endif } void SnapmaticEditor::setSnapmaticCrew(const QString &crew) @@ -261,9 +263,11 @@ void SnapmaticEditor::setSnapmaticCrew(const QString &crew) QString editStr = QString("%1").arg(tr("Edit")); QString crewStr = tr("Crew: %1 (%2)").arg(StringParser::escapeString(crew), editStr); ui->labCrew->setText(crewStr); +#ifndef Q_OS_ANDROID ui->gbValues->resize(ui->gbValues->sizeHint()); ui->frameWidget->resize(ui->frameWidget->sizeHint()); resize(width(), heightForWidth(width())); +#endif } QString SnapmaticEditor::returnCrewName(int crewID_) @@ -355,6 +359,7 @@ void SnapmaticEditor::on_labPlayers_linkActivated(const QString &link) { PlayerListDialog *playerListDialog = new PlayerListDialog(playersList, profileDB, this); connect(playerListDialog, SIGNAL(playerListUpdated(QStringList)), this, SLOT(playerListUpdated(QStringList))); + playerListDialog->setModal(true); playerListDialog->show(); playerListDialog->exec(); delete playerListDialog; diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp index 48822da..d5414f7 100755 --- a/SnapmaticPicture.cpp +++ b/SnapmaticPicture.cpp @@ -810,6 +810,9 @@ QImage SnapmaticPicture::getImage(bool fastLoad) picStream->close(); delete picStream; + rawPicContent.clear(); + rawPicContent.squeeze(); + if (returnOk) { if (!fastLoadU) @@ -835,6 +838,22 @@ QImage SnapmaticPicture::getImage(bool fastLoad) return QImage(); } +QByteArray SnapmaticPicture::getPictureStream() // Incomplete because it just work in writeEnabled mode +{ + QByteArray jpegRawContent; + if (writeEnabled) + { + QBuffer *picStream = new QBuffer(&rawPicContent); + picStream->open(QIODevice::ReadWrite); + if (picStream->seek(jpegStreamEditorBegin)) + { + jpegRawContent = picStream->read(jpegPicStreamLength); + } + delete picStream; + } + return jpegRawContent; +} + int SnapmaticPicture::getContentMaxLength() { return jpegRawContentSize; @@ -856,6 +875,11 @@ void SnapmaticPicture::emitUpdate() emit updated(); } +void SnapmaticPicture::emitCustomSignal(const QString &signal) +{ + emit customSignal(signal); +} + // JSON part bool SnapmaticPicture::isJsonOk() @@ -1351,7 +1375,7 @@ bool SnapmaticPicture::isFormatSwitched() bool SnapmaticPicture::verifyTitle(const QString &title) { // VERIFY TITLE FOR BE A VALID SNAPMATIC TITLE - if (title.length() <= titlStreamCharacterMax) + if (title.length() <= titlStreamCharacterMax && title.length() > 0) { for (QChar titleChar : title) { diff --git a/SnapmaticPicture.h b/SnapmaticPicture.h index 71f15f8..71046df 100755 --- a/SnapmaticPicture.h +++ b/SnapmaticPicture.h @@ -62,6 +62,7 @@ public: bool isPicOk(); // Please use isPictureOk instead void clearCache(); QImage getImage(bool fastLoad = false); + QByteArray getPictureStream(); QString getLastStep(bool readable = true); QString getPictureStr(); QString getPictureHead(); @@ -79,6 +80,7 @@ public: bool setPictureStream(const QByteArray &streamArray); void updateStrings(); void emitUpdate(); + void emitCustomSignal(const QString &signal); // FILE MANAGEMENT bool exportPicture(const QString &fileName, SnapmaticFormat format = SnapmaticFormat::Auto_Format); @@ -170,6 +172,7 @@ private: static bool verifyTitleChar(const QChar &titleChar); signals: + void customSignal(QString signal); void preloaded(); void updated(); void loaded(); diff --git a/SnapmaticWidget.cpp b/SnapmaticWidget.cpp index 0707f32..d9fa875 100755 --- a/SnapmaticWidget.cpp +++ b/SnapmaticWidget.cpp @@ -18,6 +18,7 @@ #include "SnapmaticWidget.h" #include "ui_SnapmaticWidget.h" +#include "ImageEditorDialog.h" #include "MapLocationDialog.h" #include "JsonEditorDialog.h" #include "SnapmaticPicture.h" @@ -36,8 +37,8 @@ #include #include -SnapmaticWidget::SnapmaticWidget(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent) : - ProfileWidget(parent), profileDB(profileDB), crewDB(crewDB), threadDB(threadDB), +SnapmaticWidget::SnapmaticWidget(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QString profileName, QWidget *parent) : + ProfileWidget(parent), profileDB(profileDB), crewDB(crewDB), threadDB(threadDB), profileName(profileName), ui(new Ui::SnapmaticWidget) { ui->setupUi(this); @@ -67,6 +68,7 @@ void SnapmaticWidget::setSnapmaticPicture(SnapmaticPicture *picture) { smpic = picture; QObject::connect(picture, SIGNAL(updated()), this, SLOT(snapmaticUpdated())); + QObject::connect(picture, SIGNAL(customSignal(QString)), this, SLOT(customSignal(QString))); qreal screenRatio = AppEnv::screenRatio(); ui->labPicture->setFixedSize(48 * screenRatio, 27 * screenRatio); @@ -82,13 +84,22 @@ void SnapmaticWidget::setSnapmaticPicture(SnapmaticPicture *picture) void SnapmaticWidget::snapmaticUpdated() { - ui->labPicStr->setText(smpic->getPictureStr() % "\n" % smpic->getPictureTitl() % ""); + ui->labPicStr->setText(smpic->getPictureStr() % "\n" % smpic->getPictureTitl()); +} + +void SnapmaticWidget::customSignal(QString signal) +{ + 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); + } } void SnapmaticWidget::retranslate() { smpic->updateStrings(); - ui->labPicStr->setText(smpic->getPictureStr() % "\n" % smpic->getPictureTitl() % ""); + ui->labPicStr->setText(smpic->getPictureStr() % "\n" % smpic->getPictureTitl()); } void SnapmaticWidget::on_cmdView_clicked() @@ -98,7 +109,7 @@ void SnapmaticWidget::on_cmdView_clicked() bool navigationBar = settings.value("NavigationBar", false).toBool(); settings.endGroup(); - PictureDialog *picDialog = new PictureDialog(profileDB, crewDB, this); + PictureDialog *picDialog = new PictureDialog(profileDB, crewDB, profileName, this); picDialog->setSnapmaticPicture(smpic, true); picDialog->setModal(true); @@ -301,11 +312,19 @@ void SnapmaticWidget::editSnapmaticRawJson() delete jsonEditor; } +void SnapmaticWidget::editSnapmaticImage() +{ + ImageEditorDialog *imageEditor = new ImageEditorDialog(smpic, profileName, this); + imageEditor->setModal(true); + imageEditor->show(); + imageEditor->exec(); + delete imageEditor; +} + void SnapmaticWidget::openMapViewer() { SnapmaticPicture *picture = smpic; - MapLocationDialog *mapLocDialog; - mapLocDialog = new MapLocationDialog(picture->getSnapmaticProperties().location.x, picture->getSnapmaticProperties().location.y, this); + MapLocationDialog *mapLocDialog = new MapLocationDialog(picture->getSnapmaticProperties().location.x, picture->getSnapmaticProperties().location.y, this); mapLocDialog->setModal(true); mapLocDialog->show(); mapLocDialog->exec(); diff --git a/SnapmaticWidget.h b/SnapmaticWidget.h index bc5b087..289dbf6 100755 --- a/SnapmaticWidget.h +++ b/SnapmaticWidget.h @@ -38,7 +38,7 @@ class SnapmaticWidget : public ProfileWidget Q_OBJECT public: - SnapmaticWidget(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent = 0); + SnapmaticWidget(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QString profileName, QWidget *parent = 0); void setSnapmaticPicture(SnapmaticPicture *picture); void setSelectionMode(bool selectionMode); void setSelected(bool isSelected); @@ -69,8 +69,10 @@ private slots: void makePictureHiddenSlot(); void editSnapmaticProperties(); void editSnapmaticRawJson(); + void editSnapmaticImage(); void openMapViewer(); void snapmaticUpdated(); + void customSignal(QString signal); protected: void mouseDoubleClickEvent(QMouseEvent *ev); @@ -82,6 +84,7 @@ private: ProfileDatabase *profileDB; CrewDatabase *crewDB; DatabaseThread *threadDB; + QString profileName; Ui::SnapmaticWidget *ui; SnapmaticPicture *smpic; QColor highlightHiddenColor; diff --git a/UserInterface.cpp b/UserInterface.cpp index 67d4a97..6a607b6 100755 --- a/UserInterface.cpp +++ b/UserInterface.cpp @@ -82,7 +82,9 @@ UserInterface::UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, D // DPI calculation qreal screenRatio = AppEnv::screenRatio(); +#ifndef Q_QS_ANDROID resize(625 * screenRatio, 500 * screenRatio); +#endif ui->vlUserInterface->setSpacing(6 * screenRatio); ui->vlUserInterface->setContentsMargins(9 * screenRatio, 9 * screenRatio, 9 * screenRatio, 9 * screenRatio); } @@ -560,3 +562,23 @@ void UserInterface::retranslateUi() this->setWindowTitle(defaultWindowTitle.arg(tr("Select Profile"))); } } + +void UserInterface::on_actionQualify_as_Avatar_triggered() +{ + profileUI->massTool(MassTool::Qualify); +} + +void UserInterface::on_actionChange_Players_triggered() +{ + profileUI->massTool(MassTool::Players); +} + +void UserInterface::on_actionSet_Crew_triggered() +{ + profileUI->massTool(MassTool::Crew); +} + +void UserInterface::on_actionSet_Title_triggered() +{ + profileUI->massTool(MassTool::Title); +} diff --git a/UserInterface.h b/UserInterface.h index 38557b6..05ef444 100755 --- a/UserInterface.h +++ b/UserInterface.h @@ -62,6 +62,10 @@ private slots: void on_actionSelect_GTA_Folder_triggered(); void on_action_Enable_In_game_triggered(); void on_action_Disable_In_game_triggered(); + void on_actionQualify_as_Avatar_triggered(); + void on_actionChange_Players_triggered(); + void on_actionSet_Crew_triggered(); + void on_actionSet_Title_triggered(); void settingsApplied(int contentMode, bool languageChanged); protected: diff --git a/UserInterface.ui b/UserInterface.ui index 9e2ab52..151a728 100755 --- a/UserInterface.ui +++ b/UserInterface.ui @@ -207,10 +207,20 @@
+ + + Selection &mass tools + + + + + + + @@ -226,7 +236,7 @@ &About %1
- Ctrl+P + Ctrl+P @@ -237,7 +247,7 @@ Exit - Ctrl+Q + Ctrl+Q @@ -245,7 +255,7 @@ Close &Profile - Ctrl+End + Ctrl+End @@ -253,7 +263,7 @@ &Settings - Ctrl+S + Ctrl+S @@ -261,7 +271,7 @@ Select &All - Ctrl+A + Ctrl+A @@ -269,7 +279,7 @@ &Deselect All - Ctrl+D + Ctrl+D @@ -277,7 +287,7 @@ &Export selected... - Ctrl+E + Ctrl+E @@ -285,7 +295,7 @@ &Remove selected - Ctrl+Del + Ctrl+Del @@ -293,7 +303,7 @@ &Import files... - Ctrl+I + Ctrl+I @@ -301,7 +311,7 @@ &Open File... - Ctrl+O + Ctrl+O @@ -312,7 +322,7 @@ Select GTA V Folder... - Ctrl+G + Ctrl+G @@ -320,7 +330,7 @@ Show In-gam&e - Shift+E + Shift+E @@ -328,7 +338,39 @@ Hi&de In-game - Shift+D + Shift+D + + + + + Change &Title... + + + Shift+T + + + + + Change &Crew... + + + Shift+C + + + + + &Qualify as Avatar + + + Shift+Q + + + + + Change &Players... + + + Shift+P diff --git a/config.h b/config.h index 393c41f..af810ef 100755 --- a/config.h +++ b/config.h @@ -50,7 +50,7 @@ #ifndef GTA5SYNC_APPVER #ifndef GTA5SYNC_DAILYB -#define GTA5SYNC_APPVER "1.5.0-dev6" +#define GTA5SYNC_APPVER "1.5.0-dev7" #else #define GTA5SYNC_APPVER GTA5SYNC_DAILYB #endif diff --git a/gta5view.pro b/gta5view.pro index 35736a9..2bbd837 100755 --- a/gta5view.pro +++ b/gta5view.pro @@ -37,6 +37,7 @@ SOURCES += main.cpp \ ExportThread.cpp \ GlobalString.cpp \ IconLoader.cpp \ + ImageEditorDialog.cpp \ ImportDialog.cpp \ JsonEditorDialog.cpp \ MapLocationDialog.cpp \ @@ -74,6 +75,7 @@ HEADERS += \ ExportThread.h \ GlobalString.h \ IconLoader.h \ + ImageEditorDialog.h \ ImportDialog.h \ JsonEditorDialog.h \ MapLocationDialog.h \ @@ -105,6 +107,7 @@ HEADERS += \ FORMS += \ AboutDialog.ui \ ExportDialog.ui \ + ImageEditorDialog.ui \ ImportDialog.ui \ JsonEditorDialog.ui \ MapLocationDialog.ui \ diff --git a/main.cpp b/main.cpp index d8d6a3b..a6c0f5c 100755 --- a/main.cpp +++ b/main.cpp @@ -179,6 +179,9 @@ int main(int argc, char *argv[]) bool readOk = picture.readingPictureFromFile(arg1); picDialog.setWindowIcon(IconLoader::loadingAppIcon()); picDialog.setSnapmaticPicture(&picture, readOk); +#ifndef Q_OS_LINUX + picDialog.setWindowFlags(picDialog.windowFlags()^Qt::Dialog^Qt::Window); +#endif int crewID = picture.getSnapmaticProperties().crewID; if (crewID != 0) { crewDB.addCrew(crewID); } @@ -204,6 +207,7 @@ int main(int argc, char *argv[]) bool readOk = savegame.readingSavegameFromFile(arg1); savegameDialog.setWindowIcon(IconLoader::loadingAppIcon()); savegameDialog.setSavegameData(&savegame, arg1, readOk); + savegameDialog.setWindowFlags(savegameDialog.windowFlags()^Qt::Dialog^Qt::Window); if (!readOk) { return 1; } diff --git a/res/app.rc b/res/app.rc index dd5a131..03a9217 100755 --- a/res/app.rc +++ b/res/app.rc @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view\0" - VALUE "FileVersion", "1.5.0-dev6\0" + VALUE "FileVersion", "1.5.0-dev7\0" VALUE "InternalName", "gta5view\0" VALUE "LegalCopyright", "Copyright © 2016-2017 Syping\0" VALUE "OriginalFilename", "gta5view.exe\0" VALUE "ProductName", "gta5view\0" - VALUE "ProductVersion", "1.5.0-dev6\0" + VALUE "ProductVersion", "1.5.0-dev7\0" END END END diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index 922f0e1fae8f4bcdd548c19b9137b23882e2b2f6..50b6529c2d736fab99286b5be9ed32e28d91e8ca 100755 GIT binary patch delta 5378 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 OcITaSfdapE^1lJ|KfC+@ delta 3415 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 style=" font-weight:600;">gta5sync</span><br/><br/>Ein Projekt zum ansehen und synchronisieren von Grand Theft Auto 5 Snapmatic Bilder und Spielständen<br/><br/>Projektversion: %1<br/>Gebaut mit Qt %2<br/>Läuft auf Qt %3<br/><br/>Copyright &copy; <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync is lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a>
- + Using %1 %2 Using specific library, example Using libmyfuck Verwendet %1 %2 - + Translated by %1 Translated by translator, example Translated by Syping Übersetzt von %1 @@ -179,31 +179,31 @@ Copyright &copy; <a href="%5">%6</a> %7<br/>%8 i https://github.com/Syping/ - + NAME_OF_TRANSLATOR Enter your name there Syping - + TRANSLATOR_PROFILE Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage https://github.com/Syping/ - + 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> @@ -212,7 +212,7 @@ Snapmatic Bilder und Spielständen Copyright &copy; <a href="%1">%2</a> %3<br/>%4 ist lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> Pictures and Savegames Ein Projekt zum ansehen und synchronisieren von<br/> @@ -341,17 +341,84 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen S&chließen
+ + ImageEditorDialog + + + + + Snapmatic Image Editor + Snapmatic Bild Editor + + + + Overwrite Image... + Bild überschreiben... + + + + + Capacity: %1 + Kapazität: %1 + + + + ? + ? + + + + &Import... + &Importieren... + + + + &Overwrite + &Überschreiben + + + &Import + &Importieren + + + &Save + &Speichern + + + &Replace + &Ersetzen + + + + &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 + + + + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. + Jedes geschossene Snapmatic hat seine eigene Kapazität, ein Snapmatic mit besserer Kapazität kann ein Bild mit besserer Qualität beinhalten. + + ImportDialog - + Import... Importieren... - Settings - Einstellungen + Einstellungen &Keep Aspect Ratio @@ -370,12 +437,13 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen Seitenverhältnis behalten - + + Ignore Aspect Ratio Seitenverhältnis ignorieren - + Avatar Avatar @@ -384,34 +452,60 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen Hintergrundfarbe: <span style="color:rgb(%1,%2,%3)">%4</span> - - - + + Picture + Bild + + + + Background + Hintergrund + + + + + Background Colour: <span style="color: %1">%1</span> Hintergrundfarbe: <span style="color: %1">%1</span> - + + ... ... - + + Background Image: %1 + Hintergrundbild: %1 + + + + X + X + + + + Force Colour in Avatar Zone + Erzwinge Farbe in Avatar Zone + + + Import picture Bild importieren - + &OK &OK - + Discard picture Bild verwerfen - + &Cancel Abbre&chen @@ -426,36 +520,67 @@ When you plan to use it as Avatar the picture will be cut! Wenn du planst es als Avatar zu verwenden das Bild wird abgetrennt! - - + None + Background Image: None + Hintergrundbild: Keins + Keins + + + + + + Background Image: + Hintergrundbild: + + + + 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 - + 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 + + + Import + Importieren + + + 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 + JsonEditorDialog @@ -479,7 +604,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen JSON Fehler - + JSON Error JSON Fehler @@ -532,7 +657,7 @@ Y: %2 &Fertig - + X: %1 Y: %2 X and Y position @@ -752,8 +877,8 @@ Y: %2 - - + + Current: %1 Aktuell: %1 @@ -809,7 +934,7 @@ Y: %2 %1 (%2 wenn verfügbar) - + %1 %1 %1 @@ -823,31 +948,31 @@ Y: %2 Der eigene Ordner initialisiert sobald du %1 neugestartet hast. - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (Erste näheste Sprache) - + System System in context of System default System - + %1 (Closest to Interface) Next closest language compared to the Interface %1 (Näheste zur Oberfläche) - + Auto Automatic language choice. Automatisch - + The new Custom Folder will initialise after you restart %1. Der eigene Ordner wird initialisiert sobald du %1 neugestartet hast. @@ -856,15 +981,15 @@ Y: %2 Die Änderung der Sprache nimmt Effekt sobald du %1 neugestartet hast. - + No Profile No Profile, as default Kein Profil - + + - Profile: %1 Profil: %1 @@ -978,8 +1103,8 @@ Y: %2 Exportiere als &JPG Bild... - - + + Export as &Picture... Als &Bild exportieren... @@ -988,8 +1113,8 @@ Y: %2 Exportiere als &GTA Snapmatic... - - + + Export as &Snapmatic... Als &Snapmatic exportieren... @@ -1002,8 +1127,8 @@ Y: %2 &Kartenansicht öffnen... - - + + &Edit Properties... Eigenschaften bearb&eiten... @@ -1017,13 +1142,19 @@ Y: %2 Erweitert (&A) - - + + + &Overwrite Image... + Bild &überschreiben... + + + + Open &Map Viewer... &Kartenansicht öffnen... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -1032,32 +1163,32 @@ 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 @@ -1102,7 +1233,7 @@ Drücke A für Standardansicht Keine Crew - + Unknown Location Unbekannter Standort @@ -1272,11 +1403,15 @@ Drücke A für Standardansicht Keine gültige Datei wurde ausgewählt - - + + Open &JSON Editor... &JSON Editor öffnen... + + &Edit Image... + Bild bearb&eiten... + PlayerListDialog @@ -1310,28 +1445,28 @@ Drücke A für Standardansicht 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! @@ -1395,40 +1530,49 @@ Drücke A für Standardansicht Profil schließen - + Loading... Lade... - + Snapmatic Loader Snapmatic Lader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>Folgende Snapmatic Bilder wurden repariert</h4>%1 - - + + + + Import... Importieren... - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + Import Importieren @@ -1441,14 +1585,14 @@ Drücke A für Standardansicht Importfähige Dateien (*.g5e *.jpg *.png SGTA* PGTA*) - - + + Savegames files (SGTA*) Spielstanddateien (SGTA*) - - + + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) @@ -1457,29 +1601,33 @@ Drücke A für Standardansicht Alle Bilddateien (*.jpg *.png) - + Importable files (%1) Importfähige Dateien (%1) - + + + All image files (%1) Alle Bilddateien (%1) - - + + + + All files (**) Alle Dateien (**) - - + + Import file %1 of %2 files Importiere Datei %1 von %2 Dateien - + Import failed with... %1 @@ -1488,29 +1636,38 @@ Drücke A für Standardansicht %1 - - + + 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 - + Can't import %1 because file format can't be detected Kann %1 nicht importieren weil das Dateiformat nicht erkannt werden kann - + Initialising export... Initialisiere Export... @@ -1519,29 +1676,29 @@ Drücke A für Standardansicht Kann %1 nicht importieren weil das Dateiformat nicht gültig ist - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA oder endet mit .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Fehlgeschlagen beim Importieren vom Snapmatic Bild, dieses Bild ist bereits im Spiel - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exportiere Snapmatic Bilder%2<br><br>JPG Bilder machen es möglich sie mit ein Bildansicht Programm zu öffnen<br>Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren<br><br>Exportieren als: - - - + + + No valid file is selected Keine gültige Datei wurde ausgewählt - + Enabled pictures: %1 of %2 Aktivierte Bilder: %1 von %2 @@ -1550,38 +1707,131 @@ Drücke A für Standardansicht Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA - + Failed to import the Snapmatic picture, can't copy the file into profile Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren - + Failed to import the Savegame, can't copy the file into profile Fehlgeschlagen beim Importieren vom Spielstand, kann Spielstanddatei nicht ins Profil kopieren - + Failed to import the Savegame, no Savegame slot is left Fehlgeschlagen beim Importieren vom Spielstand, kein Spielstandslot mehr frei - - + + JPG pictures and GTA Snapmatic JPG Bilder und GTA Snapmatic - - + + JPG pictures only Nur JPG Bilder - - + + GTA Snapmatic only Nur GTA Snapmatic + + + + + + + + + + + + Snapmatic Mass Tool + Snapmatic Massenwerkzeug + + + + + + + You don't have any Snapmatics selected! + Du hast keine Snapmatics ausgewählt! + + + + + + + Patch selected... + Auswahl patchen... + + + + + + + + + + + Patch file %1 of %2 files + Patche Datei %1 von %2 Dateien + + + You don't have any Snapmatic selected! + Du hast keine Snapmatic ausgewählt! + + + + + + + %1 failed with... + +%2 + Action failed with... + %1 fehlgeschlagen mit... + +%2 + + + + Qualify + %1 failed with... + Qualifizieren + + + + Change Players + %1 failed with... + Spieler ändern + + + + Failed to enter a valid Snapmatic Crew ID + Fehlgeschlagen beim Eingeben von einer gültigen Crew ID + + + + Change Crew + %1 failed with... + Crew ändern + + + + Failed to enter a valid Snapmatic title + Fehlgeschlagen beim Eingeben eines gültigen Snapmatic Titel + + + + Change Title + %1 failed with... + Titel ändern + Export Snapmatic pictures @@ -1597,25 +1847,25 @@ Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren Exportieren als: - - + + No Snapmatic pictures or Savegames files are selected Keine Snapmatic Bilder oder Spielstände ausgewählt - - - + + + Remove selected Auswahl löschen - + You really want remove the selected Snapmatic picutres and Savegame files? Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Fehlgeschlagen beim kompletten entfernen der ausgewählten Snapmatic Bilder und/oder der Spielstanddateien @@ -1636,10 +1886,8 @@ Exportieren als: Fehlgeschlagenen beim Import vom Spielstand weil kein Spielstandslot mehr übrig ist - - - - + + Export selected Auswahl exportieren @@ -1660,7 +1908,9 @@ Exportieren als: Wie sollen wir mit den Snapmatic Bilder umgehen? - + + + Export selected... Auswahl exportieren... @@ -1673,7 +1923,7 @@ Exportieren als: Initialisierung... - + Export failed with... %1 @@ -1703,13 +1953,13 @@ Exportieren als: 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) @@ -1736,7 +1986,7 @@ Exportieren als: SavegameDialog - + Savegame Viewer Spielstandanzeiger @@ -1768,7 +2018,7 @@ Exportieren als: Schließen - + Failed at %1 Fehlgeschlagen bei %1 @@ -1877,32 +2127,32 @@ Exportieren als: Fehlgeschlagen beim Löschen %1 von deinen Spielständen - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All &Alles auswählen - + &Deselect All Alles a&bwählen @@ -1941,7 +2191,7 @@ Exportieren als: Spielstand kopieren - + &Export &Exportieren @@ -2017,13 +2267,13 @@ Exportieren als: - - - - - - - + + + + + + + Snapmatic Properties Snapmatic Eigenschaften @@ -2067,7 +2317,8 @@ Exportieren als: Meme - + + Snapmatic Title Snapmatic Titel @@ -2077,7 +2328,7 @@ Exportieren als: Snapmatic Werte - + Crew: %1 (%2) Crew: %1 (%2) @@ -2087,13 +2338,13 @@ Exportieren als: 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) @@ -2138,9 +2389,9 @@ Exportieren als: Cancel - + - + Edit Bearbeiten @@ -2167,40 +2418,43 @@ Exportieren als: 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: @@ -2290,19 +2544,19 @@ Exportieren als: Datei lesen %1 wegen %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 @@ -2342,18 +2596,18 @@ Exportieren als: - - + + 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? - + Edi&t Bearbei&ten @@ -2366,7 +2620,7 @@ Exportieren als: &Im Spiel deaktivieren - + &Export &Exportieren @@ -2379,12 +2633,12 @@ Exportieren als: Exportiere als &GTA Snapmatic - + Show &In-game &Im Spiel anzeigen - + Hide &In-game &Im Spiel ausblenden @@ -2417,32 +2671,32 @@ Exportieren als: Exportiere als &Snapmatic... - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All Alles &auswählen - + &Deselect All Alles a&bwählen @@ -2490,7 +2744,7 @@ Exportieren als: Bist du sicher %1 von deinen Snapmatic Bilder zu löschen? - + Failed at deleting %1 from your Snapmatic pictures Fehlgeschlagen beim Löschen von %1 von deinen Snapmatic Bildern @@ -2530,9 +2784,8 @@ Exportieren als: Über gta5sync - Ctrl+A - Strg+A + Strg+A Close @@ -2543,18 +2796,16 @@ Exportieren als: Optionen - Ctrl+O - Strg+O + Strg+O Select all Alles auswählen - Ctrl+S - Strg+S + Strg+S Deselect all @@ -2569,21 +2820,19 @@ Exportieren als: Auswahl exportieren - Ctrl+E - Strg+E + Strg+E Delete selected Auswahl löschen - Ctrl+D - Strg+D + Strg+D - + Exit Beenden @@ -2597,14 +2846,13 @@ Exportieren als: &Über Produkt - + &Exit B&eenden - Ctrl+Q - Strg+Q + Strg+Q @@ -2647,6 +2895,59 @@ Exportieren als: &Profile &Profil + + + Selection &mass tools + Auswahl &Massenwerkzeuge + + + + Change &Title... + &Titel ändern... + + + + &Qualify as Avatar + Als Avatar &qualifizieren + + + Qualify as &Avatar + Als &Avatar qualifizieren + + + + Change &Players... + S&pieler ändern... + + + Change Title... + Titel ändern... + + + + Change &Crew... + &Crew ändern... + + + Change Crew... + Crew ändern... + + + Change Players... + Spieler ändern... + + + Set Title... + Titel ändern... + + + Set Crew... + Crew ändern... + + + Qualify as Avatar + Als Avatar qualifizieren + Selection visibility Auswahl Sichtbarkeit @@ -2656,43 +2957,40 @@ Exportieren als: &Über gta5sync - + Close &Profile &Profil schließen - Ctrl+End - Strg+Ende + Strg+Ende - Ctrl+Del - Strg+Entf + Strg+Entf - + &Open File... Datei &öffnen... - - + + Select &GTA V Folder... Wähle &GTA V Ordner... - Ctrl+G - Strg+G + Strg+G - + Show In-gam&e Im Spiel anzeig&en - + Hi&de In-game Im Spiel ausblen&den @@ -2705,18 +3003,16 @@ Exportieren als: Im Spiel aktivier&en - Shift+E - Umschalt+E + Umschalt+E &Disable In-game Im Spiel &deaktivieren - Shift+D - Umschalt+D + Umschalt+D @@ -2728,36 +3024,35 @@ Exportieren als: &Profil auswählen - Ctrl+P - Strg+P + Strg+P &Options &Optionen - + &Settings Ein&stellungen - + Select &All &Alles auswählen - + &Deselect All Alles a&bwählen - + &Export selected... Auswahl &exportieren... - + &Remove selected Auswahl entfe&rnen @@ -2766,14 +3061,13 @@ Exportieren als: Strg+R - + &Import files... Dateien &importieren... - Ctrl+I - Strg+I + Strg+I GTA V Folder not found! @@ -2781,16 +3075,16 @@ Exportieren als: - - + + Select Profile Profil auswählen - - - - + + + + Select GTA V Folder... Wähle GTA V Ordner... @@ -2799,7 +3093,7 @@ Exportieren als: Wähle GTA V &Ordner... - + Open File... Datei öffnen... @@ -2814,22 +3108,26 @@ Exportieren als: %2 - %1 - + Selection mass tools + Auswahl Massenwerkzeuge + + + - + &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 diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm index f097a03af3f3321ccba17fb238037e4e7d104ed9..97316139aa29e5cf895ecb0952499a41824e7a11 100644 GIT binary patch delta 6164 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 M$vSqZ6g46BU+7mMwEzGB delta 2678 zcmYk7dst2R8pq$Y_S$>xwbtHkm&m2EyXvw_w)T#Qk|<4ua(Y}MMu;vhag67%U5*DM z#Vl#gXog6G%o%K@(Fmo-G;|Tu;2blD!%@T0j1dN-^UZqZ>HPKit@Zn@_xE1D@4NPW z&799;Y-1`H4EVOAsGz~k`Fv{exjW;Dw9Q1chDdWxVee`pb|aBEiio>Gq`yR@P9PfQ zPUK_3`)`Q+M-%b9La9H|a0fj5E0nM|w-)P8;&O{&>m%YyKOh?Mcj9bS98ti1;+nwG zZN#-E5qXu9dJGH)rjj}ubZ{Z{iAbVeNu+MNOl0~%p>-T-i>JY%?c`(LL^N=hLTe%U zb=wU|C%(6f-Dt#{#hCdHQFIe0$VlBW_GQfb46LqxirwBySb1X4+d7xYE|x9RxyIwI9W zI`e83ky8LYxPk99TdD1!8ksvnzhuS3;W;)&{HF;HL@P9}Q5X`+xEw`#b)C$@KXoGV zwam&9&k%Vtv#w|kQNM%C?$!S$l2V!Lle382*D^orPZGJMv2Il|_ATrbQ#&H;U}s;( z_aj=_%q>Yoqc*WCK08V@_#~S<4DSV-nLUs?90xgt-c{_8Kcmj3F7}wU0QFz5kZV@h z$Ea{nu|jX1!jL}f@p%uRhwE&4xrNAYJzG)ZLFD^{t>%1@nXPR7UIWp9WVUHJ_QyD| zKi0<**?J9T@0B_dSta(jNJOIT%f1fk3$f&@gwpSbEMcmFIe6dek;<~F6XzDGrXSx% z)TdOHzS<2DwWu;mP7yh3RQbsQGFGjsorlN=2dWx3AR}BHr;$*K{$|edIut2C%Y{V1 zj_Ck5W#oRck-xxg>zxP{|BcK25F+9qb313|A#&o%@_r!-HGxQdXcCAILrcLI;7jl~ zh}H;pfze!9KE4{g3}nEMK^1s`J8n9ROsEtFYq&2rCqoMwu1cD3gUWSW_5NUR8`rdY z4VNU=H8sOAOmmIT=#cwp=!q?g>d_bLZ{2> znT<7Q$pm%gf%l1A9M!hK=?GM%E;1pIpuOtiSGFV~*S+eJjWb}#s6KHFJ>RQVeeXZ> zq28$)b%>paN!7U2IiP*cXr`rj5e=EEd7sUO$|q_TPem(<9=c#(4_e`|wNe;(5?jKKuK7 zFxbZL+P?}BNAd-Y1!&8Ce96TuFoQoC`vh8u=F3}xi9G80ni_~rZ{q(Ihq<6j(W)n+ z_LkdPm%2b?V5>IbRS8lbpdJ4dgUDK~wY_(w3GI=n%`85I6kgY6Urd8~L$w>+Zb5{# z+Ugqgb>m;)73RV5P$6!2J=!+hCZzC4v0J{OrsaLm^v>ifClKHEmo7>5fCcSWxaF-Y}cF(?=*H6@6n7Z!nT3N2*{ z$25s??KtP(CMI_{z@SB(SFs)r$>IV+rX22wAIIQ3&5sJj|0)dd6)TzEe(!kSo(1J-CIjIv`StrfBhJbxsrOghL z(f@`sQm!QlHK~(wCqBR^KB&-qL&|&Wj6VO1lu!4;Mrrq(jhGJ!Qh^gDWY7?)$p5c6 ze^sHmOZsZFD@N}UsX7xEhJ6acURb7dX>2`c&t*wJ##6(7Aj)2(|r5=kN0?BAls9^*}0B6}pwN z;E?Zh+an8L$5U4rfM@khT@k~xm_Z!T} zd-{JP8wUi*uZ;ub-v=y~cMhB_XcN?=&S7<)zFC`O)Q_OqWhM=)}HaE1JZ z#Z_Kz*=yftZD8!|s9_rU@Hnf?hcA=whmVu9BeLx=<83PYt0*I9-#z&mBmeMTs$CPG z!^&w>hsh@*9qgkLGc@*FGxUtSZq`g*6PdFj!#_g4mh7%9Ct&F&Xy3h_ke1Q25%qr? zQCSOmHYW8fV|tbeJ - + Using %1 %2 Using specific library, example Using libmyfuck - + Translated by %1 Translated by translator, example Translated by Syping - + NAME_OF_TRANSLATOR Enter your name there Syping - + TRANSLATOR_PROFILE Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage https://github.com/Syping/ - + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> Pictures and Savegames - + 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> @@ -107,7 +107,7 @@ Pictures and Savegames Custom - + @@ -182,112 +182,203 @@ Pictures and Savegames + + ImageEditorDialog + + + + + Snapmatic Image Editor + + + + + Overwrite Image... + + + + + + Capacity: %1 + + + + + ? + + + + + &Import... + + + + + &Overwrite + + + + + &Close + + + + + Patching of Snapmatic Image failed because of I/O Error + + + + + Patching of Snapmatic Image failed because of Image Error + + + + + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. + + + ImportDialog - + Import... - - Settings - - - - - - + + + Background Colour: <span style="color: %1">%1</span> Background Color: <span style="color: %1">%1</span> - + + ... - + Avatar - + + Picture + + + + + Ignore Aspect Ratio - + + Background + + + + + Background Image: %1 + + + + + X + + + + + Force Colour in Avatar Zone + Force Color in Avatar Zone + + + Import picture - + &OK - + Discard picture - + &Cancel - - + + + + Background Image: + + + + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! - + - + 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 + + JsonEditorDialog Snapmatic JSON Editor - + &Save - + &Close - + - + JSON Error - + @@ -295,39 +386,39 @@ When you want to use it as Avatar the image will be detached! Snapmatic Map Viewer - + &Close - + &Apply - + &Revert - + &Set - + &Done - + - + X: %1 Y: %2 X and Y position - + @@ -466,50 +557,50 @@ Y: %2 Language for Areas - + Style - + Style: - + Font - + Always use Message Font (Windows 2003 and earlier) - + Interface - + Language for Interface - + - - + + Current: %1 - + Use Default Style (Restart) - + @@ -544,50 +635,50 @@ Y: %2 - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default - + %1 (Closest to Interface) Next closest language compared to the Interface - + - + Auto Automatic language choice. - + - + %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 @@ -628,68 +719,74 @@ 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 @@ -746,22 +843,22 @@ Press 1 for Default View Failed to export the picture because the system occurred a write failure - + Failed to export the picture because the format detection failures - + Failed to export the picture because the file can't be written - + Failed to export the picture because of an unknown reason - + @@ -798,10 +895,10 @@ Press 1 for Default View - - + + Open &JSON Editor... - + @@ -809,53 +906,53 @@ Press 1 for Default View Edit Players... - + Available Players: - + Selected Players: - + &Apply - + &Cancel - + - + 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! - + @@ -903,222 +1000,331 @@ Press 1 for Default View - + Enabled pictures: %1 of %2 - + Loading... - + Snapmatic Loader - + - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - + - - + + + + Import... - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + Import - + Importable files (%1) - - + + GTA V Export (*.g5e) - - + + Savegames files (SGTA*) - - + + Snapmatic pictures (PGTA*) - + + + All image files (%1) - - + + + + All files (**) - - - + + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - - + + 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 - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - - - + + Export selected - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - + + + Export selected... - + Initialising export... Initializing export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - - + + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files - + + + + + + + + + + + Snapmatic Mass Tool + + + + + + + + You don't have any Snapmatics selected! + + + + + + + + Patch selected... + + + + + + + + + + + + Patch file %1 of %2 files + + + + + + + + %1 failed with... + +%2 + Action failed with... + + + + + Qualify + %1 failed with... + + + + + Change Players + %1 failed with... + + + + + Failed to enter a valid Snapmatic Crew ID + + + + + Change Crew + %1 failed with... + + + + + Failed to enter a valid Snapmatic title + + + + + Change Title + %1 failed with... + + + + All profile files (*.g5e SGTA* PGTA*) @@ -1138,14 +1344,14 @@ Press 1 for Default View <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? - + SavegameDialog - + Savegame Viewer @@ -1165,7 +1371,7 @@ Press 1 for Default View - + Failed at %1 @@ -1214,37 +1420,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1325,7 +1531,7 @@ Press 1 for Default View Delete Savegame - + @@ -1338,13 +1544,13 @@ Press 1 for Default View - - - - - - - + + + + + + + Snapmatic Properties @@ -1389,7 +1595,7 @@ Press 1 for Default View - + Crew: %1 (%2) @@ -1399,16 +1605,16 @@ Press 1 for Default View - + Players: %1 (%2) Multiple Player are inserted here - + - + Player: %1 (%2) One Player is inserted here - + @@ -1442,9 +1648,9 @@ Press 1 for Default View - + - + Edit @@ -1461,45 +1667,49 @@ 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 JSON Error - + - - - - + + + + Patching of Snapmatic Properties failed because of I/O Error - + + Snapmatic Title - + + New Snapmatic title: - + + Snapmatic Crew - + + New Snapmatic crew: @@ -1514,61 +1724,61 @@ Press 1 for Default View 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 and malformed - + + JSON is incomplete + - - JSON is incomplete - - - - JSON is malformed - + @@ -1615,8 +1825,8 @@ Press 1 for Default View - - + + Delete picture @@ -1626,62 +1836,62 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All - + Are you sure to delete %1 from your Snapmatic pictures? - + Failed at deleting %1 from your Snapmatic pictures @@ -1751,173 +1961,133 @@ Press 1 for Default View - + - + &About %1 - - Ctrl+P - - - - + &Exit - + Exit - - Ctrl+Q - - - - + Close &Profile - - Ctrl+End - - - - + &Settings - - Ctrl+S - - - - + Select &All - - Ctrl+A - - - - + &Deselect All - - Ctrl+D - - - - + &Export selected... - - Ctrl+E - - - - + &Remove selected - - Ctrl+Del - - - - + &Import files... - - Ctrl+I - - - - + &Open File... - - Ctrl+O - - - - - + + Select &GTA V Folder... - - - - + + + + Select GTA V Folder... - - Ctrl+G - - - - + Show In-gam&e - - Shift+E - - - - + Hi&de In-game - - Shift+D + + Change &Players... + + + + + Selection &mass tools + + + + + Change &Title... + + + + + Change &Crew... + + + + + &Qualify as Avatar - - + + Select Profile - + Open File... - - - - + + + + Open File - + Can't open %1 because of not valid file format diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index a016b0369573c5ffa8cfbd387ab7360e27b30e0d..56814ae602b131e13075830cc2b07a94be60ac1d 100644 GIT binary patch delta 1968 zcmXAqdsI~C6~*@q_s*Sr?>s~XF)A@aR33^*7(qZp6cBld4xj`iDqxI&siH~R)PY!6 zd=L}0XwuLs7F|ZkB4$KwKn%j}zcXlGO#u?p1+)7F^8*cm?*#!P z?i$Y zFn*Eo$V)RRRfgcx$$}}@jYntH1BOgN^De>BrvxV_2*z1SHxK6h%ha(bgB7RF<|zaD^qZ zH2h%H9ocbYA7IWCeCnZGc%_pGK9DO9tOP=TkQ=5j@yxMuv?QfZoGR`E&cmSVQO@S9UE%~=hi;5=#5jWkYmBzI|?3bqJ^H{OetSG%4t&(O;~78j;_sE#?r6aINa^gP_P*uHtt^h+ zh(xoTO3hr8&4CvpfUtAsIYUis`9X8?y+(Ryl{xc>mu8JMS2q5U=6%<^wxf(*nrg0@ z@HxG4%Y3$zQtz8W`*TIERtOndnqIt^HNe_a7MO)R-ml;6& zO3?SDnznBz6Kzq86}Hm<9d*S%COY>|YQ_AYn7|*@igMB$86rS|uu z_W*m8*7M;dAo_;ZcbOiFUZxvPZlZ)9{fQHl%-*jTUS%P(cIlgK3)s1^t%+cex60`9|Wd;Y;nBqN2$^+fuq{T0P_!7 z!b9#eW2a?(20JnB{+|Dt0^E-+4F+!X>;sl2JJX68uzYlPJ%_8t@|TPN?zbB2*gje< zbH6q0%X;#$HD()U$?}fi$R2BwmCg#?XicuYM$0a@x*QZJc%5Kuh4s`K4(oVHFzR({ z*HV9$)n)CeV%(DONj7PCPleyMop^3FFu7fD);;@}7no2~kUjAp1xwAbS9O2L|Hydz zi#yp^wb6d?aUPv?$A0Wn26FV-yH2w|kwf;ucO$r0QyFa87|)QhSKo86Bxuj}X?BZm kdgby}WhtertJkjcZ1LM<@Fe+{W_f-rwfXF+cz)Uc0WVV+i2wiq delta 2534 zcmZXVdr(y88OER8JGl8ZV?A2=P7z#lumvwNQJ{l52o zpYPq)F3lHTYIa&3*8pq;loFK_w19RCV5$U!^T3!EK%W962!LM*e;)vBbE*GArFl6J zXy*3^D$Uz~l^wuh9|#A252V&ZIKs7Y<015r+4mt_v;!_bsdR*`hkhOd$F)NrPmWE3 z{-Y>h{B`JiJ_n*7skFDiP`88!3V>hGOTd&0l^Hhp4{nfI2>-ziGXDhsb3VY*dGP;t z09gv#u>|1BrLYagn{QW{@(}Z9$H0NWZHOsgrq47WZYvqO1&K{$T00y|(|~b_c=NBl zKUnxM`8oaIjaT3fu;4lFyQ z-J2T-cuZ0`H%{B|yD+vSLgkcDl`&n~#;0olO_EB(+bSnCtMm<2IY&!6D9pH`ZO*#| zgtuth+CqTHX6>Pq-ay1Y?QvlmGk;6lxyu4f?$-9a!1p;*wcm6mvPBiz8wad_eVz7E zz*r#Jp_2|=0MbQWNcjMNzpl$@ehrwItlP0vV#crPx+|HOcuH_mSV51KLWtwh9QLwN z2#w@|7=Iyk_8ws2o5E`@>CCJ_*!~84ZS)Y{%BrG4Av9Ip1F{Z~tXS4%lIxboli!nv z$sftPtFkjm4fzJCBaaKs)As`lBtaZ{NSj)HR_p3mBplxpOe^*YJr(b= z5sJzM^(xc)g`W18`TixLFXsqg^%Z{T?V@Fm3Xczm@Hlq8Ft{%0s@~eL8!%+3^!!$z z)qRp_{YPKC_gP@tKlQcKdF&)-eceMlF#Wo|e#lZ2CE`8i{h;@zyx1W9w=j5N>x7nsmg^B-g7EG**^0^#^ZY$&1pojSL`PQR&ho#qF-*LF=U)v6Y!uN%^~Z(5SyiMe+1Y zMzvJ5nsm}j8@>+$=5CkD-eE%w&eHaoA&fUosz0%q#y%=_M({?4M@#3j7x5u}mUMAu zDBzYX^kfOA zTOyxbNJq~pmwPG>0@50lbHY^4+odukOuqPJ28UU`{B`4fz~U?4{J0YcJ|o}mqL+fx z70sc|Y-xis@!)B`zouk;$wcOFQ(ktM7qOI|DceKroQ{Rc_SjpTX1yv?DwL|9+<4W@ z$`0HlHz_r)97c(GO0De`25?rH(xx0QX5f|eB-gKuS5AfBW{;hfo-%H{B3bEuzknWy zQT|rL@thQ^e0StB6S}E{4n0_Q8HM*^*qg0J>CON!qs?f2bu4?CV01tF1Y7i;(dPGG zX5eouO=M-B>Z^X=$<^_|SgR4}oEl@jg~tlLZamyy${AX2Jfa~@I^&r{SI)>v)1=$9 zWYW7P|G(Fe4@{x2^R5}wRF1i1iZIcE)7F_5ZaGhDXPWF*HqLvE%Gr6QPmb~GdicHFyzd2UiutW_OH)^|t5sHLSij)zGlu?S*5sK7NinI}m zv{8!m5sLKIfP5dFry1#3%UoBp7dHG-Wifqi;p#G5bag=fM2}xfektGoB}4VA&L~*% EKTB1ETmS$7 diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index fbc21d1..2e003d5 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -131,43 +131,43 @@ Copyright &copy; <a href="%5">%6</a> %7<br/> https://github.com/Ganjalo/ - + Using %1 %2 Using specific library, example Using libmyfuck Utilise %1 %2 - + Translated by %1 Translated by translator, example Translated by Syping Traduit par %1 - + NAME_OF_TRANSLATOR Enter your name there Ganjalo - + TRANSLATOR_PROFILE Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage https://github.com/Ganjalo/ - + 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> @@ -176,7 +176,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V Copyright &copy; <a href="%1">%2</a> %3<br/>%4 est distribué sous license <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> Pictures and Savegames Un outil pour gérer et synchroniser les photos Snapmatic<br/> @@ -291,17 +291,72 @@ et les fichiers de sauvegarde de Grand Theft Auto V &Fermer + + ImageEditorDialog + + + + + Snapmatic Image Editor + + + + + Overwrite Image... + + + + + + Capacity: %1 + + + + + ? + + + + + &Import... + &Importer... + + + + &Overwrite + + + + + &Close + + + + + Patching of Snapmatic Image failed because of I/O Error + + + + + Patching of Snapmatic Image failed because of Image Error + + + + + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. + + + ImportDialog - + Import... Importer... - Settings - Paramètres + Paramètres &Keep Aspect Ratio @@ -320,77 +375,121 @@ et les fichiers de sauvegarde de Grand Theft Auto V Conserver le rapport d'aspect - + + Ignore Aspect Ratio Déverrouiller le ratio d'aspect - + Avatar Avatar - - - + + Picture + + + + + Background + + + + + + Background Colour: <span style="color: %1">%1</span> - + + ... ... - + + Background Image: %1 + + + + + X + + + + + Force Colour in Avatar Zone + + + + Import picture - + &OK &OK - + Discard picture - + &Cancel A&nnuler - - + + + + Background Image: + + + + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! - + 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 - + Select Colour... + + + File + Background Image: File + + + + Import + Importer + JsonEditorDialog @@ -410,7 +509,7 @@ When you want to use it as Avatar the image will be detached! - + JSON Error @@ -448,7 +547,7 @@ When you want to use it as Avatar the image will be detached! - + X: %1 Y: %2 X and Y position @@ -637,8 +736,8 @@ Y: %2 - - + + Current: %1 @@ -690,37 +789,37 @@ Y: %2 Système - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default Système - + %1 (Closest to Interface) Next closest language compared to the Interface - + Auto Automatic language choice. - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. @@ -733,15 +832,15 @@ Y: %2 Le changement de langue sera actif au prochain lancement de %1. - + No Profile No Profile, as default Aucun profil - + + - Profile: %1 Profil : %1 @@ -907,8 +1006,8 @@ Y: %2 Exporter comme image &JPG... - - + + Export as &Picture... @@ -917,8 +1016,8 @@ Y: %2 Exporter comme &GTA Snapmatic... - - + + Export as &Snapmatic... @@ -927,19 +1026,25 @@ Y: %2 Édi&ter - - + + + &Overwrite Image... + + + + + &Edit Properties... Modifier les &propriétés... - - + + Open &Map Viewer... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -948,32 +1053,32 @@ 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 @@ -992,7 +1097,7 @@ Appuyer sur 1 pour le mode par défaut Aucun crew - + Unknown Location Emplacement inconnu @@ -1026,8 +1131,8 @@ Appuyer sur 1 pour le mode par défaut Échec de l'export de la photo Snapmatic - - + + Open &JSON Editor... @@ -1060,28 +1165,28 @@ Appuyer sur 1 pour le mode par défaut - + 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! @@ -1135,45 +1240,54 @@ Appuyer sur 1 pour le mode par défaut Copie du fichier %1 sur %2 - + Enabled pictures: %1 of %2 Photos activées : %1 sur %2 - + Loading... Chargement... - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - - + + + + Import... Importer... - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + Import Importer @@ -1182,36 +1296,40 @@ Appuyer sur 1 pour le mode par défaut Fichiers de profil GTA (SGTA* PGTA*) - - + + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - - + + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) - + + + All image files (%1) - - + + + + All files (**) Tous les fichiers (**) - - + + Import file %1 of %2 files Importation du fichier %1 sur %2 - + Import failed with... %1 @@ -1220,26 +1338,26 @@ Appuyer sur 1 pour le mode par défaut %1 - - - + + + No valid file is selected Fichier invalide - + Importable files (%1) - - + + Failed to read Snapmatic picture Impossible d'ouvrir la photo Snapmatic - - + + Failed to read Savegame file Impossible de lire le fichier de sauvegarde @@ -1260,87 +1378,183 @@ Appuyer sur 1 pour le mode par défaut Tous les fichiers image (*.jpg *.png) - + + + + Can't import %1 because file can't be open + + + + + + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*, *.g5e) - + Failed to import the Snapmatic picture, the picture is already in the game Impossible d'importer la photo Snapmatic, un fichier du même nom existe déjà - + Failed to import the Snapmatic picture, can't copy the file into profile Impossible d'importer la photo Snapmatic, impossible de copier le fichier dans le profil - + Failed to import the Savegame, can't copy the file into profile Impossible d'importer la sauvegarde, impossible de copier le fichier dans le profil - + Failed to import the Savegame, no Savegame slot is left Impossible d'importer la sauvegarde, aucun emplacement libre - - - - + + Export selected Exporter la sélection - - + + JPG pictures and GTA Snapmatic Images JPG et GTA Snapmatic - - + + JPG pictures only Images JPG seulement - - + + GTA Snapmatic only GTA Snapmatic seulement - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exporter les photos Snapmatic%2<br><br>Les fichiers JPG permettent d'ouvrir les photos avec une visionneuse d'images<br>Les GTA Snapmatic permettent d'importer les photos dans le jeu<br><br>Exporter comme : - + + + Export selected... Exporter la sélection... - + Initialising export... + + + + + + + + + + + + Snapmatic Mass Tool + + + + + + + + You don't have any Snapmatics selected! + + + + + + + + Patch selected... + + + + + + + + + + + + Patch file %1 of %2 files + + + + + + + + %1 failed with... + +%2 + Action failed with... + + + + + Qualify + %1 failed with... + + + + + Change Players + %1 failed with... + + + + + Failed to enter a valid Snapmatic Crew ID + + + + + Change Crew + %1 failed with... + + + + + Failed to enter a valid Snapmatic title + + + + + Change Title + %1 failed with... + + Initializing export... Initialisation de l'export... - + Export failed with... %1 @@ -1349,36 +1563,36 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No Snapmatic pictures or Savegames files are selected Aucun fichier de sauvegarde ou photo Snapmatic sélectionné - - - + + + Remove selected Supprimer la sélection - + You really want remove the selected Snapmatic picutres and Savegame files? Supprimer la sélection ? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Impossible de 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) @@ -1405,7 +1619,7 @@ Appuyer sur 1 pour le mode par défaut SavegameDialog - + Savegame Viewer Gestionnaire de sauvegardes @@ -1425,7 +1639,7 @@ Appuyer sur 1 pour le mode par défaut &Fermer - + Failed at %1 Échec de %1 @@ -1474,7 +1688,7 @@ Appuyer sur 1 pour le mode par défaut Supprimer - + &Export &Exporter @@ -1565,32 +1779,32 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + &View &Voir - + &Remove &Supprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner to&ut - + &Deselect All &Déselectionner tout @@ -1600,13 +1814,13 @@ Appuyer sur 1 pour le mode par défaut - - - - - - - + + + + + + + Snapmatic Properties Propriétés Snapmatic @@ -1650,7 +1864,8 @@ Appuyer sur 1 pour le mode par défaut Meme - + + Snapmatic Title Titre Snapmatic @@ -1660,7 +1875,7 @@ Appuyer sur 1 pour le mode par défaut Valeurs Snapmatic - + Crew: %1 (%2) Crew : %1 (%2) @@ -1670,13 +1885,13 @@ Appuyer sur 1 pour le mode par défaut Titre : %1 (%2) - + Players: %1 (%2) Multiple Player are inserted here - + Player: %1 (%2) One Player is inserted here @@ -1713,9 +1928,9 @@ Appuyer sur 1 pour le mode par défaut A&nnuler - + - + Edit Éditer @@ -1734,40 +1949,43 @@ Appuyer sur 1 pour le mode par défaut Non - + <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 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 : @@ -1821,19 +2039,19 @@ Appuyer sur 1 pour le mode par défaut - + JSON is incomplete and malformed - + JSON is incomplete - + JSON is malformed @@ -1883,8 +2101,8 @@ Appuyer sur 1 pour le mode par défaut - - + + Delete picture Supprimer la photo @@ -1894,27 +2112,27 @@ 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 - + Edi&t Édi&ter - + Show &In-game &Visible en jeu - + Hide &In-game &Invisible en jeu @@ -1923,7 +2141,7 @@ Appuyer sur 1 pour le mode par défaut Modifier les &propriétés... - + &Export &Exporter @@ -1936,32 +2154,32 @@ Appuyer sur 1 pour le mode par défaut Exporter comme &GTA Snapmatic... - + &View &Voir - + &Remove S&upprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner &tout - + &Deselect All &Déselectionner tout @@ -2028,133 +2246,146 @@ Appuyer sur 1 pour le mode par défaut &À propos de gta5sync - Ctrl+P - Ctrl+P + Ctrl+P - + &Exit &Quitter - + Exit Quitter - Ctrl+Q - Ctrl+Q + Ctrl+Q - + Close &Profile Fermer le &profil - Ctrl+End - Ctrl + Fin + Ctrl + Fin - + &Settings Paramètre&s - Ctrl+S - Ctrl+S + Ctrl+S - + Select &All Sélectionner &tout - Ctrl+A - Ctrl+A + Ctrl+A - + &Deselect All &Désélectionner tout - Ctrl+D - Ctrl+D + Ctrl+D - + &Export selected... &Exporter la sélection... - Ctrl+E - Ctrl+E + Ctrl+E - + &Remove selected &Supprimer la sélection - Ctrl+Del - Ctrl+Del + Ctrl+Del - + &Import files... &Importer... - Ctrl+I - Ctrl+I + Ctrl+I - + &Open File... &Ouvrir... - Ctrl+O - Ctrl+O + Ctrl+O - - + + Select &GTA V Folder... Modifier l'emplacement de &GTA V... - - - - + + + + Select GTA V Folder... Modifier l'emplacement de GTA V... - Ctrl+G - Ctrl+G + Ctrl+G - + Show In-gam&e Rendre visible &en jeu - Shift+E - Shift+E + Shift+E + + + + Change &Players... + + + + + Selection &mass tools + + + + + Change &Title... + + + + + Change &Crew... + + + + + &Qualify as Avatar + @@ -2162,14 +2393,13 @@ Appuyer sur 1 pour le mode par défaut &Visibilité de la sélection - + Hi&de In-game Ren&dre invisible en jeu - Shift+D - Shift+D + Shift+D @@ -2178,34 +2408,34 @@ Appuyer sur 1 pour le mode par défaut %2 - %1 - + - + &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 diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index dccda8d3ec81b4719a2fca3b795fd8481bacfc24..bf22251be5f1d415a6bb24ad87e3d97fe0de8278 100644 GIT binary patch delta 2429 zcmYk8X;@U(8OQ(k&b{2Z%P=aNY!Orpn~EZ$q6SfrMHG=;#X%NDHrb4Qk~mOI8&hIx zanwZApokl7qDVvuT0x>n1cOUrO8!+JKEGAXL@>R(c3^zXCGLAefu!vb81%-Nda6Al&u< z#??W%9|t(5F|N1;aUmI6HvwWe(dh`pkCp;2c|z>I4kQOKW_Lng6HDjzz;pJmfjPd6 zTjJq8W+%r2?=d?$H{m^ICwB|X-cS7K%R%_GL;y1a;WKt&%mK!XTr8Rw3M@T^&`gRv zA6Wh-G4c??=YB(3cz~!gw9YyVbK+{i<@bv`hmi_!l(#uPjL^jr(T z&1RHeXVgAtoKVGRW6kKcn{n<%#^^XkbB+~XpVkM&dhv~o0YLmd{^QmuKwLh5S?~f< zzTi9d8A(V*e0L!|-@1kWTSpY&+Q#?R*#ggejpZsiqv|*jj=}&;oC7oP% z57_Lkv%m2(;O(MwETMgqCg}o7hk-3RU3~ppFvC4Vm%Ys$D5%%v)}8}A+;s0I%2dNA zy0$b*S>Rq>R~e;J-ym42R70=LLcmW8NL(f%a0y+MoGZl4I|3ve7v37bhPt6tsC=8m zXDkxlN!d*u1mRdHX~O58Q15%30ze`RZNiJ5PNG2=y+kP~_?IY*om)04+Me7G$RUh=yTz2QRv^(| z%=;i62s$8|XT(!2XNuLn=@wE~zu5bajezuql^ECn z=n|}4+pVc@{%aMx-UA38v`Xg-fT%93&G8hnuuhWtCID`tqzso(tyIQ{hl~k}BwOJG zP`FI;9BrdE$&;r4k?7YUZOCb)8psV&_L7yPzI}{guS+@K(Ar>NoI4~He9;Tc{!se; zky07}osy-?0_2rTwO8|rv!%09-;)EMN{u~pfCw+CwUxv(@tX7~ng)WyBE1+!wacEY zcWs{mEG*S88L0)-Mt#WB8Z)WkH~JMPyMc@o`n;NBK$xg6xSB~S9MPA#KcLaIT7S8f z8rtNcZ*8KBq!xYqHOkO}Q~JSXa>VYI>~Q5O?dy>pz78hU<;&AvOaV4+kiE9kJsQX8 zXfMy*6-s@1R$jh;Hw~U1IeL$|gACr3*GrUYmp*ypeu^M*NX`xafgEd*bF+w|MJ{?i z8(7&Zm;8Zhs(&uO9rjn!N|RhUBY+GUK*d!b&;g03i&=wHB3!X zxPEdZ_L9O45Z8=T3}bUT@m^9lnrRB9PWoOejv|K4(snJi zP~VSg`=`@d_0+04dd;m0W=yxyYK`Q0Gv=~F+F6#GjcNm>~4Z#Ldd(dPi?HlqP*KrM^vzpqF^x7m{Ro{-ZUjRK!pj!X{ delta 2913 zcmZXWc~n&A8OEQPxx>s|h7m;;0TmTx6BPwZ((o?q6qaZ2T?^5JLdG2`D>N_R0jb6+pMufN%kDeHYMA1kx`9-a&xl zSio--U^1w5+yo4<=lc+qj;DYbEkM=)2+KACc18$W-vV-|&e|XVQ?Em4BTKXpE=>kp zZm66P2mNRonD!y`Ro( z?(pr@Ul0S|GhXDs;d^f|Q0NA$Ut=^da6kMy6(+c-oOKVcg+v13K8Va=#B<9LwSF~tX}XBmf*4Gd`uBAZnx$?raeGJlh(7L66k+ho8aG0!-3lLBRrooT03{i zWT0q)w&c_8K!~-wcG)0)=u)oTkjZ*^Z%`TUs@?X+2%u}c%As>rrd4To1Xlr?K$YS` zm0i32$`vYm+p7#7p>o0nm2>{6t(|!rn6zD6UmpZmlby6*H1`FP?rRSTK1^MT_ShOT zF!-UiZ9WA`0=3^Ci)G~D+M8P)fxJiBC*h3L?5uq@xEnCDOsDJd7dGceow)TPFngoU z>F5iMgynmXW{X=j1zoVE<8UNL=Wfah0cQ!3-ylM)^ZPosT^#tpL)8P5!dPG zZkPp(a?x7@k^zTZ`f7hhG~=3nmB9B8}5>S-*QnBU7JW=^;2<7uh9dcmZRJ z?Ph6aQne9@N;r- zv|&a;J-w?lF=%<^!$lFhirU^)L%G z(#QCqfsS;K6P>?q;yz3ioxkJmoPA&H|F|!=$@ikqn^dG|RJyDYgO^6qzz{KN?Fu@c zD8{Wm#vzXpGYoayIyqw2S_Y6}5evt&)8@P;7Uq)rDzW5IAP}D=T0U%MhZ!GgLf;XvQZ;)6?!xXhE>LZ(WZb~=_g zQqtV*}R^A&ttdCWnw#KIBbPe<)of#kEr~ z<*1bMz#g#pNU8r~M*It;nP0q32S1mx!PL1;lh#G^oN`vBV}Z)F^U?wL?m%>_bmDFq z9a|}#%wg|@Jd;j^ab)76q_ze70BMTKIFr<7?fhY4y86Sc5mMV{Or?XDbg5S|_u)zD z@{WfrNt1MIFH;+}MruF7=8STaHJuKP&z5y#9XV@{WY>MI?2T+WB&vhGvqheImXRkU z%8TupIrmTGWkHkKW259{<8ISljmlXT*}CF|JBPfFyb`y_Rr2cR6}%g#$yLtWuQPOV zwcooua82c`UGkTUdvdWS%7^CCpygYV3N6d!!(-aHohsxu3mq$Mmd|~X!)Ei5&sXv0 z%Iqos-0(L>{)0-V9*XdBBul)=s)%>#@$0FIy11xxtu>7` zaVkb`GKE!K;MlD+O?G6j1a4OubJeuJF^zY1n#u?_Q%hQRV8j*Ets?3lon%*J|yh1Z!Ds~po8Wfa~MJRSLQJf*)&rXbJqM0-YAF7Md$YN zQWnhfR*wRzo<>40y(dDAb+yrDeIJ5SM&Tb;S(08<~f!F=X)JtORI?)Y;6zgN&& z*-af+_&#`H2zm>z3uA;jNo-Xr+dcYKUUceOSLx)St2^tOuF-U@eA~lKG$!R(Ecr#V zODoShIn@nxlc#$q2!{nFD1;wEjnoFa&cAR=Nugh8cRv_9&Alg=7qK&{r zTY&@{fdpHDNj3tLYz2~R1d{4J-wM|Cwnq~3kdIszzz@IW){vB!pKI}ZnOqy8-}3gW M(96VCrYxNKKc`Iu!Thttps://github.com/VADemon/ - + Using %1 %2 Using specific library, example Using libmyfuck ИÑпользует %1 %2 - + Translated by %1 Translated by translator, example Translated by Syping Перевёл %1 - + NAME_OF_TRANSLATOR Enter your name there VADemon - + TRANSLATOR_PROFILE Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage 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> @@ -136,7 +136,7 @@ Pictures and Savegames Copyright &copy; <a href="%1">%2</a> %3<br/>%4 под лицензией <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> Pictures and Savegames Проект Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра и ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ <br/> @@ -253,17 +253,72 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений&Закрыть + + ImageEditorDialog + + + + + Snapmatic Image Editor + + + + + Overwrite Image... + + + + + + Capacity: %1 + + + + + ? + + + + + &Import... + &Импортировать... + + + + &Overwrite + + + + + &Close + &Закрыть + + + + Patching of Snapmatic Image failed because of I/O Error + + + + + Patching of Snapmatic Image failed because of Image Error + + + + + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. + + + ImportDialog - + Import... Импортировать... - Settings - ÐаÑтройки + ÐаÑтройки &Keep Aspect Ratio @@ -282,78 +337,126 @@ Grand Theft Auto V Snapmatic картинок и ÑохраненийОÑтавить Ñоотношение Ñторон - + + Ignore Aspect Ratio Игнорировать Ñоотн. Ñторон - + Avatar Ðватар - - - + + Picture + + + + + Background + + + + + + Background Colour: <span style="color: %1">%1</span> Цвет фона: <span style="color: %1">%1</span> - + + ... ... - + + Background Image: %1 + + + + + X + + + + + Force Colour in Avatar Zone + + + + Import picture Импортировать картинку - + &OK &ОК - + Discard picture Отклонить картинку - + &Cancel Я не уверен наÑчет горÑчих клавиш... От&мена - - + + + + Background Image: + + + + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! - + 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 + Файл + + + Import + Импортировать + + + Can't import %1 because file can't be parsed properly + Ðе получилоÑÑŒ импортировать %1, файл не может быть правильно обработан + JsonEditorDialog @@ -373,7 +476,7 @@ When you want to use it as Avatar the image will be detached! &Закрыть - + JSON Error @@ -418,7 +521,7 @@ Y: %2 - + X: %1 Y: %2 X and Y position @@ -601,8 +704,8 @@ Y: %2 - - + + Current: %1 @@ -655,37 +758,37 @@ Y: %2 %1 (%2 еÑли имеетÑÑ) - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default СиÑтема - + %1 (Closest to Interface) Next closest language compared to the Interface - + Auto Automatic language choice. - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. Ð”Ñ€ÑƒÐ³Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° будет загружена поÑле перезапуÑка %1. @@ -698,15 +801,15 @@ Y: %2 Язык изменитÑÑ Ð¿Ð¾Ñле перезапуÑка %1. - + No Profile No Profile, as default Ðет Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - + + - Profile: %1 Профиль: %1 @@ -786,8 +889,8 @@ Y: %2 ЭкÑп&ортировать как картинку JPG... - - + + Export as &Picture... ЭкÑпортировать как &картинку... @@ -796,8 +899,8 @@ Y: %2 ЭкÑ&портировать как GTA Snapmatic... - - + + Export as &Snapmatic... ЭкÑпортировать как &Snapmatic... @@ -810,19 +913,25 @@ Y: %2 Открыть &карту... - - + + + &Overwrite Image... + + + + + &Edit Properties... &Изменить ÑвойÑтва... - - + + Open &Map Viewer... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -831,32 +940,32 @@ Arrow Keys - Navigate Стрелки - ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ - - + + Snapmatic Picture Viewer ПроÑмотрщик фотографий Snapmatic - - + + Failed at %1 Ошибка при %1 - - + + No Crew Вне банды - - - + + + No Players Игроков нет - + Avatar Preview Mode Press 1 for Default View Режим проÑмотра аватарок @@ -871,7 +980,7 @@ Press 1 for Default View Без группы - + Unknown Location ÐеизвеÑтное меÑто @@ -1009,8 +1118,8 @@ Press 1 for Default View Ðе удалоÑÑŒ Ñкопировать текущую картинку Snapmatic - - + + Open &JSON Editor... @@ -1043,28 +1152,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! @@ -1119,40 +1228,49 @@ Press 1 for Default View Закрыть профиль - + Loading... Загрузка... - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - - + + + + Import... Импортировать... - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + Import Импортировать @@ -1161,31 +1279,33 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (SGTA* PGTA*) - - + + Savegames files (SGTA*) Файлы ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ (SGTA*) - - + + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) - - + + + + All files (**) Ð’Ñе файлы (**) - - + + Import file %1 of %2 files ИмпортируютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ %1 из %2 - + Import failed with... %1 @@ -1194,14 +1314,14 @@ Press 1 for Default View %1 - - + + Failed to read Snapmatic picture Ðе удалоÑÑŒ загрузить картинку Snapmatic - - + + Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ @@ -1210,14 +1330,14 @@ Press 1 for Default View Ðе получилоÑÑŒ импортировать %1 из-за неправильного формата файла - - - + + + No valid file is selected Выбранный файл неверен - + Enabled pictures: %1 of %2 Включенные картинки: %1 из %2 @@ -1230,96 +1350,194 @@ Press 1 for Default View Ð’Ñе Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (*.jpg *.png) - + Importable files (%1) Файлы Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° (%1) - + + + All image files (%1) Ð’Ñе файлы изображений (%1) - + + + + Can't import %1 because file can't be open + + + + + + Can't import %1 because file can't be parsed properly Ðе получилоÑÑŒ импортировать %1, файл не может быть правильно обработан - + Can't import %1 because file format can't be detected Ðе получилоÑÑŒ импортировать %1, не удалоÑÑŒ определить формат файла - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе удалоÑÑŒ импортировать картинку Snapmatic, название не начинаетÑÑ Ñ PGTA или не заканчиваетÑÑ Ñ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе удалоÑÑŒ импортировать картинку Snapmatic, картинка уже в игре - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе удалоÑÑŒ импортировать картинку Snapmatic, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, can't copy the file into profile Ðе удалоÑÑŒ импортировать Ñохранение, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, no Savegame slot is left Ðе удалоÑÑŒ импортировать Ñохранение, нет пуÑтых Ñчеек под ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + JPG pictures and GTA Snapmatic Картинки JPG и GTA Snapmatic - - + + JPG pictures only Только картинки JPG - - + + GTA Snapmatic only Только GTA Snapmatic - + Initialising export... Подготовка к ÑкÑпорту... - - + + No Snapmatic pictures or Savegames files are selected Ðе выделены ни один Snapmatic или Ñохранение - - - + + + Remove selected СнÑть выделение - + You really want remove the selected Snapmatic picutres and Savegame files? Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Ðе удалоÑÑŒ удалить полноÑтью выбранные картинки Snapmatic и/или файлы Ñохранений + + + + + + + + + + + + Snapmatic Mass Tool + + + + + + + + You don't have any Snapmatics selected! + + + + + + + + Patch selected... + + + + + + + + + + + + Patch file %1 of %2 files + + + + + + + + %1 failed with... + +%2 + Action failed with... + + + + + Qualify + %1 failed with... + + + + + Change Players + %1 failed with... + + + + + Failed to enter a valid Snapmatic Crew ID + + + + + Change Crew + %1 failed with... + + + + + Failed to enter a valid Snapmatic title + + + + + Change Title + %1 failed with... + + Failed to import copy of Snapmatic picture because the file not begin with PGTA Ðе удалоÑÑŒ имортировать копию картинки Snapmatic, Ñ‚.к. файл не начинаетÑÑ Ñ PGTA @@ -1337,20 +1555,20 @@ Press 1 for Default View Ðе получилоÑÑŒ имортировать копию ÑохранениÑ, потому что не оÑталоÑÑŒ Ñвободных под них Ñлотов - - - - + + Export selected ЭкÑпортировать выделенное - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1ЭÑкпортировать картинки Snapmatic%2<br><br>Картинки JPG можно открыть любым проÑмотрщиком<br>Картинки формата GTA Snapmatic можно Ñнова импортировать в игру<br><br>ЭкÑпортировать как: - + + + Export selected... Экпортировать выделенное... @@ -1359,7 +1577,7 @@ Press 1 for Default View Подготавливаю ÑÑкпорт... - + Export failed with... %1 @@ -1375,13 +1593,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) @@ -1408,7 +1626,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer ПроÑмотрщик Ñохранений @@ -1436,7 +1654,7 @@ Press 1 for Default View Закрыть - + Failed at %1 Ошибка при %1 @@ -1536,32 +1754,32 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить Ñохранение %1 - + &View &ПроÑмотр - + &Remove &Удалить - + &Select &Выбрать - + &Deselect Сн&Ñть выбор - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1571,7 +1789,7 @@ Press 1 for Default View Копировать Ñохранение - + &Export &ЭкÑпортировать @@ -1631,13 +1849,13 @@ Press 1 for Default View - - - - - - - + + + + + + + Snapmatic Properties СвойÑтва Snapmatic @@ -1677,7 +1895,7 @@ Press 1 for Default View Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² Snapmatic - + Crew: %1 (%2) Банда: %1 (%2) @@ -1687,7 +1905,8 @@ Press 1 for Default View Meme - + + Snapmatic Title Заголовок Snapmatic @@ -1697,13 +1916,13 @@ Press 1 for Default View Заголовок: %1 (%2) - + Players: %1 (%2) Multiple Player are inserted here - + Player: %1 (%2) One Player is inserted here @@ -1740,9 +1959,9 @@ Press 1 for Default View &Отмена - + - + Edit Правка @@ -1759,40 +1978,43 @@ 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 JSON Error - - - - + + + + Patching of Snapmatic Properties failed because of I/O Error Ðе удалоÑÑŒ измененить ÑвойÑтва Snapmatic из-за проблемы ввода/вывода - + + New Snapmatic title: Ðовый заголовок Snapmatic: - + + Snapmatic Crew Банда на Snapmatic - + + New Snapmatic crew: ÐÐ¾Ð²Ð°Ñ Ð±Ð°Ð½Ð´Ð° на Snapmatic: @@ -1846,19 +2068,19 @@ Press 1 for Default View - + JSON is incomplete and malformed - + JSON is incomplete - + JSON is malformed @@ -1903,33 +2125,33 @@ 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 - + Edi&t &Правка - + Show &In-game Показывать в &игре - + Hide &In-game Ск&рыть в игре @@ -1938,7 +2160,7 @@ Press 1 for Default View &Изменить ÑвойÑтва... - + &Export &ЭкÑпорт @@ -1951,32 +2173,32 @@ Press 1 for Default View ЭкÑ&портировать как GTA Snapmatic... - + &View По&казать - + &Remove У&далить - + &Select &Выделить - + &Deselect Сн&Ñть выделение - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -2039,75 +2261,89 @@ Press 1 for Default View П&рофиль - + &Exit Ð’&ыход - + Exit Выход - + Close &Profile Закрыть п&рофиль - Ctrl+End - Ctrl+End + Ctrl+End - + &Settings &ÐаÑтройки - Ctrl+Del - Ctrl+Del + Ctrl+Del - + &Import files... &Импортировать файлы... - Ctrl+I - Ctrl+I + Ctrl+I - - + + Select &GTA V Folder... Выбрать &папку GTA V... - Ctrl+G - Ctrl+G + Ctrl+G - + Show In-gam&e Показывать в и&гре - Shift+E - Shift+E + Shift+E - + Hi&de In-game Скры&ть в игре - Shift+D - Shift+D + Shift+D + + + + Change &Players... + + + + + Change &Title... + + + + + Change &Crew... + + + + + &Qualify as Avatar + @@ -2120,22 +2356,27 @@ Press 1 for Default View Ð’&идимоÑть выделение - + + Selection &mass tools + + + + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех - + &Export selected... &Экпортировать выделенное... - + &Remove selected &Удалить выделенное @@ -2152,61 +2393,54 @@ Press 1 for Default View О программе gta5sync - Ctrl+A - Ctrl+A + Ctrl+A Close Закрыть - Ctrl+Q - Ctrl+Q + Ctrl+Q - Ctrl+P - Ctrl+P + Ctrl+P - + &Open File... &Открыть файл... - Ctrl+O - Ctrl+O + Ctrl+O - Ctrl+S - Ctrl+S + Ctrl+S - Ctrl+E - Ctrl+E + Ctrl+E - Ctrl+D - Ctrl+D + Ctrl+D - - + + Select Profile Выбор Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - - - - + + + + Select GTA V Folder... Выбрать папку GTA V... @@ -2217,27 +2451,27 @@ Press 1 for Default View %2 - %1 - + - + &About %1 &О программе %1 - + Open File... Открыть файл... - - - - + + + + Open File Открыть файл - + Can't open %1 because of not valid file format Ðе удалоÑÑŒ открыть %1 из-за неверного формата файла diff --git a/res/qtbase_en_GB.ts b/res/qtbase_en_GB.ts new file mode 100644 index 0000000..33da638 --- /dev/null +++ b/res/qtbase_en_GB.ts @@ -0,0 +1,16450 @@ + + + + + + + Intro + + + + Introx + + + + + AddDialog + + Add a Contact + + + + + AddTorrentDialog + + Choose a torrent file + + + + Torrents (*.torrent);; All files (*.*) + + + + Choose a destination directory + + + + + AddTorrentFile + + Add a torrent + + + + Select a torrent source + + + + Destination: + + + + Tracker URL: + + + + Browse + + + + File(s): + + + + Size: + + + + Creator: + + + + <none> + + + + Torrent file: + + + + Comment: + + + + 0 + + + + &OK + + + + &Cancel + + + + + AddressBook + + Name: + + + + Address: + + + + Simple Address Book + + + + &Add + + + + &Submit + + + + &Cancel + + + + Empty Field + + + + Please enter a name and address. + + + + Add Successful + + + + "%1" has been added to your address book. + + + + Add Unsuccessful + + + + Sorry, "%1" is already in your address book. + + + + &Next + + + + &Previous + + + + &Edit + + + + &Remove + + + + Edit Successful + + + + "%1" has been edited in your address book. + + + + Edit Unsuccessful + + + + Confirm Remove + + + + Are you sure you want to remove "%1"? + + + + Remove Successful + + + + "%1" has been removed from your address book. + + + + &Find + + + + Contact Not Found + + + + Sorry, "%1" is not in your address book. + + + + &Load... + + + + Load contacts from a file + + + + &Save... + + + + Save contacts to a file + + + + Save Address Book + + + + Address Book (*.abk);;All Files (*) + + + + Unable to open file + + + + Open Address Book + + + + No contacts in file + + + + The file you are attempting to open contains no contacts. + + + + E&xport + + + + Export as vCard + + + + Export Contact + + + + vCard Files (*.vcf);;All Files (*) + + + + Export Successful + + + + "%1" has been exported as a vCard. + + + + + AddressWidget + + Duplicate Name + + + + The name "%1" already exists. + + + + Edit a Contact + + + + Unable to open file + + + + No contacts in file + + + + The file you are attempting to open contains no contacts. + + + + + AnalogClock + + Analog Clock + + + + + ApplicationsTab + + Open with: + + + + Application %1 + + + + Always use this application to open this type of file + + + + Always use this application to open files with the extension '%1' + + + + + BasicToolsPlugin + + Pencil + + + + Air Brush + + + + Random Letters + + + + Circle + + + + Star + + + + Text... + + + + Text Shape + + + + Enter text: + + + + Qt + + + + Invert Pixels + + + + Swap RGB + + + + Grayscale + + + + + BearerMonitor + + BearerMonitor + + + + System State + + + + Online State: + + + + Configurations + + + + Name: + + + + State: + + + + Type: + + + + Invalid + + + + Purpose: + + + + Unknown + + + + Identifier: + + + + Roaming: + + + + Children: + + + + Network Location Awareness + + + + Register + + + + Unregister + + + + New Session + + + + Delete Session + + + + Scan + + + + %p% + + + + 1 + + + + Sessions + + + + Session 1 + + + + Online + + + + Offline + + + + Active + + + + Discovered + + + + Defined + + + + Undefined + + + + Internet Access Point + + + + Service Network + + + + User Choice + + + + Public + + + + Private + + + + Service Specific + + + + Available + + + + Not available + + + + + BlockingClient + + &Server name: + + + + S&erver port: + + + + This examples requires that you run the Fortune Server example as well. + + + + Get Fortune + + + + Quit + + + + Blocking Fortune Client + + + + The host was not found. Please check the host and port settings. + + + + The connection was refused by the peer. Make sure the fortune server is running, and check that the host name and port settings are correct. + + + + The following error occurred: %1. + + + + + BookWindow + + Books + + + + Details + + + + <b>Title:</b> + + + + <b>Author: </b> + + + + <b>Genre:</b> + + + + <b>Year:</b> + + + + <b>Rating:</b> + + + + Author Name + + + + Genre + + + + Title + + + + Year + + + + Rating + + + + + Browser + + Qt SQL Browser + + + + SQL Query + + + + &Clear + + + + &Submit + + + + &Insert Row + + + + Inserts a new Row + + + + &Delete Row + + + + Deletes the current Row + + + + Submit on &Field Change + + + + Commit on Field Change + + + + Submit on &Row Change + + + + Commit on Row Change + + + + Submit &Manually + + + + Commit Manually + + + + &Submit All + + + + Submit Changes + + + + &Revert All + + + + Revert + + + + S&elect + + + + Refresh Data from Database + + + + No database drivers found + + + + This demo requires at least one Qt database driver. Please check the documentation how to build the Qt SQL plugins. + + + + Ready. + + + + Query OK. + + + + Query OK, number of affected rows: %1 + + + + Unable to open database + + + + An error occurred while opening the connection: + + + + About + + + + The SQL Browser demonstration shows how a data browser can be used to visualize the results of SQLstatements on a live database + + + + + Calculator + + . + + + + ± + + + + Backspace + + + + Clear + + + + Clear All + + + + MC + + + + MR + + + + MS + + + + M+ + + + + ÷ + + + + × + + + + - + + + + + + + + + Sqrt + + + + x² + + + + 1/x + + + + = + + + + Calculator + + + + #### + + + + + CertificateInfo + + Display Certificate Information + + + + Certification Path + + + + Certificate Information + + + + %1%2 (%3) + + + + Issued by: + + + + Organization: %1 + + + + Subunit: %1 + + + + Country: %1 + + + + Locality: %1 + + + + State/Province: %1 + + + + Common Name: %1 + + + + Issuer Organization: %1 + + + + Issuer Unit Name: %1 + + + + Issuer Country: %1 + + + + Issuer Locality: %1 + + + + Issuer State/Province: %1 + + + + Issuer Common Name: %1 + + + + + ChatDialog + + Chat + + + + Message: + + + + ! Unknown command: %1 + + + + * %1 has joined + + + + * %1 has left + + + + Launch several instances of this program on your local network and start chatting! + + + + + ChatMainWindow + + Qt D-Bus Chat + + + + Messages sent and received from other users + + + + Message: + + + + Sends a message to other people + + + + Send + + + + Help + + + + File + + + + Quit + + + + Ctrl+Q + + + + About Qt... + + + + Change nickname... + + + + Ctrl+N + + + + + ChipTester + + Chip Example + + + + + ClassInfoPage + + Class Information + + + + Specify basic information about the class for which you want to generate skeleton source code files. + + + + &Class name: + + + + B&ase class: + + + + Generate Q_OBJECT &macro + + + + C&onstructor + + + + &QObject-style constructor + + + + Q&Widget-style constructor + + + + &Default constructor + + + + &Generate copy constructor and operator= + + + + + ClassWizard + + Class Wizard + + + + + Client + + &Server name: + + + + This examples requires that you run the Fortune Server example as well. + + + + Get Fortune + + + + Quit + + + + Fortune Client + + + + The host was not found. Please check the host name and port settings. + + + + The connection was refused by the peer. Make sure the fortune server is running, and check that the host name and port settings are correct. + + + + The following error occurred: %1. + + + + S&erver port: + + + + Opening network session. + + + + + CloseButton + + Close Tab + + + + + CodeStylePage + + Code Style Options + + + + Choose the formatting of the generated code. + + + + &Start generated files with a comment + + + + &Protect header file against multiple inclusions + + + + &Macro name: + + + + &Include base class definition + + + + Base class include: + + + + + ColorDock + + Size Hint: + + + + Min Size Hint: + + + + Max Size: + + + + Dock Widget Max Size: + + + + + ColorSwatch + + Closable + + + + Movable + + + + Floatable + + + + Vertical title bar + + + + Floating + + + + Allow on Left + + + + Allow on Right + + + + Allow on Top + + + + Allow on Bottom + + + + Place on Left + + + + Place on Right + + + + Place on Top + + + + Place on Bottom + + + + Tab into + + + + Split horizontally into + + + + Split vertically into + + + + Modified + + + + Raise + + + + Change Size Hints... + + + + + CompositionWidget + + Composition Modes + + + + Mode + + + + Clear + + + + Source + + + + Destination + + + + Source Over + + + + Destination Over + + + + Source In + + + + Dest In + + + + Source Out + + + + Dest Out + + + + Source Atop + + + + Dest Atop + + + + Xor + + + + Plus + + + + Multiply + + + + Screen + + + + Overlay + + + + Darken + + + + Lighten + + + + Color Dodge + + + + Color Burn + + + + Hard Light + + + + Soft Light + + + + Difference + + + + Exclusion + + + + Circle color + + + + Circle alpha + + + + Show Source + + + + Use OpenGL + + + + What's This? + + + + Animated + + + + + ConclusionPage + + Conclusion + + + + Click %1 to generate the class skeleton. + + + + Complete Your Registration + + + + I agree to the terms of the license + + + + <u>Evaluation License Agreement:</u> You can use this software for 30 days and make one backup, but you are not allowed to distribute it. + + + + <u>First-Time License Agreement:</u> You can use this software subject to the license you will receive by email. + + + + <u>Upgrade License Agreement:</u> This software is licensed under the terms of your current license. + + + + &Print + + + + Print License + + + + As an environmentally friendly measure, the license text will not actually be printed. + + + + + ConfigDialog + + Close + + + + Config Dialog + + + + Configuration + + + + Update + + + + Query + + + + + ConfigurationPage + + Server configuration + + + + Server: + + + + Qt (Australia) + + + + Qt (Germany) + + + + Qt (Norway) + + + + Qt (People's Republic of China) + + + + Qt (USA) + + + + + Connection + + undefined + + + + unknown + + + + + ConnectionWidget + + database + + + + Refresh + + + + Show Schema + + + + + Controller + + Controller + + + + Decelerate + + + + Accelerate + + + + Right + + + + Left + + + + + ControllerWindow + + &Quit + + + + Window Flags + + + + Type + + + + Window + + + + Dialog + + + + Sheet + + + + Drawer + + + + Popup + + + + Tool + + + + Tooltip + + + + Splash screen + + + + Hints + + + + MS Windows fixed size dialog + + + + X11 bypass window manager + + + + Frameless window + + + + No drop shadow + + + + Window title + + + + Window system menu + + + + Window minimize button + + + + Window maximize button + + + + Window close button + + + + Window context help button + + + + Window shade button + + + + Window stays on top + + + + Window stays on bottom + + + + Customize window + + + + + CreateDockWidgetDialog + + Add Dock Widget + + + + Object name: + + + + Location: + + + + Top + + + + Left + + + + Right + + + + Bottom + + + + Restore + + + + + DetailsDialog + + Name: + + + + Address: + + + + Send information about products and special offers + + + + T-shirt + + + + Badge + + + + Reference book + + + + Coffee cup + + + + Incomplete Form + + + + The form does not contain all the necessary information. +Do you want to discard it? + + + + + DetailsPage + + Fill In Your Details + + + + Please fill all three fields. Make sure to provide a valid email address (e.g., tanaka.aya@example.co.jp). + + + + &Company name: + + + + &Email address: + + + + &Postal address: + + + + + Dialog + + Dialog + + + + Load Image From File... + + + + Launch two of these dialogs. In the first, press the top button and load an image from a file. In the second, press the bottom button and display the loaded image from shared memory. + + + + Display Image From Shared Memory + + + + SharedMemory Example + + + + Select an image file + + + + Images (*.png *.xpm *.jpg) + + + + Selected file is not an image, please select another. + + + + Unable to create shared memory segment. + + + + Unable to attach to shared memory segment. +Load an image first. + + + + Unable to detach from shared memory. + + + + Http authentication required + + + + You need to supply a Username and a Password to access this site + + + + Username: + + + + Password: + + + + Site: + + + + %1 at %2 + + + + Client ready + + + + Server ready + + + + &Start + + + + &Quit + + + + Loopback + + + + Unable to start the test: %1. + + + + Listening + + + + Connecting + + + + Accepted connection + + + + Connected + + + + Received %1MB + + + + Sent %1MB + + + + Network error + + + + The following error occurred: %1. + + + + Quit + + + + Threaded Fortune Server + + + + Unable to start the server: %1. + + + + The server is running on + +IP: %1 +port: %2 + +Run the Fortune Client example now. + + + + Add Album + + + + Please provide both the name of the artist and the title of the album. + + + + Artist: + + + + Title: + + + + Year: + + + + Tracks (separated by comma): + + + + &Close + + + + &Revert + + + + &Submit + + + + <p>Message boxes have a caption, a text, and any number of buttons, each with standard or custom texts.<p>Click a button to close the message box. Pressing the Esc button will activate the detected escape button (if any). + + + + If a message box has detailed text, the user can reveal it by pressing the Show Details... button. + + + + Options + + + + QInputDialog::get&Int() + + + + QInputDialog::get&Double() + + + + QInputDialog::getIte&m() + + + + QInputDialog::get&Text() + + + + QInputDialog::get&MultiLineText() + + + + QColorDialog::get&Color() + + + + QFontDialog::get&Font() + + + + QFileDialog::getE&xistingDirectory() + + + + QFileDialog::get&OpenFileName() + + + + QFileDialog::&getOpenFileNames() + + + + QFileDialog::get&SaveFileName() + + + + QMessageBox::critica&l() + + + + QMessageBox::i&nformation() + + + + QMessageBox::&question() + + + + QMessageBox::&warning() + + + + QErrorMessage::showM&essage() + + + + Input Dialogs + + + + Do not use native dialog + + + + Show alpha channel + + + + No buttons + + + + Color Dialog + + + + Show scalable fonts + + + + Show non scalable fonts + + + + Show monospaced fonts + + + + Show proportional fonts + + + + Font Dialog + + + + Show directories only + + + + Do not resolve symlinks + + + + Do not confirm overwrite + + + + Do not use sheet + + + + Readonly + + + + Hide name filter details + + + + Do not use custom directory icons (Windows) + + + + File Dialogs + + + + Message Boxes + + + + QInputDialog::getInteger() + + + + Percentage: + + + + %1% + + + + QInputDialog::getDouble() + + + + Amount: + + + + Spring + + + + Summer + + + + Fall + + + + Winter + + + + QInputDialog::getItem() + + + + Season: + + + + QInputDialog::getText() + + + + User name: + + + + QInputDialog::getMultiLineText() + + + + Address: + + + + QFileDialog::getExistingDirectory() + + + + QFileDialog::getOpenFileName() + + + + All Files (*);;Text Files (*.txt) + + + + QFileDialog::getOpenFileNames() + + + + QFileDialog::getSaveFileName() + + + + QMessageBox::critical() + + + + Abort + + + + Retry + + + + Ignore + + + + QMessageBox::information() + + + + OK + + + + Escape + + + + QMessageBox::question() + + + + Yes + + + + No + + + + Cancel + + + + QMessageBox::warning() + + + + Save &Again + + + + &Continue + + + + Save Again + + + + Continue + + + + This dialog shows and remembers error messages. If the checkbox is checked (as it is by default), the shown message will be shown again, but if the user unchecks the box the message will not appear again if QErrorMessage::showMessage() is called with the same message. + + + + If the box is unchecked, the message won't appear again. + + + + Standard Dialogs + + + + SIP Dialog Example + + + + Open and close the SIP + + + + This dialog resizes if the SIP is opened + + + + Close Dialog + + + + This widget takes up all the remaining space in the top-level layout. + + + + Basic Layouts + + + + &File + + + + E&xit + + + + Horizontal layout + + + + Button %1 + + + + Grid layout + + + + Line %1: + + + + This widget takes up about two thirds of the grid layout. + + + + Form layout + + + + Line 1: + + + + Line 2, long text: + + + + Line 3: + + + + Dynamic Layouts + + + + Dynamic Layouts Help + + + + This example shows how to change layouts dynamically. + + + + Rotable Widgets + + + + Orientation of buttons: + + + + Horizontal + + + + Vertical + + + + Rotate &Widgets + + + + Hello world! + + + + Wiggly + + + + + Dials + + Form + + + + + DigitalClock + + Digital Clock + + + + + DomModel + + Name + + + + Attributes + + + + Value + + + + + DragWidget + + Draggable Text + + + + Fridge Magnets + + + + + DropArea + + <drop content> + + + + Cannot display data + + + + + DropSiteWindow + + This example accepts drags from other applications and displays the MIME types provided by the drag object. + + + + Format + + + + Content + + + + Clear + + + + Quit + + + + Drop Site + + + + + EchoWindow + + Send Message + + + + Message: + + + + Answer: + + + + + EmbeddedDialog + + Embedded Dialog + + + + Layout Direction: + + + + Left to Right + + + + Right to Left + + + + Select Font: + + + + Style: + + + + Layout spacing: + + + + + EvaluatePage + + Evaluate <i>Super Product One</i>&trade; + + + + Please fill both fields. Make sure to provide a valid email address (e.g., john.smith@example.com). + + + + N&ame: + + + + &Email address: + + + + + ExtraFiltersPlugin + + Flip Horizontally + + + + Flip Vertically + + + + Smudge... + + + + Threshold... + + + + Smudge Filter + + + + Enter number of iterations: + + + + Threshold Filter + + + + Enter threshold: + + + + + FadeMessage + + Press me + + + + + FileManager + + Failed to create directory %1 + + + + Failed to open/create file %1: %2 + + + + Failed to resize file %1: %2 + + + + Failed to read from file %1: %2 + + + + Failed to read from file %1 (read %3 bytes): %2 + + + + Failed to write to file %1: %2 + + + + + FilterWidget + + Case Sensitive + + + + + FindDialog + + Find &what: + + + + Match &case + + + + Search from &start + + + + &Find + + + + &More + + + + &Whole words + + + + Search &backward + + + + Search se&lection + + + + Extension + + + + Enter the name of a contact: + + + + Find a Contact + + + + Empty Field + + + + Please enter a name. + + + + + Form + + Form + + + + QFrame { +background-color: #45629a; +} + +QLabel { +color: white; +} + + + + Powered by FlightView + + + + background-color: white; +color: #45629a; + + + + Ready + + + + color: black; +border: 1px solid black; +background: white; +selection-background-color: lightgray; + + + + color: rgb(255, 255, 255); +background-color: rgb(85, 85, 255); +padding: 2px; +border: 2px solid rgb(0, 0, 127); + + + + Search + + + + QFrame { border: 2px solid white; +border-radius: 10px; +margin: 5px; +background-color: rgba(69, 98, 154, 192); } + + + + color: white; +border: none; +background-color: none; + + + + Secure Socket Client + + + + Host name: + + + + www.qt.io + + + + Port: + + + + Active session + + + + Connect to host + + + + Cryptographic Cipher: + + + + <none> + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p></body></html> + + + + Input: + + + + &Send + + + + Easing curves + + + + Path type + + + + Line + + + + buttonGroup + + + + Circle + + + + Properties + + + + Period + + + + Overshoot + + + + Amplitude + + + + BackSide + + + + Settings + + + + Title: + + + + Pad Navigator Example + + + + Modified: + + + + Extent + + + + Other input + + + + Widgets On Graphics View + + + + QGraphicsProxyWidget + + + + QGraphicsWidget + + + + QObject + + + + QGraphicsItem + + + + QGraphicsLayoutItem + + + + QGraphicsGridLayout + + + + QGraphicsLayout + + + + QGraphicsLinearLayout + + + + + FortuneServer + + You've been leading a dog's life. Stay off the furniture. + + + + You've got to think about tomorrow. + + + + You will be surprised by a loud noise. + + + + You will feel hungry again in another hour. + + + + You might have mail. + + + + You cannot kill time without injuring eternity. + + + + Computers are not intelligent. They only think they are. + + + + + GeneralTab + + File Name: + + + + Path: + + + + Size: + + + + %1 K + + + + Last Read: + + + + Last Modified: + + + + + GradientWidget + + Gradients + + + + Color Editor + + + + Gradient Type + + + + Linear Gradient + + + + Radial Gradient + + + + Conical Gradient + + + + Spread Method + + + + Pad Spread + + + + Reflect Spread + + + + Repeat Spread + + + + Defaults + + + + 1 + + + + 2 + + + + 3 + + + + Reset + + + + Show Source + + + + Use OpenGL + + + + What's This? + + + + + GraphWidget + + Elastic Nodes + + + + Click and drag the nodes around, and zoom with the mouse wheel or the '+' and '-' keys + + + + + GraphicsView + + Boxes + + + + + HttpWindow + + Please enter the URL of a file you want to download. + + + + + + Download + + + + HTTP + + + + &URL: + + + + &Download directory: + + + + Default &file: + + + + Quit + + + + Downloading %1... + + + + Error + + + + Invalid URL: %1: %2 + + + + Overwrite Existing File + + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Download canceled. + + + + Download failed: +%1. + + + + Redirect + + + + Redirect to %1 ? + + + + Downloaded %1 bytes to %2 +in +%3 + + + + %1 at %2 + + + + SSL Errors + + + + One or more SSL errors has occurred: +%1 + + + + + IconPreviewArea + + Normal + + + + Active + + + + Disabled + + + + Selected + + + + Off + + + + On + + + + <b>%1</b> + + + + Size: %1x%2 +Actual size: %3x%4 +Device pixel ratio: %5 + + + + + IconSizeSpinBox + + (\d+)(\s*[xx]\s*\d+)? + + + + %1 x %1 + + + + + ImageComposer + + SourceOver + + + + DestinationOver + + + + Clear + + + + Source + + + + Destination + + + + SourceIn + + + + DestinationIn + + + + SourceOut + + + + DestinationOut + + + + SourceAtop + + + + DestinationAtop + + + + Xor + + + + Plus + + + + Multiply + + + + Screen + + + + Overlay + + + + Darken + + + + Lighten + + + + ColorDodge + + + + ColorBurn + + + + HardLight + + + + SoftLight + + + + Difference + + + + Exclusion + + + + = + + + + Image Composition + + + + Choose Source Image + + + + Choose Destination Image + + + + + ImageViewer + + Cannot load %1: %2 + + + + Opened "%1", %2x%3, Depth: %4 + + + + Cannot write %1: %2 + + + + Wrote "%1" + + + + Open File + + + + Save File As + + + + No image in clipboard + + + + Obtained image from clipboard, %1x%2, Depth: %3 + + + + About Image Viewer + + + + <p>The <b>Image Viewer</b> example shows how to combine QLabel and QScrollArea to display an image. QLabel is typically used for displaying a text, but it can also display an image. QScrollArea provides a scrolling view around another widget. If the child widget exceeds the size of the frame, QScrollArea automatically provides scroll bars. </p><p>The example demonstrates how QLabel's ability to scale its contents (QLabel::scaledContents), and QScrollArea's ability to automatically resize its contents (QScrollArea::widgetResizable), can be used to implement zooming and scaling features. </p><p>In addition the example shows how to use QPainter to print an image.</p> + + + + &File + + + + &Open... + + + + &Save As... + + + + &Print... + + + + E&xit + + + + Ctrl+Q + + + + &Edit + + + + &Copy + + + + &Paste + + + + &View + + + + Zoom &In (25%) + + + + Zoom &Out (25%) + + + + &Normal Size + + + + Ctrl+S + + + + &Fit to Window + + + + Ctrl+F + + + + &Help + + + + &About + + + + About &Qt + + + + Image Viewer + + + + [file] + + + + Image file to open. + + + + + Images + + Image loading and scaling example + + + + Open Images + + + + Cancel + + + + Pause/Resume + + + + Select Images + + + + + InformationWindow + + Item: + + + + Description: + + + + Image file: + + + + &Close + + + + &Revert + + + + &Submit + + + + + IntroPage + + Introduction + + + + This wizard will generate a skeleton C++ class definition, including a few functions. You simply need to specify the class name and set a few options to produce a header file and an implementation file for your new C++ class. + + + + This wizard will help you register your copy of <i>Super Product One</i>&trade; or start evaluating the product. + + + + &Register your copy + + + + &Evaluate the product for 30 days + + + + + ItemDialog + + Items (double click to flip) + + + + Add Qt box + + + + Add circle + + + + Add square + + + + + LicenseWizard + + License Wizard + + + + The decision you make here will affect which page you get to see next. + + + + Make sure to provide a valid email address, such as toni.buddenbrook@example.de. + + + + If you don't provide an upgrade key, you will be asked to fill in your details. + + + + Make sure to provide a valid email address, such as thomas.gradgrind@example.co.uk. + + + + You must accept the terms and conditions of the license to proceed. + + + + This help is likely not to be of any help. + + + + Sorry, I already gave what help I could. Maybe you should try asking a human? + + + + License Wizard Help + + + + + LocationDialog + + Native + + + + INI + + + + User + + + + System + + + + QtProject + + + + Any + + + + Qt Creator + + + + Application Example + + + + Assistant + + + + Designer + + + + Linguist + + + + &Format: + + + + &Scope: + + + + &Organization: + + + + &Application: + + + + Setting Locations + + + + Location + + + + Access + + + + Open Application Settings + + + + Read-write + + + + Read-only + + + + Read-only fallback + + + + + MAC_APPLICATION_MENU + + Services + + + + Hide %1 + + + + Hide Others + + + + Show All + + + + Preferences... + + + + Quit %1 + + + + About %1 + + + + + MainWindow + + Torrent + + + + Peers/Seeds + + + + Progress + + + + Down rate + + + + Up rate + + + + Status + + + + Downloading + + + + Add &new torrent + + + + &Pause torrent + + + + &Remove torrent + + + + &File + + + + E&xit + + + + &Help + + + + &About + + + + About &Qt + + + + Tools + + + + :/icons/1downarrow.png + + + + Move down + + + + :/icons/1uparrow.png + + + + Move up + + + + Rate control + + + + Max download: + + + + 0 KB/s + + + + 99999 KB/s + + + + Max upload: + + + + Torrent Client + + + + Choose a torrent file + + + + Torrents (*.torrent);; All files (*.*) + + + + Error + + + + An error occurred while downloading %0: %1 + + + + Already downloading + + + + The torrent file %1 is already being downloaded. + + + + The torrent file %1 cannot not be opened/resumed. + + + + Torrent: %1<br>Destination: %2 + + + + 0/0 + + + + Idle + + + + Torrent: %1<br>Destination: %2<br>State: %3 + + + + %1/%2 + + + + Resume torrent + + + + Pause torrent + + + + %1 KB/s + + + + About Torrent Client + + + + Disconnecting from trackers + + + + Abort + + + + Music Archive + + + + Artist : %1 +Number of Albums: %2 + + + + Title: %1 (%2) + + + + Delete Album + + + + Are you sure you want to delete '%1' by '%2'? + + + + Select the album you want to delete. + + + + Artist + + + + Album + + + + Details + + + + &Add album... + + + + &Delete album... + + + + &Quit + + + + Ctrl+A + + + + Ctrl+D + + + + About Music Archive + + + + <p>The <b>Music Archive</b> example shows how to present data from different data sources in the same application. The album titles, and the corresponding artists and release dates, are kept in a database, while each album's tracks are stored in an XML file. </p><p>The example also shows how to add as well as remove data from both the database and the associated XML file using the API provided by the Qt SQL and Qt XML modules, respectively.</p> + + + + Finger Paint + + + + Open File + + + + About Scribble + + + + <p>The <b>Scribble</b> example shows how to use QMainWindow as the base widget for an application, and how to reimplement some of QWidget's event handlers to receive the events generated for the application's widgets:</p><p> We reimplement the mouse event handlers to facilitate drawing, the paint event handler to update the application and the resize event handler to optimize the application's appearance. In addition we reimplement the close event handler to intercept the close events before terminating the application.</p><p> The example also demonstrates how to use QPainter to draw an image in real time, as well as to repaint widgets.</p> + + + + &Open... + + + + Ctrl+O + + + + %1... + + + + &Print... + + + + Ctrl+Q + + + + &Clear Screen + + + + Ctrl+L + + + + &Save As + + + + &Options + + + + Scribble + + + + The image has been modified. +Do you want to save your changes? + + + + Save As + + + + %1 Files (*.%2);;All Files (*) + + + + New Game + + + + Quit + + + + Puzzle + + + + Open Image + + + + Image Files (*.png *.jpg *.bmp) + + + + The image file could not be loaded. + + + + Puzzle Completed + + + + Congratulations! You have completed the puzzle! +Click OK to start again. + + + + &Game + + + + &Restart + + + + Chip Example + + + + Diagramscene + + + + Blue Grid + + + + White Grid + + + + Gray Grid + + + + % + + + + About Diagram Scene + + + + The <b>Diagram Scene</b> example shows use of the graphics framework. + + + + Conditional + + + + Process + + + + Input/Output + + + + Text + + + + No Grid + + + + Basic Flowchart Shapes + + + + Backgrounds + + + + Bring to &Front + + + + Ctrl+F + + + + Bring item to front + + + + Send to &Back + + + + Ctrl+T + + + + Send item to back + + + + &Delete + + + + Delete + + + + Delete item from diagram + + + + Quit Scenediagram example + + + + Bold + + + + Ctrl+B + + + + Italic + + + + Ctrl+I + + + + Underline + + + + Ctrl+U + + + + A&bout + + + + F1 + + + + &Item + + + + Edit + + + + Font + + + + Color + + + + 50% + + + + 75% + + + + 100% + + + + 125% + + + + 150% + + + + Pointer type + + + + black + + + + white + + + + red + + + + blue + + + + yellow + + + + Address Book + + + + &Save As... + + + + &Tools + + + + &Add Entry... + + + + &Edit Entry... + + + + &Remove Entry + + + + Chart + + + + Label + + + + Quantity + + + + Choose a data file + + + + Loaded %1 + + + + Save file as + + + + Saved %1 + + + + Editable Tree Model + + + + &Actions + + + + Insert Row + + + + Ctrl+I, R + + + + Remove Row + + + + Ctrl+R, R + + + + Insert Column + + + + Ctrl+I, C + + + + Remove Column + + + + Ctrl+R, C + + + + Insert Child + + + + Ctrl+N + + + + Title + + + + Description + + + + Position: (%1,%2) + + + + Position: (%1,%2) in top level + + + + Pixel size: + + + + Pixelator + + + + Choose an image + + + + %1 - Pixelator + + + + Large Image Size + + + + The printed image may be very large. Are you sure that you want to print it? + + + + Print Image + + + + Printing... + + + + Cancel + + + + Printing canceled + + + + The printing process was canceled. + + + + Printing is not supported on this Qt build + + + + About the Pixelator example + + + + This example demonstrates how a standard view and a custom +delegate can be used to produce a specialized representation +of data in a simple custom model. + + + + Simple DOM Model + + + + XML files (*.xml);;HTML files (*.html);;SVG files (*.svg);;User Interface files (*.ui) + + + + About Application + + + + The <b>Application</b> example demonstrates how to write modern GUI applications using Qt, with a menu bar, toolbars, and a status bar. + + + + File + + + + &New + + + + Create a new file + + + + Open an existing file + + + + &Save + + + + Save the document to disk + + + + Save &As... + + + + Save the document under a new name + + + + Exit the application + + + + &Edit + + + + Cu&t + + + + Cut the current selection's contents to the clipboard + + + + &Copy + + + + Copy the current selection's contents to the clipboard + + + + &Paste + + + + Paste the clipboard's contents into the current selection + + + + Show the application's About box + + + + Show the Qt library's About box + + + + Ready + + + + Application + + + + The document has been modified. +Do you want to save your changes? + + + + Cannot read file %1: +%2. + + + + File loaded + + + + Cannot write file %1: +%2. + + + + File saved + + + + Dock Widgets + + + + Yours sincerely, + + + + Choose a file name + + + + Saved '%1' + + + + About Dock Widgets + + + + The <b>Dock Widgets</b> example demonstrates how to use Qt's dock widgets. You can enter your own text, click a customer to add a customer name and address, and click standard paragraphs to add them. + + + + &New Letter + + + + Create a new form letter + + + + &Save... + + + + Save the current form letter + + + + Print the current form letter + + + + Quit the application + + + + &Undo + + + + Undo the last editing action + + + + &View + + + + Customers + + + + Paragraphs + + + + Status Bar + + + + Save layout... + + + + Load layout... + + + + Switch layout direction + + + + Main window + + + + Animated docks + + + + Allow nested docks + + + + Allow tabbed docks + + + + Force tabbed docks + + + + Vertical tabs + + + + Grouped dragging + + + + Tool bars + + + + Unified + + + + &Dock Widgets + + + + Save layout + + + + Failed to open %1 +%2 + + + + Error writing to %1 +%2 + + + + Load layout + + + + Error reading %1 + + + + Top left corner + + + + Top dock area + + + + Left dock area + + + + Top right corner + + + + Right dock area + + + + Bottom left corner + + + + Bottom dock area + + + + Bottom right corner + + + + Destroy dock widget + + + + Add dock widget... + + + + Failed to restore dock widget + + + + MDI + + + + &%1 %2 + + + + About MDI + + + + The <b>MDI</b> example demonstrates how to write multiple document interface applications using Qt. + + + + %1 %2 + + + + Recent... + + + + &Window + + + + Cl&ose + + + + Close the active window + + + + Close &All + + + + Close all the windows + + + + &Tile + + + + Tile the windows + + + + &Cascade + + + + Cascade the windows + + + + Ne&xt + + + + Move the focus to the next window + + + + Pre&vious + + + + Move the focus to the previous window + + + + <i>Choose a menu option, or right-click to invoke a context menu</i> + + + + A context menu is available by right-clicking + + + + Menus + + + + Invoked <b>File|New</b> + + + + Invoked <b>File|Open</b> + + + + Invoked <b>File|Save</b> + + + + Invoked <b>File|Print</b> + + + + Invoked <b>Edit|Undo</b> + + + + Invoked <b>Edit|Redo</b> + + + + Invoked <b>Edit|Cut</b> + + + + Invoked <b>Edit|Copy</b> + + + + Invoked <b>Edit|Paste</b> + + + + Invoked <b>Edit|Format|Bold</b> + + + + Invoked <b>Edit|Format|Italic</b> + + + + Invoked <b>Edit|Format|Left Align</b> + + + + Invoked <b>Edit|Format|Right Align</b> + + + + Invoked <b>Edit|Format|Justify</b> + + + + Invoked <b>Edit|Format|Center</b> + + + + Invoked <b>Edit|Format|Set Line Spacing</b> + + + + Invoked <b>Edit|Format|Set Paragraph Spacing</b> + + + + Invoked <b>Help|About</b> + + + + About Menu + + + + The <b>Menu</b> example shows how to create menu-bar menus and context menus. + + + + Invoked <b>Help|About Qt</b> + + + + Print the document + + + + Undo the last operation + + + + &Redo + + + + Redo the last operation + + + + &Bold + + + + Make the text bold + + + + &Italic + + + + Make the text italic + + + + Set &Line Spacing... + + + + Change the gap between the lines of a paragraph + + + + Set &Paragraph Spacing... + + + + Change the gap between paragraphs + + + + &Left Align + + + + Left align the selected text + + + + &Right Align + + + + Ctrl+R + + + + Right align the selected text + + + + &Justify + + + + Ctrl+J + + + + Justify the selected text + + + + &Center + + + + Ctrl+E + + + + Center the selected text + + + + &Format + + + + Alignment + + + + About SDI + + + + The <b>SDI</b> example demonstrates how to write single document interface applications using Qt. + + + + &Close + + + + Ctrl+W + + + + Close this window + + + + SDI + + + + document%1.txt + + + + Preparing font samples... + + + + &Cancel + + + + Font Sampler + + + + Date: + + + + Font size: + + + + Calendar for %1 %2 + + + + &New... + + + + Order Form + + + + Date: %1 + + + + I would like to place an order for the following items: + + + + Product + + + + Please update my records to take account of the following privacy information: + + + + I want to receive more information about your company's products and special offers. + + + + I do not want to receive any promotional information from your company. + + + + Sincerely, + + + + Enter Customer Details + + + + Print Document + + + + Syntax Highlighter + + + + About Syntax Highlighter + + + + <p>The <b>Syntax Highlighter</b> example shows how to perform simple syntax highlighting by subclassing the QSyntaxHighlighter class and describing highlighting rules using regular expressions.</p> + + + + Gesture example + + + + Codecs + + + + Cannot read file %1: +%2 + + + + Choose Encoding for %1 + + + + Save As (%1) + + + + Cannot write file %1: +%2 + + + + About Codecs + + + + The <b>Codecs</b> example demonstrates how to read and write files using various encodings. + + + + Model + + + + QFileSytemModel + + + + QFileSytemModel that shows full path + + + + Country list + + + + Word list + + + + Completion Mode + + + + Inline + + + + Filtered Popup + + + + Unfiltered Popup + + + + Case Sensitivity + + + + Case Insensitive + + + + Case Sensitive + + + + Max Visible Items + + + + Wrap around completions + + + + Completer + + + + Exit + + + + About + + + + About Qt + + + + Enter file path + + + + Enter name of your country + + + + Enter a word + + + + This example demonstrates the different features of the QCompleter class. + + + + Plug & Paint + + + + Cannot load %1. + + + + Select brush width: + + + + About Plug & Paint + + + + The <b>Plug & Paint</b> example demonstrates how to write Qt applications that can be extended through plugins. + + + + &Brush Color... + + + + &Brush Width... + + + + About &Plugins + + + + &Brush + + + + &Shapes + + + + &Filter + + + + Open INI File + + + + INI Files (*.ini *.conf) + + + + Open Property List + + + + Property List Files (*.plist) + + + + Open Registry Path + + + + Enter the path in the Windows registry: + + + + About Settings Editor + + + + The <b>Settings Editor</b> example shows how to access application settings using Qt. + + + + &Open Application Settings... + + + + Open I&NI File... + + + + Open Apple &Property List... + + + + Ctrl+P + + + + Open Windows &Registry Path... + + + + Ctrl+G + + + + &Refresh + + + + &Auto-Refresh + + + + &Fallbacks + + + + %1 (read only) + + + + %1 - %2 + + + + Opened "%1" + + + + Tree Model<br>(Double click items to edit) + + + + Tree Separator + + + + Tree Model Completer + + + + This example demonstrates how to use a QCompleter with a custom tree model. + + + + Type path from model above with items at each level separated by a '%1' + + + + Tab 1 + + + + Macros + + + + Help + + + + File actions + + + + Shape actions + + + + Undo Stack + + + + Undo limit + + + + &Open + + + + Red + + + + Green + + + + Blue + + + + Add Rectangle + + + + Add Circle + + + + Remove Shape + + + + Add robot + + + + Add snowan + + + + addTriangle + + + + File error + + + + Failed to open +%1 + + + + Parse error + + + + Failed to parse +%1 + + + + Unnamed + + + + Unsaved changes + + + + Would you like to save this document? + + + + Add snowman + + + + About Undo + + + + The Undo demonstration shows how to use the Qt Undo framework. + + + + Command List + + + + &Delete Item + + + + Del + + + + Add &Box + + + + Add &Triangle + + + + The <b>Undo</b> example demonstrates how to use Qt's undo framework. + + + + Show Font Info + + + + Filter: + + + + All + + + + Scalable + + + + Monospaced + + + + Proportional + + + + Font: + + + + Size: + + + + Style: + + + + Automatic Font Merging: + + + + &To clipboard + + + + Character Map + + + + %n font(s) found + + + + + + + Fonts + + + + Icons + + + + [file] + + + + Icon file(s) to open. + + + + Preview + + + + About Icons + + + + The <b>Icons</b> example illustrates how Qt renders an icon in different modes (active, normal, disabled, and selected) and states (on and off) based on a set of images. + + + + Small (%1 x %1) + + + + Large (%1 x %1) + + + + Toolbars (%1 x %1) + + + + List views (%1 x %1) + + + + Icon views (%1 x %1) + + + + Tab bars (%1 x %1) + + + + Open Images + + + + Directory: %1 +File: %2 +File@2x: %3 +Size: %4x%5 + + + + <None> + + + + Images + + + + Image + + + + Mode + + + + State + + + + Icon Size + + + + Other: + + + + Enter a custom size within %1..%2 + + + + "%1" (%2x%3) + + + + High DPI Scaling + + + + Screen: + + + + Device pixel ratio: + + + + Add &Sample Images... + + + + &Add Images... + + + + &Remove All Images + + + + %1 Style + + + + &Settings + + + + &Guess Image Mode/State + + + + &Use Native File Dialog + + + + Select pen width: + + + + &Pen Color... + + + + Pen &Width... + + + + Style Sheet + + + + Please read the LICENSE file before checking + + + + I accept the terms and &conditions + + + + Profession: + + + + &Name: + + + + Check this if you are male + + + + &Male + + + + &Password: + + + + Specify country of origin + + + + Egypt + + + + France + + + + Germany + + + + India + + + + Italy + + + + Norway + + + + Pakistan + + + + &Age: + + + + Country: + + + + Gender: + + + + Specify your password + + + + Password + + + + Check this if you are female + + + + &Female + + + + Specify your age + + + + Specify your name + + + + Select your profession + + + + Specify your name here + + + + Developer + + + + Student + + + + Fisherman + + + + &Exit + + + + Edit &Style... + + + + About Style sheet + + + + The <b>Style Sheet</b> example shows how widgets can be styled using <a href="http://doc.qt.io/qt-5/stylesheet.html">Qt Style Sheets</a>. Click <b>File|Edit Style Sheet</b> to pop up the style editor, and either choose an existing style sheet or design your own. + + + + Tablet Example + + + + Save Picture + + + + Open Picture + + + + About Tablet Example + + + + This example shows how to use a graphics drawing tablet in Qt. + + + + &Tablet + + + + &Line Width + + + + &Pressure + + + + &Tilt + + + + &Fixed + + + + &Alpha Channel + + + + T&angential Pressure + + + + No Alpha Channel + + + + &Color Saturation + + + + &Vertical Tilt + + + + &Horizontal Tilt + + + + &No Color Saturation + + + + DOM Bookmarks + + + + Open Bookmark File + + + + XBEL Files (*.xbel *.xml) + + + + SAX Bookmarks + + + + Save Bookmark File + + + + About DOM Bookmarks + + + + The <b>DOM Bookmarks</b> example demonstrates how to use Qt's DOM classes to read and write XML documents. + + + + Location + + + + About SAX Bookmarks + + + + The <b>SAX Bookmarks</b> example demonstrates how to use Qt's SAX classes to read XML documents and how to generate XML by hand. + + + + QXmlStream Bookmarks + + + + Parse error in file %1: + +%2 + + + + About QXmlStream Bookmarks + + + + The <b>QXmlStream Bookmarks</b> example demonstrates how to use Qt's QXmlStream classes to read and write XML documents. + + + + Add new + + + + Cannot add new window + + + + Already occupied. Undock first. + + + + + MainWindowBase + + Font Sampler + + + + &Selection + + + + &File + + + + Available Fonts + + + + &Print... + + + + Ctrl+P + + + + E&xit + + + + Ctrl+Q + + + + &Mark + + + + Ctrl+M + + + + &Unmark + + + + Ctrl+U + + + + &Clear + + + + Print Preview... + + + + + MandelbrotWidget + + Mandelbrot + + + + Rendering initial image, please wait... + + + + Use mouse wheel or the '+' and '-' keys to zoom. Press and hold left mouse button to scroll. + + + + + MapZoom + + &Oslo + + + + &Berlin + + + + &Jakarta + + + + Night Mode + + + + About OpenStreetMap + + + + &Options + + + + Light Maps + + + + + MdiChild + + document%1.txt + + + + MDI + + + + Cannot read file %1: +%2. + + + + Save As + + + + Cannot write file %1: +%2. + + + + '%1' has been modified. +Do you want to save your changes? + + + + + MoviePlayer + + No movie loaded + + + + Movie Player + + + + Open a Movie + + + + Fit to Window + + + + Current frame: + + + + Speed: + + + + % + + + + Open File + + + + Play + + + + Pause + + + + Stop + + + + Quit + + + + + NewAddressTab + + There are currently no contacts in your address book. +Click Add to add new contacts. + + + + Add + + + + + NicknameDialog + + Set nickname + + + + New nickname: + + + + OK + + + + Cancel + + + + + Notepad + + Quit + + + + Notepad + + + + Do you really want to quit? + + + + &Load + + + + &Save + + + + E&xit + + + + &File + + + + Open File + + + + Text Files (*.txt);;C++ Files (*.cpp *.h) + + + + Error + + + + Could not open file + + + + Save File + + + + + OutputFilesPage + + Output Files + + + + Specify where you want the wizard to put the generated skeleton code. + + + + &Output directory: + + + + &Header file name: + + + + &Implementation file name: + + + + + PathDeformControls + + Controls + + + + Lens Radius + + + + Deformation + + + + Font Size + + + + Text + + + + Animated + + + + Show Source + + + + Use OpenGL + + + + What's This? + + + + Qt + + + + Lens Radius: + + + + Deformation: + + + + Font Size: + + + + Quit + + + + OK + + + + + PathDeformWidget + + Vector Deformation + + + + + PathStrokeControls + + Cap Style + + + + Flat + + + + Square + + + + Round + + + + Join Style + + + + Bevel + + + + Miter + + + + Pen Style + + + + Custom + + + + Line Style + + + + Curves + + + + Lines + + + + Path Stroking + + + + Pen Width + + + + Animate + + + + Show Source + + + + Use OpenGL + + + + What's This? + + + + OK + + + + Quit + + + + Width: + + + + + PathStrokeWidget + + Path Stroking + + + + + PermissionsTab + + Permissions + + + + Readable + + + + Writable + + + + Executable + + + + Ownership + + + + Owner + + + + Group + + + + + PluginDialog + + OK + + + + Plugin Information + + + + Plug & Paint found the following plugins +(looked in %1): + + + + %1 (Static Plugin) + + + + + PreviewForm + + &Encoding: + + + + Preview + + + + Hex Dump + + + + %1: conversion error at character %2 + + + + %1: %n invalid characters + + + + + + + %1: %n bytes converted + + + + + + + + PreviewWindow + + &Close + + + + Preview + + + + + ProgressDialog + + Download Progress + + + + Downloading %1. + + + + + QAbstractSocket + + Socket operation timed out + + + + Operation on socket is not supported + + + + Host not found + + + + Connection refused + + + + Connection timed out + + + + Trying to connect while connection is in progress + + + + Socket is not connected + + + + Network unreachable + + + + + QAbstractSpinBox + + &Select All + + + + &Step up + + + + Step &down + + + + + QAccessibleActionInterface + + Press + + + + Increase + + + + Decrease + + + + ShowMenu + + + + SetFocus + + + + Toggle + + + + Scroll Left + + + + Scroll Right + + + + Scroll Up + + + + Scroll Down + + + + Previous Page + + + + Next Page + + + + Triggers the action + + + + Increase the value + + + + Decrease the value + + + + Shows the menu + + + + Sets the focus + + + + Toggles the state + + + + Scrolls to the left + + + + Scrolls to the right + + + + Scrolls up + + + + Scrolls down + + + + Goes back a page + + + + Goes to the next page + + + + + QAndroidPlatformTheme + + Yes + + + + Yes to All + + + + No + + + + No to All + + + + + QApplication + + Executable '%1' requires Qt %2, found Qt %3. + + + + Incompatible Qt Library Error + + + + + QCocoaMenuItem + + About Qt + + + + About + + + + Config + + + + Preference + + + + Options + + + + Setting + + + + Setup + + + + Quit + + + + Exit + + + + Cut + + + + Copy + + + + Paste + + + + Select All + + + + + QCocoaTheme + + Don't Save + + + + + QColorDialog + + Hu&e: + + + + &Sat: + + + + &Val: + + + + &Red: + + + + &Green: + + + + Bl&ue: + + + + A&lpha channel: + + + + &HTML: + + + + Cursor at %1, %2 +Press ESC to cancel + + + + Select Color + Select Colour + + + &Basic colors + &Basic colours + + + &Custom colors + &Custom colours + + + &Add to Custom Colors + &Add to Custom Colours + + + &Pick Screen Color + &Pick Screen Colour + + + + QComboBox + + Open the combo box selection popup + + + + False + + + + True + + + + + QCommandLineParser + + Displays version information. + + + + Displays this help. + + + + Unknown option '%1'. + + + + Unknown options: %1. + + + + Missing value after '%1'. + + + + Unexpected value after '%1'. + + + + [options] + + + + Usage: %1 + + + + Options: + + + + Arguments: + + + + + QCoreApplication + + %1: key is empty + QSystemSemaphore + + + + %1: unable to make key + QSystemSemaphore + + + + %1: ftok failed + QSystemSemaphore + + + + + QCupsJobWidget + + Job + + + + Job Control + + + + Scheduled printing: + + + + Billing information: + + + + Job priority: + + + + Banner Pages + + + + End: + Banner page at end + + + + Start: + Banner page at start + + + + Print Immediately + + + + Hold Indefinitely + + + + Day (06:00 to 17:59) + + + + Night (18:00 to 05:59) + + + + Second Shift (16:00 to 23:59) + + + + Third Shift (00:00 to 07:59) + + + + Weekend (Saturday to Sunday) + + + + Specific Time + + + + None + CUPS Banner page + + + + Standard + CUPS Banner page + + + + Unclassified + CUPS Banner page + + + + Confidential + CUPS Banner page + + + + Classified + CUPS Banner page + + + + Secret + CUPS Banner page + + + + Top Secret + CUPS Banner page + + + + + QDB2Driver + + Unable to connect + + + + Unable to commit transaction + + + + Unable to rollback transaction + + + + Unable to set autocommit + + + + + QDB2Result + + Unable to execute statement + + + + Unable to prepare statement + + + + Unable to bind variable + + + + Unable to fetch record %1 + + + + Unable to fetch next + + + + Unable to fetch first + + + + + QDBusTrayIcon + + OK + + + + + QDateTimeParser + + AM + + + + am + + + + PM + + + + pm + + + + + QDialog + + What's This? + + + + + QDialogButtonBox + + OK + + + + + QDirModel + + Name + + + + Size + + + + Kind + Match OS X Finder + + + + Type + All other platforms + + + + Date Modified + + + + + QDnsLookup + + Operation cancelled + + + + + QDnsLookupExample + + DNS Lookup Example + + + + An example demonstrating the class QDnsLookup. + + + + + QDnsLookupRunnable + + IPv6 addresses for nameservers are currently not supported + + + + Invalid domain name + + + + Not yet supported on Android + + + + Resolver functions not found + + + + Resolver initialization failed + + + + Server could not process query + + + + Server failure + + + + Non existent domain + + + + Server refused to answer + + + + Invalid reply received + + + + Could not expand domain name + + + + Invalid IPv4 address record + + + + Invalid IPv6 address record + + + + Invalid canonical name record + + + + Invalid name server record + + + + Invalid pointer record + + + + Invalid mail exchange record + + + + Invalid service record + + + + Invalid text record + + + + Resolver library can't be loaded: No runtime library loading support + + + + No hostname given + + + + Invalid hostname + + + + Host %1 could not be found. + + + + Unknown error + + + + + QDockWidget + + Float + Accessible name for button undocking a dock widget (floating state) + + + + Undocks and re-attaches the dock widget + + + + Close + Accessible name for button closing a dock widget + + + + Closes the dock widget + + + + + QErrorMessage + + Debug Message: + + + + Warning: + + + + Fatal Error: + + + + &Show this message again + + + + &OK + + + + + QFile + + Destination file is the same file. + + + + Source file does not exist. + + + + Destination file exists + + + + Error while renaming. + + + + Unable to restore from %1: %2 + + + + Will not rename sequential file using block copy + + + + Cannot remove source file + + + + Cannot open %1 for input + + + + Cannot open for output + + + + Failure to write block + + + + Cannot create %1 for output + + + + + QFileDevice + + No file engine available or engine does not support UnMapExtension + + + + + QFileDialog + + Look in: + + + + Back + + + + Go back + + + + Alt+Left + + + + Forward + + + + Go forward + + + + Alt+Right + + + + Parent Directory + + + + Go to the parent directory + + + + Alt+Up + + + + Create New Folder + + + + Create a New Folder + + + + List View + + + + Change to list view mode + + + + Detail View + + + + Change to detail view mode + + + + Sidebar + + + + List of places and bookmarks + + + + Files + + + + Files of type: + + + + Find Directory + + + + Open + + + + Save As + + + + Directory: + + + + File &name: + + + + &Open + + + + &Choose + + + + &Save + + + + All Files (*) + + + + Show + + + + &Rename + + + + &Delete + + + + Show &hidden files + + + + &New Folder + + + + All files (*) + + + + Directories + + + + %1 +Directory not found. +Please verify the correct directory name was given. + + + + %1 already exists. +Do you want to replace it? + + + + %1 +File not found. +Please verify the correct file name was given. + + + + New Folder + + + + Delete + + + + '%1' is write protected. +Do you want to delete it anyway? + + + + Are you sure you want to delete '%1'? + + + + Could not delete directory. + + + + Recent Places + + + + Remove + + + + My Computer + + + + Drive + + + + %1 File + %1 is a file name suffix, for example txt + + + + File + + + + File Folder + Match Windows Explorer + + + + Folder + All other platforms + + + + Alias + OS X Finder + + + + Shortcut + All other platforms + + + + Unknown + + + + + QFileSystemModel + + %1 TB + + + + %1 GB + + + + %1 MB + + + + %1 KB + + + + %1 bytes + + + + Invalid filename + + + + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + + + + Name + + + + Size + + + + Kind + Match OS X Finder + + + + Type + All other platforms + + + + Date Modified + + + + My Computer + + + + Computer + + + + %1 byte(s) + + + + + QFontDatabase + + Normal + The Normal or Regular font weight + + + + Bold + + + + Demi Bold + + + + Medium + The Medium font weight + + + + Black + + + + Light + + + + Thin + + + + Extra Light + + + + Extra Bold + + + + Extra + The word for "Extra" as in "Extra Bold, Extra Thin" used as a pattern for string searches + + + + Demi + The word for "Demi" as in "Demi Bold" used as a pattern for string searches + + + + Italic + + + + Oblique + + + + Any + + + + Latin + + + + Greek + + + + Cyrillic + + + + Armenian + + + + Hebrew + + + + Arabic + + + + Syriac + + + + Thaana + + + + Devanagari + + + + Bengali + + + + Gurmukhi + + + + Gujarati + + + + Oriya + + + + Tamil + + + + Telugu + + + + Kannada + + + + Malayalam + + + + Sinhala + + + + Thai + + + + Lao + + + + Tibetan + + + + Myanmar + + + + Georgian + + + + Khmer + + + + Simplified Chinese + + + + Traditional Chinese + + + + Japanese + + + + Korean + + + + Vietnamese + + + + Symbol + + + + Ogham + + + + Runic + + + + N'Ko + + + + + QFontDialog + + Select Font + + + + &Font + + + + Font st&yle + + + + &Size + + + + Effects + + + + Stri&keout + + + + &Underline + + + + Sample + + + + Wr&iting System + + + + + QFtp + + Not connected + + + + Host %1 not found + + + + Connection refused to host %1 + + + + Connection timed out to host %1 + + + + Connected to host %1 + + + + Data Connection refused + + + + Unknown error + + + + Connecting to host failed: +%1 + + + + Login failed: +%1 + + + + Listing directory failed: +%1 + + + + Changing directory failed: +%1 + + + + Downloading file failed: +%1 + + + + Uploading file failed: +%1 + + + + Removing file failed: +%1 + + + + Creating directory failed: +%1 + + + + Removing directory failed: +%1 + + + + Connection closed + + + + + QGnomeTheme + + &OK + + + + &Save + + + + &Cancel + + + + &Close + + + + Close without Saving + + + + + QGuiApplication + + QT_LAYOUT_DIRECTION + Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout. + + + + + QHostInfo + + No host name given + + + + Unknown error + + + + + QHostInfoAgent + + No host name given + + + + Invalid hostname + + + + Unknown address type + + + + Host not found + + + + Unknown error + + + + Unknown error (%1) + + + + + QHttp + + Host %1 not found + + + + Connection refused + + + + Connection closed + + + + Proxy requires authentication + + + + Host requires authentication + + + + Data corrupted + + + + Unknown protocol specified + + + + SSL handshake failed + + + + Too many redirects + + + + Insecure redirect + + + + + QHttpSocketEngine + + Did not receive HTTP response from proxy + + + + Error parsing authentication request from proxy + + + + Authentication required + + + + Proxy denied connection + + + + Error communicating with HTTP proxy + + + + Proxy server not found + + + + Proxy connection refused + + + + Proxy server connection timed out + + + + Proxy connection closed prematurely + + + + + QIBaseDriver + + Error opening database + + + + Could not start transaction + + + + Unable to commit transaction + + + + Unable to rollback transaction + + + + + QIBaseResult + + Unable to create BLOB + + + + Unable to write BLOB + + + + Unable to open BLOB + + + + Unable to read BLOB + + + + Could not find array + + + + Could not get array data + + + + Could not get query info + + + + Could not start transaction + + + + Unable to commit transaction + + + + Could not allocate statement + + + + Could not prepare statement + + + + Could not describe input statement + + + + Could not describe statement + + + + Unable to close statement + + + + Unable to execute query + + + + Could not fetch next item + + + + Could not get statement info + + + + + QIODevice + + Permission denied + + + + Too many open files + + + + No such file or directory + + + + No space left on device + + + + file to open is a directory + + + + Unknown error + + + + + QImageReader + + Invalid device + + + + File not found + + + + Unsupported image format + + + + Unable to read image data + + + + Unknown error + + + + + QImageWriter + + Unknown error + + + + Device is not set + + + + Device not writable + + + + Unsupported image format + + + + + QInputDialog + + Enter a value: + + + + + QJsonParseError + + no error occurred + + + + unterminated object + + + + missing name separator + + + + unterminated array + + + + missing value separator + + + + illegal value + + + + invalid termination by number + + + + illegal number + + + + invalid escape sequence + + + + invalid UTF8 string + + + + unterminated string + + + + object is missing after a comma + + + + too deeply nested document + + + + too large document + + + + garbage at the end of the document + + + + + QKeySequenceEdit + + Press shortcut + + + + %1, ... + This text is an "unfinished" shortcut, expands like "Ctrl+A, ..." + + + + + QLibrary + + '%1' is not an ELF object (%2) + + + + '%1' is not an ELF object + + + + '%1' is an invalid ELF object (%2) + + + + Failed to extract plugin meta data from '%1' + + + + The shared library was not found. + + + + The file '%1' is not a valid Qt plugin. + + + + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + + + + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + + + + Unknown error + + + + Cannot load library %1: %2 + + + + Cannot unload library %1: %2 + + + + Cannot resolve symbol "%1" in %2: %3 + + + + '%1' is not a valid Mach-O binary (%2) + + + + file is corrupt + + + + file too small + + + + no suitable architecture in fat binary + + + + invalid magic %1 + + + + wrong architecture + + + + not a dynamic library + + + + '%1' is not a Qt plugin + + + + + QLineEdit + + &Undo + + + + &Redo + + + + Cu&t + + + + &Copy + + + + &Paste + + + + Delete + + + + Select All + + + + + QLocalServer + + %1: Name error + + + + %1: Permission denied + + + + %1: Address in use + + + + %1: Unknown error %2 + + + + + QLocalSocket + + %1: Connection refused + + + + %1: Remote closed + + + + %1: Invalid name + + + + %1: Socket access error + + + + %1: Socket resource error + + + + %1: Socket operation timed out + + + + %1: Datagram too large + + + + %1: Connection error + + + + %1: The socket operation is not supported + + + + %1: Operation not permitted when socket is in this state + + + + %1: Unknown error + + + + Trying to connect while connection is in progress + + + + %1: Unknown error %2 + + + + %1: Access denied + + + + + QMYSQLDriver + + Unable to allocate a MYSQL object + + + + Unable to open database '%1' + + + + Unable to connect + + + + Unable to begin transaction + + + + Unable to commit transaction + + + + Unable to rollback transaction + + + + + QMYSQLResult + + Unable to fetch data + + + + Unable to execute query + + + + Unable to store result + + + + Unable to execute next query + + + + Unable to store next result + + + + Unable to prepare statement + + + + Unable to reset statement + + + + Unable to bind value + + + + Unable to execute statement + + + + Unable to bind outvalues + + + + Unable to store statement results + + + + + QMdiArea + + (Untitled) + + + + + QMdiSubWindow + + - [%1] + + + + %1 - [%2] + + + + Minimize + + + + Maximize + + + + Unshade + + + + Shade + + + + Restore Down + + + + Restore + + + + Close + + + + Help + + + + Menu + + + + &Restore + + + + &Move + + + + &Size + + + + Mi&nimize + + + + Ma&ximize + + + + Stay on &Top + + + + &Close + + + + + QMessageBox + + Show Details... + + + + Hide Details... + + + + OK + + + + Help + + + + <h3>About Qt</h3><p>This program uses Qt version %1.</p> + + + + <p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across all major desktop operating systems. It is also available for embedded Linux and other embedded and mobile operating systems.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 3 or GNU LGPL version 2.1.</p><p>Qt licensed under the GNU LGPL version 3 is appropriate for the development of Qt&nbsp;applications provided you can comply with the terms and conditions of the GNU LGPL version 3.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt&nbsp;applications provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Please see <a href="http://%2/">%2</a> for an overview of Qt licensing.</p><p>Copyright (C) %1 The Qt Company Ltd and other contributors.</p><p>Qt and the Qt logo are trademarks of The Qt Company Ltd.</p><p>Qt is The Qt Company Ltd product developed as an open source project. See <a href="http://%3/">%3</a> for more information.</p> + + + + About Qt + + + + + QNativeSocketEngine + + Unable to initialize non-blocking socket + + + + Unable to initialize broadcast socket + + + + Attempt to use IPv6 socket on a platform with no IPv6 support + + + + The remote host closed the connection + + + + Network operation timed out + + + + Out of resources + + + + Unsupported socket operation + + + + Protocol type not supported + + + + Invalid socket descriptor + + + + Host unreachable + + + + Network unreachable + + + + Permission denied + + + + Connection timed out + + + + Connection refused + + + + The bound address is already in use + + + + The address is not available + + + + The address is protected + + + + Datagram was too large to send + + + + Unable to send a message + + + + Unable to receive a message + + + + Unable to write + + + + Network error + + + + Another socket is already listening on the same port + + + + Operation on non-socket + + + + The proxy type is invalid for this operation + + + + Temporary error + + + + Network dropped connection on reset + + + + Connection reset by peer + + + + Unknown error + + + + + QNetworkAccessCacheBackend + + Error opening %1 + + + + + QNetworkAccessDataBackend + + Invalid URI: %1 + + + + + QNetworkAccessDebugPipeBackend + + Write error writing to %1: %2 + + + + Socket error on %1: %2 + + + + Remote host closed the connection prematurely on %1 + + + + + QNetworkAccessFileBackend + + Request for opening non-local file %1 + + + + Error opening %1: %2 + + + + Write error writing to %1: %2 + + + + Cannot open %1: Path is a directory + + + + Read error reading from %1: %2 + + + + + QNetworkAccessFtpBackend + + No suitable proxy found + + + + Cannot open %1: is a directory + + + + Logging in to %1 failed: authentication required + + + + Error while downloading %1: %2 + + + + Error while uploading %1: %2 + + + + + QNetworkAccessManager + + Network access is disabled. + + + + + QNetworkReply + + Error transferring %1 - server replied: %2 + + + + Background request not allowed. + + + + Network session error. + + + + backend start error. + + + + Temporary network failure. + + + + Protocol "%1" is unknown + + + + + QNetworkReplyHttpImpl + + Operation canceled + + + + No suitable proxy found + + + + + QNetworkReplyImpl + + Operation canceled + + + + + QNetworkSession + + Invalid configuration. + + + + + QNetworkSessionPrivateImpl + + Unknown session error. + + + + The session was aborted by the user or system. + + + + The requested operation is not supported by the system. + + + + The specified configuration cannot be used. + + + + Roaming was aborted or is not possible. + + + + + QOCIDriver + + Unable to initialize + QOCIDriver + + + + Unable to logon + + + + Unable to begin transaction + + + + Unable to commit transaction + + + + Unable to rollback transaction + + + + + QOCIResult + + Unable to bind column for batch execute + + + + Unable to execute batch statement + + + + Unable to goto next + + + + Unable to alloc statement + + + + Unable to prepare statement + + + + Unable to get statement type + + + + Unable to bind value + + + + Unable to execute statement + + + + + QODBCDriver + + Unable to connect + + + + Unable to connect - Driver doesn't support all functionality required + + + + Unable to disable autocommit + + + + Unable to commit transaction + + + + Unable to rollback transaction + + + + Unable to enable autocommit + + + + + QODBCResult + + Unable to fetch last + + + + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + + + + Unable to execute statement + + + + Unable to fetch + + + + Unable to fetch next + + + + Unable to fetch first + + + + Unable to fetch previous + + + + Unable to prepare statement + + + + Unable to bind variable + + + + + QObject + + ID + + + + Name + + + + City + + + + Country + + + + Relational Table Model + + + + First name + + + + Last name + + + + Plain Query Model + + + + Editable Query Model + + + + Custom Query Model + + + + Table Model (View 1) + + + + Table Model (View 2) + + + + Qt SQL Browser + + + + &File + + + + Add &Connection... + + + + &Quit + + + + &Help + + + + About + + + + About Qt + + + + Systray + + + + I couldn't detect any system tray on this system. + + + + Simple Wizard + + + + Cannot write file %1: +%2 + + + + Draggable Icons + + + + Invalid enum. + + + + Invalid value. + + + + Invalid operation. + + + + Stack overflow. + + + + Stack underflow. + + + + Out of memory. + + + + Unknown error. + + + + Subject + + + + Sender + + + + Date + + + + Dir View + + + + Frozen Column Example + + + + Simple Tree Model + + + + Spin Box Delegate + + + + Add %1 + + + + Remove %1 + + + + Set %1's color + + + + Change %1's geometry + + + + Move %1 + + + + Delete %1 + + + + %1 at (%2, %3) + + + + Code Editor Example + + + + Folder + + + + The file is not an XBEL file. + + + + The file is not an XBEL version 1.0 file. + + + + Unknown title + + + + SAX Bookmarks + + + + Parse error at line %1, column %2: +%3 + + + + %1 +Line %2, column %3 + + + + + QPSQLDriver + + Unable to connect + + + + Could not begin transaction + + + + Could not commit transaction + + + + Could not rollback transaction + + + + Unable to subscribe + + + + Unable to unsubscribe + + + + + QPSQLResult + + Unable to create query + + + + Unable to prepare statement + + + + + QPageSetupWidget + + Form + + + + Paper + + + + Page size: + + + + Width: + + + + Height: + + + + Paper source: + + + + Orientation + + + + Portrait + + + + Landscape + + + + Reverse landscape + + + + Reverse portrait + + + + Margins + + + + top margin + + + + left margin + + + + right margin + + + + bottom margin + + + + Page Layout + + + + Page order: + + + + Pages per sheet: + + + + Millimeters (mm) + + + + Inches (in) + + + + Points (pt) + + + + Pica (P̸) + + + + Didot (DD) + + + + Cicero (CC) + + + + Custom + + + + mm + Unit 'Millimeter' + + + + pt + Unit 'Points' + + + + in + Unit 'Inch' + + + + P̸ + Unit 'Pica' + + + + DD + Unit 'Didot' + + + + CC + Unit 'Cicero' + + + + + QPageSize + + Custom (%1mm x %2mm) + Custom size name in millimeters + + + + Custom (%1pt x %2pt) + Custom size name in points + + + + Custom (%1in x %2in) + Custom size name in inches + + + + Custom (%1pc x %2pc) + Custom size name in picas + + + + Custom (%1DD x %2DD) + Custom size name in didots + + + + Custom (%1CC x %2CC) + Custom size name in ciceros + + + + %1 x %2 in + Page size in 'Inch'. + + + + A0 + + + + A1 + + + + A2 + + + + A3 + + + + A4 + + + + A5 + + + + A6 + + + + A7 + + + + A8 + + + + A9 + + + + A10 + + + + B0 + + + + B1 + + + + B2 + + + + B3 + + + + B4 + + + + B5 + + + + B6 + + + + B7 + + + + B8 + + + + B9 + + + + B10 + + + + Executive (7.5 x 10 in) + + + + Executive (7.25 x 10.5 in) + + + + Folio (8.27 x 13 in) + + + + Legal + + + + Letter / ANSI A + + + + Tabloid / ANSI B + + + + Ledger / ANSI B + + + + Custom + + + + A3 Extra + + + + A4 Extra + + + + A4 Plus + + + + A4 Small + + + + A5 Extra + + + + B5 Extra + + + + JIS B0 + + + + JIS B1 + + + + JIS B2 + + + + JIS B3 + + + + JIS B4 + + + + JIS B5 + + + + JIS B6 + + + + JIS B7 + + + + JIS B8 + + + + JIS B9 + + + + JIS B10 + + + + ANSI C + + + + ANSI D + + + + ANSI E + + + + Legal Extra + + + + Letter Extra + + + + Letter Plus + + + + Letter Small + + + + Tabloid Extra + + + + Architect A + + + + Architect B + + + + Architect C + + + + Architect D + + + + Architect E + + + + Note + + + + Quarto + + + + Statement + + + + Super A + + + + Super B + + + + Postcard + + + + Double Postcard + + + + PRC 16K + + + + PRC 32K + + + + PRC 32K Big + + + + Fan-fold US (14.875 x 11 in) + + + + Fan-fold German (8.5 x 12 in) + + + + Fan-fold German Legal (8.5 x 13 in) + + + + Envelope B4 + + + + Envelope B5 + + + + Envelope B6 + + + + Envelope C0 + + + + Envelope C1 + + + + Envelope C2 + + + + Envelope C3 + + + + Envelope C4 + + + + Envelope C5 + + + + Envelope C6 + + + + Envelope C65 + + + + Envelope C7 + + + + Envelope DL + + + + Envelope US 9 + + + + Envelope US 10 + + + + Envelope US 11 + + + + Envelope US 12 + + + + Envelope US 14 + + + + Envelope Monarch + + + + Envelope Personal + + + + Envelope Chou 3 + + + + Envelope Chou 4 + + + + Envelope Invite + + + + Envelope Italian + + + + Envelope Kaku 2 + + + + Envelope Kaku 3 + + + + Envelope PRC 1 + + + + Envelope PRC 2 + + + + Envelope PRC 3 + + + + Envelope PRC 4 + + + + Envelope PRC 5 + + + + Envelope PRC 6 + + + + Envelope PRC 7 + + + + Envelope PRC 8 + + + + Envelope PRC 9 + + + + Envelope PRC 10 + + + + Envelope You 4 + + + + + QPlatformTheme + + OK + + + + Save + + + + Save All + + + + Open + + + + &Yes + + + + Yes to &All + + + + &No + + + + N&o to All + + + + Abort + + + + Retry + + + + Ignore + + + + Close + + + + Cancel + + + + Discard + + + + Help + + + + Apply + + + + Reset + + + + Restore Defaults + + + + + QPluginLoader + + The plugin was not loaded. + + + + Unknown error + + + + + QPrintDialog + + Print + + + + Left to Right, Top to Bottom + + + + Left to Right, Bottom to Top + + + + Right to Left, Bottom to Top + + + + Right to Left, Top to Bottom + + + + Bottom to Top, Left to Right + + + + Bottom to Top, Right to Left + + + + Top to Bottom, Left to Right + + + + Top to Bottom, Right to Left + + + + 1 (1x1) + + + + 2 (2x1) + + + + 4 (2x2) + + + + 6 (2x3) + + + + 9 (3x3) + + + + 16 (4x4) + + + + All Pages + + + + Odd Pages + + + + Even Pages + + + + &Options >> + + + + &Print + + + + &Options << + + + + Print to File (PDF) + + + + Local file + + + + Write PDF file + + + + Print To File ... + + + + %1 is a directory. +Please choose a different file name. + + + + File %1 is not writable. +Please choose a different file name. + + + + %1 already exists. +Do you want to overwrite it? + + + + Options 'Pages Per Sheet' and 'Page Set' cannot be used together. +Please turn one of those options off. + + + + The 'From' value cannot be greater than the 'To' value. + + + + OK + + + + Automatic + + + + + QPrintPreviewDialog + + Page Setup + + + + %1% + + + + Print Preview + + + + Next page + + + + Previous page + + + + First page + + + + Last page + + + + Fit width + + + + Fit page + + + + Zoom in + + + + Zoom out + + + + Portrait + + + + Landscape + + + + Show single page + + + + Show facing pages + + + + Show overview of all pages + + + + Print + + + + Page setup + + + + Export to PDF + + + + + QPrintPropertiesDialog + + Printer Properties + + + + Job Options + + + + + QPrintPropertiesWidget + + Form + + + + Page + + + + + QPrintSettingsOutput + + Form + + + + Copies + + + + Print range + + + + Print all + + + + Pages from + + + + to + + + + Current Page + + + + Selection + + + + Page Set: + + + + Output Settings + + + + Copies: + + + + Collate + + + + Reverse + + + + Options + + + + Color Mode + + + + Color + + + + Grayscale + + + + Duplex Printing + + + + None + + + + Long side + + + + Short side + + + + + QPrintWidget + + Form + + + + Printer + + + + &Name: + + + + P&roperties + + + + Location: + + + + Preview + + + + Type: + + + + Output &file: + + + + ... + + + + + QProcess + + Process failed to start + + + + Process crashed + + + + Process operation timed out + + + + Error reading from process + + + + Error writing to process + + + + No program defined + + + + Could not open input redirection for reading + + + + Resource error (fork failure): %1 + + + + Could not open output redirection for writing + + + + Process failed to start: %1 + + + + + QProgressDialog + + Cancel + + + + + QPushButton + + Hello world! + + + + Hello %n world(s)! + + + + + + + It's a small world + + + + + QQnxFileDialogHelper + + All files (*.*) + + + + + QQnxFilePicker + + Pick a file + + + + + QRegExp + + no error occurred + + + + disabled feature used + + + + bad char class syntax + + + + bad lookahead syntax + + + + lookbehinds not supported, see QTBUG-2371 + + + + bad repetition syntax + + + + invalid octal value + + + + missing left delim + + + + unexpected end + + + + met internal limit + + + + invalid interval + + + + invalid category + + + + + QRegularExpression + + no error + + + + \ at end of pattern + + + + \c at end of pattern + + + + unrecognized character follows \ + + + + numbers out of order in {} quantifier + + + + number too big in {} quantifier + + + + missing terminating ] for character class + + + + invalid escape sequence in character class + + + + range out of order in character class + + + + nothing to repeat + + + + internal error: unexpected repeat + + + + unrecognized character after (? or (?- + + + + POSIX named classes are supported only within a class + + + + missing ) + + + + reference to non-existent subpattern + + + + erroffset passed as NULL + + + + unknown option bit(s) set + + + + missing ) after comment + + + + regular expression is too large + + + + failed to get memory + + + + unmatched parentheses + + + + internal error: code overflow + + + + unrecognized character after (?< + + + + lookbehind assertion is not fixed length + + + + malformed number or name after (?( + + + + conditional group contains more than two branches + + + + assertion expected after (?( + + + + (?R or (?[+-]digits must be followed by ) + + + + unknown POSIX class name + + + + POSIX collating elements are not supported + + + + this version of PCRE is not compiled with PCRE_UTF8 support + + + + character value in \x{...} sequence is too large + + + + invalid condition (?(0) + + + + \C not allowed in lookbehind assertion + + + + PCRE does not support \L, \l, \N{name}, \U, or \u + + + + number after (?C is > 255 + + + + closing ) for (?C expected + + + + recursive call could loop indefinitely + + + + unrecognized character after (?P + + + + syntax error in subpattern name (missing terminator) + + + + two named subpatterns have the same name + + + + invalid UTF-8 string + + + + support for \P, \p, and \X has not been compiled + + + + malformed \P or \p sequence + + + + unknown property name after \P or \p + + + + subpattern name is too long (maximum 32 characters) + + + + too many named subpatterns (maximum 10000) + + + + octal value is greater than \377 (not in UTF-8 mode) + + + + internal error: overran compiling workspace + + + + internal error: previously-checked referenced subpattern not found + + + + DEFINE group contains more than one branch + + + + repeating a DEFINE group is not allowed + + + + inconsistent NEWLINE options + + + + \g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number + + + + a numbered reference must not be zero + + + + an argument is not allowed for (*ACCEPT), (*FAIL), or (*COMMIT) + + + + (*VERB) not recognized + + + + number is too big + + + + subpattern name expected + + + + digit expected after (?+ + + + + ] is an invalid data character in JavaScript compatibility mode + + + + different names for subpatterns of the same number are not allowed + + + + (*MARK) must have an argument + + + + this version of PCRE is not compiled with PCRE_UCP support + + + + \c must be followed by an ASCII character + + + + \k is not followed by a braced, angle-bracketed, or quoted name + + + + internal error: unknown opcode in find_fixedlength() + + + + \N is not supported in a class + + + + too many forward references + + + + disallowed Unicode code point (>= 0xd800 && <= 0xdfff) + + + + invalid UTF-16 string + + + + name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN) + + + + character value in \u.... sequence is too large + + + + invalid UTF-32 string + + + + setting UTF is disabled by the application + + + + non-hex character in \x{} (closing brace missing?) + + + + non-octal character in \o{} (closing brace missing?) + + + + missing opening brace after \o + + + + parentheses are too deeply nested + + + + invalid range in character class + + + + group name must start with a non-digit + + + + parentheses are too deeply nested (stack check) + + + + digits missing in \x{} or \o{} + + + + + QSQLite2Driver + + Error opening database + + + + Unable to begin transaction + + + + Unable to commit transaction + + + + Unable to rollback transaction + + + + + QSQLite2Result + + Unable to fetch results + + + + Unable to execute statement + + + + + QSQLiteDriver + + Error opening database + + + + Error closing database + + + + Unable to begin transaction + + + + Unable to commit transaction + + + + Unable to rollback transaction + + + + + QSQLiteResult + + Unable to fetch row + + + + No query + + + + Unable to execute statement + + + + Unable to execute multiple statements at a time + + + + Unable to reset statement + + + + Unable to bind parameters + + + + Parameter count mismatch + + + + + QSaveFile + + Existing file %1 is not writable + + + + Filename refers to a directory + + + + Writing canceled by application + + + + + QScrollBar + + Scroll here + + + + Left edge + + + + Top + + + + Right edge + + + + Bottom + + + + Page left + + + + Page up + + + + Page right + + + + Page down + + + + Scroll left + + + + Scroll up + + + + Scroll right + + + + Scroll down + + + + + QSharedMemory + + %1: unable to set key on lock + + + + %1: create size is less then 0 + + + + %1: unable to lock + + + + %1: unable to unlock + + + + %1: key is empty + + + + %1: bad name + + + + %1: UNIX key file doesn't exist + + + + %1: ftok failed + + + + %1: unable to make key + + + + %1: system-imposed size restrictions + + + + %1: not attached + + + + %1: permission denied + + + + %1: already exists + + + + %1: doesn't exist + + + + %1: out of resources + + + + %1: unknown error %2 + + + + %1: invalid size + + + + %1: key error + + + + %1: size query failed + + + + + QShortcut + + Space + This and all following "incomprehensible" strings in QShortcut context are key names. Please use the localized names appearing on actual keyboards or whatever is commonly used. + + + + Esc + + + + Tab + + + + Backtab + + + + Backspace + + + + Return + + + + Enter + + + + Ins + + + + Del + + + + Pause + + + + Print + + + + SysReq + + + + Home + + + + End + + + + Left + + + + Up + + + + Right + + + + Down + + + + PgUp + + + + PgDown + + + + CapsLock + + + + NumLock + + + + ScrollLock + + + + Menu + + + + Help + + + + Back + + + + Forward + + + + Stop + + + + Refresh + + + + Volume Down + + + + Volume Mute + + + + Volume Up + + + + Bass Boost + + + + Bass Up + + + + Bass Down + + + + Treble Up + + + + Treble Down + + + + Media Play + + + + Media Stop + + + + Media Previous + + + + Media Next + + + + Media Record + + + + Media Pause + Media player pause button + + + + Toggle Media Play/Pause + Media player button to toggle between playing and paused + + + + Home Page + + + + Favorites + + + + Search + + + + Standby + + + + Open URL + + + + Launch Mail + + + + Launch Media + + + + Launch (0) + + + + Launch (1) + + + + Launch (2) + + + + Launch (3) + + + + Launch (4) + + + + Launch (5) + + + + Launch (6) + + + + Launch (7) + + + + Launch (8) + + + + Launch (9) + + + + Launch (A) + + + + Launch (B) + + + + Launch (C) + + + + Launch (D) + + + + Launch (E) + + + + Launch (F) + + + + Monitor Brightness Up + + + + Monitor Brightness Down + + + + Keyboard Light On/Off + + + + Keyboard Brightness Up + + + + Keyboard Brightness Down + + + + Power Off + + + + Wake Up + + + + Eject + + + + Screensaver + + + + WWW + + + + Sleep + + + + LightBulb + + + + Shop + + + + History + + + + Add Favorite + + + + Hot Links + + + + Adjust Brightness + + + + Finance + + + + Community + + + + Media Rewind + + + + Back Forward + + + + Application Left + + + + Application Right + + + + Book + + + + CD + + + + Calculator + + + + Clear + + + + Clear Grab + + + + Close + + + + Copy + + + + Cut + + + + Display + + + + DOS + + + + Documents + + + + Spreadsheet + + + + Browser + + + + Game + + + + Go + + + + iTouch + + + + Logoff + + + + Market + + + + Meeting + + + + Keyboard Menu + + + + Menu PB + + + + My Sites + + + + News + + + + Home Office + + + + Option + + + + Paste + + + + Phone + + + + Reply + + + + Reload + + + + Rotate Windows + + + + Rotation PB + + + + Rotation KB + + + + Save + + + + Send + + + + Spellchecker + + + + Split Screen + + + + Support + + + + Task Panel + + + + Terminal + + + + Tools + + + + Travel + + + + Video + + + + Word Processor + + + + XFer + + + + Zoom In + + + + Zoom Out + + + + Away + + + + Messenger + + + + WebCam + + + + Mail Forward + + + + Pictures + + + + Music + + + + Battery + + + + Bluetooth + + + + Wireless + + + + Ultra Wide Band + + + + Media Fast Forward + + + + Audio Repeat + + + + Audio Random Play + + + + Subtitle + + + + Audio Cycle Track + + + + Time + + + + Hibernate + + + + View + + + + Top Menu + + + + Power Down + + + + Suspend + + + + Microphone Mute + + + + Red + + + + Green + + + + Yellow + + + + Blue + + + + Channel Up + + + + Channel Down + + + + Guide + + + + Info + + + + Settings + + + + Microphone Volume Up + + + + Microphone Volume Down + + + + New + + + + Open + + + + Find + + + + Undo + + + + Redo + + + + Print Screen + + + + Page Up + + + + Page Down + + + + Caps Lock + + + + Num Lock + + + + Number Lock + + + + Scroll Lock + + + + Insert + + + + Delete + + + + Escape + + + + System Request + + + + Select + + + + Yes + + + + No + + + + Context1 + + + + Context2 + + + + Context3 + + + + Context4 + + + + Call + Button to start a call (note: a separate button is used to end the call) + + + + Hangup + Button to end a call (note: a separate button is used to start the call) + + + + Toggle Call/Hangup + Button that will hang up if we're in call, or make a call if we're not. + + + + Flip + + + + Voice Dial + Button to trigger voice dialing + + + + Last Number Redial + Button to redial the last number called + + + + Camera Shutter + Button to trigger the camera shutter (take a picture) + + + + Camera Focus + Button to focus the camera + + + + Kanji + + + + Muhenkan + + + + Henkan + + + + Romaji + + + + Hiragana + + + + Katakana + + + + Hiragana Katakana + + + + Zenkaku + + + + Hankaku + + + + Zenkaku Hankaku + + + + Touroku + + + + Massyo + + + + Kana Lock + + + + Kana Shift + + + + Eisu Shift + + + + Eisu toggle + + + + Code input + + + + Multiple Candidate + + + + Previous Candidate + + + + Hangul + + + + Hangul Start + + + + Hangul End + + + + Hangul Hanja + + + + Hangul Jamo + + + + Hangul Romaja + + + + Hangul Jeonja + + + + Hangul Banja + + + + Hangul PreHanja + + + + Hangul PostHanja + + + + Hangul Special + + + + Cancel + + + + Printer + + + + Execute + + + + Play + + + + Zoom + + + + Exit + + + + Touchpad Toggle + + + + Touchpad On + + + + Touchpad Off + + + + Ctrl + + + + Shift + + + + Alt + + + + Meta + + + + Num + + + + + + + + + F%1 + + + + + QSocks5SocketEngine + + Connection to proxy refused + + + + Connection to proxy closed prematurely + + + + Proxy host not found + + + + Connection to proxy timed out + + + + Proxy authentication failed + + + + Proxy authentication failed: %1 + + + + SOCKS version 5 protocol error + + + + General SOCKSv5 server failure + + + + Connection not allowed by SOCKSv5 server + + + + TTL expired + + + + SOCKSv5 command not supported + + + + Address type not supported + + + + Unknown SOCKSv5 proxy error code 0x%1 + + + + Network operation timed out + + + + + QSpiAccessibleBridge + + invalid role + Role of an accessible object - the object is in an invalid state or could not be constructed + + + + title bar + Role of an accessible object + + + + menu bar + Role of an accessible object + + + + scroll bar + Role of an accessible object + + + + grip + Role of an accessible object - the grip is usually used for resizing another object + + + + sound + Role of an accessible object + + + + cursor + Role of an accessible object + + + + text caret + Role of an accessible object + + + + alert message + Role of an accessible object + + + + frame + Role of an accessible object: a window with frame and title +---------- +Role of an accessible object + + + + filler + Role of an accessible object + + + + popup menu + Role of an accessible object + + + + menu item + Role of an accessible object + + + + tool tip + Role of an accessible object + + + + application + Role of an accessible object + + + + document + Role of an accessible object + + + + panel + Role of an accessible object + + + + chart + Role of an accessible object + + + + dialog + Role of an accessible object + + + + separator + Role of an accessible object + + + + tool bar + Role of an accessible object + + + + status bar + Role of an accessible object + + + + table + Role of an accessible object + + + + column header + Role of an accessible object - part of a table + + + + row header + Role of an accessible object - part of a table + + + + column + Role of an accessible object - part of a table + + + + row + Role of an accessible object - part of a table + + + + cell + Role of an accessible object - part of a table + + + + link + Role of an accessible object + + + + help balloon + Role of an accessible object + + + + assistant + Role of an accessible object - a helper dialog + + + + list + Role of an accessible object + + + + list item + Role of an accessible object + + + + tree + Role of an accessible object + + + + tree item + Role of an accessible object + + + + page tab + Role of an accessible object + + + + property page + Role of an accessible object + + + + indicator + Role of an accessible object + + + + graphic + Role of an accessible object + + + + label + Role of an accessible object + + + + text + Role of an accessible object + + + + push button + Role of an accessible object + + + + check box + Role of an accessible object + + + + radio button + Role of an accessible object + + + + combo box + Role of an accessible object + + + + progress bar + Role of an accessible object + + + + dial + Role of an accessible object + + + + hotkey field + Role of an accessible object + + + + slider + Role of an accessible object + + + + spin box + Role of an accessible object + + + + canvas + Role of an accessible object + + + + animation + Role of an accessible object + + + + equation + Role of an accessible object + + + + button with drop down + Role of an accessible object + + + + button menu + Role of an accessible object + + + + button with drop down grid + Role of an accessible object - a button that expands a grid. + + + + space + Role of an accessible object - blank space between other objects. + + + + page tab list + Role of an accessible object + + + + clock + Role of an accessible object + + + + splitter + Role of an accessible object + + + + layered pane + Role of an accessible object + + + + web document + Role of an accessible object + + + + paragraph + Role of an accessible object + + + + section + Role of an accessible object + + + + color chooser + Role of an accessible object + + + + footer + Role of an accessible object + + + + form + Role of an accessible object + + + + heading + Role of an accessible object + + + + note + Role of an accessible object + + + + complementary content + Role of an accessible object + + + + unknown + Role of an accessible object + + + + + QSqlConnectionDialog + + No database driver selected + + + + Please select a database driver + + + + + QSqlConnectionDialogUi + + Connect... + + + + Connection settings + + + + &Username: + + + + D&river + + + + Default + + + + Database Name: + + + + &Hostname: + + + + P&ort: + + + + &Password: + + + + Us&e predefined in-memory database + + + + &OK + + + + &Cancel + + + + + QSslSocket + + Error when setting the elliptic curves (%1) + + + + Error creating SSL context (%1) + + + + unsupported protocol + + + + Invalid or empty cipher list (%1) + + + + Cannot provide a certificate with no key, %1 + + + + Error loading local certificate, %1 + + + + Error loading private key, %1 + + + + Private key does not certify public key, %1 + + + + OpenSSL version too old, need at least v1.0.2 + + + + No error + + + + The issuer certificate could not be found + + + + The certificate signature could not be decrypted + + + + The public key in the certificate could not be read + + + + The signature of the certificate is invalid + + + + The certificate is not yet valid + + + + The certificate has expired + + + + The certificate's notBefore field contains an invalid time + + + + The certificate's notAfter field contains an invalid time + + + + The certificate is self-signed, and untrusted + + + + The root certificate of the certificate chain is self-signed, and untrusted + + + + The issuer certificate of a locally looked up certificate could not be found + + + + No certificates could be verified + + + + One of the CA certificates is invalid + + + + The basicConstraints path length parameter has been exceeded + + + + The supplied certificate is unsuitable for this purpose + + + + The root CA certificate is not trusted for this purpose + + + + The root CA certificate is marked to reject the specified purpose + + + + The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate + + + + The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate + + + + The peer did not present any certificate + + + + The host name did not match any of the valid hosts for this certificate + + + + The peer certificate is blacklisted + + + + Unknown error + + + + The TLS/SSL connection has been closed + + + + Error creating SSL session, %1 + + + + Error creating SSL session: %1 + + + + Unable to init SSL Context: %1 + + + + Unable to write data: %1 + + + + Unable to decrypt data: %1 + + + + Error while reading: %1 + + + + Error during SSL handshake: %1 + + + + + QStandardPaths + + Desktop + + + + Documents + + + + Fonts + + + + Applications + + + + Music + + + + Movies + + + + Pictures + + + + Temporary Directory + + + + Home + + + + Cache + + + + Shared Data + + + + Runtime + + + + Configuration + + + + Shared Configuration + + + + Shared Cache + + + + Download + + + + Application Data + + + + Application Configuration + + + + + QStateMachine + + Missing initial state in compound state '%1' + + + + Missing default state in history state '%1' + + + + No common ancestor for targets and source of transition from state '%1' + + + + Unknown error + + + + + QSystemSemaphore + + %1: permission denied + + + + %1: already exists + + + + %1: does not exist + + + + %1: out of resources + + + + %1: unknown error %2 + + + + + QTDSDriver + + Unable to open connection + + + + Unable to use database + + + + + QTabBar + + Scroll Left + + + + Scroll Right + + + + + QTcpServer + + Operation on socket is not supported + + + + + QUndoGroup + + Undo %1 + + + + Undo + Default text for undo action + + + + Redo %1 + + + + Redo + Default text for redo action + + + + + QUndoModel + + <empty> + + + + + QUndoStack + + Undo %1 + + + + Undo + Default text for undo action + + + + Redo %1 + + + + Redo + Default text for redo action + + + + + QUnicodeControlCharacterMenu + + LRM Left-to-right mark + + + + RLM Right-to-left mark + + + + ZWJ Zero width joiner + + + + ZWNJ Zero width non-joiner + + + + ZWSP Zero width space + + + + LRE Start of left-to-right embedding + + + + RLE Start of right-to-left embedding + + + + LRO Start of left-to-right override + + + + RLO Start of right-to-left override + + + + PDF Pop directional formatting + + + + LRI Left-to-right isolate + + + + RLI Right-to-left isolate + + + + FSI First strong isolate + + + + PDI Pop directional isolate + + + + Insert Unicode control character + + + + + QWhatsThisAction + + What's This? + + + + + QWidget + + * + + + + + QWidgetTextControl + + &Undo + + + + &Redo + + + + Cu&t + + + + &Copy + + + + Copy &Link Location + + + + &Paste + + + + Delete + + + + Select All + + + + + QWindowsDirect2DIntegration + + Qt cannot load the direct2d platform plugin because the Direct2D version on this system is too old. The minimum system requirement for this platform plugin is Windows 7 SP1 with Platform Update. + +The minimum Direct2D version required is %1.%2.%3.%4. The Direct2D version on this system is %5.%6.%7.%8. + + + + Cannot load direct2d platform plugin + + + + + QWizard + + Go Back + + + + < &Back + + + + Continue + + + + &Next + + + + &Next > + + + + Commit + + + + Done + + + + &Finish + + + + Cancel + + + + Help + + + + &Help + + + + + QXml + + no error occurred + + + + error triggered by consumer + + + + unexpected end of file + + + + more than one document type definition + + + + error occurred while parsing element + + + + tag mismatch + + + + error occurred while parsing content + + + + unexpected character + + + + invalid name for processing instruction + + + + version expected while reading the XML declaration + + + + wrong value for standalone declaration + + + + encoding declaration or standalone declaration expected while reading the XML declaration + + + + standalone declaration expected while reading the XML declaration + + + + error occurred while parsing document type definition + + + + letter is expected + + + + error occurred while parsing comment + + + + error occurred while parsing reference + + + + internal general entity reference not allowed in DTD + + + + external parsed general entity reference not allowed in attribute value + + + + external parsed general entity reference not allowed in DTD + + + + unparsed entity reference in wrong context + + + + recursive entities + + + + error in the text declaration of an external entity + + + + + QXmlStream + + Extra content at end of document. + + + + Invalid entity value. + + + + Invalid XML character. + + + + Sequence ']]>' not allowed in content. + + + + Encountered incorrectly encoded content. + + + + Namespace prefix '%1' not declared + + + + Illegal namespace declaration. + + + + Attribute '%1' redefined. + + + + Unexpected character '%1' in public id literal. + + + + Invalid XML version string. + + + + Unsupported XML version. + + + + The standalone pseudo attribute must appear after the encoding. + + + + %1 is an invalid encoding name. + + + + Encoding %1 is unsupported + + + + Standalone accepts only yes or no. + + + + Invalid attribute in XML declaration. + + + + Premature end of document. + + + + Invalid document. + + + + Expected + + + + , but got ' + + + + Unexpected ' + + + + Expected character data. + + + + Recursive entity detected. + + + + Start tag expected. + + + + NDATA in parameter entity declaration. + + + + XML declaration not at start of document. + + + + %1 is an invalid processing instruction name. + + + + Invalid processing instruction name. + + + + %1 is an invalid PUBLIC identifier. + + + + Invalid XML name. + + + + Opening and ending tag mismatch. + + + + Entity '%1' not declared. + + + + Reference to unparsed entity '%1'. + + + + Reference to external entity '%1' in attribute value. + + + + Invalid character reference. + + + + + QueryPage + + Look for packages + + + + Name: + + + + Released after: + + + + Releases + + + + Upgrades + + + + Return up to + + + + results + + + + Return only the first result + + + + Start query + + + + + RSSListing + + Fetch + + + + Title + + + + Link + + + + RSS listing example + + + + + Receiver + + Listening for broadcasted messages + + + + &Quit + + + + Broadcast Receiver + + + + Received datagram: "%1" + + + + Listening for multicasted messages + + + + Multicast Receiver + + + + + RegExpDialog + + &Pattern: + + + + &Escaped Pattern: + + + + Regular expression v1 + + + + Regular expression v2 + + + + Wildcard + + + + Fixed string + + + + W3C Xml Schema 1.1 + + + + &Pattern Syntax: + + + + &Text: + + + + Case &Sensitive + + + + &Minimal + + + + Index of Match: + + + + Matched Length: + + + + Capture %1: + + + + Match: + + + + [A-Za-z_]+([A-Za-z_0-9]*) + + + + (10 + delta4) * 32 + + + + RegExp + + + + + RegisterPage + + Register Your Copy of <i>Super Product One</i>&trade; + + + + If you have an upgrade key, please fill in the appropriate field. + + + + N&ame: + + + + &Upgrade key: + + + + + RegularExpressionDialog + + QRegularExpression Example + + + + (\+?\d+)-(?<prefix>\d+)-(?<number>\w+) + + + + My office number is +43-152-0123456, my mobile is 001-41-255512 instead. + + + + Valid + + + + <no name> + + + + Invalid: syntax error at position %1 (%2) + + + + <h3>Regular expression and text input</h3> + + + + &Pattern: + + + + Copy to clipboard + + + + &Escaped pattern: + + + + &Subject text: + + + + Case insensitive (/i) + + + + Dot matches everything (/s) + + + + Multiline (/m) + + + + Extended pattern (/x) + + + + Inverted greediness + + + + Don't capture + + + + Use unicode properties (/u) + + + + Optimize on first usage + + + + Don't automatically optimize + + + + Pattern options: + + + + Match &offset: + + + + Normal + + + + Partial prefer complete + + + + Partial prefer first + + + + No match + + + + Match &type: + + + + Don't check subject string + + + + Anchored match + + + + Match options: + + + + <h3>Match information</h3> + + + + Match index + + + + Group index + + + + Captured string + + + + Match details: + + + + <h3>Regular expression information</h3> + + + + Pattern status: + + + + Index + + + + Named group + + + + Named groups: + + + + + RenderArea + + Qt by +The Qt Company + + + + x + + + + y + + + + + RenderOptionsDialog + + Options (double click to flip) + + + + Dynamic cube map + + + + Texture: + + + + Shader: + + + + + RenderWindow + + makeCurrent() failed + + + + + Screenshot + + Options + + + + s + + + + Hide This Window + + + + Screenshot Delay: + + + + New Screenshot + + + + Save Screenshot + + + + Quit + + + + Screenshot + + + + /untitled. + + + + Save As + + + + Save Error + + + + The image could not be saved to "%1". + + + + + Sender + + Ready to broadcast datagrams on port 45454 + + + + &Start + + + + &Quit + + + + Broadcast Sender + + + + Now broadcasting datagram %1 + + + + Ready to multicast datagrams to group %1 on port 45454 + + + + TTL for multicast datagrams: + + + + Multicast Sender + + + + Now sending datagram %1 + + + + + Server + + Quit + + + + Fortune Server + + + + Unable to start the server: %1. + + + + The server is running. +Run the Fortune Client example now. + + + + You've been leading a dog's life. Stay off the furniture. + + + + You've got to think about tomorrow. + + + + You will be surprised by a loud noise. + + + + You will feel hungry again in another hour. + + + + You might have mail. + + + + You cannot kill time without injuring eternity. + + + + Computers are not intelligent. They only think they are. + + + + Opening network session. + + + + The server is running on + +IP: %1 +port: %2 + +Run the Fortune Client example now. + + + + + SessionWidget + + Session Details + + + + Session ID: + + + + Session State: + + + + Invalid + + + + Configuration: + + + + Bearer: + + + + Interface Name: + + + + Interface GUID: + + + + Last Error: + + + + Error String: + + + + 0 + + + + Active Time: + + + + 0 seconds + + + + Open + + + + Blocking Open + + + + Close + + + + Stop + + + + %1 (%2) + + + + Not Available + + + + Connecting + + + + Connected + + + + Closing + + + + Disconnected + + + + Roaming + + + + Unknown + + + + Closed + + + + + SettingsTree + + Setting + + + + Type + + + + Value + + + + + ShapedClock + + E&xit + + + + Ctrl+Q + + + + Drag the clock with the left mouse button. +Use the right mouse button to open a context menu. + + + + Shaped Analog Clock + + + + + SortingBox + + New Circle + + + + New Square + + + + New Triangle + + + + Tool Tips + + + + Circle + + + + Square + + + + Triangle + + + + Circle <%1> + + + + Square <%1> + + + + Triangle <%1> + + + + + SplashItem + + Welcome to the Pad Navigator Example. You can use the keyboard arrows to navigate the icons, and press enter to activate an item. Press any key to begin. + + + + + SpreadSheet + + Spreadsheet + + + + Sum + + + + &Add + + + + &Subtract + + + + &Multiply + + + + &Divide + + + + Font... + + + + Background &Color... + + + + Clear + + + + About Spreadsheet + + + + E&xit + + + + &Print + + + + &File + + + + &Cell + + + + &Help + + + + Cell: (%1) + + + + Cancel + + + + OK + + + + Sum cells + + + + First cell: + + + + Last cell: + + + + Output to: + + + + sum %1 %2 + + + + Cell 1 + + + + Cell 2 + + + + %1 %2 %3 + + + + Addition + + + + Subtraction + + + + Multiplication + + + + Division + + + + + SslClient + + &lt;not connected&gt; + + + + <none> + + + + Display encryption details. + + + + Connection error + + + + + SslErrors + + Unable To Validate The Connection + + + + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#ff0000;">Warning</span><span style=" color:#ff0000;">:</span><span style=" color:#000000;"> One or more errors with this connection prevent validating the authenticity of the host you are connecting to. Please review the following list of errors, and click </span><span style=" color:#000000;">Ignore</span><span style=" color:#000000;"> to continue, or </span><span style=" color:#000000;">Cancel</span><span style=" color:#000000;"> to abort the connection.</span></p></body></html> + + + + View Certificate Chain + + + + Ignore + + + + Cancel + + + + + StorageModel + + 0 b + + + + %1 %2 + this should expand to "1.23 GB" + + + + Root path : %1 +Name: %2 +Display Name: %3 +Device: %4 +FileSystem: %5 +Total size: %6 +Free size: %7 +Available size: %8 +Is Ready: %9 +Is Read-only: %10 +Is Valid: %11 +Is Root: %12 + + + + true + + + + false + + + + Root path + + + + Volume Name + + + + Device + + + + File system + + + + Total + + + + Free + + + + Available + + + + Ready + + + + Read-only + + + + Valid + + + + + StyleSheetEditor + + Style Editor + + + + Default + + + + Coffee + + + + Pagefold + + + + Style: + + + + &Apply + + + + Style Sheet: + + + + + StyleWidget + + Form + + + + Styles + + + + Transp. + + + + Blue + + + + Khaki + + + + None + + + + Value: + + + + Show + + + + Enable + + + + Close + + + + + StyleWindow + + Big Red Button + + + + A simple style button + + + + Style Plugin Example + + + + + TabDialog + + General + + + + Permissions + + + + Applications + + + + Tab Dialog + + + + + TableEditor + + ID + + + + First name + + + + Last name + + + + Submit + + + + &Revert + + + + Quit + + + + Cached Table + + + + The database reported an error: %1 + + + + + TableModel + + Name + + + + Address + + + + + TabletCanvas + + This input device is not supported by the example. + + + + Unknown tablet device - treating as stylus + + + + + TestWidget + + But soft, what light through yonder window breaks? / It is the east, and Juliet is the sun. / Arise, fair sun, and kill the envious moon, / Who is already sick and pale with grief / That thou, her maid, art far more fair than she. + + + + To-morrow, and to-morrow, and to-morrow, / Creeps in this petty pace from day to day, / To the last syllable of recorded time; / And all our yesterdays have lighted fools / The way to dusty death. Out, out, brief candle! / Life's but a walking shadow, a poor player, / That struts and frets his hour upon the stage, / And then is heard no more. It is a tale / Told by an idiot, full of sound and fury, / Signifying nothing. + + + + Feeling lucky, punk? + + + + Switch text + + + + Exit + + + + Elided + + + + + TetrixBoard + + Pause + + + + + TetrixWindow + + &Start + + + + &Quit + + + + &Pause + + + + NEXT + + + + LEVEL + + + + SCORE + + + + LINES REMOVED + + + + Tetrix + + + + + TextEdit + + Help + + + + About + + + + About &Qt + + + + File Actions + + + + &File + + + + &New + + + + &Open... + + + + &Save + + + + Save &As... + + + + &Print... + + + + Print Preview... + + + + &Export PDF... + + + + &Quit + + + + Edit Actions + + + + &Edit + + + + &Undo + + + + &Redo + + + + Cu&t + + + + &Copy + + + + &Paste + + + + Format Actions + + + + F&ormat + + + + &Bold + + + + &Italic + + + + &Underline + + + + &Left + + + + C&enter + + + + &Right + + + + &Justify + + + + &Color... + + + + The document has been modified. +Do you want to save your changes? + + + + %1[*] - %2 + + + + Open File... + + + + Opened "%1" + + + + Could not open "%1" + + + + Wrote "%1" + + + + Could not write to file "%1" + + + + Save as... + + + + Print Document + + + + Export PDF + + + + Exported "%1" + + + + This example demonstrates Qt's rich text editing facilities in action, providing an example document for you to experiment with. + + + + This TextEdit provides autocompletions for words that have more than 3 characters. You can trigger autocompletion using + + + + + ToolBar + + Order Items in Tool Bar + + + + Randomize Items in Tool Bar + + + + Add Spin Box + + + + Remove Spin Box + + + + Movable + + + + Allow on Left + + + + Allow on Right + + + + Allow on Top + + + + Allow on Bottom + + + + Place on Left + + + + Place on Right + + + + Place on Top + + + + Place on Bottom + + + + Insert break + + + + + UpdatePage + + Package selection + + + + Update system + + + + Update applications + + + + Update documentation + + + + Existing packages + + + + Qt + + + + QSA + + + + Teambuilder + + + + Start update + + + + + ValidatorsForm + + Validators + + + + QIntValidator + + + + Min: + + + + Max: + + + + editingFinished() + + + + QDoubleValidator + + + + Format: + + + + Standard + + + + Scientific + + + + Decimals: + + + + Quit + + + + + View + + 0 + + + + Pointer Mode + + + + Select + + + + Drag + + + + Antialiasing + + + + OpenGL + + + + + Widget + + Context &version: + + + + Create context + + + + Profile + + + + Options + + + + Renderable type + + + + Failed to create context + + + + OpenGL version: %1.%2 + + + + Profile: %1 + + + + Options: %1 + + + + Renderable type: %1 + + + + Depth buffer size: %1 + + + + Stencil buffer size: %1 + + + + Samples: %1 + + + + Red buffer size: %1 + + + + Green buffer size: %1 + + + + Blue buffer size: %1 + + + + Alpha buffer size: %1 + + + + Swap interval: %1 + + + + *** Context information *** + + + + Vendor: %1 + + + + Renderer: %1 + + + + OpenGL version: %1 + + + + GLSL version: %1 + + + + +*** QSurfaceFormat from context *** + + + + +*** QSurfaceFormat from window surface *** + + + + +*** Qt build information *** + + + + Qt OpenGL configuration: %1 + + + + Qt OpenGL library handle: %1 + + + + Found %1 extensions: + + + + An error has occurred: +%1 + + + + + WidgetGallery + + &Style: + + + + &Use style's standard palette + + + + &Disable widgets + + + + Styles + + + + Group 1 + + + + Radio button 1 + + + + Radio button 2 + + + + Radio button 3 + + + + Tri-state check box + + + + Group 2 + + + + Default Push Button + + + + Toggle Push Button + + + + Flat Push Button + + + + Twinkle, twinkle, little star, +How I wonder what you are. +Up above the world so high, +Like a diamond in the sky. +Twinkle, twinkle, little star, +How I wonder what you are! + + + + + &Table + + + + Text &Edit + + + + Group 3 + + + + + Window + + &Load image... + + + + &Stop + + + + Queued Custom Type + + + + Open Image + + + + Image files (%1) + + + + &Send message + + + + Custom Type Sending + + + + Na&me: + + + + &Address: + + + + &Type: + + + + &Next + + + + &Previous + + + + SQL Widget Mapper + + + + Cannot open database + + + + Unable to establish a database connection. +This example needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. + + + + Systray + + + + The program will keep running in the system tray. To terminate the program, choose <b>Quit</b> in the context menu of the system tray entry. + + + + Sorry, I already gave what help I could. +Maybe you should try asking a human? + + + + Tray Icon + + + + Bad + + + + Heart + + + + Trash + + + + Show icon + + + + Balloon Message + + + + Type: + + + + None + + + + Information + + + + Warning + + + + Critical + + + + Duration: + + + + (some systems might ignore this hint) + + + + Title: + + + + Cannot connect to network + + + + Body: + + + + Don't believe me. Honestly, I don't have a clue. +Click this balloon for details. + + + + Show Message + + + + Mi&nimize + + + + Ma&ximize + + + + &Restore + + + + &Quit + + + + &Browse... + + + + &Find + + + + * + + + + Named: + + + + Containing text: + + + + In directory: + + + + Find Files + + + + &Cancel + + + + Searching file number %1 of %n... + + + + + + + %1 KB + + + + %n file(s) found (Double click on a file to open it) + + + + + + + Filename + + + + Size + + + + Basic Graphics Layouts Example + + + + Case sensitive sorting + + + + Case sensitive filter + + + + &Filter pattern: + + + + Regular expression + + + + Wildcard + + + + Fixed string + + + + Filter &syntax: + + + + Subject + + + + Sender + + + + Date + + + + Filter &column: + + + + Original Model + + + + Sorted/Filtered Model + + + + Basic Sort/Filter Model + + + + Alice + + + + Neptun + + + + Ferdinand + + + + Name + + + + Hair Color + + + + Color Editor Factory + + + + Delegate Widget Mapper + + + + Home + + + + Work + + + + Other + + + + F&rom: + + + + &To: + + + + Custom Sort/Filter Model + + + + &Directory: + + + + Fetch More Example + + + + %1 items added. + + + + A&ge (in years): + + + + Simple Widget Mapper + + + + Central widget + + + + Border Layout + + + + Short + + + + Longer + + + + Different text + + + + More text + + + + Even longer button text + + + + Flow Layout + + + + Polygon + + + + Rectangle + + + + Rounded Rectangle + + + + Ellipse + + + + Pie + + + + Chord + + + + Path + + + + Line + + + + Polyline + + + + Arc + + + + Points + + + + Text + + + + Pixmap + + + + &Shape: + + + + 0 (cosmetic pen) + + + + Pen &Width: + + + + Solid + + + + Dash + + + + Dot + + + + Dash Dot + + + + Dash Dot Dot + + + + &Pen Style: + + + + Flat + + + + Square + + + + Round + + + + Pen &Cap: + + + + Miter + + + + Bevel + + + + Pen &Join: + + + + Linear Gradient + + + + Radial Gradient + + + + Conical Gradient + + + + Texture + + + + Horizontal + + + + Vertical + + + + Cross + + + + Backward Diagonal + + + + Forward Diagonal + + + + Diagonal Cross + + + + Dense 1 + + + + Dense 2 + + + + Dense 3 + + + + Dense 4 + + + + Dense 5 + + + + Dense 6 + + + + Dense 7 + + + + &Brush: + + + + Options: + + + + &Antialiasing + + + + &Transformations + + + + Basic Drawing + + + + Aliased + + + + Antialiased + + + + Int + + + + Float + + + + Concentric Circles + + + + Qt + + + + Odd Even + + + + Winding + + + + Fill &Rule: + + + + &Fill Gradient: + + + + to + + + + &Pen Width: + + + + Pen &Color: + + + + &Rotation Angle: + + + + Painter Paths + + + + Clock + + + + House + + + + Truck + + + + No transformation + + + + Rotate by 60° + + + + Scale to 75% + + + + Translate by (50, 50) + + + + Transformations + + + + Calendar Widget + + + + Bold + + + + Italic + + + + Green + + + + Preview + + + + General Options + + + + &Locale + + + + Sunday + + + + Monday + + + + Tuesday + + + + Wednesday + + + + Thursday + + + + Friday + + + + Saturday + + + + Wee&k starts on: + + + + Single selection + + + + &Selection mode: + + + + &Grid + + + + &Navigation bar + + + + Single letter day names + + + + Short day names + + + + &Horizontal header: + + + + ISO week numbers + + + + &Vertical header: + + + + Dates + + + + &Minimum Date: + + + + &Current Date: + + + + Ma&ximum Date: + + + + Text Formats + + + + Black + + + + &Weekday color: + + + + Red + + + + Week&end color: + + + + Plain + + + + &Header text: + + + + &First Friday in blue + + + + May &1 in red + + + + Blue + + + + Magenta + + + + Group Boxes + + + + Exclusive Radio Buttons + + + + &Radio button 1 + + + + R&adio button 2 + + + + Ra&dio button 3 + + + + E&xclusive Radio Buttons + + + + Rad&io button 1 + + + + Radi&o button 2 + + + + Radio &button 3 + + + + Ind&ependent checkbox + + + + Non-Exclusive Checkboxes + + + + &Checkbox 1 + + + + C&heckbox 2 + + + + Tri-&state button + + + + &Push Buttons + + + + &Normal Button + + + + &Toggle Button + + + + &Flat Button + + + + Pop&up Button + + + + &First Item + + + + &Second Item + + + + &Third Item + + + + F&ourth Item + + + + Submenu + + + + Popup Submenu + + + + Item 1 + + + + Item 2 + + + + Item 3 + + + + Echo + + + + Mode: + + + + Normal + + + + Password + + + + PasswordEchoOnEdit + + + + No Echo + + + + Validator + + + + No validator + + + + Integer validator + + + + Double validator + + + + Alignment + + + + Left + + + + Centered + + + + Right + + + + Input mask + + + + No mask + + + + Phone number + + + + ISO date + + + + License key + + + + Access + + + + Read-only: + + + + False + + + + True + + + + Line Edits + + + + Controls + + + + Sliders + + + + Minimum value: + + + + Maximum value: + + + + Current value: + + + + Inverted appearance + + + + Inverted key bindings + + + + Horizontal slider-like widgets + + + + Vertical slider-like widgets + + + + Spin Boxes + + + + Spinboxes + + + + Enter a value between %1 and %2: + + + + Enter a zoom value between %1 and %2: + + + + Automatic + + + + Enter a price between %1 and %2: + + + + Show group separator + + + + Date and time spin boxes + + + + Appointment date (between %0 and %1): + + + + Appointment time (between %0 and %1): + + + + Format string for the meeting date and time: + + + + Meeting date (between %0 and %1): + + + + Meeting time (between %0 and %1): + + + + Double precision spinboxes + + + + Number of decimal places to show: + + + + Enter a scale factor between %1 and %2: + + + + No scaling + + + + 2D Painting on Native and OpenGL Widgets + + + + Native + + + + OpenGL + + + + Undock + + + + Hello GL + + + + Dock + + + + Cannot dock + + + + Main window already closed + + + + Main window already occupied + + + + Textures + + + + + XFormWidget + + Affine Transformations + + + + Rotate + + + + Scale + + + + Shear + + + + Type + + + + Vector Image + + + + Pixmap + + + + Text + + + + Reset Transform + + + + Animate + + + + Show Source + + + + Use OpenGL + + + + What's This? + + + + + XbelTree + + Title + + + + Location + + + + DOM Bookmarks + + + + Parse error at line %1, column %2: +%3 + + + + The file is not an XBEL file. + + + + The file is not an XBEL version 1.0 file. + + + + + XmlStreamLint + + Usage: xmlstreamlint <path to XML file> + + + + + File %1 does not exist. + + + + + Failed to open file %1. + + + + + Failed to open stdout. + + + + Error: %1 in file %2 at line %3, column %4. + + + + + + childwidget + + Child widget + + + + Press me + + + + + contekst + + Intro + + + + Introx + + + + + nestedlayouts + + Query: + + + + Name + + + + Office + + + + Nested layouts + + + + + simpleanchorlayout + + QGraphicsAnchorLayout in use + + + + Simple Anchor Layout + + + + + toplevel + + Top-level widget + + + + + tst_QKeySequence + + Shift++ + + + + Ctrl++ + + + + Alt++ + + + + Meta++ + + + + Shift+,, Shift++ + + + + Shift+,, Ctrl++ + + + + Shift+,, Alt++ + + + + Shift+,, Meta++ + + + + Ctrl+,, Shift++ + + + + Ctrl+,, Ctrl++ + + + + Ctrl+,, Alt++ + + + + Ctrl+,, Meta++ + + + + + tst_QLocale + + tr_TR + + + + + windowlayout + + Name: + + + + Window layout + + + + From 37a6d073b49c9e30ff0a6c9ae54446c33ab60dea Mon Sep 17 00:00:00 2001 From: Syping Date: Mon, 18 Dec 2017 06:26:13 +0100 Subject: [PATCH 021/359] update readme.md --- README.md | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 7ef7ffb..3b1586e 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,32 @@ ## gta5view -Grand Theft Auto V Savegame and Snapmatic viewer +Grand Theft Auto V Savegame and Snapmatic viewer/editor -- Viewing Snapmatics and giving the ability to disable them in-game -- Import/Export Snapmatics and Savegames -- Choosing between multiple Social Club accounts as GTA V profiles IDs +- View Snapmatics with the ability to disable them in-game +- Edit Snapmatic pictures and properties in multiple ways +- Import/Export Snapmatics, Savegames and pictures +- Let choose between multiple Social Club accounts as GTA V profiles IDs #### Screenshots - - - + + + + #### Build gta5view Debian/Ubuntu - apt-get install git gcc g++ qtbase5-dev qttranslations5-l10n qt5-qmake make checkinstall + sudo apt-get install git gcc g++ qtbase5-dev qttranslations5-l10n qt5-qmake make checkinstall git clone https://github.com/SyDevTeam/gta5view mkdir gta5view.build && cd gta5view.build qmake -qt=5 GTA5SYNC_PREFIX=/usr ../gta5view/gta5view.pro # or just qmake GTA5SYNC_PREFIX=/usr ../gta5view/gta5view.pro make - checkinstall --pkgname=gta5view --pkggroup=utility --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n + sudo checkinstall --pkgname=gta5view --pkggroup=utility --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n -#### Build gta5view Windows +#### Build gta5view Windows (Beginner) -Downloading Qt Framework and install it.
+Download Qt Framework and install it.
Take the Online Installer and choose the MinGW version or install Microsoft Visual Studio 2013/2015 Community
-Downloading Source Code over GitHub or with your Git client.
-Open the gta5view.pro file with Qt Creator and build it over Qt Creator.
+Download the Source Code over GitHub or with your Git client.
+Open the gta5view.pro Project file with Qt Creator and build it over Qt Creator.
#### Download Binary Releases From ca093737cc95130dbea44d6809782e1f0cb27357 Mon Sep 17 00:00:00 2001 From: Syping Date: Mon, 18 Dec 2017 06:26:39 +0100 Subject: [PATCH 022/359] update readme.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3b1586e..efafba7 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ Grand Theft Auto V Savegame and Snapmatic viewer/editor #### Screenshots - + #### Build gta5view Debian/Ubuntu From 30b2dce0bfaa0676dda45b537c841a2dcd346065 Mon Sep 17 00:00:00 2001 From: Syping Date: Mon, 18 Dec 2017 06:27:45 +0100 Subject: [PATCH 023/359] update readme.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index efafba7..8cbe82f 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ Grand Theft Auto V Savegame and Snapmatic viewer/editor #### Screenshots - #### Build gta5view Debian/Ubuntu From a44ee9ea44e0ddaa5023c0a83aacb210d570da1c Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 21 Dec 2017 19:36:56 +0100 Subject: [PATCH 024/359] travis script update --- .travis.yml | 51 ++++++++++++--------------------------- .travis/linux_build.sh | 28 +++++++++++++++++++++ .travis/linux_travis.sh | 8 ++++++ .travis/travis.sh | 14 +++++++++++ .travis/windows_build.sh | 18 ++++++++++++++ .travis/windows_travis.sh | 12 +++++++++ 6 files changed, 95 insertions(+), 36 deletions(-) create mode 100755 .travis/linux_build.sh create mode 100755 .travis/linux_travis.sh create mode 100755 .travis/travis.sh create mode 100755 .travis/windows_build.sh create mode 100755 .travis/windows_travis.sh diff --git a/.travis.yml b/.travis.yml index 7397324..de8e31b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,51 +3,30 @@ sudo: required language: cpp -env: -- PACKAGE_VERSION="1.5.0" +service: + - docker -before_install: - - test -n $CC && unset CC - - test -n $CXX && unset CXX - -install: - - sudo apt-get update -qq - - sudo apt-get install -qq checkinstall dpkg-dev g++ gcc qtbase5-dev qt5-qmake qttranslations5-l10n libqt4-dev - -before_script: - - if [ `git name-rev --tags --name-only $(git rev-parse HEAD)` == "undefined" ]; then export APPLICATION_VERSION="$PACKAGE_VERSION.$TRAVIS_BUILD_NUMBER"; else export APPLICATION_VERSION=`git name-rev --tags --name-only $(git rev-parse HEAD)`; fi - - echo "gta5view build version is $APPLICATION_VERSION" - - mkdir build - - mkdir package - - chmod -x res/gta5sync_*.qm res/gta5view.desktop res/gta5view.png - - cd build - - mkdir qt4 - - cd qt4 - - echo "Grand Theft Auto V Snapmatic and Savegame viewer" > ./description-pak - - cd .. - - mkdir qt5 - - cd qt5 - - echo "Grand Theft Auto V Snapmatic and Savegame viewer" > ./description-pak - - cd .. +matrix: + include: + - env: + - BUILD_SCRIPT=linux_travis.sh + - env: + - BUILD_SCRIPT=windows_travis.sh + - QT_SELECT=qt5-i686-w64-mingw32 + - env: + - BUILD_SCRIPT=windows_travis.sh + - QT_SELECT=qt5-x86_64-w64-mingw32 + - EXECUTABLE_ARCH=_x64 script: - - cd qt5 - - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev7\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev7 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=../../package - - cd .. - - cd qt4 - - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev7\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - - make -j 4 - - sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev7 --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=../../package - - cd .. + - .travis/travis.sh deploy: provider: releases api_key: secure: "o7VneEz1aHfdVwZvOZLfopf6uJWNrFsZaBvunTmXFzpmNFhlNS1qwqgMUkIA2yBRbZ3wIzVs4vfwIHv7W9yE/PqK+AYL+R8+AwKGrwlgT4HqJNuk6VM/LNJ6GwT/qkQuaoOVw29bUjmzzgIRdHmw53SlJv6Hh1VE8HphlTT//aex6nCfcFhUZ0BETdZDWz5FSHwL3NalUoqfKfQrJeky5RXzCyCANQC2tKt0bV46GaWIgWrDo2KCTNqPtRWWf5GDmnkXE5IYRMQ3mXvO9iYh0v5Y2jo4PiXGUiFUU6Z3aAWFAiPdGclrBO697cf3lCTzDMhuCETR153qFYsLShUlFf61ITAmCeHAWETjZDri0lmPONo3GoNB6alGfYEA51qw14kXakrTpICtTJj7gw/gtUYOabW6hrzmieNzMBIy62RikDPjyakFnuwW2qNHRlD65e0jYv+6nCpb6E+OV16Ysh1zhV2vTfpfzVmSuyu2J+ELqXD3OZCXRSPpDIih9UQ8335p8FBji6jHORcgym/TRgdgRmENibh8tLzWp+UjpWHuWfcpvZgOskjfwU0iDMCayMJ7tDpOhXHcAhDRnd6XRIiOJ5YZCzflj2nEwmt3YUd7DwXS/AU+WHOmcNQBjXBxF/FJa35XXcy3HKJM5TTKqtph3medo30us5yXHeG6NNg=" file_glob: true - file: "../package/gta5view*.deb" + file: "assets/*" skip_cleanup: true on: tags: true diff --git a/.travis/linux_build.sh b/.travis/linux_build.sh new file mode 100755 index 0000000..34ba830 --- /dev/null +++ b/.travis/linux_build.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Creating folders +cd $PROJECT_DIR && \ +echo "gta5view build version is $APPLICATION_VERSION" && \ +mkdir build && \ +mkdir assets && \ +chmod -x res/gta5sync_*.qm res/gta5view.desktop res/gta5view.png && \ +cd build && \ +mkdir qt4 && \ +cd qt4 && \ +echo "Grand Theft Auto V Snapmatic and Savegame viewer" > ./description-pak && \ +cd .. && \ +mkdir qt5 && \ +cd qt5 && \ +echo "Grand Theft Auto V Snapmatic and Savegame viewer" > ./description-pak && \ +cd .. && \ + +# Starting build +cd qt5 && \ +qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ +make -j 4 && \ +sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=$PACKAGE_BUILD --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=$PROJECT_DIR/assets && \ +cd .. && \ +cd qt4 && \ +qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ +make -j 4 && \ +sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=$PACKAGE_BUILD --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=$PROJECT_DIR/assets diff --git a/.travis/linux_travis.sh b/.travis/linux_travis.sh new file mode 100755 index 0000000..53eaf95 --- /dev/null +++ b/.travis/linux_travis.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# Install packages +sudo apt-get update -qq && \ +sudo apt-get install -qq checkinstall dpkg-dev g++ gcc qtbase5-dev qt5-qmake qttranslations5-l10n libqt4-dev && \ + +.travis/linux_build.sh && \ +cd $PROJECT_DIR diff --git a/.travis/travis.sh b/.travis/travis.sh new file mode 100755 index 0000000..2c8d6e6 --- /dev/null +++ b/.travis/travis.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# Install lua +sudo apt-get update -qq && \ +sudo apt-get install -qq lua5.2 + +if [ `git name-rev --tags --name-only $(git rev-parse HEAD)` == "undefined" ]; then export APPLICATION_VERSION=`lua5.2 -e 'for line in io.lines("config.h") do local m = string.match(line, "#define GTA5SYNC_APPVER \"(.+)\"$"); if m then print(m); os.exit(0) end end'`; else export APPLICATION_VERSION=`git name-rev --tags --name-only $(git rev-parse HEAD)`; fi +export PACKAGE_VERSION=$(grep -oE '^[^\-]*' <<< $APPLICATION_VERSION) +export PACKAGE_BUILD=$(grep -oP '\-\K.+' <<< $APPLICATION_VERSION) +export EXECUTABLE_VERSION=$PACKAGE_VERSION$PACKAGE_BUILD +if [ "$PACKAGE_BUILD" == "" ]; then export PACKAGE_BUILD=$TRAVIS_BUILD_NUMBER; fi +export PROJECT_DIR=$(pwd) + +.travis/$BUILD_SCRIPT diff --git a/.travis/windows_build.sh b/.travis/windows_build.sh new file mode 100755 index 0000000..db9bec2 --- /dev/null +++ b/.travis/windows_build.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe + +# Creating folders +cd $PROJECT_DIR && \ +echo "gta5view build version is $APPLICATION_VERSION" && \ +echo "gta5view executable is $GTA5VIEW_EXECUTABLE" && \ +mkdir build && \ +mkdir assets && \ + +# Starting build +cd build && \ +qmake-static DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" ../gta5view.pro && \ +make -j 4 && \ +cp -Rf release/*.exe $PROJECT_DIR/assets/$GTA5VIEW_EXECUTABLE && \ +cd $PROJECT_DIR/assets && \ +upx --best $GTA5VIEW_EXECUTABLE diff --git a/.travis/windows_travis.sh b/.travis/windows_travis.sh new file mode 100755 index 0000000..2125700 --- /dev/null +++ b/.travis/windows_travis.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +QT_VERSION=5.6.3 +DOCKER_IMAGE=syping/qt5-static-mingw:$QT_VERSION +PROJECT_DIR_DOCKER=/gta5view/ + +cd $PROJECT_DIR && \ +docker pull $DOCKER_IMAGE && \ +docker run --rm \ + -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ + $DOCKER_IMAGE \ + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/windows_build.sh" From d3ce20a71003f0e949641fb96045734ba64b8736 Mon Sep 17 00:00:00 2001 From: Syping Date: Sat, 23 Dec 2017 07:48:01 +0100 Subject: [PATCH 025/359] travis script update --- .travis.yml | 10 +++++++++- .travis/debian32_travis.sh | 11 +++++++++++ .travis/debian64_travis.sh | 11 +++++++++++ .travis/debian_build.sh | 31 +++++++++++++++++++++++++++++++ .travis/debian_install.sh | 5 +++++ .travis/linux_build.sh | 28 ---------------------------- .travis/linux_travis.sh | 8 -------- .travis/travis.sh | 2 +- .travis/ubuntu64_travis.sh | 8 ++++++++ .travis/windows_build.sh | 2 +- .travis/windows_travis.sh | 4 ++-- 11 files changed, 79 insertions(+), 41 deletions(-) create mode 100755 .travis/debian32_travis.sh create mode 100755 .travis/debian64_travis.sh create mode 100755 .travis/debian_build.sh create mode 100755 .travis/debian_install.sh delete mode 100755 .travis/linux_build.sh delete mode 100755 .travis/linux_travis.sh create mode 100755 .travis/ubuntu64_travis.sh diff --git a/.travis.yml b/.travis.yml index de8e31b..1cff3d2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,13 +3,21 @@ sudo: required language: cpp +compiler: clang + service: - docker matrix: include: - env: - - BUILD_SCRIPT=linux_travis.sh + - BUILD_SCRIPT=debian32_travis.sh + - QMAKE_FLAGS_QT4=QMAKE_CXXFLAGS+=-Wno-missing-field-initializers + - APT_INSTALL=clang + - env: + - BUILD_SCRIPT=debian64_travis.sh + - QMAKE_FLAGS_QT4=QMAKE_CXXFLAGS+=-Wno-missing-field-initializers + - APT_INSTALL=clang - env: - BUILD_SCRIPT=windows_travis.sh - QT_SELECT=qt5-i686-w64-mingw32 diff --git a/.travis/debian32_travis.sh b/.travis/debian32_travis.sh new file mode 100755 index 0000000..fa477cf --- /dev/null +++ b/.travis/debian32_travis.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +DOCKER_IMAGE=i386/debian:jessie +PROJECT_DIR_DOCKER=/gta5view/ + +cd $PROJECT_DIR && \ +docker pull $DOCKER_IMAGE && \ +docker run --rm \ + -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ + $DOCKER_IMAGE \ + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/debian_install.sh && .travis/debian_build.sh" diff --git a/.travis/debian64_travis.sh b/.travis/debian64_travis.sh new file mode 100755 index 0000000..63d4610 --- /dev/null +++ b/.travis/debian64_travis.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +DOCKER_IMAGE=debian:jessie +PROJECT_DIR_DOCKER=/gta5view + +cd $PROJECT_DIR && \ +docker pull $DOCKER_IMAGE && \ +docker run --rm \ + -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ + $DOCKER_IMAGE \ + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/debian_install.sh && .travis/debian_build.sh" diff --git a/.travis/debian_build.sh b/.travis/debian_build.sh new file mode 100755 index 0000000..1a4db3a --- /dev/null +++ b/.travis/debian_build.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# Creating folders +cd $PROJECT_DIR && \ +echo "gta5view build version is $APPLICATION_VERSION" && \ +mkdir build && \ +mkdir assets && \ +chmod -x res/gta5sync_*.qm res/gta5view.desktop res/gta5view.png && \ +cd build && \ +mkdir qt4 && \ +cd qt4 && \ +echo "Grand Theft Auto V Snapmatic and Savegame viewer" > ./description-pak && \ +cd .. && \ +mkdir qt5 && \ +cd qt5 && \ +echo "Grand Theft Auto V Snapmatic and Savegame viewer" > ./description-pak && \ +cd .. && \ + +# Prepare checkinstall step +mkdir -p /usr/share/gta5view && \ + +# Starting build +cd qt5 && \ +qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 $QMAKE_FLAGS_QT5 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ +make -j 4 && \ +checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=$PACKAGE_BUILD --pkggroup=utility --maintainer="Syping \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=$PROJECT_DIR/assets && \ +cd .. && \ +cd qt4 && \ +qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 $QMAKE_FLAGS_QT4 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ +make -j 4 && \ +checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=$PACKAGE_BUILD --pkggroup=utility --maintainer="Syping \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=$PROJECT_DIR/assets diff --git a/.travis/debian_install.sh b/.travis/debian_install.sh new file mode 100755 index 0000000..2c7092b --- /dev/null +++ b/.travis/debian_install.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# Install packages +apt-get update -qq && \ +apt-get install -qq $APT_INSTALL checkinstall dpkg-dev fakeroot g++ gcc qtbase5-dev qt5-qmake qttranslations5-l10n libqt4-dev diff --git a/.travis/linux_build.sh b/.travis/linux_build.sh deleted file mode 100755 index 34ba830..0000000 --- a/.travis/linux_build.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -# Creating folders -cd $PROJECT_DIR && \ -echo "gta5view build version is $APPLICATION_VERSION" && \ -mkdir build && \ -mkdir assets && \ -chmod -x res/gta5sync_*.qm res/gta5view.desktop res/gta5view.png && \ -cd build && \ -mkdir qt4 && \ -cd qt4 && \ -echo "Grand Theft Auto V Snapmatic and Savegame viewer" > ./description-pak && \ -cd .. && \ -mkdir qt5 && \ -cd qt5 && \ -echo "Grand Theft Auto V Snapmatic and Savegame viewer" > ./description-pak && \ -cd .. && \ - -# Starting build -cd qt5 && \ -qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ -make -j 4 && \ -sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=$PACKAGE_BUILD --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=$PROJECT_DIR/assets && \ -cd .. && \ -cd qt4 && \ -qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ -make -j 4 && \ -sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=$PACKAGE_BUILD --pkggroup=utility --maintainer="Syping on Travis \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=$PROJECT_DIR/assets diff --git a/.travis/linux_travis.sh b/.travis/linux_travis.sh deleted file mode 100755 index 53eaf95..0000000 --- a/.travis/linux_travis.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -# Install packages -sudo apt-get update -qq && \ -sudo apt-get install -qq checkinstall dpkg-dev g++ gcc qtbase5-dev qt5-qmake qttranslations5-l10n libqt4-dev && \ - -.travis/linux_build.sh && \ -cd $PROJECT_DIR diff --git a/.travis/travis.sh b/.travis/travis.sh index 2c8d6e6..84571d4 100755 --- a/.travis/travis.sh +++ b/.travis/travis.sh @@ -7,7 +7,7 @@ sudo apt-get install -qq lua5.2 if [ `git name-rev --tags --name-only $(git rev-parse HEAD)` == "undefined" ]; then export APPLICATION_VERSION=`lua5.2 -e 'for line in io.lines("config.h") do local m = string.match(line, "#define GTA5SYNC_APPVER \"(.+)\"$"); if m then print(m); os.exit(0) end end'`; else export APPLICATION_VERSION=`git name-rev --tags --name-only $(git rev-parse HEAD)`; fi export PACKAGE_VERSION=$(grep -oE '^[^\-]*' <<< $APPLICATION_VERSION) export PACKAGE_BUILD=$(grep -oP '\-\K.+' <<< $APPLICATION_VERSION) -export EXECUTABLE_VERSION=$PACKAGE_VERSION$PACKAGE_BUILD +export EXECUTABLE_VERSION=${PACKAGE_VERSION}${PACKAGE_BUILD} if [ "$PACKAGE_BUILD" == "" ]; then export PACKAGE_BUILD=$TRAVIS_BUILD_NUMBER; fi export PROJECT_DIR=$(pwd) diff --git a/.travis/ubuntu64_travis.sh b/.travis/ubuntu64_travis.sh new file mode 100755 index 0000000..08f790b --- /dev/null +++ b/.travis/ubuntu64_travis.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# Install packages +sudo .travis/debian_install.sh && \ + +# Build gta5view +sudo .travis/debian_build.sh && \ +cd $PROJECT_DIR diff --git a/.travis/windows_build.sh b/.travis/windows_build.sh index db9bec2..5dd8937 100755 --- a/.travis/windows_build.sh +++ b/.travis/windows_build.sh @@ -11,7 +11,7 @@ mkdir assets && \ # Starting build cd build && \ -qmake-static DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" ../gta5view.pro && \ +qmake-static $QMAKE_FLAGS DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" ../gta5view.pro && \ make -j 4 && \ cp -Rf release/*.exe $PROJECT_DIR/assets/$GTA5VIEW_EXECUTABLE && \ cd $PROJECT_DIR/assets && \ diff --git a/.travis/windows_travis.sh b/.travis/windows_travis.sh index 2125700..a6181cb 100755 --- a/.travis/windows_travis.sh +++ b/.travis/windows_travis.sh @@ -2,11 +2,11 @@ QT_VERSION=5.6.3 DOCKER_IMAGE=syping/qt5-static-mingw:$QT_VERSION -PROJECT_DIR_DOCKER=/gta5view/ +PROJECT_DIR_DOCKER=/gta5view cd $PROJECT_DIR && \ docker pull $DOCKER_IMAGE && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ $DOCKER_IMAGE \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/windows_build.sh" + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/windows_build.sh" From d0caea372c0773e87f43096f1976f6576c153e98 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 11 Jan 2018 08:41:00 +0100 Subject: [PATCH 026/359] added telemetry --- .travis/debian32_travis.sh | 2 +- AboutDialog.cpp | 9 +- AppEnv.cpp | 7 + AppEnv.h | 5 +- ImageEditorDialog.cpp | 29 +- ImportDialog.cpp | 13 +- JsonEditorDialog.cpp | 20 +- OptionsDialog.cpp | 13 +- PictureDialog.cpp | 8 +- PlayerListDialog.cpp | 28 +- ProfileInterface.cpp | 13 +- SnapmaticEditor.cpp | 18 +- TelemetryClass.cpp | 384 ++++++++++++++++++++++++++ TelemetryClass.h | 75 +++++ UserInterface.cpp | 27 +- config.h | 2 +- gta5view.pro | 18 +- main.cpp | 70 +++-- res/app.rc | 14 +- tmext/TelemetryClassAuthenticator.cpp | 99 +++++++ tmext/TelemetryClassAuthenticator.h | 41 +++ 21 files changed, 851 insertions(+), 44 deletions(-) create mode 100644 TelemetryClass.cpp create mode 100644 TelemetryClass.h create mode 100644 tmext/TelemetryClassAuthenticator.cpp create mode 100644 tmext/TelemetryClassAuthenticator.h diff --git a/.travis/debian32_travis.sh b/.travis/debian32_travis.sh index fa477cf..bcd8ce2 100755 --- a/.travis/debian32_travis.sh +++ b/.travis/debian32_travis.sh @@ -1,7 +1,7 @@ #!/bin/bash DOCKER_IMAGE=i386/debian:jessie -PROJECT_DIR_DOCKER=/gta5view/ +PROJECT_DIR_DOCKER=/gta5view cd $PROJECT_DIR && \ docker pull $DOCKER_IMAGE && \ diff --git a/AboutDialog.cpp b/AboutDialog.cpp index bf2d4ed..2c075dd 100755 --- a/AboutDialog.cpp +++ b/AboutDialog.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2016-2018 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,7 +33,7 @@ AboutDialog::AboutDialog(QWidget *parent) : QString appVersion = qApp->applicationVersion(); QString buildType = tr(GTA5SYNC_BUILDTYPE); buildType.replace("_", " "); - QString projectBuild = GTA5SYNC_BUILDDATETIME; + QString projectBuild = AppEnv::getBuildDateTime(); QString buildStr = GTA5SYNC_BUILDSTRING; // Translator Comments @@ -102,10 +102,15 @@ AboutDialog::AboutDialog(QWidget *parent) : ui->labAbout->setText(aboutStr.arg(GTA5SYNC_APPSTR, projectDes, appVersion % " (" % buildType % ")", projectBuild, buildStr, qVersion(), copyrightDesA)); this->setWindowTitle(titleStr.arg(GTA5SYNC_APPSTR)); + // Set Icon for Close Button if (QIcon::hasThemeIcon("dialog-close")) { ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); } + else if (QIcon::hasThemeIcon("gtk-close")) + { + ui->cmdClose->setIcon(QIcon::fromTheme("gtk-close")); + } // DPI calculation qreal screenRatio = AppEnv::screenRatio(); diff --git a/AppEnv.cpp b/AppEnv.cpp index cab453a..89bff93 100755 --- a/AppEnv.cpp +++ b/AppEnv.cpp @@ -37,6 +37,13 @@ AppEnv::AppEnv() } +// Build Stuff + +QString AppEnv::getBuildDateTime() +{ + return GTA5SYNC_BUILDDATETIME; +} + // Folder Stuff QString AppEnv::getGameFolder(bool *ok) diff --git a/AppEnv.h b/AppEnv.h index 21a8e7b..2863791 100755 --- a/AppEnv.h +++ b/AppEnv.h @@ -1,6 +1,6 @@ /***************************************************************************** * gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2016-2018 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 @@ -27,6 +27,9 @@ class AppEnv public: AppEnv(); + // Build Stuff + static QString getBuildDateTime(); + // Folder Stuff static QString getGameFolder(bool *ok = 0); static bool setGameFolder(QString gameFolder); diff --git a/ImageEditorDialog.cpp b/ImageEditorDialog.cpp index 7fffbd9..b4a2589 100644 --- a/ImageEditorDialog.cpp +++ b/ImageEditorDialog.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2017-2018 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 @@ -37,8 +37,35 @@ ImageEditorDialog::ImageEditorDialog(SnapmaticPicture *picture, QString profileN setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); ui->setupUi(this); + ui->cmdClose->setDefault(true); ui->cmdClose->setFocus(); + // Set Icon for Close Button + if (QIcon::hasThemeIcon("dialog-close")) + { + ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); + } + else if (QIcon::hasThemeIcon("gtk-close")) + { + ui->cmdClose->setIcon(QIcon::fromTheme("gtk-close")); + } + + // Set Icon for Import Button + if (QIcon::hasThemeIcon("document-import")) + { + ui->cmdReplace->setIcon(QIcon::fromTheme("document-import")); + } + + // Set Icon for Overwrite Button + if (QIcon::hasThemeIcon("document-save")) + { + ui->cmdSave->setIcon(QIcon::fromTheme("document-save")); + } + else if (QIcon::hasThemeIcon("gtk-save")) + { + ui->cmdSave->setIcon(QIcon::fromTheme("gtk-save")); + } + // DPI calculation qreal screenRatio = AppEnv::screenRatio(); diff --git a/ImportDialog.cpp b/ImportDialog.cpp index e128f6f..0d0f6d4 100644 --- a/ImportDialog.cpp +++ b/ImportDialog.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2017 Syping +* Copyright (C) 2017-2018 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 @@ -55,14 +55,25 @@ ImportDialog::ImportDialog(QWidget *parent) : avatarAreaImage = QImage(":/img/avatarareaimport.png"); selectedColour = QColor::fromRgb(0, 0, 0, 255); + // Set Icon for OK Button if (QIcon::hasThemeIcon("dialog-ok")) { ui->cmdOK->setIcon(QIcon::fromTheme("dialog-ok")); } + else if (QIcon::hasThemeIcon("gtk-ok")) + { + ui->cmdOK->setIcon(QIcon::fromTheme("gtk-ok")); + } + + // Set Icon for Cancel Button if (QIcon::hasThemeIcon("dialog-cancel")) { ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel")); } + else if (QIcon::hasThemeIcon("gtk-cancel")) + { + ui->cmdCancel->setIcon(QIcon::fromTheme("gtk-cancel")); + } ui->cbIgnore->setChecked(false); ui->labColour->setText(tr("Background Colour: %1").arg(selectedColour.name())); diff --git a/JsonEditorDialog.cpp b/JsonEditorDialog.cpp index 8906c91..fb9ec6c 100644 --- a/JsonEditorDialog.cpp +++ b/JsonEditorDialog.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2017 Syping +* Copyright (C) 2017-2018 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 @@ -38,10 +38,28 @@ JsonEditorDialog::JsonEditorDialog(SnapmaticPicture *picture, QWidget *parent) : ui->setupUi(this); ui->cmdClose->setDefault(true); + ui->cmdClose->setFocus(); + + // Set Icon for Close Button if (QIcon::hasThemeIcon("dialog-close")) { ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); } + else if (QIcon::hasThemeIcon("gtk-close")) + { + ui->cmdClose->setIcon(QIcon::fromTheme("gtk-close")); + } + + // Set Icon for Save Button + if (QIcon::hasThemeIcon("document-save")) + { + ui->cmdSave->setIcon(QIcon::fromTheme("document-save")); + } + else if (QIcon::hasThemeIcon("gtk-save")) + { + ui->cmdSave->setIcon(QIcon::fromTheme("gtk-save")); + } + jsonCode = picture->getJsonStr(); #if QT_VERSION >= 0x050200 diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp index a967d56..31f8aa4 100755 --- a/OptionsDialog.cpp +++ b/OptionsDialog.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2016-2018 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 @@ -64,14 +64,25 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : ui->rbPicDesktopRes->setText(ui->rbPicDesktopRes->text().arg(QString::number(desktopSizeWidth), QString::number(desktopSizeHeight))); ui->rbPicDefaultRes->setText(ui->rbPicDefaultRes->text().arg(QString::number(defExportSize.width()), QString::number(defExportSize.height()))); + // Set Icon for OK Button if (QIcon::hasThemeIcon("dialog-ok")) { ui->cmdOK->setIcon(QIcon::fromTheme("dialog-ok")); } + else if (QIcon::hasThemeIcon("gtk-ok")) + { + ui->cmdOK->setIcon(QIcon::fromTheme("gtk-ok")); + } + + // Set Icon for Cancel Button if (QIcon::hasThemeIcon("dialog-cancel")) { ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel")); } + else if (QIcon::hasThemeIcon("gtk-cancel")) + { + ui->cmdCancel->setIcon(QIcon::fromTheme("gtk-cancel")); + } setupTreeWidget(); setupLanguageBox(); diff --git a/PictureDialog.cpp b/PictureDialog.cpp index 603fa42..661718c 100755 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2016-2018 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 @@ -166,11 +166,15 @@ void PictureDialog::setupPictureDialog() // Event connects connect(ui->labJSON, SIGNAL(resized(QSize)), this, SLOT(adaptNewDialogSize(QSize))); - // Dialog buttons + // Set Icon for Close Button if (QIcon::hasThemeIcon("dialog-close")) { ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); } + else if (QIcon::hasThemeIcon("gtk-close")) + { + ui->cmdClose->setIcon(QIcon::fromTheme("gtk-close")); + } installEventFilter(this); installEventFilter(ui->labPicture); diff --git a/PlayerListDialog.cpp b/PlayerListDialog.cpp index 019871c..5035f38 100644 --- a/PlayerListDialog.cpp +++ b/PlayerListDialog.cpp @@ -37,7 +37,9 @@ PlayerListDialog::PlayerListDialog(QStringList players, ProfileDatabase *profile ui->setupUi(this); ui->cmdCancel->setDefault(true); + ui->cmdCancel->setFocus(); + // Set Icon for Apply Button if (QIcon::hasThemeIcon("dialog-ok-apply")) { ui->cmdApply->setIcon(QIcon::fromTheme("dialog-ok-apply")); @@ -46,16 +48,40 @@ PlayerListDialog::PlayerListDialog(QStringList players, ProfileDatabase *profile { ui->cmdApply->setIcon(QIcon::fromTheme("dialog-apply")); } + else if (QIcon::hasThemeIcon("gtk-apply")) + { + ui->cmdApply->setIcon(QIcon::fromTheme("gtk-apply")); + } else if (QIcon::hasThemeIcon("dialog-ok")) { ui->cmdApply->setIcon(QIcon::fromTheme("dialog-ok")); } + else if (QIcon::hasThemeIcon("gtk-ok")) + { + ui->cmdApply->setIcon(QIcon::fromTheme("dialog-ok")); + } + + // Set Icon for Cancel Button if (QIcon::hasThemeIcon("dialog-cancel")) { ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel")); } + else if (QIcon::hasThemeIcon("gtk-cancel")) + { + ui->cmdCancel->setIcon(QIcon::fromTheme("gtk-cancel")); + } - drawSwitchButtons(); + // Set Icon for Manage Buttons + if (QIcon::hasThemeIcon("go-previous") && QIcon::hasThemeIcon("go-next") && QIcon::hasThemeIcon("list-add")) + { + ui->cmdMakeAv->setIcon(QIcon::fromTheme("go-previous")); + ui->cmdMakeSe->setIcon(QIcon::fromTheme("go-next")); + ui->cmdMakeAd->setIcon(QIcon::fromTheme("list-add")); + } + else + { + drawSwitchButtons(); + } buildInterface(); // DPI calculation diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 9a7a258..f44af9d 100755 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2016-2018 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 @@ -79,10 +79,21 @@ ProfileInterface::ProfileInterface(ProfileDatabase *profileDB, CrewDatabase *cre ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER)); ui->saProfileContent->setFilesMode(true); + // Set Icon for Close Button if (QIcon::hasThemeIcon("dialog-close")) { ui->cmdCloseProfile->setIcon(QIcon::fromTheme("dialog-close")); } + else if (QIcon::hasThemeIcon("gtk-close")) + { + ui->cmdCloseProfile->setIcon(QIcon::fromTheme("gtk-close")); + } + + // Set Icon for Import Button + if (QIcon::hasThemeIcon("document-import")) + { + ui->cmdImport->setIcon(QIcon::fromTheme("document-import")); + } // DPI calculation qreal screenRatio = AppEnv::screenRatio(); diff --git a/SnapmaticEditor.cpp b/SnapmaticEditor.cpp index fe1390e..2ba6081 100644 --- a/SnapmaticEditor.cpp +++ b/SnapmaticEditor.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2016-2018 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 @@ -39,7 +39,9 @@ SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, ProfileDatabase *profileD ui->setupUi(this); ui->cmdCancel->setDefault(true); + ui->cmdCancel->setFocus(); + // Set Icon for Apply Button if (QIcon::hasThemeIcon("dialog-ok-apply")) { ui->cmdApply->setIcon(QIcon::fromTheme("dialog-ok-apply")); @@ -48,14 +50,28 @@ SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, ProfileDatabase *profileD { ui->cmdApply->setIcon(QIcon::fromTheme("dialog-apply")); } + else if (QIcon::hasThemeIcon("gtk-apply")) + { + ui->cmdApply->setIcon(QIcon::fromTheme("gtk-apply")); + } else if (QIcon::hasThemeIcon("dialog-ok")) { ui->cmdApply->setIcon(QIcon::fromTheme("dialog-ok")); } + else if (QIcon::hasThemeIcon("gtk-ok")) + { + ui->cmdApply->setIcon(QIcon::fromTheme("dialog-ok")); + } + + // Set Icon for Cancel Button if (QIcon::hasThemeIcon("dialog-cancel")) { ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel")); } + else if (QIcon::hasThemeIcon("gtk-cancel")) + { + ui->cmdCancel->setIcon(QIcon::fromTheme("gtk-cancel")); + } snapmaticTitle = QString(); smpic = 0; diff --git a/TelemetryClass.cpp b/TelemetryClass.cpp new file mode 100644 index 0000000..d772f25 --- /dev/null +++ b/TelemetryClass.cpp @@ -0,0 +1,384 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2018 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "TelemetryClassAuthenticator.h" +#include "TelemetryClass.h" +#include "AppEnv.h" +#include "config.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef GTA5SYNC_WIN +#include "windows.h" +#include "intrin.h" +#endif + +TelemetryClass TelemetryClass::telemetryClassInstance; + +void TelemetryClass::init() +{ + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("Telemetry"); +#ifndef GTA5SYNC_BUILDTYPE_DEV + telemetryEnabled = settings.value("IsEnabled", false).toBool(); +#else + telemetryEnabled = true; // Always enable Telemetry for Developer Versions +#endif + telemetryClientID = settings.value("ClientID", QString()).toString(); + settings.endGroup(); +} + +void TelemetryClass::refresh() +{ + init(); +} + +bool TelemetryClass::canPush() +{ + if (!isEnabled() || !isRegistered() || !TelemetryClassAuthenticator::havePushURL()) return false; + return true; +} + +bool TelemetryClass::canRegister() +{ + if (!isEnabled() || isRegistered() || !TelemetryClassAuthenticator::haveRegURL()) return false; + return true; +} + +bool TelemetryClass::isEnabled() +{ + return telemetryEnabled; +} + +bool TelemetryClass::isStateForced() +{ + return telemetryStateForced; +} + +bool TelemetryClass::isRegistered() +{ + return !telemetryClientID.isEmpty(); +} + +void TelemetryClass::setEnabled(bool enabled) +{ + telemetryEnabled = enabled; + telemetryStateForced = true; +} + +void TelemetryClass::setDisabled(bool disabled) +{ + telemetryEnabled = !disabled; + telemetryStateForced = true; +} + +void TelemetryClass::push(TelemetryCategory category) +{ + if (!canPush()) return; + switch (category) + { + case TelemetryCategory::OperatingSystemSpec: + push(category, getOperatingSystem()); + break; + case TelemetryCategory::HardwareSpec: + push(category, getSystemHardware()); + break; + case TelemetryCategory::UserLocaleData: + push(category, getSystemLocaleList()); + break; + case TelemetryCategory::ApplicationConfiguration: + break; + case TelemetryCategory::ApplicationSpec: + push(category, getApplicationSpec()); + break; + } +} + +void TelemetryClass::push(TelemetryCategory category, QJsonDocument json) +{ + if (!canPush()) return; + + QJsonDocument jsonDocument(json); + QJsonObject jsonObject = jsonDocument.object(); + jsonObject["ClientID"] = telemetryClientID; + jsonDocument.setObject(jsonObject); + + QHttpMultiPart *httpMultiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); + + QHttpPart categoryPart; + categoryPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"json-category\"")); + categoryPart.setBody(categoryToString(category).toUtf8()); + + QHttpPart jsonPart; + jsonPart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/octet-stream")); + jsonPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"json-deflated\"")); + jsonPart.setBody(qCompress(jsonDocument.toJson(QJsonDocument::Compact))); + + httpMultiPart->append(categoryPart); + httpMultiPart->append(jsonPart); + + QNetworkAccessManager *netManager = new QNetworkAccessManager(); + QNetworkRequest netRequest(TelemetryClassAuthenticator::getTrackingPushURL()); + QNetworkReply *netReply = netManager->post(netRequest, httpMultiPart); + httpMultiPart->setParent(netReply); + + connect(netManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(pushFinished(QNetworkReply*))); +} + +QJsonDocument TelemetryClass::getOperatingSystem() +{ + QJsonDocument jsonDocument; + QJsonObject jsonObject; +#if QT_VERSION >= 0x050400 + jsonObject["OSName"] = QSysInfo::prettyProductName(); + jsonObject["OSArch"] = QSysInfo::currentCpuArchitecture(); +#endif + jsonDocument.setObject(jsonObject); + return jsonDocument; +} + +QJsonDocument TelemetryClass::getSystemHardware() +{ + QJsonDocument jsonDocument; + QJsonObject jsonObject; +#ifdef GTA5SYNC_WIN + { + int CPUInfo[4] = {-1}; + unsigned nExIds, i = 0; + char CPUBrandString[0x40]; + __cpuid(CPUInfo, 0x80000000); + nExIds = CPUInfo[0]; + for (i = 0x80000000; i <= nExIds; ++i) + { + __cpuid(CPUInfo, i); + if (i == 0x80000002) { memcpy(CPUBrandString, CPUInfo, sizeof(CPUInfo)); } + else if (i == 0x80000003) { memcpy(CPUBrandString + 16, CPUInfo, sizeof(CPUInfo)); } + else if (i == 0x80000004) { memcpy(CPUBrandString + 32, CPUInfo, sizeof(CPUInfo)); } + } + jsonObject["CPUName"] = QString(CPUBrandString).trimmed(); + SYSTEM_INFO sysInfo; + GetSystemInfo(&sysInfo); + jsonObject["CPUThreads"] = QString::number(sysInfo.dwNumberOfProcessors); + MEMORYSTATUSEX statex; + statex.dwLength = sizeof(statex); + GlobalMemoryStatusEx(&statex); + jsonObject["SystemRAM"] = QString(QString::number((statex.ullTotalPhys / 1024) / 1024) % "MB"); + } +#else + QDir procDir("/proc"); + if (procDir.exists()) + { + QFile cpuInfo("/proc/cpuinfo"); + if (cpuInfo.open(QFile::ReadOnly)) + { + QByteArray cpuInfoArray = cpuInfo.readAll(); + QBuffer cpuInfoBuffer(&cpuInfoArray); + if (cpuInfoBuffer.open(QBuffer::ReadOnly)) + { + QByteArray toFind = "model name"; + while (cpuInfoBuffer.canReadLine()) + { + QByteArray cpuData = cpuInfoBuffer.readLine(); + if (cpuData.left(toFind.length()) == toFind) + { + jsonObject["CPUName"] = QString::fromUtf8(cpuData).split(':').at(1).trimmed(); + break; + } + } + int cpuThreads = 0; + toFind = "processor"; + cpuInfoBuffer.seek(0); + while (cpuInfoBuffer.canReadLine()) + { + QByteArray cpuData = cpuInfoBuffer.readLine(); + if (cpuData.left(toFind.length()) == toFind) + { + cpuThreads++; + } + } + jsonObject["CPUThreads"] = QString::number(cpuThreads); + } + } + + QFile memInfo("/proc/meminfo"); + if (memInfo.open(QFile::ReadOnly)) + { + QByteArray memInfoArray = memInfo.readAll(); + QBuffer memInfoBuffer(&memInfoArray); + if (memInfoBuffer.open(QBuffer::ReadOnly)) + { + QByteArray toFind = "MemTotal:"; + while (memInfoBuffer.canReadLine()) + { + QByteArray memData = memInfoBuffer.readLine(); + if (memData.left(toFind.length()) == toFind) + { + QByteArray memDataVal = memData.mid(toFind.length()).trimmed(); + int totalMemoryInKB = memDataVal.left(memDataVal.length() - 3).toInt(); + jsonObject["SystemRAM"] = QString(QString::number(totalMemoryInKB / 1024) % "MB"); + break; + } + } + } + } + } +#endif + + jsonDocument.setObject(jsonObject); + return jsonDocument; +} + +QJsonDocument TelemetryClass::getApplicationSpec() +{ + QJsonDocument jsonDocument; + QJsonObject jsonObject; +#if QT_VERSION >= 0x050400 + jsonObject["Arch"] = QSysInfo::buildCpuArchitecture(); +#endif + jsonObject["Name"] = GTA5SYNC_APPSTR; + jsonObject["Version"] = GTA5SYNC_APPVER; + jsonObject["BuildDateTime"] = AppEnv::getBuildDateTime(); + jsonObject["BuildType"] = GTA5SYNC_BUILDTYPE; + jsonObject["QtVersion"] = qVersion(); + jsonDocument.setObject(jsonObject); + return jsonDocument; +} + +QJsonDocument TelemetryClass::getSystemLocaleList() +{ + QJsonDocument jsonDocument; + QJsonObject jsonObject; + QStringList languagesList = QLocale::system().uiLanguages(); + if (languagesList.length() >= 1) + { + jsonObject["PrimaryLanguage"] = languagesList.at(0); + } + if (languagesList.length() >= 2) + { + languagesList.removeAt(0); + jsonObject["SecondaryLanguages"] = QJsonValue::fromVariant(languagesList); + } + jsonDocument.setObject(jsonObject); + return jsonDocument; +} + +QString TelemetryClass::categoryToString(TelemetryCategory category) +{ + switch (category) + { + case TelemetryCategory::OperatingSystemSpec: + return QString("OperatingSystemSpec"); + break; + case TelemetryCategory::HardwareSpec: + return QString("HardwareSpec"); + break; + case TelemetryCategory::UserLocaleData: + return QString("UserLocaleData"); + break; + case TelemetryCategory::ApplicationConfiguration: + return QString("ApplicationConfiguration"); + break; + case TelemetryCategory::UserFeedback: + return QString("UserFeedback"); + break; + case TelemetryCategory::ApplicationSpec: + return QString("ApplicationSpec"); + break; + case TelemetryCategory::CustomEmitted: + return QString("CustomEmitted"); + break; + default: + return QString("UnknownCategory"); + break; + } +} + +void TelemetryClass::registerClient() +{ + QNetworkAccessManager *netManager = new QNetworkAccessManager(); + QNetworkRequest netRequest(TelemetryClassAuthenticator::getTrackingRegURL()); + netManager->get(netRequest); + + connect(netManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(registerFinished(QNetworkReply*))); +} + +void TelemetryClass::pushStartupSet() +{ + push(TelemetryCategory::ApplicationSpec); + push(TelemetryCategory::UserLocaleData); + push(TelemetryCategory::OperatingSystemSpec); + push(TelemetryCategory::HardwareSpec); +} + +void TelemetryClass::pushFinished(QNetworkReply *reply) +{ +#ifdef GTA5SYNC_DEBUG + qDebug() << "Telemetry" << reply->readAll().trimmed(); +#endif + reply->deleteLater(); + sender()->deleteLater(); + emit pushed(); +} + +void TelemetryClass::registerFinished(QNetworkReply *reply) +{ + if (reply->canReadLine()) + { + QByteArray readData = reply->readLine(); + if (QString::fromUtf8(readData).trimmed() == QString("Registration success!") && reply->canReadLine()) + { + readData = reply->readLine(); + telemetryClientID = QString::fromUtf8(readData).trimmed(); + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("Telemetry"); + settings.setValue("ClientID", telemetryClientID); + settings.endGroup(); +#ifdef GTA5SYNC_DEBUG + qDebug() << "Telemetry" << QString("Registration success!"); +#endif + } + else + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "Telemetry" << QString("Registration failed!"); +#endif + } + } + else + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "Telemetry" << QString("Registration failed!"); +#endif + } + reply->deleteLater(); + sender()->deleteLater(); + emit registered(); +} diff --git a/TelemetryClass.h b/TelemetryClass.h new file mode 100644 index 0000000..a009f31 --- /dev/null +++ b/TelemetryClass.h @@ -0,0 +1,75 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2018 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef TELEMETRYCLASS_H +#define TELEMETRYCLASS_H + +#include +#include +#include +#include + +enum class TelemetryCategory : int { OperatingSystemSpec = 0, HardwareSpec = 1, UserLocaleData = 2, ApplicationConfiguration = 3, UserFeedback = 4, ApplicationSpec = 5, CustomEmitted = 99}; + +class TelemetryClass : public QObject +{ + Q_OBJECT +public: + static TelemetryClass* getInstance() { return &telemetryClassInstance; } + static QString categoryToString(TelemetryCategory category); + bool canPush(); + bool canRegister(); + bool isEnabled(); + bool isStateForced(); + bool isRegistered(); + void init(); + void refresh(); + void setEnabled(bool enabled); + void setDisabled(bool disabled); + void push(TelemetryCategory category); + void push(TelemetryCategory category, const QJsonDocument json); + void registerClient(); + +private: + static TelemetryClass telemetryClassInstance; + QString telemetryClientID; + bool telemetryEnabled; + bool telemetryStateForced; + + QJsonDocument getOperatingSystem(); + QJsonDocument getSystemHardware(); + QJsonDocument getApplicationSpec(); + QJsonDocument getSystemLocaleList(); + +public slots: + void pushStartupSet(); + +private slots: + void pushFinished(QNetworkReply *reply); + void registerFinished(QNetworkReply *reply); + +signals: + void pushed(); + void registered(); +}; + +extern TelemetryClass telemetryClass; + +#define Telemetry TelemetryClass::getInstance() + +#endif // TELEMETRYCLASS_H diff --git a/UserInterface.cpp b/UserInterface.cpp index 6a607b6..5948176 100755 --- a/UserInterface.cpp +++ b/UserInterface.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2016-2018 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 @@ -63,16 +63,41 @@ UserInterface::UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, D this->setWindowTitle(defaultWindowTitle.arg(tr("Select Profile"))); ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER)); + // Set Icon for Close Button if (QIcon::hasThemeIcon("dialog-close")) { ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); } + else if (QIcon::hasThemeIcon("gtk-close")) + { + ui->cmdClose->setIcon(QIcon::fromTheme("gtk-close")); + } + + // Set Icon for Reload Button + if (QIcon::hasThemeIcon("view-refresh")) + { + ui->cmdReload->setIcon(QIcon::fromTheme("view-refresh")); + } + else if (QIcon::hasThemeIcon("reload")) + { + ui->cmdReload->setIcon(QIcon::fromTheme("reload")); + } + + // Set Icon for Preferences Menu Item 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")) + { +#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 Exit Menu Item if (QIcon::hasThemeIcon("application-exit")) { #ifndef Q_OS_MACOS // Setting icon for exit/quit lead to a crash in Mac OS X diff --git a/config.h b/config.h index af810ef..d917acd 100755 --- a/config.h +++ b/config.h @@ -50,7 +50,7 @@ #ifndef GTA5SYNC_APPVER #ifndef GTA5SYNC_DAILYB -#define GTA5SYNC_APPVER "1.5.0-dev7" +#define GTA5SYNC_APPVER "1.5.0-dev8" #else #define GTA5SYNC_APPVER GTA5SYNC_DAILYB #endif diff --git a/gta5view.pro b/gta5view.pro index 2bbd837..b40de8e 100755 --- a/gta5view.pro +++ b/gta5view.pro @@ -1,6 +1,6 @@ #/***************************************************************************** #* gta5view Grand Theft Auto V Profile Viewer -#* Copyright (C) 2015-2017 Syping +#* Copyright (C) 2015-2018 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 @@ -60,9 +60,11 @@ SOURCES += main.cpp \ SnapmaticWidget.cpp \ StandardPaths.cpp \ StringParser.cpp \ + TelemetryClass.cpp \ TranslationClass.cpp \ UserInterface.cpp \ anpro/JSHighlighter.cpp \ + tmext/TelemetryClassAuthenticator.cpp \ uimod/UiModLabel.cpp \ uimod/UiModWidget.cpp @@ -98,9 +100,11 @@ HEADERS += \ SnapmaticWidget.h \ StandardPaths.h \ StringParser.h \ + TelemetryClass.h \ TranslationClass.h \ UserInterface.h \ anpro/JSHighlighter.h \ + tmext/TelemetryClassAuthenticator.h \ uimod/UiModLabel.h \ uimod/UiModWidget.h @@ -142,7 +146,7 @@ DISTFILES += res/app.rc \ lang/gta5sync_no.ts \ lang/README.txt -INCLUDEPATH += ./anpro ./uimod +INCLUDEPATH += ./anpro ./tmext ./uimod # GTA5SYNC/GTA5VIEW ONLY @@ -156,6 +160,7 @@ win32: DEFINES += GTA5SYNC_WIN win32: RC_FILE += res/app.rc win32: LIBS += -luser32 win32: CONFIG -= embed_manifest_exe +contains(DEFINES, GTA5SYNC_APV): greaterThan(QT_MAJOR_VERSION, 4): greaterThan(QT_MINOR_VERSION, 1): win32: LIBS += -ldwmapi # MAC OS X ONLY macx: ICON = res/5sync.icns @@ -208,3 +213,12 @@ contains(DEFINES, GTA5SYNC_QCONF){ INSTALLS += langfiles } } + +# TELEMETRY BASED STUFF + +!contains(DEFINES, GTA5SYNC_TELEMETRY){ + SOURCES -= TelemetryClass.cpp \ + tmext/TelemetryClassAuthenticator.cpp + HEADERS -= TelemetryClass.h \ + tmext/TelemetryClassAuthenticator.h +} diff --git a/main.cpp b/main.cpp index a6c0f5c..b2dfca2 100755 --- a/main.cpp +++ b/main.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2016-2018 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 @@ -49,6 +49,10 @@ #include #endif +#ifdef GTA5SYNC_TELEMETRY +#include "TelemetryClass.h" +#endif + int main(int argc, char *argv[]) { QApplication a(argc, argv); @@ -100,30 +104,56 @@ int main(int argc, char *argv[]) a.addLibraryPath(pluginsDir); } - TCInstance->initUserLanguage(); - TCInstance->loadTranslation(&a); - - if (isFirstStart) - { - QMessageBox::StandardButton button = QMessageBox::information(a.desktop(), QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER), QApplication::tr("

Welcome to %1!

You want to configure %1 before you start using it?").arg(GTA5SYNC_APPSTR), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); - if (button == QMessageBox::Yes) - { - ProfileDatabase profileDB; - OptionsDialog optionsDialog(&profileDB); - optionsDialog.setWindowIcon(IconLoader::loadingAppIcon()); - optionsDialog.show(); - optionsDialog.exec(); - } - settings.setValue("IsFirstStart", false); - } - - settings.endGroup(); - QStringList applicationArgs = a.arguments(); QString selectedAction; QString arg1; applicationArgs.removeAt(0); + TCInstance->initUserLanguage(); + TCInstance->loadTranslation(&a); + + if (!applicationArgs.contains("--skip-firststart")) + { + if (isFirstStart) + { + QMessageBox::StandardButton button = QMessageBox::information(a.desktop(), QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER), QApplication::tr("

Welcome to %1!

You want to configure %1 before you start using it?").arg(GTA5SYNC_APPSTR), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); + if (button == QMessageBox::Yes) + { + ProfileDatabase profileDB; + OptionsDialog optionsDialog(&profileDB); + optionsDialog.setWindowIcon(IconLoader::loadingAppIcon()); + optionsDialog.show(); + optionsDialog.exec(); + } + settings.setValue("IsFirstStart", false); + } + } + + settings.endGroup(); + +#ifdef GTA5SYNC_TELEMETRY + if (!applicationArgs.contains("--disable-telemetry")) + { + QObject::connect(Telemetry, SIGNAL(registered()), Telemetry, SLOT(pushStartupSet())); + if (!applicationArgs.contains("--skip-telemetryinit")) + { + Telemetry->init(); + if (Telemetry->canPush()) + { + Telemetry->pushStartupSet(); + } + else if (Telemetry->canRegister()) + { + Telemetry->registerClient(); + } + } + } + else + { + Telemetry->setDisabled(true); + } +#endif + for (QString currentArg : applicationArgs) { QString reworkedArg; diff --git a/res/app.rc b/res/app.rc index 03a9217..4722b1a 100755 --- a/res/app.rc +++ b/res/app.rc @@ -24,13 +24,13 @@ BEGIN BLOCK "040904b0" BEGIN VALUE "CompanyName", "Syping" - VALUE "FileDescription", "gta5view\0" - VALUE "FileVersion", "1.5.0-dev7\0" - VALUE "InternalName", "gta5view\0" - VALUE "LegalCopyright", "Copyright © 2016-2017 Syping\0" - VALUE "OriginalFilename", "gta5view.exe\0" - VALUE "ProductName", "gta5view\0" - VALUE "ProductVersion", "1.5.0-dev7\0" + VALUE "FileDescription", "gta5view" + VALUE "FileVersion", "1.5.0-dev8" + VALUE "InternalName", "gta5view" + VALUE "LegalCopyright", "Copyright © 2016-2017 Syping" + VALUE "OriginalFilename", "gta5view.exe" + VALUE "ProductName", "gta5view" + VALUE "ProductVersion", "1.5.0-dev8" END END END diff --git a/tmext/TelemetryClassAuthenticator.cpp b/tmext/TelemetryClassAuthenticator.cpp new file mode 100644 index 0000000..6fb5375 --- /dev/null +++ b/tmext/TelemetryClassAuthenticator.cpp @@ -0,0 +1,99 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2018 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "TelemetryClassAuthenticator.h" +#include +#include + +#ifndef GTA5SYNC_TELEMETRY_PUSHURL +#define GTA5SYNC_TELEMETRY_PUSHURL "" +#endif + +#ifndef GTA5SYNC_TELEMETRY_REGURL +#define GTA5SYNC_TELEMETRY_REGURL "" +#endif + +#ifndef GTA5SYNC_TELEMETRY_AUTHID +#define GTA5SYNC_TELEMETRY_AUTHID "" +#endif + +#ifndef GTA5SYNC_TELEMETRY_AUTHPW +#define GTA5SYNC_TELEMETRY_AUTHPW "" +#endif + +const QUrl TelemetryClassAuthenticator::getTrackingPushURL() +{ + if (haveAccessData()) + { + QUrl pushUrl(GTA5SYNC_TELEMETRY_PUSHURL); + QUrlQuery pushQuery(pushUrl); + if (!getTrackingAuthID().isEmpty()) { pushQuery.addQueryItem("tid", getTrackingAuthID()); } + if (!getTrackingAuthPW().isEmpty()) { pushQuery.addQueryItem("tpw", getTrackingAuthPW()); } + pushUrl.setQuery(pushQuery.query(QUrl::FullyEncoded)); + return pushUrl; + } + else + { + QUrl pushUrl(GTA5SYNC_TELEMETRY_PUSHURL); + return pushUrl; + } +} + +const QUrl TelemetryClassAuthenticator::getTrackingRegURL() +{ + if (haveAccessData()) + { + QUrl regUrl(GTA5SYNC_TELEMETRY_REGURL); + QUrlQuery regQuery(regUrl); + if (!getTrackingAuthID().isEmpty()) { regQuery.addQueryItem("tid", getTrackingAuthID()); } + if (!getTrackingAuthPW().isEmpty()) { regQuery.addQueryItem("tpw", getTrackingAuthPW()); } + regUrl.setQuery(regQuery.query(QUrl::FullyEncoded)); + return regUrl; + } + else + { + QUrl regUrl(GTA5SYNC_TELEMETRY_REGURL); + return regUrl; + } +} + +const QString TelemetryClassAuthenticator::getTrackingAuthID() +{ + return QString(GTA5SYNC_TELEMETRY_AUTHID); +} + +const QString TelemetryClassAuthenticator::getTrackingAuthPW() +{ + return QString(GTA5SYNC_TELEMETRY_AUTHPW); +} + +bool TelemetryClassAuthenticator::havePushURL() +{ + return !getTrackingPushURL().isEmpty(); +} + +bool TelemetryClassAuthenticator::haveRegURL() +{ + return !getTrackingRegURL().isEmpty(); +} + +bool TelemetryClassAuthenticator::haveAccessData() +{ + if (getTrackingAuthID().isEmpty() && getTrackingAuthPW().isEmpty()) { return false; } + return true; +} diff --git a/tmext/TelemetryClassAuthenticator.h b/tmext/TelemetryClassAuthenticator.h new file mode 100644 index 0000000..d2dd840 --- /dev/null +++ b/tmext/TelemetryClassAuthenticator.h @@ -0,0 +1,41 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2018 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef TELEMETRYCLASSAUTHENTICATOR_H +#define TELEMETRYCLASSAUTHENTICATOR_H + +#include +#include +#include +#include + +class TelemetryClassAuthenticator : public QObject +{ + Q_OBJECT +public: + static const QUrl getTrackingPushURL(); + static const QUrl getTrackingRegURL(); + static const QString getTrackingAuthID(); + static const QString getTrackingAuthPW(); + static bool havePushURL(); + static bool haveRegURL(); + static bool haveAccessData(); +}; + + +#endif // TELEMETRYCLASSAUTHENTICATOR_H From 4e3323cbf25d1d6626b78feceeec9049e55441b2 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 11 Jan 2018 09:01:32 +0100 Subject: [PATCH 027/359] fix chmod and desktop file --- AboutDialog.cpp | 0 AboutDialog.h | 0 AboutDialog.ui | 0 AppEnv.cpp | 0 AppEnv.h | 0 CrewDatabase.cpp | 0 CrewDatabase.h | 0 DatabaseThread.cpp | 0 DatabaseThread.h | 0 ExportDialog.cpp | 0 ExportDialog.h | 0 ExportDialog.ui | 0 ExportThread.cpp | 0 ExportThread.h | 0 GlobalString.cpp | 0 GlobalString.h | 0 IconLoader.cpp | 0 IconLoader.h | 0 LICENSE.GPL | 0 LICENSE.LGPL | 0 OptionsDialog.cpp | 0 OptionsDialog.h | 0 OptionsDialog.ui | 0 PictureDialog.cpp | 0 PictureDialog.h | 0 PictureDialog.ui | 0 PictureExport.cpp | 0 PictureExport.h | 0 ProfileDatabase.cpp | 0 ProfileDatabase.h | 0 ProfileInterface.cpp | 0 ProfileInterface.h | 0 ProfileInterface.ui | 0 ProfileLoader.cpp | 0 ProfileLoader.h | 0 ProfileWidget.cpp | 0 ProfileWidget.h | 0 SavegameCopy.cpp | 0 SavegameCopy.h | 0 SavegameData.cpp | 0 SavegameData.h | 0 SavegameDialog.cpp | 0 SavegameDialog.h | 0 SavegameDialog.ui | 0 SavegameWidget.cpp | 0 SavegameWidget.h | 0 SavegameWidget.ui | 0 SidebarGenerator.cpp | 0 SidebarGenerator.h | 0 SnapmaticPicture.cpp | 0 SnapmaticPicture.h | 0 SnapmaticWidget.cpp | 0 SnapmaticWidget.h | 0 SnapmaticWidget.ui | 0 StandardPaths.cpp | 0 StandardPaths.h | 0 StringParser.cpp | 0 StringParser.h | 0 UserInterface.cpp | 0 UserInterface.h | 0 UserInterface.ui | 0 config.h | 0 gta5view.pro | 0 lang/README.txt | 0 main.cpp | 0 qjson4/QJsonArray | 0 qjson4/QJsonArray.cpp | 0 qjson4/QJsonArray.h | 0 qjson4/QJsonDocument | 0 qjson4/QJsonDocument.cpp | 0 qjson4/QJsonDocument.h | 0 qjson4/QJsonObject | 0 qjson4/QJsonObject.cpp | 0 qjson4/QJsonObject.h | 0 qjson4/QJsonParseError | 0 qjson4/QJsonParseError.cpp | 0 qjson4/QJsonParseError.h | 0 qjson4/QJsonParser.cpp | 0 qjson4/QJsonParser.h | 0 qjson4/QJsonRoot | 0 qjson4/QJsonRoot.h | 0 qjson4/QJsonValue | 0 qjson4/QJsonValue.cpp | 0 qjson4/QJsonValue.h | 0 qjson4/QJsonValueRef | 0 qjson4/QJsonValueRef.cpp | 0 qjson4/QJsonValueRef.h | 0 res/5sync-48.png | Bin res/5sync.ico | Bin res/app.qrc | 0 res/app.rc | 0 res/global.de.ini | 0 res/global.en.ini | 0 res/global.ja.ini | 0 res/gta5sync_de.qm | Bin res/gta5sync_de.ts | 0 res/gta5view.desktop | 22 +++++++++++----------- res/gta5view.exe.manifest | 30 +++++++++++++++--------------- res/qt_de.qm | Bin res/qtbase_de.qm | Bin res/savegame.png | Bin uimod/UiModLabel.cpp | 0 uimod/UiModLabel.h | 0 103 files changed, 26 insertions(+), 26 deletions(-) mode change 100755 => 100644 AboutDialog.cpp mode change 100755 => 100644 AboutDialog.h mode change 100755 => 100644 AboutDialog.ui mode change 100755 => 100644 AppEnv.cpp mode change 100755 => 100644 AppEnv.h mode change 100755 => 100644 CrewDatabase.cpp mode change 100755 => 100644 CrewDatabase.h mode change 100755 => 100644 DatabaseThread.cpp mode change 100755 => 100644 DatabaseThread.h mode change 100755 => 100644 ExportDialog.cpp mode change 100755 => 100644 ExportDialog.h mode change 100755 => 100644 ExportDialog.ui mode change 100755 => 100644 ExportThread.cpp mode change 100755 => 100644 ExportThread.h mode change 100755 => 100644 GlobalString.cpp mode change 100755 => 100644 GlobalString.h mode change 100755 => 100644 IconLoader.cpp mode change 100755 => 100644 IconLoader.h mode change 100755 => 100644 LICENSE.GPL mode change 100755 => 100644 LICENSE.LGPL mode change 100755 => 100644 OptionsDialog.cpp mode change 100755 => 100644 OptionsDialog.h mode change 100755 => 100644 OptionsDialog.ui mode change 100755 => 100644 PictureDialog.cpp mode change 100755 => 100644 PictureDialog.h mode change 100755 => 100644 PictureDialog.ui mode change 100755 => 100644 PictureExport.cpp mode change 100755 => 100644 PictureExport.h mode change 100755 => 100644 ProfileDatabase.cpp mode change 100755 => 100644 ProfileDatabase.h mode change 100755 => 100644 ProfileInterface.cpp mode change 100755 => 100644 ProfileInterface.h mode change 100755 => 100644 ProfileInterface.ui mode change 100755 => 100644 ProfileLoader.cpp mode change 100755 => 100644 ProfileLoader.h mode change 100755 => 100644 ProfileWidget.cpp mode change 100755 => 100644 ProfileWidget.h mode change 100755 => 100644 SavegameCopy.cpp mode change 100755 => 100644 SavegameCopy.h mode change 100755 => 100644 SavegameData.cpp mode change 100755 => 100644 SavegameData.h mode change 100755 => 100644 SavegameDialog.cpp mode change 100755 => 100644 SavegameDialog.h mode change 100755 => 100644 SavegameDialog.ui mode change 100755 => 100644 SavegameWidget.cpp mode change 100755 => 100644 SavegameWidget.h mode change 100755 => 100644 SavegameWidget.ui mode change 100755 => 100644 SidebarGenerator.cpp mode change 100755 => 100644 SidebarGenerator.h mode change 100755 => 100644 SnapmaticPicture.cpp mode change 100755 => 100644 SnapmaticPicture.h mode change 100755 => 100644 SnapmaticWidget.cpp mode change 100755 => 100644 SnapmaticWidget.h mode change 100755 => 100644 SnapmaticWidget.ui mode change 100755 => 100644 StandardPaths.cpp mode change 100755 => 100644 StandardPaths.h mode change 100755 => 100644 StringParser.cpp mode change 100755 => 100644 StringParser.h mode change 100755 => 100644 UserInterface.cpp mode change 100755 => 100644 UserInterface.h mode change 100755 => 100644 UserInterface.ui mode change 100755 => 100644 config.h mode change 100755 => 100644 gta5view.pro mode change 100755 => 100644 lang/README.txt mode change 100755 => 100644 main.cpp mode change 100755 => 100644 qjson4/QJsonArray mode change 100755 => 100644 qjson4/QJsonArray.cpp mode change 100755 => 100644 qjson4/QJsonArray.h mode change 100755 => 100644 qjson4/QJsonDocument mode change 100755 => 100644 qjson4/QJsonDocument.cpp mode change 100755 => 100644 qjson4/QJsonDocument.h mode change 100755 => 100644 qjson4/QJsonObject mode change 100755 => 100644 qjson4/QJsonObject.cpp mode change 100755 => 100644 qjson4/QJsonObject.h mode change 100755 => 100644 qjson4/QJsonParseError mode change 100755 => 100644 qjson4/QJsonParseError.cpp mode change 100755 => 100644 qjson4/QJsonParseError.h mode change 100755 => 100644 qjson4/QJsonParser.cpp mode change 100755 => 100644 qjson4/QJsonParser.h mode change 100755 => 100644 qjson4/QJsonRoot mode change 100755 => 100644 qjson4/QJsonRoot.h mode change 100755 => 100644 qjson4/QJsonValue mode change 100755 => 100644 qjson4/QJsonValue.cpp mode change 100755 => 100644 qjson4/QJsonValue.h mode change 100755 => 100644 qjson4/QJsonValueRef mode change 100755 => 100644 qjson4/QJsonValueRef.cpp mode change 100755 => 100644 qjson4/QJsonValueRef.h mode change 100755 => 100644 res/5sync-48.png mode change 100755 => 100644 res/5sync.ico mode change 100755 => 100644 res/app.qrc mode change 100755 => 100644 res/app.rc mode change 100755 => 100644 res/global.de.ini mode change 100755 => 100644 res/global.en.ini mode change 100755 => 100644 res/global.ja.ini mode change 100755 => 100644 res/gta5sync_de.qm mode change 100755 => 100644 res/gta5sync_de.ts mode change 100755 => 100644 res/qt_de.qm mode change 100755 => 100644 res/qtbase_de.qm mode change 100755 => 100644 res/savegame.png mode change 100755 => 100644 uimod/UiModLabel.cpp mode change 100755 => 100644 uimod/UiModLabel.h diff --git a/AboutDialog.cpp b/AboutDialog.cpp old mode 100755 new mode 100644 diff --git a/AboutDialog.h b/AboutDialog.h old mode 100755 new mode 100644 diff --git a/AboutDialog.ui b/AboutDialog.ui old mode 100755 new mode 100644 diff --git a/AppEnv.cpp b/AppEnv.cpp old mode 100755 new mode 100644 diff --git a/AppEnv.h b/AppEnv.h old mode 100755 new mode 100644 diff --git a/CrewDatabase.cpp b/CrewDatabase.cpp old mode 100755 new mode 100644 diff --git a/CrewDatabase.h b/CrewDatabase.h old mode 100755 new mode 100644 diff --git a/DatabaseThread.cpp b/DatabaseThread.cpp old mode 100755 new mode 100644 diff --git a/DatabaseThread.h b/DatabaseThread.h old mode 100755 new mode 100644 diff --git a/ExportDialog.cpp b/ExportDialog.cpp old mode 100755 new mode 100644 diff --git a/ExportDialog.h b/ExportDialog.h old mode 100755 new mode 100644 diff --git a/ExportDialog.ui b/ExportDialog.ui old mode 100755 new mode 100644 diff --git a/ExportThread.cpp b/ExportThread.cpp old mode 100755 new mode 100644 diff --git a/ExportThread.h b/ExportThread.h old mode 100755 new mode 100644 diff --git a/GlobalString.cpp b/GlobalString.cpp old mode 100755 new mode 100644 diff --git a/GlobalString.h b/GlobalString.h old mode 100755 new mode 100644 diff --git a/IconLoader.cpp b/IconLoader.cpp old mode 100755 new mode 100644 diff --git a/IconLoader.h b/IconLoader.h old mode 100755 new mode 100644 diff --git a/LICENSE.GPL b/LICENSE.GPL old mode 100755 new mode 100644 diff --git a/LICENSE.LGPL b/LICENSE.LGPL old mode 100755 new mode 100644 diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp old mode 100755 new mode 100644 diff --git a/OptionsDialog.h b/OptionsDialog.h old mode 100755 new mode 100644 diff --git a/OptionsDialog.ui b/OptionsDialog.ui old mode 100755 new mode 100644 diff --git a/PictureDialog.cpp b/PictureDialog.cpp old mode 100755 new mode 100644 diff --git a/PictureDialog.h b/PictureDialog.h old mode 100755 new mode 100644 diff --git a/PictureDialog.ui b/PictureDialog.ui old mode 100755 new mode 100644 diff --git a/PictureExport.cpp b/PictureExport.cpp old mode 100755 new mode 100644 diff --git a/PictureExport.h b/PictureExport.h old mode 100755 new mode 100644 diff --git a/ProfileDatabase.cpp b/ProfileDatabase.cpp old mode 100755 new mode 100644 diff --git a/ProfileDatabase.h b/ProfileDatabase.h old mode 100755 new mode 100644 diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp old mode 100755 new mode 100644 diff --git a/ProfileInterface.h b/ProfileInterface.h old mode 100755 new mode 100644 diff --git a/ProfileInterface.ui b/ProfileInterface.ui old mode 100755 new mode 100644 diff --git a/ProfileLoader.cpp b/ProfileLoader.cpp old mode 100755 new mode 100644 diff --git a/ProfileLoader.h b/ProfileLoader.h old mode 100755 new mode 100644 diff --git a/ProfileWidget.cpp b/ProfileWidget.cpp old mode 100755 new mode 100644 diff --git a/ProfileWidget.h b/ProfileWidget.h old mode 100755 new mode 100644 diff --git a/SavegameCopy.cpp b/SavegameCopy.cpp old mode 100755 new mode 100644 diff --git a/SavegameCopy.h b/SavegameCopy.h old mode 100755 new mode 100644 diff --git a/SavegameData.cpp b/SavegameData.cpp old mode 100755 new mode 100644 diff --git a/SavegameData.h b/SavegameData.h old mode 100755 new mode 100644 diff --git a/SavegameDialog.cpp b/SavegameDialog.cpp old mode 100755 new mode 100644 diff --git a/SavegameDialog.h b/SavegameDialog.h old mode 100755 new mode 100644 diff --git a/SavegameDialog.ui b/SavegameDialog.ui old mode 100755 new mode 100644 diff --git a/SavegameWidget.cpp b/SavegameWidget.cpp old mode 100755 new mode 100644 diff --git a/SavegameWidget.h b/SavegameWidget.h old mode 100755 new mode 100644 diff --git a/SavegameWidget.ui b/SavegameWidget.ui old mode 100755 new mode 100644 diff --git a/SidebarGenerator.cpp b/SidebarGenerator.cpp old mode 100755 new mode 100644 diff --git a/SidebarGenerator.h b/SidebarGenerator.h old mode 100755 new mode 100644 diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp old mode 100755 new mode 100644 diff --git a/SnapmaticPicture.h b/SnapmaticPicture.h old mode 100755 new mode 100644 diff --git a/SnapmaticWidget.cpp b/SnapmaticWidget.cpp old mode 100755 new mode 100644 diff --git a/SnapmaticWidget.h b/SnapmaticWidget.h old mode 100755 new mode 100644 diff --git a/SnapmaticWidget.ui b/SnapmaticWidget.ui old mode 100755 new mode 100644 diff --git a/StandardPaths.cpp b/StandardPaths.cpp old mode 100755 new mode 100644 diff --git a/StandardPaths.h b/StandardPaths.h old mode 100755 new mode 100644 diff --git a/StringParser.cpp b/StringParser.cpp old mode 100755 new mode 100644 diff --git a/StringParser.h b/StringParser.h old mode 100755 new mode 100644 diff --git a/UserInterface.cpp b/UserInterface.cpp old mode 100755 new mode 100644 diff --git a/UserInterface.h b/UserInterface.h old mode 100755 new mode 100644 diff --git a/UserInterface.ui b/UserInterface.ui old mode 100755 new mode 100644 diff --git a/config.h b/config.h old mode 100755 new mode 100644 diff --git a/gta5view.pro b/gta5view.pro old mode 100755 new mode 100644 diff --git a/lang/README.txt b/lang/README.txt old mode 100755 new mode 100644 diff --git a/main.cpp b/main.cpp old mode 100755 new mode 100644 diff --git a/qjson4/QJsonArray b/qjson4/QJsonArray old mode 100755 new mode 100644 diff --git a/qjson4/QJsonArray.cpp b/qjson4/QJsonArray.cpp old mode 100755 new mode 100644 diff --git a/qjson4/QJsonArray.h b/qjson4/QJsonArray.h old mode 100755 new mode 100644 diff --git a/qjson4/QJsonDocument b/qjson4/QJsonDocument old mode 100755 new mode 100644 diff --git a/qjson4/QJsonDocument.cpp b/qjson4/QJsonDocument.cpp old mode 100755 new mode 100644 diff --git a/qjson4/QJsonDocument.h b/qjson4/QJsonDocument.h old mode 100755 new mode 100644 diff --git a/qjson4/QJsonObject b/qjson4/QJsonObject old mode 100755 new mode 100644 diff --git a/qjson4/QJsonObject.cpp b/qjson4/QJsonObject.cpp old mode 100755 new mode 100644 diff --git a/qjson4/QJsonObject.h b/qjson4/QJsonObject.h old mode 100755 new mode 100644 diff --git a/qjson4/QJsonParseError b/qjson4/QJsonParseError old mode 100755 new mode 100644 diff --git a/qjson4/QJsonParseError.cpp b/qjson4/QJsonParseError.cpp old mode 100755 new mode 100644 diff --git a/qjson4/QJsonParseError.h b/qjson4/QJsonParseError.h old mode 100755 new mode 100644 diff --git a/qjson4/QJsonParser.cpp b/qjson4/QJsonParser.cpp old mode 100755 new mode 100644 diff --git a/qjson4/QJsonParser.h b/qjson4/QJsonParser.h old mode 100755 new mode 100644 diff --git a/qjson4/QJsonRoot b/qjson4/QJsonRoot old mode 100755 new mode 100644 diff --git a/qjson4/QJsonRoot.h b/qjson4/QJsonRoot.h old mode 100755 new mode 100644 diff --git a/qjson4/QJsonValue b/qjson4/QJsonValue old mode 100755 new mode 100644 diff --git a/qjson4/QJsonValue.cpp b/qjson4/QJsonValue.cpp old mode 100755 new mode 100644 diff --git a/qjson4/QJsonValue.h b/qjson4/QJsonValue.h old mode 100755 new mode 100644 diff --git a/qjson4/QJsonValueRef b/qjson4/QJsonValueRef old mode 100755 new mode 100644 diff --git a/qjson4/QJsonValueRef.cpp b/qjson4/QJsonValueRef.cpp old mode 100755 new mode 100644 diff --git a/qjson4/QJsonValueRef.h b/qjson4/QJsonValueRef.h old mode 100755 new mode 100644 diff --git a/res/5sync-48.png b/res/5sync-48.png old mode 100755 new mode 100644 diff --git a/res/5sync.ico b/res/5sync.ico old mode 100755 new mode 100644 diff --git a/res/app.qrc b/res/app.qrc old mode 100755 new mode 100644 diff --git a/res/app.rc b/res/app.rc old mode 100755 new mode 100644 diff --git a/res/global.de.ini b/res/global.de.ini old mode 100755 new mode 100644 diff --git a/res/global.en.ini b/res/global.en.ini old mode 100755 new mode 100644 diff --git a/res/global.ja.ini b/res/global.ja.ini old mode 100755 new mode 100644 diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm old mode 100755 new mode 100644 diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts old mode 100755 new mode 100644 diff --git a/res/gta5view.desktop b/res/gta5view.desktop index 28c99d7..168bfd0 100644 --- a/res/gta5view.desktop +++ b/res/gta5view.desktop @@ -1,11 +1,11 @@ -[Desktop Entry] -Version=1.0 -Encoding=UTF-8 -Type=Application -Name=gta5view -Comment=gta5view -Categories=Qt;Application;Utility; -Exec=gta5view -Icon=gta5view -Terminal=false -StartupNotify=false +[Desktop Entry] +Version=1.0 +Encoding=UTF-8 +Type=Application +Name=gta5view +Comment=gta5view +Categories=Qt;Application;Utility; +Exec=gta5view +Icon=gta5view +Terminal=false +StartupNotify=false diff --git a/res/gta5view.exe.manifest b/res/gta5view.exe.manifest index c9bde0a..3f57eaf 100644 --- a/res/gta5view.exe.manifest +++ b/res/gta5view.exe.manifest @@ -1,15 +1,15 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/res/qt_de.qm b/res/qt_de.qm old mode 100755 new mode 100644 diff --git a/res/qtbase_de.qm b/res/qtbase_de.qm old mode 100755 new mode 100644 diff --git a/res/savegame.png b/res/savegame.png old mode 100755 new mode 100644 diff --git a/uimod/UiModLabel.cpp b/uimod/UiModLabel.cpp old mode 100755 new mode 100644 diff --git a/uimod/UiModLabel.h b/uimod/UiModLabel.h old mode 100755 new mode 100644 From 27c242cf6810619e855aa27947751dd7161a6510 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 11 Jan 2018 09:23:02 +0100 Subject: [PATCH 028/359] update travis script --- .travis.yml | 43 +++++++++++----------- tmext/TelemetryClassAuthenticator.cpp.enc | Bin 0 -> 2944 bytes 2 files changed, 22 insertions(+), 21 deletions(-) create mode 100644 tmext/TelemetryClassAuthenticator.cpp.enc diff --git a/.travis.yml b/.travis.yml index 1cff3d2..74a2569 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,38 +3,39 @@ sudo: required language: cpp -compiler: clang - service: - docker matrix: include: - - env: - - BUILD_SCRIPT=debian32_travis.sh - - QMAKE_FLAGS_QT4=QMAKE_CXXFLAGS+=-Wno-missing-field-initializers - - APT_INSTALL=clang - - env: - - BUILD_SCRIPT=debian64_travis.sh - - QMAKE_FLAGS_QT4=QMAKE_CXXFLAGS+=-Wno-missing-field-initializers - - APT_INSTALL=clang - - env: - - BUILD_SCRIPT=windows_travis.sh - - QT_SELECT=qt5-i686-w64-mingw32 - - env: - - BUILD_SCRIPT=windows_travis.sh - - QT_SELECT=qt5-x86_64-w64-mingw32 - - EXECUTABLE_ARCH=_x64 - + - env: + - BUILD_SCRIPT=debian32_travis.sh + - QMAKE_FLAGS_QT4=QMAKE_CXXFLAGS+=-Wno-missing-field-initializers + - APT_INSTALL=clang + - env: + - BUILD_SCRIPT=debian64_travis.sh + - QMAKE_FLAGS_QT4=QMAKE_CXXFLAGS+=-Wno-missing-field-initializers + - APT_INSTALL=clang + - env: + - BUILD_SCRIPT=windows_travis.sh + - QT_SELECT=qt5-i686-w64-mingw32 + - env: + - BUILD_SCRIPT=windows_travis.sh + - QT_SELECT=qt5-x86_64-w64-mingw32 + - EXECUTABLE_ARCH=_x64 + +before_install: + - cd tmext && rm -rf TelemetryClassAuthenticator.cpp && openssl aes-256-cbc -K $encrypted_55502862a724_key -iv $encrypted_55502862a724_iv -in TelemetryClassAuthenticator.cpp.enc -out TelemetryClassAuthenticator.cpp -d && cd .. + script: - - .travis/travis.sh + - ".travis/travis.sh" deploy: provider: releases api_key: - secure: "o7VneEz1aHfdVwZvOZLfopf6uJWNrFsZaBvunTmXFzpmNFhlNS1qwqgMUkIA2yBRbZ3wIzVs4vfwIHv7W9yE/PqK+AYL+R8+AwKGrwlgT4HqJNuk6VM/LNJ6GwT/qkQuaoOVw29bUjmzzgIRdHmw53SlJv6Hh1VE8HphlTT//aex6nCfcFhUZ0BETdZDWz5FSHwL3NalUoqfKfQrJeky5RXzCyCANQC2tKt0bV46GaWIgWrDo2KCTNqPtRWWf5GDmnkXE5IYRMQ3mXvO9iYh0v5Y2jo4PiXGUiFUU6Z3aAWFAiPdGclrBO697cf3lCTzDMhuCETR153qFYsLShUlFf61ITAmCeHAWETjZDri0lmPONo3GoNB6alGfYEA51qw14kXakrTpICtTJj7gw/gtUYOabW6hrzmieNzMBIy62RikDPjyakFnuwW2qNHRlD65e0jYv+6nCpb6E+OV16Ysh1zhV2vTfpfzVmSuyu2J+ELqXD3OZCXRSPpDIih9UQ8335p8FBji6jHORcgym/TRgdgRmENibh8tLzWp+UjpWHuWfcpvZgOskjfwU0iDMCayMJ7tDpOhXHcAhDRnd6XRIiOJ5YZCzflj2nEwmt3YUd7DwXS/AU+WHOmcNQBjXBxF/FJa35XXcy3HKJM5TTKqtph3medo30us5yXHeG6NNg=" + secure: o7VneEz1aHfdVwZvOZLfopf6uJWNrFsZaBvunTmXFzpmNFhlNS1qwqgMUkIA2yBRbZ3wIzVs4vfwIHv7W9yE/PqK+AYL+R8+AwKGrwlgT4HqJNuk6VM/LNJ6GwT/qkQuaoOVw29bUjmzzgIRdHmw53SlJv6Hh1VE8HphlTT//aex6nCfcFhUZ0BETdZDWz5FSHwL3NalUoqfKfQrJeky5RXzCyCANQC2tKt0bV46GaWIgWrDo2KCTNqPtRWWf5GDmnkXE5IYRMQ3mXvO9iYh0v5Y2jo4PiXGUiFUU6Z3aAWFAiPdGclrBO697cf3lCTzDMhuCETR153qFYsLShUlFf61ITAmCeHAWETjZDri0lmPONo3GoNB6alGfYEA51qw14kXakrTpICtTJj7gw/gtUYOabW6hrzmieNzMBIy62RikDPjyakFnuwW2qNHRlD65e0jYv+6nCpb6E+OV16Ysh1zhV2vTfpfzVmSuyu2J+ELqXD3OZCXRSPpDIih9UQ8335p8FBji6jHORcgym/TRgdgRmENibh8tLzWp+UjpWHuWfcpvZgOskjfwU0iDMCayMJ7tDpOhXHcAhDRnd6XRIiOJ5YZCzflj2nEwmt3YUd7DwXS/AU+WHOmcNQBjXBxF/FJa35XXcy3HKJM5TTKqtph3medo30us5yXHeG6NNg= file_glob: true - file: "assets/*" + file: assets/* skip_cleanup: true on: tags: true diff --git a/tmext/TelemetryClassAuthenticator.cpp.enc b/tmext/TelemetryClassAuthenticator.cpp.enc new file mode 100644 index 0000000000000000000000000000000000000000..04589890498d70f4a4d0f60ff6129f277e148a93 GIT binary patch literal 2944 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 literal 0 HcmV?d00001 From ed05abc8ae0a4fe183a3ad2d58d50f177e6b4515 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 11 Jan 2018 09:30:39 +0100 Subject: [PATCH 029/359] add telemetry to build scripts --- .travis/debian_build.sh | 2 +- .travis/windows_build.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis/debian_build.sh b/.travis/debian_build.sh index 1a4db3a..8e3b89b 100755 --- a/.travis/debian_build.sh +++ b/.travis/debian_build.sh @@ -21,7 +21,7 @@ mkdir -p /usr/share/gta5view && \ # Starting build cd qt5 && \ -qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 $QMAKE_FLAGS_QT5 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ +qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 $QMAKE_FLAGS_QT5 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY ../../gta5view.pro && \ make -j 4 && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=$PACKAGE_BUILD --pkggroup=utility --maintainer="Syping \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=$PROJECT_DIR/assets && \ cd .. && \ diff --git a/.travis/windows_build.sh b/.travis/windows_build.sh index 5dd8937..bfe407f 100755 --- a/.travis/windows_build.sh +++ b/.travis/windows_build.sh @@ -11,7 +11,7 @@ mkdir assets && \ # Starting build cd build && \ -qmake-static $QMAKE_FLAGS DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" ../gta5view.pro && \ +qmake-static $QMAKE_FLAGS DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY ../gta5view.pro && \ make -j 4 && \ cp -Rf release/*.exe $PROJECT_DIR/assets/$GTA5VIEW_EXECUTABLE && \ cd $PROJECT_DIR/assets && \ From 68c8a971eec95cb036cdeddf068b3998ad3e0435 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 11 Jan 2018 09:38:43 +0100 Subject: [PATCH 030/359] fix -Wswitch warning --- TelemetryClass.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/TelemetryClass.cpp b/TelemetryClass.cpp index d772f25..de63174 100644 --- a/TelemetryClass.cpp +++ b/TelemetryClass.cpp @@ -119,6 +119,10 @@ void TelemetryClass::push(TelemetryCategory category) case TelemetryCategory::ApplicationSpec: push(category, getApplicationSpec()); break; + case TelemetryCategory::UserFeedback: + break; + case TelemetryCategory::CustomEmitted: + break; } } From 26a24122e139bd420565a090767944e0b2e27464 Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 16 Jan 2018 00:13:08 +0100 Subject: [PATCH 031/359] improved telemetry + player list and fixed some other issues --- .travis.yml | 2 +- .travis/debian32_travis.sh | 6 +- .travis/debian64_travis.sh | 6 +- .travis/debian_build.sh | 12 +- .travis/debian_install.sh | 2 +- .travis/source.sh | 4 + .travis/travis.sh | 4 +- .travis/ubuntu64_travis.sh | 2 +- .travis/windows_build.sh | 16 +- .travis/windows_travis.sh | 8 +- AboutDialog.ui | 3 + GlobalString.cpp | 4 +- ImageEditorDialog.cpp | 1 - JsonEditorDialog.cpp | 1 - OptionsDialog.cpp | 93 +++- OptionsDialog.h | 3 + OptionsDialog.ui | 188 ++++++- PlayerListDialog.cpp | 51 +- PlayerListDialog.ui | 3 + ProfileInterface.cpp | 74 ++- SavegameDialog.cpp | 19 + SavegameDialog.h | 18 + SnapmaticEditor.cpp | 19 +- SnapmaticEditor.ui | 11 +- TelemetryClass.cpp | 155 +++++- TelemetryClass.h | 17 +- TranslationClass.h | 2 +- config.h | 16 +- lang/gta5sync_no.ts | 1049 +++++++++++++++++++++++++----------- main.cpp | 91 +++- res/app.rc | 6 +- res/gta5sync_de.qm | Bin 42321 -> 44925 bytes res/gta5sync_de.ts | 743 +++++++++++++++---------- res/gta5sync_en_US.qm | Bin 24091 -> 23883 bytes res/gta5sync_en_US.ts | 700 ++++++++++++++---------- res/gta5sync_fr.qm | Bin 26035 -> 25986 bytes res/gta5sync_fr.ts | 696 ++++++++++++++---------- res/gta5sync_ru.qm | Bin 31928 -> 31871 bytes res/gta5sync_ru.ts | 696 ++++++++++++++---------- 39 files changed, 3134 insertions(+), 1587 deletions(-) create mode 100755 .travis/source.sh diff --git a/.travis.yml b/.travis.yml index 74a2569..a33c7dc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,7 +25,7 @@ matrix: - EXECUTABLE_ARCH=_x64 before_install: - - cd tmext && rm -rf TelemetryClassAuthenticator.cpp && openssl aes-256-cbc -K $encrypted_55502862a724_key -iv $encrypted_55502862a724_iv -in TelemetryClassAuthenticator.cpp.enc -out TelemetryClassAuthenticator.cpp -d && cd .. + - ".travis/source.sh" script: - ".travis/travis.sh" diff --git a/.travis/debian32_travis.sh b/.travis/debian32_travis.sh index bcd8ce2..a4e6c75 100755 --- a/.travis/debian32_travis.sh +++ b/.travis/debian32_travis.sh @@ -3,9 +3,9 @@ DOCKER_IMAGE=i386/debian:jessie PROJECT_DIR_DOCKER=/gta5view -cd $PROJECT_DIR && \ -docker pull $DOCKER_IMAGE && \ +cd ${PROJECT_DIR} && \ +docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ - $DOCKER_IMAGE \ + ${DOCKER_IMAGE} \ /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/debian_install.sh && .travis/debian_build.sh" diff --git a/.travis/debian64_travis.sh b/.travis/debian64_travis.sh index 63d4610..d9b80fb 100755 --- a/.travis/debian64_travis.sh +++ b/.travis/debian64_travis.sh @@ -3,9 +3,9 @@ DOCKER_IMAGE=debian:jessie PROJECT_DIR_DOCKER=/gta5view -cd $PROJECT_DIR && \ -docker pull $DOCKER_IMAGE && \ +cd ${PROJECT_DIR} && \ +docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ - $DOCKER_IMAGE \ + ${DOCKER_IMAGE} \ /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/debian_install.sh && .travis/debian_build.sh" diff --git a/.travis/debian_build.sh b/.travis/debian_build.sh index 8e3b89b..2fcb0fe 100755 --- a/.travis/debian_build.sh +++ b/.travis/debian_build.sh @@ -1,8 +1,8 @@ #!/bin/bash # Creating folders -cd $PROJECT_DIR && \ -echo "gta5view build version is $APPLICATION_VERSION" && \ +cd ${PROJECT_DIR} && \ +echo "gta5view build version is ${APPLICATION_VERSION}" && \ mkdir build && \ mkdir assets && \ chmod -x res/gta5sync_*.qm res/gta5view.desktop res/gta5view.png && \ @@ -21,11 +21,11 @@ mkdir -p /usr/share/gta5view && \ # Starting build cd qt5 && \ -qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 $QMAKE_FLAGS_QT5 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY ../../gta5view.pro && \ +qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \ make -j 4 && \ -checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=$PACKAGE_BUILD --pkggroup=utility --maintainer="Syping \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=$PROJECT_DIR/assets && \ +checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=${PROJECT_DIR}/assets && \ cd .. && \ cd qt4 && \ -qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 $QMAKE_FLAGS_QT4 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ +qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT4} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ make -j 4 && \ -checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=$PACKAGE_BUILD --pkggroup=utility --maintainer="Syping \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=$PROJECT_DIR/assets +checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=${PROJECT_DIR}/assets diff --git a/.travis/debian_install.sh b/.travis/debian_install.sh index 2c7092b..c0fb4e7 100755 --- a/.travis/debian_install.sh +++ b/.travis/debian_install.sh @@ -2,4 +2,4 @@ # Install packages apt-get update -qq && \ -apt-get install -qq $APT_INSTALL checkinstall dpkg-dev fakeroot g++ gcc qtbase5-dev qt5-qmake qttranslations5-l10n libqt4-dev +apt-get install -qq ${APT_INSTALL} checkinstall dpkg-dev fakeroot g++ gcc qtbase5-dev qt5-qmake qttranslations5-l10n libqt4-dev diff --git a/.travis/source.sh b/.travis/source.sh new file mode 100755 index 0000000..49d471d --- /dev/null +++ b/.travis/source.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +rm -rf tmext/TelemetryClassAuthenticator.cpp && \ +openssl aes-256-cbc -K $encrypted_55502862a724_key -iv $encrypted_55502862a724_iv -in tmext/TelemetryClassAuthenticator.cpp.enc -out tmext/TelemetryClassAuthenticator.cpp -d diff --git a/.travis/travis.sh b/.travis/travis.sh index 84571d4..b3da959 100755 --- a/.travis/travis.sh +++ b/.travis/travis.sh @@ -8,7 +8,7 @@ if [ `git name-rev --tags --name-only $(git rev-parse HEAD)` == "undefined" ]; t export PACKAGE_VERSION=$(grep -oE '^[^\-]*' <<< $APPLICATION_VERSION) export PACKAGE_BUILD=$(grep -oP '\-\K.+' <<< $APPLICATION_VERSION) export EXECUTABLE_VERSION=${PACKAGE_VERSION}${PACKAGE_BUILD} -if [ "$PACKAGE_BUILD" == "" ]; then export PACKAGE_BUILD=$TRAVIS_BUILD_NUMBER; fi +if [ "$PACKAGE_BUILD" == "" ]; then export PACKAGE_BUILD=${TRAVIS_BUILD_NUMBER}; fi export PROJECT_DIR=$(pwd) -.travis/$BUILD_SCRIPT +.travis/${BUILD_SCRIPT} diff --git a/.travis/ubuntu64_travis.sh b/.travis/ubuntu64_travis.sh index 08f790b..50de7d3 100755 --- a/.travis/ubuntu64_travis.sh +++ b/.travis/ubuntu64_travis.sh @@ -5,4 +5,4 @@ sudo .travis/debian_install.sh && \ # Build gta5view sudo .travis/debian_build.sh && \ -cd $PROJECT_DIR +cd ${PROJECT_DIR} diff --git a/.travis/windows_build.sh b/.travis/windows_build.sh index bfe407f..49b6b38 100755 --- a/.travis/windows_build.sh +++ b/.travis/windows_build.sh @@ -1,18 +1,18 @@ #!/bin/bash -export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe +export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe && \ # Creating folders -cd $PROJECT_DIR && \ -echo "gta5view build version is $APPLICATION_VERSION" && \ -echo "gta5view executable is $GTA5VIEW_EXECUTABLE" && \ +cd ${PROJECT_DIR} && \ +echo "gta5view build version is ${APPLICATION_VERSION}" && \ +echo "gta5view executable is ${GTA5VIEW_EXECUTABLE}" && \ mkdir build && \ mkdir assets && \ # Starting build cd build && \ -qmake-static $QMAKE_FLAGS DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY ../gta5view.pro && \ +qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ make -j 4 && \ -cp -Rf release/*.exe $PROJECT_DIR/assets/$GTA5VIEW_EXECUTABLE && \ -cd $PROJECT_DIR/assets && \ -upx --best $GTA5VIEW_EXECUTABLE +cp -Rf release/*.exe ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} && \ +cd ${PROJECT_DIR}/assets && \ +upx --best ${GTA5VIEW_EXECUTABLE} diff --git a/.travis/windows_travis.sh b/.travis/windows_travis.sh index a6181cb..4811eb2 100755 --- a/.travis/windows_travis.sh +++ b/.travis/windows_travis.sh @@ -1,12 +1,12 @@ #!/bin/bash QT_VERSION=5.6.3 -DOCKER_IMAGE=syping/qt5-static-mingw:$QT_VERSION +DOCKER_IMAGE=syping/qt5-static-mingw:${QT_VERSION} PROJECT_DIR_DOCKER=/gta5view -cd $PROJECT_DIR && \ -docker pull $DOCKER_IMAGE && \ +cd ${PROJECT_DIR} && \ +docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ - $DOCKER_IMAGE \ + ${DOCKER_IMAGE} \ /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/windows_build.sh" diff --git a/AboutDialog.ui b/AboutDialog.ui index 9419485..5093373 100644 --- a/AboutDialog.ui +++ b/AboutDialog.ui @@ -46,6 +46,9 @@ Running with Qt %6<br/> true + + Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse + diff --git a/GlobalString.cpp b/GlobalString.cpp index 77c1591..4aa7aad 100644 --- a/GlobalString.cpp +++ b/GlobalString.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2016-2018 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 @@ -74,5 +74,5 @@ QString GlobalString::getLanguageFile() QString GlobalString::getLanguage() { - return TCInstance->getCurrentAreaLanguage(); + return Translator->getCurrentAreaLanguage(); } diff --git a/ImageEditorDialog.cpp b/ImageEditorDialog.cpp index b4a2589..749e412 100644 --- a/ImageEditorDialog.cpp +++ b/ImageEditorDialog.cpp @@ -37,7 +37,6 @@ ImageEditorDialog::ImageEditorDialog(SnapmaticPicture *picture, QString profileN setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); ui->setupUi(this); - ui->cmdClose->setDefault(true); ui->cmdClose->setFocus(); // Set Icon for Close Button diff --git a/JsonEditorDialog.cpp b/JsonEditorDialog.cpp index fb9ec6c..9aaa392 100644 --- a/JsonEditorDialog.cpp +++ b/JsonEditorDialog.cpp @@ -37,7 +37,6 @@ JsonEditorDialog::JsonEditorDialog(SnapmaticPicture *picture, QWidget *parent) : setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowMinMaxButtonsHint); ui->setupUi(this); - ui->cmdClose->setDefault(true); ui->cmdClose->setFocus(); // Set Icon for Close Button diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp index 31f8aa4..f80f0a7 100644 --- a/OptionsDialog.cpp +++ b/OptionsDialog.cpp @@ -25,17 +25,25 @@ #include "config.h" #include #include +#include #include #include +#include #include #include #include +#include #include #include +#include #include #include #include +#ifdef GTA5SYNC_TELEMETRY +#include "TelemetryClass.h" +#endif + OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : QDialog(parent), profileDB(profileDB), ui(new Ui::OptionsDialog) @@ -47,6 +55,7 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : ui->setupUi(this); ui->tabWidget->setCurrentIndex(0); ui->labPicCustomRes->setVisible(false); + ui->cmdCancel->setFocus(); QRect desktopResolution = QApplication::desktop()->screenGeometry(this); int desktopSizeWidth = desktopResolution.width(); @@ -91,6 +100,7 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : setupPictureSettings(); setupCustomGTAFolder(); setupInterfaceSettings(); + setupStatisticsSettings(); setupSnapmaticPictureViewer(); #ifndef Q_QS_ANDROID @@ -177,7 +187,7 @@ void OptionsDialog::setupLanguageBox() } QString aCurrentLanguage = QString("en_GB"); - if (TCInstance->isLanguageLoaded()) { aCurrentLanguage = TCInstance->getCurrentLanguage(); } + if (Translator->isLanguageLoaded()) { aCurrentLanguage = Translator->getCurrentLanguage(); } QLocale currentLocale = QLocale(aCurrentLanguage); ui->labCurrentLanguage->setText(tr("Current: %1").arg(currentLocale.nativeLanguageName() % " (" % currentLocale.nativeCountryName() % ") [" % aCurrentLanguage % "]")); @@ -216,7 +226,7 @@ void OptionsDialog::setupLanguageBox() } } - QString aCurrentAreaLanguage = TCInstance->getCurrentAreaLanguage(); + QString aCurrentAreaLanguage = Translator->getCurrentAreaLanguage(); if (QFile::exists(":/global/global." % currentAreaLanguage % ".loc")) { QFile locFile(":/global/global." % currentAreaLanguage % ".loc"); @@ -396,6 +406,15 @@ void OptionsDialog::applySettings() settings->setValue("AlwaysUseMessageFont", ui->cbAlwaysUseMessageFont->isChecked()); settings->endGroup(); +#ifdef GTA5SYNC_TELEMETRY + settings->beginGroup("Telemetry"); + settings->setValue("PushAppConf", ui->cbAppConfigStats->isChecked()); + if (!Telemetry->isStateForced()) { settings->setValue("IsEnabled", ui->cbParticipateStats->isChecked()); } + settings->endGroup(); + Telemetry->refresh(); + Telemetry->work(); +#endif + #if QT_VERSION >= 0x050000 bool languageChanged = ui->cbLanguage->currentData().toString() != currentLanguage; bool languageAreaChanged = ui->cbAreaLanguage->currentData().toString() != currentAreaLanguage; @@ -405,13 +424,13 @@ void OptionsDialog::applySettings() #endif if (languageChanged) { - TCInstance->unloadTranslation(qApp); - TCInstance->initUserLanguage(); - TCInstance->loadTranslation(qApp); + Translator->unloadTranslation(qApp); + Translator->initUserLanguage(); + Translator->loadTranslation(qApp); } else if (languageAreaChanged) { - TCInstance->initUserLanguage(); + Translator->initUserLanguage(); } emit settingsApplied(newContentMode, languageChanged); @@ -527,6 +546,44 @@ void OptionsDialog::setupPictureSettings() settings->endGroup(); } +void OptionsDialog::setupStatisticsSettings() +{ +#ifdef GTA5SYNC_TELEMETRY + ui->cbParticipateStats->setText(tr("Participate in %1 User Statistics").arg(GTA5SYNC_APPSTR)); + ui->labUserStats->setText(QString("%1").arg(tr("View %1 User Statistics Online").arg(GTA5SYNC_APPSTR), TelemetryClass::getWebURL().toString())); + + ui->gbUserFeedback->setVisible(false); + // settings->beginGroup("Startup"); + // if (settings->value("IsFirstStart", true).toBool() == true) + // { + // ui->gbUserFeedback->setVisible(false); + // } + // settings->endGroup(); + + settings->beginGroup("Telemetry"); + ui->cbParticipateStats->setChecked(Telemetry->isEnabled()); + ui->cbAppConfigStats->setChecked(settings->value("PushAppConf", false).toBool()); + settings->endGroup(); + + if (Telemetry->isStateForced()) + { + ui->cbParticipateStats->setEnabled(false); + } + + if (Telemetry->isRegistered()) + { + ui->labParticipationID->setText(tr("Participation ID: %1").arg(Telemetry->getRegisteredID())); + } + else + { + ui->labParticipationID->setText(tr("Participation ID: %1").arg(tr("Not registered"))); + ui->cmdCopyStatsID->setVisible(false); + } +#else + ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabStats)); +#endif +} + void OptionsDialog::on_cbIgnoreAspectRatio_toggled(bool checked) { if (checked) @@ -585,3 +642,27 @@ void OptionsDialog::on_cbDefaultStyle_toggled(bool checked) { ui->cbStyleList->setDisabled(checked); } + +void OptionsDialog::on_cmdUserFeedbackSend_clicked() +{ +#ifdef GTA5SYNC_TELEMETRY + if (ui->txtUserFeedback->toPlainText().length() < 1024 && ui->txtUserFeedback->toPlainText().length() >= 3) + { + QJsonDocument feedback; + QJsonObject feedbackObject; + feedbackObject["Message"] = ui->txtUserFeedback->toPlainText(); + feedback.setObject(feedbackObject); + Telemetry->push(TelemetryCategory::UserFeedback, feedback); + ui->txtUserFeedback->setPlainText(QString()); + } + else + { + QMessageBox::information(this, tr("User Feedback"), tr("A feedback message have to between 3-1024 characters long")); + } +#endif +} + +void OptionsDialog::on_cmdCopyStatsID_clicked() +{ + QApplication::clipboard()->setText(Telemetry->getRegisteredID()); +} diff --git a/OptionsDialog.h b/OptionsDialog.h index 03d2e81..ae086ba 100644 --- a/OptionsDialog.h +++ b/OptionsDialog.h @@ -47,6 +47,8 @@ private slots: void on_cbIgnoreAspectRatio_toggled(bool checked); void on_cmdExploreFolder_clicked(); void on_cbDefaultStyle_toggled(bool checked); + void on_cmdUserFeedbackSend_clicked(); + void on_cmdCopyStatsID_clicked(); signals: void settingsApplied(int contentMode, bool languageChanged); @@ -76,6 +78,7 @@ private: void setupPictureSettings(); void setupCustomGTAFolder(); void setupInterfaceSettings(); + void setupStatisticsSettings(); void setupSnapmaticPictureViewer(); void applySettings(); }; diff --git a/OptionsDialog.ui b/OptionsDialog.ui index 1a70c0f..2e8d394 100644 --- a/OptionsDialog.ui +++ b/OptionsDialog.ui @@ -7,7 +7,7 @@ 0 0 435 - 405 + 464 @@ -20,7 +20,7 @@ - 0 + 3 @@ -382,6 +382,184 @@ + + + Feedback + + + + + + Participation + + + + + + Participate in %1 User Statistics + + + + + + + <a href="%2">%1</a> + + + true + + + true + + + Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse + + + + + + + + + + Categorys + + + + + + false + + + Hardware, Application and OS Specification + + + true + + + + + + + false + + + System Language Configuration + + + true + + + + + + + Application Configuration + + + + + + + + + + Other + + + + + + + 0 + 0 + + + + Participation ID: %1 + + + true + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + &Copy + + + false + + + + + + + + + + User Feedback + + + + + + + + + + + Limit: 1 message/day + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + &Send + + + false + + + + + + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + Interface @@ -401,6 +579,9 @@ Current: %1 + + true + @@ -420,6 +601,9 @@ Current: %1 + + true + diff --git a/PlayerListDialog.cpp b/PlayerListDialog.cpp index 5035f38..f828715 100644 --- a/PlayerListDialog.cpp +++ b/PlayerListDialog.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2016-2018 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 @@ -34,9 +34,7 @@ PlayerListDialog::PlayerListDialog(QStringList players, ProfileDatabase *profile setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); listUpdated = false; - ui->setupUi(this); - ui->cmdCancel->setDefault(true); ui->cmdCancel->setFocus(); // Set Icon for Apply Button @@ -150,16 +148,19 @@ void PlayerListDialog::drawSwitchButtons() QPainter avPainter(&avImage); avPainter.setFont(painterFont); avPainter.setBrush(palette.buttonText()); + avPainter.setPen(palette.buttonText().color()); avPainter.drawText(0, 0, makeAvSize, makeAvSize, Qt::AlignCenter | Qt::TextDontClip, "<"); avPainter.end(); QPainter sePainter(&seImage); sePainter.setFont(painterFont); sePainter.setBrush(palette.buttonText()); + sePainter.setPen(palette.buttonText().color()); sePainter.drawText(0, 0, makeSeSize, makeSeSize, Qt::AlignCenter | Qt::TextDontClip, ">"); sePainter.end(); QPainter adPainter(&adImage); adPainter.setFont(painterFont); adPainter.setBrush(palette.buttonText()); + adPainter.setPen(palette.buttonText().color()); adPainter.drawText(0, 0, makeAdSize, makeAdSize, Qt::AlignCenter | Qt::TextDontClip, "+"); adPainter.end(); @@ -182,24 +183,32 @@ void PlayerListDialog::buildInterface() const QStringList dbPlayers = profileDB->getPlayers(); for (QString sePlayer : players) { - ui->listSePlayers->addItem(QString("%1 (%2)").arg(sePlayer, profileDB->getPlayerName(sePlayer))); + QListWidgetItem *playerItem = new QListWidgetItem(profileDB->getPlayerName(sePlayer)); + playerItem->setData(Qt::UserRole, sePlayer); + ui->listSePlayers->addItem(playerItem); } for (QString dbPlayer : dbPlayers) { if (!players.contains(dbPlayer)) { - ui->listAvPlayers->addItem(QString("%1 (%2)").arg(dbPlayer, profileDB->getPlayerName(dbPlayer))); + QListWidgetItem *playerItem = new QListWidgetItem(profileDB->getPlayerName(dbPlayer)); + playerItem->setData(Qt::UserRole, dbPlayer); + ui->listAvPlayers->addItem(playerItem); } } + ui->listAvPlayers->sortItems(Qt::AscendingOrder); } void PlayerListDialog::on_cmdMakeAv_clicked() { for (QListWidgetItem *item : ui->listSePlayers->selectedItems()) { - QString playerItemText = item->text(); + QString playerName = item->text(); + int playerID = item->data(Qt::UserRole).toInt(); delete item; - ui->listAvPlayers->addItem(playerItemText); + QListWidgetItem *playerItem = new QListWidgetItem(playerName); + playerItem->setData(Qt::UserRole, playerID); + ui->listAvPlayers->addItem(playerItem); ui->listAvPlayers->sortItems(Qt::AscendingOrder); } } @@ -214,9 +223,12 @@ void PlayerListDialog::on_cmdMakeSe_clicked() } for (QListWidgetItem *item : ui->listAvPlayers->selectedItems()) { - QString playerItemText = item->text(); + QString playerName = item->text(); + int playerID = item->data(Qt::UserRole).toInt(); delete item; - ui->listSePlayers->addItem(playerItemText); + QListWidgetItem *playerItem = new QListWidgetItem(playerName); + playerItem->setData(Qt::UserRole, playerID); + ui->listSePlayers->addItem(playerItem); } } @@ -229,27 +241,30 @@ void PlayerListDialog::on_cmdMakeAd_clicked() for (int i = 0; i < ui->listAvPlayers->count(); ++i) { QListWidgetItem *item = ui->listAvPlayers->item(i); - QString playerItemText = item->text(); - if (playerItemText.split(" ").at(0) == QString::number(playerID)) + QString itemPlayerName = item->text(); + int itemPlayerID = item->data(Qt::UserRole).toInt(); + if (itemPlayerID == playerID) { delete item; - ui->listSePlayers->addItem(playerItemText); + QListWidgetItem *playerItem = new QListWidgetItem(itemPlayerName); + playerItem->setData(Qt::UserRole, playerID); + ui->listSePlayers->addItem(playerItem); return; } } for (int i = 0; i < ui->listSePlayers->count(); ++i) { QListWidgetItem *item = ui->listSePlayers->item(i); - QString playerItemText = item->text(); - if (playerItemText.split(" ").at(0) == QString::number(playerID)) + int itemPlayerID = item->data(Qt::UserRole).toInt(); + if (itemPlayerID == playerID) { QMessageBox::warning(this, tr("Add Player..."), tr("Failed to add Player %1 because Player %1 is already added!").arg(QString::number(playerID))); - //ui->listSePlayers->setCurrentItem(item); return; } } - QString playerItemText = QString("%1 (%1)").arg(QString::number(playerID)); - ui->listSePlayers->addItem(playerItemText); + QListWidgetItem *playerItem = new QListWidgetItem(QString::number(playerID)); + playerItem->setData(Qt::UserRole, playerID); + ui->listSePlayers->addItem(playerItem); } } @@ -258,7 +273,7 @@ void PlayerListDialog::on_cmdApply_clicked() players.clear(); for (int i = 0; i < ui->listSePlayers->count(); ++i) { - players += ui->listSePlayers->item(i)->text().split(" ").at(0); + players += ui->listSePlayers->item(i)->data(Qt::UserRole).toString(); } emit playerListUpdated(players); listUpdated = true; diff --git a/PlayerListDialog.ui b/PlayerListDialog.ui index 6373657..7db340b 100644 --- a/PlayerListDialog.ui +++ b/PlayerListDialog.ui @@ -105,6 +105,9 @@ + + QAbstractItemView::InternalMove + QAbstractItemView::ExtendedSelection diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index f44af9d..231598c 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -1046,7 +1046,7 @@ void ProfileInterface::exportSelected() if (errorStr != "") { errorStr.remove(0, 2); - QMessageBox::warning(this, tr("Export selected"), tr("Export failed with...\n\n%1").arg(errorStr)); + QMessageBox::warning(this, tr("Export selected..."), tr("Export failed with...\n\n%1").arg(errorStr)); } if (exportThread->isFinished()) @@ -1066,7 +1066,7 @@ void ProfileInterface::exportSelected() } else { - QMessageBox::information(this, tr("Export selected"), tr("No Snapmatic pictures or Savegames files are selected")); + QMessageBox::information(this, tr("Export selected..."), tr("No Snapmatic pictures or Savegames files are selected")); } } @@ -1160,7 +1160,7 @@ void ProfileInterface::settingsApplied(int _contentMode, bool languageChanged) void ProfileInterface::enableSelected() { - int fails = 0; + QList snapmaticWidgets; for (ProfileWidget *widget : widgets.keys()) { if (widget->isSelected()) @@ -1168,18 +1168,33 @@ void ProfileInterface::enableSelected() if (widget->getWidgetType() == "SnapmaticWidget") { SnapmaticWidget *snapmaticWidget = qobject_cast(widget); - if (!snapmaticWidget->makePictureVisible()) - { - fails++; - } + snapmaticWidgets += snapmaticWidget; } } } + if (snapmaticWidgets.isEmpty()) + { + QMessageBox::information(this, QApplication::translate("UserInterface", "Show In-game"), QApplication::translate("ProfileInterface", "No Snapmatic pictures are selected")); + return; + } + QStringList fails; + for (SnapmaticWidget *widget : snapmaticWidgets) + { + SnapmaticPicture *picture = widget->getPicture(); + if (!widget->makePictureVisible()) + { + fails << QString("%1 [%2]").arg(picture->getPictureTitle(), picture->getPictureString()); + } + } + if (!fails.isEmpty()) + { + QMessageBox::warning(this, QApplication::translate("UserInterface", "Show In-game"), QApplication::translate("ProfileInterface", "%1 failed with...\n\n%2", "Action failed with...").arg(QApplication::translate("UserInterface", "Show In-game"), fails.join(", "))); + } } void ProfileInterface::disableSelected() { - int fails = 0; + QList snapmaticWidgets; for (ProfileWidget *widget : widgets.keys()) { if (widget->isSelected()) @@ -1187,13 +1202,28 @@ void ProfileInterface::disableSelected() if (widget->getWidgetType() == "SnapmaticWidget") { SnapmaticWidget *snapmaticWidget = qobject_cast(widget); - if (!snapmaticWidget->makePictureHidden()) - { - fails++; - } + snapmaticWidgets += snapmaticWidget; } } } + if (snapmaticWidgets.isEmpty()) + { + QMessageBox::information(this, QApplication::translate("UserInterface", "Hide In-game"), QApplication::translate("ProfileInterface", "No Snapmatic pictures are selected")); + return; + } + QStringList fails; + for (SnapmaticWidget *widget : snapmaticWidgets) + { + SnapmaticPicture *picture = widget->getPicture(); + if (!widget->makePictureHidden()) + { + fails << QString("%1 [%2]").arg(picture->getPictureTitle(), picture->getPictureString()); + } + } + if (!fails.isEmpty()) + { + QMessageBox::warning(this, QApplication::translate("UserInterface", "Hide In-game"), QApplication::translate("ProfileInterface", "%1 failed with...\n\n%2", "Action failed with...").arg(QApplication::translate("UserInterface", "Hide In-game"), fails.join(", "))); + } } int ProfileInterface::selectedWidgets() @@ -1529,7 +1559,7 @@ void ProfileInterface::massTool(MassTool tool) if (snapmaticWidgets.isEmpty()) { - QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("You don't have any Snapmatics selected!")); + QMessageBox::information(this, tr("Qualify as Avatar"), tr("No Snapmatic pictures are selected")); return; } @@ -1594,7 +1624,7 @@ void ProfileInterface::massTool(MassTool tool) pbDialog.close(); if (!fails.isEmpty()) { - QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Qualify", "%1 failed with..."), fails.join(", "))); + QMessageBox::warning(this, tr("Qualify as Avatar"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Qualify", "%1 failed with..."), fails.join(", "))); } } break; @@ -1615,7 +1645,7 @@ void ProfileInterface::massTool(MassTool tool) if (snapmaticWidgets.isEmpty()) { - QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("You don't have any Snapmatics selected!")); + QMessageBox::information(this, tr("Change Players..."), tr("No Snapmatic pictures are selected")); return; } @@ -1687,7 +1717,7 @@ void ProfileInterface::massTool(MassTool tool) pbDialog.close(); if (!fails.isEmpty()) { - QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Players", "%1 failed with..."), fails.join(", "))); + QMessageBox::warning(this, tr("Change Players..."), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Players", "%1 failed with..."), fails.join(", "))); } } break; @@ -1708,7 +1738,7 @@ void ProfileInterface::massTool(MassTool tool) if (snapmaticWidgets.isEmpty()) { - QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("You don't have any Snapmatics selected!")); + QMessageBox::information(this, tr("Change Crew..."), tr("No Snapmatic pictures are selected")); return; } @@ -1736,7 +1766,7 @@ preSelectionCrewID: { if (!crewChar.isNumber()) { - QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("Failed to enter a valid Snapmatic Crew ID")); + QMessageBox::warning(this, tr("Change Crew..."), tr("Failed to enter a valid Snapmatic Crew ID")); goto preSelectionCrewID; } } @@ -1805,7 +1835,7 @@ preSelectionCrewID: pbDialog.close(); if (!fails.isEmpty()) { - QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Crew", "%1 failed with..."), fails.join(", "))); + QMessageBox::warning(this, tr("Change Crew..."), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Crew", "%1 failed with..."), fails.join(", "))); } } break; @@ -1826,7 +1856,7 @@ preSelectionCrewID: if (snapmaticWidgets.isEmpty()) { - QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("You don't have any Snapmatics selected!")); + QMessageBox::information(this, tr("Change Title..."), tr("No Snapmatic pictures are selected")); return; } @@ -1839,7 +1869,7 @@ preSelectionTitle: { if (!SnapmaticPicture::verifyTitle(newTitle)) { - QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("Failed to enter a valid Snapmatic title")); + QMessageBox::warning(this, tr("Change Title..."), tr("Failed to enter a valid Snapmatic title")); goto preSelectionTitle; } snapmaticTitle = newTitle; @@ -1904,7 +1934,7 @@ preSelectionTitle: pbDialog.close(); if (!fails.isEmpty()) { - QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Title", "%1 failed with..."), fails.join(", "))); + QMessageBox::warning(this, tr("Change Title..."), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Title", "%1 failed with..."), fails.join(", "))); } } break; diff --git a/SavegameDialog.cpp b/SavegameDialog.cpp index 016c231..c244ed0 100644 --- a/SavegameDialog.cpp +++ b/SavegameDialog.cpp @@ -1,3 +1,21 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2018 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + #include "SavegameDialog.h" #include "ui_SavegameDialog.h" #include "SavegameCopy.h" @@ -14,6 +32,7 @@ SavegameDialog::SavegameDialog(QWidget *parent) : // Setup User Interface ui->setupUi(this); + ui->cmdClose->setFocus(); savegameLabStr = ui->labSavegameText->text(); if (QIcon::hasThemeIcon("dialog-close")) diff --git a/SavegameDialog.h b/SavegameDialog.h index aaabf4f..cce13cc 100644 --- a/SavegameDialog.h +++ b/SavegameDialog.h @@ -1,3 +1,21 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016-2018 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 +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + #ifndef SAVEGAMEDIALOG_H #define SAVEGAMEDIALOG_H diff --git a/SnapmaticEditor.cpp b/SnapmaticEditor.cpp index 2ba6081..954571c 100644 --- a/SnapmaticEditor.cpp +++ b/SnapmaticEditor.cpp @@ -38,7 +38,6 @@ SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, ProfileDatabase *profileD setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); ui->setupUi(this); - ui->cmdCancel->setDefault(true); ui->cmdCancel->setFocus(); // Set Icon for Apply Button @@ -240,9 +239,9 @@ void SnapmaticEditor::setSnapmaticPlayers(const QStringList &players) ui->labPlayers->setText(playersStr.arg(QApplication::translate("PictureDialog", "No Players"), editStr)); } #ifndef Q_OS_ANDROID - ui->gbValues->resize(ui->gbValues->sizeHint()); - ui->frameWidget->resize(ui->frameWidget->sizeHint()); - resize(width(), heightForWidth(width())); + 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())); } #endif } @@ -268,9 +267,9 @@ void SnapmaticEditor::setSnapmaticTitle(const QString &title) 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->sizeHint()); - ui->frameWidget->resize(ui->frameWidget->sizeHint()); - resize(width(), heightForWidth(width())); + 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())); } #endif } @@ -280,9 +279,9 @@ void SnapmaticEditor::setSnapmaticCrew(const QString &crew) QString crewStr = tr("Crew: %1 (%2)").arg(StringParser::escapeString(crew), editStr); ui->labCrew->setText(crewStr); #ifndef Q_OS_ANDROID - ui->gbValues->resize(ui->gbValues->sizeHint()); - ui->frameWidget->resize(ui->frameWidget->sizeHint()); - resize(width(), heightForWidth(width())); + 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())); } #endif } diff --git a/SnapmaticEditor.ui b/SnapmaticEditor.ui index f368efa..e591fcc 100644 --- a/SnapmaticEditor.ui +++ b/SnapmaticEditor.ui @@ -7,7 +7,7 @@ 0 0 400 - 362 + 381 @@ -115,6 +115,9 @@ true + + Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse + @@ -128,6 +131,9 @@ true + + Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse + @@ -141,6 +147,9 @@ true + + Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse + diff --git a/TelemetryClass.cpp b/TelemetryClass.cpp index de63174..abe526b 100644 --- a/TelemetryClass.cpp +++ b/TelemetryClass.cpp @@ -36,6 +36,10 @@ #include #include +#ifndef GTA5SYNC_TELEMETRY_WEBURL +#define GTA5SYNC_TELEMETRY_WEBURL "" +#endif + #ifdef GTA5SYNC_WIN #include "windows.h" #include "intrin.h" @@ -51,8 +55,10 @@ void TelemetryClass::init() telemetryEnabled = settings.value("IsEnabled", false).toBool(); #else telemetryEnabled = true; // Always enable Telemetry for Developer Versions + telemetryStateForced = true; #endif telemetryClientID = settings.value("ClientID", QString()).toString(); + telemetryPushAppConf = settings.value("PushAppConf", false).toBool(); settings.endGroup(); } @@ -88,6 +94,11 @@ bool TelemetryClass::isRegistered() return !telemetryClientID.isEmpty(); } +QString TelemetryClass::getRegisteredID() +{ + return telemetryClientID; +} + void TelemetryClass::setEnabled(bool enabled) { telemetryEnabled = enabled; @@ -114,7 +125,8 @@ void TelemetryClass::push(TelemetryCategory category) case TelemetryCategory::UserLocaleData: push(category, getSystemLocaleList()); break; - case TelemetryCategory::ApplicationConfiguration: + case TelemetryCategory::ApplicationConf: + push(category, getApplicationConf()); break; case TelemetryCategory::ApplicationSpec: push(category, getApplicationSpec()); @@ -276,6 +288,58 @@ QJsonDocument TelemetryClass::getApplicationSpec() return jsonDocument; } +QJsonDocument TelemetryClass::getApplicationConf() +{ + QJsonDocument jsonDocument; + QJsonObject jsonObject; + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + + settings.beginGroup("Interface"); + QJsonObject interfaceObject; + interfaceObject["AreaLanguage"] = settings.value("AreaLanguage", "Auto").toString(); + interfaceObject["Language"] = settings.value("Language", "System").toString(); + interfaceObject["NavigationBar"] = settings.value("NavigationBar", false).toBool(); + jsonObject["Interface"] = interfaceObject; + settings.endGroup(); + + settings.beginGroup("Pictures"); + QJsonObject picturesObject; + picturesObject["AspectRatio"] = ((Qt::AspectRatioMode)settings.value("AspectRatio").toInt() == Qt::IgnoreAspectRatio) ? "IgnoreAspectRatio" : "KeepAspectRatio"; + picturesObject["CustomQuality"] = settings.value("CustomQuality", 100).toInt(); + picturesObject["CustomQualityEnabled"] = settings.value("CustomQualityEnabled", false).toBool(); + picturesObject["ExportSizeMode"] = settings.value("ExportSizeMode", "Default").toString(); + jsonObject["Pictures"] = picturesObject; + settings.endGroup(); + + settings.beginGroup("Profile"); + QJsonObject profileObject; + int contentMode = settings.value("ContentMode", 0).toInt(); + switch (contentMode) + { + case 0: + profileObject["ContentMode"] = "OpenWithSingleClick"; + break; + case 1: + profileObject["ContentMode"] = "OpenWithDoubleClick"; + break; + case 2: + profileObject["ContentMode"] = "SelectWithSingleClick"; + break; + } + jsonObject["Profile"] = profileObject; + settings.endGroup(); + + settings.beginGroup("Startup"); + QJsonObject startupObject; + startupObject["AppStyle"] = settings.value("AppStyle", "System").toString(); + startupObject["CustomStyle"] = settings.value("CustomStyle", false).toBool(); + jsonObject["Startup"] = startupObject; + settings.endGroup(); + + jsonDocument.setObject(jsonObject); + return jsonDocument; +} + QJsonDocument TelemetryClass::getSystemLocaleList() { QJsonDocument jsonDocument; @@ -307,8 +371,8 @@ QString TelemetryClass::categoryToString(TelemetryCategory category) case TelemetryCategory::UserLocaleData: return QString("UserLocaleData"); break; - case TelemetryCategory::ApplicationConfiguration: - return QString("ApplicationConfiguration"); + case TelemetryCategory::ApplicationConf: + return QString("ApplicationConf"); break; case TelemetryCategory::UserFeedback: return QString("UserFeedback"); @@ -325,6 +389,11 @@ QString TelemetryClass::categoryToString(TelemetryCategory category) } } +QUrl TelemetryClass::getWebURL() +{ + return QUrl(GTA5SYNC_TELEMETRY_WEBURL); +} + void TelemetryClass::registerClient() { QNetworkAccessManager *netManager = new QNetworkAccessManager(); @@ -334,33 +403,88 @@ void TelemetryClass::registerClient() connect(netManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(registerFinished(QNetworkReply*))); } -void TelemetryClass::pushStartupSet() +void TelemetryClass::work() { - push(TelemetryCategory::ApplicationSpec); - push(TelemetryCategory::UserLocaleData); - push(TelemetryCategory::OperatingSystemSpec); - push(TelemetryCategory::HardwareSpec); + if (!canPush() && canRegister()) + { + connect(this, SIGNAL(registered(bool)), this, SLOT(work_pd(bool))); + registerClient(); + } + else if (canPush()) + { + work_p(true); + } +} + +void TelemetryClass::work_p(bool doWork) +{ + if (doWork) + { + push(TelemetryCategory::ApplicationSpec); + push(TelemetryCategory::UserLocaleData); + push(TelemetryCategory::OperatingSystemSpec); + push(TelemetryCategory::HardwareSpec); + if (telemetryPushAppConf) + { + push(TelemetryCategory::ApplicationConf); + } + } +} + +void TelemetryClass::work_pd(bool doWork) +{ + disconnect(this, SIGNAL(registered(bool)), this, SLOT(work_pd(bool))); + work_p(doWork); } void TelemetryClass::pushFinished(QNetworkReply *reply) { + bool isSuccessful = false; + if (reply->canReadLine()) + { + QByteArray readedData = reply->readLine(); + if (QString::fromUtf8(readedData).trimmed() == QString("Submit success!")) + { #ifdef GTA5SYNC_DEBUG - qDebug() << "Telemetry" << reply->readAll().trimmed(); + qDebug() << "Telemetry" << QString("Submit success!"); #endif + isSuccessful = true; +#ifdef GTA5SYNC_DEBUG + if (reply->isReadable()) + { + readedData = reply->readAll().trimmed(); + if (!readedData.isEmpty()) { qDebug() << "Telemetry Push" << readedData; } + } +#endif + } + else + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "Telemetry" << QString("Submit failed!"); +#endif + } + } + else + { +#ifdef GTA5SYNC_DEBUG + qDebug() << "Telemetry" << QString("Submit failed!"); +#endif + } reply->deleteLater(); sender()->deleteLater(); - emit pushed(); + emit pushed(isSuccessful); } void TelemetryClass::registerFinished(QNetworkReply *reply) { + bool isSuccessful = false; if (reply->canReadLine()) { - QByteArray readData = reply->readLine(); - if (QString::fromUtf8(readData).trimmed() == QString("Registration success!") && reply->canReadLine()) + QByteArray readedData = reply->readLine(); + if (QString::fromUtf8(readedData).trimmed() == QString("Registration success!") && reply->canReadLine()) { - readData = reply->readLine(); - telemetryClientID = QString::fromUtf8(readData).trimmed(); + readedData = reply->readLine(); + telemetryClientID = QString::fromUtf8(readedData).trimmed(); QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); settings.beginGroup("Telemetry"); settings.setValue("ClientID", telemetryClientID); @@ -368,6 +492,7 @@ void TelemetryClass::registerFinished(QNetworkReply *reply) #ifdef GTA5SYNC_DEBUG qDebug() << "Telemetry" << QString("Registration success!"); #endif + isSuccessful = true; } else { @@ -384,5 +509,5 @@ void TelemetryClass::registerFinished(QNetworkReply *reply) } reply->deleteLater(); sender()->deleteLater(); - emit registered(); + emit registered(isSuccessful); } diff --git a/TelemetryClass.h b/TelemetryClass.h index a009f31..1e06ff5 100644 --- a/TelemetryClass.h +++ b/TelemetryClass.h @@ -23,8 +23,9 @@ #include #include #include +#include -enum class TelemetryCategory : int { OperatingSystemSpec = 0, HardwareSpec = 1, UserLocaleData = 2, ApplicationConfiguration = 3, UserFeedback = 4, ApplicationSpec = 5, CustomEmitted = 99}; +enum class TelemetryCategory : int { OperatingSystemSpec = 0, HardwareSpec = 1, UserLocaleData = 2, ApplicationConf = 3, UserFeedback = 4, ApplicationSpec = 5, CustomEmitted = 99}; class TelemetryClass : public QObject { @@ -32,40 +33,44 @@ class TelemetryClass : public QObject public: static TelemetryClass* getInstance() { return &telemetryClassInstance; } static QString categoryToString(TelemetryCategory category); + static QUrl getWebURL(); bool canPush(); bool canRegister(); bool isEnabled(); bool isStateForced(); bool isRegistered(); void init(); + void work(); void refresh(); void setEnabled(bool enabled); void setDisabled(bool disabled); void push(TelemetryCategory category); void push(TelemetryCategory category, const QJsonDocument json); void registerClient(); + QString getRegisteredID(); private: static TelemetryClass telemetryClassInstance; QString telemetryClientID; bool telemetryEnabled; bool telemetryStateForced; + bool telemetryPushAppConf; + void work_p(bool doWork); QJsonDocument getOperatingSystem(); QJsonDocument getSystemHardware(); QJsonDocument getApplicationSpec(); + QJsonDocument getApplicationConf(); QJsonDocument getSystemLocaleList(); -public slots: - void pushStartupSet(); - private slots: void pushFinished(QNetworkReply *reply); void registerFinished(QNetworkReply *reply); + void work_pd(bool doWork); signals: - void pushed(); - void registered(); + void pushed(bool isSucessful); + void registered(bool isSucessful); }; extern TelemetryClass telemetryClass; diff --git a/TranslationClass.h b/TranslationClass.h index db62010..138216d 100644 --- a/TranslationClass.h +++ b/TranslationClass.h @@ -62,6 +62,6 @@ private: extern TranslationClass translationClass; -#define TCInstance TranslationClass::getInstance() +#define Translator TranslationClass::getInstance() #endif // TRANSLATIONCLASS_H diff --git a/config.h b/config.h index d917acd..fec2e16 100644 --- a/config.h +++ b/config.h @@ -1,6 +1,6 @@ /***************************************************************************** * gta5sync GRAND THEFT AUTO V SYNC -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2016-2018 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 @@ -45,15 +45,11 @@ #endif #ifndef GTA5SYNC_COPYRIGHT -#define GTA5SYNC_COPYRIGHT "2016-2017" +#define GTA5SYNC_COPYRIGHT "2016-2018" #endif #ifndef GTA5SYNC_APPVER -#ifndef GTA5SYNC_DAILYB -#define GTA5SYNC_APPVER "1.5.0-dev8" -#else -#define GTA5SYNC_APPVER GTA5SYNC_DAILYB -#endif +#define GTA5SYNC_APPVER "1.5.0-dev9" #endif #ifdef GTA5SYNC_BUILDTYPE_REL @@ -92,12 +88,6 @@ #endif #endif -#ifdef GTA5SYNC_DAILYB -#ifndef GTA5SYNC_BUILDTYPE -#define GTA5SYNC_BUILDTYPE QT_TRANSLATE_NOOP("AboutDialog", "Daily Build") -#endif -#endif - #ifndef GTA5SYNC_BUILDTYPE #define GTA5SYNC_BUILDTYPE QT_TRANSLATE_NOOP("AboutDialog", "Custom") #endif diff --git a/lang/gta5sync_no.ts b/lang/gta5sync_no.ts index c6a588e..7391c43 100644 --- a/lang/gta5sync_no.ts +++ b/lang/gta5sync_no.ts @@ -23,7 +23,7 @@ Running with Qt %6<br/>
- + &Close @@ -74,38 +74,37 @@ Pictures and Savegames - + Release - + Release Candidate - - + Daily Build - + Developer - + Beta - + Alpha - + Custom @@ -182,90 +181,181 @@ Pictures and Savegames
+ + ImageEditorDialog + + + Overwrite Image... + + + + + + Capacity: %1 + + + + + ? + + + + + &Import... + + + + + &Overwrite + + + + + &Close + + + + + + + Snapmatic Image Editor + + + + + Patching of Snapmatic Image failed because of I/O Error + + + + + Patching of Snapmatic Image failed because of Image Error + + + + + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. + + + ImportDialog - + Import... - - Settings - - - - - - + + + Background Colour: <span style="color: %1">%1</span> - + + Ignore Aspect Ratio - + + Picture + + + + Avatar - + + Background + + + + + ... - + + + + Background Image: + + + + + X + + + + + Force Colour in Avatar Zone + + + + Import picture - + &OK - + Discard picture - + &Cancel - - + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! - + 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 - + Select Colour... + + + Background Image: %1 + + + + + File + Background Image: File + + JsonEditorDialog @@ -275,15 +365,20 @@ When you want to use it as Avatar the image will be detached! - + &Save - + &Close + + + JSON Error + + MapLocationDialog @@ -318,7 +413,7 @@ When you want to use it as Avatar the image will be detached! - + X: %1 Y: %2 X and Y position @@ -460,132 +555,216 @@ Y: %2 - Interface + Feedback + Participation + + + + + + Participate in %1 User Statistics + + + + + Categorys + + + + + Hardware, Application and OS Specification + + + + + System Language Configuration + + + + + Application Configuration + + + + + Other + + + + + + + Participation ID: %1 + + + + + &Copy + + + + + + User Feedback + + + + + Limit: 1 message/day + + + + + &Send + + + + + Interface + + + + Language for Interface - - - - + + + + Current: %1 - + Language for Areas - + Style - + Use Default Style (Restart) - + Style: - + Font - + Always use Message Font (Windows 2003 and earlier) - + Sync - + Sync is not implemented at current time - + Apply changes - + &OK OK, Cancel, Apply - + Discard changes - + &Cancel OK, Cancel, Apply - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default - + %1 (Closest to Interface) Next closest language compared to the Interface - + Auto Automatic language choice. - + %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 + + + + + A feedback message have to between 3-1024 characters long + + PictureDialog @@ -623,73 +802,80 @@ 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 Crew - + Unknown Location - - + + + No Players - + Avatar Preview Mode Press 1 for Default View @@ -798,6 +984,60 @@ Press 1 for Default View + + PlayerListDialog + + + Edit Players... + + + + + Available Players: + + + + + Selected Players: + + + + + &Apply + + + + + &Cancel + + + + + 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! + + + ProfileInterface @@ -843,212 +1083,343 @@ Press 1 for Default View - + Enabled pictures: %1 of %2 - + Loading... - - + + + + Import... - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + Import - - + + + + Can't import %1 because file can't be open + + + + + GTA V Export (*.g5e) - - + + Savegames files (SGTA*) - - + + Snapmatic pictures (PGTA*) - + Importable files (%1) - + + + All image files (%1) - - + + + + All files (**) - - - + + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - - + + Failed to read Snapmatic picture - - + + Failed to read Savegame file - + + + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - - - - Export selected - - - - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - + + + + + Export selected... - + + Snapmatic Loader + + + + + <h4>Following Snapmatic Pictures got repaired</h4>%1 + + + + Initialising export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - - + + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files - + + + + + + + No Snapmatic pictures are selected + + + + + + + + + + %1 failed with... + +%2 + Action failed with... + + + + + + Qualify as Avatar + + + + + + + + Patch selected... + + + + + + + + + + + + Patch file %1 of %2 files + + + + + Qualify + %1 failed with... + + + + + + Change Players... + + + + + Change Players + %1 failed with... + + + + + + + Change Crew... + + + + + Failed to enter a valid Snapmatic Crew ID + + + + + Change Crew + %1 failed with... + + + + + + + Change Title... + + + + + Failed to enter a valid Snapmatic title + + + + + Change Title + %1 failed with... + + + + All profile files (*.g5e SGTA* PGTA*) @@ -1056,17 +1427,17 @@ Press 1 for Default View QApplication - + Font - + Selected Font: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? @@ -1075,7 +1446,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer @@ -1095,7 +1466,7 @@ Press 1 for Default View - + Failed at %1 @@ -1144,37 +1515,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1268,13 +1639,13 @@ Press 1 for Default View - - - - - - - + + + + + + + Snapmatic Properties @@ -1319,103 +1690,121 @@ Press 1 for Default View - - + Crew: %1 (%2) - - + Title: %1 (%2) - - - + + Appropriate: %1 - + Extras - + Qualify as Avatar automatically at apply - + Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture - + &Apply - + &Cancel - - + + + Edit - + + Players: %1 (%2) + Multiple Player are inserted here + + + + + Player: %1 (%2) + One Player is inserted here + + + + 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: @@ -1423,10 +1812,69 @@ 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 + + SnapmaticWidget @@ -1472,8 +1920,8 @@ Press 1 for Default View - - + + Delete picture @@ -1483,66 +1931,89 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All - + Are you sure to delete %1 from your Snapmatic pictures? - + Failed at deleting %1 from your Snapmatic pictures + + TelemetryDialog + + + You want help %1 to improve in the future by collection of data? + + + + + %1 User Statistics + + + + + Yes, I would like to take part. + + + + + &OK + + + UserInterface @@ -1608,175 +2079,147 @@ Press 1 for Default View - + + Selection &mass tools + + + + - + &About %1 - - Ctrl+P + + Change &Title... - + + Change &Crew... + + + + + &Qualify as Avatar + + + + + Change &Players... + + + + &Exit - + Exit - - Ctrl+Q - - - - + Close &Profile - - Ctrl+End - - - - + &Settings - - Ctrl+S - - - - + Select &All - - Ctrl+A - - - - + &Deselect All - - Ctrl+D - - - - + &Export selected... - - Ctrl+E - - - - + &Remove selected - - Ctrl+Del - - - - + &Import files... - - Ctrl+I - - - - + &Open File... - - Ctrl+O - - - - - + + Select &GTA V Folder... - - - - + + + + Select GTA V Folder... - - Ctrl+G - - - - + Show In-gam&e - - Shift+E - - - - + Hi&de In-game - - - Shift+D - - - - + + Select Profile - + Open File... - - + - + + Open File - + Can't open %1 because of not valid file format + + + + Show In-game + + + + + + Hide In-game + + diff --git a/main.cpp b/main.cpp index b2dfca2..3cd4115 100644 --- a/main.cpp +++ b/main.cpp @@ -26,18 +26,27 @@ #include "UserInterface.h" #include "CrewDatabase.h" #include "SavegameData.h" +#include "UiModWidget.h" +#include "UiModLabel.h" #include "IconLoader.h" #include "AppEnv.h" #include "config.h" #include #include +#include #include #include +#include +#include +#include +#include #include #include #include +#include #include #include +#include #include #include #include @@ -98,19 +107,28 @@ int main(int argc, char *argv[]) #endif #endif - QString pluginsDir = AppEnv::getPluginsFolder(); - if (QFileInfo(pluginsDir).exists()) - { - a.addLibraryPath(pluginsDir); - } - QStringList applicationArgs = a.arguments(); QString selectedAction; QString arg1; applicationArgs.removeAt(0); - TCInstance->initUserLanguage(); - TCInstance->loadTranslation(&a); + Translator->initUserLanguage(); + Translator->loadTranslation(&a); + +#ifdef GTA5SYNC_TELEMETRY + if (!applicationArgs.contains("--disable-telemetry")) + { + if (!applicationArgs.contains("--skip-telemetryinit")) + { + Telemetry->init(); + Telemetry->work(); + } + } + else + { + Telemetry->setDisabled(true); + } +#endif if (!applicationArgs.contains("--skip-firststart")) { @@ -129,31 +147,54 @@ int main(int argc, char *argv[]) } } - settings.endGroup(); - #ifdef GTA5SYNC_TELEMETRY - if (!applicationArgs.contains("--disable-telemetry")) + bool telemetryWindowLaunched = settings.value("TelemetryWindowLaunched", false).toBool(); + if (!telemetryWindowLaunched && !Telemetry->isEnabled() && !Telemetry->isStateForced()) { - QObject::connect(Telemetry, SIGNAL(registered()), Telemetry, SLOT(pushStartupSet())); - if (!applicationArgs.contains("--skip-telemetryinit")) + QDialog telemetryDialog; + telemetryDialog.setObjectName(QStringLiteral("TelemetryDialog")); + telemetryDialog.setWindowTitle(QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER)); + telemetryDialog.setWindowFlags(telemetryDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint); + telemetryDialog.setWindowIcon(IconLoader::loadingAppIcon()); + QVBoxLayout telemetryLayout; + telemetryLayout.setObjectName(QStringLiteral("TelemetryLayout")); + telemetryDialog.setLayout(&telemetryLayout); + UiModLabel telemetryLabel(&telemetryDialog); + telemetryLabel.setObjectName(QStringLiteral("TelemetryLabel")); + telemetryLabel.setText(QString("

%2

%1").arg(QApplication::translate("TelemetryDialog", "You want help %1 to improve in the future by collection of data?").arg(GTA5SYNC_APPSTR), QApplication::translate("TelemetryDialog", "%1 User Statistics").arg(GTA5SYNC_APPSTR))); + telemetryLayout.addWidget(&telemetryLabel); + QCheckBox telemetryCheckBox(&telemetryDialog); + telemetryCheckBox.setObjectName(QStringLiteral("TelemetryCheckBox")); + telemetryCheckBox.setText(QApplication::translate("TelemetryDialog", "Yes, I would like to take part.")); + telemetryCheckBox.setChecked(true); + telemetryLayout.addWidget(&telemetryCheckBox); + QHBoxLayout telemetryButtonLayout; + telemetryButtonLayout.setObjectName(QStringLiteral("TelemetryButtonLayout")); + telemetryLayout.addLayout(&telemetryButtonLayout); + QSpacerItem telemetryButtonSpacer(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); + telemetryButtonLayout.addSpacerItem(&telemetryButtonSpacer); + QPushButton telemetryButton(&telemetryDialog); + telemetryButton.setObjectName(QStringLiteral("TelemetryButton")); + telemetryButton.setText(QApplication::translate("TelemetryDialog", "&OK")); + telemetryButtonLayout.addWidget(&telemetryButton); + QObject::connect(&telemetryButton, SIGNAL(clicked(bool)), &telemetryDialog, SLOT(close())); + telemetryDialog.setFixedSize(telemetryDialog.sizeHint()); + telemetryDialog.exec(); + if (telemetryCheckBox.isChecked()) { + QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + telemetrySettings.beginGroup("Telemetry"); + telemetrySettings.setValue("IsEnabled", true); + telemetrySettings.endGroup(); Telemetry->init(); - if (Telemetry->canPush()) - { - Telemetry->pushStartupSet(); - } - else if (Telemetry->canRegister()) - { - Telemetry->registerClient(); - } + Telemetry->work(); } - } - else - { - Telemetry->setDisabled(true); + settings.setValue("TelemetryWindowLaunched", true); } #endif + settings.endGroup(); + for (QString currentArg : applicationArgs) { QString reworkedArg; diff --git a/res/app.rc b/res/app.rc index 4722b1a..dc5d462 100644 --- a/res/app.rc +++ b/res/app.rc @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view" - VALUE "FileVersion", "1.5.0-dev8" + VALUE "FileVersion", "1.5.0-dev9" VALUE "InternalName", "gta5view" - VALUE "LegalCopyright", "Copyright © 2016-2017 Syping" + VALUE "LegalCopyright", "Copyright © 2016-2018 Syping" VALUE "OriginalFilename", "gta5view.exe" VALUE "ProductName", "gta5view" - VALUE "ProductVersion", "1.5.0-dev8" + VALUE "ProductVersion", "1.5.0-dev9" END END END diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index 50b6529c2d736fab99286b5be9ed32e28d91e8ca..1ed4c3618dadfc2618a556f72cd01ceae8abd7ce 100644 GIT binary patch delta 5050 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 - + &Close S&chließen @@ -219,38 +219,37 @@ Pictures and Savegames Grand Theft Auto V Snapmatic Bilder und Spielständen - + Release Release - + Release Candidate Release Candidate - - + Daily Build Daily Build - + Developer Entwickler - + Beta Beta - + Alpha Alpha - + Custom Eigener @@ -344,9 +343,9 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen ImageEditorDialog - - - + + + Snapmatic Image Editor Snapmatic Bild Editor @@ -357,7 +356,7 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen - + Capacity: %1 Kapazität: %1 @@ -394,17 +393,17 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen 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 - + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. Jedes geschossene Snapmatic hat seine eigene Kapazität, ein Snapmatic mit besserer Kapazität kann ein Bild mit besserer Qualität beinhalten. @@ -463,8 +462,8 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen - - + + Background Colour: <span style="color: %1">%1</span> Hintergrundfarbe: <span style="color: %1">%1</span> @@ -475,7 +474,7 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen ... - + Background Image: %1 Hintergrundbild: %1 @@ -527,44 +526,44 @@ Wenn du planst es als Avatar zu verwenden das Bild wird abgetrennt! - - + + Background Image: Hintergrundbild: - - + + 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 - + 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 @@ -604,7 +603,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen JSON Fehler - + JSON Error JSON Fehler @@ -827,17 +826,102 @@ Y: %2 Name - + + Feedback + Feedback + + + + Participation + Teilnahme + + + + &Send + &Senden + + + User Statistics + Benutzerstatistik + + + + + Participate in %1 User Statistics + An %1 Benutzerstatistik teilnehmen + + + + Categorys + Kategorien + + + + Hardware, Application and OS Specification + Hardware, Anwendung und OS Spezifikation + + + + System Language Configuration + Spracheinstellungen des System + + + OS Language Configuration + Spracheinstellungen des OS + + + + Application Configuration + Anwendungseinstellungen + + + + Other + Sonstiges + + + + + + Participation ID: %1 + Teilnahme ID: %1 + + + + &Copy + &Kopieren + + + + + User Feedback + Benutzer Feedback + + + Message for the Developers + Nachricht an den Entwickler + + + + Limit: 1 message/day + Limit: 1 Nachricht/Tag + + + Send + Senden + + + Language for Areas Sprache für Standorte - + Style Stil - + Use Default Style (Restart) Benutze Standard Stil (Neustart) @@ -846,17 +930,17 @@ Y: %2 Benutze Standard Stil - + Style: Stil: - + Font Schrift - + Always use Message Font (Windows 2003 and earlier) Immer Nachrichtenschrift nutzen (Windows 2003 und früher) @@ -865,20 +949,20 @@ Y: %2 Sprache - + Interface Oberfläche - + Language for Interface Sprache für Oberfläche - - - - + + + + Current: %1 Aktuell: %1 @@ -887,33 +971,33 @@ Y: %2 Standorte - + Sync Sync - + Sync is not implemented at current time Sync wurde bisher nicht implementiert - + Apply changes Änderungen übernehmen - + &OK OK, Cancel, Apply &OK - + Discard changes Änderungen verwerfen - + &Cancel OK, Cancel, Apply Abbre&chen @@ -934,7 +1018,7 @@ Y: %2 %1 (%2 wenn verfügbar) - + %1 %1 %1 @@ -948,48 +1032,63 @@ Y: %2 Der eigene Ordner initialisiert sobald du %1 neugestartet hast. - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (Erste näheste Sprache) - + System System in context of System default System - + %1 (Closest to Interface) Next closest language compared to the Interface %1 (Näheste zur Oberfläche) - + Auto Automatic language choice. Automatisch - + 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 + + + + A feedback message have to between 3-1024 characters long + Eine Feedback Nachricht hat zwischen 3-1024 Zeichen lang zu sein + The language change will take effect after you restart %1. Die Änderung der Sprache nimmt Effekt sobald du %1 neugestartet hast. - + No Profile No Profile, as default Kein Profil - - - + + + Profile: %1 Profil: %1 @@ -1104,7 +1203,7 @@ Y: %2 - + Export as &Picture... Als &Bild exportieren... @@ -1114,7 +1213,7 @@ Y: %2 - + Export as &Snapmatic... Als &Snapmatic exportieren... @@ -1128,7 +1227,7 @@ Y: %2 - + &Edit Properties... Eigenschaften bearb&eiten... @@ -1143,18 +1242,18 @@ Y: %2 - + &Overwrite Image... Bild &überschreiben... - + Open &Map Viewer... &Kartenansicht öffnen... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -1163,32 +1262,32 @@ 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 @@ -1233,7 +1332,7 @@ Drücke A für Standardansicht Keine Crew - + Unknown Location Unbekannter Standort @@ -1404,7 +1503,7 @@ Drücke A für Standardansicht - + Open &JSON Editor... &JSON Editor öffnen... @@ -1435,38 +1534,38 @@ Drücke A für Standardansicht Ausgewählte Spieler: - + &Apply &Übernehmen - + &Cancel 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! @@ -1530,49 +1629,49 @@ Drücke A für Standardansicht Profil schließen - + Loading... Lade... - + Snapmatic Loader Snapmatic Lader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>Folgende Snapmatic Bilder wurden repariert</h4>%1 - - - - + + + + Import... Importieren... - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + + + Import Importieren @@ -1585,14 +1684,14 @@ Drücke A für Standardansicht Importfähige Dateien (*.g5e *.jpg *.png SGTA* PGTA*) - - + + Savegames files (SGTA*) Spielstanddateien (SGTA*) - - + + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) @@ -1601,33 +1700,33 @@ Drücke A für Standardansicht Alle Bilddateien (*.jpg *.png) - + Importable files (%1) Importfähige Dateien (%1) - - - + + + All image files (%1) Alle Bilddateien (%1) - - - - + + + + All files (**) Alle Dateien (**) - - + + Import file %1 of %2 files Importiere Datei %1 von %2 Dateien - + Import failed with... %1 @@ -1636,38 +1735,38 @@ Drücke A für Standardansicht %1 - - + + 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 - + Can't import %1 because file format can't be detected Kann %1 nicht importieren weil das Dateiformat nicht erkannt werden kann - + Initialising export... Initialisiere Export... @@ -1676,24 +1775,24 @@ Drücke A für Standardansicht Kann %1 nicht importieren weil das Dateiformat nicht gültig ist - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA oder endet mit .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Fehlgeschlagen beim Importieren vom Snapmatic Bild, dieses Bild ist bereits im Spiel - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exportiere Snapmatic Bilder%2<br><br>JPG Bilder machen es möglich sie mit ein Bildansicht Programm zu öffnen<br>Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren<br><br>Exportieren als: - - - + + + No valid file is selected Keine gültige Datei wurde ausgewählt @@ -1707,77 +1806,63 @@ Drücke A für Standardansicht Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA - + Failed to import the Snapmatic picture, can't copy the file into profile Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren - + Failed to import the Savegame, can't copy the file into profile Fehlgeschlagen beim Importieren vom Spielstand, kann Spielstanddatei nicht ins Profil kopieren - + Failed to import the Savegame, no Savegame slot is left Fehlgeschlagen beim Importieren vom Spielstand, kein Spielstandslot mehr frei - - + + JPG pictures and GTA Snapmatic JPG Bilder und GTA Snapmatic - - + + JPG pictures only Nur JPG Bilder - - + + GTA Snapmatic only Nur GTA Snapmatic - - - - - - - - - - Snapmatic Mass Tool - Snapmatic Massenwerkzeug + Snapmatic Massenwerkzeug - - - - You don't have any Snapmatics selected! - Du hast keine Snapmatics ausgewählt! + Du hast keine Snapmatics ausgewählt! - - - - + + + + Patch selected... Auswahl patchen... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Patche Datei %1 von %2 Dateien @@ -1786,10 +1871,28 @@ Drücke A für Standardansicht Du hast keine Snapmatic ausgewählt! - - - - + + + Qualify as Avatar + Als Avatar qualifizieren + + + + + + + + + No Snapmatic pictures are selected + Keine Snapmatic Bilder sind ausgewählt + + + + + + + + %1 failed with... %2 @@ -1799,35 +1902,55 @@ Drücke A für Standardansicht %2 - + Qualify %1 failed with... Qualifizieren - + + + Change Players... + Spieler ändern... + + + Change Players %1 failed with... Spieler ändern - + + + + Change Crew... + Crew ändern... + + + Failed to enter a valid Snapmatic Crew ID Fehlgeschlagen beim Eingeben von einer gültigen Crew ID - + Change Crew %1 failed with... Crew ändern - + + + + Change Title... + Titel ändern... + + + Failed to enter a valid Snapmatic title Fehlgeschlagen beim Eingeben eines gültigen Snapmatic Titel - + Change Title %1 failed with... Titel ändern @@ -1847,25 +1970,25 @@ Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren Exportieren als: - - + + No Snapmatic pictures or Savegames files are selected - Keine Snapmatic Bilder oder Spielstände ausgewählt + Keine Snapmatic Bilder oder Spielstände sind ausgewählt - - - + + + Remove selected Auswahl löschen - + You really want remove the selected Snapmatic picutres and Savegame files? Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Fehlgeschlagen beim kompletten entfernen der ausgewählten Snapmatic Bilder und/oder der Spielstanddateien @@ -1886,10 +2009,8 @@ Exportieren als: Fehlgeschlagenen beim Import vom Spielstand weil kein Spielstandslot mehr übrig ist - - Export selected - Auswahl exportieren + Auswahl exportieren Export and Copy pictures @@ -1908,9 +2029,11 @@ Exportieren als: Wie sollen wir mit den Snapmatic Bilder umgehen? - - - + + + + + Export selected... Auswahl exportieren... @@ -1923,7 +2046,7 @@ Exportieren als: Initialisierung... - + Export failed with... %1 @@ -1953,13 +2076,13 @@ Exportieren als: 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) @@ -1967,26 +2090,39 @@ Exportieren als: QApplication - + Font Schrift - + Selected Font: %1 Ausgewähle Schrift: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>Willkommen zu %1!</h4>Möchtest du %1 einstellen bevor du es nutzt? + + No Snapmatic pictures are selected + Keine Snapmatic Bilder sind ausgewählt + + + %1 failed with... + +%2 + Action failed with... + %1 fehlgeschlagen mit... + +%2 + SavegameDialog - + Savegame Viewer Spielstandanzeiger @@ -2018,7 +2154,7 @@ Exportieren als: Schließen - + Failed at %1 Fehlgeschlagen bei %1 @@ -2127,32 +2263,32 @@ Exportieren als: Fehlgeschlagen beim Löschen %1 von deinen Spielständen - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All &Alles auswählen - + &Deselect All Alles a&bwählen @@ -2191,7 +2327,7 @@ Exportieren als: Spielstand kopieren - + &Export &Exportieren @@ -2267,12 +2403,12 @@ Exportieren als: - - - - - - + + + + + + Snapmatic Properties Snapmatic Eigenschaften @@ -2317,8 +2453,8 @@ Exportieren als: Meme - - + + Snapmatic Title Snapmatic Titel @@ -2328,55 +2464,55 @@ Exportieren als: 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 - + Extras Extras - + Qualify as Avatar automatically at apply Beim Übernehmen als Avatar qualifizieren - + Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture Das Qualifizieren als Avatar erlaubt dir dieses Snapmatic als Social Club Profilbild zu nutzen - + &Apply &Übernehmen - + &Cancel Abbre&chen @@ -2389,9 +2525,9 @@ Exportieren als: Cancel - - - + + + Edit Bearbeiten @@ -2406,55 +2542,55 @@ Exportieren als: Spieler: (%1) (%2) - + 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: @@ -2544,19 +2680,19 @@ Exportieren als: Datei lesen %1 wegen %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 @@ -2607,7 +2743,7 @@ Exportieren als: Bist du sicher %1 von deine Snapmatic Bilder zu löschen? - + Edi&t Bearbei&ten @@ -2620,7 +2756,7 @@ Exportieren als: &Im Spiel deaktivieren - + &Export &Exportieren @@ -2633,12 +2769,12 @@ Exportieren als: Exportiere als &GTA Snapmatic - + Show &In-game &Im Spiel anzeigen - + Hide &In-game &Im Spiel ausblenden @@ -2671,32 +2807,32 @@ Exportieren als: Exportiere als &Snapmatic... - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All Alles &auswählen - + &Deselect All Alles a&bwählen @@ -2749,6 +2885,37 @@ Exportieren als: Fehlgeschlagen beim Löschen von %1 von deinen Snapmatic Bildern + + TelemetryDialog + + You want help to improve %1 in the future with the collection of data? + Möchtest du helfen %1 in der Zukunft zu verbessern mit der Sammlung von Daten? + + + + %1 User Statistics + %1 Benutzerstatistik + + + You want help to improve %1 in the future by collection of data? + Möchtest du helfen %1 in der Zukunft zu verbessern durch Sammlung von Daten? + + + + You want help %1 to improve in the future by collection of data? + Möchtest du helfen %1 in der Zukunft zu verbessern durch Sammlung von Daten? + + + + Yes, I would like to take part. + Ja, ich möchte teilnehmen. + + + + &OK + &OK + + UserInterface @@ -2976,7 +3143,7 @@ Exportieren als: - + Select &GTA V Folder... Wähle &GTA V Ordner... @@ -3075,16 +3242,16 @@ Exportieren als: - - + + Select Profile Profil auswählen - - - + + + Select GTA V Folder... Wähle GTA V Ordner... @@ -3093,7 +3260,7 @@ Exportieren als: Wähle GTA V &Ordner... - + Open File... Datei öffnen... @@ -3114,20 +3281,20 @@ Exportieren als: - + &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 @@ -3160,5 +3327,17 @@ Exportieren als: Not able to reload profiles Nicht fähig Profile neuzuladen + + + + Show In-game + Im Spiel anzeigen + + + + + Hide In-game + Im Spiel ausblenden + diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm index 97316139aa29e5cf895ecb0952499a41824e7a11..f47f8310815144875ca29dbdf993068490a4e12f 100644 GIT binary patch delta 2082 zcmXAqeN+_Z6~^z(&agW(yE`#JR{Q{gfC^+G^0A;S2*|R4AP8usY9$s^djw+yk|yeE zm19Y%$vUxUB{3>0RV)z%KM-2C-KfR7gdlBbG{FN$38K*in~)ss!Fga*TMuib0QgU=T`sc?YYEta70Oi#CgCab`o=zltC~Pv)Vu8XYBQ1`iu$~aGmcs5wfvpt2 z-%Vs3qVUd4qQF@cJ{c@NOJ&AC$r_J1kq0Qfw2vsqMH$s#Og7o$28q}*vX=xQkCC!Z z;r~pQikm+rQg$+dj#m18b1%ARqhr6ELKJ7FrW)kp40LXy61fi0jibn!@(UX7!@FLm z>E00@zdxZz<+(&J#xmj;5k!`Hl^Ii2W)Cnk|BReI#mu^8;}Bq!*&O{Hk#!lfwSF~` ze>LMwoR1oU*}#-&=CiDFqL=qDV`D=^;sfRz!x^He->`ul3eHYt^CCu2%g@=BR}jly z#r|sPZ;2K@Wy`7yiE@`I)og&D%r?G}fG*!q`Qoc8t<_2=o8*XF!=8-WN0i;dHkAw$ zCCp~q+G2?oaBRCPm}q_l+r`a=5WCpRm(W=5arW9DWujm+>)C{JOFG$}vAsk(7yIS4 zY&2wL?;Q6b$~wi4+$$nlG@tz;4NXXX?2l32L}{lr!tt9B`raLO9W<;5RDneTEt`jc=< zQVd+En6R8{iZ})-jw@Eq9ESOk5Q=O*8a%H@3;>oEKqDubf=m?H;>(hK?G8!i-alP~*dEm63O-zEs? z`9AM37ZC*+OZfT-RGWI1uiu427Pa$-CklyPI>|TeSOG_Vr;KxP(`;wFX1a|q^m4DI zt3rs(o4wYu8;N2gm2^IGibX4qS0GD))`vSml$Wkl^A;vl>EvfS7HAtTL%bZl_DuEz zqG?aGZM{e|@0Ql(!qj}6+OKk!5_!9{!xtQg_@VZ}sc547E!wB;uujTe9dC1ET5suQ zy3Irpj4oxO0d_9Xr9M84VXW3IZuAgke5)%vd=yID)or|73RnD1_x2zf2@2Vx+gkn( zQRrUX_Q20E-a*~@$QtZefUe7h{YkA+s=a3Wg$Slw3z5bs_*V@>V671PJD{!t4K= zhaF22D)wRw+)-ioUy)O`3h&r%W8BF?tr=s?ED{&=grf6xJ+UTL>}Y`-SeI zXG9L`fY7rt3qJT*=r>!4W*ihA7C(lnr6MzeZWFeP%;+RrM1wDuH&H9j%0c3(8Zl&h zCU#+q7!?Ec6K{$O*42Y2RAyzX%-befk4|6*`o!dtd?LMyOku7e!aN- zp%E1hDP!6=hqYNeKf{+OdPMB%=P{KD@oJr$$hT4K9<9XmTE*+7a70*$_^(t3ms6|g zsX9xUB#f!tzX88HKIMQ8! zdR`uvnD%XW@E4^`7wU+AUD|1cKBmv5T^ssv?tQ5?wh;OpkZNti7{C*i85L6Pb<`nG zNY0;j;KB-%_L&l30;^OXz6*lSQkii`YG@fGva!;Io&LDUa-^;@^q0RFM7;bN(m#?$ zi000dJQdq0n(|Iby&sgqU2jXD?ZXY9dRuzZF@T0YRq4G}&;2PK3wvKLjE-Z0yp%r( z{>906_2F~AMH}V%HNntL^M!tMHfSEvZ#lObciF%7HEH`0CQD!U68`6(>gySNXe_U( zw2kWPZAhyv(KpEGBgUb>_z*hfhAX@nIpsOS91AQzWx65kzlf4%SJK5mM?n{qiD)tu z`b;|G2bD437~brIGK)4DoQPK{V@Yl~KNizpwDcP2z1BD#yM> z#2Y!ujSItO6bE2w?bpWXSMOj|@{P7+I8eX9cy`TtqB)vNi|3T%yVNDWvS}PI?w8AZTkx&;P=0L>3g$nO_g{e|0hi<>&x)|%2E{6w zLVqUr+-SolHOqH`&fs*q{Ky||O^cMr51Mf*8M*WCw7wXe~{$*mhx Hnr8eTvn)*# delta 2185 zcmX|CdsGv57QQo?A(=-q#ee}62q3SJCM*zMlJJr@s64bsR^3L#3PMp6R(f28R$8&FQc+Rx5KF~FHAq>v?Y7ohSfMPk+G1O~x_dcu&i?hCnR9=?d%y2~ z_x^@^iNhC(H#~@E9iDN--yH=;V%V|6Z$XY5P!}kGHY5Ld2noYaI50G(t4Nbv+Z z8*yPW(0@$_@EQc#bp^nDR>Hg%$Bf243%Z^R0Ko;i`J3_wKsSF={v_x|f&mJaf$m?C zh+81y?Lh$5I7Ia200d|uV*auOQo`)rV2;OojMpHed<~{cUHDp@@ zF^>xJPT>EXUMTIl0U+)n0_=C;&t0R)q8i@Y=nfG3Pw3o-xhN%^eN>OR4#D*{%$cTv zi7`Cub`mC!(fGX+?%S3FEHM%6*Lr~X5(%?LB+PFnd_TaP9;L*l)pIDoG*KJ<6M#iU z>}XvN;MYVrk`l3oATl6zn)p1|2Jky4F*7p`z}_SNtvm$~d6EpcAY!Z+xl%ucwfvr3 zdj;>xF_4>!b_1mLkkw5k04r2t6Y1}Lh3t4f0a-pT;gaVhw3x*{(qfPEB0r2hh~id~ zoz@8y?_2WB856+Li)4>82vJY=Q{gB?5;<@YiLF>qUVTdd2r`hatr)kmo*bEJ22eQ3 zZ?EPdAv1aBeGh=VGIDBi6~M9w0J;-gEnp}4Q zT{%SkGCGXtp#IZqLT>&vHGeL0H|^2Ug3Z4!VPG^JbLTN|;E3>$s)Q3=4)x9Ij=YtWIM;v5z0lU3p7JE%fK z3vNa0f&mQ2-O9)s0MlJDgEqQvk+XAkn1z#jP{*;V$6^y5N0f?vbg2DDdHVp0SMZ7a zRNg%RpNH}@qnIe#UG8*Z*E}5Z+XY1cYNveSyd7=4T7K_DG(b^|{7Da5CoNY&XAYw1 zQ3~Hd1AyM7NPX0fb}m+=JvfT4Sg6SFZ~)MZXj0Cp}ecatrnThS7YJf=&OF@oShsf#podFKDjZ zWO2~V-#*R6j+_U0>Nb0&mtAgQFEn5yjiSX44owF!~T zVE*)T6hPcVrmh*=K(#TiT*91!nRzwy7PdQ?*>Au$<|>)?f#oQii|I5L1L(S#t0^c( z!U1M@{J#KpOEWXFHWz)enYn3*16X{RnJs;Q?eS%aDP)@%&l1z~Sjj3qad?w1vDyMm z>?LD^U(UfBgps-b(k;mFC&#~tgd!mTGZ2wIf?P6euS_T0;JJ{jrdhFg7_Oo(ygf5u9 zmPVieTUb}a#{l#;3FA^FjBk`Mn_ykXQCQUi_NMi&VZECbQZ2H4Yfp-_54S=^68>2E7bJmwAatAwVt%57sG<6a0?Iy$hj=ns@#tI=Rt zp~|y;YXG!ANEn%;yu8K}7mQjtZo@IuSE(p&5RI{2#eQ`QEBZm@CA#CnIILPUbO$G? zP?edC2IZHE*H~3l!a7x-4Z{Ovf=?wD9=SlUJV0TR8KE@HhL2Uhuwm;QhQBS?Mo;4d zvRYJf8q1(?;u3)g{~sJcY787Vi5YDIcRSci4ba z@^b|?^_}hwoS+wXWGKWJEqbvlL(%<0++Br-y4Ys@W3{!eqD)(0t*zCT)YMdoj@V$a z(JQ?y~BYijDX8*6N#b=u9=hH|ad_Ja2RXKJ;z$la#I2?!-A7V77yl2y CU~8=a diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index 1c0671e..948d834 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -23,7 +23,7 @@ Running with Qt %6<br/> - + &Close @@ -74,38 +74,37 @@ Pictures and Savegames - + Release - + Release Candidate - - + Daily Build - + Developer - + Beta - + Alpha - + Custom @@ -185,9 +184,9 @@ Pictures and Savegames ImageEditorDialog - - - + + + Snapmatic Image Editor @@ -198,7 +197,7 @@ Pictures and Savegames - + Capacity: %1 @@ -223,17 +222,17 @@ Pictures and Savegames - + Patching of Snapmatic Image failed because of I/O Error - + Patching of Snapmatic Image failed because of Image Error - + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. @@ -247,8 +246,8 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> Background Color: <span style="color: %1">%1</span> @@ -280,7 +279,7 @@ Pictures and Savegames - + Background Image: %1 @@ -316,43 +315,43 @@ Pictures and Savegames - - + + Background Image: - - + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! - + 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 @@ -376,7 +375,7 @@ When you want to use it as Avatar the image will be detached! - + JSON Error @@ -555,133 +554,217 @@ Y: %2 - + + Feedback + + + + + + Participate in %1 User Statistics + + + + + Categorys + + + + + Hardware, Application and OS Specification + + + + + Application Configuration + + + + + Other + + + + + + + Participation ID: %1 + + + + + &Copy + + + + + + User Feedback + + + + + Limit: 1 message/day + + + + Language for Areas - + Style - + Style: - + Font - + Always use Message Font (Windows 2003 and earlier) - + Interface + Participation + + + + + System Language Configuration + + + + + &Send + + + + Language for Interface - - - - + + + + Current: %1 - + Use Default Style (Restart) - + Sync - + Sync is not implemented at current time - + Apply changes - + &OK OK, Cancel, Apply - + Discard changes - + &Cancel OK, Cancel, Apply - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default - + %1 (Closest to Interface) Next closest language compared to the Interface - + Auto Automatic language choice. - + %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 + + + + + A feedback message have to between 3-1024 characters long + + PictureDialog @@ -720,73 +803,73 @@ 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 @@ -896,7 +979,7 @@ Press 1 for Default View - + Open &JSON Editor... @@ -919,38 +1002,38 @@ Press 1 for Default View - + &Apply - + &Cancel - + 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! @@ -1005,284 +1088,276 @@ Press 1 for Default View - + Loading... - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - - - - + + + + Import... - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + + + Import - + Importable files (%1) - - + + GTA V Export (*.g5e) - - + + Savegames files (SGTA*) - - + + Snapmatic pictures (PGTA*) - - - + + + All image files (%1) - - - - + + + + All files (**) - - - + + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - - + + 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 - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - - Export selected - - - - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - - - + + + + + Export selected... - + Initialising export... Initializing export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - - + + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files - - - - - - - - - - - Snapmatic Mass Tool - + + + Qualify as Avatar + - - - - - You don't have any Snapmatics selected! - + + + + + + + No Snapmatic pictures are selected + - - - - + + + + Patch selected... - - - - - - - - + + + + + + + + Patch file %1 of %2 files - - - - + + + + + + %1 failed with... %2 @@ -1290,41 +1365,61 @@ Press 1 for Default View - + Qualify %1 failed with... - + + + Change Players... + + + + Change Players %1 failed with... - + + + + Change Crew... + + + + Failed to enter a valid Snapmatic Crew ID - + Change Crew %1 failed with... - + + + + Change Title... + + + + Failed to enter a valid Snapmatic title - + Change Title %1 failed with... - + All profile files (*.g5e SGTA* PGTA*) @@ -1332,17 +1427,17 @@ Press 1 for Default View QApplication - + Font - + Selected Font: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? @@ -1351,7 +1446,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer @@ -1371,7 +1466,7 @@ Press 1 for Default View - + Failed at %1 @@ -1420,37 +1515,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1544,12 +1639,12 @@ Press 1 for Default View - - - - - - + + + + + + Snapmatic Properties @@ -1595,121 +1690,121 @@ 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 - + Extras - + Qualify as Avatar automatically at apply - + Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture - + &Apply - + &Cancel - - - + + + 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: @@ -1763,19 +1858,19 @@ Press 1 for Default View - + JSON is incomplete and malformed - + JSON is incomplete - + JSON is malformed @@ -1836,52 +1931,52 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1896,6 +1991,29 @@ Press 1 for Default View + + TelemetryDialog + + + %1 User Statistics + + + + + You want help %1 to improve in the future by collection of data? + + + + + Yes, I would like to take part. + + + + + &OK + + + UserInterface @@ -1963,7 +2081,7 @@ Press 1 for Default View - + &About %1 @@ -2019,15 +2137,15 @@ Press 1 for Default View - + Select &GTA V Folder... - - - + + + Select GTA V Folder... @@ -2068,28 +2186,40 @@ Press 1 for Default View - - + + Select Profile - + Open File... - - - - + + + + Open File - + Can't open %1 because of not valid file format + + + + Show In-game + + + + + + Hide In-game + + diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index 56814ae602b131e13075830cc2b07a94be60ac1d..26829fd202ec27b5f584ebf656d74cb3e1b73cb6 100644 GIT binary patch delta 1639 zcmXApdr(wm7{;G-_Uz@Hvlmfd4M7qTWkJLR1mq%u2)J^Ui`-1nrKtc-5%mvUyk!!S zx^8A+x`t-T3@M0CTpB<|iEI@O@8vk+h?oXSI@XN6%-Mf_JLi1o{hs%Ip6_eyWw!P* zdm`Ax(|e=bEPfF{=1pLh7Enh@)b0h|?*fwhz#ZQRq@{yv;eZ8Q;2gxfN^t#|z<6F_ zxI5&LAwYr|@(6aYacV7*VPS?SjQ*yKCg-Wv&TdO-@-mP?o5VGWd9AEKnD8D z_~X9=8BMZ~b))pW##+h-Smxj0(!ve{v0>b2PKyCeBUfETeyEGN-FY>jA6M^xjJ9u< zn0Ae;KUD}Q{@@z6~j)F!vT$prjsR^7)d)VG>Zv zmlP8fa(>M#BV{q1FW=V*sK)Wt0U;Ffe!i|F1;}5>_rzG}a18TT3KqhGg!_DdKq%n8 zL|}$!!{}i_GO#Kjd7^Q(m9L0T7Q z7jm9!fr30?C8%TPFNCj>XuWt_qIQPF_-5g}y9+6q{fp2$v<@h&5iZ9vz#K2ZQPBkO zA4m*;Br!5hV#*_--!qFk(g`wP^>X1yzN}O1|AZq}Kw9p@7s<&v%bje@E;)WCj+Eh}Ud%@0ea#3l)0b32J_56qr$@cHT)xOp&Da zXmtY;6V!gwUy#fj>a`|nd#25LNTIjb)wK-WX(_SlIvr^Utx^B+_4eun$TSoZS_Hk;~#2bG!!G>3QeXnx!}DQz7R;UDtUULSU_K^qT;B{+Nmt4mR#nnhlLv#`Om4e=ZXRU8cFj TTxu>~v(c*d_icPq(4+bv$PCE= delta 1583 zcmXApX;2hb6ot<;-OP0NEGmO2hy+oVVG$;vD66dEAe#dyGA<}uCV)mkvpS%$j1g18 z4q_rkF=!dVB8poCQ9#NfL`R7sF~-C)SV{nmSVV(XkxTWjuex8q`|dsGyx!KOXzWsa z9>yf;Dk7Y%L0Ui^4vbM-0W5C^QUbvqdk;u!0Nca@iSA%+#GF%Ld(6NDUgn(l!G(v= zdONuJM2Bo}-^BtG2f*2`0rB=S&CO8NWYE4acpJ9?)5~OL&Vto2c0g7!3}XjmeG9|Q z89;U-3-v$;pB5?Hw6vI6qQCb#0PGp`Es1CY}|g03LrUgx~#u@FbZj{W7y$ zr9BF#q+N=Ss+R$-DT;qIr+_y-nA~f_q|#qZ;SN$|Nh@=BMG!F6Q)XBOb9~DjKx2|Q zJw|4Hk2I+8%$uuWPRyzVG9NMZD<1-p&CJ=eB;vgD%(*rXAo?WJ!un9}`7x7 zV|$0za~?8(cA7}!GUmZCJz(Cnwo%A8f<+Y(RLMZ4&dy%1pN9P%!a1Yuo$<4Leb0RD;a) z5!QBLJFV|wA6uFLy^(#{-9^@4V_#n!>ux#6j_or(=Jdy_09B^UH(qf$H`?HVn3r7P z;Z=ao6Rz5i+DvxgYDUa}-vC!zwuDr4kP7YG#^1Nku*?7g?%A(m)&rq;rGs{E{0~ZD zxR_>{D|Og;GQrN$pq-aBTv^*%L|OSydCK$zm^7$7+Z_yqyjHfgk$&UXDDN+%@QsU9 zaS7zT*-Pcx5dau2tLBZ=(&R@}F+(-v!&+7HaU0ngsw%AchU`6{THl&ae)y|O-S3dT z_f;)zlqFNIs^cmt<)ctNZK?#EwavWKkLwHK8tXdI_eU9;rRIr-cW!q!v+aUaTDbX(@qCShS8 zU8LAiA^WKo$lWa!a#O7ddf~zpN4huOLRWtYV7V+@k5K?~O9k8JGXTF<=G-`$;WaW- z>rzX*L@i-^la#ksBIL8CbN3~8?G7jtgWkP#K)b}bFz zcuOn~F~f?*#bP;KPK4i+nOY`RI?RqvwR6wJy@~3CPOI@v?KUCPL%#_3GS{*eydq92h z=_ZP8srpBg6QC&7xb#tak`HMNcWHm}s5EFl*&0)Jn-aHDW7d-i9vfwb7HH02qR6|k zGL1Vm?MobKsCG?n5!LYZ)UqNC?fXD`X2m+dt665mkk0unI@>r+7db?3C8X+#x=#a1 zVY&^UnW^U*-I38uipFDI-F2#??{n0(Um$e?M|8snDEiR}RBf4a<6dRHL1B>G6J4bJ d#z{(D{JR_0Z!DG+Q67yig0>hM59B^l{SP9KzheLZ diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index 2e003d5..5f2e1bb 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -106,7 +106,7 @@ Copyright &copy; <a href="%5">%6</a> %7<br/> %8 est distribué sous license <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + &Close &Fermer @@ -183,38 +183,37 @@ Pictures and Savegames et les fichiers de sauvegarde de Grand Theft Auto V - + Release - + Release Candidate - - + Daily Build - + Developer - + Beta - + Alpha - + Custom Personnalisé @@ -294,9 +293,9 @@ et les fichiers de sauvegarde de Grand Theft Auto V ImageEditorDialog - - - + + + Snapmatic Image Editor @@ -307,7 +306,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V - + Capacity: %1 @@ -332,17 +331,17 @@ et les fichiers de sauvegarde de Grand Theft Auto V - + Patching of Snapmatic Image failed because of I/O Error - + Patching of Snapmatic Image failed because of Image Error - + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. @@ -397,8 +396,8 @@ et les fichiers de sauvegarde de Grand Theft Auto V - - + + Background Colour: <span style="color: %1">%1</span> @@ -409,7 +408,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V ... - + Background Image: %1 @@ -445,43 +444,43 @@ et les fichiers de sauvegarde de Grand Theft Auto V - - + + Background Image: - - + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! - + 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 - + Select Colour... - + File Background Image: File @@ -509,7 +508,7 @@ When you want to use it as Avatar the image will be detached! - + JSON Error @@ -695,27 +694,96 @@ Y: %2 Nom - + + Feedback + + + + + Participation + + + + + + Participate in %1 User Statistics + + + + + Categorys + + + + + Hardware, Application and OS Specification + + + + + System Language Configuration + + + + + Application Configuration + + + + + Other + + + + + + + Participation ID: %1 + + + + + &Copy + + + + + + User Feedback + + + + + Limit: 1 message/day + + + + + &Send + + + + Language for Areas - + Style - + Style: - + Font Police - + Always use Message Font (Windows 2003 and earlier) @@ -724,56 +792,56 @@ Y: %2 Langue - + Interface - + Language for Interface - - - - + + + + Current: %1 - + Use Default Style (Restart) - + Sync Synchronisation - + Sync is not implemented at current time La synchronisation n'est pas encore implémentée - + Apply changes - + &OK OK, Cancel, Apply &OK - + Discard changes - + &Cancel OK, Cancel, Apply &Annuler @@ -789,40 +857,55 @@ Y: %2 Système - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default Système - + %1 (Closest to Interface) Next closest language compared to the Interface - + Auto Automatic language choice. - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. + + + View %1 User Statistics Online + + + + + Not registered + + + + + A feedback message have to between 3-1024 characters long + + The new Custom Folder will initialize after you restart %1. Le répertoire personnalisé sera actif au prochain lancement de %1. @@ -832,15 +915,15 @@ Y: %2 Le changement de langue sera actif au prochain lancement de %1. - + No Profile No Profile, as default Aucun profil - - - + + + Profile: %1 Profil : %1 @@ -1007,7 +1090,7 @@ Y: %2 - + Export as &Picture... @@ -1017,7 +1100,7 @@ Y: %2 - + Export as &Snapmatic... @@ -1027,24 +1110,24 @@ Y: %2 - + &Overwrite Image... - + &Edit Properties... Modifier les &propriétés... - + Open &Map Viewer... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -1053,32 +1136,32 @@ 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 @@ -1097,7 +1180,7 @@ Appuyer sur 1 pour le mode par défaut Aucun crew - + Unknown Location Emplacement inconnu @@ -1132,7 +1215,7 @@ Appuyer sur 1 pour le mode par défaut - + Open &JSON Editor... @@ -1155,38 +1238,38 @@ Appuyer sur 1 pour le mode par défaut - + &Apply A&ppliquer - + &Cancel - + 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! @@ -1245,49 +1328,49 @@ Appuyer sur 1 pour le mode par défaut Photos activées : %1 sur %2 - + Loading... Chargement... - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - - - - + + + + Import... Importer... - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + + + Import Importer @@ -1296,40 +1379,40 @@ Appuyer sur 1 pour le mode par défaut Fichiers de profil GTA (SGTA* PGTA*) - - + + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - - + + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) - - - + + + All image files (%1) - - - - + + + + All files (**) Tous les fichiers (**) - - + + Import file %1 of %2 files Importation du fichier %1 sur %2 - + Import failed with... %1 @@ -1338,26 +1421,26 @@ Appuyer sur 1 pour le mode par défaut %1 - - - + + + No valid file is selected Fichier invalide - + Importable files (%1) - - + + Failed to read Snapmatic picture Impossible d'ouvrir la photo Snapmatic - - + + Failed to read Savegame file Impossible de lire le fichier de sauvegarde @@ -1378,137 +1461,133 @@ Appuyer sur 1 pour le mode par défaut Tous les fichiers image (*.jpg *.png) - - - + + + Can't import %1 because file can't be open - - - + + + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*, *.g5e) - + Failed to import the Snapmatic picture, the picture is already in the game Impossible d'importer la photo Snapmatic, un fichier du même nom existe déjà - + Failed to import the Snapmatic picture, can't copy the file into profile Impossible d'importer la photo Snapmatic, impossible de copier le fichier dans le profil - + Failed to import the Savegame, can't copy the file into profile Impossible d'importer la sauvegarde, impossible de copier le fichier dans le profil - + Failed to import the Savegame, no Savegame slot is left Impossible d'importer la sauvegarde, aucun emplacement libre - - Export selected - Exporter la sélection + Exporter la sélection - - + + JPG pictures and GTA Snapmatic Images JPG et GTA Snapmatic - - + + JPG pictures only Images JPG seulement - - + + GTA Snapmatic only GTA Snapmatic seulement - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exporter les photos Snapmatic%2<br><br>Les fichiers JPG permettent d'ouvrir les photos avec une visionneuse d'images<br>Les GTA Snapmatic permettent d'importer les photos dans le jeu<br><br>Exporter comme : - - - + + + + + Export selected... Exporter la sélection... - + Initialising export... - - - - - - - - - - - Snapmatic Mass Tool + + + Qualify as Avatar - - - - - You don't have any Snapmatics selected! + + + + + + + No Snapmatic pictures are selected - - - - + + + + Patch selected... - - - - - - - - + + + + + + + + Patch file %1 of %2 files - - - - + + + + + + %1 failed with... %2 @@ -1516,35 +1595,55 @@ Appuyer sur 1 pour le mode par défaut - + Qualify %1 failed with... - + + + Change Players... + + + + Change Players %1 failed with... - + + + + Change Crew... + + + + Failed to enter a valid Snapmatic Crew ID - + Change Crew %1 failed with... - + + + + Change Title... + + + + Failed to enter a valid Snapmatic title - + Change Title %1 failed with... @@ -1554,7 +1653,7 @@ Appuyer sur 1 pour le mode par défaut Initialisation de l'export... - + Export failed with... %1 @@ -1563,36 +1662,36 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No Snapmatic pictures or Savegames files are selected Aucun fichier de sauvegarde ou photo Snapmatic sélectionné - - - + + + Remove selected Supprimer la sélection - + You really want remove the selected Snapmatic picutres and Savegame files? Supprimer la sélection ? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Impossible de 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) @@ -1600,17 +1699,17 @@ Appuyer sur 1 pour le mode par défaut QApplication - + Font Police - + Selected Font: %1 Police sélectionnée : %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? @@ -1619,7 +1718,7 @@ Appuyer sur 1 pour le mode par défaut SavegameDialog - + Savegame Viewer Gestionnaire de sauvegardes @@ -1639,7 +1738,7 @@ Appuyer sur 1 pour le mode par défaut &Fermer - + Failed at %1 Échec de %1 @@ -1688,7 +1787,7 @@ Appuyer sur 1 pour le mode par défaut Supprimer - + &Export &Exporter @@ -1779,32 +1878,32 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + &View &Voir - + &Remove &Supprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner to&ut - + &Deselect All &Déselectionner tout @@ -1814,12 +1913,12 @@ Appuyer sur 1 pour le mode par défaut - - - - - - + + + + + + Snapmatic Properties Propriétés Snapmatic @@ -1864,8 +1963,8 @@ Appuyer sur 1 pour le mode par défaut Meme - - + + Snapmatic Title Titre Snapmatic @@ -1875,117 +1974,117 @@ 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 - + Player: %1 (%2) One Player is inserted here - - + + Appropriate: %1 Valide : %1 - + Extras Extras - + Qualify as Avatar automatically at apply Qualifier comme Avatar - + Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture Qualifier comme Avatar permet d'utiliser cette image en tant que photo de profil sur le Social Club - + &Apply A&ppliquer - + &Cancel 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? - + 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 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 : @@ -2039,19 +2138,19 @@ Appuyer sur 1 pour le mode par défaut - + JSON is incomplete and malformed - + JSON is incomplete - + JSON is malformed @@ -2122,17 +2221,17 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + Edi&t Édi&ter - + Show &In-game &Visible en jeu - + Hide &In-game &Invisible en jeu @@ -2141,7 +2240,7 @@ Appuyer sur 1 pour le mode par défaut Modifier les &propriétés... - + &Export &Exporter @@ -2154,36 +2253,59 @@ Appuyer sur 1 pour le mode par défaut Exporter comme &GTA Snapmatic... - + &View &Voir - + &Remove S&upprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner &tout - + &Deselect All &Déselectionner tout + + TelemetryDialog + + + %1 User Statistics + + + + + You want help %1 to improve in the future by collection of data? + + + + + Yes, I would like to take part. + + + + + &OK + &OK + + UserInterface @@ -2337,15 +2459,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... @@ -2410,34 +2532,46 @@ 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 + + + + Show In-game + + + + + + Hide In-game + + diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index bf22251be5f1d415a6bb24ad87e3d97fe0de8278..4ccaf028aa5d8b91b86d8747b6058be8898e9ef1 100644 GIT binary patch delta 1791 zcmXApdsI|a6vn@M=iZt7m|;Sm662_)JS7wmOhFJ)0`Y+ej!Md7P?U!-K(#VQLo13X zx}mwmWhOpS@{N%QEnruKEO zfYsng z{3Vo_jiA=2fRIQ8jT~M$MP;rQ(NPINd^{4Yp8={HqQ&n;^MSA(jC3;?STIIq_OQxzJY#x) zJm9^Y$xC-qE$NIc>`%aw&Ad?mG~l1e)K+{4cs$EoNh$*7e8T)@I1bFdp?t-7iRowwG5j*MG=Xj70;qx#wtJhA`cuj}N@#ukWcHixWWdzP-rny{J#=Ls#8WE9eeB<%Za~%> z8ja5p!0n7i-2XYSx<%u8@n0a&S2Mbd_L~kiSc_r12GCT&^a+VjNIxQ+Q3J zsO1($?FQ0kDhV1tyNPQI-bV&F!ZjYwBtvv_M=LV`c|F%6XH)M(xVGKl#G9O>;%#6; znaaiFlacSdV$RWAN$YF4pE6s3M=Q9Yz8<21dw7P5DL&3~Bl~7=eD zmpUlv^j^O3-5g;0JG?z)35odxUmxrwmk#lJhSPwU8opt(g(NpC9-P_ryf!tHToqfT z&0&jyCeKzBU(E-?0ET~l8; zkl3l~=pgmI&+Bfbq>`Va1%6H!u;#2_>Iwm77=^gu1`?u4m^Da~vNlDSchCXk#tDUc z_5umJh2nNAb@6Rs)3|HYl>woxgZ#MioY2usadfRh*Lf09iRWGI1)|qiu@qYnCk|2P z^B#x+&(c{vqjI#TIJGK)VkV1ox7SdvJH(XQZZco4n5jESp1&hzZ>O9yYQ%!X-zk?Z zVnH5}uM1lCN+!IAtZj@0kNTdK44#ePVA1glLfuS%PW$A z6(;d24I&<2Dlz?(NNSqI42>B2CytLp#M=3JoXmmexws^XiGo zD%X^&EZHEX^wYkK+fv3o7ogN%TKZ!h5Ii7do!$r~RXfgZ`BiH6^#GpwM(P9y>a>%3^NSDNJdpe?jMq%x;l{-|;c;MXU&6?RdXSBZ4Kv|2tN(+@;3 zvZIWyE@_whc9EP}@$!{Adh1q2$$zz6Cofd$T(dUl#Q`TUvsCZ?GEK8KTyHw-LoInp zALRcBrLEVmdW_`J-PPNYiE%yps`xq@oQL}DljvLa*Vi-jzRtg{GW!F4gOPGgs?wji zXQMgUs5o_IdyT#2t%jE19;M6_`Zl-KVyRnCsXCoZ@N5s@ix6dNiL^W_Cnb<-Eb2P}WR6i<1+R&b#>2f7);G-9*-V1XI%B+i zsR@|4-{{;K0xaH1v2C`K!-Ct4leUCglN80%TQa6u3#^6KveM@ib98{xROWVai!EII EAGP577XSbN delta 1736 zcmXAqcT^Nt6vn@qonfc!vLa;z0TC-rL;))h+9HChNKwHCQWT^}5zR?-HE0qOVnRl& zs4)UIQczJWaE>6cvmPwbXcA-e4`Pc3EQFNHnZJJf=FPl&-*>-z_rKRn(;McC$?W_& zl_4&b3mq-{z*X!4Yy@z1?*dtCz@6fNxoP06#ATDfT^$Y#r~`L132;tVIqeGg;2>b$ zK=3g{m)+pMj|2vJg14RnQi4?GT!OGCfxfGR=hzQ`Kwp))$?)!vV_8}S@BTnbFT%S& zP+l&)ANvz`z^8dC;5QyV{RhTxRhgNGkO?Lr@&HU(*MS0H%6ek#PQ;A+4d8Dh?hviB zcfm4yCgA!t)~wkJ7!`c_T_;^^7-}=^fN6cG-_Q=Fm~rvQ!}EgaK)^Oey6X$fSf?^0 zP36*1v2i}MrN_`zFm~~VRqiR z9#Zr)o4=lvD|o5!th@6zcK?crz`zcb0Z&w>Iw~P-sKuPb9voLiYS^&#=?{SfFSfCf zijlEyz0OYJ--$YV!hFbP- ze|sRkN27817O+355$kRMOFT4A=l=z~T{X_7^q#xBCTMvN?2)U{B-eiocw}mF$~=I= zdPT1pFXnOa6Ltf$Y8A6)q*%_?`__`g4$3Nx(Q6aevOAER5W!i?HUYy+RVHSu%)Y@{ zo61S}4y9RRocagP^}iL>$2;ub0*DbR{WtQd9j(CZ06zb#3}EtB-r|=`I*sP5eS3hk z1^k}gBp|e#uUVTyYR*yIICr~$Y!c>^X~Le_WUz%mT!&(&r+2hcPbp;^qIKZ*0Yy>D zDsCk6zEaDLw5-+EoS_TnkJUEBJp~5;pl$371g3gvTU$xkx6W$snaQul5P^?wCn1Lj zZtZ?R@Nyx%w+4_Kg@_l_FS#EI)An0|%zZ-sp1nXcFBG21q5|~_YdmfPi)IQftz@^f z;X-Q@ouh3Q+RrWmlsMkbu2VGr97aVb5J$YGqAp&jR+#k`p36uDW<%O>(wV)3i7!1ViK>6fIO@Jjq7`WMo_Nv!ZAODxul zHD{)iHC~Gs!Yshd)#BB8u~esW@g_ADhRu}R$>ak^r*@w22RN=>eg)P^SM(xc@-Ns4qii)t|O zJ?TmW1DMZA*0Q4%WtK|wXDVmhRhe-@vhJhX+uf6Hx+jyjrb)LBz5txUr3Z&ejTk4X z>rx_h+YXsIwwl%tWKEa@&8=6m^HFN!UYmiIPPyEcF6ibaR|F+diBHKD(GO{I3{#oW zEm!uf1@v8Vm62L-VYyuGvyS!`sLUKKpC}(h4csZW>fz(KsVaWrn@3#z2Y3 zKGU6iRzf{+T-WBy()Xdd%W+01k}%M&TkkoZ?B_61?|p}kN{?4Y3C@;?wb#kQ27QtP zRW86wW!zl-@#Yj@)NPefJM?WSj=-c8{euFsbnty!P9_~fUfRBW{yxo)Slgp%Ily?6 z%9&$qn+s^)f0Dr^m(q#~HiW*QQm0lJ78Ui-Uq*tVpz|;=f1T1S7)R_h9J)fMx&|29 znn=CK!G^0HjlhUHL(dLBY8-}+E~!7#E7%7sLGuPHJ|=tRaha$!m{u+;EG|{z6NVnq No9>M|;!=_&{ttgt^6mft diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index 44a51c4..05d2da5 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -58,7 +58,7 @@ Running with Qt %6<br/> %7 - + &Close &Закрыть @@ -143,38 +143,37 @@ Pictures and Savegames Grand Theft Auto V Snapmatic картинок и Ñохранений - + Release Релиз - + Release Candidate Предварительный выпуÑк - - + Daily Build Ð”Ð½ÐµÐ²Ð½Ð°Ñ Ñборка - + Developer Разработчик - + Beta Бета - + Alpha Ðльфа - + Custom Ðе извеÑтен контекÑÑ‚ Ð¡Ð²Ð¾Ñ @@ -256,9 +255,9 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений ImageEditorDialog - - - + + + Snapmatic Image Editor @@ -269,7 +268,7 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений - + Capacity: %1 @@ -294,17 +293,17 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений&Закрыть - + Patching of Snapmatic Image failed because of I/O Error - + Patching of Snapmatic Image failed because of Image Error - + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. @@ -359,8 +358,8 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений - - + + Background Colour: <span style="color: %1">%1</span> Цвет фона: <span style="color: %1">%1</span> @@ -371,7 +370,7 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений... - + Background Image: %1 @@ -408,43 +407,43 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений - - + + Background Image: - - + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! - + 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 Файл @@ -476,7 +475,7 @@ When you want to use it as Avatar the image will be detached! &Закрыть - + JSON Error @@ -663,27 +662,96 @@ Y: %2 Ð˜Ð¼Ñ - + + Feedback + + + + + Participation + + + + + + Participate in %1 User Statistics + + + + + Categorys + + + + + Hardware, Application and OS Specification + + + + + System Language Configuration + + + + + Application Configuration + + + + + Other + + + + + + + Participation ID: %1 + + + + + &Copy + + + + + + User Feedback + + + + + Limit: 1 message/day + + + + + &Send + + + + Language for Areas - + Style - + Style: - + Font Шрифт - + Always use Message Font (Windows 2003 and earlier) @@ -692,56 +760,56 @@ Y: %2 Язык - + Interface - + Language for Interface - - - - + + + + Current: %1 - + Use Default Style (Restart) - + Sync Sync - + Sync is not implemented at current time Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ð¾ÐºÐ° ещё не реализована - + Apply changes Применить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ - + &OK OK, Cancel, Apply &ОК - + Discard changes Отвергнуть Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ - + &Cancel OK, Cancel, Apply От&мена @@ -758,40 +826,55 @@ Y: %2 %1 (%2 еÑли имеетÑÑ) - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default СиÑтема - + %1 (Closest to Interface) Next closest language compared to the Interface - + Auto Automatic language choice. - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. Ð”Ñ€ÑƒÐ³Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° будет загружена поÑле перезапуÑка %1. + + + View %1 User Statistics Online + + + + + Not registered + + + + + A feedback message have to between 3-1024 characters long + + The new Custom Folder will initialize after you restart %1. Ð”Ñ€ÑƒÐ³Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° будет загружена поÑле перезапуÑка %1. @@ -801,15 +884,15 @@ Y: %2 Язык изменитÑÑ Ð¿Ð¾Ñле перезапуÑка %1. - + No Profile No Profile, as default Ðет Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - - - + + + Profile: %1 Профиль: %1 @@ -890,7 +973,7 @@ Y: %2 - + Export as &Picture... ЭкÑпортировать как &картинку... @@ -900,7 +983,7 @@ Y: %2 - + Export as &Snapmatic... ЭкÑпортировать как &Snapmatic... @@ -914,24 +997,24 @@ Y: %2 - + &Overwrite Image... - + &Edit Properties... &Изменить ÑвойÑтва... - + Open &Map Viewer... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -940,32 +1023,32 @@ Arrow Keys - Navigate Стрелки - ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ - - + + Snapmatic Picture Viewer ПроÑмотрщик фотографий Snapmatic - - + + Failed at %1 Ошибка при %1 - - + + No Crew Вне банды - - - + + + No Players Игроков нет - + Avatar Preview Mode Press 1 for Default View Режим проÑмотра аватарок @@ -980,7 +1063,7 @@ Press 1 for Default View Без группы - + Unknown Location ÐеизвеÑтное меÑто @@ -1119,7 +1202,7 @@ Press 1 for Default View - + Open &JSON Editor... @@ -1142,38 +1225,38 @@ Press 1 for Default View - + &Apply &Применить - + &Cancel - + 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! @@ -1228,49 +1311,49 @@ Press 1 for Default View Закрыть профиль - + Loading... Загрузка... - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - - - - + + + + Import... Импортировать... - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + + + Import Импортировать @@ -1279,33 +1362,33 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (SGTA* PGTA*) - - + + Savegames files (SGTA*) Файлы ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ (SGTA*) - - + + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) - - - - + + + + All files (**) Ð’Ñе файлы (**) - - + + Import file %1 of %2 files ИмпортируютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ %1 из %2 - + Import failed with... %1 @@ -1314,14 +1397,14 @@ Press 1 for Default View %1 - - + + Failed to read Snapmatic picture Ðе удалоÑÑŒ загрузить картинку Snapmatic - - + + Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ @@ -1330,9 +1413,9 @@ Press 1 for Default View Ðе получилоÑÑŒ импортировать %1 из-за неправильного формата файла - - - + + + No valid file is selected Выбранный файл неверен @@ -1350,154 +1433,150 @@ Press 1 for Default View Ð’Ñе Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (*.jpg *.png) - + Importable files (%1) Файлы Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° (%1) - - - + + + All image files (%1) Ð’Ñе файлы изображений (%1) - - - + + + Can't import %1 because file can't be open - - - + + + Can't import %1 because file can't be parsed properly Ðе получилоÑÑŒ импортировать %1, файл не может быть правильно обработан - + Can't import %1 because file format can't be detected Ðе получилоÑÑŒ импортировать %1, не удалоÑÑŒ определить формат файла - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе удалоÑÑŒ импортировать картинку Snapmatic, название не начинаетÑÑ Ñ PGTA или не заканчиваетÑÑ Ñ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе удалоÑÑŒ импортировать картинку Snapmatic, картинка уже в игре - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе удалоÑÑŒ импортировать картинку Snapmatic, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, can't copy the file into profile Ðе удалоÑÑŒ импортировать Ñохранение, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, no Savegame slot is left Ðе удалоÑÑŒ импортировать Ñохранение, нет пуÑтых Ñчеек под ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + JPG pictures and GTA Snapmatic Картинки JPG и GTA Snapmatic - - + + JPG pictures only Только картинки JPG - - + + GTA Snapmatic only Только GTA Snapmatic - + Initialising export... Подготовка к ÑкÑпорту... - - + + No Snapmatic pictures or Savegames files are selected Ðе выделены ни один Snapmatic или Ñохранение - - - + + + Remove selected СнÑть выделение - + You really want remove the selected Snapmatic picutres and Savegame files? Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - + Failed at remove the complete selected Snapmatic pictures and/or Savegame files Ðе удалоÑÑŒ удалить полноÑтью выбранные картинки Snapmatic и/или файлы Ñохранений - - - - - - - - - - - Snapmatic Mass Tool + + + Qualify as Avatar - - - - - You don't have any Snapmatics selected! + + + + + + + No Snapmatic pictures are selected - - - - + + + + Patch selected... - - - - - - - - + + + + + + + + Patch file %1 of %2 files - - - - + + + + + + %1 failed with... %2 @@ -1505,35 +1584,55 @@ Press 1 for Default View - + Qualify %1 failed with... - + + + Change Players... + + + + Change Players %1 failed with... - + + + + Change Crew... + + + + Failed to enter a valid Snapmatic Crew ID - + Change Crew %1 failed with... - + + + + Change Title... + + + + Failed to enter a valid Snapmatic title - + Change Title %1 failed with... @@ -1555,20 +1654,20 @@ Press 1 for Default View Ðе получилоÑÑŒ имортировать копию ÑохранениÑ, потому что не оÑталоÑÑŒ Ñвободных под них Ñлотов - - Export selected - ЭкÑпортировать выделенное + ЭкÑпортировать выделенное - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1ЭÑкпортировать картинки Snapmatic%2<br><br>Картинки JPG можно открыть любым проÑмотрщиком<br>Картинки формата GTA Snapmatic можно Ñнова импортировать в игру<br><br>ЭкÑпортировать как: - - - + + + + + Export selected... Экпортировать выделенное... @@ -1577,7 +1676,7 @@ Press 1 for Default View Подготавливаю ÑÑкпорт... - + Export failed with... %1 @@ -1593,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) @@ -1607,17 +1706,17 @@ Press 1 for Default View QApplication - + Font Шрифт - + Selected Font: %1 Выбранный шрифт: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? @@ -1626,7 +1725,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer ПроÑмотрщик Ñохранений @@ -1654,7 +1753,7 @@ Press 1 for Default View Закрыть - + Failed at %1 Ошибка при %1 @@ -1754,32 +1853,32 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить Ñохранение %1 - + &View &ПроÑмотр - + &Remove &Удалить - + &Select &Выбрать - + &Deselect Сн&Ñть выбор - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1789,7 +1888,7 @@ Press 1 for Default View Копировать Ñохранение - + &Export &ЭкÑпортировать @@ -1849,12 +1948,12 @@ Press 1 for Default View - - - - - - + + + + + + Snapmatic Properties СвойÑтва Snapmatic @@ -1895,7 +1994,7 @@ Press 1 for Default View Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² Snapmatic - + Crew: %1 (%2) Банда: %1 (%2) @@ -1905,116 +2004,116 @@ Press 1 for Default View Meme - - + + Snapmatic Title Заголовок Snapmatic - + Title: %1 (%2) Заголовок: %1 (%2) - + Players: %1 (%2) Multiple Player are inserted here - + Player: %1 (%2) One Player is inserted here - - + + Appropriate: %1 Подходит: %1 - + Extras Дополнительно - + Qualify as Avatar automatically at apply При применении наÑтроек пометить как аватар - + Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture C меткой аватара можно загрузить Ñту картинку Snapmatic в профиль на Social Club - + &Apply &Применить - + &Cancel &Отмена - - - + + + 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 из-за проблемы ввода/вывода - - + + New Snapmatic title: Ðовый заголовок Snapmatic: - - + + Snapmatic Crew Банда на Snapmatic - - + + New Snapmatic crew: ÐÐ¾Ð²Ð°Ñ Ð±Ð°Ð½Ð´Ð° на Snapmatic: @@ -2068,19 +2167,19 @@ Press 1 for Default View - + JSON is incomplete and malformed - + JSON is incomplete - + JSON is malformed @@ -2141,17 +2240,17 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить %1 из колелкции картинок Snapmatic - + Edi&t &Правка - + Show &In-game Показывать в &игре - + Hide &In-game Ск&рыть в игре @@ -2160,7 +2259,7 @@ Press 1 for Default View &Изменить ÑвойÑтва... - + &Export &ЭкÑпорт @@ -2173,32 +2272,32 @@ Press 1 for Default View ЭкÑ&портировать как GTA Snapmatic... - + &View По&казать - + &Remove У&далить - + &Select &Выделить - + &Deselect Сн&Ñть выделение - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -2213,6 +2312,29 @@ Press 1 for Default View ЭкÑпорт картинки + + TelemetryDialog + + + %1 User Statistics + + + + + You want help %1 to improve in the future by collection of data? + + + + + Yes, I would like to take part. + + + + + &OK + &ОК + + UserInterface @@ -2299,7 +2421,7 @@ Press 1 for Default View - + Select &GTA V Folder... Выбрать &папку GTA V... @@ -2431,16 +2553,16 @@ Press 1 for Default View - - + + Select Profile Выбор Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - - - + + + Select GTA V Folder... Выбрать папку GTA V... @@ -2453,25 +2575,25 @@ Press 1 for Default View - + &About %1 &О программе %1 - + Open File... Открыть файл... - - - - + + + + Open File Открыть файл - + Can't open %1 because of not valid file format Ðе удалоÑÑŒ открыть %1 из-за неверного формата файла @@ -2488,5 +2610,17 @@ Press 1 for Default View GTA V Folder not found! Папка GTA V не была найдена! + + + + Show In-game + + + + + + Hide In-game + + From 3b7542d3616d347944697216937b00abe7127920 Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 16 Jan 2018 00:15:43 +0100 Subject: [PATCH 032/359] add missed #ifdef --- OptionsDialog.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp index f80f0a7..5264907 100644 --- a/OptionsDialog.cpp +++ b/OptionsDialog.cpp @@ -664,5 +664,7 @@ void OptionsDialog::on_cmdUserFeedbackSend_clicked() void OptionsDialog::on_cmdCopyStatsID_clicked() { +#ifdef GTA5SYNC_TELEMETRY QApplication::clipboard()->setText(Telemetry->getRegisteredID()); +#endif } From 885045d4fddcd3090395db8c9a5a92cf973354b5 Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 16 Jan 2018 22:28:37 +0100 Subject: [PATCH 033/359] Support for Multiple Translator --- AboutDialog.cpp | 53 +++++++++++++++++------------------------- lang/gta5sync_no.ts | 26 ++++++--------------- res/gta5sync_de.qm | Bin 44925 -> 44780 bytes res/gta5sync_de.ts | 29 ++++++++++++----------- res/gta5sync_en_US.qm | Bin 23883 -> 23768 bytes res/gta5sync_en_US.ts | 30 +++++++++++------------- res/gta5sync_fr.qm | Bin 25986 -> 25845 bytes res/gta5sync_fr.ts | 29 ++++++++++++----------- res/gta5sync_ru.qm | Bin 31871 -> 31724 bytes res/gta5sync_ru.ts | 29 ++++++++++++----------- 10 files changed, 90 insertions(+), 106 deletions(-) diff --git a/AboutDialog.cpp b/AboutDialog.cpp index 2c075dd..20d1296 100644 --- a/AboutDialog.cpp +++ b/AboutDialog.cpp @@ -37,41 +37,30 @@ AboutDialog::AboutDialog(QWidget *parent) : QString buildStr = GTA5SYNC_BUILDSTRING; // Translator Comments - //: Using specific library, example Using libmyfuck - QString usingStr = tr("Using %1 %2"); //: Translated by translator, example Translated by Syping QString translatedByStr = tr("Translated by %1"); - //: Enter your name there - QString translatedByVal = tr("NAME_OF_TRANSLATOR"); - //: Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage - QString translatorProfile = tr("TRANSLATOR_PROFILE"); - QString additionalContent = ""; - if (translatedByVal != "NAME_OF_TRANSLATOR") + //: Insert your name here and profile here in following scheme, First Translator,First Profile\\nSecond Translator\\nThird Translator,Second Profile + QString translatorVal = tr("TRANSLATOR"); + QStringList translatorContent; + if (translatorVal != "TRANSLATOR") { - if (translatorProfile != "TRANSLATOR_PROFILE") + const QStringList translatorList = translatorVal.split('\n'); + for (const QString &translatorStr : translatorList) { - additionalContent += translatedByStr.arg(QString("%2").arg(translatorProfile, translatedByVal)); - } - else - { - additionalContent += translatedByStr.arg(translatedByVal); + QStringList translatorStrList = translatorStr.split(','); + QString translatorName = translatorStrList.at(0); + translatorStrList.removeFirst(); + QString translatorProfile = translatorStrList.join(QString()); + if (!translatorProfile.isEmpty()) + { + translatorContent += QString("%2").arg(translatorProfile, translatorName); + } + else + { + translatorContent += translatorName; + } } } -#ifdef WITH_LIBJPEGTURBO // DONT USE IT FOR NOW - bool additionalContentClip = false; - if (!additionalContent.isEmpty()) - { - additionalContentClip = true; - additionalContent += " ("; - } - additionalContent += usingStr.arg("libjpegturbo", WITH_LIBJPEGTURBO); - if (additionalContentClip) - { - additionalContent += ")"; - } -#else - Q_UNUSED(usingStr) -#endif // Project Description #ifdef GTA5SYNC_ENABLED @@ -86,9 +75,9 @@ AboutDialog::AboutDialog(QWidget *parent) : QString copyrightDes2 = tr("%1 is licensed under GNU GPLv3"); copyrightDes2 = copyrightDes2.arg(GTA5SYNC_APPSTR); QString copyrightDesA; - if (!additionalContent.isEmpty()) + if (!translatorContent.isEmpty()) { - copyrightDesA = copyrightDes1 % "
" % additionalContent % "
" % copyrightDes2; + copyrightDesA = copyrightDes1 % "
" % translatedByStr.arg(translatorContent.join(", ")) % "
" % copyrightDes2; } else { @@ -114,7 +103,7 @@ AboutDialog::AboutDialog(QWidget *parent) : // DPI calculation qreal screenRatio = AppEnv::screenRatio(); - if (!additionalContent.isEmpty()) + if (!translatorContent.isEmpty()) { resize(375 * screenRatio, 270 * screenRatio); } diff --git a/lang/gta5sync_no.ts b/lang/gta5sync_no.ts index 7391c43..e1b8829 100644 --- a/lang/gta5sync_no.ts +++ b/lang/gta5sync_no.ts @@ -29,47 +29,35 @@ Running with Qt %6<br/> - Using %1 %2 - Using specific library, example Using libmyfuck - - - - Translated by %1 Translated by translator, example Translated by Syping - - NAME_OF_TRANSLATOR - Enter your name there + + TRANSLATOR + Insert your name here and profile here in following scheme, First Translator,First Profile\nSecond Translator\nThird Translator,Second Profile - - TRANSLATOR_PROFILE - Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage - - - - + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> Pictures and Savegames - + 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> diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index 1ed4c3618dadfc2618a556f72cd01ceae8abd7ce..c2d6219a11e86bdd7a451e8ababbae8ed8a8b125 100644 GIT binary patch delta 3170 zcmXArcU%-_7lqHx&g|~Y?6Mjc3o1q|K|rivK@>#+3l;AUmJysMWNYGCOVnGv?L?bFcqsByHiN^1c`Rm!8^4|NNbMJlUUA6H09bt{l-T**9 zz|xi+2Q>307Xs$?8oPc12+M&MivaN&@KHBF8UZA|0$ja-me&DyAE4ns8l4j~W)B3q zH~=5C)973Ud{P3W?SgRP9MF6P#Eg8vZs^P(`+?TeAnst0H9CleB5yQ>SV3-df>_B# z8t;Wz6$-TbRb%XKNPU=q{d-73WQPur4)_C}M|0ZR^PTsIS@{1BkM4X#~R0K=wg z{OUg37|#x8U$`9|#Eb;E)d$XP0Jr+UxxsL&51jiDZohX1);qyHx0DL4hkM>Yz&Ri8 zrw0T5EpV?7IB%uK%y;nZ$@L=cU{E9#+i)F$E6J#)2=cxQ7<34VaN#;PFm%r~JCG$| z%)Vm4Z7;(2{|F3ujqvXo*fR_<4-%Pq4(ww`0Uj5Tl(ZFSa}z1OJb_uK@cI5LK;ms| zpVknFy@O+K7BHa~DBsG&lFy;$8Uw38;L#QdNQuJp*x^863!QS?1DLyrwDZRoPqYg; zCAya1GPAZjbkoPwF@gKK=t-GC_FUckZZCkPKDuRjlYrj0byHe@B1g1s`tqa$39Z48z_o!vY ziNb_323*rim>EKkR@@R|R)zv!UlrzU{1zDPAY^pn{U)b`&6B$TK9w5hWC*)H?FBd` zX$(xzxHL`J?VSzi{4~mKG@6HKY!sODJX=NAv zQLo{^z;XJL2r50wPhYy4?~ifOmnYE*lRZcOaubWK@omwdmNJl=XbP=nW*%bO?OfOr zEV|D9fYp0b^!kUM2g_oQ{#;vox%&DV$r7V%G-eGHD~>1ge!5sw+l)h~Onfx4kliy}e0Aj_=fGp}?MW{tbY2qc-=Er6vhB*@ zP9JLY50ScWSr4RNmcq-6+5d|Qq?pZ9Is6=?M46JMx0dW|Jv6P7@;tcH&*n>cDNJZp zsg(aF6qs;R+O~W=i_={y5YpKtDN;cXS`;)|I2ljt%iXmhoEtvGqFja^HqBj_3hEYm!h2hvP(p55? z`;ByaV7MI6mOET;xT~YI?lFcpr>-;6QAT48E$W(LRO;dZ|LYoOp3=B*jnO9V1U97^ zn^&_Iy4^9hFHt#`(~Pcf?Ij#6>x>=ulK!iWpF|x2_ke(5#xjHzX*C#}gc^?$RC zHPYKO;7=YJIgX}byDEUy-lmxRt-v&2Q{34|wx?=Za+ekjjxsHar8UDOQ&Q`n*j3@C zosqmgBf@mN(<)$gw5h203a#yJvKJp`Amdh3={XkPSgYyI@f$!Zo#|O2chdS7(_bGJ z0U^Ci?Au$U$x;VuaY|~WFqPcjqM`juANyM z15e7{s|K+cpUB>oC)nQka$rs-6$-Y?!C4nLDiwL6@h}I4S)P(ZsTRk`(Lv9-(_wP- zbW*w~&wJSwm{TLCo?+%rE#&loYIaAooZ;!kz$x;!v%~3eAGx3tYb9)ne8G>(&Yvn@ zy#F3pW|S)@4B@fuC0BX&;GF0xKMVhphm*a#qN`=b@p}~A<9fbRERHTrz@&T_%zzz} zly*sjIoZmT&fV$dlEsS8^gPl-0zr_?Q8=G*vD|#`ElWt6UzS1L9696$#(5 zxSwf^TlgRCm|Lb@$n2w3?4&16mn&7R!gv@JDmQmiB9~m{{vld4JzS|#=L4S~RBA6$ z;>cfAUHuMbv{m(fHr7x()mks<>_cj^@0ds%U$y%(D%l`K?HO3dF4(Mw|42pWomP__ zXhp|?YD#qd`TzL{HNz{EUTjb^0&4hxtTEHBW?W*%&3)9Yx6An{HA2m9(hFF*QO$Et z;d6l+GmF%1hp0eCBemd6{m!G*6UojzUZd5M$se=bcBn-$OejBsvysrK3|Kjuy*mYW;y`w&Q+{GsGzAM?^?Lgt(1ZC36$YPR|0GfMw;hPlK;;DXc5mxeas z`M%hE>lJs>>bCjuMiy7EeDmA6TyNucOY>?^9>1e3&1*RyQYDLP56*#>A6VROF>q>> zrN=5x+9n|u`+q+^`q<*@mkNYFu=rWdat?fE@!!C<$$n%RT|{fbds{+ntmc3N8l&AU z3$M|dRo<4YUEJxc0haw^=ygV=<=E-*fZu+NQ%Wo);~hCSPFwEBGLdmF9K`xl_T%FY z%Foq2UDw+knxDT%k54)T^kZ>2RyxEbQtB>0Iea&H7A1bHaef1b)3JQf-(Yo`O+}{6 zw)Xv#k|z$ZhP%e{o9?A`%G^4(S%fwA${}ERopnwo6IVJ}bIT~XZ;5rw`!HZZrghI{ zCgL&4TClh;C#9#wT5_CHM}$}_%a2gP0P8)MgIu7!^|>>5+(ot4eN8DB{LXB)6dvwv q-f3Lh%9dswfYDflIhci5%z($*T{d5x@};fST8rbz!#f;rtp7i1u#+1A delta 3294 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 style=" font-weight:600;">gta5sync</span><br/><br/>Ein Projekt zum ansehen und synchronisieren von Grand Theft Auto 5 Snapmatic Bilder und Spielständen<br/><br/>Projektversion: %1<br/>Gebaut mit Qt %2<br/>Läuft auf Qt %3<br/><br/>Copyright &copy; <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync is lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - Using %1 %2 Using specific library, example Using libmyfuck - Verwendet %1 %2 + Verwendet %1 %2 - + Translated by %1 Translated by translator, example Translated by Syping Übersetzt von %1 @@ -179,31 +178,35 @@ Copyright &copy; <a href="%5">%6</a> %7<br/>%8 i https://github.com/Syping/ - NAME_OF_TRANSLATOR - Enter your name there - Syping + Insert your name here in following scheme, First Translator\nSecond Translator + Syping - TRANSLATOR_PROFILE - Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage - https://github.com/Syping/ + Insert your profile here in following scheme, First Translator,https://my.profile\nSecond Translator,mailto: my@mail.com + Syping,https://github.com/Syping/ - + + TRANSLATOR + Insert your name here and profile here in following scheme, First Translator,First Profile\nSecond Translator\nThird Translator,Second Profile + Syping,https://github.com/Syping/ + + + 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> @@ -212,7 +215,7 @@ Snapmatic Bilder und Spielständen Copyright &copy; <a href="%1">%2</a> %3<br/>%4 ist lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> Pictures and Savegames Ein Projekt zum ansehen und synchronisieren von<br/> diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm index f47f8310815144875ca29dbdf993068490a4e12f..6469f65f9ba05f4551409c399d5249b19f066b46 100644 GIT binary patch delta 2957 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 delta 3070 zcmYLL3s@Cp8vbU^%$YNnb0%)0B7z`BfCuERa@DwB6a-0DR5CI)IbKk*QV*uCVyuSd zsvD^YUJ{BF!3#VB8Le?Jbt5Gh&+RcZ2m^%J(fu9 z)X)akj4}~PdJS!!5>0OTq8#mah>k0%<~MtsL{qOj*0CjLlk%v1|Rs{cT=QF#Bg=gd4nDdDi z_`8<5d$$W--(wya_YwKM%?@kafO7`26McF>^e^nx<0uqg#J-UZ3!Wd4EW$gADqj2L54MS9R&s(D*-CG(CpQT~=N_KDXMg()IhTJ0!1ztnb zVGY$v4F|Vt=xL{6@C*%;_Oms)-9)2bWUck}K}2IYwxPwHXv_k(iF*msuV9;xLdw)# z?8$$qMDAv`V;-)XaEv{3cRi7zh5hkl5+n>~J9pU=C04UNH#3p)G3?XvP(~ia{^n;# zH2zbaxa%Ukzp5K>;u(=ku5Qo*d_QQaE@)vdQIcTQW!9`Faw^f~7Y##!aNX=GNIj%S zw=PSBSMIuoAP{kD)wSkAQqQNlwspACt5err49U4d-Q#TtlX92S%gBg}12=pp&JhlA zp7U%G#zrpaH(2_j4;K=R`@%>wkNnJ=T2e%2b6KY9|;1JSv=Q&qhBg-zXwZ*YuC^%fDhcU zg(xP2&u(u4^NW1J_L*2VE&Ngu3cY-Xx0*9Crn!8%4>}xofG=MGA}=@a6@3{*Blq%E z%cfvFf8}e~HL&bsz9s}#41d6XzV{gBe^4NQp2e7XwDX<+K_|Mm^n6Gi5i>(SDE=wZ zzEAJmX2L$m(x>M@YIC7}COd~H$XEYHCX{2^^#}I=9nS0fj$TBVZwW#-q#wLaka`!u zy44y6glIT+l3>s6CYl%{I9*G{{5xd`p1-$Z4@?n8ehPG(DolT~9&6TF$XkMr#ic@i zG%{fPQo~Urgg39_e_@n{o)N;F%bf`67s3bI7DC!QVPpG7bUaq5YPJ9sVPDcc5PBrk zpMx^~SA~`qgxtPN_$kGjj>Xd=bRPzhpsm8a>Hwm&#lo`&ge`i#fsaL~65la6x0#82 z7(;Yl6+EA0827LO>78as-qS%8_lu#Rq7v5KFwAMr!xVjKc=tM__gHIKVu9o%)*Fh4 zeTQkdZaCyyf>62`np)1msuDws^$-f^>J4pQL3-~P!~I4uw>@t7#kC0wVzKD>MKiqj z5FM{Zfrv>QTGWjW1#!d^cZ}64@ufv5s9&a`eY5EA2XEb;ioqo@Aaqa+K64lg>?bj9 z(^^<~MNBC>iN%#6<_NIZu~xLcx(Skmg^9D{e?~{E#M!R{*%)#DV}GpB2ywxBSin_^ ztG)nZHC$X1dkyK16idxPAdo3mHK)Q$N3q5i8SttVPewt>&`aW}uICuHE8>}{iAeqD z;w5tk#`+`ie)dCHk|!}eAU?X-DlxbF|JW}X9o#@fkX%zxc%V-5C{BQFWxp@O z=JS#_I*vvv!{u`C6*$OM!?_`A|HhQskxr5J*b~;=r^a@>dZ(2&=!` zu>eFTR?Fu;&O_SYmCtX)`@*k2<#cnT9 z>{r<#d<}}T3@Pmx#rf!9gy)9h?fDB7uqZR!A-V1cr7#I-?ok#WoQ8+gWu;{NMifX? zHjTvR{4=GT!3#~uTn%GyE9J2uB;+bpDjE#5Do5@^;Z$#>)yK->z*OaQk|S1rmGb=) zbYeSHxxE#kaqcuaT{Gipx5ntygZUo+g3&Vsb8O>e^!gqJ$HyB(O0WryIT|_?8pESj zAq!Sxl(8A(yuvuC3DW!27&GhkzkY7se6te0|X|#71K12QLg!guCw!J=2;5s3gjFeUe-vVN%S_&rF^o` ztp8nWn;M-GGkrqr^o;cA)Je(F857bsR46VRE}K%Bzzu - Using %1 %2 - Using specific library, example Using libmyfuck - - - - Translated by %1 Translated by translator, example Translated by Syping - NAME_OF_TRANSLATOR - Enter your name there - Syping + Insert your name here in following scheme, First Translator\nSecond Translator + Syping - TRANSLATOR_PROFILE - Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage - https://github.com/Syping/ + Insert your profile here in following scheme, First Translator,https://my.profile\nSecond Translator,mailto: my@mail.com + https://github.com/Syping/ - + + TRANSLATOR + Insert your name here and profile here in following scheme, First Translator,First Profile\nSecond Translator\nThird Translator,Second Profile + Syping,https://github.com/Syping/ + + + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> Pictures and Savegames - + 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> diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index 26829fd202ec27b5f584ebf656d74cb3e1b73cb6..157f41e9501710850b76b71e7dd629fa53cc992e 100644 GIT binary patch delta 1980 zcmXAqeN>3P=ia$<@0~m2;LPF{$;ZJW=GDEtW1qvQ_pF?^!ziQd!PF}zvuVz z{rzVB8Ou!1HY(-()STCCswfd3hXUKfV&gXiR*zVStDbn+Ji!xl-9jLv+9{Rc`VFr6Z+xmQDsD z-xZwxoV4e;RKRggaD0#8oO{yVsf~aoU(oIm95r2V;t9djL^8yUfmEsO(E(uQ6{)>F z8OZ!hI@&!R$mo|kU)OYgDKK~dVO?UmcH8U0gAUv_Yy_|`TMQf z?tcMADc0oLA;9mp2HG|Qqb^%F{ltjX28#~6 zIVFn+=LF>i)C00QnT*oZE?GR^i;tGi{!R_<$&!AdH;qI zK>JSaFdk#6ek*tGNCI+4$$e|yWM;Psre6?TI9d+%9iyUi4$0TbJAjex@}2%Om6p4HAkM9{t}CUM zmMaJL9tXmMHYMdSV13aR*~2bblxQm|p8&*5A=@&knqq?O$p9mj+f;QRj0f6PeW->h zw+JTR5X@SlM&Cb4G450!evcf}p)Og~4%qY5m01*>qh4@IhPvts-wm(e#5-#BzrO;; zh17-}wG7avHlAw)N<#H&YgZK?eCk2pcdXUZYI}bYkUUoH?q=;r460uiu-#l;b|r_U zD$ch@_QW&dtM;tBtyKL4`>b0nto2{*`Fr}<=jHawmOnFNf3sJ2EvJ@>>}$t}sfKhLCiUehMt84oOcPn+~S4d_b*-Kkn` zQ#~EEXyqzX>5b4HYoepGzR)V>-lPNHYZWUHDC*79q?)Rls1rv(dF>K8``I1hfWU)p;MaJK7L5A_05?(2hR zsGTVr49n4%fuu{uFORTPt|}w=F$0-#)Y#x;#9qHqm+WT-PaAbP16-HL5FZM68;#){ zB=fcy&9NK#Aycq$!04=`p|W<8`^rj`t~{f>Y5!a3>Inhy?AbiPw& z%w?X>k1|tUWmh>O1jC*%GfiqN`bX36VX4Lq38ri@L+>AFpFZ@8`7$kLUJJVS71xa)zZ=*Z+;SNbiMF1yB6)qjZpl1p7r*E7Xhlxyct z0ZvfUweKwLcq&{ck1y+Kz~M$UQg!Db7muO}Pw}?`)ri}A+nHhL c{-UhH;`}WC{GzQ}T;8ogSN`GauBO2M0e&qDo&W#< delta 2088 zcmYL~dr(x@9ml`B+`IR+cUNE$V?Yr?l!pYCw>)&g1<3*nxC@FPkpxmyFb!hNOyfn2 zO*DoW4K)u^vzAz^bWFlSCx9J6YN(AHNs5UvZR)5a#m1r`$*42wZ#^^ZAA3K0&-tC- z`MvMVn6B-dZm&h#3V?n}6XP5e&~FFSR{-t{AYc&Soxq9@fknxHiNsp;y2P&5wi@bf@PDYyX+$QuFYC04eAn{WYIfW-c!hk(zd3-as0uOJ3i zfd3#Dn0*tx_bjmd2%~E)L{AwRmVrgqHsF!%jBXy$z6;885$(I6d@G_qiv%iWBl>1M zu?R6k1;G4T#Q5}O=^jvn^Y_R~vy;_{u-B2ttJ;vilb9L@$1!4Q9khy4AgCO#93LkS zUc&oN`2*=i=-xF72vs<7w}ljYaqSC|S3+>(5Dyewz;shF5b-aad^r}#m|`q`mC=1u z7y5^A4VZODS6@B@1jp-|6Tb)SF}fEz*8-u%y8oyYcI&9V>MZS-?9?~zbOEdP>fd`J z0hsqFehI=G33!qR8_l`mx`bfdyaby}zXW%3l3H#vGKQ?fNT+Er4r|{$6|_ zM0Ax6n791SJ1f7#^nF z`_~KK7E#;H$`<)NO4-UWF?2Kzh+Ze!?sieg4~aRqJ%Bq!EIi@`oR`E#&+mZ5EOFE6 zI;tVB*t*~=s*N`B)G&3CmPzJpv)gB;2bJs{4S4@)ujnc+?qJfv5{n1Komo9DI zN2wBLNqgdwshuaJuG7W9n#ZNFWg0YOO-r9uJx(?7tuzsr3WThZbyIX<_Oz@9g;S1y zki&{d(QH+YY^4Db{+t}2L=js4jGR&5Nu0;Hatq^{-Ez?+$>n_-O>w4Pcx=pXUxoHEWR#J z%y*MVX8Fsbw*j+NzWUJ^ko3Gfd5&r*35u?N8>P^#Jk(1mGfyd%7s!#UL}iDG91gmm z>`B&Kl>1y|Pu?{kQ)6^SC>_BxP#h+uGv-BFA7XUYDyJGrQMHvw@>LVcne0jWEeky;##9cdnu4|RbUJq zoJ${>d}GX_J7oDqW3z)I@mPm(S8fL>P>lx`)4ROT*r}u0p5b9E&M|hG$S=n!1a+%lH;!z*TjbO0^cXMb%su%2mX(>I0^k z)DuJ0xAQqhYm_>&I*2?RQLi?U!st&-oNr*oylCouq5)Vq$e8tpdG2~LB;kxX`!=P{ zK5cFq|A-v=#{5h>MOgBf5B=;0mhLtm`;_!pCe0%!DN^yBs(I#}ING>D+Nvje+JrD6 z#)N#VLlf51b0ap1zJX_;UqG>~$X?^jt8tatidPoeT+Xun)1pO>l>I%XrGWweU#=-B zbLJHk+I`#m{mn)3bK%BjG?2OmG@}k-h(yAJr}cm86?bz()6-#*31N{|-@%@0^PBGf E0$c1T8vphttps://github.com/Ganjalo/ - Using %1 %2 Using specific library, example Using libmyfuck - Utilise %1 %2 + Utilise %1 %2 - + Translated by %1 Translated by translator, example Translated by Syping Traduit par %1 - NAME_OF_TRANSLATOR - Enter your name there - Ganjalo + Insert your name here in following scheme, First Translator\nSecond Translator + Ganjalo - TRANSLATOR_PROFILE - Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage - https://github.com/Ganjalo/ + Insert your profile here in following scheme, First Translator,https://my.profile\nSecond Translator,mailto: my@mail.com + https://github.com/Ganjalo/ - + + 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/ + + + 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> @@ -176,7 +179,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V Copyright &copy; <a href="%1">%2</a> %3<br/>%4 est distribué sous license <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> Pictures and Savegames Un outil pour gérer et synchroniser les photos Snapmatic<br/> diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index 4ccaf028aa5d8b91b86d8747b6058be8898e9ef1..5edd3699b30e103efa3f3918816716ae3f16a420 100644 GIT binary patch delta 2334 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://github.com/VADemon/ - Using %1 %2 Using specific library, example Using libmyfuck - ИÑпользует %1 %2 + ИÑпользует %1 %2 - + Translated by %1 Translated by translator, example Translated by Syping Перевёл %1 - NAME_OF_TRANSLATOR - Enter your name there - VADemon + Insert your name here in following scheme, First Translator\nSecond Translator + VADemon - TRANSLATOR_PROFILE - Enter your proilfe there, example a GitHub profile, E-Mail with "mailto: afucker@sumfuck.com" or a webpage - https://github.com/VADemon/ + Insert your profile here in following scheme, First Translator,https://my.profile\nSecond Translator,mailto: my@mail.com + https://github.com/VADemon/ - + + 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> @@ -136,7 +139,7 @@ Pictures and Savegames Copyright &copy; <a href="%1">%2</a> %3<br/>%4 под лицензией <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> Pictures and Savegames Проект Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра и ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ <br/> From 3a00e9b5b0d6190f89730d9834284e793628478e Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 17 Jan 2018 00:59:40 +0100 Subject: [PATCH 034/359] String Update + added new Dialog --- ProfileInterface.cpp | 2 +- SavegameDialog.cpp | 11 ++ SnapmaticWidget.cpp | 10 +- UserInterface.cpp | 54 ++++++- UserInterface.ui | 2 +- lang/README.txt | 10 +- lang/gta5sync_no.ts | 344 ++++++++++++++++++++++-------------------- res/gta5sync_de.qm | Bin 44780 -> 45245 bytes res/gta5sync_de.ts | 68 +++++---- res/gta5sync_en_US.qm | Bin 23768 -> 23644 bytes res/gta5sync_en_US.ts | 70 +++++---- res/gta5sync_fr.qm | Bin 25845 -> 25649 bytes res/gta5sync_fr.ts | 68 +++++---- res/gta5sync_ru.qm | Bin 31724 -> 31440 bytes res/gta5sync_ru.ts | 68 +++++---- 15 files changed, 420 insertions(+), 287 deletions(-) diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 231598c..cdbb667 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -1102,7 +1102,7 @@ void ProfileInterface::deleteSelected() } if (selectedWidgts != 0) { - QMessageBox::warning(this, tr("Remove selected"), tr("Failed at remove the complete selected Snapmatic pictures and/or Savegame files")); + QMessageBox::warning(this, tr("Remove selected"), tr("Failed to remove all selected Snapmatic pictures and/or Savegame files")); } } } diff --git a/SavegameDialog.cpp b/SavegameDialog.cpp index c244ed0..302b92d 100644 --- a/SavegameDialog.cpp +++ b/SavegameDialog.cpp @@ -35,10 +35,21 @@ SavegameDialog::SavegameDialog(QWidget *parent) : ui->cmdClose->setFocus(); savegameLabStr = ui->labSavegameText->text(); + // Set Icon for Close Button if (QIcon::hasThemeIcon("dialog-close")) { ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); } + else if (QIcon::hasThemeIcon("gtk-close")) + { + ui->cmdClose->setIcon(QIcon::fromTheme("gtk-close")); + } + + // Set Icon for Export Button + if (QIcon::hasThemeIcon("document-export")) + { + ui->cmdCopy->setIcon(QIcon::fromTheme("document-export")); + } refreshWindowSize(); } diff --git a/SnapmaticWidget.cpp b/SnapmaticWidget.cpp index d9fa875..d7fdcca 100644 --- a/SnapmaticWidget.cpp +++ b/SnapmaticWidget.cpp @@ -285,12 +285,18 @@ bool SnapmaticWidget::makePictureVisible() void SnapmaticWidget::makePictureHiddenSlot() { - makePictureHidden(); + 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->getPictureStr()+"\"")); + } } void SnapmaticWidget::makePictureVisibleSlot() { - makePictureVisible(); + 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->getPictureStr()+"\"")); + } } void SnapmaticWidget::editSnapmaticProperties() diff --git a/UserInterface.cpp b/UserInterface.cpp index 5948176..7c30b99 100644 --- a/UserInterface.cpp +++ b/UserInterface.cpp @@ -83,6 +83,40 @@ UserInterface::UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, D ui->cmdReload->setIcon(QIcon::fromTheme("reload")); } + // Set Icon for Choose GTA V Folder Menu Item + if (QIcon::hasThemeIcon("document-open-folder")) + { + ui->actionSelect_GTA_Folder->setIcon(QIcon::fromTheme("document-open-folder")); + } + 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")) + { + ui->actionOpen_File->setIcon(QIcon::fromTheme("document-open")); + } + + // Set Icon for Close Profile Menu Item + if (QIcon::hasThemeIcon("dialog-close")) + { + ui->actionSelect_profile->setIcon(QIcon::fromTheme("dialog-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")) + { +#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")) { @@ -97,12 +131,22 @@ UserInterface::UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, D #endif } - // Set Icon for Exit Menu Item - if (QIcon::hasThemeIcon("application-exit")) + // Set Icon for Profile Import Menu Item + if (QIcon::hasThemeIcon("document-import")) { -#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 + ui->action_Import->setIcon(QIcon::fromTheme("document-import")); + } + + // Set Icon for Profile Export Menu Item + if (QIcon::hasThemeIcon("document-export")) + { + ui->actionExport_selected->setIcon(QIcon::fromTheme("document-export")); + } + + // Set Icon for Profile Remove Menu Item + if (QIcon::hasThemeIcon("remove")) + { + ui->actionDelete_selected->setIcon(QIcon::fromTheme("remove")); } // DPI calculation diff --git a/UserInterface.ui b/UserInterface.ui index 151a728..7927dcc 100644 --- a/UserInterface.ui +++ b/UserInterface.ui @@ -171,7 +171,7 @@ 0 0 625 - 21 + 23 diff --git a/lang/README.txt b/lang/README.txt index f95afe5..c21786f 100644 --- a/lang/README.txt +++ b/lang/README.txt @@ -1,5 +1,5 @@ -Community translation files - -They get loaded in ApplicationPathExecFileFolder/lang - -You can help translate with using Qt Linguist, after you've translated you'll need to send me a pull request on https://github.com/Syping/gta5sync +Community translation files + +They get loaded in ApplicationPathExecFileFolder/lang + +You can help translate with using Qt Linguist, after you've translated you'll need to send me a pull request on https://github.com/Syping/gta5sync diff --git a/lang/gta5sync_no.ts b/lang/gta5sync_no.ts index e1b8829..fab80f3 100644 --- a/lang/gta5sync_no.ts +++ b/lang/gta5sync_no.ts @@ -171,6 +171,13 @@ Pictures and Savegames
ImageEditorDialog + + + + + Snapmatic Image Editor + + Overwrite Image... @@ -202,13 +209,6 @@ Pictures and Savegames &Close - - - - - Snapmatic Image Editor - - Patching of Snapmatic Image failed because of I/O Error @@ -267,10 +267,8 @@ Pictures and Savegames - - - - Background Image: + + Background Image: %1 @@ -303,6 +301,13 @@ Pictures and Savegames &Cancel + + + + + Background Image: + + @@ -333,11 +338,6 @@ When you want to use it as Avatar the image will be detached! Select Colour... - - - Background Image: %1 - - File @@ -546,11 +546,6 @@ Y: %2 Feedback - - - Participation - - @@ -567,11 +562,6 @@ Y: %2 Hardware, Application and OS Specification - - - System Language Configuration - - Application Configuration @@ -606,8 +596,28 @@ Y: %2 - - &Send + + Language for Areas + + + + + Style + + + + + Style: + + + + + Font + + + + + Always use Message Font (Windows 2003 and earlier) @@ -615,6 +625,21 @@ Y: %2 Interface + + + Participation + + + + + System Language Configuration + + + + + &Send + + Language for Interface @@ -628,36 +653,11 @@ Y: %2 Current: %1 - - - Language for Areas - - - - - Style - - Use Default Style (Restart) - - - Style: - - - - - Font - - - - - Always use Message Font (Windows 2003 and earlier) - - Sync @@ -801,12 +801,6 @@ Y: %2 Export as &Snapmatic... - - - - &Edit Properties... - - @@ -814,15 +808,15 @@ Y: %2 - - - Open &Map Viewer... + + + &Edit Properties... - - - Open &JSON Editor... + + + Open &Map Viewer... @@ -971,6 +965,12 @@ Press 1 for Default View Exported Snapmatic to "%1" because of using the .auto extension. + + + + Open &JSON Editor... + + PlayerListDialog @@ -1112,28 +1112,21 @@ Press 1 for Default View Import - - - - - Can't import %1 because file can't be open - - - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) @@ -1142,6 +1135,16 @@ Press 1 for Default View Importable files (%1) + + + Snapmatic Loader + + + + + <h4>Following Snapmatic Pictures got repaired</h4>%1 + + @@ -1153,14 +1156,14 @@ Press 1 for Default View - + All files (**) - + No valid file is selected @@ -1179,16 +1182,23 @@ 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 + + @@ -1258,16 +1268,6 @@ Press 1 for Default View Export selected... - - - Snapmatic Loader - - - - - <h4>Following Snapmatic Pictures got repaired</h4>%1 - - Initialising export... @@ -1299,8 +1299,9 @@ Press 1 for Default View - - Failed at remove the complete selected Snapmatic pictures and/or Savegame files + + + Qualify as Avatar @@ -1313,25 +1314,6 @@ Press 1 for Default View No Snapmatic pictures are selected - - - - - - - - %1 failed with... - -%2 - Action failed with... - - - - - - Qualify as Avatar - - @@ -1352,6 +1334,24 @@ Press 1 for Default View Patch file %1 of %2 files + + + + + + + + %1 failed with... + +%2 + Action failed with... + + + + + Failed to remove all selected Snapmatic pictures and/or Savegame files + + Qualify @@ -1407,7 +1407,7 @@ Press 1 for Default View - + All profile files (*.g5e SGTA* PGTA*) @@ -1434,7 +1434,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer @@ -1454,7 +1454,7 @@ Press 1 for Default View - + Failed at %1 @@ -1633,7 +1633,7 @@ Press 1 for Default View - + Snapmatic Properties @@ -1687,6 +1687,18 @@ Press 1 for Default View Title: %1 (%2) + + + Players: %1 (%2) + Multiple Player are inserted here + + + + + Player: %1 (%2) + One Player is inserted here + + @@ -1725,18 +1737,6 @@ Press 1 for Default View Edit - - - Players: %1 (%2) - Multiple Player are inserted here - - - - - Player: %1 (%2) - One Player is inserted here - - Yes @@ -1768,7 +1768,7 @@ Press 1 for Default View - + Patching of Snapmatic Properties failed because of I/O Error @@ -1978,17 +1978,27 @@ Press 1 for Default View 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 + + TelemetryDialog - You want help %1 to improve in the future by collection of data? + %1 User Statistics - %1 User Statistics + You want help %1 to improve in the future by collection of data? @@ -2066,38 +2076,13 @@ Press 1 for Default View &Selection visibility - - - Selection &mass tools - - - + &About %1 - - - Change &Title... - - - - - Change &Crew... - - - - - &Qualify as Avatar - - - - - Change &Players... - - &Exit @@ -2150,15 +2135,15 @@ Press 1 for Default View - + Select &GTA V Folder... - - + + Select GTA V Folder... @@ -2172,40 +2157,67 @@ Press 1 for Default View Hi&de In-game + + + Change &Players... + + + + + Selection &mass tools + + + + + Change &Title... + + + + + Change &Crew... + + + + + &Qualify as Avatar + + - - + + Select Profile - + Open File... - - - - + + + + Open File - + Can't open %1 because of not valid file format + Show In-game + Hide In-game diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index c2d6219a11e86bdd7a451e8ababbae8ed8a8b125..4818c6b8363d6b432fa4bf0376425d59295a683b 100644 GIT binary patch delta 2508 zcmbtVX;c(v7QIze(Op&Dw2mlYUlbK&Q$*B>3vt*~+)+_MK^j4uMwZ67whD0<#S)q* zimYz9MBEuLqK3F)h!PEBCVFHdaT|?2F)ndlPtQ4XPX12!slL@!^?mQY`|f-7t74=)de;fiBtHDPR`uKo9ItmCl3BIKnSZcCju@98xlYrj# z=sRFFFm&u(>q$v9d@TXphQaq_I1ysuYYF`MH}JIt-eCt{OW+;*;QJ(quw5R;xDT0+ zewOVE9$?sDS~bUnaP2Liv>1_}5zc>)s6qEBEe27EUV!6w7;})WZ~a*=VnU7O*m$Is zk~@#;8yj#Xx6h{CRuoPf?p>wS;5X~rX9Arv8j_tuGL?%>7Pvjc5RmrvF=Q!e4TY*(&Y|z zgwcaNFsO+1iehUMJAfP;_QZ)0U{Mu&vZ*JKJD6?cd??pk_WWOo`|b(s?9Hd!08JhH_se4d|7Yxj8hfDVHrx3q7Fc(hHMidYVz02jjUvAGsqEXJZot~7 zHa1R&fdMXFHbTv9VEY1_9$)_seEiJDF^3)u>TMHZFayQ2ZDMQJ0RxBIq~&^&lcMF@ zHnTk&xRAF)ff#`c4Wp-)UgIVVE(1ROja$_=oM`?k$8vp)aa^rmHOY|5)gFwea=ze> z0=}RxI@4T2AND{S2<7(-G*~%sq;)2YknI zuUoH@TOV`p&V~@D^*m=;KUd)G_n83YPga!Qazf%Ue#VU^U~wUzzGp5l-Hu-&2*3tg z-WU)IeALF5`cVdJrt_uw#AW>fzWmJ;VCFWyYE>Lr@(EwdZXh${^R=O*Pt;`o=z#_x za1nnku8#ECD{FaoM{ir#OLk=MaN9}o-az~*+qrB8pfk$5_{gs13elWH>KGLE++LtO zS~l||jMa(-_s0RM4OSfAuE_ZA0T3}(vHWl)ux*QCYng$voTezcQ3UL4P*k0#%IwrD zz8Lci2o6@%9sGstXjGhNCFb+)Dw>+eD&E}`KgLk6_S~T8IAa9TOBBxz1_PB@ir-I? zIrH8r`G`wEQqfAK>!kpaq)-|5ri#ikRQbtE8YU%e%CY-eXoxr~)60oSvX?UByq3K9 zPvz44Bu(@J<#IhqGL~1a^t?+R8=>5*rR(z|l&1sNQ}<3(Ha1azu5p)nMW|z@;Bapw z8SJ9qmfJx^oGbKx-4iIRmtz&~##Uj_%`<>Yxe#e8pycd?n8M2x^SKbOAbI^&LXwG+ zTQW(|MZKUtQ46{hLjJ0d_3Hp&;T2)+If~`vB5a8Gfh?pGHU)&x?rB2R`Ek@A?}ggH z$>jf~!sU@9Ms}2N_2CEV{s{wQ zl!-05#{uEF6*J6fq-yZ(jHKFOBze+^G$NB;O5MKxtFR6l#Q- z(x!+Gnwrn7Sdc955*&Z-_Oe(!c7z2gH?D^fIfs z9pO~hvnt`S8DM9vlS4%JxW%e|eSZN`3RQD@Qdq?uRrVOd1hZ<{sRWuwWvca~ib%t1 zmC2v3i_NN1hF(vZ9#-5et4bp%tm=-cN;3plFkW@`IZ3uFMm{9=_S%!8cK#uNrtCzu zb0>AgnxEBuL&^EBe^UFl)3$3T$Y!zkB-4KN)QGa^tIL#Jk zb>Ti@nbt>rWGZ=T(+TydhB#p45i2I`Q(uVd4oq#Z;z>uvuc%8WVC1`4w45zMD zYc8Co6z8ZkH*cH(hD2x{czpq^k~A;eh-`mJW8O(Q8oo)RvMsCgRlS~Gmzol!WWJO? zMEdj#haNddffiYGrlrFJxybkrCPGJF>$OA}WM*-QWVvskyU7TYC+0ZHb5gs=2Mnt2 z5fO=LI&HE?PKHO8Ha#O(>yfC_$u22l>q_(^gP3AVu;4ISnvJCYZkqguaNg)oo2Mb2 zekWrgooS(y8&^BaJG5@S^h(gjmX1OH3zeFdto88j?-8x{pO=`fm0$04mCx;VWVTtt d1%?sNCA3Kz=KcSnvQsk_{UKD{x!wL<{tcsR^8o+= delta 2218 zcmXAq2~-qU7KZ<-uA;lDx@nD#EvRfN2q-X$pe%|TxS>(OD2XNrO;ox8r6Gz&KyXWd z*eM98sGzt+h(rmvV-SfthUKVXoKcfW4vcaXjgDm0NHUky;T*nxRrkGn|NH*;>f+Dr z%q5O1vZ{iShNb7iba5j z0i(xl0fOhnD?h&Igm-^J=P-EJ&!mD_c=snR9RTnC#HCU2?oV9$0N#)Nf!$7W7~?W& zD}4HwFYH6uM4Ao!G8-{Ijw9>`0=v*h_eQ+3L71!0OD_)zQ{`bcwCMJOapA%rG2A6E^&_6HF9MCE9uKz|R_g!EooXum3^dIu0N zS+zRD4cNCszOQ=U?G88LcWO?Qzy(dEsErS}w!}iC@<$c1uIuQ<}mp) zS1#a;UeR2`fdF#fuUuP35irqLVfq4vwi#U8nOu7RiQK|DuiSTy=la9qNAiYaC4lCE z!s(0nfP=e%Pg?lc*2|Q#nzxk41554s&4NJB-S{kDQa+@EFB?OpZA;_J@+j@jX1?Ne zH1OUXzA|SS?T(Ke#XGY_|B)@ci(|Om@Me25Zl2wu<)eTVeRlC|3SizNALb(mUQmm@ zR$%=uwShYd9M~cE@l%*@lB^u8nf9E{d5ME& z-mx~|vp|id;t-G!rb%fukvSx}$Ij>&t2t^SK_A9x&iL&F)|fR7m+7Ev3zmnggBdhV$dW>;H%f@IT_=N!!g6&j*+?s_ zETOtHErNO0Gpb~sU`{0RH-vTn8waFz$t`MQR-RDVIG_3vDpdO|CX;Oxu7_sV)k6DwbAap#LWge<5HwDB8vC3Met^hylMZW@$UN$2pQv-7BbliYU889AvDxCN z?Ac`UtD=7Zb#Y^+7?M~<9HUT9Rp@=7PYgTs8gLjPPKjGcOc$fNX<}xhxbOjO%U~z* zou~Fdd5v743Cg-Ao*CvqjT$UAxRKG^%Eg8b9*F%-yn2`JADgzBbt41 zi1@vUwtev%v1J+qq?{AmGQI(XrwUWnD_nb3VPUA)c9fbqBuDIUi6Psc7w;S=x$dQ6 z=P7EgcVevAC8YtMo)o)pP`^w+Nlg7_+QE^MD%=35M@jnr{;WAATLhP^i&CyVb#Lqp zDbIYHW-XBNCqz^C_DJ~=UBEg)VPTe(|2>s8G(@t!$pPM4AQcLsDL5OzK=@oRN{U{fRMz;`c8AD%?f)m=Z2+E^zb5E&d zd-LUH(ZhZJVcpOled)Ses2kc%Ct^FV8y)mdVE9`)@4Lk`PLg$!M{My!-QosnRcx>> z+CYAY_*$XaN4NeqwQ6Ue&UTDyT0KoyvxJP7->y4-aTyR^qi|)Du4$PAu;ikyGnvvX zePPc@&A_{7%SF=#C0@Qo+b2;ZcTWvNaxW-vs*O@FS875cjDwAt`iY3)-vYO - + Savegames files (SGTA*) Spielstanddateien (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) @@ -1718,7 +1718,7 @@ Drücke A für Standardansicht - + All files (**) Alle Dateien (**) @@ -1739,13 +1739,13 @@ Drücke A für Standardansicht - + Failed to read Snapmatic picture Fehler beim Lesen vom Snapmatic Bild - + Failed to read Savegame file Fehler beim Lesen von Spielstanddatei @@ -1795,7 +1795,7 @@ Drücke A für Standardansicht - + No valid file is selected Keine gültige Datei wurde ausgewählt @@ -1889,6 +1889,11 @@ Drücke A für Standardansicht No Snapmatic pictures are selected Keine Snapmatic Bilder sind ausgewählt + + + Failed to remove all selected Snapmatic pictures and/or Savegame files + Fehlgeschlagen beim Entfernen von allen augewählten Snapmatic Bildern und/oder Spielstanddateien + @@ -1991,9 +1996,8 @@ Exportieren als: Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen? - Failed at remove the complete selected Snapmatic pictures and/or Savegame files - Fehlgeschlagen beim kompletten entfernen der ausgewählten Snapmatic Bilder und/oder der Spielstanddateien + Fehlgeschlagen beim kompletten entfernen der ausgewählten Snapmatic Bilder und/oder der Spielstanddateien Failed to import copy of Snapmatic picture because the file not begin with PGTA @@ -2079,13 +2083,13 @@ Exportieren als: 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) @@ -2125,7 +2129,7 @@ Exportieren als: SavegameDialog - + Savegame Viewer Spielstandanzeiger @@ -2157,7 +2161,7 @@ Exportieren als: Schließen - + Failed at %1 Fehlgeschlagen bei %1 @@ -2412,7 +2416,7 @@ Exportieren als: - + Snapmatic Properties Snapmatic Eigenschaften @@ -2575,7 +2579,7 @@ Exportieren als: - + Patching of Snapmatic Properties failed because of I/O Error Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen I/O Fehler @@ -2745,6 +2749,16 @@ Exportieren als: 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 + Edi&t @@ -3146,7 +3160,7 @@ Exportieren als: - + Select &GTA V Folder... Wähle &GTA V Ordner... @@ -3245,16 +3259,16 @@ Exportieren als: - - + + Select Profile Profil auswählen - - + + Select GTA V Folder... Wähle GTA V Ordner... @@ -3263,7 +3277,7 @@ Exportieren als: Wähle GTA V &Ordner... - + Open File... Datei öffnen... @@ -3284,20 +3298,20 @@ Exportieren als: - + &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 @@ -3333,12 +3347,14 @@ Exportieren als: + Show In-game Im Spiel anzeigen + Hide In-game Im Spiel ausblenden diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm index 6469f65f9ba05f4551409c399d5249b19f066b46..5cbde30112677fbe15aa466b740086aa7d7d756d 100644 GIT binary patch delta 1892 zcmX9;dsI~Q7T)K~IWu#9XND04C%l4zfj9#*#A5~$kjI^oH)v=VuU<8S9!th$D7LC` zH0`RlRx9qg#=QwX0#lQGU?9eol@v=^sKZ4fQ|u`v8Jcz{&5HV1=dW*_-`V@Of8V#i zy)T{QhC8^|L%4*xP$!pHS8V6f>%239*OSmG5M?qF{J@eA>fSX=i6o|{;PCHt=gm?q ziT*Q01^T)%^X%nhX?GEsR*_{QtuT=+6KRDNWa*Cvwvpxg1mLg|&zaL|$U2eg{*f|L zk!9;9SLGm4(G8mSGB9Z^HkFOKE=q}vzKre3p_*#C%Cb(Yeei7?g!&BBKuo>WT!$D-o}^3 zjS@Y0k6&^I+4FYuPc3)}RcG6+DP14rR>lwib}dBr2O&-QB1Gk%nm@5QlTt$H=foZY#Pc$ zSh8XiW=R``mbiT&?^iMebAF=GwL2L;IV|{V|3x(YJr&c8D(007{*KM~zeKpcw3BFR zrEqVc4`>s9eSd<^>!L7`XJ4;03g&FDxcEXhDvpcQdsY%zmx&uBiRjOvqR$3$#&NMB z4lm2TDmH9E)!fg;z4yzB;x3BKn<^kyxDpU-(_ELe;XOgH;709&rO`z34ce9bYNF)7 zC>f$Xc)5-R)}qLZx)5PMQK?7qicYRnX%lDpp3pU)hI&OQx?_bmiKZ#KwgD7M)atss z(UlOJ?u+6D@Xs>c$Vne=JfpjLD2b?SpKiPz&dBQ2i|!t%-J}oiv4OxYefIrkBJl@( z&YivJ`c{3>0YAi>uCLzP1gA~XuRdLgu8-xd!G8u+hFpNv4M*WUhS!ete=d>SHX zfsQj&bT=wvdb6)eZm@2_X}*f?vvPAQ7Ng55pWGaQ-SeH?RSh;}>ww5EbIBiNjuOTC zW&c_fEgh5x8Y?mH&GN+^ShzVl`KQjyVCPYB3K@hqU5E=cNH+qQ3A-Wq@c)p{3?W;m zU@vTzf-5E&tg%0WK)qr4Oem(=WvD3x+9n%bJn=USD;c)u?jRDrHPpxBT-<4B;IR4~ z|54E$VrX#V4cc)-vk4n8>44$=TTrODTp5$>!D+@=CoDaw!)UpJTXNPY@hqmm`mwP* zWWo+_sF)mPd~OhJ$$isUcL0w`++{qn2=;OP+j!zs1(xqt744bE4=X}p%cDVp+=F(n zR`#)&MCXN|QyzRq?lDb!25+$IOqqAk?TqJ5i(@@R5B=5j_?iIBlVb7=v=Yrdqx{Cq znGVyT^O(n}=S(fnXCmsZ>B9~%v28N-Uuc8+MW(N!jv?A(x*dVXhMhA7cG@tvPd!aE QUp~G-{@Qx{pwk}x2gMg0rvLx| delta 1964 zcmX9;eNa^88vmWcIqaTuc3C&T4HE^FRTtRBfL#bz1!Vb_1<}GX+i)!!c1a*?G9<55 zdh0fA=Nfmem>L_IQsxH;smzEm%AhWn&}(K>nOxy=QBk=Wmh~|E*Kf`{?{nVg_whVe zJDAIz%=;lsvM1ESobVKwm@hqbv$dn(j&s1`&ER~5g^8ZebwUgHMM-ox={c_xn!x+c z0J*Pw#&in?VQ9|;G!-yRmF2a-Fjba!9)|vCAb$Z2|BENI%W;e@5u;ZPB1Jp(_K3S&)lKOCL z@)aP`j0?>e@4#)|H7O(;MbT;z141~9__Sg|1;y(M# z8LG|>W?wA+3w5!Rb-h_ar0&Xf?Ch{scHhPn5-7xvb2&d+qvSSrN&WBae)A5JtB`GV z3<1esvu$ljz!Q7f_U<`^TDFT@K#U{VQzwYY@(i~3Lk$qs$NDzVy~5RO|JVnBaxMEq zZyun#!d`0$A#bwTk>Qm<#=qHLGl+xO&OV3_rtjPUq2(fw^IE|4vkw8eIzX%S2CQt| z20W$@D6fsAH?GJ#0#-#OKE)+HcmmM(a+b6S66G{!Pu>lr#&TOOEv9SxWHmQWxW~1| zenR9kWGko3Y2mtdCjv{NIA87Gftg4Bn6kx>*=IRl$5x`#&ke6R4or7)_Xqk2jofcv zP0`_aZmP~SD(~WSY2*Cr3*Gc$74O0V4N0M##RD}=VU8y(he%bi5gP+ zwjzZ4lv=nZ*YOtSwA{wetG}%9o+9<~KT{may9vyY6>S6b(BrQuy1U7h5ToM9f?~?g zTE$RjJ>@Y~aq~a|P!y(k*iOkvGbwpn54oXJhW8kWz(>loNiV?PR;J(COXm-i`TKk{ z4(}^ndz&d)4a&+>PU>Zia??*lBq};aS?B&Md0zFLfO?#gOIM5 z>jLM6bql)hmy)RmgjuyiK&V&H->2~8%#}|D&PtCj5zPIaz_dCctMNTzvr#DU^wMkN z!WzX9%1plSd?T?+{Z^>R9w(jV3Ki=K*-WA8m&XC~cXGHwSAR$Fo?1@&92HtkD*!{j z(7Tj4Cszx7*Z%;l8-@O7a>@Dv;gZop)+Y#g}>$IMWY>MgPB5)Z^Sif0>pNSsWuZ* zRRfvj;z-{LNLcuR#I$dwu;j_RlzKz5M%o%g`siw=;YI~>j_2Lm=zEASi z(4+QjX<(O=0`sW!%??_)>6@hgAHPEE+j84$VG^?~<{EO;ERmj`H zv=_Dt+R_G9%>27VKvF$7hZGC=NL8IjXnafc`mtwe0o16rXY2sD8>+@QI_Gz)niyLB z7PTL3+f+?9>LKu<%B!Ibm^f4Q)h$w};H*3*n6#g(=UXV!(>m0K@8~b-Lvoy`FOJPo zmxN5k;X^+r{!RVrAlb4kNbT82%_KacKDdhFV^gV*oh+s0`?eoVht;P`Ln)SDs;|3g zlwvLhaZ(T2{3C`3sb z_rPJ=;i;OJ-y?T;tL7hPi0kZ9&BuSNr1b8W)sjv>q3OTSMlR%Qu0 - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) @@ -1166,14 +1166,14 @@ Press 1 for Default View - + All files (**) - + No valid file is selected @@ -1192,13 +1192,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture - + Failed to read Savegame file @@ -1308,11 +1308,6 @@ Press 1 for Default View You really want remove the selected Snapmatic picutres and Savegame files? - - - Failed at remove the complete selected Snapmatic pictures and/or Savegame files - - @@ -1362,6 +1357,11 @@ Press 1 for Default View Action failed with... + + + Failed to remove all selected Snapmatic pictures and/or Savegame files + + Qualify @@ -1417,7 +1417,7 @@ Press 1 for Default View - + All profile files (*.g5e SGTA* PGTA*) @@ -1444,7 +1444,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer @@ -1464,7 +1464,7 @@ Press 1 for Default View - + Failed at %1 @@ -1643,7 +1643,7 @@ Press 1 for Default View - + Snapmatic Properties @@ -1778,7 +1778,7 @@ Press 1 for Default View - + Patching of Snapmatic Properties failed because of I/O Error @@ -1988,6 +1988,16 @@ Press 1 for Default View 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 + + TelemetryDialog @@ -2079,7 +2089,7 @@ Press 1 for Default View - + &About %1 @@ -2135,15 +2145,15 @@ Press 1 for Default View - + Select &GTA V Folder... - - + + Select GTA V Folder... @@ -2184,38 +2194,40 @@ Press 1 for Default View - - + + Select Profile - + Open File... - - - - + + + + Open File - + Can't open %1 because of not valid file format + Show In-game + Hide In-game diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index 157f41e9501710850b76b71e7dd629fa53cc992e..c7b8fc44e7e29132df4aab251cce792a5c9106fc 100644 GIT binary patch delta 1586 zcmXYxdr(w$6vw~!?!CKvAM8plVhZ?#WI;sarN~1N5LS@Kt_UpoK#UqeO(h${t-x_o zGMx=c!v~6{sN(}slE48aWmHy486TNVxig}T4{Xh-#tz;7`poX{_dDl&&-tF~>S9h@ zVzwBV1zSD**yJ@^qkU}IyMf6%Ksu*TX8`7(2WD>vci=-{&Tw!o9FVvXoP(H~46fG< zxK}BR_!a#0Fd!)q{4C-dcfcP{0ER6C@3;sg{LgG(XzQ}*T^lBZdDa&69f&mG%)n}3R2G~!ZrA{EHy-ZgfmvVSd1*Q@u7nYP z3v)fZR>A-(qAY*6w8d7Dbk^4dK;*xtu++&T~w4Hpx3aT$>`^tjjdqpXiDx|}-_xSy)s!5ukV0H}ZBj#cCU!V|7V zT145}xVGJ)G+!&{DEpFBZdVvHTwz8b=V-2=doQ_%1uekPChk?wWnwD#_gSiLo{Q%O z-%ZZs4F_ug%`Jta*YSDX9WY_WLcU~AA>hA)uMMO!Q!Dwp0W%O_;p;!irMVvBk2kae zo_T6Mq7hJir1tJ4!&=JJSp~kp#3Xegy9|h!X|Gm|5~gTG*D6xC&)%x?V?!$JPL-c+ zZjYwEy_CH4h316m2{3%Qrl}_s2rbfdbWlr&^l5%hBXjE8wR}=1wQ!5pyEBMtdZ3*# zP)`=|)yDVNQ49ak&OYb>((AM(b^Cx2PP?qVh(@zb`|+6Dv@|K&whr=IYMQq50yS?! zrS@q{HEhtu3ZCcM>B9Gd=e;M4>=KVm-Ws zMKx4t{8(Y>tmov7P+{p3qM8@p|09Gv3ZW{9x}337sBcdP^4x{4IP&!LX5pGOm8SNM z&>IwC07l*wna7kUx>!Y2EFBWs2>VW() z_5$9=HnUu8_VS<=+bUjuyc)1t#H;ZPtyG`rC_4pcA1RDHsxV4an08d`9c3Yp^@_I| z`T<>&_~2w0FeOgxyPQpJyeKiJ*U>nzfxhkztmPjf%5+((*69M(uJ5l;H_PfV-+RJ+bi|# zETR?pR{EiuzA33^rI#&t$n@_h)Q^|B9f`DBcVywQ3kdX=4I73oroN}h-rtP?l67*x zgcqb>m%P$Mod~kZpCwdN2e!yH6Y00mAlEYVF`HJbFinu_^;BrMMLzp>Ak7geoyUZ3%}`hrj@+!vq53-Gq>}(9^|Ja9Vd}4qe*va!Mmg< zR^jw~{fPG{eDEfHOg{}|X0yJu=OmR`uV22|Oy!K%?|p3nVlwrIuTnb0QvLa6(m$zC e@A{g29&?O>S&yp#bi)^o8#T$s#?M2FL;eLOfVkoS delta 1675 zcmXApdr(w$6vw~!axc60-d$D#!c<^QBn3i15Le|P$U~Ngzyk78S6G!|0cF8-$~Dok z2jgfPGA5-MGK!iaf+m82qLC>`T#fyy#+7;?4>hL7Mq{y_RA zc#l7j{u17O(}9dV@c!MO*ax5X#en+|e8w+auvKQVH$vw|1OBauHVptvdBkob&S`@F z2yw|UteGi*^G$quyq^S$I9T8a%nttlYnVvM!e$- z%rBOiG(l#13FCJ7O<+O=vnpeZDr{!TX8%bQe#3lFy9}6eoq4Qo0s`aM+{?7SM9G@B z8GtM&cK?b1!0oWidF$Cj>ve$Y8qqe$sF;_wA;xQ^E|6`UQ%wfw*rUcFAoKy-(h>|r z++kb0rUBvoYzH?Jh;C}s&#B5iGQ$RBrg(6@XDVsmNp3i=4RC7Vp7&oN#&fUElDe!Wo*O?G zsOFsy)c}e?nc7W!_O&kP5$VR8_vZsM*YdT#BvT*3*S#N|^pOueE>{|7L!RMFBO1O!i2baj!X6GjxjBvLpvok~8Yn=DLFx^?@JriaRfFX|~G z)0L4=>&U`yl?jJ>X(;lP=DM$`sPB{|ohE8gs&ezxn=~}MvZIT#rWcgm7sh(FNjinT|Rkwq^$jWrREh73(rZSXo0t zBku`CaZgCVW1(mj(ViF9{T&F*J1126k;^GrLVafvW#OvO6G52{wFrH=@zk|^;f7y` zGcftK$ULHl!YrcNg+d&;!RE%h&U_}$UsVf4)yYi#M`n&%OdO$^i}DmRM;(BiyS6;u z-5RYE&rETl5la-WJSqqB9L1}V44^wG_Eww%l)uT;70R4{NoG=^c*7%|GWMA`*!UE1 zXb~Tt>;Y!K5=XA25i2F8brTRYD7|rt?AH`a+1IJM1+7x016AQ-kg9?WWMk$fsVZiO z7Fd}{4N|o$jZ*wBsn%yJ{U0GSX-MiY(?z*0MB1O5C0z^~0p9vb>b1~AIm@K}FHJNe z<dYCI@z^YTl;bLZhmdp^w>oPnn6`s(K9x4RKVR9WA3!_p5%?y8_H+ z_2dx>lK!IF`!=0V@U-2v_p*lUQlD<8?7MH58E{m6AFQ@*e&!U6xnWyit+t&BWPCmj>AGFVn^+#~2HXOa)q_MZ3;qE~zkSEo)5L z{1S6%k;!7xmYIr7`4(DFD>jyzjh4cEZE0b?rF@;KOlvGIm{qb)n`W#qtu~rXwg) - + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) @@ -1404,7 +1404,7 @@ Appuyer sur 1 pour le mode par défaut - + All files (**) Tous les fichiers (**) @@ -1426,7 +1426,7 @@ Appuyer sur 1 pour le mode par défaut - + No valid file is selected Fichier invalide @@ -1437,13 +1437,13 @@ 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 @@ -1597,6 +1597,11 @@ Appuyer sur 1 pour le mode par défaut Action failed with... + + + Failed to remove all selected Snapmatic pictures and/or Savegame files + + Qualify @@ -1683,18 +1688,17 @@ Appuyer sur 1 pour le mode par défaut Supprimer la sélection ? - Failed at remove the complete selected Snapmatic pictures and/or Savegame files - Impossible de supprimer la sélection + Impossible de 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) @@ -1721,7 +1725,7 @@ Appuyer sur 1 pour le mode par défaut SavegameDialog - + Savegame Viewer Gestionnaire de sauvegardes @@ -1741,7 +1745,7 @@ Appuyer sur 1 pour le mode par défaut &Fermer - + Failed at %1 Échec de %1 @@ -1922,7 +1926,7 @@ Appuyer sur 1 pour le mode par défaut - + Snapmatic Properties Propriétés Snapmatic @@ -2069,7 +2073,7 @@ Appuyer sur 1 pour le mode par défaut - + Patching of Snapmatic Properties failed because of I/O Error La modification des propriétés Snapmatic a échoué : erreur d'entrée/sortie @@ -2223,6 +2227,16 @@ Appuyer sur 1 pour le mode par défaut Failed at deleting %1 from your Snapmatic pictures Impossible de supprimer %1 + + + Failed to hide %1 In-game from your Snapmatic pictures + + + + + Failed to show %1 In-game from your Snapmatic pictures + + Edi&t @@ -2462,15 +2476,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... @@ -2535,44 +2549,46 @@ 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 + Show In-game + Hide In-game diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index 5edd3699b30e103efa3f3918816716ae3f16a420..2b2e99e219ef64274dd1cbf1267cfb2d85e88913 100644 GIT binary patch delta 1889 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 - + Savegames files (SGTA*) Файлы ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ (SGTA*) - + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) @@ -1380,7 +1380,7 @@ Press 1 for Default View - + All files (**) Ð’Ñе файлы (**) @@ -1401,13 +1401,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture Ðе удалоÑÑŒ загрузить картинку Snapmatic - + Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ @@ -1418,7 +1418,7 @@ Press 1 for Default View - + No valid file is selected Выбранный файл неверен @@ -1533,9 +1533,8 @@ Press 1 for Default View Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - Failed at remove the complete selected Snapmatic pictures and/or Savegame files - Ðе удалоÑÑŒ удалить полноÑтью выбранные картинки Snapmatic и/или файлы Ñохранений + Ðе удалоÑÑŒ удалить полноÑтью выбранные картинки Snapmatic и/или файлы Ñохранений @@ -1586,6 +1585,11 @@ Press 1 for Default View Action failed with... + + + Failed to remove all selected Snapmatic pictures and/or Savegame files + + Qualify @@ -1695,13 +1699,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) @@ -1728,7 +1732,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer ПроÑмотрщик Ñохранений @@ -1756,7 +1760,7 @@ Press 1 for Default View Закрыть - + Failed at %1 Ошибка при %1 @@ -1957,7 +1961,7 @@ Press 1 for Default View - + Snapmatic Properties СвойÑтва Snapmatic @@ -2098,7 +2102,7 @@ Press 1 for Default View - + Patching of Snapmatic Properties failed because of I/O Error Ðе удалоÑÑŒ измененить ÑвойÑтва Snapmatic из-за проблемы ввода/вывода @@ -2242,6 +2246,16 @@ Press 1 for Default View Failed at deleting %1 from your Snapmatic pictures Ðе удалоÑÑŒ удалить %1 из колелкции картинок Snapmatic + + + Failed to hide %1 In-game from your Snapmatic pictures + + + + + Failed to show %1 In-game from your Snapmatic pictures + + Edi&t @@ -2424,7 +2438,7 @@ Press 1 for Default View - + Select &GTA V Folder... Выбрать &папку GTA V... @@ -2556,16 +2570,16 @@ Press 1 for Default View - - + + Select Profile Выбор Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - - + + Select GTA V Folder... Выбрать папку GTA V... @@ -2578,25 +2592,25 @@ Press 1 for Default View - + &About %1 &О программе %1 - + Open File... Открыть файл... - - - - + + + + Open File Открыть файл - + Can't open %1 because of not valid file format Ðе удалоÑÑŒ открыть %1 из-за неверного формата файла @@ -2616,12 +2630,14 @@ Press 1 for Default View + Show In-game + Hide In-game From c6e66b26f5c64d84f064fd1733559e67b6b566d3 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 17 Jan 2018 01:42:20 +0100 Subject: [PATCH 035/359] fix telemetry window crash --- config.h | 2 +- main.cpp | 62 ++++++++++++++++++++++++++++-------------------------- res/app.rc | 4 ++-- 3 files changed, 35 insertions(+), 33 deletions(-) diff --git a/config.h b/config.h index fec2e16..df99549 100644 --- a/config.h +++ b/config.h @@ -49,7 +49,7 @@ #endif #ifndef GTA5SYNC_APPVER -#define GTA5SYNC_APPVER "1.5.0-dev9" +#define GTA5SYNC_APPVER "1.5.0-rc1" #endif #ifdef GTA5SYNC_BUILDTYPE_REL diff --git a/main.cpp b/main.cpp index 3cd4115..f02fea5 100644 --- a/main.cpp +++ b/main.cpp @@ -151,36 +151,37 @@ int main(int argc, char *argv[]) bool telemetryWindowLaunched = settings.value("TelemetryWindowLaunched", false).toBool(); if (!telemetryWindowLaunched && !Telemetry->isEnabled() && !Telemetry->isStateForced()) { - QDialog telemetryDialog; - telemetryDialog.setObjectName(QStringLiteral("TelemetryDialog")); - telemetryDialog.setWindowTitle(QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER)); - telemetryDialog.setWindowFlags(telemetryDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint); - telemetryDialog.setWindowIcon(IconLoader::loadingAppIcon()); - QVBoxLayout telemetryLayout; - telemetryLayout.setObjectName(QStringLiteral("TelemetryLayout")); - telemetryDialog.setLayout(&telemetryLayout); - UiModLabel telemetryLabel(&telemetryDialog); - telemetryLabel.setObjectName(QStringLiteral("TelemetryLabel")); - telemetryLabel.setText(QString("

%2

%1").arg(QApplication::translate("TelemetryDialog", "You want help %1 to improve in the future by collection of data?").arg(GTA5SYNC_APPSTR), QApplication::translate("TelemetryDialog", "%1 User Statistics").arg(GTA5SYNC_APPSTR))); - telemetryLayout.addWidget(&telemetryLabel); - QCheckBox telemetryCheckBox(&telemetryDialog); - telemetryCheckBox.setObjectName(QStringLiteral("TelemetryCheckBox")); - telemetryCheckBox.setText(QApplication::translate("TelemetryDialog", "Yes, I would like to take part.")); - telemetryCheckBox.setChecked(true); - telemetryLayout.addWidget(&telemetryCheckBox); - QHBoxLayout telemetryButtonLayout; - telemetryButtonLayout.setObjectName(QStringLiteral("TelemetryButtonLayout")); - telemetryLayout.addLayout(&telemetryButtonLayout); - QSpacerItem telemetryButtonSpacer(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); - telemetryButtonLayout.addSpacerItem(&telemetryButtonSpacer); - QPushButton telemetryButton(&telemetryDialog); - telemetryButton.setObjectName(QStringLiteral("TelemetryButton")); - telemetryButton.setText(QApplication::translate("TelemetryDialog", "&OK")); - telemetryButtonLayout.addWidget(&telemetryButton); - QObject::connect(&telemetryButton, SIGNAL(clicked(bool)), &telemetryDialog, SLOT(close())); - telemetryDialog.setFixedSize(telemetryDialog.sizeHint()); - telemetryDialog.exec(); - if (telemetryCheckBox.isChecked()) + QDialog *telemetryDialog = new QDialog(); + telemetryDialog->setObjectName(QStringLiteral("TelemetryDialog")); + telemetryDialog->setWindowTitle(QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER)); + telemetryDialog->setWindowFlags(telemetryDialog->windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint); + telemetryDialog->setWindowIcon(IconLoader::loadingAppIcon()); + QVBoxLayout *telemetryLayout = new QVBoxLayout(telemetryDialog); + telemetryLayout->setObjectName(QStringLiteral("TelemetryLayout")); + telemetryDialog->setLayout(telemetryLayout); + UiModLabel *telemetryLabel = new UiModLabel(telemetryDialog); + telemetryLabel->setObjectName(QStringLiteral("TelemetryLabel")); + telemetryLabel->setText(QString("

%2

%1").arg(QApplication::translate("TelemetryDialog", "You want help %1 to improve in the future by collection of data?").arg(GTA5SYNC_APPSTR), QApplication::translate("TelemetryDialog", "%1 User Statistics").arg(GTA5SYNC_APPSTR))); + telemetryLayout->addWidget(telemetryLabel); + QCheckBox *telemetryCheckBox = new QCheckBox(telemetryDialog); + telemetryCheckBox->setObjectName(QStringLiteral("TelemetryCheckBox")); + telemetryCheckBox->setText(QApplication::translate("TelemetryDialog", "Yes, I would like to take part.")); + telemetryCheckBox->setChecked(true); + telemetryLayout->addWidget(telemetryCheckBox); + QHBoxLayout *telemetryButtonLayout = new QHBoxLayout(); + telemetryButtonLayout->setObjectName(QStringLiteral("TelemetryButtonLayout")); + telemetryLayout->addLayout(telemetryButtonLayout); + QSpacerItem *telemetryButtonSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); + telemetryButtonLayout->addSpacerItem(telemetryButtonSpacer); + QPushButton *telemetryButton = new QPushButton(telemetryDialog); + telemetryButton->setObjectName(QStringLiteral("TelemetryButton")); + telemetryButton->setText(QApplication::translate("TelemetryDialog", "&OK")); + telemetryButtonLayout->addWidget(telemetryButton); + QObject::connect(telemetryButton, SIGNAL(clicked(bool)), telemetryDialog, SLOT(close())); + telemetryDialog->setFixedSize(telemetryDialog->sizeHint()); + telemetryDialog->exec(); + QObject::disconnect(telemetryButton, SIGNAL(clicked(bool)), telemetryDialog, SLOT(close())); + if (telemetryCheckBox->isChecked()) { QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); telemetrySettings.beginGroup("Telemetry"); @@ -190,6 +191,7 @@ int main(int argc, char *argv[]) Telemetry->work(); } settings.setValue("TelemetryWindowLaunched", true); + delete telemetryDialog; } #endif diff --git a/res/app.rc b/res/app.rc index dc5d462..69fbd76 100644 --- a/res/app.rc +++ b/res/app.rc @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view" - VALUE "FileVersion", "1.5.0-dev9" + VALUE "FileVersion", "1.5.0-rc1" VALUE "InternalName", "gta5view" VALUE "LegalCopyright", "Copyright © 2016-2018 Syping" VALUE "OriginalFilename", "gta5view.exe" VALUE "ProductName", "gta5view" - VALUE "ProductVersion", "1.5.0-dev9" + VALUE "ProductVersion", "1.5.0-rc1" END END END From 1c124d4ce3a570bd660d3e042dad29fa99f08000 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 17 Jan 2018 19:06:39 +0100 Subject: [PATCH 036/359] travis build rc --- .travis.yml | 9 ++++++--- .travis/debian64_travis.sh | 11 ----------- .travis/debian_build.sh | 8 ++++---- .travis/{debian32_travis.sh => debian_travis.sh} | 6 +++++- 4 files changed, 15 insertions(+), 19 deletions(-) delete mode 100755 .travis/debian64_travis.sh rename .travis/{debian32_travis.sh => debian_travis.sh} (84%) diff --git a/.travis.yml b/.travis.yml index a33c7dc..831bca1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ dist: trusty sudo: required -language: cpp +language: generic service: - docker @@ -9,12 +9,15 @@ service: matrix: include: - env: - - BUILD_SCRIPT=debian32_travis.sh + - BUILD_SCRIPT=debian_travis.sh + - DOCKER_USER=i386 - QMAKE_FLAGS_QT4=QMAKE_CXXFLAGS+=-Wno-missing-field-initializers + - DEBIAN_VERSION=jessie - APT_INSTALL=clang - env: - - BUILD_SCRIPT=debian64_travis.sh + - BUILD_SCRIPT=debian_travis.sh - QMAKE_FLAGS_QT4=QMAKE_CXXFLAGS+=-Wno-missing-field-initializers + - DEBIAN_VERSION=jessie - APT_INSTALL=clang - env: - BUILD_SCRIPT=windows_travis.sh diff --git a/.travis/debian64_travis.sh b/.travis/debian64_travis.sh deleted file mode 100755 index d9b80fb..0000000 --- a/.travis/debian64_travis.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -DOCKER_IMAGE=debian:jessie -PROJECT_DIR_DOCKER=/gta5view - -cd ${PROJECT_DIR} && \ -docker pull ${DOCKER_IMAGE} && \ -docker run --rm \ - -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ - ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/debian_install.sh && .travis/debian_build.sh" diff --git a/.travis/debian_build.sh b/.travis/debian_build.sh index 2fcb0fe..d4e126f 100755 --- a/.travis/debian_build.sh +++ b/.travis/debian_build.sh @@ -9,11 +9,11 @@ chmod -x res/gta5sync_*.qm res/gta5view.desktop res/gta5view.png && \ cd build && \ mkdir qt4 && \ cd qt4 && \ -echo "Grand Theft Auto V Snapmatic and Savegame viewer" > ./description-pak && \ +echo "Grand Theft Auto V Snapmatic and Savegame viewer/manager" > ./description-pak && \ cd .. && \ mkdir qt5 && \ cd qt5 && \ -echo "Grand Theft Auto V Snapmatic and Savegame viewer" > ./description-pak && \ +echo "Grand Theft Auto V Snapmatic and Savegame viewer/manager" > ./description-pak && \ cd .. && \ # Prepare checkinstall step @@ -21,11 +21,11 @@ mkdir -p /usr/share/gta5view && \ # Starting build cd qt5 && \ -qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \ +qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_RC "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \ make -j 4 && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=${PROJECT_DIR}/assets && \ cd .. && \ cd qt4 && \ -qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT4} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ +qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT4} DEFINES+=GTA5SYNC_BUILDTYPE_RC "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ make -j 4 && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=${PROJECT_DIR}/assets diff --git a/.travis/debian32_travis.sh b/.travis/debian_travis.sh similarity index 84% rename from .travis/debian32_travis.sh rename to .travis/debian_travis.sh index a4e6c75..8fa5ed8 100755 --- a/.travis/debian32_travis.sh +++ b/.travis/debian_travis.sh @@ -1,6 +1,10 @@ #!/bin/bash -DOCKER_IMAGE=i386/debian:jessie +if [[ ${DOCKER_USER} ]]; then + DOCKER_IMAGE=${DOCKER_USER}/debian:${DEBIAN_VERSION} +else + DOCKER_IMAGE=debian:${DEBIAN_VERSION} +fi PROJECT_DIR_DOCKER=/gta5view cd ${PROJECT_DIR} && \ From fb9e6074d8b1fe0401f681a414894a4c023f8796 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 17 Jan 2018 19:10:37 +0100 Subject: [PATCH 037/359] change back to cpp language --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 831bca1..4a659c8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ dist: trusty sudo: required -language: generic +language: cpp service: - docker From 951f3d05c04c3470a7beeed2cb63208f2b80b69f Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 17 Jan 2018 21:54:22 +0100 Subject: [PATCH 038/359] more accurate compiler info for OS X --- config.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config.h b/config.h index df99549..f406379 100644 --- a/config.h +++ b/config.h @@ -127,7 +127,11 @@ #ifndef GTA5SYNC_COMPILER #ifdef __clang__ +#ifndef Q_OS_MAC #define GTA5SYNC_COMPILER QString("Clang %1.%2.%3").arg(QString::number(__clang_major__), QString::number(__clang_minor__), QString::number(__clang_patchlevel__)) +#else +#define GTA5SYNC_COMPILER QString("Apple LLVM %1.%2.%3").arg(QString::number(__clang_major__), QString::number(__clang_minor__), QString::number(__clang_patchlevel__)) +#endif #elif defined(__GNUC__) #define GTA5SYNC_COMPILER QString("GCC %1.%2.%3").arg(QString::number(__GNUC__), QString::number(__GNUC_MINOR__), QString::number(__GNUC_PATCHLEVEL__)) #elif defined(__GNUG__) From 67dfcf09ee87d944164b95a70a733eae4015e259 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 17 Jan 2018 22:19:27 +0100 Subject: [PATCH 039/359] added build scripts for OS X --- .travis/osx_build.sh | 13 +++++++++++++ .travis/osx_install.sh | 4 ++++ .travis/osx_script.sh | 8 ++++++++ .travis/travis.sh | 12 ++++++++---- .travis/{ubuntu64_travis.sh => ubuntu_travis.sh} | 0 5 files changed, 33 insertions(+), 4 deletions(-) create mode 100755 .travis/osx_build.sh create mode 100755 .travis/osx_install.sh create mode 100755 .travis/osx_script.sh rename .travis/{ubuntu64_travis.sh => ubuntu_travis.sh} (100%) diff --git a/.travis/osx_build.sh b/.travis/osx_build.sh new file mode 100755 index 0000000..dc17559 --- /dev/null +++ b/.travis/osx_build.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Creating folders +cd ${PROJECT_DIR} && \ +echo "gta5view build version is ${APPLICATION_VERSION}" && \ +mkdir build && \ +mkdir assets && \ +cd build && \ + +/usr/local/opt/qt/bin/qmake ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_RC "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ +make -j 4 && \ +/usr/local/opt/qt/bin/macdeployqt gta5view.app -dmg && \ +cp -Rf gta5view.dmg ../assets/gta5view.dmg diff --git a/.travis/osx_install.sh b/.travis/osx_install.sh new file mode 100755 index 0000000..76687bf --- /dev/null +++ b/.travis/osx_install.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# Install packages +brew install qt diff --git a/.travis/osx_script.sh b/.travis/osx_script.sh new file mode 100755 index 0000000..4e4ae37 --- /dev/null +++ b/.travis/osx_script.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# Install packages +.travis/osx_install.sh && \ + +# Build gta5view +.travis/osx_build.sh && \ +cd ${PROJECT_DIR} diff --git a/.travis/travis.sh b/.travis/travis.sh index b3da959..4910777 100755 --- a/.travis/travis.sh +++ b/.travis/travis.sh @@ -1,14 +1,18 @@ #!/bin/bash # Install lua -sudo apt-get update -qq && \ -sudo apt-get install -qq lua5.2 +if [ "${TRAVIS_OS_NAME}" == "linux" ]; then + sudo apt-get update -qq && \ + sudo apt-get install -qq lua5.2 +elif [ "${TRAVIS_OS_NAME}" == "osx" ]; then + brew install lua +fi -if [ `git name-rev --tags --name-only $(git rev-parse HEAD)` == "undefined" ]; then export APPLICATION_VERSION=`lua5.2 -e 'for line in io.lines("config.h") do local m = string.match(line, "#define GTA5SYNC_APPVER \"(.+)\"$"); if m then print(m); os.exit(0) end end'`; else export APPLICATION_VERSION=`git name-rev --tags --name-only $(git rev-parse HEAD)`; fi +if [ `git name-rev --tags --name-only $(git rev-parse HEAD)` == "undefined" ]; then export APPLICATION_VERSION=`lua -e 'for line in io.lines("config.h") do local m = string.match(line, "#define GTA5SYNC_APPVER \"(.+)\"$"); if m then print(m); os.exit(0) end end'`; else export APPLICATION_VERSION=`git name-rev --tags --name-only $(git rev-parse HEAD)`; fi export PACKAGE_VERSION=$(grep -oE '^[^\-]*' <<< $APPLICATION_VERSION) export PACKAGE_BUILD=$(grep -oP '\-\K.+' <<< $APPLICATION_VERSION) export EXECUTABLE_VERSION=${PACKAGE_VERSION}${PACKAGE_BUILD} -if [ "$PACKAGE_BUILD" == "" ]; then export PACKAGE_BUILD=${TRAVIS_BUILD_NUMBER}; fi +if [[ ! ${PACKAGE_BUILD} ]]; then export PACKAGE_BUILD=${TRAVIS_BUILD_NUMBER}; fi export PROJECT_DIR=$(pwd) .travis/${BUILD_SCRIPT} diff --git a/.travis/ubuntu64_travis.sh b/.travis/ubuntu_travis.sh similarity index 100% rename from .travis/ubuntu64_travis.sh rename to .travis/ubuntu_travis.sh From 43b9f4f94bc11910684e22191d8b012413923058 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 17 Jan 2018 22:29:10 +0100 Subject: [PATCH 040/359] added OS X to Travis --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 4a659c8..9711d25 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,6 +26,8 @@ matrix: - BUILD_SCRIPT=windows_travis.sh - QT_SELECT=qt5-x86_64-w64-mingw32 - EXECUTABLE_ARCH=_x64 + - os: osx + env: BUILD_SCRIPT=osx_travis.sh before_install: - ".travis/source.sh" From a1d4071d55bcff3ad5810c4474056d7596829eeb Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 18 Jan 2018 00:31:21 +0100 Subject: [PATCH 041/359] fix string, improve build scripts --- .travis/debian_build.sh | 8 ++++---- .travis/osx_build.sh | 6 +++--- .travis/windows_build.sh | 4 ++-- OptionsDialog.ui | 4 ++-- lang/gta5sync_no.ts | 10 +++++----- res/gta5sync_de.qm | Bin 45245 -> 45246 bytes res/gta5sync_de.ts | 8 ++++++-- res/gta5sync_en_US.ts | 10 +++++----- res/gta5sync_fr.ts | 2 +- res/gta5sync_ru.ts | 2 +- 10 files changed, 29 insertions(+), 25 deletions(-) diff --git a/.travis/debian_build.sh b/.travis/debian_build.sh index d4e126f..6cb19aa 100755 --- a/.travis/debian_build.sh +++ b/.travis/debian_build.sh @@ -3,15 +3,15 @@ # Creating folders cd ${PROJECT_DIR} && \ echo "gta5view build version is ${APPLICATION_VERSION}" && \ -mkdir build && \ -mkdir assets && \ +mkdir -p build && \ +mkdir -p assets && \ chmod -x res/gta5sync_*.qm res/gta5view.desktop res/gta5view.png && \ cd build && \ -mkdir qt4 && \ +mkdir -p qt4 && \ cd qt4 && \ echo "Grand Theft Auto V Snapmatic and Savegame viewer/manager" > ./description-pak && \ cd .. && \ -mkdir qt5 && \ +mkdir -p qt5 && \ cd qt5 && \ echo "Grand Theft Auto V Snapmatic and Savegame viewer/manager" > ./description-pak && \ cd .. && \ diff --git a/.travis/osx_build.sh b/.travis/osx_build.sh index dc17559..f44e891 100755 --- a/.travis/osx_build.sh +++ b/.travis/osx_build.sh @@ -3,11 +3,11 @@ # Creating folders cd ${PROJECT_DIR} && \ echo "gta5view build version is ${APPLICATION_VERSION}" && \ -mkdir build && \ -mkdir assets && \ +mkdir -p build && \ +mkdir -p assets && \ cd build && \ /usr/local/opt/qt/bin/qmake ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_RC "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ make -j 4 && \ /usr/local/opt/qt/bin/macdeployqt gta5view.app -dmg && \ -cp -Rf gta5view.dmg ../assets/gta5view.dmg +cp -Rf gta5view.dmg ../assets/gta5view-${EXECUTABLE_VERSION}.dmg diff --git a/.travis/windows_build.sh b/.travis/windows_build.sh index 49b6b38..1f61d16 100755 --- a/.travis/windows_build.sh +++ b/.travis/windows_build.sh @@ -6,8 +6,8 @@ export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe cd ${PROJECT_DIR} && \ echo "gta5view build version is ${APPLICATION_VERSION}" && \ echo "gta5view executable is ${GTA5VIEW_EXECUTABLE}" && \ -mkdir build && \ -mkdir assets && \ +mkdir -p build && \ +mkdir -p assets && \ # Starting build cd build && \ diff --git a/OptionsDialog.ui b/OptionsDialog.ui index 2e8d394..40d8caa 100644 --- a/OptionsDialog.ui +++ b/OptionsDialog.ui @@ -7,7 +7,7 @@ 0 0 435 - 464 + 474 @@ -422,7 +422,7 @@ - Categorys + Categories diff --git a/lang/gta5sync_no.ts b/lang/gta5sync_no.ts index fab80f3..9fcbaa7 100644 --- a/lang/gta5sync_no.ts +++ b/lang/gta5sync_no.ts @@ -552,11 +552,6 @@ Y: %2 Participate in %1 User Statistics - - - Categorys - - Hardware, Application and OS Specification @@ -630,6 +625,11 @@ Y: %2 Participation + + + Categories + + System Language Configuration diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index 4818c6b8363d6b432fa4bf0376425d59295a683b..c1f29a1869c5d2c9675fb1a91a7d3d1756ac571f 100644 GIT binary patch delta 2817 zcmXArdt6QF8pnTY?X~vWYpuQ8m}o>&iKL66L~hMAN(iN*#1ukwQ7U)4s49hX&?$%oG`~IHab9p=0%vLwESuQ=p05%2a zy#nBF0|Q(DehQF$Kik)mQD;Y+F`3zEmXVLaRdK-DPv9DeyYGR!VGHy)1g3%o{g~Y zJY}aI_MNBf+z1Bs64Js%&CUdJhcZit{vTLv#jMGn4Y>c#WRG$O#vf&} zlO6(AGIL_mF|sO;X?RBmXN+fVO^5*^LYb#K`vA^m%=71u0Mh}?OWjdm?nKtA%7~e8 zSF=+cT1mNq4ZTDMW?8Ze{mJunHEeWR0I(~EjsIysFip>9IMaKxvur`wSHQ@d3YWyQ zrOQSD=E(}ZmnmEwV|>m!8{V@AhUEZLb}5XtQny-jugln)v*goHe(aU)dSF~%wjqwbE9k=Bc)k_TSFnFvnFu(xu@Cl|0y#}=>ytp> zhtq8P-RnSLJ^R6v!Z(;MWd9oc1+d|TN@ZS7m29mN_x=oQi&FKt{0SJ^9SGPY@X`d-Cnn9{9(?!b95Yo=;zbJ*i z66Z#BgH_kKsl#^z%R9J~rZE)zd*dw5vg=u{%wZ2X6{0XJ(zuy3Gq`iryIm;0CaxiA z8!+5iVWO+TYx!}ai#D!@?7Woxe{+$ znoF`DEA*VkyAupkMq_E6`cx^= zPOZN9kZAu{ea)*MMYvPl%wz(CV$>aHe%jpAtLtzR>@I41AR?*nPY}6Cg)$JVf-&624n}!f2)LW!Nh$Zl*7_8x>BuC&d2p z0Pyk^)|3|mTeF0$-HD`RhLCeT2l%mCD5;4d#tKI#zMvCago=Z20AsRnqLHjya7U=E zrP{YO75?<~r&+T}XgO^FqIU={4h{v1mkOUwQmL)~Tf=+RQ4VraG!}JEl$5QSuRBU; z$hd31d0hzP{i2yv+5l|nt%)uqA@giBu{9CYT(2~%nkhFvQJOU|l#@wnO|sQ*)HEKN zeG&A0fw!j8Ih{tMzoxpjk#gEsQ(H*~3B{Vai*tbKT{OQ}{sLGsnzpJO%7N9Nnm2u` z0e^SR=UKC<_@hL#^EFg8@uJ!99@J!YVxOcI%FR5n|9cxC`>Z%{ISG;1DYTs<4jD{E z@okkjEPWhR;Vp64jnmYmg`#(ECOM@SeY3An058Q^LIriZPMniVPOY3KMvZ?(*6c75 zqvpS&JE>lbe>VhJQZH^ePs+`EiyOV}Q(Huf8BVTr@FKCKW-^VBPhy!f6-nS~@rnnn zU+N>)Kl)5l^|^Q>bOPOLy~HLbH|qAGVq3^-67W`HT1jw1w!}Q`iw6QC$gn(>%wWo)SwesV1Za9f%O3dn(%@_cCDuICl@fs|+HeBfQFJXl>W zRrc;q7t=?nx`_vZk4l&BHdFZ@mM-Vk(an8Hs((rc72lDrMkLTU|698D4Fkj$NDWEH z0kKVC>}-W`hZJU7OAY%d6rE&H zj^pIisN1xktDNB)Km#OH&hTmh;@T8uM#vdgNpP=`208m<3eateoMScuNK2LT2c^#PAQgE{J!}_h3+c}Pkt4b?ArHDe) zwOz|^0#gTSO*ec2s6(|DGFfdMq_sF}PDQp-JIL-0Ik#0CW<$b+U$sjo5@)~Fu0A!J z=6->3vt(vvrOjtJ8i3oh`CcSL`>VD@Phl>esy)+2e(#!WtdlGaMcR*Xw6DGt+lI3QFv+G7I{@L1=etD)B3p!3{G zjgWglH?5jnpV6)hFs1tRI;t?Lt8V#iay`AbF1wVpN80HQ2T>NSGfwJGoeKs$jwqb7 zUw0w6JB@;B6HcxJLY5lSWJ|*xljC8LWXUsy@o!De#n4+%L2tf@f|@f`Kjt-AwAM}^ zVi!YI{a!yOuASN+qevY~>i5 zY$o~(m1I_!PJiS231Eb`{(<#T3Ohxsf7OTL`AVyA|B-x3Y$P=$YbxBewN{ek8J-Za TAT~ZS!uV?VmlYOH1?&C+n|M&J delta 2798 zcmX9=d0b8T8-C8Y=iGD8IrnzQh(;)tsH7|<8B0V9LMaqQ$l9V*b~nmS%j1j2>FHXbP7V$##9v0=&| zo9YzYk-~J`XAN}T!^{}hOhg_rkzuJoMlWW5?{~n`PRz2bFreR`Oj`ebfX@*oE%6_~ zN@hw%9wVtTnA-Ogc%wISV|X+WF_C$;(*kflz`S_z2r%u+ywV*7rVVGU%8ZzZempzI zv5}ZBXD6MffLkosSplT^%3s*1Re`{+ZEW1n`+%_~>_%sLZ+3>wnbH&Z@tT73V%fq4 z?tpocg5HS=E{!t2V4V%`+5LUefzeqC#&l9}hYwp6-T=g_*pd=gU_k+UqRIwH?8{bg z_M~efTX}|b`gsg{VY?m}X35sZ(swy}_S%cBfWDah>%s`2`%CuW9#bIw7TfqV2v}Rn zHs8Gp1YKl5dQ$oZ(^>529<6~jFH|b?L)6LEDsj&(VB1_(+u!~J`oC1Qi>D8JbWyn` zGy~fwtAdKw0xknpvlFeTm3>u_1*EInebuUOR2NM*)#mXc)u*TGgzG3^=mb@DILYVl zp{m(T=f_#At|pPbnhe$ZY+D%3Imz9D(*)ipPL5pX-E^hSkF$&Y9++FsxqhY+`iY#| zU^=?wGB>7gHn8v`x1xR^<^J9n%2~E5!e_Ui-KwPTy1GGy^rA<8ruPO=eeh$Wz^@RxDR!g$a&AWFQ;88y>&d-a(imQk40&GRL(SDf(gG|r1TBz)x3dBf*&)bc<4dI&+JN`U^q>sopC^kecHG&sz%4%2jY-f?&$+1#*3b z_V=lh^}+!rTY+rFOl7qwfkazdr=L zMheRg%{c1Y!Q@K!38BG{193AnJBJ>uD54;782BD;mq?>t1sH&pg zw{0!_?H53^X1&mG$^b-V3NH`z2J+*C|4vY=C4bTIUNuyM^dwEk8Ye1Bnr85)0va;? zG(+Cx0-5!ik%hIu=JuMXTp}{vS`$+lLFRg;S@M8t<2zTgEShRElGh|z-67Kq((H|( z=QF)DrOxYUH2P~Qs_LkwmYS+k3MAxfYR*js#_KirN`D6|8BJ4JI@Q4HFU{Ld6+nQy z=38hOHUC`E>}(})y2{ehJLNU2rD^ATIr4|Q>kv^|UnjJbZa>i@g zNteX9_q~957sWMaiMe?PalO}lvPGo0(aDtp&lU?RN74BBDi%49B`YowFL==T`99*M zN8f0wJ{PY|8cuu7T&#C;Be(Ywn?l|Yfo6$mB*O7qB<5KQK9qEAXbLQPA$9UIP{8g< zl5LVN&8PEH4;QNGlF8DKGqMOjD7jg2%Y+@CN(@@u4Xi}y(WPpC)Q znoHxGOn|(3(u60}D}(k*;U|_;0ym`TpoAPbDbttkZFN>b3rLxUmIvM^l?O`?N~Imz z&|>;5Rahm{KFEUkjeh;;t$1G2#(>9>p;+Tg!Rm!46;{5#U+hU85l(aex6XLU=VQ;rIz=F0`gDBTSo z9)K&`P{%p8sGVHZ9K8fljXWy5wtFH zt-#ta~L(!X|4E-SPz-BR@>^(bzqF0)^ts4Ks`y@Q6@dD zgR~vbm{UhB(sr|ZOY)>?r`Ql7;kI`E2*R*t?b4HBG~~05n-XbJl3+BcHFSO2TCb0Z&j{9fm9 zH=W3j(YdXQp;aBAVAqMd0Um3Bz{ffdT_yQ=wa#-Vb$!M@-Pj6}cEUSdpeZ$@*AWFH zztb(ed7Nf>dtF)~ai85)cX%9?%6emo?qqo|;Bi>NsfD`g;5Ov@auZIj0Yc)8t7J>V z9h2izW|Jh(6pU*&DUYVNo@%}M97<~HX#K!9B+>G&`VhNlYT@_#sj Participation Teilnahme + + + Categories + Kategorien + &Send @@ -854,9 +859,8 @@ Y: %2 An %1 Benutzerstatistik teilnehmen - Categorys - Kategorien + Kategorien diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index 87276f9..9f05f75 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -562,11 +562,6 @@ Y: %2 Participate in %1 User Statistics - - - Categorys - - Hardware, Application and OS Specification @@ -640,6 +635,11 @@ Y: %2 Participation + + + Categories + + System Language Configuration diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index 129df1a..ac00a96 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -714,7 +714,7 @@ Y: %2 - Categorys + Categories diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index 79358d7..a4b62a2 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -682,7 +682,7 @@ Y: %2 - Categorys + Categories From 5db4bd449236ed23aeba991622181f3fc80e57c7 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 18 Jan 2018 01:21:04 +0100 Subject: [PATCH 042/359] updated Russian translation --- res/gta5sync_ru.qm | Bin 31440 -> 44369 bytes res/gta5sync_ru.ts | 238 +++++++++++++++++++++++---------------------- 2 files changed, 124 insertions(+), 114 deletions(-) diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index 2b2e99e219ef64274dd1cbf1267cfb2d85e88913..b728200f55bc53e448ead595affc15540935f41e 100644 GIT binary patch delta 12153 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 delta 2522 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 Snapmatic Image Editor - + Редактор картинок Snapmatic Overwrite Image... - + ПерезапиÑать картинку... Capacity: %1 - + Величина: %1 ? - + ? &Import... - &Импортировать... + &Импортировать... &Overwrite - + &ПерезапиÑать &Close - &Закрыть + &Закрыть Patching of Snapmatic Image failed because of I/O Error - + Ðе удалоÑÑŒ изменить картинку Snapmatic из-за ошибки ввода-вывода Patching of Snapmatic Image failed because of Image Error - + Ðе удалоÑÑŒ изменить картинку Snapmatic из-за ошибки Image Error Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. - + У каждого отÑнÑтого Snapmatic фото еÑть ÑÐ²Ð¾Ñ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°, в завиÑимоÑти от которой можно Ñохранить картинку Ñ Ð±Ð¾Ð»ÐµÐµ выÑоким качеÑтвом.
@@ -352,12 +352,12 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений Picture - + Картинка Background - + Фон @@ -375,17 +375,18 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений Background Image: %1 - + Ð¤Ð¾Ð½Ð¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ°: %1 X - + latin X + X Force Colour in Avatar Zone - + Задать цвет в зоне аватарки @@ -413,21 +414,21 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений Background Image: - + Ð¤Ð¾Ð½Ð¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ°: Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Свой Ðватар Custom Picture Custom Picture Description in SC, don't use Special Character! - + Ð¡Ð²Ð¾Ñ ÐšÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ° @@ -449,7 +450,7 @@ When you want to use it as Avatar the image will be detached! File Background Image: File - Файл + Файл Import @@ -465,22 +466,22 @@ When you want to use it as Avatar the image will be detached! Snapmatic JSON Editor - + Редактор JSON Ð´Ð»Ñ Snapmatic &Save - + &Сохранить &Close - &Закрыть + &Закрыть JSON Error - + Ошибка JSON @@ -510,17 +511,17 @@ Y: %2 &Revert - + &Откатить &Set - + &Изменить &Done - + &Готово @@ -667,96 +668,102 @@ Y: %2 Feedback - + ÐžÐ±Ñ€Ð°Ñ‚Ð½Ð°Ñ ÑвÑзь Participation - + УчаÑтвие Participate in %1 User Statistics - + УчаÑтвовать в пользовательÑкой ÑтатиÑтике %1 Categories - + Категории + + + Categorys + Категории Hardware, Application and OS Specification - + Application = gta5view + Железо, выпуÑк программы, тип ОС System Language Configuration - + Языковые наÑтройки ÑиÑтемы Application Configuration - + ÐаÑтройки программы Other - + Другое Participation ID: %1 - + Ðомер учаÑтника: %1 &Copy - + &Копировать User Feedback - + Форма обратной ÑвÑзи Limit: 1 message/day - + Ограничение: 1 Ñообщение в день &Send - + &Отправить Language for Areas - + Язык Ð´Ð»Ñ Ð¼ÐµÑтоположений? + Язык перевода меÑтоположений Style - + Стиль Style: - + Стиль: Font - Шрифт + Шрифт Always use Message Font (Windows 2003 and earlier) - + Ð’Ñегда иÑпользовать шрифт Ñообщений (Windows 2003 и ранние) Language @@ -765,12 +772,12 @@ Y: %2 Interface - + Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Language for Interface - + Язык интерфейÑа @@ -778,12 +785,12 @@ Y: %2 Current: %1 - + СейчаÑ: %1 Use Default Style (Restart) - + ИÑпользовать Ñтандартный Ñтиль (ПерезапуÑк) @@ -844,13 +851,13 @@ Y: %2 %1 (Closest to Interface) Next closest language compared to the Interface - + %1 (Совпадает Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñом) Auto Automatic language choice. - + ÐвтоматичеÑки @@ -866,17 +873,17 @@ Y: %2 View %1 User Statistics Online - + ПоÑмотреть пользовательÑкую ÑтатиÑтику %1 онлайн Not registered - + Ðе зарегиÑтрирован A feedback message have to between 3-1024 characters long - + Сообщение обратное ÑвÑзи не должно быть длинее 1024 Ñимволов The new Custom Folder will initialize after you restart %1. @@ -1002,7 +1009,7 @@ Y: %2 &Overwrite Image... - + &ПерезапиÑать картинку... @@ -1014,7 +1021,7 @@ Y: %2 Open &Map Viewer... - + Открыть &карту... @@ -1207,7 +1214,7 @@ Press 1 for Default View Open &JSON Editor... - + Открыть &редактор JSON... @@ -1215,53 +1222,53 @@ Press 1 for Default View Edit Players... - + Изменить игроков... Available Players: - + ДоÑтупные игроки: Selected Players: - + Выбранные игроки: &Apply - &Применить + &Применить &Cancel - + &Отмена 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 уже добавлен! @@ -1321,12 +1328,13 @@ Press 1 for Default View Snapmatic Loader - + Загрузчик Snapmatic <h4>Following Snapmatic Pictures got repaired</h4>%1 - + Change wording if the %1 is not a multiline beginning at new line + <h4>ÐижеÑледующие картинки Snapmatic были воÑÑтановлены</h4>%1 @@ -1452,7 +1460,7 @@ Press 1 for Default View Can't import %1 because file can't be open - + Ðе удалоÑÑŒ открыть %1, файл не может быть открыт @@ -1540,7 +1548,7 @@ Press 1 for Default View Qualify as Avatar - + Пометить как Ðватар @@ -1550,7 +1558,7 @@ Press 1 for Default View No Snapmatic pictures are selected - + Ðе выделена ни одна картинка Snapmatic @@ -1558,7 +1566,7 @@ Press 1 for Default View Patch selected... - + Пропатчить выделенные... @@ -1570,7 +1578,7 @@ Press 1 for Default View Patch file %1 of %2 files - + ИзменÑетÑÑ Ñ„Ð°Ð¹Ð» %1 из %2 @@ -1583,66 +1591,68 @@ Press 1 for Default View %2 Action failed with... - + %1 завершилÑÑ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹... + +%2 Failed to remove all selected Snapmatic pictures and/or Savegame files - + Ðе удалоÑÑŒ удалить вÑе выделенные картинки Snapmatic и/или ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Qualify %1 failed with... - + Помечание Change Players... - + Изменить игроков... Change Players %1 failed with... - + Измение игроков Change Crew... - + Изменить банду... Failed to enter a valid Snapmatic Crew ID - + Введённый идентификатор банды не верен Change Crew %1 failed with... - + Изменение банды Change Title... - + Изменить заголовок... Failed to enter a valid Snapmatic title - + Введённый заголовок не верен Change Title %1 failed with... - + Изменение заголовка Failed to import copy of Snapmatic picture because the file not begin with PGTA @@ -1725,7 +1735,7 @@ Press 1 for Default View <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? - + <h4>Добро пожаловать в %1!</h4>Хочешь изменить наÑтройки %1 перед иÑпользованием? @@ -2025,13 +2035,13 @@ Press 1 for Default View Players: %1 (%2) Multiple Player are inserted here - + Игроки: %1 (%2) Player: %1 (%2) One Player is inserted here - + Игрок: %1 (%2) @@ -2086,17 +2096,17 @@ 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 JSON Error - + Ðе удалоÑÑŒ измененить ÑвойÑтва Snapmatic из-за ошибки JSON @@ -2135,61 +2145,61 @@ Press 1 for Default View 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 повреждён @@ -2249,12 +2259,12 @@ Press 1 for Default View Failed to hide %1 In-game from your Snapmatic pictures - + Ðе удалоÑÑŒ Ñкрыть %1 из ÑпиÑка картинок Snapmatic в игре Failed to show %1 In-game from your Snapmatic pictures - + Ðе удалоÑÑŒ показать %1 в ÑпиÑке картинок Snapmatic в игре @@ -2334,22 +2344,22 @@ Press 1 for Default View %1 User Statistics - + %1 пользовательÑÐºÐ°Ñ ÑтатиÑтика You want help %1 to improve in the future by collection of data? - + Хочешь ли помочь будущему развитию %1 отправкой данных? Yes, I would like to take part. - + Да, хочу учаÑтвовать. &OK - &ОК + &ОК @@ -2467,22 +2477,22 @@ Press 1 for Default View Change &Players... - + &Изменить игрока... Change &Title... - + Изменить &Заголовок... Change &Crew... - + Изменить &банду... &Qualify as Avatar - + &Пометить как Ðватар @@ -2497,7 +2507,7 @@ Press 1 for Default View Selection &mass tools - + ИнÑтрументы &маÑÑовой выборки @@ -2632,14 +2642,14 @@ Press 1 for Default View Show In-game - + Показывать в игре Hide In-game - + Скрыть в игре From 0cf2f533429d7e28fef460a775d1ea0946e75031 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 18 Jan 2018 06:07:18 +0100 Subject: [PATCH 043/359] rename fix for osx_travis.sh --- .travis/osx_travis.sh | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100755 .travis/osx_travis.sh diff --git a/.travis/osx_travis.sh b/.travis/osx_travis.sh new file mode 100755 index 0000000..4e4ae37 --- /dev/null +++ b/.travis/osx_travis.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# Install packages +.travis/osx_install.sh && \ + +# Build gta5view +.travis/osx_build.sh && \ +cd ${PROJECT_DIR} From b4d0388fdc7e0c8517185b3e01d8c6672335586a Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 18 Jan 2018 06:07:41 +0100 Subject: [PATCH 044/359] remove old osx_script.sh --- .travis/osx_script.sh | 8 -------- 1 file changed, 8 deletions(-) delete mode 100755 .travis/osx_script.sh diff --git a/.travis/osx_script.sh b/.travis/osx_script.sh deleted file mode 100755 index 4e4ae37..0000000 --- a/.travis/osx_script.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -# Install packages -.travis/osx_install.sh && \ - -# Build gta5view -.travis/osx_build.sh && \ -cd ${PROJECT_DIR} From f57b7f335407d2555e5e42288581694e9cdaa919 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 18 Jan 2018 08:15:51 +0100 Subject: [PATCH 045/359] fix windows buildtype --- .travis/windows_build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis/windows_build.sh b/.travis/windows_build.sh index 1f61d16..6bf4cac 100755 --- a/.travis/windows_build.sh +++ b/.travis/windows_build.sh @@ -11,7 +11,7 @@ mkdir -p assets && \ # Starting build cd build && \ -qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ +qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_RC "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ make -j 4 && \ cp -Rf release/*.exe ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} && \ cd ${PROJECT_DIR}/assets && \ From 3e8c018dcf9f19ca407b68d491fa58fe0de5c638 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 18 Jan 2018 20:41:58 +0100 Subject: [PATCH 046/359] adapt output image name --- .travis/osx_build.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis/osx_build.sh b/.travis/osx_build.sh index f44e891..bc3c7a1 100755 --- a/.travis/osx_build.sh +++ b/.travis/osx_build.sh @@ -3,6 +3,7 @@ # Creating folders cd ${PROJECT_DIR} && \ echo "gta5view build version is ${APPLICATION_VERSION}" && \ +echo "gta5view image name is gta5view-osx_${APPLICATION_VERSION}.dmg" && \ mkdir -p build && \ mkdir -p assets && \ cd build && \ @@ -10,4 +11,4 @@ cd build && \ /usr/local/opt/qt/bin/qmake ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_RC "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ make -j 4 && \ /usr/local/opt/qt/bin/macdeployqt gta5view.app -dmg && \ -cp -Rf gta5view.dmg ../assets/gta5view-${EXECUTABLE_VERSION}.dmg +cp -Rf gta5view.dmg ../assets/gta5view-osx_${APPLICATION_VERSION}.dmg From 09c9f3418c894b553363922abc6b80d5118e109e Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 23 Jan 2018 03:00:16 +0100 Subject: [PATCH 047/359] remove obsolete strings --- res/gta5sync_de.ts | 1115 ----------------------------------------- res/gta5sync_en_US.ts | 10 - res/gta5sync_fr.ts | 346 ------------- res/gta5sync_ru.ts | 397 --------------- 4 files changed, 1868 deletions(-) diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index e882bc7..c25a348 100644 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -3,56 +3,6 @@ AboutDialog - - About gta5sync - Über gta5sync - - - <span style=" font-weight:600;">gta5sync</span><br/> -<br/> -A project for viewing and sync Grand Theft Auto V Snapmatic<br/> -Pictures and Savegames<br/> -<br/> -Project version: %1<br/> -Project build: %4, %5<br/> -Compiled with Qt %2<br/> -Running with Qt %3<br/> -<br/> -Copyright &copy; <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - <span style=" font-weight:600;">gta5sync</span><br/> -<br/> -Ein Projekt zum ansehen und synchronisieren von<br/> -Grand Theft Auto V Snapmatic Bilder und Spielständen<br/> -<br/> -Projektversion: %1<br/> -Projektbau: %4, %5<br/> -Gebaut mit Qt %2<br/> -Läuft auf Qt %3<br/> -<br/> -Copyright &copy; <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync ist lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - - - <span style=" font-weight:600;">gta5sync</span><br/> -<br/> -A project for viewing and sync Grand Theft Auto 5 Snapmatic Pictures and Savegames<br/> -<br/> -Project version: %1<br/> -Project build: %4, %5<br/> -Compiled with Qt %2<br/> -Running with Qt %3<br/> -<br/> -Copyright &copy; <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - <span style=" font-weight:600;">gta5sync</span><br/> -<br/> -Ein Projekt zum ansehen und synchronisieren von Grand Theft Auto 5 Snapmatic Bilder und Spielständen<br/> -<br/> -Projektversion: %1<br/> -Projektbau: %4, %5<br/> -Gebaut mit Qt %2<br/> -Läuft auf Qt %3<br/> -<br/> -Copyright &copy; <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync is lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - About %1 @@ -80,113 +30,18 @@ Gebaut mit Qt %5<br/> Läuft auf Qt %6<br/> <br/> %7 - - - <span style=" font-weight:600;">%1</span><br/> -<br/> -%2<br/> -<br/> -Version %3<br/> -Created on %4<br/> -Built with Qt %5<br/> -Running with Qt %6<br/> -%8<br/> -%7 - <span style=" font-weight:600;">%1</span><br/> -<br/> -%2<br/> -<br/> -Version %3<br/> -Erstellt am %4<br/> -Gebaut mit Qt %5<br/> -Läuft auf Qt %6<br/> -%8<br/> -%7 - - - <span style=" font-weight:600;">%8</span><br/> -<br/> -%9<br/> -<br/> -Project version: %1<br/> -Project build: %4<br/> -Compiled with Qt %2<br/> -Running with Qt %3<br/> -<br/> -Copyright &copy; <a href="%5">%6</a> %7<br/>%8 is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - <span style=" font-weight:600;">%8</span><br/> -<br/> -%9<br/> -<br/> -Projektversion: %1<br/> -Projektbau: %4<br/> -Gebaut mit Qt %2<br/> -Läuft auf Qt %3<br/> -<br/> -Copyright &copy; <a href="%5">%6</a> %7<br/>%8 ist lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> &Close S&chließen - - generated by class - Generiert von der Klasse - - - <span style=" font-weight:600;">gta5sync</span><br/><br/>A project for viewing and sync Grand Theft Auto 5 Snapmatic Pictures and Savegames<br/><br/>Project version: %1<br/>Compiled with Qt %2<br/>Running with Qt %3<br/><br/>Copyright © <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - <span style=" font-weight:600;">gta5sync</span><br/><br/>Ein Projekt zum ansehen und synchronisieren von Grand Theft Auto 5 Snapmatic Bilder und Spielständen<br/><br/>Projektversion: %1<br/>Gebaut mit Qt %2<br/>Läuft auf Qt %3<br/><br/>Copyright © <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync is lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - - - Close - Schließen - - - <span style=" font-weight:600;">gta5sync</span><br/><br/>A project for viewing and sync Grand Theft Auto 5 Snapmatic Pictures and Savegames<br/><br/>Project version: %1<br/>Compiled with Qt %2<br/>Running with Qt %3<br/><br/>Copyright &copy; <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - <span style=" font-weight:600;">gta5sync</span><br/><br/>Ein Projekt zum ansehen und synchronisieren von Grand Theft Auto 5 Snapmatic Bilder und Spielständen<br/><br/>Projektversion: %1<br/>Gebaut mit Qt %2<br/>Läuft auf Qt %3<br/><br/>Copyright &copy; <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync is lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - - - Using %1 %2 - Using specific library, example Using libmyfuck - Verwendet %1 %2 - Translated by %1 Translated by translator, example Translated by Syping Übersetzt von %1 - - Using %1 %2 - Exp. Using libmyfuck - Verwendet %1 %2 - - - Translated by %1 - Exp. Translated by Syping - Übersetzt von %1 - - - NAME_OF_TRANSLATOR - Your Name (The person behind your screen looking at this text!) - Syping - - - TRANSLATOR_PROFILE - mailto: http:// https:// Exp. https://github.com/Syping/ - https://github.com/Syping/ - - - NAME_OF_TRANSLATOR - Insert your name here in following scheme, First Translator\nSecond Translator - Syping - - - TRANSLATOR_PROFILE - Insert your profile here in following scheme, First Translator,https://my.profile\nSecond Translator,mailto: my@mail.com - Syping,https://github.com/Syping/ - TRANSLATOR @@ -210,10 +65,6 @@ Snapmatic Bilder und Spielständen %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> - - Copyright &copy; <a href="%1">%2</a> %3<br/>%4 is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - Copyright &copy; <a href="%1">%2</a> %3<br/>%4 ist lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - A project for viewing and sync Grand Theft Auto V Snapmatic<br/> @@ -265,12 +116,6 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen No Crew Keine Crew - - Free - Crew Free (means no crew) - Crew Keine (bedeutet keine Crew) - Keine - ExportDialog @@ -279,10 +124,6 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen Dialog - - Format - Format - &JPEG/PNG format @@ -293,10 +134,6 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen GTA &Snapmatic format GTA &Snapmatic Format - - Resolution - Auflösung - Export Format @@ -378,18 +215,6 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen &Overwrite &Überschreiben - - &Import - &Importieren - - - &Save - &Speichern - - - &Replace - &Ersetzen - &Close @@ -418,26 +243,6 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen Import... Importieren... - - Settings - Einstellungen - - - &Keep Aspect Ratio - Seitenverhältnis &behalten - - - &Ignore Aspect Ratio - Seitenverhältnis &ignorieren - - - &Avatar - &Avatar - - - Keep Aspect Ratio - Seitenverhältnis behalten - @@ -449,10 +254,6 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen Avatar Avatar - - Background Colour: <span style="color:rgb(%1,%2,%3)">%4</span> - Hintergrundfarbe: <span style="color:rgb(%1,%2,%3)">%4</span> - Picture @@ -511,22 +312,6 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen &Cancel Abbre&chen - - Select Colour - Farbe auswählen - - - Are you sure to use a square image outside of the Avatar Zone? -When you plan to use it as Avatar the picture will be cut! - Bist du sicher ein Quadrat Bild außerhalb der Avatar Zone zu verwenden? -Wenn du planst es als Avatar zu verwenden das Bild wird abgetrennt! - - - None - Background Image: None - Hintergrundbild: Keins - Keins - @@ -571,18 +356,6 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! Background Image: File Datei - - Import - Importieren - - - 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 - JsonEditorDialog @@ -601,10 +374,6 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! &Close S&chließen - - Patching of Snapmatic Properties failed because of JSON Error - Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen JSON Fehler - JSON Error @@ -613,26 +382,11 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! MapLocationDialog - - Map Preview - Map Vorschau - - - Snapmatic Coordinate Viewer - Snapmatic Koordinatenansicht - Snapmatic Map Viewer Snapmatic Kartenansicht - - X: %1 -Y: %2 - X and Y position - X: %1 -Y: %2 - &Close @@ -669,22 +423,6 @@ Y: %2 OptionsDialog - - Options - Optionen - - - gta5sync - Options - gta5sync - Optionen - - - gta5sync - Settings - gta5sync - Einstellungen - - - Profile - Profil - Content Open/Select Mode @@ -720,23 +458,11 @@ Y: %2 Export Size Export Größe - - Default Size: %1x%2 - Standard Größe: %1x%2 - - - Desktop Size: %1x%2 - Desktop Größe: %1x%2 - Screen Resolution: %1x%2 Bildschirmauflösung: %1x%2 - - Custom Size - Eigene Größe - %1 - Settings @@ -848,20 +574,12 @@ Y: %2 &Send &Senden - - User Statistics - Benutzerstatistik - Participate in %1 User Statistics An %1 Benutzerstatistik teilnehmen - - Categorys - Kategorien - Hardware, Application and OS Specification @@ -872,10 +590,6 @@ Y: %2 System Language Configuration Spracheinstellungen des System - - OS Language Configuration - Spracheinstellungen des OS - Application Configuration @@ -904,19 +618,11 @@ Y: %2 User Feedback Benutzer Feedback - - Message for the Developers - Nachricht an den Entwickler - Limit: 1 message/day Limit: 1 Nachricht/Tag - - Send - Senden - Language for Areas @@ -932,10 +638,6 @@ Y: %2 Use Default Style (Restart) Benutze Standard Stil (Neustart) - - Use Default Style - Benutze Standard Stil - Style: @@ -951,10 +653,6 @@ Y: %2 Always use Message Font (Windows 2003 and earlier) Immer Nachrichtenschrift nutzen (Windows 2003 und früher) - - Language - Sprache - Interface @@ -973,10 +671,6 @@ Y: %2 Current: %1 Aktuell: %1 - - Areas - Standorte - Sync @@ -1009,35 +703,12 @@ Y: %2 OK, Cancel, Apply Abbre&chen - - %1 (%2 if available) [sys] - System like PC System = %1, System Language like Deutsch = %2 - %1 (%2 wenn verfügbar) [sys] - - - System - System like PC System - System - - - %1 (%2 if available) - System like PC System = %1, System Language like Deutsch = %2 - %1 (%2 wenn verfügbar) - %1 %1 %1 - - The new Custom Folder will initialize after you restart %1. - Der eigene Ordner wird initialisiert sobald du %1 neugestartet hast. - - - The new Custom Folder initialize after you restart %1. - Der eigene Ordner initialisiert sobald du %1 neugestartet hast. - %1 (Next Closest Language) @@ -1082,10 +753,6 @@ Y: %2 A feedback message have to between 3-1024 characters long Eine Feedback Nachricht hat zwischen 3-1024 Zeichen lang zu sein - - The language change will take effect after you restart %1. - Die Änderung der Sprache nimmt Effekt sobald du %1 neugestartet hast. - No Profile @@ -1107,30 +774,6 @@ Y: %2 %1 - Snapmatic Picture Viewer %1 - Snapmatic Bildansicht - - <html><head/><body><p><span style=" font-weight:600;">Title: </span>%6<br/><span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/><span style=" font-weight:600;">Players: </span>%4<br/><span style=" font-weight:600;">Crew ID: </span>%5</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">Titel: </span>%6<br/><span style=" font-weight:600;">Standort: </span>%7 (%1, %2, %3)<br/><span style=" font-weight:600;">Spieler: </span>%4<br/><span style=" font-weight:600;">Crew ID: </span>%5</p></body></html> - - - <span style=" font-weight:600;">Title: </span>%6<br/> -<span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> -<span style=" font-weight:600;">Players: </span>%4<br/> -<span style=" font-weight:600;">Crew ID: </span>%5 - <span style=" font-weight:600;">Titel: </span>%6<br/> -<span style=" font-weight:600;">Standort: </span>%7 (%1, %2, %3)<br/> -<span style=" font-weight:600;">Spieler: </span>%4<br/> -<span style=" font-weight:600;">Crew ID: </span>%5 - - - <span style=" font-weight:600;">Title: </span>%6<br/> -<span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> -<span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> -<span style=" font-weight:600;">Created: </span>%8<br/> - <span style=" font-weight:600;">Titel: </span>%6<br/> -<span style=" font-weight:600;">Standort: </span>%7 (%1, %2, %3)<br/> -<span style=" font-weight:600;">Spieler: </span>%4 (Crew %5)<br/> -<span style=" font-weight:600;">Erstellt: </span>%8 - <span style=" font-weight:600;">Title: </span>%6<br/> @@ -1142,10 +785,6 @@ Y: %2 <span style=" font-weight:600;">Spieler: </span>%4 (Crew %5)<br/> <span style=" font-weight:600;">Erstellt: </span>%8 - - &Export - &Exportieren - Manage picture @@ -1166,87 +805,30 @@ Y: %2 &Close S&chließen - - <span style=" font-weight:600;">Location: </span>%1, %2, %3 <br><span style=" font-weight:600;">Players: </span>%4<br><span style=" font-weight:600;">Crew ID: </span>%5 - <span style=" font-weight:600;">Standort: </span>%1, %2, %3 <br><span style=" font-weight:600;">Spieler: </span>%4<br><span style=" font-weight:600;">Crew ID: </span>%5 - - - <span style=" font-weight:600;">Picture Title: </span>%6<br> -<span style=" font-weight:600;">Location: </span>%1, %2, %3 <br> -<span style=" font-weight:600;">Players: </span>%4<br> -<span style=" font-weight:600;">Crew ID: </span>%5 - <span style=" font-weight:600;">Bildtitel: </span>%6<br> -<span style=" font-weight:600;">Standort: </span>%1, %2, %3 <br> -<span style=" font-weight:600;">Spieler: </span>%4<br> -<span style=" font-weight:600;">Crew ID: </span>%5 - - - <span style=" font-weight:600;">Title: </span>%6<br> -<span style=" font-weight:600;">Location: </span>%1, %2, %3 <br> -<span style=" font-weight:600;">Players: </span>%4<br> -<span style=" font-weight:600;">Crew ID: </span>%5 - <span style=" font-weight:600;">Titel: </span>%6<br> -<span style=" font-weight:600;">Standort: </span>%1, %2, %3 <br> -<span style=" font-weight:600;">Spieler: </span>%4<br> -<span style=" font-weight:600;">Crew ID: </span>%5 - Export Exportieren - - Copy - Kopieren - - - Close - Schließen - - - Export as &JPG picture... - Exportiere als &JPG Bild... - Export as &Picture... Als &Bild exportieren... - - Export as &GTA Snapmatic... - Exportiere als &GTA Snapmatic... - Export as &Snapmatic... Als &Snapmatic exportieren... - - Edi&t - Bearbei&ten - - - Open &Map View... - &Kartenansicht öffnen... - &Edit Properties... Eigenschaften bearb&eiten... - - &Other - &Andere - - - &Advanced - Advanced for more options - Erweitert (&A) - @@ -1300,84 +882,22 @@ Press 1 for Default View Avatar Vorschaumodus Drücke 1 für Standardmodus - - 1 - Avatar Preview Mode -2 - Toggle Overlay -Arrow Keys - Navigate - // L is for Left and R is for Right, Left Arrow Right Arrow - 1 - Avatar Vorschaumodus -2 - Overlay umschalten -Pfeiltasten - Navigieren - - - 1 - Avatar Preview Mode -2 - Toggle Overlay -L Arrow - Back -R Arrow - Next - L is for Left and R is for Right, Left Arrow Right Arrow - 1 - Avatar Vorschaumodus -2 - Overlay umschalten -L Pfeil - Zurück -R Pfeil - Weiter - - - Avatar Preview Mode -Press A for Default View - Avatar Vorschaumodus -Drücke A für Standardansicht - - - Avatar Preview Mode<br>Press A for Default View - Avatar Vorschaumodus<br>Drücke A für Standardansicht - - - No player - Keine Spieler - - - No crew - Keine Crew - Unknown Location Unbekannter Standort - - Export picture... - Exportiere Bild... - - - Export as JPG picture... - Exportiere als JPG Bild... - - - JPEG picture (*.jpg) - JPEG Bild (*.jpg) - Portable Network Graphics (*.png) Portable Network Graphics (*.png) - - Export as JPG picture - Exportiere als JPG Bild - Overwrite %1 with current Snapmatic picture? Überschreibe %1 mit aktuellen Snapmatic Bild? - - Export as GTA Snapmatic - Exportiere als GTA Snapmatic - - - Failed to overwrite %1 with current Snapmatic picture - Fehlgeschlagen beim Überschreiben von %1 mit aktuellen Snapmatic Bild - Export as Picture... @@ -1443,22 +963,6 @@ Drücke A für Standardansicht Exported Snapmatic to "%1" because of using the .auto extension. Snapmatic wurde wegen Benutzung der .auto Erweiterung zu "%1" exportiert. - - Exported Snapmatic to "%1" because of using the .auto extension - Snapmatic wurde wegen Benutzung der .auto Erweiterung zu "%1" exportiert - - - Copy picture - Bild kopieren - - - Export picture for Import... - Exporti - - - Export as GTA Snapmatic... - Exportiere als GTA Snapmatic... - GTA V Export (*.g5e) @@ -1474,34 +978,6 @@ Drücke A für Standardansicht Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) - - All files (**) - Alle Dateien (**) - - - Failed to copy current Snapmatic picture - Fehlgeschlagen beim Kopieren vom Snapmatic Bild - - - Failed to save current picture - Fehlgeschlagen beim Speichern vom aktuellen Bild - - - JPEG picture (*.jpg);;Portable Network Graphics (*.png) - JPEG Bild (*.jpg);;Portable Network Graphics (*.png) - - - Export picture - Bild exportieren - - - Snapmatic Picture Exporter - Snapmatic Bild Exporter - - - Failed to save the picture - Beim Speichern des Bildes ist ein Fehler aufgetreten - @@ -1514,17 +990,9 @@ Drücke A für Standardansicht Open &JSON Editor... &JSON Editor öffnen... - - &Edit Image... - Bild bearb&eiten... - PlayerListDialog - - Edit Players - Spieler bearbeiten - Edit Players... @@ -1600,10 +1068,6 @@ Drücke A für Standardansicht Import file Importiere Datei - - Import exported file - Importiere exportierte Datei - &Import... @@ -1619,22 +1083,6 @@ Drücke A für Standardansicht &Close S&chließen - - Import copy - Kopie importieren - - - Content of Profile %1 - Inhalt vom Profil %1 - - - View - Ansehen - - - Close Profile - Profil schließen - Loading... @@ -1682,14 +1130,6 @@ Drücke A für Standardansicht Import Importieren - - All profile files (SGTA* PGTA*) - Alle Profildateien (SGTA* PGTA*) - - - Importable files (*.g5e *.jpg *.png SGTA* PGTA*) - Importfähige Dateien (*.g5e *.jpg *.png SGTA* PGTA*) - @@ -1702,10 +1142,6 @@ Drücke A für Standardansicht Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) - - All image files (*.jpg *.png) - Alle Bilddateien (*.jpg *.png) - Importable files (%1) @@ -1777,10 +1213,6 @@ Drücke A für Standardansicht Initialising export... Initialisiere Export... - - Can't import %1 because of not valid file format - Kann %1 nicht importieren weil das Dateiformat nicht gültig ist - Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e @@ -1808,10 +1240,6 @@ Drücke A für Standardansicht Enabled pictures: %1 of %2 Aktivierte Bilder: %1 von %2 - - Failed to import the Snapmatic picture, file not begin with PGTA - Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA - Failed to import the Snapmatic picture, can't copy the file into profile @@ -1845,14 +1273,6 @@ Drücke A für Standardansicht GTA Snapmatic only Nur GTA Snapmatic - - Snapmatic Mass Tool - Snapmatic Massenwerkzeug - - - You don't have any Snapmatics selected! - Du hast keine Snapmatics ausgewählt! - @@ -1873,10 +1293,6 @@ Drücke A für Standardansicht Patch file %1 of %2 files Patche Datei %1 von %2 Dateien - - You don't have any Snapmatic selected! - Du hast keine Snapmatic ausgewählt! - @@ -1967,20 +1383,6 @@ Drücke A für Standardansicht %1 failed with... Titel ändern - - Export Snapmatic pictures - -JPG pictures make it possible to open the picture with a Image Viewer -GTA Snapmatic make it possible to import the picture into the game - -Export as: - Exportiere Snapmatic Bilder - -JPG Bilder machen es möglich sie mit ein Bildansicht Programm zu öffnen -Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren - -Exportieren als: - @@ -1999,46 +1401,6 @@ Exportieren als: You really want remove the selected Snapmatic picutres and Savegame files? Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen? - - Failed at remove the complete selected Snapmatic pictures and/or Savegame files - Fehlgeschlagen beim kompletten entfernen der ausgewählten Snapmatic Bilder und/oder der Spielstanddateien - - - Failed to import copy of Snapmatic picture because the file not begin with PGTA - Fehlgeschlagenen beim Import vom Snapmatic Bild weil die Datei nicht mit PGTA begint - - - Failed to import copy of Snapmatic picture because the copy failed - Fehlgeschlagenen beim Import vom Snapmatic Bild weil kopieren fehlgeschlagen ist - - - Failed to import copy of Savegame file because the copy failed - Fehlgeschlagenen beim Import vom Spielstand weil kopieren fehlgeschlagen ist - - - Failed to import copy of Savegame file because no free Savegame slot left - Fehlgeschlagenen beim Import vom Spielstand weil kein Spielstandslot mehr übrig ist - - - Export selected - Auswahl exportieren - - - Export and Copy pictures - Bilder exportieren und kopieren - - - Export pictures - Bilder exportieren - - - Copy pictures - Bilder kopieren - - - How should we deal with the Snapmatic pictures? - Wie sollen wir mit den Snapmatic Bilder umgehen? - @@ -2048,14 +1410,6 @@ Exportieren als: Export selected... Auswahl exportieren... - - Initializing export... - Initialisiere Export... - - - Initializing... - Initialisierung... - Export failed with... @@ -2063,22 +1417,6 @@ Exportieren als: %1 Exportieren fehlgeschlagen bei...\n%1 - - Delete selected - Auswahl löschen - - - You really want delete the selected content? - Möchtest du wirklich den ausgewählten Inhalt löschen? - - - Failed at delete all selected content - Fehlgeschlagen beim Löschen von alle ausgewählte Inhalte - - - Current export job: %1 - Aktueller Exportiervorgang: %1 - @@ -2115,19 +1453,6 @@ Exportieren als: <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>Willkommen zu %1!</h4>Möchtest du %1 einstellen bevor du es nutzt? - - No Snapmatic pictures are selected - Keine Snapmatic Bilder sind ausgewählt - - - %1 failed with... - -%2 - Action failed with... - %1 fehlgeschlagen mit... - -%2 - SavegameDialog @@ -2147,23 +1472,11 @@ Exportieren als: &Export &Exportieren - - Cop&y - &Kopieren - &Close S&chließen - - Copy - Kopieren - - - Close - Schließen - Failed at %1 @@ -2177,20 +1490,6 @@ Exportieren als: Savegame Widget Spielstand Widget - - The Third Way (100%) - 00/00/00 00:00:00 - The Third Way (100%) - 00/00/00 00:00:00 - - - Savegame %1 -%2 - Spielstand %1 -%2 - - - SAVE - %1<br>%2 - SPIELSTAND - %1<br>%2 - View @@ -2202,10 +1501,6 @@ Exportieren als: Export Exportieren - - Copy - Kopieren - Delete @@ -2232,10 +1527,6 @@ Exportieren als: WRONG FORMAT FALSCHES FORMAT - - AUTO - AUTO - @@ -2303,30 +1594,6 @@ Exportieren als: &Deselect All Alles a&bwählen - - Select - Auswählen - - - Deselect - Abwählen - - - Select all - Alles auswählen - - - Ctrl+S - Strg+S - - - Deselect all - Alles abwählen - - - Shift+S - Umschalt+S - View savegame @@ -2375,39 +1642,11 @@ Exportieren als: Failed to export current Savegame Fehlgeschlagen beim Exportieren vom aktuellen Spielstand - - Failed to copy current Savegame - Fehlgeschlagen beim Kopieren vom aktuellen Spielstand - - - Overwrite %1 with current savegame? - Überschreibe %1 mit aktuellen Spielstand? - - - Failed to overwrite %1 with current savegame - Fehlgeschlagen beim Überschreiben von %1 mit aktuellen Spielstand - - - Failed to copy current savegame - Fehlgeschlagen beim Kopieren vom Spielstand - - - Failed to copy the savegame - Beim Kopieren vom Spielstand ist ein Fehler aufgetreten - No valid file is selected Keine gültige Datei wurde ausgewählt - - Are you sure to delete %1 from your Savegames? - Bist du sicher %1 von deinen Spielständen zu löschen? - - - Failed at deleting %1 from your Savegames - Fehlgeschlagen beim Löschen %1 von deinen Spielständen - SnapmaticEditor @@ -2449,10 +1688,6 @@ Exportieren als: Mugshot Fahndungsfoto - - Custom - Eigenes - Director @@ -2527,14 +1762,6 @@ Exportieren als: &Cancel Abbre&chen - - Apply - Übernehmen - - - Cancel - Cancel - @@ -2542,16 +1769,6 @@ Exportieren als: Edit Bearbeiten - - Players: %1 (%2) - Multiple Player - Spieler: (%1) (%2) - - - Player: %1 (%2) - One Player - Spieler: (%1) (%2) - Yes @@ -2648,42 +1865,6 @@ Exportieren als: description not exists (%1) Beschreibung existiert nicht (%1) - - header not exists error - Header existiert nicht Fehler - - - header is malformed error - Header ist fehlerhaft Fehler - - - picture not exists error (%1) - Bild existiert nicht Fehler (%1) - - - JSON not exists error (%1) - JSON existiert nicht Fehler (%1) - - - title not exists error (%1) - Titel existiert nicht Fehler (%1) - - - description not exists error (%1) - Beschreibung existiert nicht Fehler (%1) - - - JSON is incomplete and malformed error - JSON ist unvollständig und Fehlerhaft Fehler - - - JSON is incomplete error - JSON ist unvollständig Fehler - - - JSON is malformed error - JSON ist Fehlerhaft Fehler - reading file %1 because of %2 @@ -2768,27 +1949,11 @@ Exportieren als: Edi&t Bearbei&ten - - Enable &In-game - &Im Spiel aktivieren - - - Disable &In-game - &Im Spiel deaktivieren - &Export &Exportieren - - Export as &JPG picture - Exportiere als &JPG Bild - - - Export as &GTA Snapmatic - Exportiere als &GTA Snapmatic - Show &In-game @@ -2799,34 +1964,6 @@ Exportieren als: Hide &In-game &Im Spiel ausblenden - - &Edit Properties - &Eigenschaften bearbeiten - - - PHOTO - %1 - FOTO - %1 - - - &Edit Properties... - &Eigenschaften bearbeiten... - - - Export as &JPG picture... - Exportiere als &JPG Bild... - - - Export as &Picture... - Exportiere als &Bild... - - - Export as &GTA Snapmatic... - Exportiere als &GTA Snapmatic... - - - Export as &Snapmatic... - Exportiere als &Snapmatic... - &View @@ -2857,30 +1994,6 @@ Exportieren als: &Deselect All Alles a&bwählen - - Select - Auswählen - - - Deselect - Abwählen - - - Select all - Alles auswählen - - - Ctrl+S - Strg+S - - - Deselect all - Alles abwählen - - - Shift+S - Umschalt+S - View picture @@ -2896,10 +2009,6 @@ Exportieren als: Export picture Bild exportieren - - You're sure to delete %1 from your Snapmatic pictures? - Bist du sicher %1 von deinen Snapmatic Bilder zu löschen? - Failed at deleting %1 from your Snapmatic pictures @@ -2908,19 +2017,11 @@ Exportieren als: TelemetryDialog - - You want help to improve %1 in the future with the collection of data? - Möchtest du helfen %1 in der Zukunft zu verbessern mit der Sammlung von Daten? - %1 User Statistics %1 Benutzerstatistik - - You want help to improve %1 in the future by collection of data? - Möchtest du helfen %1 in der Zukunft zu verbessern durch Sammlung von Daten? - You want help %1 to improve in the future by collection of data? @@ -2939,86 +2040,6 @@ Exportieren als: UserInterface - - Grand Theft Auto V Sync - Grand Theft Auto V Sync - - - GTA V Sync - GTA V Sync - - - gta5sync - %1 - gta5sync - %1 - - - File - Datei - - - Help - Hilfe - - - Edit - Bearbeiten - - - Profile - Profil - - - About gta5sync - Über gta5sync - - - Ctrl+A - Strg+A - - - Close - Schließen - - - Options - Optionen - - - Ctrl+O - Strg+O - - - Select all - Alles auswählen - - - Ctrl+S - Strg+S - - - Deselect all - Alles abwählen - - - Shift+S - Umschalt+S - - - Export selected - Auswahl exportieren - - - Ctrl+E - Strg+E - - - Delete selected - Auswahl löschen - - - Ctrl+D - Strg+D - Exit @@ -3029,19 +2050,11 @@ Exportieren als: &Selection visibility Auswahl &Sichtbarkeit - - &About Product - &Über Produkt - &Exit B&eenden - - Ctrl+Q - Strg+Q - Select profile @@ -3098,65 +2111,21 @@ Exportieren als: &Qualify as Avatar Als Avatar &qualifizieren - - Qualify as &Avatar - Als &Avatar qualifizieren - Change &Players... S&pieler ändern... - - Change Title... - Titel ändern... - Change &Crew... &Crew ändern... - - Change Crew... - Crew ändern... - - - Change Players... - Spieler ändern... - - - Set Title... - Titel ändern... - - - Set Crew... - Crew ändern... - - - Qualify as Avatar - Als Avatar qualifizieren - - - Selection visibility - Auswahl Sichtbarkeit - - - &About gta5sync - &Über gta5sync - Close &Profile &Profil schließen - - Ctrl+End - Strg+Ende - - - Ctrl+Del - Strg+Entf - &Open File... @@ -3168,10 +2137,6 @@ Exportieren als: Select &GTA V Folder... Wähle &GTA V Ordner... - - Ctrl+G - Strg+G - Show In-gam&e @@ -3182,43 +2147,11 @@ Exportieren als: Hi&de In-game Im Spiel ausblen&den - - Hid&e In-game - Im Spiel ausblen&den - - - &Enable In-game - Im Spiel aktivier&en - - - Shift+E - Umschalt+E - - - &Disable In-game - Im Spiel &deaktivieren - - - Shift+D - Umschalt+D - &Close S&chließen - - Select &Profile - &Profil auswählen - - - Ctrl+P - Strg+P - - - &Options - &Optionen - &Settings @@ -3244,23 +2177,11 @@ Exportieren als: &Remove selected Auswahl entfe&rnen - - Ctrl+R - Strg+R - &Import files... Dateien &importieren... - - Ctrl+I - Strg+I - - - GTA V Folder not found! - GTA V Ordner nicht gefunden! - @@ -3276,29 +2197,17 @@ Exportieren als: Select GTA V Folder... Wähle GTA V Ordner... - - Select GTA V &Folder... - Wähle GTA V &Ordner... - Open File... Datei öffnen... - - Import - Importieren - %2 - %1 %2 - %1 - - Selection mass tools - Auswahl Massenwerkzeuge - @@ -3319,35 +2228,11 @@ Exportieren als: Can't open %1 because of not valid file format Kann nicht %1 öffnen weil Dateiformat nicht gültig ist - - Change GTA V &Folder - GTA V &Ordner ändern - - - gta5sync - gta5sync - - - Grand Theft Auto V Folder not found! - Grand Theft Auto V Ordner wurde nicht gefunden! - &Reload &Neuladen - - Reload - Neuladen - - - Reload profiles - Profile neuladen - - - Not able to reload profiles - Nicht fähig Profile neuzuladen - diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index 9f05f75..be01df9 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -33,16 +33,6 @@ Running with Qt %6<br/> Translated by translator, example Translated by Syping - - NAME_OF_TRANSLATOR - Insert your name here in following scheme, First Translator\nSecond Translator - Syping - - - TRANSLATOR_PROFILE - Insert your profile here in following scheme, First Translator,https://my.profile\nSecond Translator,mailto: my@mail.com - https://github.com/Syping/ - TRANSLATOR diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index ac00a96..fc859f3 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -3,35 +3,6 @@ AboutDialog - - About gta5sync - À propos de gta5sync - - - <span style=" font-weight:600;">gta5sync</span><br/> -<br/> -A project for viewing and sync Grand Theft Auto V Snapmatic<br/> -Pictures and Savegames<br/> -<br/> -Project version: %1<br/> -Project build: %4, %5<br/> -Compiled with Qt %2<br/> -Running with Qt %3<br/> -<br/> -Copyright &copy; <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - <span style=" font-weight:600;">gta5sync</span><br/> -<br/> -Un outil pour gérer et synchroniser les photos Snapmatic<br/> -et les fichiers de sauvegarde de Grand Theft Auto V<br/> -<br/> -gta5sync v%1<br/> -Build %4, %5<br/> -Compilé avec Qt %2<br/> -Fonctionne avec Qt %3<br/> -<br/> -Copyright &copy; <a href="https://github.com/Syping/">Syping</a> 2016<br/> -gta5sync est distribué sous license <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - About %1 @@ -59,98 +30,18 @@ Compilé avec Qt %5<br/> Fonctionne avec Qt %6<br/> <br/> %7 - - - <span style=" font-weight:600;">%1</span><br/> -<br/> -%2<br/> -<br/> -Version %3<br/> -Created on %4<br/> -Built with Qt %5<br/> -Running with Qt %6<br/> -%8<br/> -%7 - <span style=" font-weight:600;">%1</span><br/> -<br/> -%2<br/> -<br/> -Version %3<br/> -Publié le %4<br/> -Compilé avec Qt %5<br/> -Fonctionne avec Qt %6<br/> -%8<br/> -%7 - - - <span style=" font-weight:600;">%8</span><br/> -<br/> -%9<br/> -<br/> -Project version: %1<br/> -Project build: %4<br/> -Compiled with Qt %2<br/> -Running with Qt %3<br/> -<br/> -Copyright &copy; <a href="%5">%6</a> %7<br/>%8 is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - <span style=" font-weight:600;">%8</span><br/> -<br/> -%9<br/> -<br/> -Version %1<br/> -Build %4<br/> -Compilé avec Qt %2<br/> -Fonctionne avec Qt %3<br/> -<br/> -Copyright &copy; <a href="%5">%6</a> %7<br/> -%8 est distribué sous license <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> &Close &Fermer - - Using %1 %2 - Exp. Using libmyfuck - Utilise %1 %2 - - - Translated by %1 - Exp. Translated by Syping - Traduit par %1 - - - NAME_OF_TRANSLATOR - Your Name (The person behind your screen looking at this text!) - Ganjalo - - - TRANSLATOR_PROFILE - mailto: http:// https:// Exp. https://github.com/Syping/ - https://github.com/Ganjalo/ - - - Using %1 %2 - Using specific library, example Using libmyfuck - Utilise %1 %2 - Translated by %1 Translated by translator, example Translated by Syping Traduit par %1 - - NAME_OF_TRANSLATOR - Insert your name here in following scheme, First Translator\nSecond Translator - Ganjalo - - - TRANSLATOR_PROFILE - Insert your profile here in following scheme, First Translator,https://my.profile\nSecond Translator,mailto: my@mail.com - https://github.com/Ganjalo/ - TRANSLATOR @@ -174,10 +65,6 @@ et les fichiers de sauvegarde de Grand Theft Auto V %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> - - Copyright &copy; <a href="%1">%2</a> %3<br/>%4 is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - Copyright &copy; <a href="%1">%2</a> %3<br/>%4 est distribué sous license <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - A project for viewing and sync Grand Theft Auto V Snapmatic<br/> @@ -356,26 +243,6 @@ et les fichiers de sauvegarde de Grand Theft Auto V Import... Importer... - - Settings - Paramètres - - - &Keep Aspect Ratio - &Conserver le rapport d'aspect - - - &Ignore Aspect Ratio - &Ignorer le rapport d'aspect - - - &Avatar - &Avatar - - - Keep Aspect Ratio - Conserver le rapport d'aspect - @@ -488,10 +355,6 @@ When you want to use it as Avatar the image will be detached! Background Image: File - - Import - Importer - JsonEditorDialog @@ -556,13 +419,6 @@ Y: %2 - - MapPreviewDialog - - &Apply - A&ppliquer - - OptionsDialog @@ -790,10 +646,6 @@ Y: %2 Always use Message Font (Windows 2003 and earlier) - - Language - Langue - Interface @@ -849,16 +701,6 @@ Y: %2 OK, Cancel, Apply &Annuler - - %1 (%2 if available) - System like PC System = %1, System Language like Deutsch = %2 - %1 (%2 si disponible) - - - System - System like PC System - Système - %1 (Next Closest Language) @@ -909,14 +751,6 @@ Y: %2 A feedback message have to between 3-1024 characters long - - The new Custom Folder will initialize after you restart %1. - Le répertoire personnalisé sera actif au prochain lancement de %1. - - - The language change will take effect after you restart %1. - Le changement de langue sera actif au prochain lancement de %1. - No Profile @@ -954,37 +788,21 @@ Y: %2 Manage picture - - Export picture - Exporter la photo - &Manage - - &Export - &Exporter - Close viewer - - Close - Fermer la visionneuse - &Close &Fermer - - Export as GTA Snapmatic... - Exporter comme Snapmatic... - Failed to export the picture because the system occurred a write failure @@ -1039,14 +857,6 @@ Y: %2 Exported Snapmatic to "%1" because of using the .auto extension. Exporté comme "%1" avec l'utilisation de l'extension .auto. - - All files (**) - Tous les fichiers (**) - - - Export as GTA Snapmatic - Exporter comme GTA Snapmatic - @@ -1073,44 +883,24 @@ Y: %2 Export as Picture - - Failed to overwrite %1 with current Snapmatic picture - Echec du remplacement de %1 - - - Failed to copy current Snapmatic picture - Echec de la copie - No valid file is selected Fichier invalide - - Export as &JPG picture... - Exporter comme image &JPG... - Export as &Picture... - - Export as &GTA Snapmatic... - Exporter comme &GTA Snapmatic... - Export as &Snapmatic... - - Edi&t - Édi&ter - @@ -1170,46 +960,22 @@ Press 1 for Default View Mode Aperçu Avatar Appuyer sur 1 pour le mode par défaut - - Avatar Preview Mode<br>Press A for Default View - Aperçu avatar<br>Appuyer sur A pour la vue par défaut - - - No player - Aucun joueur - - - No crew - Aucun crew - Unknown Location Emplacement inconnu - - Export as JPG picture... - Exporter comme image JPG... - Export Exporter - - JPEG picture (*.jpg) - Image JPEG (*.jpg) - Portable Network Graphics (*.png) Portable Network Graphics (*.png) - - Export as JPG picture - Exporter comme image JPG - @@ -1299,10 +1065,6 @@ Appuyer sur 1 pour le mode par défaut Import file - - Import exported file - Importer un profil - &Import... @@ -1377,10 +1139,6 @@ Appuyer sur 1 pour le mode par défaut Import Importer - - All profile files (SGTA* PGTA*) - Fichiers de profil GTA (SGTA* PGTA*) - @@ -1447,22 +1205,6 @@ Appuyer sur 1 pour le mode par défaut Failed to read Savegame file Impossible de lire le fichier de sauvegarde - - Can't import %1 because of not valid file format - Impossible d'importer %1, format invalide - - - Failed to import the Snapmatic picture, file not begin with PGTA - Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*) - - - Importable files (*.g5e *.jpg *.png SGTA* PGTA*) - Fichiers importables (*.g5e *.jpg *.png SGTA* PGTA*) - - - All image files (*.jpg *.png) - Tous les fichiers image (*.jpg *.png) - @@ -1507,10 +1249,6 @@ Appuyer sur 1 pour le mode par défaut Failed to import the Savegame, no Savegame slot is left Impossible d'importer la sauvegarde, aucun emplacement libre - - Export selected - Exporter la sélection - @@ -1656,10 +1394,6 @@ Appuyer sur 1 pour le mode par défaut %1 failed with... - - Initializing export... - Initialisation de l'export... - Export failed with... @@ -1687,10 +1421,6 @@ Appuyer sur 1 pour le mode par défaut You really want remove the selected Snapmatic picutres and Savegame files? Supprimer la sélection ? - - Failed at remove the complete selected Snapmatic pictures and/or Savegame files - Impossible de supprimer la sélection - All profile files (*.g5e SGTA* PGTA*) @@ -1955,10 +1685,6 @@ Appuyer sur 1 pour le mode par défaut Mugshot Photo d'identité - - Custom - Personnalisé - Director @@ -2252,23 +1978,11 @@ Appuyer sur 1 pour le mode par défaut Hide &In-game &Invisible en jeu - - &Edit Properties... - Modifier les &propriétés... - &Export &Exporter - - Export as &JPG picture... - Exporter comme image &JPG... - - - Export as &GTA Snapmatic... - Exporter comme &GTA Snapmatic... - &View @@ -2325,10 +2039,6 @@ Appuyer sur 1 pour le mode par défaut UserInterface - - gta5sync - %1 - gta5sync - %1 - Select profile @@ -2380,14 +2090,6 @@ Appuyer sur 1 pour le mode par défaut &Profile &Profil - - &About gta5sync - &À propos de gta5sync - - - Ctrl+P - Ctrl+P - &Exit @@ -2398,82 +2100,46 @@ Appuyer sur 1 pour le mode par défaut Exit Quitter - - Ctrl+Q - Ctrl+Q - Close &Profile Fermer le &profil - - Ctrl+End - Ctrl + Fin - &Settings Paramètre&s - - Ctrl+S - Ctrl+S - Select &All Sélectionner &tout - - Ctrl+A - Ctrl+A - &Deselect All &Désélectionner tout - - Ctrl+D - Ctrl+D - &Export selected... &Exporter la sélection... - - Ctrl+E - Ctrl+E - &Remove selected &Supprimer la sélection - - Ctrl+Del - Ctrl+Del - &Import files... &Importer... - - Ctrl+I - Ctrl+I - &Open File... &Ouvrir... - - Ctrl+O - Ctrl+O - @@ -2488,19 +2154,11 @@ Appuyer sur 1 pour le mode par défaut Select GTA V Folder... Modifier l'emplacement de GTA V... - - Ctrl+G - Ctrl+G - Show In-gam&e Rendre visible &en jeu - - Shift+E - Shift+E - Change &Players... @@ -2536,10 +2194,6 @@ Appuyer sur 1 pour le mode par défaut Hi&de In-game Ren&dre invisible en jeu - - Shift+D - Shift+D - diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index 169e87a..ebd7af7 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -3,10 +3,6 @@ AboutDialog - - About gta5sync - О программе gta5sync - About %1 @@ -33,28 +29,6 @@ Running with Qt %6<br/> Сделано Ñ Qt %5<br/> ВыполнÑетÑÑ Ð½Ð° Qt %6<br/> <br/> -%7 - - - <span style=" font-weight:600;">%1</span><br/> -<br/> -%2<br/> -<br/> -Version %3<br/> -Created on %4<br/> -Built with Qt %5<br/> -Running with Qt %6<br/> -%8<br/> -%7 - <span style=" font-weight:600;">%1</span><br/> -<br/> -%2<br/> -<br/> -ВерÑÐ¸Ñ %3<br/> -Сделано %4<br/> -Сделано Ñ Qt %5<br/> -ВыполнÑетÑÑ Ð½Ð° Qt %6<br/> -%8<br/> %7 @@ -62,55 +36,12 @@ Running with Qt %6<br/> &Close &Закрыть - - <span style=" font-weight:600;">gta5sync</span><br/><br/>A project for viewing and sync Grand Theft Auto 5 Snapmatic Pictures and Savegames<br/><br/>Project version: %1<br/>Compiled with Qt %2<br/>Running with Qt %3<br/><br/>Copyright © <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - <span style=" font-weight:600;">gta5sync</span><br/><br/>Проект Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра и Ñинхронизации фотографий Snapmatic и Ñохранений от Grand Theft Auto 5<br/><br/>ВерÑÐ¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°: %1<br/>Скомпилировано Ñ Qt %2<br/>Работает на Qt %3<br/><br/>Copyright © <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync лицензирован по <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - - - Close - Закрыть - - - Using %1 %2 - Exp. Using libmyfuck - ИÑпользует %1 %2 - - - Translated by %1 - Exp. Translated by Syping - Перевёл %1 - - - NAME_OF_TRANSLATOR - Your Name (The person behind your screen looking at this text!) - VADemon - - - TRANSLATOR_PROFILE - mailto: http:// https:// Exp. https://github.com/Syping/ - https://github.com/VADemon/ - - - Using %1 %2 - Using specific library, example Using libmyfuck - ИÑпользует %1 %2 - Translated by %1 Translated by translator, example Translated by Syping Перевёл %1 - - NAME_OF_TRANSLATOR - Insert your name here in following scheme, First Translator\nSecond Translator - VADemon - - - TRANSLATOR_PROFILE - Insert your profile here in following scheme, First Translator,https://my.profile\nSecond Translator,mailto: my@mail.com - https://github.com/VADemon/ - TRANSLATOR @@ -134,10 +65,6 @@ Pictures and Savegames %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> - - Copyright &copy; <a href="%1">%2</a> %3<br/>%4 is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - Copyright &copy; <a href="%1">%2</a> %3<br/>%4 под лицензией <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - A project for viewing and sync Grand Theft Auto V Snapmatic<br/> @@ -318,26 +245,6 @@ Grand Theft Auto V Snapmatic картинок и ÑохраненийImport... Импортировать... - - Settings - ÐаÑтройки - - - &Keep Aspect Ratio - О&Ñтавить Ñоотношение Ñторон - - - &Ignore Aspect Ratio - &Игнорировать Ñоотношение Ñторон - - - &Avatar - &Ðватар - - - Keep Aspect Ratio - ОÑтавить Ñоотношение Ñторон - @@ -452,14 +359,6 @@ When you want to use it as Avatar the image will be detached! Background Image: File Файл - - Import - Импортировать - - - Can't import %1 because file can't be parsed properly - Ðе получилоÑÑŒ импортировать %1, файл не может быть правильно обработан - JsonEditorDialog @@ -491,13 +390,6 @@ When you want to use it as Avatar the image will be detached! Snapmatic Map Viewer ПроÑмотрщик карты Snapmatic - - X: %1 -Y: %2 - X and Y position - X: %1 -Y: %2 - &Close @@ -686,10 +578,6 @@ Y: %2 Categories Категории - - Categorys - Категории - Hardware, Application and OS Specification @@ -765,10 +653,6 @@ Y: %2 Always use Message Font (Windows 2003 and earlier) Ð’Ñегда иÑпользовать шрифт Ñообщений (Windows 2003 и ранние) - - Language - Язык - Interface @@ -824,17 +708,6 @@ Y: %2 OK, Cancel, Apply От&мена - - System - System like PC System - может быть надо прилагательное - СиÑтема - - - %1 (%2 if available) - System like PC System = %1, System Language like Deutsch = %2 - %1 (%2 еÑли имеетÑÑ) - %1 (Next Closest Language) @@ -885,14 +758,6 @@ Y: %2 A feedback message have to between 3-1024 characters long Сообщение обратное ÑвÑзи не должно быть длинее 1024 Ñимволов - - The new Custom Folder will initialize after you restart %1. - Ð”Ñ€ÑƒÐ³Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° будет загружена поÑле перезапуÑка %1. - - - The language change will take effect after you restart %1. - Язык изменитÑÑ Ð¿Ð¾Ñле перезапуÑка %1. - No Profile @@ -914,16 +779,6 @@ Y: %2 %1 - Snapmatic Picture Viewer %1 - ПроÑмотрщик фотографий Snapmatic - - <span style=" font-weight:600;">Title: </span>%6<br> -<span style=" font-weight:600;">Location: </span>%1, %2, %3 <br> -<span style=" font-weight:600;">Players: </span>%4<br> -<span style=" font-weight:600;">Crew ID: </span>%5 - <span style=" font-weight:600;">Заголовок: </span>%6<br> -<span style=" font-weight:600;">ПозициÑ: </span>%1, %2, %3 <br> -<span style=" font-weight:600;">Игроки: </span>%4<br> -<span style=" font-weight:600;">ID группы: </span>%5 - <span style=" font-weight:600;">Title: </span>%6<br/> @@ -935,19 +790,11 @@ Y: %2 <span style=" font-weight:600;">Игроки: </span>%4 (Банда %5)<br/> <span style=" font-weight:600;">Сделано: </span>%8 - - Export picture - ЭкÑпорт картинки - &Manage &Управление - - &Export - &ЭкÑпорт - Manage picture @@ -969,42 +816,18 @@ Y: %2 Export ЭкÑпортировать - - Copy - Копировать - - - Close - Закрыть - - - Export as &JPG picture... - ЭкÑп&ортировать как картинку JPG... - Export as &Picture... ЭкÑпортировать как &картинку... - - Export as &GTA Snapmatic... - ЭкÑ&портировать как GTA Snapmatic... - Export as &Snapmatic... ЭкÑпортировать как &Snapmatic... - - Edi&t - &Правка - - - Open &Map View... - Открыть &карту... - @@ -1064,50 +887,22 @@ Press 1 for Default View Режим проÑмотра аватарок Ðажмите 1 Ð´Ð»Ñ Ñтандартного проÑмотра - - No player - Игроков нет - - - No crew - Без группы - Unknown Location ÐеизвеÑтное меÑто - - Export as JPG picture... - ЭкÑпортировать картинкой JPG... - - - JPEG picture (*.jpg) - Картинка JPEG (*.jpg) - Portable Network Graphics (*.png) Картинка Portable Network Graphics (*.png) - - Export as JPG picture - ЭкÑпортировать как картинку JPG - Overwrite %1 with current Snapmatic picture? ПерезапиÑать %1 текущей картинкой Snapmatic? - - Export as GTA Snapmatic - ЭкÑпортировать как GTA Snapmatic - - - Failed to overwrite %1 with current Snapmatic picture - Ðе удалоÑÑŒ перезапиÑать %1 картинкой Snapmatic - Export as Picture... @@ -1179,14 +974,6 @@ Press 1 for Default View No valid file is selected Выбранный файл неверен - - Copy picture - Скопировать картинку - - - Export as GTA Snapmatic... - ЭкÑпортировать как GTA Snapmatic... - GTA V Export (*.g5e) @@ -1202,14 +989,6 @@ Press 1 for Default View Snapmatic pictures (PGTA*) Картинки Snapmatic (PGTA*) - - All files (**) - Ð’Ñе файлы (**) - - - Failed to copy current Snapmatic picture - Ðе удалоÑÑŒ Ñкопировать текущую картинку Snapmatic - @@ -1293,10 +1072,6 @@ Press 1 for Default View Import file Импортировать файл - - Import exported file - Импортировать ÑкÑпортированный файл - &Import... @@ -1312,14 +1087,6 @@ Press 1 for Default View &Close &Закрыть - - Import copy - Импортировать копию - - - Close Profile - Закрыть профиль - Loading... @@ -1368,10 +1135,6 @@ Press 1 for Default View Import Импортировать - - All profile files (SGTA* PGTA*) - Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (SGTA* PGTA*) - @@ -1419,10 +1182,6 @@ Press 1 for Default View Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - Can't import %1 because of not valid file format - Ðе получилоÑÑŒ импортировать %1 из-за неправильного формата файла - @@ -1435,14 +1194,6 @@ Press 1 for Default View Enabled pictures: %1 of %2 Включенные картинки: %1 из %2 - - Importable files (*.g5e *.jpg *.png SGTA* PGTA*) - ПодходÑщие Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° файлы (*.g5e *.jpg *.png SGTA* PGTA*) - - - All image files (*.jpg *.png) - Ð’Ñе Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (*.jpg *.png) - Importable files (%1) @@ -1540,10 +1291,6 @@ Press 1 for Default View You really want remove the selected Snapmatic picutres and Savegame files? Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - - Failed at remove the complete selected Snapmatic pictures and/or Savegame files - Ðе удалоÑÑŒ удалить полноÑтью выбранные картинки Snapmatic и/или файлы Ñохранений - @@ -1654,26 +1401,6 @@ Press 1 for Default View %1 failed with... Изменение заголовка - - Failed to import copy of Snapmatic picture because the file not begin with PGTA - Ðе удалоÑÑŒ имортировать копию картинки Snapmatic, Ñ‚.к. файл не начинаетÑÑ Ñ PGTA - - - Failed to import copy of Snapmatic picture because the copy failed - Ðе получилоÑÑŒ имортировать копию картинки Snapmatic, потому что не удалоÑÑŒ его Ñкопировать - - - Failed to import copy of Savegame file because the copy failed - Ðе получилоÑÑŒ имортировать копию ÑохранениÑ, потому что не удалоÑÑŒ его Ñкопировать - - - Failed to import copy of Savegame file because no free Savegame slot left - Ðе получилоÑÑŒ имортировать копию ÑохранениÑ, потому что не оÑталоÑÑŒ Ñвободных под них Ñлотов - - - Export selected - ЭкÑпортировать выделенное - %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: @@ -1688,10 +1415,6 @@ Press 1 for Default View Export selected... Экпортировать выделенное... - - Initializing export... - Подготавливаю ÑÑкпорт... - Export failed with... @@ -1761,14 +1484,6 @@ Press 1 for Default View &Close &Закрыть - - Copy - Копировать - - - Close - Закрыть - Failed at %1 @@ -1782,10 +1497,6 @@ Press 1 for Default View Savegame Widget Виджет Ñохранений - - The Third Way (100%) - 00/00/00 00:00:00 - Третий путь (100%) - 00/00/00 00:00:00 - View savegame @@ -1802,10 +1513,6 @@ Press 1 for Default View Export ЭкÑпорт - - Copy - Копировать - Delete @@ -1942,18 +1649,6 @@ Press 1 for Default View Failed to export current Savegame Ðе удалоÑÑŒ ÑкÑпортировать текущее Ñохранение - - Overwrite %1 with current savegame? - ПерезапиÑать %1 текущим Ñохранением? - - - Failed to overwrite %1 with current savegame - Ðе удалоÑÑŒ перезапиÑать %1 текущим Ñохранением - - - Failed to copy current savegame - Ðе удалоÑÑŒ Ñкопировать текущее Ñохранение - No valid file is selected @@ -2281,23 +1976,11 @@ Press 1 for Default View Hide &In-game Ск&рыть в игре - - &Edit Properties... - &Изменить ÑвойÑтва... - &Export &ЭкÑпорт - - Export as &JPG picture... - ЭкÑп&ортировать как картинку JPG... - - - Export as &GTA Snapmatic... - ЭкÑ&портировать как GTA Snapmatic... - &View @@ -2364,10 +2047,6 @@ Press 1 for Default View UserInterface - - gta5sync - %1 - gta5sync - %1 - Select profile @@ -2424,56 +2103,32 @@ Press 1 for Default View Close &Profile Закрыть п&рофиль - - Ctrl+End - Ctrl+End - &Settings &ÐаÑтройки - - Ctrl+Del - Ctrl+Del - &Import files... &Импортировать файлы... - - Ctrl+I - Ctrl+I - Select &GTA V Folder... Выбрать &папку GTA V... - - Ctrl+G - Ctrl+G - Show In-gam&e Показывать в и&гре - - Shift+E - Shift+E - Hi&de In-game Скры&ть в игре - - Shift+D - Shift+D - Change &Players... @@ -2529,55 +2184,11 @@ Press 1 for Default View &Remove selected &Удалить выделенное - - File - Файл - - - Help - Помощь - - - About gta5sync - О программе gta5sync - - - Ctrl+A - Ctrl+A - - - Close - Закрыть - - - Ctrl+Q - Ctrl+Q - - - Ctrl+P - Ctrl+P - &Open File... &Открыть файл... - - Ctrl+O - Ctrl+O - - - Ctrl+S - Ctrl+S - - - Ctrl+E - Ctrl+E - - - Ctrl+D - Ctrl+D - @@ -2624,19 +2235,11 @@ Press 1 for Default View Can't open %1 because of not valid file format Ðе удалоÑÑŒ открыть %1 из-за неверного формата файла - - gta5sync - gta5sync - &Reload Пере&загрузить - - GTA V Folder not found! - Папка GTA V не была найдена! - From 42845e1cb57fe65678e2769d633184887ec9d673 Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 23 Jan 2018 03:05:32 +0100 Subject: [PATCH 048/359] update qm files --- res/gta5sync_de.qm | Bin 45246 -> 45230 bytes res/gta5sync_ru.qm | Bin 44369 -> 44353 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index c1f29a1869c5d2c9675fb1a91a7d3d1756ac571f..9df7e133496e2e6533c112910cf6d9ddf2ca34c0 100644 GIT binary patch delta 2943 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 A)&Kwi delta 2972 zcmX9=eOyiVAAjF-&$;KGbMEcRvZjR9OT6&oRcS9t= zWCG(p1lZfaM0bE&0A$<;>^%UBuK~yDfbrilTBgfbq5|GB0!G`(XxRg-Xa{!XgE@N< zFy9U~uM$vACOi&U$ACRVF+P3-wwVRCy#(7uXgF{W>Nh=R$c=CY{IoKi?%9E4FgzQ-v&6;BmDSHV9qeY|3&G!EJnhAw-L=!7?uP9 zPFInUQ4QFBhpcHXKwK4eAMYkz+Hf$&7|^%l%y1e-AHsi5O#!0paJ`z?>^O?P+Z0Xu zH-4_-fUF=q)z1g~EfnHCCz2~^h5XN+TQZhqD=d!K0B;^vtXe!oMEVr*%kzPfDTYmOd>jZh5ivjkl0 z6ptVO1ei=z{Hi?xteneOHy7apc&V6$PW{B(z(ic4fCb~3HNj-e_Esh#I|SHY%p`w) z1X!eF@?7bA({oHkn=-CXW@ElL~9w# z0+_m}J|LB48XG-;4F{RiZMH!AG^T}}M7nNZTF;SAp9e8lKGgxfR!mnC{jOpZbK~(| zK-a+haAhvwJjgsaWC9fTF#SJ=Qazt#hVEVmLOYqid?W-WgPmO{E`Bo~ZOl8v;I!REE~=0^HwK#-&>W2j(c_Ye-kmAC%dz z$QQMv^5Z1}`QxTM?J*yCKTO#kMe+sBQg(by=NH>5uV;|H>JsIj2kcN}#)@%{tUBaA zadKwgJV;k+16li|(ZISE*5hxoFi>PYscx|O8oO}n0bt`Wo7ppya(~Y5GG0VIy`9a= zB}ZQSgWVIJ5Bg)PeW?~_o@48r4w8o9G8V)Y?O{y~UTn(&cgnnn?MnXynCdEHnum;q z4s2J`4*GsQ+t)vqrp9IV=Vi^*0SnmY-JR69zpyX9@}R_XId_6) zbFV4`avQkt>utb?d%1*)mB3ORw@n~n47ogKa0vz8=;6wpD6NmexbiF_lyi)$91a0K zDB@}|!>AD-b9GEERd_a6=Sfb?4&lB$dY&qEBX>2dft;x2ZZXta0sm8Rp7dF{RyF2V z7r?4YHFox2z@7;ziw+|i1b(XEWz@3Enp7*9L>LgCp;{A4y0P0;XKD%URjP{*2^}7( zuKB%58SYc{Do961y=wT}*F-dk=ljSHw`^V}K_!a9Ki>y`VhC}?iUizgbSH=bR_{47>0Dgh|*7|B- zZvkI$AdQ$T<%_Qu1E00Xx={^3+P*)_#p$cc2}jFV>?UL71#w38Ffhhed^akHFii~Xr*oSQi$Ra5MqW1)mkb&K zRY~H~M^r2C){0T5w^0JO#TZaRPMla8K=&G7kkJxisbS=Sf0O)ROTE}MZVaug7h+2f z2ZWsvFWv2>@;@$KF6p3Gh)ZJU00pYPBVLV7r9uCXcN3OX!z+Qd9%t}?2}S}-6djwCrKOIAt^?fuNEbx zw+R)GounI)a&4(J_7oAZohi9*B?(7mNmKoYs0%8k@SCJ$a<#O>h%9jSm9pY*(|sON zo<|4`kO(QyuMbEXlrcY6%DYO0&8HVN3OYlURPLBXr=4ZYuaRm_Qrf%!lIku{x;4(y z*&UX&NE4*5c6>m+by#XiAQsiOgmi1wE$QOSej4mGQdcUmuF^=|`(tU5R7tmr>HXrP z{n7)|m9%&(q-V`{05L;Gn`at!pD(>hR5WXZ0ZJnxM`K)n6IeJ&W3ux#dc}&+SV*L= z&0>wkIWwxPO&Ul0-$|~$nn+tB#(%3xnM=6*nP$tG<+KJWiuQ=625U{Zf~BeViKg6- zXlTCG)aa(s5?QGEYLG=+=tW zTJ!rZv_ONj=KVAQJ{r*4ds3%cjMh5bEvEE>w4OPMwC00loEV{<;k^@x4tb>Y*0xfs z@6`J2qsAyXs$JAVE-W3=hL}*j`kjz5-dMZwHo1^9PFq+@X~o%Vk1r-y^G<8eoDT!M zzmzfhh_*d!3{8d>BUb7F!c&T}rSXP4MyDd$E~w zw`nE~IwM_s6Ui8<)!n$>Nb>mW9@w0qv@TaXQWeFH?gVN+Tf*`HO_d{ aQmZI^j8&M``oxsD)VM@_!xnqDUH=CQr*JU< diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index b728200f55bc53e448ead595affc15540935f41e..e463f0e84d09ed6e66c96048591be96f8fc39d3d 100644 GIT binary patch delta 2943 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.qm gta5sync_fr.qm gta5sync_ru.qm + gta5sync_zh_TW.qm diff --git a/res/tr_qt4.qrc b/res/tr_qt4.qrc index 098d37c..f7b285b 100644 --- a/res/tr_qt4.qrc +++ b/res/tr_qt4.qrc @@ -3,5 +3,6 @@ qt_de.qm qt_fr.qm qt_ru.qm + qt_zh_TW.qm diff --git a/res/tr_qt5.qrc b/res/tr_qt5.qrc index 4adfa51..e4970a9 100644 --- a/res/tr_qt5.qrc +++ b/res/tr_qt5.qrc @@ -4,5 +4,6 @@ qtbase_de.qm qtbase_fr.qm qtbase_ru.qm + qtbase_zh_TW.qm From bcd0e286188555d069c414c8c4d57775078d9bd0 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 25 Jan 2018 13:01:25 +0100 Subject: [PATCH 053/359] install qtbase_zh_TW.qm on Linux --- gta5view.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gta5view.pro b/gta5view.pro index da23a19..2ac8f5a 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -211,7 +211,7 @@ contains(DEFINES, GTA5SYNC_QCONF){ !contains(DEFINES, GTA5SYNC_QCONF_IN){ RESOURCES -= res/tr_g5p.qrc langfiles.path = $$GTA5SYNC_PREFIX/share/gta5view/translations - langfiles.files = $$PWD/res/gta5sync_en_US.qm $$PWD/res/gta5sync_de.qm $$PWD/res/gta5sync_fr.qm $$PWD/res/gta5sync_ru.qm $$PWD/res/qtbase_en_GB.qm + langfiles.files = $$PWD/res/gta5sync_en_US.qm $$PWD/res/gta5sync_de.qm $$PWD/res/gta5sync_fr.qm $$PWD/res/gta5sync_ru.qm $$PWD/res/qtbase_en_GB.qm $$PWD/res/qtbase_zh_TW.qm INSTALLS += langfiles } } From fc44406caf236c96dbbdc4cc1216aa59888a104a Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 26 Jan 2018 07:09:34 +0100 Subject: [PATCH 054/359] rc3 adaption --- config.h | 2 +- res/app.rc | 4 +- res/gta5sync_zh_TW.qm | Bin 34019 -> 33855 bytes res/gta5sync_zh_TW.ts | 176 +++++++++++++++++++++--------------------- 4 files changed, 92 insertions(+), 90 deletions(-) diff --git a/config.h b/config.h index 3f954e8..6649c57 100644 --- a/config.h +++ b/config.h @@ -49,7 +49,7 @@ #endif #ifndef GTA5SYNC_APPVER -#define GTA5SYNC_APPVER "1.5.0-rc2" +#define GTA5SYNC_APPVER "1.5.0-rc3" #endif #ifdef GTA5SYNC_BUILDTYPE_REL diff --git a/res/app.rc b/res/app.rc index 08762d7..eb8d280 100644 --- a/res/app.rc +++ b/res/app.rc @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view" - VALUE "FileVersion", "1.5.0-rc2" + VALUE "FileVersion", "1.5.0-rc3" VALUE "InternalName", "gta5view" VALUE "LegalCopyright", "Copyright © 2016-2018 Syping" VALUE "OriginalFilename", "gta5view.exe" VALUE "ProductName", "gta5view" - VALUE "ProductVersion", "1.5.0-rc2" + VALUE "ProductVersion", "1.5.0-rc3" END END END diff --git a/res/gta5sync_zh_TW.qm b/res/gta5sync_zh_TW.qm index 846f2168e3d8f9e452701578b8013a6109766ad2..813115bd56fba6a69cb9d47ba4d9d8692577fc85 100644 GIT binary patch delta 4410 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%0D2jcQv2Y zSw-aG!{-n@a&qLG#^GX3p@>!%A`Yt;F=Ye4*VY`NbK(zQl@Wz5=TBX~iK@89pI&4-c@K*;U z;4v!U|L;>MW3!0={&R$8d?w#3l;Cxn#os#%X~#VgBu3&DF3KZCxYUSWHd!ADw=Acj zV_gvb|G>A%Vk;4Cx>Rg)7?SI#N_ih1jeVpt+4(gd7fY3Hxfy=j#j5NCNNp3TvOCxx zNw!qw?)n7EZB=DDgP6QoRT2dZ%TX=V?@33m=2f+08xfNj)ml$1C?}~}BrLLfk%)N@ zR4w5kCOD~DweWnRMz#MTLQvwMI_|;X!V#)-QI>e;(^c1>!6EBr)%|ryE{}_<7jtl5 z*>bf_j~AZdeQKL~=nq+!)UE;O1D5G(z1wvd&URJ@)S~s8)`@7}qaGcy9A)FK4pARP z!x^d`+l;a)nyrpIj1Yx7tK)UZX8#TmC+=2PTtRpM5d0vou&!J@e zuwg}v=ujU|Hb>uBr(un+ZRl;ihX1w)o}JX#oW6yhP@$UeU?hi0o~F1861zlezQ~*b zX?Kbk@1;3Zgo8ehwEbs7iHLM<&|^rQ+N4c!Ey8cR|J7#Cd5ZH_v_%&`CrY2MoxKu- z6{oaKr=awZ8ttaO1eEpPwcF1_38!JH+O|Ihp+(kdkMD)V;hgqDR|lkP)ZTL1jo3Zb zKC*|WgZ68m{uL4?_6M7aZS5meUJ_2zc%!kF91QCsY};$qbuyFL6iZn&pFAj^O7S<_ z;9{0(s4;7Nd#fQxXDXO3`k{_V8W~bF5#` z4Usr}U~VaKFj$xubDE}pb)J~6Gyh8BW+)D~mFJJj&|;#@BI_MHzgSpuI^2F-jfV8fpr&T*RLq%v20M>+bwwa?bD-Vs((>$Ce|?SP{Xr&+x;ZauyqJNj{&I!}EO zth+nOn0KsqIP2uKT+P3*Z{|R+w}^P)yu_$Nd)L5n%{zvkj@0p$cUKKbE698g=N9?C z&uJEHES2N?D_?KH%IIm5#oP#-mHOS48tel(xi~f)(pwtT!#yG2fWZEYQI6qNoV82i zii8Yupz#z3AtsW8@%F@g-1kH9SQC5WYLa)7#mr5$YmBq)qe86V#cLUC4dtO0ue@q+ z2vxkTpUW z4|w~K!8!w%%>Qjo4%Swd*cm1n$1l(4XAI>uM%GwcmoZl2(0(gpJd14d%<;E$N}V$E zLpVK%eDNQ7g|DI5I4|dG!PI!cOM@}F|9Z#Q;yk3ooBV0tlIN!S1M2~XXLHT}3v*|~ z=n~`MSJ`c67*v7rYxc&R5k1e(uruEA7JHj^%hCc=o-s5CK}{LUXf2XlSC7y3ndrG@ z_p)wK|I56Mf1vJYwD4wMQ}O%}IQ-`dZ`|}&&R?FNCQ<7eZ{!|)EyKtKVDqNT4J#Lz z{a2477Mr~yWw^Hh8NB9J;|g%GUFaoP89mJoSzUo~+`>?J^I?7@zMB_fU;3=rZTLR_ za$oMtHMTNXurg-c%W-t&C?(21wb>Xf!>Y=mCRPhv;uXp7HF?$_tUr}M3bWmnBL&lj z^SPg`QvP1^W>wyTsZrIJwxg>8)jFfHaSv-(q;J8A)m1^pnoMoR_ob?4GpoFxa|6?7 zO_#!dS8}1TG}w?4ZE0xK4-kG|E7_LXiM@yPW5n@H>!xUox#|+5ZjH6C87`~NdZV`( wm-Z*sZb~&F;Uunx)Wz0F%aX &Close - 關閉 (&C) + 關閉(&C) @@ -46,7 +46,7 @@ Running with Qt %6<br/> TRANSLATOR Insert your name here and profile here in following scheme, First Translator,First Profile\nSecond Translator\nThird Translator,Second Profile - Ray,http://steamcommunity.com/profiles/76561198282701714 + Ray,https://steamcommunity.com/profiles/76561198282701714/ @@ -130,12 +130,12 @@ Pictures and Savegames &JPEG/PNG format - JPEG/PNG æ ¼å¼ (&J) + JPEG/PNG æ ¼å¼(&J) GTA &Snapmatic format - GTA Snapmatic æ ¼å¼ (&S) + GTA Snapmatic æ ¼å¼(&S) @@ -145,17 +145,17 @@ Pictures and Savegames Default &Size - é è¨­ (&S) + é è¨­(&S) &Desktop Size - 桌é¢å°ºå¯¸ (&D) + 桌é¢å°ºå¯¸(&D) &Custom Size - 自訂尺寸 (&C) + 自訂尺寸(&C) @@ -170,12 +170,12 @@ Pictures and Savegames &Export - 匯出 (&E) + 匯出(&E) &Close - 關閉 (&C) + 關閉(&C) @@ -199,17 +199,17 @@ Pictures and Savegames &Import... - 匯入 (&I)... + 匯入(&I)... &Overwrite - 修改 (&O) + 修改(&O) &Close - 關閉 (&C) + 關閉(&C) @@ -300,7 +300,7 @@ Pictures and Savegames &OK - OK (&O) + 確定(&O) @@ -310,7 +310,7 @@ Pictures and Savegames &Cancel - å–æ¶ˆ (&C) + å–æ¶ˆ(&C) @@ -364,12 +364,12 @@ When you want to use it as Avatar the image will be detached! &Save - ä¿å­˜ (&S) + ä¿å­˜(&S) &Close - 關閉 (&C) + 關閉(&C) @@ -387,27 +387,27 @@ When you want to use it as Avatar the image will be detached! &Close - 關閉 (&C) + 關閉(&C) &Apply - 套用 (&A) + 套用(&A) &Revert - 還原 (&R) + 還原(&R) &Set - 設置 (&S) + 設置(&S) &Done - å®Œæˆ (&D) + 完æˆ(&D) @@ -602,7 +602,7 @@ Y: %2 &Copy - 複製 (&C) + 複製(&C) @@ -618,7 +618,7 @@ Y: %2 &Send - é€å‡º (&S) + é€å‡º(&S) @@ -687,7 +687,7 @@ Y: %2 &OK OK, Cancel, Apply - OK (&O) + 確定(&O) @@ -698,7 +698,7 @@ Y: %2 &Cancel OK, Cancel, Apply - å–æ¶ˆ (&C) + å–æ¶ˆ(&C) @@ -790,7 +790,7 @@ Y: %2 &Manage - ç®¡ç† (&M) + 管ç†(&M) @@ -800,43 +800,43 @@ Y: %2 &Close - 關閉 (&C) + 關閉(&C) Export as &Picture... - 匯出æˆåœ–片 (&P)... + 匯出æˆåœ–片(&P)... Export as &Snapmatic... - åŒ¯å‡ºæˆ Snapmatic (&S)... + åŒ¯å‡ºæˆ Snapmatic(&S)... &Edit Properties... - 編輯屬性 (&E) ... + 編輯屬性(&E) ... &Overwrite Image... - 修改圖片 (&O)... + 修改圖片(&O)... Open &Map Viewer... - 開啟地圖檢視器 (&M)... + 開啟地圖檢視器(&M)... Open &JSON Editor... - 開啟 JSON 編輯器 (&J)... + 開啟 JSON 編輯器(&J)... @@ -1008,12 +1008,12 @@ Press 1 for Default View &Apply - 套用 (&A) + 套用(&A) &Cancel - å–æ¶ˆ (&C) + å–æ¶ˆ(&C) @@ -1067,7 +1067,7 @@ Press 1 for Default View &Import... - 匯入 (&I)... + 匯入(&I)... @@ -1077,7 +1077,7 @@ Press 1 for Default View &Close - 關閉 (&C) + 關閉(&C) @@ -1464,12 +1464,12 @@ Press 1 for Default View &Export - 匯出 (&E) + 匯出(&E) &Close - 關閉 (&C) + 關閉(&C) @@ -1487,7 +1487,7 @@ Press 1 for Default View SAVE %3 - %1<br>%2 - 存檔 %3 - %1 <br>%2 + 存檔 %3 - %1<br>%2 @@ -1523,37 +1523,37 @@ Press 1 for Default View &View - 檢視 (&V) + 檢視(&V) &Export - 匯出 (&E) + 匯出(&E) &Remove - 移除 (&R) + 移除(&R) &Select - 鏿“‡ (&S) + 鏿“‡(&S) &Deselect - å–æ¶ˆé¸æ“‡ (&D) + å–æ¶ˆé¸æ“‡(&D) Select &All - 鏿“‡å…¨éƒ¨ (&A) + 鏿“‡å…¨éƒ¨(&A) &Deselect All - å–æ¶ˆé¸æ“‡å…¨éƒ¨ (&D) + å–æ¶ˆé¸æ“‡å…¨éƒ¨(&D) @@ -1603,14 +1603,16 @@ Press 1 for Default View AUTOSAVE - %1 %2 - 自動存檔 - %1 %2 + 自動存檔 - %1 +%2 SAVE %3 - %1 %2 - 存檔 %3 - %1 %2 + 存檔 %3 - %1 +%2 @@ -1713,12 +1715,12 @@ Press 1 for Default View &Apply - 套用 (&A) + 套用(&A) &Cancel - å–æ¶ˆ (&C) + å–æ¶ˆ(&C) @@ -1939,52 +1941,52 @@ Press 1 for Default View Edi&t - 編輯 (&E) + 編輯(&E) Show &In-game - åœ¨éŠæˆ²ä¸­é¡¯ç¤º (&I) + åœ¨éŠæˆ²ä¸­é¡¯ç¤º(&I) Hide &In-game - åœ¨éŠæˆ²ä¸­éš±è— (&I) + åœ¨éŠæˆ²ä¸­éš±è—(&I) &Export - 匯出 (&E) + 匯出(&E) &View - 檢視 (&V) + 檢視(&V) &Remove - 移除 (&R) + 移除(&R) &Select - 鏿“‡ (&S) + 鏿“‡(&S) &Deselect - å–æ¶ˆé¸æ“‡ (&D) + å–æ¶ˆé¸æ“‡(&D) Select &All - 鏿“‡å…¨éƒ¨ (&A) + 鏿“‡å…¨éƒ¨(&A) &Deselect All - å–æ¶ˆé¸æ“‡å…¨éƒ¨ (&D) + å–æ¶ˆé¸æ“‡å…¨éƒ¨(&D) @@ -2027,7 +2029,7 @@ Press 1 for Default View &OK - OK (&O) + OK(&O) @@ -2056,7 +2058,7 @@ Press 1 for Default View &Reload - 釿–°è¼‰å…¥ (&R) + 釿–°è¼‰å…¥(&R) @@ -2067,49 +2069,49 @@ Press 1 for Default View &Close - 關閉 (&C) + 關閉(&C) &File - 檔案 (&F) + 檔案(&F) &Help - 幫助 (&H) + 幫助(&H) &Edit - 編輯 (&E) + 編輯(&E) &Profile - 設定檔 (&P) + 設定檔(&P) &Selection visibility - 鏿“‡å¯è¦‹åº¦ (&S) + 鏿“‡å¯è¦‹åº¦(&S) Selection &mass tools - 工具 (&M) + 工具(&M) &About %1 - 關於 %1 (&A) + 關於 %1(&A) &Exit - 離開 (&E) + 離開(&E) @@ -2119,48 +2121,48 @@ Press 1 for Default View Close &Profile - 關閉設定檔 (&P) + 關閉設定檔(&P) &Settings - 設定 (&S) + 設定(&S) Select &All - 鏿“‡å…¨éƒ¨ (&A) + 鏿“‡å…¨éƒ¨(&A) &Deselect All - å–æ¶ˆé¸æ“‡å…¨éƒ¨ (&D) + å–æ¶ˆé¸æ“‡å…¨éƒ¨(&D) &Export selected... - åŒ¯å‡ºæ‰€é¸ (&E)... + 匯出所é¸(&E)... &Remove selected - ç§»é™¤æ‰€é¸ (&R) + 移除所é¸(&R) &Import files... - 匯入檔案 (&I)... + 匯入檔案(&I)... &Open File... - 開啟檔案 (&O)... + 開啟檔案(&O)... Select &GTA V Folder... - 鏿“‡ GTA V 資料夾 (&G)... + 鏿“‡ GTA V 資料夾(&G)... @@ -2173,32 +2175,32 @@ Press 1 for Default View Show In-gam&e - åœ¨éŠæˆ²ä¸­é¡¯ç¤º (&E) + åœ¨éŠæˆ²ä¸­é¡¯ç¤º(&E) Hi&de In-game - åœ¨éŠæˆ²ä¸­éš±è— (&D) + åœ¨éŠæˆ²ä¸­éš±è—(&D) Change &Title... - 更改標題 (&T)... + 更改標題(&T)... Change &Crew... - 更改幫會 (&C)... + 更改幫會(&C)... &Qualify as Avatar - 符åˆå¤§é ­è²¼è³‡æ ¼ (&Q) + 符åˆå¤§é ­è²¼è³‡æ ¼(&Q) Change &Players... - 更改玩家 (&P)... + 更改玩家(&P)... From 4ce39ab7fd04c9c8ad5a5b07460174e2891afaa3 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 26 Jan 2018 07:48:59 +0100 Subject: [PATCH 055/359] important telemetry changes --- TelemetryClass.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/TelemetryClass.cpp b/TelemetryClass.cpp index abe526b..878f3f8 100644 --- a/TelemetryClass.cpp +++ b/TelemetryClass.cpp @@ -18,6 +18,7 @@ #include "TelemetryClassAuthenticator.h" #include "TelemetryClass.h" +#include "StandardPaths.h" #include "AppEnv.h" #include "config.h" #include @@ -57,7 +58,40 @@ void TelemetryClass::init() telemetryEnabled = true; // Always enable Telemetry for Developer Versions telemetryStateForced = true; #endif - telemetryClientID = settings.value("ClientID", QString()).toString(); + QString telemetryLegacyClientID = settings.value("ClientID", QString()).toString(); + if (telemetryLegacyClientID.isEmpty()) + { + telemetryClientID = QString::fromUtf8(QByteArray::fromBase64(settings.value("Identification", QByteArray()).toByteArray())); + } + else + { + QDir dir; + dir.mkpath(StandardPaths::dataLocation()); + dir.setPath(StandardPaths::dataLocation()); + QString dirPath = dir.absolutePath(); + QString portLoc = dirPath % "/.ported"; + bool telemetryPortedKey = settings.value("IsPorted", false).toBool(); + bool telemetryPortedFile = QFile::exists(portLoc); + if (!telemetryPortedKey && !telemetryPortedFile) + { + QFile portFile(portLoc); + if (portFile.open(QFile::WriteOnly)) + { + portFile.write("\n"); + portFile.flush(); + } + portFile.close(); + telemetryClientID = telemetryLegacyClientID; + settings.setValue("Identification", telemetryLegacyClientID.toUtf8().toBase64()); + settings.setValue("IsPorted", true); + settings.setValue("ClientID", QString()); + settings.remove("ClientID"); + } + else + { + telemetryClientID = QString(); + } + } telemetryPushAppConf = settings.value("PushAppConf", false).toBool(); settings.endGroup(); } @@ -75,6 +109,12 @@ bool TelemetryClass::canPush() bool TelemetryClass::canRegister() { + QDir dir; + dir.mkpath(StandardPaths::dataLocation()); + dir.setPath(StandardPaths::dataLocation()); + QString dirPath = dir.absolutePath(); + QString regLoc = dirPath % "/.reg"; + if (QFile::exists(regLoc)) return false; if (!isEnabled() || isRegistered() || !TelemetryClassAuthenticator::haveRegURL()) return false; return true; } @@ -483,12 +523,24 @@ void TelemetryClass::registerFinished(QNetworkReply *reply) QByteArray readedData = reply->readLine(); if (QString::fromUtf8(readedData).trimmed() == QString("Registration success!") && reply->canReadLine()) { + QDir dir; + dir.mkpath(StandardPaths::dataLocation()); + dir.setPath(StandardPaths::dataLocation()); + QString dirPath = dir.absolutePath(); + QString regLoc = dirPath % "/.reg"; readedData = reply->readLine(); telemetryClientID = QString::fromUtf8(readedData).trimmed(); QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); settings.beginGroup("Telemetry"); - settings.setValue("ClientID", telemetryClientID); + settings.setValue("Identification", telemetryClientID.toUtf8().toBase64()); settings.endGroup(); + QFile regFile(regLoc); + if (regFile.open(QFile::WriteOnly)) + { + regFile.write("\n"); + regFile.flush(); + } + regFile.close(); #ifdef GTA5SYNC_DEBUG qDebug() << "Telemetry" << QString("Registration success!"); #endif From 47a5074ed18d0fd96a3a679fe14b64d494390e7e Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 26 Jan 2018 07:53:24 +0100 Subject: [PATCH 056/359] 1.5.0-rc3 release --- TelemetryClass.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/TelemetryClass.cpp b/TelemetryClass.cpp index 878f3f8..245c1d5 100644 --- a/TelemetryClass.cpp +++ b/TelemetryClass.cpp @@ -59,7 +59,7 @@ void TelemetryClass::init() telemetryStateForced = true; #endif QString telemetryLegacyClientID = settings.value("ClientID", QString()).toString(); - if (telemetryLegacyClientID.isEmpty()) + if (telemetryLegacyClientID.isEmpty() || telemetryLegacyClientID == "v2+") { telemetryClientID = QString::fromUtf8(QByteArray::fromBase64(settings.value("Identification", QByteArray()).toByteArray())); } @@ -84,8 +84,7 @@ void TelemetryClass::init() telemetryClientID = telemetryLegacyClientID; settings.setValue("Identification", telemetryLegacyClientID.toUtf8().toBase64()); settings.setValue("IsPorted", true); - settings.setValue("ClientID", QString()); - settings.remove("ClientID"); + settings.setValue("ClientID", "v2+"); } else { From cff6af34cec881e10ee367696d2545926a9be424 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 26 Jan 2018 08:35:29 +0100 Subject: [PATCH 057/359] installs now zh_TW translation --- gta5view.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gta5view.pro b/gta5view.pro index 2ac8f5a..ca5b45a 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -211,7 +211,7 @@ contains(DEFINES, GTA5SYNC_QCONF){ !contains(DEFINES, GTA5SYNC_QCONF_IN){ RESOURCES -= res/tr_g5p.qrc langfiles.path = $$GTA5SYNC_PREFIX/share/gta5view/translations - langfiles.files = $$PWD/res/gta5sync_en_US.qm $$PWD/res/gta5sync_de.qm $$PWD/res/gta5sync_fr.qm $$PWD/res/gta5sync_ru.qm $$PWD/res/qtbase_en_GB.qm $$PWD/res/qtbase_zh_TW.qm + langfiles.files = $$PWD/res/gta5sync_en_US.qm $$PWD/res/gta5sync_de.qm $$PWD/res/gta5sync_fr.qm $$PWD/res/gta5sync_ru.qm $$PWD/res/gta5sync_zh_TW.qm $$PWD/res/qtbase_en_GB.qm $$PWD/res/qtbase_zh_TW.qm INSTALLS += langfiles } } From 023aa0223edfae14651a4d67e82bdb138d372f11 Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 4 Feb 2018 02:34:16 +0100 Subject: [PATCH 058/359] string update --- PictureDialog.cpp | 6 +- PictureDialog.ui | 2 +- SnapmaticWidget.cpp | 8 +- config.h | 2 +- lang/gta5sync_no.ts | 342 +++++++++++++++++++-------------------- res/app.rc | 4 +- res/gta5sync_de.qm | Bin 45242 -> 45248 bytes res/gta5sync_de.ts | 362 +++++++++++++++++++++--------------------- res/gta5sync_en_US.qm | Bin 23644 -> 23573 bytes res/gta5sync_en_US.ts | 344 +++++++++++++++++++-------------------- res/gta5sync_fr.qm | Bin 25649 -> 25649 bytes res/gta5sync_fr.ts | 348 ++++++++++++++++++++-------------------- res/gta5sync_ru.qm | Bin 44353 -> 44353 bytes res/gta5sync_ru.ts | 348 ++++++++++++++++++++-------------------- res/gta5sync_zh_TW.qm | Bin 33855 -> 33855 bytes res/gta5sync_zh_TW.ts | 44 ++--- 16 files changed, 913 insertions(+), 897 deletions(-) diff --git a/PictureDialog.cpp b/PictureDialog.cpp index 661718c..df89a44 100644 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -631,8 +631,7 @@ void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, { picAreaStr = picArea; } - - this->setWindowTitle(windowTitleStr.arg(picture->getPictureStr())); + setWindowTitle(windowTitleStr.arg(picTitl)); ui->labJSON->setText(jsonDrawString.arg(locX, locY, locZ, generatePlayersString(), generateCrewString(), picTitl, picAreaStr, created)); } else @@ -818,7 +817,7 @@ void PictureDialog::on_labPicture_mouseDoubleClicked(Qt::MouseButton button) #else pictureWidget->setWindowFlags(pictureWidget->windowFlags()^Qt::FramelessWindowHint^Qt::WindowStaysOnTopHint); #endif - pictureWidget->setWindowTitle(this->windowTitle()); + pictureWidget->setWindowTitle(windowTitle()); pictureWidget->setStyleSheet("QLabel#pictureLabel{background-color: black;}"); pictureWidget->setImage(snapmaticPicture, desktopRect); pictureWidget->setModal(true); @@ -993,6 +992,7 @@ void PictureDialog::updated() { picAreaStr = picArea; } + setWindowTitle(windowTitleStr.arg(picTitl)); ui->labJSON->setText(jsonDrawString.arg(locX, locY, locZ, generatePlayersString(), generateCrewString(), picTitl, picAreaStr, created)); } diff --git a/PictureDialog.ui b/PictureDialog.ui index dc10eeb..982c0eb 100644 --- a/PictureDialog.ui +++ b/PictureDialog.ui @@ -11,7 +11,7 @@ - %1 - Snapmatic Picture Viewer + Snapmatic Picture Viewer - %1 diff --git a/SnapmaticWidget.cpp b/SnapmaticWidget.cpp index d7fdcca..16cbc6d 100644 --- a/SnapmaticWidget.cpp +++ b/SnapmaticWidget.cpp @@ -154,7 +154,7 @@ void SnapmaticWidget::on_cmdDelete_clicked() bool SnapmaticWidget::deletePicture() { - int uchoice = QMessageBox::question(this, tr("Delete picture"), tr("Are you sure to delete %1 from your Snapmatic pictures?").arg("\""+smpic->getPictureStr()+"\""), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); + 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->deletePicFile()) @@ -163,7 +163,7 @@ bool SnapmaticWidget::deletePicture() } else { - QMessageBox::warning(this, tr("Delete picture"), tr("Failed at deleting %1 from your Snapmatic pictures").arg("\""+smpic->getPictureStr()+"\"")); + QMessageBox::warning(this, tr("Delete picture"), tr("Failed at deleting %1 from your Snapmatic pictures").arg("\""+smpic->getPictureTitle()+"\"")); } } return false; @@ -287,7 +287,7 @@ 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->getPictureStr()+"\"")); + 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()+"\"")); } } @@ -295,7 +295,7 @@ 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->getPictureStr()+"\"")); + 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()+"\"")); } } diff --git a/config.h b/config.h index 6649c57..ec58559 100644 --- a/config.h +++ b/config.h @@ -49,7 +49,7 @@ #endif #ifndef GTA5SYNC_APPVER -#define GTA5SYNC_APPVER "1.5.0-rc3" +#define GTA5SYNC_APPVER "1.5.0-rc4" #endif #ifdef GTA5SYNC_BUILDTYPE_REL diff --git a/lang/gta5sync_no.ts b/lang/gta5sync_no.ts index 9fcbaa7..eab7bef 100644 --- a/lang/gta5sync_no.ts +++ b/lang/gta5sync_no.ts @@ -310,14 +310,14 @@ Pictures and Savegames - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! @@ -353,12 +353,12 @@ When you want to use it as Avatar the image will be detached! - + &Save - + &Close @@ -758,7 +758,7 @@ Y: %2 PictureDialog - %1 - Snapmatic Picture Viewer + Snapmatic Picture Viewer - %1 @@ -791,31 +791,31 @@ Y: %2 - + Export as &Picture... - + Export as &Snapmatic... - + &Overwrite Image... - + &Edit Properties... - + Open &Map Viewer... @@ -828,36 +828,36 @@ Arrow Keys - Navigate - + Snapmatic Picture Viewer - + Failed at %1 - - + + No Crew - + Unknown Location - - + + No Players - + Avatar Preview Mode Press 1 for Default View @@ -967,7 +967,7 @@ Press 1 for Default View - + Open &JSON Editor... @@ -990,12 +990,12 @@ Press 1 for Default View - + &Apply - + &Cancel @@ -1076,15 +1076,15 @@ Press 1 for Default View - + Loading... - - + + Import... @@ -1095,252 +1095,252 @@ Press 1 for Default View - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import - - + + GTA V Export (*.g5e) - - + + Savegames files (SGTA*) - - + + Snapmatic pictures (PGTA*) - + Importable files (%1) - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - + All image files (%1) - - + + All files (**) - - - + + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - - + + 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 - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - - - - - + + + + + Export selected... - + Initialising export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - - + + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - - + + Qualify as Avatar - - - - - - + + + + + + No Snapmatic pictures are selected - - - - + + + + Patch selected... - - - - - - - - + + + + + + + + Patch file %1 of %2 files - - - - - - + + + + + + %1 failed with... %2 @@ -1348,66 +1348,66 @@ Press 1 for Default View - + Failed to remove all selected Snapmatic pictures and/or Savegame files - + Qualify %1 failed with... - - + + Change Players... - + Change Players %1 failed with... - - - + + + Change Crew... - + Failed to enter a valid Snapmatic Crew ID - + Change Crew %1 failed with... - - - + + + Change Title... - + Failed to enter a valid Snapmatic title - + Change Title %1 failed with... - + All profile files (*.g5e SGTA* PGTA*) @@ -1434,7 +1434,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer @@ -1454,7 +1454,7 @@ Press 1 for Default View - + Failed at %1 @@ -1503,37 +1503,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1631,7 +1631,7 @@ Press 1 for Default View - + Snapmatic Properties @@ -1766,32 +1766,32 @@ Press 1 for Default View - + Patching of Snapmatic Properties failed because of I/O Error - + Snapmatic Title - + New Snapmatic title: - + Snapmatic Crew - + New Snapmatic crew: @@ -1919,52 +1919,52 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -2079,7 +2079,7 @@ Press 1 for Default View - + &About %1 @@ -2135,15 +2135,15 @@ Press 1 for Default View - + Select &GTA V Folder... - - + + Select GTA V Folder... @@ -2184,39 +2184,39 @@ Press 1 for Default View - - + + Select Profile - + Open File... - - - - + + + + Open File - + Can't open %1 because of not valid file format - - + + Show In-game - - + + Hide In-game diff --git a/res/app.rc b/res/app.rc index eb8d280..04da6bf 100644 --- a/res/app.rc +++ b/res/app.rc @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view" - VALUE "FileVersion", "1.5.0-rc3" + VALUE "FileVersion", "1.5.0-rc4" VALUE "InternalName", "gta5view" VALUE "LegalCopyright", "Copyright © 2016-2018 Syping" VALUE "OriginalFilename", "gta5view.exe" VALUE "ProductName", "gta5view" - VALUE "ProductVersion", "1.5.0-rc3" + VALUE "ProductVersion", "1.5.0-rc4" END END END diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index 89f216f7f5ed0fa0334791f78ae117fe3e3f73a1..e346dc2477a265e806769d0beca1c0e6f188b964 100644 GIT binary patch delta 1275 zcmZ9KYfMvT7{~wb>E-mCB3i~)8!Z);mP@$`6m$+1(HTL6sasSSYPe<81q5cYshNaq zi-N#oDNGn3sHkW%+01m-OB_MJtb7o&C5{CXVvJ+PZ5U^m+ryeHnJ0PAFXwsx=eb`V zm#&XXO%=k>>~@(RLi?>2*#8__KeKDB`Rfde6Na9Az-~fh(m^1*D8ROUnkCG6cMv@z z{oI7;kqG8lME{b&979ao5MVihn2yyzSSMn9>wpzr#Q2ASs?q=(C$Ky%3n)5@tl~RB zM?2LBo0uez$QAo(Lbwt~g?i5kw0|P3rxyZ?dqv5XDIjiKR1`J>-W0KC$sfQ+R>Ma2_y+;jNdx+~Bt-tmtP?H#7 zvy+Cj4$EPkcE-9(uM6$>vi}DGuDVA$-CFUOa&$IvhTJ-v5~;Ti1@p+>B#&-ohB{Tv z(chK-W!V=2?yZtTwWoldYW?IOqPfg0YEAKns z3$(PzOUJvaE+b-C{bH|1ER{N?&zfh36#KJ9K=V~{%Vx`JCG|7jqFsI^b>tE- zzf)Q3ZR9v6>XdC_4*BG;5Z6=Xa2(ICxkBl?!8P=NCS|*tdPRA>^*7c&Bdfs?o~I@x zb7miISC^G^FoOg1BnQ}YgNh9f(;oGm2V74^qPpYaeju%YIt{tv9!(nJO^a3kDULn2 zLA`6+%!}7cu}ZFprhSUdRA@ZBhO@7H6kua1ol_huPa69!j011l8=i9DAtEyKdfp9@tily)$;c qFP~AR*=6?V%uz^ni delta 1244 zcmZXSe@xVM7{}kA@Ar=HuQNIW&r6RZ?e08&-~D6EFp=mRRbj zR{VZE;1Uw$Fe}!UEHoS8KbvDu=-;r`CtvKe_(+?zQi;=lML(`~5r@ z$ArEyp`nBcjirgkpP)Oh0}kGWF2H&GdgG^S%y!5pvH`mhOWcQn%)B65PtqJ_+I$63 zv#IZDh#IkRb|LE51kUS-ZXE*5U5IX52Sl_Zx<3O*RS_K+2KMa=vhF5QlG1^^qew6K z8fYV`WL7poUY5nCXq+Xw0!;lr2JjtXmJb#IPj<4xtusK}7%R!G16tx)`O<0NfQ41H z69WmoEwG9&7na0LLsns8PH)6Mt*AoLI;GKmp1^hlfsXu!T|3m)ryXc zB5~g54}evZqPe0BNLVZ`tK|Kgw~IO5ZvjuO6pQyi!M*i}CH^x&;&)>8KU|g^E!ID) zaCvcJ@3Kw6x*WPM+J#jPvgs1pH0{t?jpuaTF^}-rx`J%9 z(~!<#enYRDjpm2w!%nyG_a}l(%ObsgJ-bC4^;YJmQoU7K6k-{Ags*HZdG)EG()e7! zeMnMgDuA?6`ay3}Jko+2e5R$}(tW*&)lhiIajyNC zy!Orsp!F*`^K<~HpHEjqUULpA5&Or1C3%Yduf;&)ImP*M0ne@r(w3{Z6S(Q?&Qg_R zVj6iRt4mc%3a0@57s|dr-N1{(%9{hDz~f7lw>>w2q++Eej<2(^Q1K6PaUFMQT(YZ) z@yhMz?(p&NP`K=1mncOxDRJt`!ZzTYkfza2W*|%g;H)*r8$(+D(~GS&T&_86UOKj-+`Z7Mm+FHj*;3=)ALbzhiNhGOKSi0XaeRMlMbzu1Zvk5Y_sR3H+CRPS9toh_>$%DUIm^w9t8 jOBY(*ERLpH&7n59c;!ndz%Krkk=2*;-|U`xpUd - + 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 @@ -365,12 +365,12 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! Snapmatic JSON Editor - + &Save &Speichern - + &Close S&chließen @@ -770,9 +770,13 @@ Y: %2 PictureDialog - %1 - Snapmatic Picture Viewer - %1 - Snapmatic Bildansicht + %1 - Snapmatic Bildansicht + + + + Snapmatic Picture Viewer - %1 + Snapmatic Bildansicht - %1 @@ -813,31 +817,31 @@ Y: %2 - + 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... @@ -852,38 +856,38 @@ 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 @@ -986,7 +990,7 @@ Drücke 1 für Standardmodus - + Open &JSON Editor... &JSON Editor öffnen... @@ -1009,12 +1013,12 @@ Drücke 1 für Standardmodus Ausgewählte Spieler: - + &Apply &Übernehmen - + &Cancel Abbre&chen @@ -1084,25 +1088,25 @@ Drücke 1 für Standardmodus S&chließen - + Loading... Lade... - + Snapmatic Loader Snapmatic Lader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>Folgende Snapmatic Bilder wurden repariert</h4>%1 - - + + Import... Importieren... @@ -1113,63 +1117,63 @@ Drücke 1 für Standardmodus - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import Importieren - - + + Savegames files (SGTA*) Spielstanddateien (SGTA*) - - + + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) - + Importable files (%1) Importfähige Dateien (%1) - + All image files (%1) Alle Bilddateien (%1) - - + + All files (**) Alle Dateien (**) - - + + Import file %1 of %2 files Importiere Datei %1 von %2 Dateien - + Import failed with... %1 @@ -1178,60 +1182,60 @@ Drücke 1 für Standardmodus %1 - - + + 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 - + Can't import %1 because file format can't be detected Kann %1 nicht importieren weil das Dateiformat nicht erkannt werden kann - + Initialising export... Initialisiere Export... - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA oder endet mit .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Fehlgeschlagen beim Importieren vom Snapmatic Bild, dieses Bild ist bereits im Spiel - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exportiere Snapmatic Bilder%2<br><br>JPG Bilder machen es möglich sie mit ein Bildansicht Programm zu öffnen<br>Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren<br><br>Exportieren als: - - - + + + No valid file is selected Keine gültige Datei wurde ausgewählt @@ -1241,86 +1245,86 @@ Drücke 1 für Standardmodus Aktivierte Bilder: %1 von %2 - + Failed to import the Snapmatic picture, can't copy the file into profile Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren - + Failed to import the Savegame, can't copy the file into profile Fehlgeschlagen beim Importieren vom Spielstand, kann Spielstanddatei nicht ins Profil kopieren - + Failed to import the Savegame, no Savegame slot is left Fehlgeschlagen beim Importieren vom Spielstand, kein Spielstandslot mehr frei - - + + JPG pictures and GTA Snapmatic JPG Bilder und GTA Snapmatic - - + + JPG pictures only Nur JPG Bilder - - + + GTA Snapmatic only Nur GTA Snapmatic - - - - + + + + Patch selected... Auswahl patchen... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Patche Datei %1 von %2 Dateien - - + + Qualify as Avatar Als Avatar qualifizieren - - - - - - + + + + + + No Snapmatic pictures are selected Keine Snapmatic Bilder sind ausgewählt - + Failed to remove all selected Snapmatic pictures and/or Savegame files Fehlgeschlagen beim Entfernen von allen augewählten Snapmatic Bildern und/oder Spielstanddateien - - - - - - + + + + + + %1 failed with... %2 @@ -1330,88 +1334,88 @@ Drücke 1 für Standardmodus %2 - + Qualify %1 failed with... Qualifizieren - - + + Change Players... Spieler ändern... - + Change Players %1 failed with... Spieler ändern - - - + + + Change Crew... Crew ändern... - + Failed to enter a valid Snapmatic Crew ID Fehlgeschlagen beim Eingeben von einer gültigen Crew ID - + Change Crew %1 failed with... Crew ändern - - - + + + Change Title... Titel ändern... - + Failed to enter a valid Snapmatic title Fehlgeschlagen beim Eingeben eines gültigen Snapmatic Titel - + Change Title %1 failed with... Titel ändern - - + + No Snapmatic pictures or Savegames files are selected Keine Snapmatic Bilder oder Spielstände sind ausgewählt - - - + + + Remove selected Auswahl löschen - + You really want remove the selected Snapmatic picutres and Savegame files? Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen? - - - - - + + + + + Export selected... Auswahl exportieren... - + Export failed with... %1 @@ -1425,13 +1429,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) @@ -1458,7 +1462,7 @@ Drücke 1 für Standardmodus SavegameDialog - + Savegame Viewer Spielstandanzeiger @@ -1478,7 +1482,7 @@ Drücke 1 für Standardmodus S&chließen - + Failed at %1 Fehlgeschlagen bei %1 @@ -1565,32 +1569,32 @@ Drücke 1 für Standardmodus Fehlgeschlagen beim Löschen %1 von deinen Spielständen - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All &Alles auswählen - + &Deselect All Alles a&bwählen @@ -1605,7 +1609,7 @@ Drücke 1 für Standardmodus Spielstand kopieren - + &Export &Exportieren @@ -1657,7 +1661,7 @@ Drücke 1 für Standardmodus - + Snapmatic Properties @@ -1699,7 +1703,7 @@ Drücke 1 für Standardmodus Meme - + Snapmatic Title Snapmatic Titel @@ -1798,26 +1802,26 @@ Drücke 1 für Standardmodus - + 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: @@ -1838,38 +1842,38 @@ Drücke 1 für Standardmodus header not exists - Header existiert nicht + Header nicht existiert header is malformed - Header ist fehlerhaft + Header fehlerhaft ist picture not exists (%1) - Bild existiert nicht (%1) + Bild nicht existiert (%1) JSON not exists (%1) - JSON existiert nicht (%1) + JSON nicht existiert (%1) title not exists (%1) - Titel existiert nicht (%1) + Titel nicht existiert (%1) description not exists (%1) - Beschreibung existiert nicht (%1) + Beschreibung nicht existiert (%1) reading file %1 because of %2 Example for %2: JSON is malformed error - Datei lesen %1 wegen %2 + Datei lesen von %1 weil %2 @@ -1945,52 +1949,52 @@ Drücke 1 für Standardmodus Fehlgeschlagen beim Anzeigen von %1 im Spiel von deinen Snapmatic Bildern - + Edi&t Bearbei&ten - + &Export &Exportieren - + Show &In-game &Im Spiel anzeigen - + Hide &In-game &Im Spiel ausblenden - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All Alles &auswählen - + &Deselect All Alles a&bwählen @@ -2133,7 +2137,7 @@ Drücke 1 für Standardmodus - + Select &GTA V Folder... Wähle &GTA V Ordner... @@ -2184,21 +2188,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... @@ -2211,20 +2215,20 @@ 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 @@ -2234,15 +2238,15 @@ Drücke 1 für Standardmodus &Neuladen - - + + Show In-game Im Spiel anzeigen - - + + Hide In-game Im Spiel ausblenden diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm index 5cbde30112677fbe15aa466b740086aa7d7d756d..0554a5fb1bcf8ed1293b488e1324ad1f26fffa24 100644 GIT binary patch delta 2471 zcmX9i3_NBqEQ%vkW41p7|bZj zF)$s1QE&sJ5fT*@Q6mPFqZ|x~8fJ!35{-;<6xTrlndn@me%({c``&%`zW2V{jZAqX zQ)% zVu_Cf+TAApcofn26~uR5AqwtSFuskn2Nojk1bO;@N;GAPf(fqV)eudjUq@b}`4V1| z*JwU-q9b{YCQK|Kug8ACD)QddN@TT}yf4HPP1;1>qX|p_3dWqG&>$RSD5B`BTSRl~ zDE2epOe4hw-X&t!Q(Wd`#Me?{E#AjIru1W7L>?uS{sZ!iw;^-d0wQ}CDlDuf%Wg(A zSJ94RH=w~jI<#sGk#Rho8OcZLA?m0Gh46UlyM?3F3H0zFkLTm`JbNCIn}rc?`w#{G zRlyim!Gz0<(>I`CGsLWZXAmj3F?lopLlhFuY^+>HB>u_eCvE*seW88e8SqZKp`vqwIh1s`k`bZb?R4au>bW_`^* z?9sq-qN%wG8WR*usATIh`-pF&xUArWQ9uj z`X{2eE2?oAj4kErYL}wr{@{)kr4jLM+<9pQ z#CXXy?F+!H_kD51~Bw{ku4spY1!98lHRx3 zH13sV`nN#WbCz=6#cZv4|1Q3&I~1H+smb~KJq(hQrgUFE{$@4h9p#|xp{Z$x>4~p2 zCla6Fv=q(h8z^nY6-`SEy3N+0`6X!~25h;e@2nZjwrQT!&Lm1+t$E!5`@=uc@-eVE zewEg#)d0zsYa>Q#ux$8e+Q=6NuzljRbB}Zq#oW=ZKTr+ryRpzJi+qI3p#pn}3+thLcTIXq78j(Qtp|}rH5zq#Q>uH}N--kc@`7Dprf0U_}ESt9F=LTtrO z)O}e_M2osiS;EerTVMPV%51t~di+c|Gxx%{DKsH+VV8|Z}$Wz#Q5wxs&gzYiC zXt*k &00IYLeIJh;LLb-r(drYy9DLod@0Li_zU&?DrsaD7PvI&rtqZ7>l{7#5zU zzkmVrMW!Em1g#aBN26FN%65~{gU`iDNl0kFU-T%9$C&qsegRKF?4lUFx)NBXV7yVm z`R|FL)gwewt~e)i0kB$3>PKAgB5}cke40QywV3wQ3Jg2MMGqjLORt#Oun861vJ7aP z&2G=cUGX?K=$HZ=zRBX|6;y;d}?y>FS{dx#LW3t#M<&h1&)gbn_ zLpi^nC1#Y@j9r#0t;>vJDZL9an3hOIR*=uWK-#kI7VO?6l^9bXUy)Q2(+6LEQ7~qi zWk73ho+?#(Z$Xr(U`(-8Q-2pxkEOFk&RFfWQqy`Al^h5}bh28y9M+F!DwR4nAou)o z=|)u+nlVedS&kbq;;QuOd=HAuR?voY-0ob=T%OQt!0MkWPw2;tMU2Rv zCd`s`qwMuBoEqsbn~JekbR!DdS<9i}TjAjyIb6oXQ>ih%92ZCZ!8fTGjUj#Qk0@{4HGSR3VTfzgUuuLXhDiPOj?-{e*58|a0`b23=gufY g?{G~&xCgq-ng$lh*G?u#vmGtpIY=ivJaz{D50?hBh5!Hn delta 2501 zcmX9Y%v%531!zvF~P~L(FxQi>xLje&A@>Dbs166|$tf_+ah56FpVl}~6 zjC6|_gZRRTii#+RB@n^zAs>cCBqUK{s+A_x8l#pNO^Q8y^Viv(`Tg!a_ndq0lr=H~ zjm$o0CZyCQoJlH8H?r|jrA40B&BQfvL@^?9cHrEr#P#?Q>GFu{&m?l*t)RtBe3S*} z-X}f@=rTZjZ9LKVWyIS%h@t`%Owp3|=mOlkKmq2z5c%gRn379@4GBd0H553SFV#$e zqxr0<*%UaMFtwfn{}Tcnpr8ZoL=Iais5zO)tC@mE6NGP2F!32hM<9@~jS}+uh|(U? zocDm!H&RmAJt8)rl9u}5{uxR=gXc*>lym+jkzW_(Tt%MoPGns;pUB`z#l^?Tc90RR z1GM{mFH!VeI}4g?d0 zwJVr7TftNn<9-ShoSri)Umr%w9n6O5|Aj_Yrl?{Gk%tdc8a0Dx(p9Fk@Sj9BUv{kZ zL&p9bxe^vJw^9m-LM}6p9z7rucQZf97l=&9Snnnqk$XLx5j+H0eqk4NAoiTY?5YLO zId(Fe|6V3hx|LmDd5UPtDt3h2_KvloWv=}MxC?OvnK0m z_H~h9VCj#VC(BGL^Gzc4Q;+ek%!n8ZVIG3%eHfUqhS_H?ChL zeDWm@s8!>xkAU}x%5@_SjDMlBY#Js?2~lO$>>!%puX?M{8wpmb)>PFIO?=;WNM*>* zRb5*ObprOQ+CRkUK&z^|80v8|RnHH@eBCZiEwv+R9XII&Zfml*fOU>&o(G)eS2*I| z$%W6xy{LIyM#N#zY2>!{#~@3nP3Ao3U*T$kPe6oX1?Skgnlp>ha{uGbZ(B&jcXCbA zGR%mXYdIVWJjdA!{|0WC6pWM=Ov>c!joa{kk*$a`SoiVV=qb}?-nqIQTvsdT-NT0- z`-tdwMSM5N&FOdO5q6DD(|mH19e~GYG-lf;HmsM)>TfpgC8;8SiSGxsycm3N#b$q95Fz zXaat_Ml|kc&D66%?-#ZYc+c7MG^_97t-4#m$#*nszq*fsTBO-`coR;unzHUP%=QXR zRV&O-vuG}){)lKcO?@v)G^=foc!RY=^W&N6L>VVEBMmS;wn@t;!rbKJTK9G%gsRle zepv-ue$vK0J&M*T(WX_~F)|ai`A3gq#KvgXw&tOShqQmb2f_S;v_%CF%HO0d_WlM! zirPlgPBcf7wxz8X0@rEV8WCT$S=;_OY_FLccK__acPH zIZr`gugDC6aKtH*c{qx9MA^j$1VTiwbTc-e;fUy0oDAb!#gI@KG;>6pxv~P-qhRtz z1?Qc#oz)nu<>LJBVXsatE`00&<7DxT@1dWUySTJr3wE26xPm}`T!nZb8Bv6V3XV-u zaFR*EsISGwi7qh4QEchw(doY8_40P;oFH~RMEr~a@kSn+b4r`|MI3{DJ|Nl)FA*)^ zU6db|It9aq6--<&+D}4o`MlWgnS~B{A%1-t^*eTn59(mRw58&pv;oEri$h(|Z<>e1 zj1r#qm90$cX}vDx+%!YYkELx6P|;8*ZC}%e)6LQzOD0rollCMI;=QMWiHD>;H$X>U zE|vba6=ilvWrj%f*Gj1(Xgkg&E0}m)s;aw(c?^=SZ1aFT|CUl6@oS%Q{ZluhSz~lT0nbooxh~fix~eL58&ZKrN8P)ZmtZTBZfATM z+3EyG?~im93_j2uam=fV$ucJ>B4#=0Av(aEB3Obr%h0zCCTqIdfv$eT3!n5WPq`W<~vKmj)A@Ab>p4TGLVU(j0zeLD1i+6y{- zwEjQ`^zh8qAA6OBg%YMe^99NqcSB$EP7Lln*I#RdD8{Y&p6+@WnWn$*gRj!80{s&Y sl%aRMp&$MjxK|76y+xBvhE diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index be01df9..bf2fe0f 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -310,14 +310,14 @@ Pictures and Savegames - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! @@ -353,12 +353,12 @@ When you want to use it as Avatar the image will be detached! - + &Save - + &Close @@ -758,8 +758,8 @@ Y: %2 PictureDialog - %1 - Snapmatic Picture Viewer - + Snapmatic Picture Viewer - %1 + @@ -791,31 +791,31 @@ Y: %2 - + Export as &Picture... - + Export as &Snapmatic... - + &Overwrite Image... - + &Edit Properties... - + Open &Map Viewer... @@ -828,36 +828,36 @@ Arrow Keys - Navigate - + Snapmatic Picture Viewer - + Failed at %1 - - + + No Players - - + + No Crew - + Unknown Location - + Avatar Preview Mode Press 1 for Default View @@ -967,7 +967,7 @@ Press 1 for Default View - + Open &JSON Editor... @@ -990,12 +990,12 @@ Press 1 for Default View - + &Apply - + &Cancel @@ -1076,25 +1076,25 @@ Press 1 for Default View - + Loading... - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - - + + Import... @@ -1105,242 +1105,242 @@ Press 1 for Default View - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import - + Importable files (%1) - - + + GTA V Export (*.g5e) - - + + Savegames files (SGTA*) - - + + Snapmatic pictures (PGTA*) - + All image files (%1) - - + + All files (**) - - - + + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - - + + 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 - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - - - - - + + + + + Export selected... - + Initialising export... Initializing export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - - + + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - - + + Qualify as Avatar - - - - - - + + + + + + No Snapmatic pictures are selected - - - - + + + + Patch selected... - - - - - - - - + + + + + + + + Patch file %1 of %2 files - - - - - - + + + + + + %1 failed with... %2 @@ -1348,66 +1348,66 @@ Press 1 for Default View - + Failed to remove all selected Snapmatic pictures and/or Savegame files - + Qualify %1 failed with... - - + + Change Players... - + Change Players %1 failed with... - - - + + + Change Crew... - + Failed to enter a valid Snapmatic Crew ID - + Change Crew %1 failed with... - - - + + + Change Title... - + Failed to enter a valid Snapmatic title - + Change Title %1 failed with... - + All profile files (*.g5e SGTA* PGTA*) @@ -1434,7 +1434,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer @@ -1454,7 +1454,7 @@ Press 1 for Default View - + Failed at %1 @@ -1503,37 +1503,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1631,7 +1631,7 @@ Press 1 for Default View - + Snapmatic Properties @@ -1766,32 +1766,32 @@ Press 1 for Default View - + Patching of Snapmatic Properties failed because of I/O Error - + Snapmatic Title - + New Snapmatic title: - + Snapmatic Crew - + New Snapmatic crew: @@ -1919,52 +1919,52 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -2079,7 +2079,7 @@ Press 1 for Default View - + &About %1 @@ -2135,15 +2135,15 @@ Press 1 for Default View - + Select &GTA V Folder... - - + + Select GTA V Folder... @@ -2184,39 +2184,39 @@ Press 1 for Default View - - + + Select Profile - + Open File... - - - - + + + + Open File - + Can't open %1 because of not valid file format - - + + Show In-game - - + + Hide In-game diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index c7b8fc44e7e29132df4aab251cce792a5c9106fc..5a1b63a2b1e3fb39bd496a97720f0259e892c277 100644 GIT binary patch delta 209 zcmV;?051Qr$N{m)0k8xC0br8_0ZsxQ&68CDPXSDmr2!uSB$LGfHUby5ll=ic0wC9u zJpwlYR+DuC9|35Sl>%o06qEe|MgkxClSKnr2MYCc001C-ldS_E0XCD(11VR0RaM&4F?$qG!O9r03vX+B?k@|lgbDqv)dn-3IRrw zksB$KEj$)0EdU?@B>*u9000001^@s69aC;$aBX39X=5NzX=8MCa%CV^X=Qh1av&{} LQ6(C)b1J?$lRZ4z delta 231 zcmV%o0nUnnjMgkyylSKnr4+rHE000-Y2MYCc001EYlcfV60lSmM z11=&We+Q7CbpQYp1_zbSl>h)%(g&o$ZU6vQj|Z_!?f?K7aFZ1T?*ZGB1qB}g`m-ek z-vJqi4Y$2n001!X4Z~R#001aP4g?Fu001gWvn2-(7z;)KB>*u1AOI}@Ad`_BDU&Tc h6O(XS2?iY{F(54 - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! @@ -364,12 +364,12 @@ When you want to use it as Avatar the image will be detached! - + &Save - + &Close @@ -768,9 +768,13 @@ Y: %2 PictureDialog - %1 - Snapmatic Picture Viewer - %1 - Visionneuse de photo Snapmatic + %1 - Visionneuse de photo Snapmatic + + + + Snapmatic Picture Viewer - %1 + Visionneuse de photo Snapmatic - %1 @@ -891,31 +895,31 @@ Y: %2 - + Export as &Picture... - + Export as &Snapmatic... - + &Overwrite Image... - + &Edit Properties... Modifier les &propriétés... - + Open &Map Viewer... @@ -930,38 +934,38 @@ 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 @@ -984,7 +988,7 @@ Appuyer sur 1 pour le mode par défaut - + Open &JSON Editor... @@ -1007,12 +1011,12 @@ Appuyer sur 1 pour le mode par défaut - + &Apply A&ppliquer - + &Cancel @@ -1093,25 +1097,25 @@ Appuyer sur 1 pour le mode par défaut Photos activées : %1 sur %2 - + Loading... Chargement... - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - - + + Import... Importer... @@ -1122,58 +1126,58 @@ Appuyer sur 1 pour le mode par défaut - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import Importer - - + + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - - + + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) - + All image files (%1) - - + + All files (**) Tous les fichiers (**) - - + + Import file %1 of %2 files Importation du fichier %1 sur %2 - + Import failed with... %1 @@ -1182,153 +1186,153 @@ Appuyer sur 1 pour le mode par défaut %1 - - - + + + No valid file is selected Fichier invalide - + Importable files (%1) - - + + 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 - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*, *.g5e) - + Failed to import the Snapmatic picture, the picture is already in the game Impossible d'importer la photo Snapmatic, un fichier du même nom existe déjà - + Failed to import the Snapmatic picture, can't copy the file into profile Impossible d'importer la photo Snapmatic, impossible de copier le fichier dans le profil - + Failed to import the Savegame, can't copy the file into profile Impossible d'importer la sauvegarde, impossible de copier le fichier dans le profil - + Failed to import the Savegame, no Savegame slot is left Impossible d'importer la sauvegarde, aucun emplacement libre - - + + JPG pictures and GTA Snapmatic Images JPG et GTA Snapmatic - - + + JPG pictures only Images JPG seulement - - + + GTA Snapmatic only GTA Snapmatic seulement - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exporter les photos Snapmatic%2<br><br>Les fichiers JPG permettent d'ouvrir les photos avec une visionneuse d'images<br>Les GTA Snapmatic permettent d'importer les photos dans le jeu<br><br>Exporter comme : - - - - - + + + + + Export selected... Exporter la sélection... - + Initialising export... - - + + Qualify as Avatar - - - - - - + + + + + + No Snapmatic pictures are selected - - - - + + + + Patch selected... - - - - - - - - + + + + + + + + Patch file %1 of %2 files - - - - - - + + + + + + %1 failed with... %2 @@ -1336,66 +1340,66 @@ Appuyer sur 1 pour le mode par défaut - + Failed to remove all selected Snapmatic pictures and/or Savegame files - + Qualify %1 failed with... - - + + Change Players... - + Change Players %1 failed with... - - - + + + Change Crew... - + Failed to enter a valid Snapmatic Crew ID - + Change Crew %1 failed with... - - - + + + Change Title... - + Failed to enter a valid Snapmatic title - + Change Title %1 failed with... - + Export failed with... %1 @@ -1404,31 +1408,31 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No Snapmatic pictures or Savegames files are selected Aucun fichier de sauvegarde ou photo Snapmatic sélectionné - - - + + + Remove selected Supprimer la sélection - + You really want remove the selected Snapmatic picutres and Savegame files? 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) @@ -1455,7 +1459,7 @@ Appuyer sur 1 pour le mode par défaut SavegameDialog - + Savegame Viewer Gestionnaire de sauvegardes @@ -1475,7 +1479,7 @@ Appuyer sur 1 pour le mode par défaut &Fermer - + Failed at %1 Échec de %1 @@ -1524,7 +1528,7 @@ Appuyer sur 1 pour le mode par défaut Supprimer - + &Export &Exporter @@ -1615,32 +1619,32 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + &View &Voir - + &Remove &Supprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner to&ut - + &Deselect All &Déselectionner tout @@ -1654,7 +1658,7 @@ Appuyer sur 1 pour le mode par défaut - + Snapmatic Properties @@ -1696,7 +1700,7 @@ Appuyer sur 1 pour le mode par défaut Meme - + Snapmatic Title Titre Snapmatic @@ -1797,26 +1801,26 @@ Appuyer sur 1 pour le mode par défaut - + 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 : @@ -1964,52 +1968,52 @@ Appuyer sur 1 pour le mode par défaut - + Edi&t Édi&ter - + Show &In-game &Visible en jeu - + Hide &In-game &Invisible en jeu - + &Export &Exporter - + &View &Voir - + &Remove S&upprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner &tout - + &Deselect All &Déselectionner tout @@ -2142,15 +2146,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... @@ -2203,45 +2207,45 @@ 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 - - + + Show In-game - - + + Hide In-game diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index e463f0e84d09ed6e66c96048591be96f8fc39d3d..d85a42aba749d858d2842fed2b7ab3bb7308e0b4 100644 GIT binary patch delta 371 zcmWNH%`1a(9KgTd-*4ORdG@Rv5Tj-2*(hsmZ1a-0X_T^QnZ*SurMz5lSj}ybl=z17 zQVuv#vbacD{sIRjp;mSv$_~rH#Pg|7pUWrp$Wo8&YyfeRBDjXbl)(ws9HTxKG&XIs z{<=4Sj#oNjP7KpM3*iu{ya&f=nuj`r+&nh};C$nr`5eGTo<~lW0qVE-T@VjR0%1ZW(ged&d{zbG!xqK-c0Z>*<`aS0WgR%%5xezs=75lA3AKXSu^ukf<7iE$gMbKWViKe_aplXP> zg`4j9T7>ACby-L6JS0O^H_|aS47lH9aX1F7e9N}od7vmm4vc348}D*(>k#nW$=Tm5 zz^cln4jYhtFOQ3ZK#hxkq#??)SvPgiGEbSj!tdrIQ&0rz*=)W_P@;)IL8oGmjRAp6 zelTY^P88!p1w0i>?)L?d*R8nr{twJ>vc)TEo!n?KL}6MaY*C2TcuHv({!zYGyuz2n z@m4pjaD_Ew+p+f^PXqo}Ub8-m!U+!BMre_vwof|c2m2hYa-Zttb=9C4pQ%3D;+SfP zlHN#q++=~;039A^a6#jz90z|j=UdWskLJ>NuO*cas#AC&RgaujZYD*ZT6((v05x%N AO#lD@ diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index ebd7af7..7fcdc18 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -325,14 +325,14 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! Свой Ðватар - + Custom Picture Custom Picture Description in SC, don't use Special Character! Ð¡Ð²Ð¾Ñ ÐšÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ° @@ -368,12 +368,12 @@ When you want to use it as Avatar the image will be detached! Редактор JSON Ð´Ð»Ñ Snapmatic - + &Save &Сохранить - + &Close &Закрыть @@ -775,9 +775,8 @@ Y: %2 PictureDialog - %1 - Snapmatic Picture Viewer - %1 - ПроÑмотрщик фотографий Snapmatic + %1 - ПроÑмотрщик фотографий Snapmatic @@ -800,6 +799,11 @@ Y: %2 Manage picture ÐаÑтройки картинки + + + Snapmatic Picture Viewer - %1 + ПроÑмотрщик фотографий Snapmatic - %1 + Close viewer @@ -818,31 +822,31 @@ Y: %2 - + Export as &Picture... ЭкÑпортировать как &картинку... - + Export as &Snapmatic... ЭкÑпортировать как &Snapmatic... - + &Overwrite Image... &ПерезапиÑать картинку... - + &Edit Properties... &Изменить ÑвойÑтва... - + Open &Map Viewer... Открыть &карту... @@ -857,38 +861,38 @@ 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 ÐеизвеÑтное меÑто @@ -991,7 +995,7 @@ Press 1 for Default View - + Open &JSON Editor... Открыть &редактор JSON... @@ -1014,12 +1018,12 @@ Press 1 for Default View Выбранные игроки: - + &Apply &Применить - + &Cancel &Отмена @@ -1088,17 +1092,17 @@ Press 1 for Default View &Закрыть - + Loading... Загрузка... - + Snapmatic Loader Загрузчик Snapmatic - + <h4>Following Snapmatic Pictures got repaired</h4>%1 Change wording if the %1 is not a multiline beginning at new line <h4>ÐижеÑледующие картинки Snapmatic были воÑÑтановлены</h4>%1 @@ -1106,8 +1110,8 @@ Press 1 for Default View - - + + Import... Импортировать... @@ -1118,51 +1122,51 @@ Press 1 for Default View - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import Импортировать - - + + Savegames files (SGTA*) Файлы ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ (SGTA*) - - + + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) - - + + All files (**) Ð’Ñе файлы (**) - - + + Import file %1 of %2 files ИмпортируютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ %1 из %2 - + Import failed with... %1 @@ -1171,21 +1175,21 @@ Press 1 for Default View %1 - - + + Failed to read Snapmatic picture Ðе удалоÑÑŒ загрузить картинку Snapmatic - - + + Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - - + + + No valid file is selected Выбранный файл неверен @@ -1195,145 +1199,145 @@ Press 1 for Default View Включенные картинки: %1 из %2 - + Importable files (%1) Файлы Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° (%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, файл не может быть правильно обработан - + Can't import %1 because file format can't be detected Ðе получилоÑÑŒ импортировать %1, не удалоÑÑŒ определить формат файла - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе удалоÑÑŒ импортировать картинку Snapmatic, название не начинаетÑÑ Ñ PGTA или не заканчиваетÑÑ Ñ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе удалоÑÑŒ импортировать картинку Snapmatic, картинка уже в игре - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе удалоÑÑŒ импортировать картинку Snapmatic, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, can't copy the file into profile Ðе удалоÑÑŒ импортировать Ñохранение, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, no Savegame slot is left Ðе удалоÑÑŒ импортировать Ñохранение, нет пуÑтых Ñчеек под ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + JPG pictures and GTA Snapmatic Картинки JPG и GTA Snapmatic - - + + JPG pictures only Только картинки JPG - - + + GTA Snapmatic only Только GTA Snapmatic - + Initialising export... Подготовка к ÑкÑпорту... - - + + No Snapmatic pictures or Savegames files are selected Ðе выделены ни один Snapmatic или Ñохранение - - - + + + Remove selected СнÑть выделение - + You really want remove the selected Snapmatic picutres and Savegame files? Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - - + + Qualify as Avatar Пометить как Ðватар - - - - - - + + + + + + No Snapmatic pictures are selected Ðе выделена ни одна картинка Snapmatic - - - - + + + + Patch selected... Пропатчить выделенные... - - - - - - - - + + + + + + + + Patch file %1 of %2 files ИзменÑетÑÑ Ñ„Ð°Ð¹Ð» %1 из %2 - - - - - - + + + + + + %1 failed with... %2 @@ -1343,80 +1347,80 @@ Press 1 for Default View %2 - + Failed to remove all selected Snapmatic pictures and/or Savegame files Ðе удалоÑÑŒ удалить вÑе выделенные картинки Snapmatic и/или ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - + Qualify %1 failed with... Помечание - - + + Change Players... Изменить игроков... - + Change Players %1 failed with... Измение игроков - - - + + + Change Crew... Изменить банду... - + Failed to enter a valid Snapmatic Crew ID Введённый идентификатор банды не верен - + Change Crew %1 failed with... Изменение банды - - - + + + Change Title... Изменить заголовок... - + Failed to enter a valid Snapmatic title Введённый заголовок не верен - + Change Title %1 failed with... Изменение заголовка - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1ЭÑкпортировать картинки Snapmatic%2<br><br>Картинки JPG можно открыть любым проÑмотрщиком<br>Картинки формата GTA Snapmatic можно Ñнова импортировать в игру<br><br>ЭкÑпортировать как: - - - - - + + + + + Export selected... Экпортировать выделенное... - + Export failed with... %1 @@ -1432,13 +1436,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) @@ -1465,7 +1469,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer ПроÑмотрщик Ñохранений @@ -1485,7 +1489,7 @@ Press 1 for Default View &Закрыть - + Failed at %1 Ошибка при %1 @@ -1577,32 +1581,32 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить Ñохранение %1 - + &View &ПроÑмотр - + &Remove &Удалить - + &Select &Выбрать - + &Deselect Сн&Ñть выбор - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1612,7 +1616,7 @@ Press 1 for Default View Копировать Ñохранение - + &Export &ЭкÑпортировать @@ -1664,7 +1668,7 @@ Press 1 for Default View - + Snapmatic Properties @@ -1716,7 +1720,7 @@ Press 1 for Default View Meme - + Snapmatic Title Заголовок Snapmatic @@ -1805,26 +1809,26 @@ Press 1 for Default View - + Patching of Snapmatic Properties failed because of I/O Error Ðе удалоÑÑŒ измененить ÑвойÑтва Snapmatic из-за проблемы ввода/вывода - + New Snapmatic title: Ðовый заголовок Snapmatic: - + Snapmatic Crew Банда на Snapmatic - + New Snapmatic crew: ÐÐ¾Ð²Ð°Ñ Ð±Ð°Ð½Ð´Ð° на Snapmatic: @@ -1962,52 +1966,52 @@ Press 1 for Default View Ðе удалоÑÑŒ показать %1 в ÑпиÑке картинок Snapmatic в игре - + Edi&t &Правка - + Show &In-game Показывать в &игре - + Hide &In-game Ск&рыть в игре - + &Export &ЭкÑпорт - + &View По&казать - + &Remove У&далить - + &Select &Выделить - + &Deselect Сн&Ñть выделение - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -2115,7 +2119,7 @@ Press 1 for Default View - + Select &GTA V Folder... Выбрать &папку GTA V... @@ -2191,16 +2195,16 @@ Press 1 for Default View - - + + Select Profile Выбор Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - - + + Select GTA V Folder... Выбрать папку GTA V... @@ -2213,25 +2217,25 @@ Press 1 for Default View - + &About %1 &О программе %1 - + Open File... Открыть файл... - - - - + + + + Open File Открыть файл - + Can't open %1 because of not valid file format Ðе удалоÑÑŒ открыть %1 из-за неверного формата файла @@ -2241,15 +2245,15 @@ Press 1 for Default View Пере&загрузить - - + + Show In-game Показывать в игре - - + + Hide In-game Скрыть в игре diff --git a/res/gta5sync_zh_TW.qm b/res/gta5sync_zh_TW.qm index 813115bd56fba6a69cb9d47ba4d9d8692577fc85..b1e7009c6e1b5dedee518c04162488f2c55710dc 100644 GIT binary patch delta 376 zcmWO1O(=tL9KiA4|M%aXXV3F^DU!%|$ewxIn8$E+;ARuea&TDdi8Wi&gB+$DWH}(e z92~q9Zj>yP619t~aBz^&l7oZ8C=ok-kDtC5NxVqn;Q+&yGzHiadNwJ;Mwm*y=$B@& zujviI(?WabM%NYHp%1k!a_}D1?8 zWvo?Y0Z~gUIq6lb`$+@T42!OVTw9OHF0^CY83hClwVPBz5E)C-yclFX^dNSyIF;C% z*${Qxd~)-X96Ff=Xk4QW+hcAsA;q!jir%F!rc*{7stBgV8bp}JIu UheCSk&S_UCt=HO9w=+@sA4D>A{{R30 delta 380 zcmWNMODIHP9L4|N_uYHH`|v1bF(Py2-WiW^%`m2vG8=hhMu}O-!a{}_Rx`?ivXHSs z{X;1!v7_WhDWYa43(71fHj}JmF)4Z7Q>U}})j8)TLvJ$lbeK?oBaV=D8W6ESrpPJ| z(x~!6hnn92{5yC=TWE`gIU1oJ2@Tdm+q-d=MZla-0G1ayC7$ z1Ege@JUjzv>SHT^bpTS1ZNwCS>P>bLi~zK4;SckWX*7fwxx+;vM3(Vfh>{N!#m919 zr~okcxmrv)Y(M73TGtgfvzpWR%DvxNfVy$+J8`nD8Y`s^8q{%6GO4H2PD`AScU+e5j9ARn8o&ZI8xfa3nddG5l_y8}+b-@lxIX4J69! Thwy7ifG7;$UcJkHT1cq>x=(K^ diff --git a/res/gta5sync_zh_TW.ts b/res/gta5sync_zh_TW.ts index c4a97b1..08aae9a 100644 --- a/res/gta5sync_zh_TW.ts +++ b/res/gta5sync_zh_TW.ts @@ -71,37 +71,37 @@ Pictures and Savegames %1 使用 <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> æŽˆæ¬Šæ¢æ¬¾ç™¼å¸ƒ - + Release æ­£å¼ç‰ˆæœ¬ - + Release Candidate 最終發布版本 - + Daily Build æ¯æ—¥å»ºç½®ç‰ˆæœ¬ - + Developer 開發版本 - + Beta Beta 版本 - + Alpha Alpha 版本 - + Custom 自訂 @@ -767,9 +767,13 @@ Y: %2 PictureDialog - %1 - Snapmatic Picture Viewer - %1 - Snapmatic 圖片檢視器 + %1 - Snapmatic 圖片檢視器 + + + + Snapmatic Picture Viewer - %1 + Snapmatic 圖片檢視器 - %1 @@ -849,36 +853,36 @@ 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 大頭貼é è¦½æ¨¡å¼ @@ -1651,7 +1655,7 @@ Press 1 for Default View - + Snapmatic Properties @@ -1734,7 +1738,7 @@ Press 1 for Default View - + Patching of Snapmatic Properties failed because of I/O Error @@ -2029,7 +2033,7 @@ Press 1 for Default View &OK - OK(&O) + 確定(&O) From ebe8d616f2afd5a93a2ffd2a83d6379431adc0d7 Mon Sep 17 00:00:00 2001 From: Syping Date: Mon, 5 Feb 2018 00:52:11 +0100 Subject: [PATCH 059/359] Updated French Translation from gta5sync --- res/gta5sync_fr.qm | Bin 25649 -> 43968 bytes res/gta5sync_fr.ts | 336 +++++++++++++++++++++++---------------------- 2 files changed, 170 insertions(+), 166 deletions(-) diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index 5a1b63a2b1e3fb39bd496a97720f0259e892c277..256dcd13119d08729121b57ab0f897e8f09907b1 100644 GIT binary patch literal 43968 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 diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index f1bdcec..76e14c6 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -73,39 +73,39 @@ Pictures and Savegames et les fichiers de sauvegarde de Grand Theft Auto V - + Release - + Release - + Release Candidate - + Release Candidate - + Daily Build - + Daily Build - + Developer - + Developer - + Beta - + Beta - + Alpha - + Alpha - + Custom - Personnalisé + Personnalisé @@ -187,53 +187,53 @@ et les fichiers de sauvegarde de Grand Theft Auto V Snapmatic Image Editor - + Éditeur d'images Snapmatic Overwrite Image... - + Remplacer l'image... Capacity: %1 - + Capacité : %1 ? - + ? &Import... - &Importer... + &Importer... &Overwrite - + &Remplacer &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 Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. - + Tous les Snapmatic ont une Capacité différente, un Snapmatic avec une haute Capacité peut stocker une image de meilleure qualité. @@ -257,45 +257,45 @@ et les fichiers de sauvegarde de Grand Theft Auto V Picture - + Image Background - + Fond Background Colour: <span style="color: %1">%1</span> - + Couleur de fond : <span style="color: %1">%1</span> ... - ... + ... Background Image: %1 - + Image de fond : %1 X - + X Force Colour in Avatar Zone - + Forcer la couleur dans la Zone d'Avatar Import picture - + Importer l'image @@ -305,7 +305,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V Discard picture - + Supprimer l'image @@ -317,43 +317,44 @@ et les fichiers de sauvegarde de Grand Theft Auto V Background Image: - + Image de fond : Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Avatar Custom Picture Custom Picture Description in SC, don't use Special Character! - + Custom Picture 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 @@ -361,22 +362,22 @@ When you want to use it as Avatar the image will be detached! Snapmatic JSON Editor - + Éditeur Snapmatic JSON &Save - + &Sauvegarder &Close - + &Fermer JSON Error - + Erreur JSON @@ -384,39 +385,40 @@ When you want to use it as Avatar the image will be detached! Snapmatic Map Viewer - + Visionneuse de Carte Snapmatic &Close - + &Fermer &Apply - A&ppliquer + &Appliquer &Revert - + &Revenir &Set - + &Définir &Done - + &Terminer X: %1 Y: %2 X and Y position - + X : %1 +Y : %2 @@ -555,106 +557,106 @@ Y: %2 Feedback - + Feedback Participation - + Participation Participate in %1 User Statistics - + Participer aux statistiques d'usage %1 Categories - + Catégories Hardware, Application and OS Specification - + Matériel, applications et OS System Language Configuration - + Langage système Application Configuration - + Configuration de l'application Other - + Autres Participation ID: %1 - + ID de participation : %1 &Copy - + &Copier User Feedback - + Feedback utilisateur Limit: 1 message/day - + Limite : 1 message/jour &Send - + &Envoyer Language for Areas - + Langage des Zones Style - + Style Style: - + Style : Font - Police + Police Always use Message Font (Windows 2003 and earlier) - + Toujours utiliser la police Message (Windows 2003 et précédent) Interface - + Interface Language for Interface - + Langage de l'interface @@ -662,12 +664,12 @@ Y: %2 Current: %1 - + Actuel : %1 Use Default Style (Restart) - + Utiliser le Style par Défaut (rédémarrage requis) @@ -682,7 +684,7 @@ Y: %2 Apply changes - + Appliquer les changements @@ -693,7 +695,7 @@ Y: %2 Discard changes - + Annuler les changements @@ -705,7 +707,7 @@ Y: %2 %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + %1 (Langage proche) @@ -717,13 +719,13 @@ Y: %2 %1 (Closest to Interface) Next closest language compared to the Interface - + %1 (Langage proche de l'interface) Auto Automatic language choice. - + Automatique @@ -734,22 +736,22 @@ Y: %2 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é A feedback message have to between 3-1024 characters long - + Un message doit contenir 3 à 1024 charactères @@ -790,17 +792,17 @@ Y: %2 Manage picture - + Gestion de l'image &Manage - + &Gestion Close viewer - + Fermer la visionneuse @@ -810,27 +812,27 @@ Y: %2 Failed to export the picture because the system occurred a write failure - + Échec de l'export de l'image : erreur d'écriture Failed to export the picture because the format detection failures - + Échec de l'export de l'image : erreur de détection du format Failed to export the picture because the file can't be written - + Échec de l'export de l'image : impossible d'écrire dans le fichier Failed to export the picture because of an unknown reason - + Échec de l'export de l'image : erreur inconnue Export as Snapmatic... - + Exporter comme Snapmatic... @@ -854,7 +856,7 @@ Y: %2 Export as Snapmatic - + Exporter comme Snapmatic @@ -870,12 +872,12 @@ Y: %2 Export as Picture... - + Exporter comme image... JPEG Graphics (*.jpg *.jpeg) - + JPEG Graphics (*.jpg *.jpeg) @@ -885,7 +887,7 @@ Y: %2 Export as Picture - + Exporter comme image @@ -897,19 +899,19 @@ Y: %2 Export as &Picture... - + Exporter comme &image... Export as &Snapmatic... - + Exporter comme &Snapmatic... &Overwrite Image... - + &Remplacer l'image... @@ -921,7 +923,7 @@ Y: %2 Open &Map Viewer... - + Ouvrir la &Visionneuse de Carte... @@ -990,7 +992,7 @@ Appuyer sur 1 pour le mode par défaut Open &JSON Editor... - + Ouvrir l'éditeur &JSON... @@ -998,53 +1000,53 @@ Appuyer sur 1 pour le mode par défaut Edit Players... - + Modifier les joueurs... Available Players: - + Joueurs disponibles : Selected Players: - + Joueurs sélectionnés : &Apply - A&ppliquer + A&ppliquer &Cancel - + 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é ! @@ -1067,7 +1069,7 @@ Appuyer sur 1 pour le mode par défaut Import file - + Importer un fichier @@ -1104,12 +1106,12 @@ Appuyer sur 1 pour le mode par défaut Snapmatic Loader - + Snapmatic Loader <h4>Following Snapmatic Pictures got repaired</h4>%1 - + <h4>Les Snapmatic suivants ont été répaés</h4>%1 @@ -1160,7 +1162,7 @@ Appuyer sur 1 pour le mode par défaut All image files (%1) - + Toutes les images (%1) @@ -1195,7 +1197,7 @@ Appuyer sur 1 pour le mode par défaut Importable files (%1) - + Fichiers importables (%1) @@ -1214,19 +1216,19 @@ Appuyer sur 1 pour le mode par défaut 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 Can't import %1 because file format can't be detected - + Impossible d'importer %1, le format du fichier n'est pas détecté @@ -1288,13 +1290,13 @@ Appuyer sur 1 pour le mode par défaut Initialising export... - + Initialisation de l'export... Qualify as Avatar - + Qualifier comme Avatar @@ -1304,7 +1306,7 @@ Appuyer sur 1 pour le mode par défaut No Snapmatic pictures are selected - + Aucun Snapmatic sélectionné @@ -1312,7 +1314,7 @@ Appuyer sur 1 pour le mode par défaut Patch selected... - + Patcher la sélection... @@ -1324,7 +1326,7 @@ Appuyer sur 1 pour le mode par défaut Patch file %1 of %2 files - + Patch du fichier %1 sur %2 @@ -1337,66 +1339,68 @@ Appuyer sur 1 pour le mode par défaut %2 Action failed with... - + %1 a échoué avec... + +%2 Failed to remove all selected Snapmatic pictures and/or Savegame files - + Échec de la supression des Snapmatic et/ou des fichiers de sauvegarde sélectionnés Qualify %1 failed with... - + Qualifier Change Players... - + Modifier les joueurs... Change Players %1 failed with... - + Modifier les joueurs Change Crew... - + Modifier le Crew... Failed to enter a valid Snapmatic Crew ID - + Snapmatic Crew ID invalide Change Crew %1 failed with... - + Changer le Crew Change Title... - + Changer le titre... Failed to enter a valid Snapmatic title - + Titre Snapmatic invalide Change Title %1 failed with... - + Changer le titre @@ -1452,7 +1456,7 @@ Appuyer sur 1 pour le mode par défaut <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? - + <h4>Bienvenue sur %1!</h4>Voulez-vous configurer %1 avant de l'utiliser t? @@ -1611,7 +1615,7 @@ Appuyer sur 1 pour le mode par défaut Delete Savegame - + Supprimer la sauvegarde @@ -1724,13 +1728,13 @@ Appuyer sur 1 pour le mode par défaut Players: %1 (%2) Multiple Player are inserted here - + Joueurs : %1 (%2) Player: %1 (%2) One Player is inserted here - + Joueur : %1 (%2) @@ -1787,17 +1791,17 @@ Appuyer sur 1 pour le mode par défaut <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 @@ -1836,61 +1840,61 @@ Appuyer sur 1 pour le mode par défaut 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 @@ -1960,12 +1964,12 @@ Appuyer sur 1 pour le mode par défaut 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 @@ -2023,22 +2027,22 @@ Appuyer sur 1 pour le mode par défaut %1 User Statistics - + %1 Statistiques d'usage You want help %1 to improve in the future by collection of data? - + Voulez-vous aider à améliorer %1 en envoyant vos données d'utilisation ? Yes, I would like to take part. - + Oui, je veux participer. &OK - &OK + &OK @@ -2056,7 +2060,7 @@ Appuyer sur 1 pour le mode par défaut Reload profile overview - + Recharger la vue du profil @@ -2067,7 +2071,7 @@ Appuyer sur 1 pour le mode par défaut Close %1 Close %1 <- (gta5view/gta5sync) - %1 will be replaced automatically - + Fermer %1 @@ -2166,27 +2170,27 @@ Appuyer sur 1 pour le mode par défaut Change &Players... - + Modifier les &joueurs... Selection &mass tools - + Outils de sélectionne en &masse Change &Title... - + Changer le &titre... Change &Crew... - + Changer le &Crew... &Qualify as Avatar - + &Qualifier comme Avatar @@ -2241,14 +2245,14 @@ Appuyer sur 1 pour le mode par défaut Show In-game - + Visible en jeu Hide In-game - + Invisible en jeu From 39a83200d2b295a886165e6c956ab0f82a582f73 Mon Sep 17 00:00:00 2001 From: Syping Date: Mon, 5 Feb 2018 10:33:22 +0100 Subject: [PATCH 060/359] fix language display error --- OptionsDialog.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp index 5264907..0528709 100644 --- a/OptionsDialog.cpp +++ b/OptionsDialog.cpp @@ -227,9 +227,10 @@ void OptionsDialog::setupLanguageBox() } QString aCurrentAreaLanguage = Translator->getCurrentAreaLanguage(); - if (QFile::exists(":/global/global." % currentAreaLanguage % ".loc")) + if (QFile::exists(":/global/global." % aCurrentAreaLanguage % ".loc")) { - QFile locFile(":/global/global." % currentAreaLanguage % ".loc"); + qDebug() << "locFile found"; + QFile locFile(":/global/global." % aCurrentAreaLanguage % ".loc"); if (locFile.open(QFile::ReadOnly)) { aCurrentAreaLanguage = QString::fromUtf8(locFile.readLine()).trimmed(); From d1a2b0335310938bf0acda19cd2e03df434f000d Mon Sep 17 00:00:00 2001 From: Syping Date: Mon, 5 Feb 2018 10:34:38 +0100 Subject: [PATCH 061/359] prepare Release build --- .travis/debian_build.sh | 4 ++-- .travis/osx_build.sh | 2 +- .travis/windows_build.sh | 2 +- config.h | 2 +- res/app.rc | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.travis/debian_build.sh b/.travis/debian_build.sh index 6cb19aa..c370376 100755 --- a/.travis/debian_build.sh +++ b/.travis/debian_build.sh @@ -21,11 +21,11 @@ mkdir -p /usr/share/gta5view && \ # Starting build cd qt5 && \ -qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_RC "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \ +qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \ make -j 4 && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=${PROJECT_DIR}/assets && \ cd .. && \ cd qt4 && \ -qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT4} DEFINES+=GTA5SYNC_BUILDTYPE_RC "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ +qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT4} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ make -j 4 && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=${PROJECT_DIR}/assets diff --git a/.travis/osx_build.sh b/.travis/osx_build.sh index bc3c7a1..0860ba0 100755 --- a/.travis/osx_build.sh +++ b/.travis/osx_build.sh @@ -8,7 +8,7 @@ mkdir -p build && \ mkdir -p assets && \ cd build && \ -/usr/local/opt/qt/bin/qmake ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_RC "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ +/usr/local/opt/qt/bin/qmake ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ make -j 4 && \ /usr/local/opt/qt/bin/macdeployqt gta5view.app -dmg && \ cp -Rf gta5view.dmg ../assets/gta5view-osx_${APPLICATION_VERSION}.dmg diff --git a/.travis/windows_build.sh b/.travis/windows_build.sh index 6bf4cac..99dffef 100755 --- a/.travis/windows_build.sh +++ b/.travis/windows_build.sh @@ -11,7 +11,7 @@ mkdir -p assets && \ # Starting build cd build && \ -qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_RC "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ +qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ make -j 4 && \ cp -Rf release/*.exe ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} && \ cd ${PROJECT_DIR}/assets && \ diff --git a/config.h b/config.h index ec58559..ccc3b4e 100644 --- a/config.h +++ b/config.h @@ -49,7 +49,7 @@ #endif #ifndef GTA5SYNC_APPVER -#define GTA5SYNC_APPVER "1.5.0-rc4" +#define GTA5SYNC_APPVER "1.5.0" #endif #ifdef GTA5SYNC_BUILDTYPE_REL diff --git a/res/app.rc b/res/app.rc index 04da6bf..80cdaec 100644 --- a/res/app.rc +++ b/res/app.rc @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view" - VALUE "FileVersion", "1.5.0-rc4" + VALUE "FileVersion", "1.5.0" VALUE "InternalName", "gta5view" VALUE "LegalCopyright", "Copyright © 2016-2018 Syping" VALUE "OriginalFilename", "gta5view.exe" VALUE "ProductName", "gta5view" - VALUE "ProductVersion", "1.5.0-rc4" + VALUE "ProductVersion", "1.5.0" END END END From 10b6222ae8adc0cb5666009e6500a5be68faa0a8 Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 6 Feb 2018 11:26:20 +0100 Subject: [PATCH 062/359] add NSIS script for gta5view Installer --- .gitattributes | 1 + .travis.yml | 3 + .travis/gta5view.nsi | 241 +++++++++++++++++++++++++++++++++++ .travis/wininstall_build.sh | 16 +++ .travis/wininstall_travis.sh | 12 ++ 5 files changed, 273 insertions(+) create mode 100644 .travis/gta5view.nsi create mode 100755 .travis/wininstall_build.sh create mode 100755 .travis/wininstall_travis.sh diff --git a/.gitattributes b/.gitattributes index 41f4538..cd1cbfb 100644 --- a/.gitattributes +++ b/.gitattributes @@ -15,6 +15,7 @@ # Windows development files *.rc text eol=crlf +*.nsi text eol=crlf *.exe.manifest text eol=crlf # Binary files diff --git a/.travis.yml b/.travis.yml index 9711d25..9f7eb19 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,6 +26,9 @@ matrix: - BUILD_SCRIPT=windows_travis.sh - QT_SELECT=qt5-x86_64-w64-mingw32 - EXECUTABLE_ARCH=_x64 + - env: + - BUILD_SCRIPT=wininstall_travis.sh + - QT_SELECT=qt5-x86_64-w64-mingw32 - os: osx env: BUILD_SCRIPT=osx_travis.sh diff --git a/.travis/gta5view.nsi b/.travis/gta5view.nsi new file mode 100644 index 0000000..5bd9285 --- /dev/null +++ b/.travis/gta5view.nsi @@ -0,0 +1,241 @@ +###################################################################### + +!define APP_NAME "gta5view" +!define COMP_NAME "Syping" +!define WEB_SITE "https://gta5view.syping.de/" +!define VERSION "1.5.0.0" +!define COPYRIGHT "Copyright © 2016-2018 Syping" +!define DESCRIPTION "Grand Theft Auto V Savegame and Snapmatic Viewer/Editor" +!define INSTALLER_NAME "gta5view_setup.exe" +!define MAIN_APP_EXE "gta5view.exe" +!define INSTALL_TYPE "SetShellVarContext all" +!define REG_ROOT "HKLM" +!define REG_APP_PATH "Software\Microsoft\Windows\CurrentVersion\App Paths\${MAIN_APP_EXE}" +!define UNINSTALL_PATH "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}" + +###################################################################### + +VIProductVersion "${VERSION}" +VIAddVersionKey "ProductName" "${APP_NAME}" +VIAddVersionKey "ProductVersion" "${VERSION}" +VIAddVersionKey "CompanyName" "${COMP_NAME}" +VIAddVersionKey "LegalCopyright" "${COPYRIGHT}" +VIAddVersionKey "FileDescription" "${DESCRIPTION}" +VIAddVersionKey "FileVersion" "${VERSION}" + +###################################################################### + +!include "x64.nsh" +SetCompressor LZMA +Name "${APP_NAME}" +Caption "${APP_NAME}" +OutFile "${INSTALLER_NAME}" +#BrandingText "${APP_NAME}" +XPStyle on +InstallDirRegKey "${REG_ROOT}" "${REG_APP_PATH}" "" +InstallDir "$PROGRAMFILES64\Syping\gta5view" + +###################################################################### + +!include "MUI2.nsh" + +!define MUI_ABORTWARNING +!define MUI_UNABORTWARNING + +!define MUI_LANGDLL_REGISTRY_ROOT "${REG_ROOT}" +!define MUI_LANGDLL_REGISTRY_KEY "${UNINSTALL_PATH}" +!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" + +!insertmacro MUI_PAGE_WELCOME + +!ifdef LICENSE_TXT +!insertmacro MUI_PAGE_LICENSE "${LICENSE_TXT}" +!endif + +!insertmacro MUI_PAGE_DIRECTORY + +!ifdef REG_START_MENU +!define MUI_STARTMENUPAGE_NODISABLE +!define MUI_STARTMENUPAGE_DEFAULTFOLDER "gta5view" +!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${REG_ROOT}" +!define MUI_STARTMENUPAGE_REGISTRY_KEY "${UNINSTALL_PATH}" +!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${REG_START_MENU}" +!insertmacro MUI_PAGE_STARTMENU Application $SM_Folder +!endif + +!insertmacro MUI_PAGE_INSTFILES + +!define MUI_FINISHPAGE_RUN "$INSTDIR\${MAIN_APP_EXE}" +!insertmacro MUI_PAGE_FINISH + +!insertmacro MUI_UNPAGE_CONFIRM + +!insertmacro MUI_UNPAGE_INSTFILES + +!insertmacro MUI_UNPAGE_FINISH + +!insertmacro MUI_LANGUAGE "English" +!insertmacro MUI_LANGUAGE "French" +!insertmacro MUI_LANGUAGE "German" +!insertmacro MUI_LANGUAGE "Russian" +!insertmacro MUI_LANGUAGE "TradChinese" + +!insertmacro MUI_RESERVEFILE_LANGDLL + +###################################################################### + +Function .onInit +!insertmacro MUI_LANGDLL_DISPLAY +!ifdef WIN32 + MessageBox MB_OK|MB_ICONSTOP "Can't install the 64bit version on a 32bit system, please download the 32bit version!" + Quit +!endif +SetRegView 64 +FunctionEnd + +###################################################################### + +Section -MainProgram +${INSTALL_TYPE} +SetOverwrite ifnewer +SetOutPath "$INSTDIR" +File "../build/release/gta5view.exe" +File "/usr/lib/gcc/x86_64-w64-mingw32/6.3-win32/libgcc_s_seh-1.dll" +File "/usr/lib/gcc/x86_64-w64-mingw32/6.3-win32/libstdc++-6.dll" +File "/opt/windev/libressl-latest_qt64d/bin/libcrypto-42.dll" +File "/opt/windev/libressl-latest_qt64d/bin/libssl-44.dll" +File "/opt/windev/libjpeg-turbo-latest_qt64d/bin/libjpeg-62.dll" +File "/opt/windev/qt64d-latest/bin/Qt5Core.dll" +File "/opt/windev/qt64d-latest/bin/Qt5Gui.dll" +File "/opt/windev/qt64d-latest/bin/Qt5Network.dll" +File "/opt/windev/qt64d-latest/bin/Qt5Widgets.dll" +File "/opt/windev/qt64d-latest/bin/Qt5WinExtras.dll" +SetOutPath "$INSTDIR\lang" +File "../res/gta5sync_en_US.qm" +File "../res/gta5sync_de.qm" +File "../res/gta5sync_fr.qm" +File "../res/gta5sync_ru.qm" +File "../res/gta5sync_zh_TW.qm" +File "../res/qtbase_en_GB.qm" +File "../res/qtbase_de.qm" +File "../res/qtbase_fr.qm" +File "../res/qtbase_ru.qm" +File "../res/qtbase_zh_TW.qm" +SetOutPath "$INSTDIR\platforms" +File "/opt/windev/qt64d-latest/plugins/platforms/qwindows.dll" +SetOutPath "$INSTDIR\imageformats" +File "/opt/windev/qt64d-latest/plugins/imageformats/qjpeg.dll" +SectionEnd + +###################################################################### + +Section -Icons_Reg +SetOutPath "$INSTDIR" +WriteUninstaller "$INSTDIR\uninstall.exe" + +!ifdef REG_START_MENU +!insertmacro MUI_STARTMENU_WRITE_BEGIN Application +CreateDirectory "$SMPROGRAMS\$SM_Folder" +CreateShortCut "$SMPROGRAMS\$SM_Folder\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}" +CreateShortCut "$SMPROGRAMS\$SM_Folder\Uninstall ${APP_NAME}.lnk" "$INSTDIR\uninstall.exe" + +!ifdef WEB_SITE +WriteIniStr "$INSTDIR\${APP_NAME} website.url" "InternetShortcut" "URL" "${WEB_SITE}" +CreateShortCut "$SMPROGRAMS\$SM_Folder\gta5view Website.lnk" "$INSTDIR\${APP_NAME} website.url" +!endif +!insertmacro MUI_STARTMENU_WRITE_END +!endif + +!ifndef REG_START_MENU +CreateDirectory "$SMPROGRAMS\gta5view" +CreateShortCut "$SMPROGRAMS\gta5view\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}" +CreateShortCut "$SMPROGRAMS\gta5view\Uninstall ${APP_NAME}.lnk" "$INSTDIR\uninstall.exe" + +!ifdef WEB_SITE +WriteIniStr "$INSTDIR\${APP_NAME} website.url" "InternetShortcut" "URL" "${WEB_SITE}" +CreateShortCut "$SMPROGRAMS\gta5view\gta5view Website.lnk" "$INSTDIR\${APP_NAME} website.url" +!endif +!endif + +WriteRegStr ${REG_ROOT} "${REG_APP_PATH}" "" "$INSTDIR\${MAIN_APP_EXE}" +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayName" "${APP_NAME}" +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "UninstallString" "$INSTDIR\uninstall.exe" +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayIcon" "$INSTDIR\${MAIN_APP_EXE}" +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayVersion" "${VERSION}" +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "Publisher" "${COMP_NAME}" + +!ifdef WEB_SITE +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "URLInfoAbout" "${WEB_SITE}" +!endif +SectionEnd + +###################################################################### + +Section Uninstall +${INSTALL_TYPE} +Delete "$INSTDIR\gta5view.exe" +Delete "$INSTDIR\libgcc_s_seh-1.dll" +Delete "$INSTDIR\libstdc++-6.dll" +Delete "$INSTDIR\libcrypto-42.dll" +Delete "$INSTDIR\libssl-44.dll" +Delete "$INSTDIR\libjpeg-62.dll" +Delete "$INSTDIR\Qt5Core.dll" +Delete "$INSTDIR\Qt5Gui.dll" +Delete "$INSTDIR\Qt5Network.dll" +Delete "$INSTDIR\Qt5Widgets.dll" +Delete "$INSTDIR\Qt5WinExtras.dll" +Delete "$INSTDIR\lang\gta5sync_en_US.qm" +Delete "$INSTDIR\lang\gta5sync_de.qm" +Delete "$INSTDIR\lang\gta5sync_fr.qm" +Delete "$INSTDIR\lang\gta5sync_ru.qm" +Delete "$INSTDIR\lang\gta5sync_zh_TW.qm" +Delete "$INSTDIR\lang\qtbase_en_GB.qm" +Delete "$INSTDIR\lang\qtbase_de.qm" +Delete "$INSTDIR\lang\qtbase_fr.qm" +Delete "$INSTDIR\lang\qtbase_ru.qm" +Delete "$INSTDIR\lang\qtbase_zh_TW.qm" +Delete "$INSTDIR\platforms\qwindows.dll" +Delete "$INSTDIR\imageformats\qjpeg.dll" + +RmDir "$INSTDIR\lang" +RmDir "$INSTDIR\platforms" +RmDir "$INSTDIR\imageformats" + +Delete "$INSTDIR\uninstall.exe" +!ifdef WEB_SITE +Delete "$INSTDIR\${APP_NAME} website.url" +!endif + +RmDir "$INSTDIR" + +!ifdef REG_START_MENU +!insertmacro MUI_STARTMENU_GETFOLDER "Application" $SM_Folder +Delete "$SMPROGRAMS\$SM_Folder\${APP_NAME}.lnk" +Delete "$SMPROGRAMS\$SM_Folder\Uninstall ${APP_NAME}.lnk" +!ifdef WEB_SITE +Delete "$SMPROGRAMS\$SM_Folder\gta5view Website.lnk" +!endif +RmDir "$SMPROGRAMS\$SM_Folder" +!endif + +!ifndef REG_START_MENU +Delete "$SMPROGRAMS\gta5view\${APP_NAME}.lnk" +Delete "$SMPROGRAMS\gta5view\Uninstall ${APP_NAME}.lnk" +!ifdef WEB_SITE +Delete "$SMPROGRAMS\gta5view\gta5view Website.lnk" +!endif +RmDir "$SMPROGRAMS\gta5view" +!endif + +DeleteRegKey ${REG_ROOT} "${REG_APP_PATH}" +DeleteRegKey ${REG_ROOT} "${UNINSTALL_PATH}" +SectionEnd + +###################################################################### + +Function un.onInit +!insertmacro MUI_UNGETLANGUAGE +SetRegView 64 +FunctionEnd + +###################################################################### diff --git a/.travis/wininstall_build.sh b/.travis/wininstall_build.sh new file mode 100755 index 0000000..6e9b0f5 --- /dev/null +++ b/.travis/wininstall_build.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +apt-get update && apt-get install -y nsis && \ + +# Creating folders +cd ${PROJECT_DIR} && \ +echo "gta5view build version is ${APPLICATION_VERSION}" && \ +mkdir -p build && \ +mkdir -p assets && \ + +# Starting build +cd build && \ +qmake ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_INLANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_LANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_PLUG='\\\"RUNDIR:SEPARATOR:plugins\\\"' ../gta5view.pro && \ +make -j 4 && \ +cd ${PROJECT_DIR}/assets && \ +makensis -NOCD ${PROJECT_DIR}/.travis/gta5view.nsi diff --git a/.travis/wininstall_travis.sh b/.travis/wininstall_travis.sh new file mode 100755 index 0000000..e9fabfc --- /dev/null +++ b/.travis/wininstall_travis.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +QT_VERSION=5.6.3 +DOCKER_IMAGE=syping/qt5-shared-mingw:${QT_VERSION} +PROJECT_DIR_DOCKER=/gta5view + +cd ${PROJECT_DIR} && \ +docker pull ${DOCKER_IMAGE} && \ +docker run --rm \ + -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ + ${DOCKER_IMAGE} \ + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/wininstall_build.sh" From 9362e8870830f2cd04fc493660ba3edd23b33fca Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 7 Feb 2018 10:20:59 +0100 Subject: [PATCH 063/359] added BuildCode --- AppEnv.cpp | 5 +++++ AppEnv.h | 1 + TelemetryClass.cpp | 1 + config.h | 4 ++++ 4 files changed, 11 insertions(+) diff --git a/AppEnv.cpp b/AppEnv.cpp index 89bff93..6180e5b 100644 --- a/AppEnv.cpp +++ b/AppEnv.cpp @@ -44,6 +44,11 @@ QString AppEnv::getBuildDateTime() return GTA5SYNC_BUILDDATETIME; } +QString AppEnv::getBuildCode() +{ + return GTA5SYNC_BUILDCODE; +} + // Folder Stuff QString AppEnv::getGameFolder(bool *ok) diff --git a/AppEnv.h b/AppEnv.h index 2863791..2d911be 100644 --- a/AppEnv.h +++ b/AppEnv.h @@ -29,6 +29,7 @@ public: // Build Stuff static QString getBuildDateTime(); + static QString getBuildCode(); // Folder Stuff static QString getGameFolder(bool *ok = 0); diff --git a/TelemetryClass.cpp b/TelemetryClass.cpp index 245c1d5..6db570c 100644 --- a/TelemetryClass.cpp +++ b/TelemetryClass.cpp @@ -322,6 +322,7 @@ QJsonDocument TelemetryClass::getApplicationSpec() jsonObject["Version"] = GTA5SYNC_APPVER; jsonObject["BuildDateTime"] = AppEnv::getBuildDateTime(); jsonObject["BuildType"] = GTA5SYNC_BUILDTYPE; + jsonObject["BuildCode"] = AppEnv::getBuildCode(); jsonObject["QtVersion"] = qVersion(); jsonDocument.setObject(jsonObject); return jsonDocument; diff --git a/config.h b/config.h index ccc3b4e..cba07ee 100644 --- a/config.h +++ b/config.h @@ -92,6 +92,10 @@ #define GTA5SYNC_BUILDTYPE QT_TRANSLATE_NOOP("AboutDialog", "Custom") #endif +#ifndef GTA5SYNC_BUILDCODE +#define GTA5SYNC_BUILDCODE "Source" +#endif + #ifdef GTA5SYNC_QCONF #ifndef GTA5SYNC_SHARE #define GTA5SYNC_SHARE "RUNDIR:SEPARATOR:..SEPARATOR:share" From bcd2d570c27f5a079676439b9ffd8f2ef663a774 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 7 Feb 2018 10:24:07 +0100 Subject: [PATCH 064/359] set BuildCode on GitHub for Travis based builds --- .travis/debian_build.sh | 4 ++-- .travis/osx_build.sh | 2 +- .travis/windows_build.sh | 2 +- .travis/wininstall_build.sh | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis/debian_build.sh b/.travis/debian_build.sh index c370376..be16a47 100755 --- a/.travis/debian_build.sh +++ b/.travis/debian_build.sh @@ -21,11 +21,11 @@ mkdir -p /usr/share/gta5view && \ # Starting build cd qt5 && \ -qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \ +qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"GitHub\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \ make -j 4 && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=${PROJECT_DIR}/assets && \ cd .. && \ cd qt4 && \ -qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT4} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ +qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT4} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"GitHub\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ make -j 4 && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=${PROJECT_DIR}/assets diff --git a/.travis/osx_build.sh b/.travis/osx_build.sh index 0860ba0..fcdd0ac 100755 --- a/.travis/osx_build.sh +++ b/.travis/osx_build.sh @@ -8,7 +8,7 @@ mkdir -p build && \ mkdir -p assets && \ cd build && \ -/usr/local/opt/qt/bin/qmake ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ +/usr/local/opt/qt/bin/qmake ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"GitHub\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ make -j 4 && \ /usr/local/opt/qt/bin/macdeployqt gta5view.app -dmg && \ cp -Rf gta5view.dmg ../assets/gta5view-osx_${APPLICATION_VERSION}.dmg diff --git a/.travis/windows_build.sh b/.travis/windows_build.sh index 99dffef..53ba6ba 100755 --- a/.travis/windows_build.sh +++ b/.travis/windows_build.sh @@ -11,7 +11,7 @@ mkdir -p assets && \ # Starting build cd build && \ -qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ +qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"GitHub\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ make -j 4 && \ cp -Rf release/*.exe ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} && \ cd ${PROJECT_DIR}/assets && \ diff --git a/.travis/wininstall_build.sh b/.travis/wininstall_build.sh index 6e9b0f5..ac2689e 100755 --- a/.travis/wininstall_build.sh +++ b/.travis/wininstall_build.sh @@ -10,7 +10,7 @@ mkdir -p assets && \ # Starting build cd build && \ -qmake ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_INLANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_LANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_PLUG='\\\"RUNDIR:SEPARATOR:plugins\\\"' ../gta5view.pro && \ +qmake ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"GitHub\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_INLANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_LANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_PLUG='\\\"RUNDIR:SEPARATOR:plugins\\\"' ../gta5view.pro && \ make -j 4 && \ cd ${PROJECT_DIR}/assets && \ makensis -NOCD ${PROJECT_DIR}/.travis/gta5view.nsi From 6f8d28c8441de94d65cc5b78395cade329bfb831 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 8 Feb 2018 12:39:57 +0100 Subject: [PATCH 065/359] prepare 1.5.0 release --- .travis.yml | 3 +- .travis/gta5view.nsi | 1 + .travis/travis.sh | 2 +- .travis/wininstall_build.sh | 3 +- LICENSE | 14 +- LICENSE.GPL | 54 +++- LICENSE.LGPL | 624 ++++++++++-------------------------- README.md | 30 +- 8 files changed, 251 insertions(+), 480 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9f7eb19..b92b077 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,14 +10,15 @@ matrix: include: - env: - BUILD_SCRIPT=debian_travis.sh - - DOCKER_USER=i386 - QMAKE_FLAGS_QT4=QMAKE_CXXFLAGS+=-Wno-missing-field-initializers - DEBIAN_VERSION=jessie + - DOCKER_USER=i386 - APT_INSTALL=clang - env: - BUILD_SCRIPT=debian_travis.sh - QMAKE_FLAGS_QT4=QMAKE_CXXFLAGS+=-Wno-missing-field-initializers - DEBIAN_VERSION=jessie + - DOCKER_USER=amd64 - APT_INSTALL=clang - env: - BUILD_SCRIPT=windows_travis.sh diff --git a/.travis/gta5view.nsi b/.travis/gta5view.nsi index 5bd9285..402b0f4 100644 --- a/.travis/gta5view.nsi +++ b/.travis/gta5view.nsi @@ -12,6 +12,7 @@ !define REG_ROOT "HKLM" !define REG_APP_PATH "Software\Microsoft\Windows\CurrentVersion\App Paths\${MAIN_APP_EXE}" !define UNINSTALL_PATH "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}" +!define LICENSE_TXT "../LICENSE" ###################################################################### diff --git a/.travis/travis.sh b/.travis/travis.sh index 4910777..413c830 100755 --- a/.travis/travis.sh +++ b/.travis/travis.sh @@ -12,7 +12,7 @@ if [ `git name-rev --tags --name-only $(git rev-parse HEAD)` == "undefined" ]; t export PACKAGE_VERSION=$(grep -oE '^[^\-]*' <<< $APPLICATION_VERSION) export PACKAGE_BUILD=$(grep -oP '\-\K.+' <<< $APPLICATION_VERSION) export EXECUTABLE_VERSION=${PACKAGE_VERSION}${PACKAGE_BUILD} -if [[ ! ${PACKAGE_BUILD} ]]; then export PACKAGE_BUILD=${TRAVIS_BUILD_NUMBER}; fi +if [[ ! ${PACKAGE_BUILD} ]]; then export PACKAGE_BUILD=1; fi export PROJECT_DIR=$(pwd) .travis/${BUILD_SCRIPT} diff --git a/.travis/wininstall_build.sh b/.travis/wininstall_build.sh index ac2689e..806292c 100755 --- a/.travis/wininstall_build.sh +++ b/.travis/wininstall_build.sh @@ -1,6 +1,7 @@ #!/bin/bash -apt-get update && apt-get install -y nsis && \ +apt-get update -qq && \ +apt-get install -qq nsis && \ # Creating folders cd ${PROJECT_DIR} && \ diff --git a/LICENSE b/LICENSE index 9cecc1d..f288702 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -631,8 +631,8 @@ to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - {one line to give the program's name and a brief idea of what it does.} - Copyright (C) {year} {name of author} + + Copyright (C) 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 @@ -645,14 +645,14 @@ the "copyright" line and a pointer to where the full notice is found. GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see . + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: - {project} Copyright (C) {year} {fullname} + Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. @@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see -. +. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. +. diff --git a/LICENSE.GPL b/LICENSE.GPL index e963df8..f288702 100644 --- a/LICENSE.GPL +++ b/LICENSE.GPL @@ -1,7 +1,7 @@ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -620,3 +620,55 @@ copy of the Program in return for a fee. END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/LICENSE.LGPL b/LICENSE.LGPL index add53b4..0a04128 100644 --- a/LICENSE.LGPL +++ b/LICENSE.LGPL @@ -1,459 +1,165 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/README.md b/README.md index 8cbe82f..b3e11d5 100644 --- a/README.md +++ b/README.md @@ -8,25 +8,35 @@ Grand Theft Auto V Savegame and Snapmatic viewer/editor #### Screenshots - + -#### Build gta5view Debian/Ubuntu +#### Build gta5view for Debian/Ubuntu + # Note: You can use 'sudo make install' instead of 'sudo checkinstall' sudo apt-get install git gcc g++ qtbase5-dev qttranslations5-l10n qt5-qmake make checkinstall - git clone https://github.com/SyDevTeam/gta5view - mkdir gta5view.build && cd gta5view.build - qmake -qt=5 GTA5SYNC_PREFIX=/usr ../gta5view/gta5view.pro # or just qmake GTA5SYNC_PREFIX=/usr ../gta5view/gta5view.pro - make + git clone https://github.com/SyDevTeam/gta5view && cd gta5view + mkdir -p build && cd build + qmake -qt=5 GTA5SYNC_PREFIX=/usr ../gta5view.pro # or just qmake GTA5SYNC_PREFIX=/usr ../gta5view.pro + make -j $(nproc --all) sudo checkinstall --pkgname=gta5view --pkggroup=utility --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n + +#### Build gta5view for Windows -#### Build gta5view Windows (Beginner) + # Note: Install Docker Community Edition and Git before continuing + git clone https://github.com/SyDevTeam/gta5view && cd gta5view + docker pull syping/qt5-static-mingw + docker run --rm -v ${PWD}:/gta5view -it syping/qt5-static-mingw + cd /gta5view && mkdir -p build && cd build + qmake-static ../gta5view.pro + make -j $(nproc --all) -Download Qt Framework and install it.
-Take the Online Installer and choose the MinGW version or install Microsoft Visual Studio 2013/2015 Community
+#### Build gta5view for Windows (Beginner) + +Download the Qt Framework and install the MinGW version.
Download the Source Code over GitHub or with your Git client.
Open the gta5view.pro Project file with Qt Creator and build it over Qt Creator.
#### Download Binary Releases -Go to gta5view release and download the .exe file for Windows, .deb file for Debian/Ubuntu and .dmg file for OS X +Go to gta5view release and download the .exe file for Windows, .deb file for Debian/Ubuntu and .dmg file for OS X. From 4af7e2e819d8a69c7c93ceb4ea1d46ea79c602d4 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 8 Feb 2018 13:00:48 +0100 Subject: [PATCH 066/359] 1.5.0 release --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b3e11d5..01563d9 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Grand Theft Auto V Savegame and Snapmatic viewer/editor - Let choose between multiple Social Club accounts as GTA V profiles IDs #### Screenshots - + @@ -34,7 +34,7 @@ Grand Theft Auto V Savegame and Snapmatic viewer/editor #### Build gta5view for Windows (Beginner) Download the Qt Framework and install the MinGW version.
-Download the Source Code over GitHub or with your Git client.
+Download the Source Code over GitHub or with your Git client.
Open the gta5view.pro Project file with Qt Creator and build it over Qt Creator.
#### Download Binary Releases From fbc9e66de2bea94e1157ed0463d327a387b444fc Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 9 Feb 2018 22:28:31 +0100 Subject: [PATCH 067/359] add missing imageformats and fix slot disconnect error --- .travis/gta5view.nsi | 27 ++++++++++++++++++++++++--- PictureDialog.cpp | 6 +++++- config.h | 2 +- res/app.rc | 8 ++++---- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/.travis/gta5view.nsi b/.travis/gta5view.nsi index 402b0f4..1e49cdb 100644 --- a/.travis/gta5view.nsi +++ b/.travis/gta5view.nsi @@ -109,6 +109,7 @@ File "/opt/windev/libjpeg-turbo-latest_qt64d/bin/libjpeg-62.dll" File "/opt/windev/qt64d-latest/bin/Qt5Core.dll" File "/opt/windev/qt64d-latest/bin/Qt5Gui.dll" File "/opt/windev/qt64d-latest/bin/Qt5Network.dll" +File "/opt/windev/qt64d-latest/bin/Qt5Svg.dll" File "/opt/windev/qt64d-latest/bin/Qt5Widgets.dll" File "/opt/windev/qt64d-latest/bin/Qt5WinExtras.dll" SetOutPath "$INSTDIR\lang" @@ -122,10 +123,20 @@ File "../res/qtbase_de.qm" File "../res/qtbase_fr.qm" File "../res/qtbase_ru.qm" File "../res/qtbase_zh_TW.qm" +SetOutPath "$INSTDIR\audio" +File "/opt/windev/qt64d-latest/plugins/qtaudio_windows.dll" +SetOutPath "$INSTDIR\imageformats" +File "/opt/windev/qt64d-latest/plugins/imageformats/qgif.dll" +File "/opt/windev/qt64d-latest/plugins/imageformats/qicns.dll" +File "/opt/windev/qt64d-latest/plugins/imageformats/qico.dll" +File "/opt/windev/qt64d-latest/plugins/imageformats/qjpeg.dll" +File "/opt/windev/qt64d-latest/plugins/imageformats/qsvg.dll" +File "/opt/windev/qt64d-latest/plugins/imageformats/qtga.dll" +File "/opt/windev/qt64d-latest/plugins/imageformats/qtiff.dll" +File "/opt/windev/qt64d-latest/plugins/imageformats/qwbmp.dll" +File "/opt/windev/qt64d-latest/plugins/imageformats/qwebp.dll" SetOutPath "$INSTDIR\platforms" File "/opt/windev/qt64d-latest/plugins/platforms/qwindows.dll" -SetOutPath "$INSTDIR\imageformats" -File "/opt/windev/qt64d-latest/plugins/imageformats/qjpeg.dll" SectionEnd ###################################################################### @@ -183,6 +194,7 @@ Delete "$INSTDIR\libjpeg-62.dll" Delete "$INSTDIR\Qt5Core.dll" Delete "$INSTDIR\Qt5Gui.dll" Delete "$INSTDIR\Qt5Network.dll" +Delete "$INSTDIR\Qt5Svg.dll" Delete "$INSTDIR\Qt5Widgets.dll" Delete "$INSTDIR\Qt5WinExtras.dll" Delete "$INSTDIR\lang\gta5sync_en_US.qm" @@ -195,8 +207,17 @@ Delete "$INSTDIR\lang\qtbase_de.qm" Delete "$INSTDIR\lang\qtbase_fr.qm" Delete "$INSTDIR\lang\qtbase_ru.qm" Delete "$INSTDIR\lang\qtbase_zh_TW.qm" -Delete "$INSTDIR\platforms\qwindows.dll" +Delete "$INSTDIR\audio\qtaudio_windows.dll" +Delete "$INSTDIR\imageformats\qgif.dll" +Delete "$INSTDIR\imageformats\qicns.dll" +Delete "$INSTDIR\imageformats\qico.dll" Delete "$INSTDIR\imageformats\qjpeg.dll" +Delete "$INSTDIR\imageformats\qsvg.dll" +Delete "$INSTDIR\imageformats\qtga.dll" +Delete "$INSTDIR\imageformats\qtiff.dll" +Delete "$INSTDIR\imageformats\qwbmp.dll" +Delete "$INSTDIR\imageformats\qwebp.dll" +Delete "$INSTDIR\platforms\qwindows.dll" RmDir "$INSTDIR\lang" RmDir "$INSTDIR\platforms" diff --git a/PictureDialog.cpp b/PictureDialog.cpp index df89a44..0ba79e9 100644 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -604,7 +604,11 @@ void PictureDialog::renderOverlayPicture() void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, bool _indexed, int _index) { - if (smpic != nullptr) smpic->disconnect(); + if (smpic != nullptr) + { + QObject::disconnect(smpic, SIGNAL(updated()), this, SLOT(updated())); + QObject::disconnect(smpic, SIGNAL(customSignal(QString)), this, SLOT(customSignal(QString))); + } snapmaticPicture = QImage(); indexed = _indexed; index = _index; diff --git a/config.h b/config.h index cba07ee..d9bc786 100644 --- a/config.h +++ b/config.h @@ -49,7 +49,7 @@ #endif #ifndef GTA5SYNC_APPVER -#define GTA5SYNC_APPVER "1.5.0" +#define GTA5SYNC_APPVER "1.5.1" #endif #ifdef GTA5SYNC_BUILDTYPE_REL diff --git a/res/app.rc b/res/app.rc index 80cdaec..a5ce270 100644 --- a/res/app.rc +++ b/res/app.rc @@ -7,8 +7,8 @@ CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gta5view.exe.manifest" #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 1, 5, 0, 0 -PRODUCTVERSION 1, 5, 0, 0 +FILEVERSION 1, 5, 1, 0 +PRODUCTVERSION 1, 5, 1, 0 FILEFLAGSMASK 0x3fL FILEFLAGS 0 FILEOS VOS_NT_WINDOWS32 @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view" - VALUE "FileVersion", "1.5.0" + VALUE "FileVersion", "1.5.1" VALUE "InternalName", "gta5view" VALUE "LegalCopyright", "Copyright © 2016-2018 Syping" VALUE "OriginalFilename", "gta5view.exe" VALUE "ProductName", "gta5view" - VALUE "ProductVersion", "1.5.0" + VALUE "ProductVersion", "1.5.1" END END END From 12f8430f343b80ad1be717c587329686720f6725 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 9 Feb 2018 22:30:15 +0100 Subject: [PATCH 068/359] fix .nsi directory of installed library --- .travis/gta5view.nsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis/gta5view.nsi b/.travis/gta5view.nsi index 1e49cdb..f561462 100644 --- a/.travis/gta5view.nsi +++ b/.travis/gta5view.nsi @@ -124,7 +124,7 @@ File "../res/qtbase_fr.qm" File "../res/qtbase_ru.qm" File "../res/qtbase_zh_TW.qm" SetOutPath "$INSTDIR\audio" -File "/opt/windev/qt64d-latest/plugins/qtaudio_windows.dll" +File "/opt/windev/qt64d-latest/plugins/audio/qtaudio_windows.dll" SetOutPath "$INSTDIR\imageformats" File "/opt/windev/qt64d-latest/plugins/imageformats/qgif.dll" File "/opt/windev/qt64d-latest/plugins/imageformats/qicns.dll" From 8a3bd5497ea82a8d25797f8409112a4b6a577271 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 23 Feb 2018 11:54:19 +0100 Subject: [PATCH 069/359] improve readme --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 01563d9..d61d434 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ Grand Theft Auto V Savegame and Snapmatic viewer/editor - Let choose between multiple Social Club accounts as GTA V profiles IDs #### Screenshots - - - +![Snapmatic Picture Viewer](https://i.imgur.com/dQdW3hx.png) +![User Interface](https://i.imgur.com/SRNQdq6.png) +![Snapmatic Properties](https://i.imgur.com/j1Lodiu.png) #### Build gta5view for Debian/Ubuntu @@ -33,10 +33,10 @@ Grand Theft Auto V Savegame and Snapmatic viewer/editor #### Build gta5view for Windows (Beginner) -Download the Qt Framework and install the MinGW version.
-Download the Source Code over GitHub or with your Git client.
-Open the gta5view.pro Project file with Qt Creator and build it over Qt Creator.
+Download the [Qt Framework](https://www.qt.io/) and install the MinGW version. +Download the Source Code over [GitHub](https://github.com/SyDevTeam/gta5view/archive/1.5.x.zip) or with your Git client. +Open the gta5view.pro Project file with Qt Creator and build it over Qt Creator. #### Download Binary Releases -Go to gta5view release and download the .exe file for Windows, .deb file for Debian/Ubuntu and .dmg file for OS X. +Go to [gta5view release](https://github.com/SyDevTeam/gta5view/releases) and download the .exe file for Windows, .deb file for Debian/Ubuntu and .dmg file for OS X. From 9272f0d3c1f68a545adba0bdc600224765522b6a Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 23 Feb 2018 11:59:30 +0100 Subject: [PATCH 070/359] improved readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d61d434..9be8cfd 100644 --- a/README.md +++ b/README.md @@ -33,8 +33,8 @@ Grand Theft Auto V Savegame and Snapmatic viewer/editor #### Build gta5view for Windows (Beginner) -Download the [Qt Framework](https://www.qt.io/) and install the MinGW version. -Download the Source Code over [GitHub](https://github.com/SyDevTeam/gta5view/archive/1.5.x.zip) or with your Git client. +Download the [Qt Framework](https://www.qt.io/) and install the MinGW version. +Download the Source Code over [GitHub](https://github.com/SyDevTeam/gta5view/archive/1.5.x.zip) or with your Git client. Open the gta5view.pro Project file with Qt Creator and build it over Qt Creator. #### Download Binary Releases From 7662b374e55b8ac7c22a142a8587f2d5bcd99857 Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 25 Feb 2018 14:13:35 +0100 Subject: [PATCH 071/359] Fixed issue with profile not closed after change GTA folder --- UserInterface.cpp | 4 ++++ config.h | 2 +- res/app.rc | 8 ++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/UserInterface.cpp b/UserInterface.cpp index 5c49842..7d63257 100644 --- a/UserInterface.cpp +++ b/UserInterface.cpp @@ -602,6 +602,10 @@ void UserInterface::on_actionSelect_GTA_Folder_triggered() QString GTAV_Folder_Temp = QFileDialog::getExistingDirectory(this, tr("Select GTA V Folder..."), StandardPaths::documentsLocation(), QFileDialog::ShowDirsOnly); if (QFileInfo(GTAV_Folder_Temp).exists()) { + if (profileOpen) + { + closeProfile_p(); + } GTAV_Folder = GTAV_Folder_Temp; QDir::setCurrent(GTAV_Folder); AppEnv::setGameFolder(GTAV_Folder); diff --git a/config.h b/config.h index d9bc786..0489d29 100644 --- a/config.h +++ b/config.h @@ -49,7 +49,7 @@ #endif #ifndef GTA5SYNC_APPVER -#define GTA5SYNC_APPVER "1.5.1" +#define GTA5SYNC_APPVER "1.5.2" #endif #ifdef GTA5SYNC_BUILDTYPE_REL diff --git a/res/app.rc b/res/app.rc index a5ce270..28c0b2a 100644 --- a/res/app.rc +++ b/res/app.rc @@ -7,8 +7,8 @@ CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gta5view.exe.manifest" #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 1, 5, 1, 0 -PRODUCTVERSION 1, 5, 1, 0 +FILEVERSION 1, 5, 2, 0 +PRODUCTVERSION 1, 5, 2, 0 FILEFLAGSMASK 0x3fL FILEFLAGS 0 FILEOS VOS_NT_WINDOWS32 @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view" - VALUE "FileVersion", "1.5.1" + VALUE "FileVersion", "1.5.2" VALUE "InternalName", "gta5view" VALUE "LegalCopyright", "Copyright © 2016-2018 Syping" VALUE "OriginalFilename", "gta5view.exe" VALUE "ProductName", "gta5view" - VALUE "ProductVersion", "1.5.1" + VALUE "ProductVersion", "1.5.2" END END END From 7e8e452850000f885401952935c60c19c295b1ca Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 3 Apr 2018 06:35:35 +0200 Subject: [PATCH 072/359] adapt .nsi script for docker image --- .travis/gta5view.nsi | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis/gta5view.nsi b/.travis/gta5view.nsi index f561462..043dcf1 100644 --- a/.travis/gta5view.nsi +++ b/.travis/gta5view.nsi @@ -3,7 +3,7 @@ !define APP_NAME "gta5view" !define COMP_NAME "Syping" !define WEB_SITE "https://gta5view.syping.de/" -!define VERSION "1.5.0.0" +!define VERSION "1.5.2.0" !define COPYRIGHT "Copyright © 2016-2018 Syping" !define DESCRIPTION "Grand Theft Auto V Savegame and Snapmatic Viewer/Editor" !define INSTALLER_NAME "gta5view_setup.exe" @@ -103,8 +103,8 @@ SetOutPath "$INSTDIR" File "../build/release/gta5view.exe" File "/usr/lib/gcc/x86_64-w64-mingw32/6.3-win32/libgcc_s_seh-1.dll" File "/usr/lib/gcc/x86_64-w64-mingw32/6.3-win32/libstdc++-6.dll" -File "/opt/windev/libressl-latest_qt64d/bin/libcrypto-42.dll" -File "/opt/windev/libressl-latest_qt64d/bin/libssl-44.dll" +File "/opt/windev/libressl-latest_qt64d/bin/libcrypto-43.dll" +File "/opt/windev/libressl-latest_qt64d/bin/libssl-45.dll" File "/opt/windev/libjpeg-turbo-latest_qt64d/bin/libjpeg-62.dll" File "/opt/windev/qt64d-latest/bin/Qt5Core.dll" File "/opt/windev/qt64d-latest/bin/Qt5Gui.dll" @@ -188,8 +188,8 @@ ${INSTALL_TYPE} Delete "$INSTDIR\gta5view.exe" Delete "$INSTDIR\libgcc_s_seh-1.dll" Delete "$INSTDIR\libstdc++-6.dll" -Delete "$INSTDIR\libcrypto-42.dll" -Delete "$INSTDIR\libssl-44.dll" +Delete "$INSTDIR\libcrypto-43.dll" +Delete "$INSTDIR\libssl-45.dll" Delete "$INSTDIR\libjpeg-62.dll" Delete "$INSTDIR\Qt5Core.dll" Delete "$INSTDIR\Qt5Gui.dll" From 919bd50b6eb058f0ea2e454d52276a2f9bafbc3d Mon Sep 17 00:00:00 2001 From: VenJam1n <39222860+VenJam1n@users.noreply.github.com> Date: Sat, 12 May 2018 21:09:36 +0300 Subject: [PATCH 073/359] Add files via upload --- res/gta5sync_uk.qm | Bin 0 -> 44775 bytes res/gta5sync_uk.ts | 2253 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2253 insertions(+) create mode 100644 res/gta5sync_uk.qm create mode 100644 res/gta5sync_uk.ts diff --git a/res/gta5sync_uk.qm b/res/gta5sync_uk.qm new file mode 100644 index 0000000000000000000000000000000000000000..3c2ac1914454738805798f355f1b4ba72315aa96 GIT binary patch literal 44775 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 OzFU@U{7 + + + + AboutDialog + + + About %1 + Про %1 + + + + <span style=" font-weight:600;">%1</span><br/> +<br/> +%2<br/> +<br/> +Version %3<br/> +Created on %4<br/> +Built with Qt %5<br/> +Running with Qt %6<br/> +<br/> +%7 + <span style=" font-weight:600;">%1</span><br/> +<br/> +%2<br/> +<br/> +ВерÑÑ–Ñ %3<br/> +Створено %4<br/> +Побудовано з Qt %5<br/> +ВиконуєтьÑÑ Ð½Ð° Qt %6<br/> +<br/> +%7 + + + + &Close + &Закрити + + + + 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 +VenJam1n,https://socialclub.rockstargames.com/member/--VenJam1n-- +twitter,https://twitter.com/_VenJam1n + + + + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> +Pictures and Savegames + Проект Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду Ñ– Ñинхронізації Grand Theft Auto V Snapmatic + + + + 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> + + + + Release + Реліз + + + + Release Candidate + Реліз-Кандидат + + + + Daily Build + Щоденна Збірка + + + + Developer + Розробник + + + + Beta + Бета + + + + Alpha + Ðльфа + + + + Custom + Custom + + + + CrewDatabase + + + + No Crew + Без банди + + + + ExportDialog + + + Dialog + Діалог + + + + Export Format + Формат екÑпорту + + + + &JPEG/PNG format + &JPEG/PNG формат + + + + GTA &Snapmatic format + GTA &Snapmatic формат + + + + Export Size + ЕкÑпортувати розміром + + + + Default &Size + Стандартний &розмір + + + + &Desktop Size + &Розмір робочого Ñтолу + + + + &Custom Size + &КориÑтувацький розмір + + + + Custom Size: + КориÑтувацький розмір: + + + + x + x + + + + &Export + &ЕкÑпорт + + + + &Close + &Закрити + + + + ImageEditorDialog + + + Overwrite Image... + ПерезапиÑати зображеннÑ... + + + + + Capacity: %1 + Величина: %1 + + + + ? + ? + + + + &Import... + &Імпорт... + + + + &Overwrite + &ПерезапиÑати + + + + &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 Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ Ñ‡ÐµÑ€ÐµÐ· помилку картинки + + + + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. + Кожен знÑтий Snapmatic має різну величину, в залежноÑті від Ñкої можна зберігати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð±Ñ–Ð»ÑŒÑˆ виÑокої ÑкоÑті. + + + + ImportDialog + + + Import... + Імпорт... + + + + Picture + Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ + + + + Avatar + Ðватар + + + + + Ignore Aspect Ratio + Ігнорувати ÑÐ¿Ñ–Ð²Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ Ñторін + + + + Background + Фон + + + + + + Background Colour: <span style="color: %1">%1</span> + Фоновий колір: <span style="color: %1">%1</span> + + + + + ... + ... + + + + + + Background Image: + Фонове зображеннÑ: + + + + X + Ð¥ + + + + Force Colour in Avatar Zone + ПримуÑовий колір в зоні Ðватару + + + + Import picture + Імпортувати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ + + + + &OK + &OK + + + + Discard picture + Відхилити Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ + + + + &Cancel + &СкаÑувати + + + + + Custom Avatar + Custom Avatar Description in SC, don't use Special Character! + КориÑтувацький Ðватар + + + + + Custom Picture + Custom Picture Description in SC, don't use Special Character! + КориÑтувацьке Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ + + + + 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 + + + + File + Background Image: File + Файл + + + + JsonEditorDialog + + + Snapmatic JSON Editor + JSON редактор Snapmatic + + + + &Save + &Зберегти + + + + &Close + &Закрити + + + + JSON Error + JSON помилка + + + + MapLocationDialog + + + Snapmatic Map Viewer + ПереглÑд карти Snapmatic + + + + &Close + &Закрити + + + + &Apply + &ЗаÑтоÑувати + + + + &Revert + &Повернути + + + + &Set + &Змінити + + + + &Done + &Готово + + + + X: %1 +Y: %2 + X and Y position + X: %1 +Y: %2 + + + + OptionsDialog + + + %1 - Settings + %1 - ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ + + + + Profiles + Профілі + + + + Content Open/Select Mode + Відкривати/обирати вміÑÑ‚ + + + + Open with Singleclick + Відкривати одиночним кліком + + + + Open with Doubleclick + Відкривати подвійним кліком + + + + Select with Singleclick + Обирати одиночним кліком + + + + Default Profile + Типовий профіль + + + + Custom GTA V Folder + КориÑтувацька GTA V тека + + + + Force using Custom Folder + ВикориÑтовувати цю теку GTA V + + + + ... + ... + + + + Pictures + Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ + + + + Export Size + Розмір при екÑпорті + + + + Default: %1x%2 + Стандартно: %1x%2 + + + + Screen Resolution: %1x%2 + Ð Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ÐµÐºÑ€Ð°Ð½Ñƒ: %1x%2 + + + + + Custom Size: + КориÑтувацький розмір: + + + + x + x + + + + Ignore Aspect Ratio + Ігнорувати ÑÐ¿Ñ–Ð²Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ Ñторін + + + + Export Quality + ЯкіÑть при екÑпорті + + + + Enable Custom Quality + Увімкнути кориÑтувацьку ÑкіÑть + + + + Quality: + ЯкіÑть: + + + + %1% + %1% + + + + Picture Viewer + ПереглÑдач зображень + + + + Enable Navigation Bar + Увімкнути навігаціїйну панель + + + + Players + Гравці + + + + ID + ID + + + + Name + Ім'Ñ + + + + Feedback + ÐžÐ¿Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ + + + + Participation + УчаÑть + + + + + Participate in %1 User Statistics + ÐžÐ¿Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ %1 про уÑÑ‚Ð°Ñ‚ÐºÑƒÐ²Ð°Ð½Ð½Ñ ÐŸÐš + + + + Categories + Категорії + + + + Hardware, Application and OS Specification + ОбладнаннÑ, випуÑк програми, Ñпецифікації ОС + + + + System Language Configuration + Мовні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑиÑтеми + + + + Application Configuration + ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ + + + + Other + Інше + + + + + + Participation ID: %1 + ID учаÑника : %1 + + + + &Copy + &Копіювати + + + + + User Feedback + Відгук кориÑтувача + + + + Limit: 1 message/day + Ліміт: 1 Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ / день + + + + &Send + &ÐадіÑлати + + + + Interface + Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ + + + + Language for Interface + Мова інтерфейÑу + + + + + + + Current: %1 + Зараз: %1 + + + + Language for Areas + Мова перекладу Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ + + + + Style + Стиль + + + + Use Default Style (Restart) + ВикориÑтовувати Ñтандартний Ñтиль (ПерезапуÑк) + + + + Style: + Стиль: + + + + Font + Шрифт + + + + Always use Message Font (Windows 2003 and earlier) + Завжди викориÑтовуйте шрифт повідомлень (Windows 2003 Ñ– раніше) + + + + Sync + Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ + + + + Sync is not implemented at current time + Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð½Ðµ здійÑнюєтьÑÑ Ð² даний Ñ‡Ð°Ñ + + + + Apply changes + ЗаÑтоÑувати зміни + + + + &OK + OK, Cancel, Apply + &OK + + + + Discard changes + СкаÑувати зміни + + + + &Cancel + OK, Cancel, Apply + &СкаÑувати + + + + %1 (Next Closest Language) + First language a person can talk with a different person/application. "Native" or "Not Native". + %1 (або наÑтупна найближча мова) + + + + System + System in context of System default + Як у ÑиÑтеми + + + + %1 (Closest to Interface) + Next closest language compared to the Interface + %1 (Співпадає з інтерфейÑом) + + + + Auto + Automatic language choice. + Ðвтоматично + + + + %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 + Ðе зареєÑтрований + + + + A feedback message have to between 3-1024 characters long + ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð³ÑƒÐºÑƒ має Ñтановити від 3-1024 Ñимволів + + + + PictureDialog + + + Snapmatic Picture Viewer - %1 + ПереглÑдач зображень Snapmatic - %1 + + + + <span style=" font-weight:600;">Title: </span>%6<br/> +<span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> +<span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> +<span style=" font-weight:600;">Created: </span>%8 + <span style=" font-weight:600;">Ðазва: </span>%6<br/> +<span style=" font-weight:600;">РозташуваннÑ: </span>%7 (%1, %2, %3)<br/> +<span style=" font-weight:600;">Гравці: </span>%4 (Банда %5)<br/> +<span style=" font-weight:600;">Створено: </span>%8 + + + + Manage picture + ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñм + + + + &Manage + &Керувати + + + + Close viewer + Закрити переглÑдач + + + + &Close + &Закрити + + + + + 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 + Клавіша 1 - Режим показу аватарки +Клавіша 2 - Вкл./Викл. Оверлей +Стрілки - ÐÐ°Ð²Ñ–Ð³Ð°Ñ†Ñ–Ñ + + + + + Snapmatic Picture Viewer + ПереглÑдач фотографій Snapmatic + + + + + Failed at %1 + Помилка на%1 + + + + + + No Players + Гравців немає + + + + + No Crew + Банди немає + + + + Unknown Location + Ðевідома Ð»Ð¾ÐºÐ°Ñ†Ñ–Ñ + + + + Avatar Preview Mode +Press 1 for Default View + Режим Ð´Ð»Ñ Ð°Ð²Ð°Ñ‚Ð°Ñ€Ð¾Ðº +ÐатиÑніть 1 Ð´Ð»Ñ Ñтандартного переглÑду + + + + Export as Picture... + ЕкÑпортувати Ñк зображеннÑ... + + + + + Export + ЕкÑпорт + + + + JPEG Graphics (*.jpg *.jpeg) + JPEG Graphics (*.jpg *.jpeg) + + + + Portable Network Graphics (*.png) + Portable Network Graphics (*.png) + + + + + + + + + Export as Picture + ЕкÑпортувати Ñк Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ + + + + + Overwrite %1 with current Snapmatic picture? + ПерезапиÑати %1 поточним Snapmatic зображеннÑм? + + + + Failed to export the picture because the system occurred a write failure + Ðе вдалоÑÑ ÐµÐºÑпортувати зображеннÑ, оÑкільки в ÑиÑтемі виникла помилка запиÑу + + + + Failed to export the picture because the format detection failures + Ðе вдалоÑÑ ÐµÐºÑпортувати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‡ÐµÑ€ÐµÐ· помилки виÑÐ²Ð»ÐµÐ½Ð½Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ + + + + Failed to export the picture because the file can't be written + Ðе вдалоÑÑ ÐµÐºÑпортувати зображеннÑ, оÑкільки файл не може бути запиÑаний + + + + Failed to export the picture because of an unknown reason + Ðе вдалоÑÑ ÐµÐºÑпортувати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‡ÐµÑ€ÐµÐ· невідому причину + + + + + No valid file is selected + Вибрано невірний файл + + + + Export as Snapmatic... + ЕкÑпортувати Ñк Snapmatic... + + + + GTA V Export (*.g5e) + GTA V Export (*.g5e) + + + + GTA V Raw Export (*.auto) + GTA V RAW-екÑпорт (*.auto) + + + + Snapmatic pictures (PGTA*) + Snapmatic картинки (PGTA*) + + + + + + + + Export as Snapmatic + ЕкÑпортувати Ñк Snapmatic + + + + + Failed to export current Snapmatic picture + Ðе вдалоÑÑ ÐµÐºÑпортувати поточну фотографію Snapmatic + + + + Exported Snapmatic to "%1" because of using the .auto extension. + ЕкÑпортуєтьÑÑ Snapmatic до "%1" через викориÑÑ‚Ð°Ð½Ð½Ñ .auto розширеннÑ. + + + + PlayerListDialog + + + Edit Players... + Редагувати гравців... + + + + Available Players: + ДоÑтупні гравці: + + + + Selected Players: + Вибрані гравці: + + + + &Apply + &ЗаÑтоÑувати + + + + &Cancel + &СкаÑувати + + + + 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 вже доданий! + + + + ProfileInterface + + + Profile Interface + Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽ + + + + Loading file %1 of %2 files + Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ %1 з %2 файлів + + + + %1 %2 + %1 %2 + + + + Import file + Імпортувати файл + + + + &Import... + &Імпортувати... + + + + Close profile + Закрити профіль + + + + &Close + &Закрити + + + + + + Export file %1 of %2 files + ЕкÑпортуєтьÑÑ Ñ„Ð°Ð¹Ð» %1 з %2 файлів + + + + + + + Import... + ІмпортуваннÑ... + + + + + + + + + + + + + + + + + + + + + + + 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, оÑкільки файл неможливо розібрати правильно + + + + Enabled pictures: %1 of %2 + Увімкнено фотографії:%1 з%2 + + + + Loading... + ЗавантаженнÑ... + + + + Snapmatic Loader + Snapmatic Loader + + + + <h4>Following Snapmatic Pictures got repaired</h4>%1 + <h4>ÐаÑтупні Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð±ÑƒÐ»Ð¸ відновлені</h4>%1 + + + + Importable files (%1) + ІмпортуютьÑÑ Ñ„Ð°Ð¹Ð»Ð¸ (%1) + + + + + GTA V Export (*.g5e) + GTA V Export (*.g5e) + + + + + Savegames files (SGTA*) + Файли Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸ (SGTA*) + + + + + Snapmatic pictures (PGTA*) + Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ (PGTA*) + + + + + + No valid file is selected + Вибрані недійÑні файли + + + + + Import file %1 of %2 files + ІмпортуєтьÑÑ Ñ„Ð°Ð¹Ð» %1 з %2 файлів + + + + Import failed with... + +%1 + Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ тому що... + +%1 + + + + + Failed to read Snapmatic picture + Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Snapmatic картинку + + + + + Failed to read Savegame file + Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸ + + + + Can't import %1 because file format can't be detected + Ðеможливо імпортувати%1, оÑкільки формат файлу не може бути виÑвлений + + + + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e + Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Snapmatic, файл не починаєтьÑÑ Ð· PGTA або закінчуєтьÑÑ .g5e + + + + Failed to import the Snapmatic picture, the picture is already in the game + Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ знімок Snapmatic, картинка вже в грі + + + + Failed to import the Snapmatic picture, can't copy the file into profile + Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Snapmatic, не можна Ñкопіювати файл у профіль + + + + Failed to import the Savegame, can't copy the file into profile + Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Сейв, не можна Ñкопіювати файл у профіль + + + + Failed to import the Savegame, no Savegame slot is left + Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Сейв, немає вільного Ñлота + + + + + + + + Export selected... + ЕкÑпорт обраних... + + + + + JPG pictures and GTA Snapmatic + JPG картинки Ñ– GTA Snapmatic + + + + + JPG pictures only + Тільки JPG картинки + + + + + GTA Snapmatic only + Тільки GTA Snapmatic + + + + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: + %1 ЕкÑпортувати Snapmatic фотографії %2 <br><br> Фотографії JPG дозволÑють відкривати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð° допомогою заÑобу переглÑду зображень<br>GTA Snapmatic дає змогу імпортувати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð² гру<br><br>ЕкÑпортувати Ñк: + + + + Initialising export... + Ð†Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ ÐµÐºÑпорту... + + + + Export failed with... + +%1 + ЕкÑпортувати не вдалоÑÑ Ñ‚Ð¾Ð¼Ñƒ що... + +%1 + + + + + No Snapmatic pictures or Savegames files are selected + Ðе вибрано жодного Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ файлу Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ + + + + + + Remove selected + Видалити вибрані + + + + You really want remove the selected Snapmatic picutres and Savegame files? + Ви дійÑно хочете видалити вибрані Snapmatic фотографії та файли Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸? + + + + Failed to remove all selected Snapmatic pictures and/or Savegame files + Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ вÑÑ– обрані Snapmatic фотографії та/або Сейви + + + + + + + + + No Snapmatic pictures are selected + Ðе вибрано жодного Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ + + + + + + + + + %1 failed with... + +%2 + Action failed with... + %1 не вдалоÑÑ Ð·... + +%2 + + + + + Qualify as Avatar + Позначити Ñк Ðватар + + + + + + + Patch selected... + Вибір патчу... + + + + + + + + + + + Patch file %1 of %2 files + Патч файлу %1 з %2 файлів + + + + Qualify + %1 failed with... + ЯкіÑть + + + + + Change Players... + Зміна гравців... + + + + Change Players + %1 failed with... + Змінити гравців + + + + + + Change Crew... + Зміна банди... + + + + Failed to enter a valid Snapmatic Crew ID + Ðе вдалоÑÑ Ð²Ð²ÐµÑти дійÑний ID Банди Snapmatic + + + + Change Crew + %1 failed with... + Змінити банду + + + + + + Change Title... + Зміна назви... + + + + Failed to enter a valid Snapmatic title + Ðе вдалоÑÑ Ð²Ð²ÐµÑти дійÑний заголовок Snapmatic + + + + Change Title + %1 failed with... + Змінити назву + + + + All profile files (*.g5e SGTA* PGTA*) + УÑÑ– файли зображень (*.g5e SGTA* PGTA*) + + + + QApplication + + + Font + Шрифт + + + + Selected Font: %1 + Вибраний шрифт:%1 + + + + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? + <h4>ЛаÑкаво проÑимо до %1!</h4>Ви хочете налаштувати %1 перед викориÑтаннÑм? + + + + SavegameDialog + + + + Savegame Viewer + ПереглÑд файлів Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸ + + + + <span style=" font-weight:600;">Savegame</span><br><br>%1 + <span style=" font-weight:600;">Ігрове збереженнÑ</span><br><br>%1 + + + + &Export + &ЕкÑпорт + + + + &Close + &Закрити + + + + Failed at %1 + Помилка на %1 + + + + SavegameWidget + + + Savegame Widget + Віджет Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸ + + + + SAVE %3 - %1<br>%2 + ЗБЕРЕЖЕÐÐЯ %3 - %1<br>%2 + + + + View savegame + ПереглÑнути ігрове Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ + + + + View + ПереглÑд + + + + Copy savegame + Скопіювати файл Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ + + + + + Export + ЕкÑпорт + + + + Delete savegame + Видалити Ñейв + + + + Delete + Видалити + + + + &View + &ПереглÑд + + + + &Export + &ЕкÑпорт + + + + &Remove + &Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ + + + + &Select + &Ð’Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ + + + + &Deselect + &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ + + + + Select &All + Вибрати &уÑÑ– + + + + &Deselect All + &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ ÑƒÑÑ–Ñ… + + + + Savegame files (SGTA*) + Файли Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸ (SGTA*) + + + + All files (**) + УÑÑ– файли (**) + + + + + + + Export Savegame + ЕкÑпорт файлу Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ + + + + Overwrite %1 with current Savegame? + ПерезапиÑати %1 поточним ігровим збереженнÑм? + + + + Failed to overwrite %1 with current Savegame + Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñати %1 поточним збереженнÑм гри + + + + Failed to export current Savegame + Ðе вдалоÑÑ ÐµÐºÑпортувати поточне ігрове Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ + + + + No valid file is selected + Вибрано невірний файл + + + + Export Savegame... + ЕкÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ збереженнÑ... + + + + + AUTOSAVE - %1 +%2 + ÐВТОМÐТИЧÐЕ ЗБЕРЕЖЕÐÐЯ - %1 +%2 + + + + + SAVE %3 - %1 +%2 + ЗБЕРЕЖЕÐÐЯ %3 - %1 +%2 + + + + + WRONG FORMAT + ÐЕПРÐВИЛЬÐИЙ ФОРМÐТ + + + + UNKNOWN + ÐЕВІДОМИЙ + + + + + Delete Savegame + Видалити файл Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ + + + + Are you sure to delete %1 from your savegames? + Ви впевнені, що хочете видалити %1 зі Ñвоїх Ñейвів? + + + + Failed at deleting %1 from your savegames + Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ %1 із ваших збережених ігор + + + + SnapmaticEditor + + + + + + + + + + + Snapmatic Properties + ВлаÑтивоÑті Snapmatic + + + + Snapmatic Type + Тип Snapmatic + + + + Editor + Редактор + + + + Selfie + Селфі + + + + Regular + Звичайний + + + + Mugshot + Ðвтопортрет + + + + Meme + Мем + + + + Director + РежиÑер + + + + Snapmatic Values + Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð² Snapmatic + + + + Extras + Додатково + + + + Qualify as Avatar automatically at apply + При заÑтоÑуванні налаштувань помітити Ñк Ðватар + + + + Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture + З міткою Ñк Ðватар можливо завантажити це Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Snapmatic в профіль Social Club + + + + &Apply + &ЗаÑтоÑувати + + + + &Cancel + &СкаÑувати + + + + <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) + + + + 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 + + + + SnapmaticWidget + + + Snapmatic Widget + Віджет Snapmatic + + + + PHOTO - 00/00/00 00:00:00 + ФОТО - 00/00/00 00:00:00 + + + + View picture + ПереглÑнути Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ + + + + View + ПереглÑд + + + + Copy picture + Копіювати фото + + + + Copy + Копіювати + + + + Export picture + ЕкÑпорт фото + + + + Export + ЕкÑпорт + + + + + + Delete picture + Видалити фото + + + + Delete + Видалити + + + + Edi&t + Редагува&ти + + + + Show &In-game + Показати &у грі + + + + Hide &In-game + Сховати &у грі + + + + &Export + &ЕкÑпортувати + + + + &View + &ПереглÑнути + + + + &Remove + &Видалити + + + + &Select + &Ð’Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ + + + + &Deselect + &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ + + + + Select &All + Вибрати &уÑÑ– + + + + &Deselect All + &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ ÑƒÑÑ–Ñ… + + + + 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 у грі + + + + TelemetryDialog + + + You want help %1 to improve in the future by collection of data? + Ви хочете допомогти %1 подальшому вдоÑконаленню шлÑхом збору даних? + + + + %1 User Statistics + %1 СтатиÑтика кориÑтувачів + + + + Yes, I would like to take part. + Так, Ñ Ñ…Ð¾Ñ‚Ñ–Ð² би взÑти учаÑть. + + + + &OK + &OK + + + + UserInterface + + + + %2 - %1 + %2 - %1 + + + + Select profile + Виберіть профіль + + + + %1 %2 + %1 %2 + + + + Reload profile overview + Перезавантажити оглÑд профілю + + + + &Reload + &Перезавантажити + + + + Close %1 + Close %1 <- (gta5view/gta5sync) - %1 will be replaced automatically + Закрити %1 + + + + &Close + &Закрити + + + + &File + &Файл + + + + &Help + &Справка + + + + &Edit + &Правка + + + + &Profile + &Профіль + + + + &Selection visibility + &Вибір видимоÑті + + + + Selection &mass tools + ІнÑтрументи &маÑової вибірки + + + + + + &About %1 + &Справка %1 + + + + &Exit + &Вихід + + + + Exit + Вихід + + + + Close &Profile + Закрити &профіль + + + + &Settings + &ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ + + + + Select &All + Вибрати &вÑе + + + + &Deselect All + &СкаÑувати вибір уÑÑ–Ñ… + + + + &Export selected... + &ЕкÑпорт вибраного... + + + + &Remove selected + &Видалити вибране + + + + &Import files... + &Імпорт файлів... + + + + &Open File... + &Відкрити файл... + + + + + Select &GTA V Folder... + Вибрати &GTA V теку... + + + + + + + Select GTA V Folder... + Вибрати GTA V теку... + + + + Show In-gam&e + &Показати у грі + + + + Hi&de In-game + &Приховати у грі + + + + Change &Title... + Змінити &заголовок... + + + + Change &Crew... + Змінити &банду... + + + + &Qualify as Avatar + Позначити Ñк &аватар + + + + Change &Players... + Змінити &гравців... + + + + + + Show In-game + Показати у грі + + + + + + Hide In-game + Сховати у грі + + + + + + Select Profile + Вибрати профіль + + + + Open File... + Відкрити файл... + + + + + + + Open File + Відкрити файл + + + + Can't open %1 because of not valid file format + Ðеможливо відкрити %1 через невідомий формат файлу + + + From a6939e9a82b03a0572ec553f1edf5a1ce85ab68c Mon Sep 17 00:00:00 2001 From: Syping Date: Sat, 12 May 2018 20:34:52 +0200 Subject: [PATCH 074/359] 1.5.3 release --- .travis/gta5view.nsi | 2 +- config.h | 2 +- gta5view.pro | 4 +++- res/app.rc | 8 ++++---- res/gta5sync_uk.qm | Bin 44775 -> 44775 bytes res/gta5sync_uk.ts | 2 +- res/tr_g5p.qrc | 1 + 7 files changed, 11 insertions(+), 8 deletions(-) diff --git a/.travis/gta5view.nsi b/.travis/gta5view.nsi index 043dcf1..a4aa9e3 100644 --- a/.travis/gta5view.nsi +++ b/.travis/gta5view.nsi @@ -3,7 +3,7 @@ !define APP_NAME "gta5view" !define COMP_NAME "Syping" !define WEB_SITE "https://gta5view.syping.de/" -!define VERSION "1.5.2.0" +!define VERSION "1.5.3.0" !define COPYRIGHT "Copyright © 2016-2018 Syping" !define DESCRIPTION "Grand Theft Auto V Savegame and Snapmatic Viewer/Editor" !define INSTALLER_NAME "gta5view_setup.exe" diff --git a/config.h b/config.h index 0489d29..f32ea2a 100644 --- a/config.h +++ b/config.h @@ -49,7 +49,7 @@ #endif #ifndef GTA5SYNC_APPVER -#define GTA5SYNC_APPVER "1.5.2" +#define GTA5SYNC_APPVER "1.5.3" #endif #ifdef GTA5SYNC_BUILDTYPE_REL diff --git a/gta5view.pro b/gta5view.pro index ca5b45a..09a47f8 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -130,6 +130,7 @@ TRANSLATIONS += \ res/gta5sync_de.ts \ res/gta5sync_fr.ts \ res/gta5sync_ru.ts \ + res/gta5sync_uk.ts \ res/gta5sync_zh_TW.ts \ lang/gta5sync_no.ts @@ -142,6 +143,7 @@ DISTFILES += res/app.rc \ res/gta5sync_de.ts \ res/gta5sync_fr.ts \ res/gta5sync_ru.ts \ + res/gta5sync_uk.ts \ res/gta5sync_zh_TW.ts \ res/gta5view.exe.manifest \ res/gta5view.png \ @@ -211,7 +213,7 @@ contains(DEFINES, GTA5SYNC_QCONF){ !contains(DEFINES, GTA5SYNC_QCONF_IN){ RESOURCES -= res/tr_g5p.qrc langfiles.path = $$GTA5SYNC_PREFIX/share/gta5view/translations - langfiles.files = $$PWD/res/gta5sync_en_US.qm $$PWD/res/gta5sync_de.qm $$PWD/res/gta5sync_fr.qm $$PWD/res/gta5sync_ru.qm $$PWD/res/gta5sync_zh_TW.qm $$PWD/res/qtbase_en_GB.qm $$PWD/res/qtbase_zh_TW.qm + langfiles.files = $$PWD/res/gta5sync_en_US.qm $$PWD/res/gta5sync_de.qm $$PWD/res/gta5sync_fr.qm $$PWD/res/gta5sync_ru.qm $$PWD/res/gta5sync_uk.qm $$PWD/res/gta5sync_zh_TW.qm $$PWD/res/qtbase_en_GB.qm $$PWD/res/qtbase_zh_TW.qm INSTALLS += langfiles } } diff --git a/res/app.rc b/res/app.rc index 28c0b2a..05cb0c4 100644 --- a/res/app.rc +++ b/res/app.rc @@ -7,8 +7,8 @@ CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gta5view.exe.manifest" #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 1, 5, 2, 0 -PRODUCTVERSION 1, 5, 2, 0 +FILEVERSION 1, 5, 3, 0 +PRODUCTVERSION 1, 5, 3, 0 FILEFLAGSMASK 0x3fL FILEFLAGS 0 FILEOS VOS_NT_WINDOWS32 @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view" - VALUE "FileVersion", "1.5.2" + VALUE "FileVersion", "1.5.3" VALUE "InternalName", "gta5view" VALUE "LegalCopyright", "Copyright © 2016-2018 Syping" VALUE "OriginalFilename", "gta5view.exe" VALUE "ProductName", "gta5view" - VALUE "ProductVersion", "1.5.2" + VALUE "ProductVersion", "1.5.3" END END END diff --git a/res/gta5sync_uk.qm b/res/gta5sync_uk.qm index 3c2ac1914454738805798f355f1b4ba72315aa96..58a07c654d8821a3d15c9d3fd1349890f0002126 100644 GIT binary patch delta 15 XcmaEUm+ARkrVal^7(+IRKA#ByL;DBp delta 15 XcmaEUm+ARkrVal^7)v&ZKA#ByM4Jc< diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts index 4ebafc1..464979b 100644 --- a/res/gta5sync_uk.ts +++ b/res/gta5sync_uk.ts @@ -48,7 +48,7 @@ Running with Qt %6<br/> 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 VenJam1n,https://socialclub.rockstargames.com/member/--VenJam1n-- -twitter,https://twitter.com/_VenJam1n +Twitter,https://twitter.com/_VenJam1n diff --git a/res/tr_g5p.qrc b/res/tr_g5p.qrc index bfd7e7e..c8ab30f 100644 --- a/res/tr_g5p.qrc +++ b/res/tr_g5p.qrc @@ -4,6 +4,7 @@ gta5sync_de.qm gta5sync_fr.qm gta5sync_ru.qm + gta5sync_uk.qm gta5sync_zh_TW.qm From eb505c7d8a89da81fb0881c6a54b5baa8d59344a Mon Sep 17 00:00:00 2001 From: Syping Date: Sat, 12 May 2018 21:55:50 +0200 Subject: [PATCH 075/359] update qt translation files --- .travis/gta5view.nsi | 4 ++++ res/qt_uk.qm | Bin 0 -> 215879 bytes res/qtbase_uk.qm | Bin 0 -> 158434 bytes res/tr_qt4.qrc | 1 + res/tr_qt5.qrc | 1 + 5 files changed, 6 insertions(+) create mode 100644 res/qt_uk.qm create mode 100644 res/qtbase_uk.qm diff --git a/.travis/gta5view.nsi b/.travis/gta5view.nsi index a4aa9e3..b117b9d 100644 --- a/.travis/gta5view.nsi +++ b/.travis/gta5view.nsi @@ -117,11 +117,13 @@ File "../res/gta5sync_en_US.qm" File "../res/gta5sync_de.qm" File "../res/gta5sync_fr.qm" File "../res/gta5sync_ru.qm" +File "../res/gta5sync_uk.qm" File "../res/gta5sync_zh_TW.qm" File "../res/qtbase_en_GB.qm" File "../res/qtbase_de.qm" File "../res/qtbase_fr.qm" File "../res/qtbase_ru.qm" +File "../res/qtbase_uk.qm" File "../res/qtbase_zh_TW.qm" SetOutPath "$INSTDIR\audio" File "/opt/windev/qt64d-latest/plugins/audio/qtaudio_windows.dll" @@ -201,11 +203,13 @@ Delete "$INSTDIR\lang\gta5sync_en_US.qm" Delete "$INSTDIR\lang\gta5sync_de.qm" Delete "$INSTDIR\lang\gta5sync_fr.qm" Delete "$INSTDIR\lang\gta5sync_ru.qm" +Delete "$INSTDIR\lang\gta5sync_uk.qm" Delete "$INSTDIR\lang\gta5sync_zh_TW.qm" Delete "$INSTDIR\lang\qtbase_en_GB.qm" Delete "$INSTDIR\lang\qtbase_de.qm" Delete "$INSTDIR\lang\qtbase_fr.qm" Delete "$INSTDIR\lang\qtbase_ru.qm" +Delete "$INSTDIR\lang\qtbase_uk.qm" Delete "$INSTDIR\lang\qtbase_zh_TW.qm" Delete "$INSTDIR\audio\qtaudio_windows.dll" Delete "$INSTDIR\imageformats\qgif.dll" diff --git a/res/qt_uk.qm b/res/qt_uk.qm new file mode 100644 index 0000000000000000000000000000000000000000..112ca5c884fea04d7ee8306f43fa8169442830c8 GIT binary patch literal 215879 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�U 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 Ls{G6O(NF(B>M&jF literal 0 HcmV?d00001 diff --git a/res/qtbase_uk.qm b/res/qtbase_uk.qm new file mode 100644 index 0000000000000000000000000000000000000000..e24be7f3d7c6b9efcb8eecd84b4774ebe6b9d744 GIT binary patch literal 158434 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.qm qt_fr.qm qt_ru.qm + qt_uk.qm qt_zh_TW.qm diff --git a/res/tr_qt5.qrc b/res/tr_qt5.qrc index e4970a9..1141d73 100644 --- a/res/tr_qt5.qrc +++ b/res/tr_qt5.qrc @@ -4,6 +4,7 @@ qtbase_de.qm qtbase_fr.qm qtbase_ru.qm + qtbase_uk.qm qtbase_zh_TW.qm From 65bc740b88139a3bb14986d858e4d082ccb480b3 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 24 May 2018 01:27:44 +0200 Subject: [PATCH 076/359] Fix translation issues and update location files --- .travis/gta5view.nsi | 2 +- AboutDialog.cpp | 15 +++++++ AboutDialog.h | 1 + AboutDialog.ui | 3 -- TranslationClass.cpp | 5 ++- config.h | 2 +- res/app.qrc | 6 +++ res/app.rc | 8 ++-- res/global.de.ini | 4 -- res/global.en.ini | 5 --- res/global.es.ini | 7 --- res/global.es_MX.ini | 100 ++++++++++++++++++++++++++++++++++++++++++ res/global.fr.ini | 5 --- res/global.it.ini | 99 +++++++++++++++++++++++++++++++++++++++++ res/global.ja.ini | 6 --- res/global.ko.ini | 100 ++++++++++++++++++++++++++++++++++++++++++ res/global.pl.ini | 95 +++++++++++++++++++++++++++++++++++++++ res/global.pt.ini | 99 +++++++++++++++++++++++++++++++++++++++++ res/global.pt.loc | 1 + res/global.ru.ini | 6 --- res/global.zh.ini | 5 --- res/gta5sync_fr.qm | Bin 43968 -> 43988 bytes res/gta5sync_fr.ts | 4 +- res/gta5sync_uk.qm | Bin 44775 -> 45227 bytes res/gta5sync_uk.ts | 8 ++-- res/gta5sync_zh_TW.qm | Bin 33855 -> 33859 bytes res/gta5sync_zh_TW.ts | 4 +- 27 files changed, 532 insertions(+), 58 deletions(-) create mode 100644 res/global.es_MX.ini create mode 100644 res/global.it.ini create mode 100644 res/global.ko.ini create mode 100644 res/global.pl.ini create mode 100644 res/global.pt.ini create mode 100644 res/global.pt.loc diff --git a/.travis/gta5view.nsi b/.travis/gta5view.nsi index b117b9d..becda49 100644 --- a/.travis/gta5view.nsi +++ b/.travis/gta5view.nsi @@ -3,7 +3,7 @@ !define APP_NAME "gta5view" !define COMP_NAME "Syping" !define WEB_SITE "https://gta5view.syping.de/" -!define VERSION "1.5.3.0" +!define VERSION "1.5.4.0" !define COPYRIGHT "Copyright © 2016-2018 Syping" !define DESCRIPTION "Grand Theft Auto V Savegame and Snapmatic Viewer/Editor" !define INSTALLER_NAME "gta5view_setup.exe" diff --git a/AboutDialog.cpp b/AboutDialog.cpp index 20d1296..e9fe88e 100644 --- a/AboutDialog.cpp +++ b/AboutDialog.cpp @@ -16,7 +16,9 @@ * along with this program. If not, see . *****************************************************************************/ +#include #include +#include #include "AboutDialog.h" #include "ui_AboutDialog.h" #include "AppEnv.h" @@ -117,3 +119,16 @@ AboutDialog::~AboutDialog() { delete ui; } + +void AboutDialog::on_labAbout_linkActivated(const QString &link) +{ + if (link.left(12) == "g5e://about?") + { + QStringList aboutStrList = QString(link).remove(0, 12).split(":"); + QMessageBox::information(this, QString::fromUtf8(QByteArray::fromBase64(aboutStrList.at(0).toUtf8())), QString::fromUtf8(QByteArray::fromBase64(aboutStrList.at(1).toUtf8()))); + } + else + { + QDesktopServices::openUrl(QUrl(link)); + } +} diff --git a/AboutDialog.h b/AboutDialog.h index a160ae9..c9eecdf 100644 --- a/AboutDialog.h +++ b/AboutDialog.h @@ -34,6 +34,7 @@ public: ~AboutDialog(); private slots: + void on_labAbout_linkActivated(const QString &link); private: Ui::AboutDialog *ui; diff --git a/AboutDialog.ui b/AboutDialog.ui index 5093373..1fa6003 100644 --- a/AboutDialog.ui +++ b/AboutDialog.ui @@ -43,9 +43,6 @@ Running with Qt %6<br/> false - - true - Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse diff --git a/TranslationClass.cpp b/TranslationClass.cpp index 279d2cb..611d1f2 100644 --- a/TranslationClass.cpp +++ b/TranslationClass.cpp @@ -602,7 +602,7 @@ QString TranslationClass::getCountryCode(QLocale::Country country) country); if (locales.isEmpty()) return QString(); QStringList localeStrList = locales.at(0).name().split("_"); - if (localeStrList.length() <= 2) + if (localeStrList.length() >= 2) { return localeStrList.at(1).toLower(); } @@ -615,8 +615,9 @@ QString TranslationClass::getCountryCode(QLocale::Country country) QString TranslationClass::getCountryCode(QLocale locale) { QStringList localeStrList = locale.name().split("_"); - if (localeStrList.length() <= 2) + if (localeStrList.length() >= 2) { + qDebug() << localeStrList; return localeStrList.at(1).toLower(); } else diff --git a/config.h b/config.h index f32ea2a..1ebab69 100644 --- a/config.h +++ b/config.h @@ -49,7 +49,7 @@ #endif #ifndef GTA5SYNC_APPVER -#define GTA5SYNC_APPVER "1.5.3" +#define GTA5SYNC_APPVER "1.5.4" #endif #ifdef GTA5SYNC_BUILDTYPE_REL diff --git a/res/app.qrc b/res/app.qrc index d5a3d0e..461c44e 100644 --- a/res/app.qrc +++ b/res/app.qrc @@ -26,8 +26,14 @@ global.de.ini global.en.ini global.es.ini + global.es_MX.ini global.fr.ini + global.it.ini global.ja.ini + global.ko.ini + global.pl.ini + global.pt.ini + global.pt.loc global.ru.ini global.zh.ini global.zh.loc diff --git a/res/app.rc b/res/app.rc index 05cb0c4..1b2196a 100644 --- a/res/app.rc +++ b/res/app.rc @@ -7,8 +7,8 @@ CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gta5view.exe.manifest" #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 1, 5, 3, 0 -PRODUCTVERSION 1, 5, 3, 0 +FILEVERSION 1, 5, 4, 0 +PRODUCTVERSION 1, 5, 4, 0 FILEFLAGSMASK 0x3fL FILEFLAGS 0 FILEOS VOS_NT_WINDOWS32 @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view" - VALUE "FileVersion", "1.5.3" + VALUE "FileVersion", "1.5.4" VALUE "InternalName", "gta5view" VALUE "LegalCopyright", "Copyright © 2016-2018 Syping" VALUE "OriginalFilename", "gta5view.exe" VALUE "ProductName", "gta5view" - VALUE "ProductVersion", "1.5.3" + VALUE "ProductVersion", "1.5.4" END END END diff --git a/res/global.de.ini b/res/global.de.ini index fea6010..f3b21dc 100644 --- a/res/global.de.ini +++ b/res/global.de.ini @@ -41,8 +41,6 @@ HARMO="Harmony" HAWICK="Hawick" HEART="Heart Attacks Beach" HORS="Vinewood-Rennbahn" -HUD_MG_TRI_ALA="Alamosee" -HUD_MG_TRI_VES="Vespucci" HUMLAB="Humane Labs and Research" JAIL="Bolingbroke-Strafanstalt" KOREAT="Little Seoul" @@ -52,8 +50,6 @@ LDAM="Land-Act-Staudamm" LMESA="La Mesa" LOSPUER="La Puerta" LOSSF="Los Santos Freeway" -MGCR_1="South Los Santos" -MGSR_3="Raton Canyon" MIRR="Mirror Park" MORN="Morningwood" MOVIE="Richards Majestic" diff --git a/res/global.en.ini b/res/global.en.ini index 4c31ad3..1cde708 100644 --- a/res/global.en.ini +++ b/res/global.en.ini @@ -41,8 +41,6 @@ HARMO="Harmony" HAWICK="Hawick" HEART="Heart Attacks Beach" HORS="Vinewood Racetrack" -HUD_MG_TRI_ALA="Alamo Sea" -HUD_MG_TRI_VES="Vespucci" HUMLAB="Humane Labs and Research" JAIL="Bolingbroke Penitentiary" KOREAT="Little Seoul" @@ -52,9 +50,6 @@ LDAM="Land Act Dam" LMESA="La Mesa" LOSPUER="La Puerta" LOSSF="Los Santos Freeway" -MGCR_1="South Los Santos" -MGCR_6="Vespucci Canals" -MGSR_3="Raton Canyon" MIRR="Mirror Park" MORN="Morningwood" MOVIE="Richards Majestic" diff --git a/res/global.es.ini b/res/global.es.ini index dda46a7..60878a1 100644 --- a/res/global.es.ini +++ b/res/global.es.ini @@ -41,8 +41,6 @@ HARMO="Harmony" HAWICK="Hawick" HEART="Heart Attacks Beach" HORS="Circuito de Vinewood" -HUD_MG_TRI_ALA="Alamo Sea" -HUD_MG_TRI_VES="Vespucci" HUMLAB="Laboratorios Humane" JAIL="Penitenciaría de Bolingbroke" KOREAT="Little Seoul" @@ -53,14 +51,9 @@ LMESA="La Mesa" LOSPFY="Autopista de La Puerta" LOSPUER="La Puerta" LOSSF="Autopista de Los Santos" -MGCR_1="Los Santos Sur" -MGCR_6="Canales de Vespucci" -MGSR_3="Raton Canyon" MIRR="Mirror Park" MORN="Morningwood" MOVIE="Richards Majestic" -MO_CS_HIGH="Alta" -MO_HIGH="Alta" MTCHIL="Monte Chiliad" MTGORDO="Monte Gordo" MTJOSE="Monte Josiah" diff --git a/res/global.es_MX.ini b/res/global.es_MX.ini new file mode 100644 index 0000000..48476ea --- /dev/null +++ b/res/global.es_MX.ini @@ -0,0 +1,100 @@ +[Global] +AIRP="Aeropuerto Internacional de Los Santos" +ALAMO="Alamo Sea" +ALTA="Alta" +ARMYB="Fort Zancudo" +BANNING="Banning" +BAYTRE="Baytree Canyon" +BEACH="Vespucci Beach" +BHAMCA="Banham Canyon" +BRADP="Braddock Pass" +BRADT="Braddock Tunnel" +BURTON="Burton" +CALAFB="Calafia Bridge" +CANNY="Raton Canyon" +CCREAK="Cassidy Creek" +CHAMH="Chamberlain Hills" +CHIL="Vinewood Hills" +CHU="Chumash" +CMSW="Reserva Natural Mount Chiliad" +COSI="Zona Rural" +CYPRE="Cypress Flats" +DAVIS="Davis" +DELBE="Del Perro Beach" +DELPE="Del Perro" +DELSOL="La Puerta" +DESRT="Grand Senora Desert" +DOWNT="Centro" +DTVINE="Centro de Vinewood" +EAST_V="Vinewood Este" +EBURO="El Burro Heights" +ECLIPS="Eclipse" +ELGORL="Faro de El Gordo" +ELSANT="Los Santos Este" +ELYSIAN="Elysian Island" +GALFISH="Galilee" +GALLI="Galileo Park" +GOLF="Club de golf GW" +GRAPES="Grapeseed" +GREATC="Great Chaparral" +HARMO="Harmony" +HAWICK="Hawick" +HEART="Heart Attacks Beach" +HORS="Circuito de Vinewood" +HUMLAB="Humane Labs and Research" +JAIL="Penitenciaría de Bolingbroke" +KOREAT="Little Seoul" +LACT="Presa de Land Act" +LAGO="Lago Zancudo" +LDAM="Presa de Land Act" +LMESA="La Mesa" +LOSPFY="La Puerta Freeway" +LOSPUER="La Puerta" +LOSSF="Los Santos Freeway" +MIRR="Mirror Park" +MORN="Morningwood" +MOVIE="Richards Majestic" +MTCHIL="Mount Chiliad" +MTGORDO="Mount Gordo" +MTJOSE="Mount Josiah" +MURRI="Murrieta Heights" +NCHU="Chumash Norte" +OBSERV="Observatorio Galileo" +OCEANA="Océano Pacífico" +PALCOV="Paleto Cove" +PALETO="Paleto Bay" +PALFOR="Paleto Forest" +PALHIGH="Palomino Highlands" +PALMPOW="Central Palmer-Taylor" +PBLUFF="Pacific Bluffs" +PBOX="Pillbox Hill" +PROCOB="Procopio Beach" +PROL="North Yankton" +RANCHO="Rancho" +RGLEN="Richman Glen" +RICHM="Richman" +ROCKF="Rockford Hills" +RTRAK="Circuito Redwood Lights" +SANAND="San Andreas" +SANCHIA="San Chianski Mountain Range" +SANDY="Sandy Shores" +SENORA="Senora Freeway" +SKID="Mission Row" +SLAB="Stab City" +SLSANT="Los Santos Sur" +STAD="Maze Bank Arena" +STRAW="Strawberry" +TATAMO="Tataviam Mountains" +TERMINA="Terminal" +TEXTI="Textile City" +TONGVAH="Tongva Hills" +TONGVAV="Tongva Valley" +UTOPIAG="Utopia Gardens" +VCANA="Vespucci Canals" +VESP="Vespucci" +VINE="Vinewood" +WINDF="Granja eólica Ron Alternates" +WMIRROR="West Mirror Drive" +WVINE="Vinewood Oeste" +ZANCUDO="Río Zancudo" +ZENORA="Senora Freeway" diff --git a/res/global.fr.ini b/res/global.fr.ini index 130709f..977500e 100644 --- a/res/global.fr.ini +++ b/res/global.fr.ini @@ -40,8 +40,6 @@ HARMO="Harmony" HAWICK="Hawick" HEART="Heart Attacks Beach" HORS="Hippodrome de Vinewood" -HUD_MG_TRI_ALA="Alamo Sea" -HUD_MG_TRI_VES="Vespucci" HUMLAB="Laboratoires Humane" JAIL="Pénitencier de Bolingbroke" KOREAT="Little Seoul" @@ -52,9 +50,6 @@ LMESA="La Mesa" LOSPFY="La Puerta Freeway" LOSPUER="La Puerta" LOSSF="Los Santos Freeway" -MGCR_1="South Los Santos" -MGCR_6="Canaux de Vespucci" -MGSR_3="Raton Canyon" MIRR="Mirror Park" MORN="Morningwood" MOVIE="Richards Majestic" diff --git a/res/global.it.ini b/res/global.it.ini new file mode 100644 index 0000000..a98e012 --- /dev/null +++ b/res/global.it.ini @@ -0,0 +1,99 @@ +[Global] +AIRP="Los Santos International Airport" +ALAMO="Alamo Sea" +ALTA="Alta" +ARMYB="Fort Zancudo" +BANNING="Banning" +BAYTRE="Baytree Canyon" +BEACH="Vespucci Beach" +BHAMCA="Banham Canyon" +BRADP="Braddock Pass" +BRADT="Braddock Tunnel" +BURTON="Burton" +CALAFB="Calafia Bridge" +CANNY="Raton Canyon" +CCREAK="Cassidy Creek" +CHAMH="Chamberlain Hills" +CHIL="Vinewood Hills" +CHU="Chumash" +CMSW="Chiliad Mountain State Wilderness" +COSI="Campagna" +CYPRE="Cypress Flats" +DAVIS="Davis" +DELBE="Del Perro Beach" +DELPE="Del Perro" +DELSOL="La Puerta" +DESRT="Grand Senora Desert" +DOWNT="Centro" +DTVINE="Downtown Vinewood" +EAST_V="East Vinewood" +EBURO="El Burro Heights" +ECLIPS="Eclipse" +ELGORL="Faro di El Gordo" +ELSANT="East Los Santos" +ELYSIAN="Elysian Island" +GALFISH="Galilee" +GALLI="Galileo Park" +GOLF="GWC and Golfing Society" +GRAPES="Grapeseed" +GREATC="Grande boscaglia" +HARMO="Harmony" +HAWICK="Hawick" +HEART="Heart Attacks Beach" +HORS="Vinewood Racetrack" +HUMLAB="Laboratori di ricerca Humane" +JAIL="Bolingbroke Penitentiary" +KOREAT="Little Seoul" +LACT="Land Act Reservoir" +LAGO="Lago Zancudo" +LDAM="Land Act Dam" +LMESA="La Mesa" +LOSPFY="La Puerta Freeway" +LOSPUER="La Puerta" +LOSSF="Los Santos Freeway" +MIRR="Mirror Park" +MORN="Morningwood" +MOVIE="Richards Majestic" +MTCHIL="Mount Chiliad" +MTGORDO="Mount Gordo" +MTJOSE="Mount Josiah" +NCHU="North Chumash" +OBSERV="Galileo Observatory" +OCEANA="Oceano Pacifico" +PALCOV="Paleto Cove" +PALETO="Paleto Bay" +PALFOR="Paleto Forest" +PALHIGH="Palomino Highlands" +PALMPOW="Centrale elettrica Palmer-Taylor" +PBLUFF="Pacific Bluffs" +PBOX="Pillbox Hill" +PROCOB="Procopio Beach" +PROL="North Yankton" +RANCHO="Rancho" +RGLEN="Richman Glen" +RICHM="Richman" +ROCKF="Rockford Hills" +RTRAK="Redwood Lights Track" +SANAND="San Andreas" +SANCHIA="San Chianski Mountain Range" +SANDY="Sandy Shores" +SENORA="Senora Freeway" +SKID="Mission Row" +SLAB="Stab City" +SLSANT="South Los Santos" +STAD="Maze Bank Arena" +STRAW="Strawberry" +TATAMO="Tataviam Mountains" +TERMINA="Terminal" +TEXTI="Textile City" +TONGVAH="Tongva Hills" +TONGVAV="Tongva Valley" +UTOPIAG="Utopia Gardens" +VCANA="Vespucci Canals" +VESP="Vespucci" +VINE="Vinewood" +WINDF="Parco eolico Ron Alternates" +WMIRROR="West Mirror Drive" +WVINE="West Vinewood" +ZANCUDO="Zancudo River" +ZENORA="Senora Freeway" diff --git a/res/global.ja.ini b/res/global.ja.ini index 366e294..e1af8ad 100644 --- a/res/global.ja.ini +++ b/res/global.ja.ini @@ -9,7 +9,6 @@ BEACH="ベスプッãƒãƒ»ãƒ“ーãƒ" BHAMCA="ãƒãƒ³ãƒŠãƒ ã‚­ãƒ£ãƒ‹ã‚ªãƒ³" BRADP="ブラドック・パス" BRADT="ブラドック・トンãƒãƒ«" -BSS_BSTR_131="リãƒãƒ£ãƒ¼ã‚ºãƒ»ãƒžã‚¸ã‚§ã‚¹ãƒ†ã‚£ãƒƒã‚¯" BURTON="ãƒãƒ¼ãƒˆãƒ³" CALAFB="カラフィア橋" CANNY="ラトン・キャニオン" @@ -42,8 +41,6 @@ HARMO="ãƒãƒ¼ãƒ¢ãƒ‹ãƒ¼" HAWICK="ãƒã‚¦ã‚£ãƒƒã‚¯" HEART="ãƒãƒ¼ãƒˆã‚¢ã‚¿ãƒƒã‚¯ãƒ»ãƒ“ーãƒ" HORS="ãƒã‚¤ãƒ³ã‚¦ãƒƒãƒ‰ãƒ»ãƒ¬ãƒ¼ã‚¹ãƒˆãƒ©ãƒƒã‚¯" -HUD_MG_TRI_ALA="アラモ海" -HUD_MG_TRI_VES="ベスプッãƒ" HUMLAB="ヒューメイン研究所" JAIL="ボーリングブローク刑務所" KOREAT="リトル・ソウル" @@ -54,9 +51,6 @@ LMESA="ラ・メサ" LOSPFY="ラ・プエルタ高速é“è·¯" LOSPUER="ラ・プエルタ" LOSSF="ロスサントス高速é“è·¯" -MGCR_1="サウス・ロスサントス" -MGCR_6="ベスプッãƒé‹æ²³" -MGSR_3="ラトン・キャニオン" MIRR="ミラー・パーク" MORN="モーニングウッド" MOVIE="リãƒãƒ£ãƒ¼ã‚ºãƒ»ãƒžã‚¸ã‚§ã‚¹ãƒ†ã‚£ãƒƒã‚¯" diff --git a/res/global.ko.ini b/res/global.ko.ini new file mode 100644 index 0000000..11ef9f4 --- /dev/null +++ b/res/global.ko.ini @@ -0,0 +1,100 @@ +[Global] +AIRP="로스 산토스 국제공항" +ALAMO="알ë¼ëª¨ í•´" +ALTA="알타" +ARMYB="í¬íЏ 잔쿠ë„" +BANNING="ë°°ë‹" +BAYTRE="ë² ì´íŠ¸ë¦¬ 협곡" +BEACH="베스푸치 í•´ë³€" +BHAMCA="ë°´í—˜ 협곡" +BRADP="ë¸Œëž˜ë… íŒ¨ìŠ¤" +BRADT="ë¸Œëž˜ë… í„°ë„" +BURTON="버튼" +CALAFB="ì¹¼ë¼í”¼ì•„ 브릿지" +CANNY="ë ˆì´íм 협곡" +CCREAK="ìºì‹œë”” í¬ë¦¬í¬" +CHAMH="ì³„ë²Œë ˆì¸ ížì¦ˆ" +CHIL="ë°”ì¸ìš°ë“œ ížì¦ˆ" +CHU="추마쉬" +CMSW="칠리아드 마운틴 주 황무지" +COSI="시골 지역" +CYPRE="사ì´í”„레스 플랫" +DAVIS="ë°ì´ë¹„스" +DELBE="ë¸ íŽ˜ë¡œ í•´ë³€" +DELPE="ë¸ íŽ˜ë¡œ" +DELSOL="ë¼ í‘¸ì—르타" +DESRT="그랜드 ì„¸ë‡¨ë¼ ì‚¬ë§‰" +DOWNT="다운타운" +DTVINE="다운타운 ë°”ì¸ìš°ë“œ" +EAST_V="ë™ë¶€ ë°”ì¸ìš°ë“œ" +EBURO="ì—˜ 부로 하ì´ì¸ " +ECLIPS="ì´í´ë¦½ìФ" +ELGORL="ì—˜ ê³ ë¥´ë„ ë¼ì´íŠ¸í•˜ìš°ìŠ¤" +ELSANT="ë™ë¶€ 로스 산토스" +ELYSIAN="엘리시안 섬" +GALFISH="갈릴리" +GALLI="갈릴레오 파í¬" +GOLF="GWC & 골프 í´ëŸ½" +GRAPES="그레ì´í”„시드" +GREATC="그레ì´íЏ ì„€í¼ëŸ´" +HARMO="하모니" +HAWICK="호ìµ" +HEART="하트 ì–´íƒ í•´ë³€" +HORS="ë°”ì¸ìš°ë“œ ë ˆì´ìŠ¤íŠ¸ëž™" +HUMLAB="íœ´ë©”ì¸ ì‹¤í—˜ 연구소" +JAIL="ë³¼ë§ë¸Œë¡œí¬ êµë„소" +KOREAT="리틀 서울" +LACT="랜드 액트 저수지" +LAGO="ë¼ê³  잔쿠ë„" +LDAM="랜드 액트 ëŒ" +LMESA="ë¼ ë©”ì‚¬" +LOSPFY="ë¼ í‘¸ì—르타 ê³ ì†ë„로" +LOSPUER="ë¼ í‘¸ì—르타" +LOSSF="로스 산토스 ê³ ì†ë„로" +MIRR="미러 파í¬" +MORN="모ë‹ìš°ë“œ" +MOVIE="리차드 마제스틱" +MTCHIL="마운트 칠리아드" +MTGORDO="ê³ ë¥´ë„ ì‚°" +MTJOSE="마운트 조시아" +MURRI="무리ì—타 하ì´ì¸ " +NCHU="ë¶ë¶€ 추마쉬" +OBSERV="갈릴레오 관측소" +OCEANA="í¼ì‹œí”½ 오션" +PALCOV="팔레토 코브" +PALETO="팔레토 항구" +PALFOR="팔레토 숲" +PALHIGH="팔로미노 ê³ ì›" +PALMPOW="파머 í…Œì¼ëŸ¬ 발전소" +PBLUFF="í¼ì‹œí”½ 블러프" +PBOX="필박스 íž" +PROCOB="프로코피오 í•´ë³€" +PROL="ë¶ë¶€ ì–‘í¬í„´" +RANCHO="란초" +RGLEN="리치맨 글렌" +RICHM="리치맨" +ROCKF="ë½í¬ë“œ ížì¦ˆ" +RTRAK="레드우드 ë¼ì´íЏ 트랙" +SANAND="ì‚° 안드레아스" +SANCHIA="샌 치안스키 ì‚°ë§¥" +SANDY="샌디 해안" +SENORA="ì„¸ë‡¨ë¼ ê³ ì†ë„로" +SKID="미션 로우" +SLAB="스탭 시티" +SLSANT="남부 로스 산토스" +STAD="ë©”ì´ì¦ˆ ì€í–‰ 경기장" +STRAW="스트로베리" +TATAMO="타타비암 ì‚°" +TERMINA="터미ë„" +TEXTI="í…ìŠ¤íƒ€ì¼ ì‹œí‹°" +TONGVAH="통바 ížì¦ˆ" +TONGVAV="통바 계곡" +UTOPIAG="유토피아 가든" +VCANA="베스푸치 운하" +VESP="베스푸치" +VINE="ë°”ì¸ìš°ë“œ" +WINDF="ë¡  얼터네ì´íЏ 윈드 팜" +WMIRROR="서 미러 드ë¼ì´ë¸Œ" +WVINE="서부 ë°”ì¸ìš°ë“œ" +ZANCUDO="ìž”ì¿ ë„ ê°•" +ZENORA="ì„¸ë‡¨ë¼ ê³ ì†ë„로" diff --git a/res/global.pl.ini b/res/global.pl.ini new file mode 100644 index 0000000..877a864 --- /dev/null +++ b/res/global.pl.ini @@ -0,0 +1,95 @@ +[Global] +AIRP="Lotnisko miÄ™dzynarodowe Los Santos" +ALAMO="Alamo Sea" +ALTA="Alta" +ARMYB="Fort Zancudo" +BANNING="Banning" +BAYTRE="Kanion Baytree" +BEACH="Vespucci Beach" +BHAMCA="Kanion Banham" +BRADP="Przełęcz Braddock" +BRADT="Tunel Braddock" +BURTON="Burton" +CALAFB="Most Calafia" +CANNY="Kanion Raton" +CCREAK="Cassidy Creek" +CHAMH="Chamberlain Hills" +CHIL="Vinewood Hills" +CHU="Chumash" +CMSW="Park krajobrazowy Góry Chiliad" +COSI="Tereny pozamiejskie" +CYPRE="Cypress Flats" +DAVIS="Davis" +DELBE="Plaża Del Perro" +DELPE="Del Perro" +DELSOL="La Puerta" +DESRT="Pustynia Grand Senora" +DOWNT="Centrum" +DTVINE="Centrum Vinewood" +EAST_V="Wschodnie Vinewood" +EBURO="El Burro Heights" +ECLIPS="Eclipse" +ELGORL="Latarnia El Gordo" +ELSANT="Wschodnie Los Santos" +ELYSIAN="Wyspa Elizejska" +GALFISH="Galilee" +GALLI="Park Galileusza" +GOLF="Stowarzyszenie GWC & Golfing" +GRAPES="Grapeseed" +GREATC="Great Chaparral" +HARMO="Harmony" +HAWICK="Hawick" +HEART="Plaża ZawaÅ‚owców" +HORS="Tor wyÅ›cigowy Vinewood" +HUMLAB="Humane Labs and Research" +JAIL="ZakÅ‚ad karny Bolingbroke" +KOREAT="MaÅ‚y Seul" +LACT="Jezioro zaporowe" +LAGO="Lago Zancudo" +LMESA="La Mesa" +LOSPFY="La Puerta Freeway" +LOSPUER="La Puerta" +LOSSF="Los Santos Freeway" +MIRR="Park Mirror" +MORN="Morningwood" +MOVIE="Richards Majestic" +MTCHIL="Góra Chiliad" +MTGORDO="Góra Gordo" +MURRI="Murrieta Heights" +NCHU="Północne Chumash" +OBSERV="Obserwatorium Galileusza" +PALCOV="Zatoka Paleto" +PALETO="Paleto Bay" +PALFOR="Las Paleto" +PALHIGH="Wyżyna Palomino" +PALMPOW="Elektrownia Palmer-Taylor" +PBLUFF="Pacific Bluffs" +PBOX="Pillbox Hill" +PROCOB="Plaża Procopio" +PROL="North Yankton" +RANCHO="Ranczo" +RGLEN="Richman Glen" +RICHM="Richman" +ROCKF="Rockford Hills" +RTRAK="Tor Redwood Lights" +SANAND="San Andreas" +SANCHIA="Masyw górski San Chianski" +SANDY="Sandy Shores" +SKID="Mission Row" +SLAB="Stab City" +SLSANT="PoÅ‚udniowe Los Santos" +STAD="Stadion Maze Bank" +STRAW="Strawberry" +TATAMO="Góry Tataviam" +TERMINA="Terminal" +TEXTI="Textile City" +TONGVAH="Tongva Hills" +TONGVAV="Dolina Tongva" +UTOPIAG="Utopia Gardens" +VCANA="Vespucci Canals" +VESP="Vespucci" +VINE="Vinewood" +WINDF="Farma wiatrowa Ron Alternates" +WVINE="Zachodnie Vinewood" +ZANCUDO="Rzeka Zancudo" +ZENORA="Senora Freeway" diff --git a/res/global.pt.ini b/res/global.pt.ini new file mode 100644 index 0000000..8686d6d --- /dev/null +++ b/res/global.pt.ini @@ -0,0 +1,99 @@ +[Global] +AIRP="Aeroporto Internacional de Los Santos" +ALAMO="Mar Alamo" +ALTA="Alta" +ARMYB="Fort Zancudo" +BANNING="Banning" +BAYTRE="Baytree Canyon" +BEACH="Vespucci Beach" +BHAMCA="Banham Canyon" +BRADP="Braddock Pass" +BRADT="Braddock Tunnel" +BURTON="Burton" +CALAFB="Calafia Bridge" +CANNY="Raton Canyon" +CCREAK="Cassidy Creek" +CHAMH="Chamberlain Hills" +CHIL="Vinewood Hills" +CHU="Chumash" +CMSW="Reserva Natural Monte Chiliad" +COSI="Zona Rural" +CYPRE="Cypress Flats" +DAVIS="Davis" +DELBE="Del Perro Beach" +DELPE="Del Perro" +DELSOL="La Puerta" +DESRT="Deserto Grand Senora" +DOWNT="Centro" +EAST_V="East Vinewood" +EBURO="El Burro Heights" +ECLIPS="Eclipse" +ELGORL="Farol El Gordo" +ELSANT="East Los Santos" +ELYSIAN="Elysian Island" +GALFISH="Galilee" +GALLI="Galileo Park" +GOLF="Clube de campo e golfe GW" +GRAPES="Grapeseed" +GREATC="Great Chaparral" +HARMO="Harmony" +HAWICK="Hawick" +HEART="Heart Attacks Beach" +HORS="Hipódromo de Vinewood" +HUMLAB="Laboratórios e Pesquisas Humane" +JAIL="Penitenciária Bolingbroke" +KOREAT="Little Seoul" +LACT="Reservatório Land Act" +LAGO="Lago Zancudo" +LDAM="Represa Land Act" +LMESA="La Mesa" +LOSPFY="La Puerta Freeway" +LOSPUER="La Puerta" +LOSSF="Los Santos Freeway" +MIRR="Mirror Park" +MORN="Morningwood" +MOVIE="Richards Majestic" +MTCHIL="Monte Chiliad" +MTGORDO="Monte Gordo" +MTJOSE="Monte Josiah" +MURRI="Murrieta Heights" +NCHU="North Chumash" +OBSERV="Observatório Galileo" +OCEANA="Oceano Pacífico" +PALCOV="Paleto Cove" +PALETO="Paleto Bay" +PALFOR="Paleto Forest" +PALHIGH="Palomino Highlands" +PALMPOW="Usina Elétrica Palmer-Taylor" +PBLUFF="Pacific Bluffs" +PBOX="Pillbox Hill" +PROCOB="Procopio Beach" +PROL="North Yankton" +RANCHO="Rancho" +RGLEN="Richman Glen" +RICHM="Richman" +ROCKF="Rockford Hills" +RTRAK="Pista Redwood Lights" +SANAND="San Andreas" +SANCHIA="Cordilheira San Chianski" +SANDY="Sandy Shores" +SENORA="Senora Freeway" +SKID="Mission Row" +SLAB="Stab City" +SLSANT="South Los Santos" +STAD="Arena Maze Bank" +STRAW="Strawberry" +TATAMO="Montanhas Tataviam" +TERMINA="Terminal" +TEXTI="Textile City" +TONGVAH="Tongva Hills" +TONGVAV="Tongva Valley" +UTOPIAG="Utopia Gardens" +VCANA="Vespucci Canals" +VESP="Vespucci" +VINE="Vinewood" +WINDF="Parque Eólico Ron Alternates" +WMIRROR="West Mirror Drive" +WVINE="West Vinewood" +ZANCUDO="Rio Zancudo" +ZENORA="Senora Freeway" diff --git a/res/global.pt.loc b/res/global.pt.loc new file mode 100644 index 0000000..5f648c5 --- /dev/null +++ b/res/global.pt.loc @@ -0,0 +1 @@ +pt_PT diff --git a/res/global.ru.ini b/res/global.ru.ini index e53f2c9..37df696 100644 --- a/res/global.ru.ini +++ b/res/global.ru.ini @@ -41,8 +41,6 @@ HARMO="Хармони" HAWICK="Хавик" HEART="Харт-ÐттакÑ-Бич" HORS="Ð“Ð¾Ð½Ð¾Ñ‡Ð½Ð°Ñ Ñ‚Ñ€Ð°ÑÑа Вайнвуда" -HUD_MG_TRI_ALA="Ðламо-Си" -HUD_MG_TRI_VES="ВеÑпуччи" HUMLAB="Ð›Ð°Ð±Ð¾Ñ€Ð°Ñ‚Ð¾Ñ€Ð¸Ñ Humane Labs and Research" JAIL="Тюрьма Болингброук" KOREAT="Маленький Сеул" @@ -53,9 +51,6 @@ LMESA="Ла-МеÑа" LOSPFY="ШоÑÑе Ла-ПуÑрта" LOSPUER="Ла-ПуÑрта" LOSSF="ШоÑÑе ЛоÑ-СантоÑа" -MGCR_1="Южный ЛоÑ-СантоÑ" -MGCR_6="Каналы ВеÑпуччи" -MGSR_3="Каньон Ратон" MIRR="Миррор-Парк" MORN="Морнингвуд" MOVIE="Richards Majestic" @@ -103,4 +98,3 @@ WMIRROR="ВеÑÑ‚-Миррор-драйв" WVINE="Западный Вайнвуд" ZANCUDO="Река Занкудо" ZENORA="ШоÑÑе Сенора" -ZP_ORT="Порт Южного ЛоÑ-СантоÑа" diff --git a/res/global.zh.ini b/res/global.zh.ini index 35564bd..7d7a080 100644 --- a/res/global.zh.ini +++ b/res/global.zh.ini @@ -40,8 +40,6 @@ HARMO="和美尼" HAWICK="éœä¼Šå…‹" HEART="驚心海ç˜" HORS="好麥塢賽馬場" -HUD_MG_TRI_ALA="阿拉莫海" -HUD_MG_TRI_VES="卿–¯æ™®å¥‡" HUMLAB="人é“研究實驗室" JAIL="åšæž—布魯克監ç„" KOREAT="å°é¦–爾" @@ -52,9 +50,6 @@ LMESA="梅薩" LOSPFY="洛波塔高速公路" LOSPUER="洛波塔" LOSSF="æ´›è–都高速公路" -MGCR_1="å—æ´›è–都" -MGCR_6="卿–¯æ™®å¥‡é‹æ²³" -MGSR_3="雷通峽谷" MIRR="米羅公園" MORN="摩寧塢" MOVIE="æŽå¯Ÿå°Šçˆµ" diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index 256dcd13119d08729121b57ab0f897e8f09907b1..e8bc8a7e4c3eec08757b48a54e4331961a7fda7b 100644 GIT binary patch delta 3094 zcmXYzdtA@=9>-t5@9+D&e81n{WfU!`t-@L*io|Awm6}^9rl|=v(FLW2)i2^uYo`55 zMv7@;)7&DrG?nHqV(g6B$z@x|nOqiI9L}r9_x$zz-aeoA`~7-fKHpK>t1Ns8#x0Y$?ghL8mIGt9}#Up(J^>;8ZK&wcc`OY((#} zT?F1qNAxio_8W`jU$cQeIj~Kg2>4bbCub|*c@!&#_yHdjQLJVvH4tCU?gAvG;y}kD zI&=@G_YI)j({O$(9ke~foy#<&Jjd@}=zyG!c#tw42yM{F*L{Ihv&y`?8rjzQpeRw} z`ZYc5m8D6T(oRR7Xp&;r0H3*N(gyrVX}{HEl`{WtRBH-{z5#?y&=h9e0$x3#*#?2N z0?q!hdnxs=nx-doVD)&-rFT+*SqYlE8{B|?moBsJU<61H>f??nmsvkXypk z2;WvlkSR<*LBk*466Q==&Io*j1_|E`D(2f#l>v<^$N!)*>7vS_0YYWm9biF@uz!CbkbX_5 zuJ;7eE(*2c>%fxVgt{8)_qka(wayB>-B)N@!0$HP7B2kp8DQNb{Bnxz(zivp`IRHE z_O#IYdlaKsaY|^vb{>c_2!D^F9*&~$w7&z8`&cV|^#kx}g0}m~=fKb;t#dlx_xINZ zE@}q~gSAnWtAPQ}wTT(-G~}U8s-V6>HQJRgm?z^>?Wa>E=BuZ+I*^Wy8mn!Hql^*B z+Qv`0K5Cx!e9j*BmhrCkNjWR4dy%MD8mU{eXpFo8L{1iaeaVf@vqY~2U4g{wV&GFI zcIh{KtGi5Q^GAvW`OJ?)nfOWc8V(GITSHi(!wh1j z@0V2YN0kNsV&#q)d!guHs}O6;2eNBNicJ|sz+gv}3oofG=n$I@=CY=*i+5U`+12aB z-(!xjIo!p+n$G~QSBuXM2U3Dqo!GfP&QIsKy#$bgRE|v14gBJB;2$Nr==1eJMo(Sx z=2^hh5xQ)N64_R^>TG^dz{@*zrM?Vp`6^xM3Ocm1M7O0Q5{UNHRV0+kHRwK!n~o>~A11K=0aU z;neWePl}=B(;fA*gjD8W?q>a*C~7BG>JMxuU%Re9ev9P;Xd!jQFdE3l@kVQu*$ zI@ZTfe7+c1x7tuqmqLaZ_Kdj)1UxlV?RdoRY7P6Fsbu_PLw!Blq}P4Jzs61CxJoqK zIYhhjh8ynfunhpp78{;dvpjP`jJi-(;o7A}*G50)XrFOJM+N893ggI!JR0m(#R3dPlGD$@?8`%vTgDw0V}R7>FHhi;)za&kbVR9D**jPY=+7D%wNDz97s8@!kp^8j z#5tHIjV@Wk8h9#=D?G&jIwV_+p^CZrTbfxysWN_+lENM^(tk@y38Y>pEqoFHq`W7s z`i`DEKbG=CZ?H?oN(Fv_G(1qMs2dM#JSkQ7W6eZXN~eM;?E(ks%TJ4OCC>)k z_i2;YhjW)M3skzES2;Rb<>JBe!JgfCko_gsUeN*XZjw)2YvH;)`D95WTccb)bC-6? z?#XB4(}Br8^0|>3HgWRXa#O}WKn_=#Y*d*VuQH$Sw^8_)C(2h|iQ*BPEdTfob?}Ih zZ|`LyW=G0*lr&(~O1bq6b)0og(R4Z<-(S%NJF-$fRIHu4&Do$h@1rB0-Iak^lqA^%iPdODF}?@^zcv$LhtZs-J&vonNo0;4!bxg zh0m5zk^d^iPD6lYKPsg@EBM_nD)Wyi6?>_`sy3zaJ4Rj}t{lpB<4GH)9L{}@KQVTt zHo1`*FLUJu4Q#4Yjt^_)sBc!9(iuVN_e%4ocpfP=%B5odlq^50+;p175}&O+KJpV4 z`(CBTS(CUSgq2iilJ2&1>^(7c*?AF|5M^>)<-kg;Fu5v}+M|cbwWbFv>Q9r8*CQ&o z*EGX(96d97nbO9PG2W(+4#e_Em~F}%Rm?HdW-95+=Za)1)rc(R29UgsKUu`*>!u2D2SbNN6 z_%r5MhdrdeOUkU#UMZM^(d(=;7qs(ewpvq~_X62L*7;jK vxxMNQQ&Kmj4@MvZaY#p;J$qxL zj@iJ}GeG8Q2*=L?oqZwZ>;Uu&$%8<5JBYg%!G<+kA)XY0C6gi6lUoWPUg-(69|f@? z4Cr}WWt=N?zI0&8Yv_VWm;2Bi@&`PNpsPQ}7}~4MeFfu=P_BCnm%b~2k%cPr6W~gN zaCipS$^f8KEnH8EHeh`jTw4vVzXR7+!y9aH{i!!u3AaskK*vdNEBF9#90#}R5a9ji zaBDR<&#E%}DTerP!ztwmh@oN|MIr|}k2i#%AAqbxC#C^75fzU(>Ls5904HqvUb0O&ANf7b87=C*ZsnnFBq6kJGW{;591H4ZCKx0pcd% z*vk~a?-u@9-j8wz;POs7Xlq3C4H{Bj<6*H5NMD7g38R6)gBtlecOc<~%B-6j+1C1C zeYnP9FFouLtC=;vg^t|S#7$WTd~VPz==VFN-K1^t-HvMZ zKwxfv(o}qSgi>GA)IX;Ks|RVWk4ONbLp6`LI0C)C*8KeQJ)rGX&9COe!1QpT`^kJ@ zV7)M5jQb--FjJU(j)vFN3$sI4Famoaeq|W2X_7F%a4!(*A>{Ppd;6ur_Gx{9!HZQU z2tw&61DVTUl|crT3-9N*2wiPX!oC3;_;$6*zK2zgKCLpYTIKq#LfQ0YASq6$sPF=k z&k2>a&cK3dp+g!#qUHOK2GA_}6HbG*(jM_>sI_B@AJu{s$ zj)~CLea7|S6SSAp53{$7kG0Q>SXu4UMZHo--D*T*SR);JU+l4q8=Ip=m!!9W*z=;- zUrg+WgGBFP++bmVIL4<4NZBneZx{+}E*Dp~8OPr76LYeepSFeK+Q@Yr7!Y>`utJAC z6U*FpQNgn+a~#C7{ZaXOVq06TSX0y=Sn4U(r>+Nl*yOF8e@bP}eX+hOgEf6#Y<|>{ zUA;nl78+wn3Ch_vcTmPfE_ztoip zoLQc+x-xI(BV^s~dMomi$nR!Y8mUVrv3>AFpSDX<449IwBlp_Xp$ z`j=mQOGg!h+>#6o|6b*+Ln>2780^G7z}DXlof}89IMx{6Iiqmc?lic(I>Tu(*WmFb zIeepG>f8z{RBDJxtL1!aqcOw|;{yAODrXcM=HB6d(*c#EUm6l`HUR;?hO`4afwiv< zxkV{->}|t_%Nu|%k_{!N6UaV>!y|tI`aUom-Tw?&x6e>D~X$qs7O#Cx*{sVvJS2 zvN&*qjWxB`m||aJZ58bpo*Coan$zx!Wij^oWpqriXBp z9g}j<&6iut+FN?U!&9~GlGI6%C&7VJW@)P>l=6}S+Q4XvX5qok5T?O z$t#)s50y?;CUHvuD=Ez+J#OLHyK8E5;41LZFq7S?wyeYwlY>I3o%AM$uR5`!elWSY zJfm`jrfJTj=$X;Qv|uC|)!wx9*c2WKV@z588#rd3m^OOwxgwbgG$Kp+pvtTqQ$Zjd zGyP#Iu`=@5VAF{wOu?p3`PH($ZI0=2AuDO%T+^#0uHM?q+_}+{N9kB|=SOV)70=Bs z-fZzMjb_)|w30Ew?46a!878ZIw}W|z-zrwfQ?sA>G&{V)?7xK#@%du&xEkhTqQM+y z$NCQRRyoJPyzmC|vC?SHD`i-=k1ghdrrRHPR5xmrGRypms`AkGRZYWs9))O;A zXOV9;@}xXy>3qJ4SDjQ#e=9pT;D{ygeHKK!*_Om*)V0q`OZl`|>iIv;E4EZ8aQ$$- zwbLAiKP}8U^f&6eINKWOl7QI=T49}$)WQw^vL;+R0xWa3&Ra*%m5uwJ=bK?UEkHaQ*U{XEtB)R7VQ5v?s-spNw3 z^rpymbdV{oow*bIk%9$CMk3<#yY95lZ|L5`q09e2MK_E=ETZ{M3g#o`Xji9-tiJ(# CsD<$W diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index 76e14c6..40cff02 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -324,14 +324,14 @@ et les fichiers de sauvegarde de Grand Theft Auto V Custom Avatar Custom Avatar Description in SC, don't use Special Character! - Custom Avatar + Avatar personnalisé Custom Picture Custom Picture Description in SC, don't use Special Character! - Custom Picture + Image personnalisé diff --git a/res/gta5sync_uk.qm b/res/gta5sync_uk.qm index 58a07c654d8821a3d15c9d3fd1349890f0002126..8d3756b0eadafe76a88678bc1b50b03f52c62849 100644 GIT binary patch delta 3967 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 DX;>`- delta 3531 zcmZuz3sg<{9{$cg`#kpE=X8cCO-0^K(u+!jsGlhoKkVk}u zu7O@dG7}}zXjTN1sWewvH3a`^J9Sy zHeA1}Vha%%T>~sU4&lIYplK<@oMPHKMl6RFt!6>oG7VVz7~&zmJSziYEpeSQ#Pe+d z`x=N>BY;nxR7`#eT{jZ2IztyqbW4KnyWW7;Tj**}0y9JvSH{CwJcQp3fNRIOz`!6C zSG|N=gTLl+aN8SfB_mI`H8?KxhFgQ3or8ffK?qKuVyk~f-}%JxLlD~OHY3hMXiO{Gd5;0xxxVZz zqIOuT0e2v}`~nc>j_6}_?6nHXzs@4_W3Ubz40wKo*|RqRZ8ezJ#S=)h#gg)iR4M?Q z;~N1fZL#moWPl=kzuSidF5%oJ5}f-0b(iVLREm2WbwE}go~8@}LicIpf6(c~T8(UN zxXGzf7YeRvnte-#ZEG}Rqh0{sT{TIgmIC?9G?RS(O=&l4W)_VCx_N8zx&;9JeKdKQ zKLf2iG+QCCR>CxU!gf*W3{CAT5?JD@xzs-eh(D&ezuKAg&_wg_;V*!lgXW2OClI?w zu(mwJ0_!?L2zRfiq}jq3C+T=uJ7L_Axs1S0NS+@7thpqlulp7ldPT_b;{GSMgbial z0Nou`Og$@!nRKNfToj*QiY0UcNHBMS=Ae-XDa&Is~Dc9V#+iX z3)Tx|F?GPC9AVEMKVXW#u(!H3F!`=fDYgSa0H)SMxUH28y(iWs3m6;o8K^mcZKO+N2Un-^Ert|2wU>A zOsvgZ$%w|Pm~l!K9|@h)i4EV! z&eGYI768&T75gOVd^dgrEZ(P!K3C2DpZafI@`gAL!IQdK5+z&gptE{LvQGtFkvk)u zU!W_RM?#CLbj5EXfX^@JO6H7UQTpr3gly*Yq^``LDe8Ai_uV#5L+`7)vm+{)qSv}h z0^4&ytX}8OXKk$B?ujSR@|4~o^fz{$N#E>*)rNznP(NfOQ!sM1K2Aub)W7P-MN&#J zUcaxD*e+0i{AZ%Om;Q&4Hk^2u^|v*Y)_u4B&EYG6!(@Z}A_M62RK;-tDo%N1uobrg z>!%u=ZVdu_9~xY06u?JoaD7(;c-$~}SpUYGKHCkWC+wj_|1u=Ztmf=C8xni+1BWgu z#+wWiZu8kZPQ~ytL+Z6VK;Qm`nL9QCd6|ag>nD@gYD50Hd`>>mP*Rn`$ys68Ip7f; ze`cuI{+z|^XxMX+N`5)cP+iTgaq%@+|2c37(5Bo_cYvu#dTw~M-3KVnH~hYr)tc4A zs0(3HuBb9LJK+h82sQS6Q^JX+H}-l~3>1873@feW+2L$VE+&zVMBTGleM%dtjX1@<(=6rg3Wm*T-Hm?)O^ENm^+&R#snRj-!p$`{~Hg(|F=Ii*VQ} zqI`hkW;Hw$Z`7ipjyK<$gp8mwn5z^!6XUtiktf?pCjCQi- zegiI%&33IwAY5)SkPba-ak8C|y?vR}>8IqbV~dD$Ra`M$#r5~)?wj6lkiD0C z#0&TI|~S~$njuA9>H>9KN@a4 zN5$qYD)tLg@vCm~{-$=!-B`Kus*XozKl$X1+w6wN@~MIoOo2u|bDxejit^cn3?Slw z{6jAdPss;zZRT!3UaMltt_GwuY3l4ZjbcrH=qC0Q@ipp%m07r_*)R&qk>NGMLl+!!V2EEzZbQptNa2l%*= zl5gJynD?Dh)P5e{D^@Xgol>%k3S|GNlpSq|e6VsL%bBO@G38*^=WMf^N@X$$6$cY( zf5R)~cwjxxf^?(T)p1_-`iLg&(sxADEgcl)81Sso7yi7S|(Fd)MbwNHmRUO=5<0 z)1(2!QQw=s+Bb@)<#m&FaqoQQq_?TSgByy~RHPAE-B~K;WSELVNX%SjDzPx~@mov> zA2S7OmYQnZ1sc?w&JM8W`JQCD@tP5}cxk%7j>Q#FZ+e$Td+XMkoo;yomiuO>dd`Oh zPG(ns&H-mnv)c{&T`<#X_Fv4A`^k6}U31LcgBJ4iTWbz7SMf~fZtlIBZL`W`9$Lv1 zjo4(4uw^xe_Em90s(I>Vrf5+wb6zPU9amy5k7CZ3tTgXCG6Lv%M8()<=9&?9oEuYZ z#D-Hg`mv3C{T5GGYod+QsXNT^9UET@`@3(oO-K(GNt4|+sk11xPn6B>F^Rz7Y8BHL z*&Iosfj*5bj^n9FOr<6886}^&(Gu;N!b2#>5}WpdZ8pJ@a&Z?hr>AA&QWBT1SPD;4 z^1$1cjqfA*$Hm67{Rb-I@3GcWHa(D|GTTzKpHh!5x12w>hZ4@U+-bFw|M%xvo;ow) zj^iya)={>nuv z4JGo8Bw`XB#L{#+-Nj+T2LdsC`tpN?h7kU6n@roud^>^rUhv@cXKx;ZxF{n6Q$BER zh$a0mC}jN4{vQrT|Jh(gWBbAkyHCXCVwC7B28)6G?JV{Z!w^tWwPdS9qb6_>TZ%oz SAkkawCY#yz1da( diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts index 464979b..1448cd6 100644 --- a/res/gta5sync_uk.ts +++ b/res/gta5sync_uk.ts @@ -46,9 +46,7 @@ Running with Qt %6<br/> 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 -VenJam1n,https://socialclub.rockstargames.com/member/--VenJam1n-- -Twitter,https://twitter.com/_VenJam1n + VenJam1n,g5e://about?VmVuSmFtMW4=:U3RlYW06IDxhIGhyZWY9Imh0dHBzOi8vc3RlYW1jb21tdW5pdHkuY29tL3Byb2ZpbGVzLzc2NTYxMTk3OTg0NjM1ODE2LyI+UFJPRmVzc29SICdBcHBsZVNPZnQnPC9hPjxici8+U29jaWFsIENsdWI6IDxhIGhyZWY9Imh0dHBzOi8vc29jaWFsY2x1Yi5yb2Nrc3RhcmdhbWVzLmNvbS9tZW1iZXIvLS1WZW5KYW0xbi0tLzU2Mzc1NjkiPlZlbkphbTFuPC9hPjxici8+VHdpdHRlcjogPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9fVmVuSmFtMW4iPlZlbkphbTFuPC9hPg== @@ -1805,7 +1803,7 @@ Press 1 for Default View Appropriate: %1 - Підходить:%1 + Підходить: %1 @@ -2114,7 +2112,7 @@ Press 1 for Default View &About %1 - &Справка %1 + &Про %1 diff --git a/res/gta5sync_zh_TW.qm b/res/gta5sync_zh_TW.qm index b1e7009c6e1b5dedee518c04162488f2c55710dc..79d4647c9bc4ee853d10144502271f394982d486 100644 GIT binary patch delta 3100 zcmX9=d0bWH7Tx#UbMCq4oI8Yqs0hME34zcUB}GtUl0ig}Kn4*ROa@WJ5ics0@`xl- zd_JD0;!GI=4k;KQKO71Wm3pbXKuCE!BQ?^@r!C(3Yn|!)_TFo)y}xs5JJY4$m89 z9QzGXVl&awpNKhsnaJ!v#1ZxGn_B4z%(8I;?TF?s=!p_mE^4iQa=p+YZbqL6*`w^N;9 z>IxlRW=ycb$kL z*2|cB6KKSP>@ zl;+)shJK2p#K0@-6m=n|L3M$m{TUKS*{!%aFN-KBLovA53j2Mdc=V``NdH>#tG1db zkYj8vlo2^?WWpCY4WI%SCax8M(~mRh5nG88zF;yxhy<0_nN|Ca6L~*kil^fJs9NUp zC2u2wWGk+X|{-ZGN@#*?u@{lz~-AEeOQ2>d0<>SR4&ee|8|$FU_C7{ng( zgF~mLuvJcn!C;e&={;=K$@sETcC>L4+pymaU0chx=Y57zF+s+tWEq!lX4}tg!}|!f ze_$NCdLR2R{sNlgEc?9kIxvrY`L#PJ@a5Q%^#NU+>9KMmzD`D$63*@5--(tPx!ATQ zWPF#){5+Xxwl}v~07b^+A-OsphV`|U~9^6d^P3QSs#d+dhX{|E*)tPAAE7iEbKZsHT zRhBI}OpP~G5%Hk>-8fY;lMM~Reo&=HfjecN>g+M#M1$(`eV~o4>O22QsBosLM*%Kv zHmP1*yp2RB^5SqVk;?-agMXDV+LG)l3yNGha_{zpCpukrL|3YMUo3ApH( ziPD~^GY=qK5bWr9{4a)%VVQj|o1g9=d>v#&@ZoS~p;fz z10kTi1RiJ$}Ot|U`Y9nog>wT|@Vz&q#ar4kU4}>mf zPYj5a!cgoJNcEwp7(l|2Lq<_Ch>NHxqSnlS1nfoYPz1DnQ=D871kK~cX>QOoCPbW( zS^?C_m_ahGxi5MjdV$GxL-a{nfJ0d;h7Mred-dXi2k?kVkr+LsBg!+1?>zvsQ}2sO zXEvjNa&Z}ve>eeZETYA})6iy~wb(DM##uF59Jmf@gK8wjNapjdNlIT+m`5S$N2m;qkjB*_ z5sSN$TRs@nZjh!245R%FQtS;dxv)&yrh^2AXHsFtEqLgrRO}uJ2|A==|9M0&H+QwdEJ=P+uX!?D ze? z0Xk_M?Vp07bj=c5B&OP1*YmpNFTJEXPfcE;&?Tx&6a zX^^y0YwwA!H=n6>xPvfB*R`HIvN6{3WVEW)di#C^hYV_cwT)=%$J)7j(IZ)mc3}eq znSEayX$tGQ=gSzDqg{6kdL)NyOOK%}V~DTz)FLRH^0W4AeGLBd(qs%+qiv2c!-feu zcH|J9b4Vxt*o`vkbQV{7(e>6kH$9r!eT>fE2aYg_&}DB1uXYAq?ULmXCQHVJ-MacL ztan+YAOAke53thDdIEkI`|4xuvnZWBiu6l!hOt4TKCAOI{(@}uD@%~Mx>3KU6$CpE z>JPq-LNo8wpZpGt7~a-bZJ33*7^ZJN2VVVJ^&M?>XujwAUPCnm+pB+Ug^DNd)DQmy rOh#QpHtU3%cQhL%K@;<4oSxnx>za$^)^>`JvU}dn4DO^^ZvKA(6U1qA delta 3095 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 diff --git a/res/gta5sync_zh_TW.ts b/res/gta5sync_zh_TW.ts index 08aae9a..638135b 100644 --- a/res/gta5sync_zh_TW.ts +++ b/res/gta5sync_zh_TW.ts @@ -189,7 +189,7 @@ Pictures and Savegames Capacity: %1 - 大å°:%1 + 大å°: %1 @@ -848,7 +848,7 @@ Y: %2 Key 2 - Toggle Overlay Arrow Keys - Navigate æ•¸å­—éµ 1 - 大頭接é è¦½æ¨¡å¼ -æ•¸å­—éµ 2 -é–‹é—œé‡ç–Šå±¤ +æ•¸å­—éµ 2 - é–‹é—œé‡ç–Šå±¤ æ–¹å‘éµ - 導覽 From 2f4de16e5d9796167812bb0df4dc4d44cf8e95da Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 24 May 2018 01:51:24 +0200 Subject: [PATCH 077/359] fix OS X build --- .travis/osx_install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis/osx_install.sh b/.travis/osx_install.sh index 76687bf..1a99c89 100755 --- a/.travis/osx_install.sh +++ b/.travis/osx_install.sh @@ -1,4 +1,4 @@ #!/bin/bash # Install packages -brew install qt +brew install qt@5.5 From b799c4551d9c210fb1842bc7b8ad1f3ee18fa9dd Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 24 May 2018 02:01:17 +0200 Subject: [PATCH 078/359] dump OS X build because Qt 5.11 means deprecating my code --- .travis.yml | 2 -- .travis/osx_install.sh | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index b92b077..2bebc22 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,8 +30,6 @@ matrix: - env: - BUILD_SCRIPT=wininstall_travis.sh - QT_SELECT=qt5-x86_64-w64-mingw32 - - os: osx - env: BUILD_SCRIPT=osx_travis.sh before_install: - ".travis/source.sh" diff --git a/.travis/osx_install.sh b/.travis/osx_install.sh index 1a99c89..76687bf 100755 --- a/.travis/osx_install.sh +++ b/.travis/osx_install.sh @@ -1,4 +1,4 @@ #!/bin/bash # Install packages -brew install qt@5.5 +brew install qt From fdf07dd6817785294021085f5bb4f16677634b7f Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 24 May 2018 22:32:00 +0200 Subject: [PATCH 079/359] SnapmaticPicture now stay alone, gta5sync references reduced --- .travis/gta5view.nsi | 2 +- AboutDialog.cpp | 6 +-- AboutDialog.h | 2 +- AppEnv.cpp | 2 +- AppEnv.h | 2 +- CrewDatabase.cpp | 2 +- CrewDatabase.h | 2 +- DatabaseThread.cpp | 2 +- DatabaseThread.h | 2 +- ExportDialog.cpp | 2 +- ExportDialog.h | 2 +- ExportThread.cpp | 2 +- ExportThread.h | 2 +- GlobalString.cpp | 2 +- GlobalString.h | 2 +- IconLoader.cpp | 2 +- IconLoader.h | 2 +- ImageEditorDialog.cpp | 2 +- ImageEditorDialog.h | 2 +- ImportDialog.cpp | 2 +- ImportDialog.h | 2 +- JsonEditorDialog.cpp | 2 +- JsonEditorDialog.h | 2 +- MapLocationDialog.cpp | 2 +- MapLocationDialog.h | 2 +- OptionsDialog.cpp | 6 +-- OptionsDialog.h | 2 +- OptionsDialog.ui | 22 +------- PictureDialog.cpp | 2 +- PictureDialog.h | 2 +- PictureExport.cpp | 2 +- PictureExport.h | 2 +- PictureWidget.cpp | 2 +- PictureWidget.h | 2 +- PlayerListDialog.cpp | 2 +- PlayerListDialog.h | 2 +- ProfileDatabase.cpp | 2 +- ProfileDatabase.h | 2 +- ProfileInterface.cpp | 2 +- ProfileInterface.h | 2 +- ProfileLoader.cpp | 2 +- ProfileLoader.h | 2 +- ProfileWidget.cpp | 2 +- ProfileWidget.h | 2 +- SavegameCopy.cpp | 2 +- SavegameCopy.h | 2 +- SavegameData.cpp | 9 ++-- SavegameData.h | 2 +- SavegameDialog.cpp | 2 +- SavegameDialog.h | 2 +- SavegameWidget.cpp | 2 +- SavegameWidget.h | 2 +- SidebarGenerator.cpp | 2 +- SidebarGenerator.h | 2 +- SnapmaticEditor.cpp | 2 +- SnapmaticEditor.h | 2 +- SnapmaticPicture.cpp | 76 +++++++++++++++++---------- SnapmaticPicture.h | 9 +++- SnapmaticWidget.cpp | 2 +- SnapmaticWidget.h | 2 +- StandardPaths.cpp | 2 +- StandardPaths.h | 2 +- StringParser.cpp | 22 +------- StringParser.h | 5 +- TelemetryClass.cpp | 2 +- TelemetryClass.h | 2 +- TranslationClass.cpp | 2 +- TranslationClass.h | 2 +- UserInterface.cpp | 2 +- UserInterface.h | 2 +- anpro/JSHighlighter.cpp | 2 +- anpro/JSHighlighter.h | 2 +- config.h | 12 +---- gta5view.pro | 3 +- main.cpp | 2 +- qjson4/QJsonArray.cpp | 2 +- qjson4/QJsonArray.h | 2 +- qjson4/QJsonDocument.cpp | 2 +- qjson4/QJsonDocument.h | 2 +- qjson4/QJsonObject.cpp | 2 +- qjson4/QJsonObject.h | 2 +- qjson4/QJsonParseError.cpp | 2 +- qjson4/QJsonParseError.h | 2 +- qjson4/QJsonParser.cpp | 2 +- qjson4/QJsonParser.h | 2 +- qjson4/QJsonRoot.h | 2 +- qjson4/QJsonValue.cpp | 2 +- qjson4/QJsonValue.h | 2 +- qjson4/QJsonValueRef.cpp | 2 +- qjson4/QJsonValueRef.h | 2 +- res/app.rc | 8 +-- tmext/TelemetryClassAuthenticator.cpp | 2 +- tmext/TelemetryClassAuthenticator.h | 2 +- uimod/UiModLabel.cpp | 2 +- uimod/UiModLabel.h | 2 +- uimod/UiModWidget.cpp | 2 +- uimod/UiModWidget.h | 2 +- 97 files changed, 159 insertions(+), 191 deletions(-) diff --git a/.travis/gta5view.nsi b/.travis/gta5view.nsi index becda49..1b1e7f1 100644 --- a/.travis/gta5view.nsi +++ b/.travis/gta5view.nsi @@ -3,7 +3,7 @@ !define APP_NAME "gta5view" !define COMP_NAME "Syping" !define WEB_SITE "https://gta5view.syping.de/" -!define VERSION "1.5.4.0" +!define VERSION "1.6.0.0" !define COPYRIGHT "Copyright © 2016-2018 Syping" !define DESCRIPTION "Grand Theft Auto V Savegame and Snapmatic Viewer/Editor" !define INSTALLER_NAME "gta5view_setup.exe" diff --git a/AboutDialog.cpp b/AboutDialog.cpp index e9fe88e..31ef78d 100644 --- a/AboutDialog.cpp +++ b/AboutDialog.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2018 Syping * * This program is free software: you can redistribute it and/or modify @@ -65,11 +65,7 @@ AboutDialog::AboutDialog(QWidget *parent) : } // Project Description -#ifdef GTA5SYNC_ENABLED - QString projectDes = tr("A project for viewing and sync Grand Theft Auto V Snapmatic
\nPictures and Savegames"); -#else QString projectDes = tr("A project for viewing Grand Theft Auto V Snapmatic
\nPictures and Savegames"); -#endif // Copyright Description QString copyrightDes1 = tr("Copyright © %2 %3"); diff --git a/AboutDialog.h b/AboutDialog.h index c9eecdf..1a0a7d9 100644 --- a/AboutDialog.h +++ b/AboutDialog.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/AppEnv.cpp b/AppEnv.cpp index 6180e5b..56e0b08 100644 --- a/AppEnv.cpp +++ b/AppEnv.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/AppEnv.h b/AppEnv.h index 2d911be..1fca998 100644 --- a/AppEnv.h +++ b/AppEnv.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/CrewDatabase.cpp b/CrewDatabase.cpp index 73d9bed..0fa96c6 100644 --- a/CrewDatabase.cpp +++ b/CrewDatabase.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/CrewDatabase.h b/CrewDatabase.h index 0bb9933..692ea79 100644 --- a/CrewDatabase.h +++ b/CrewDatabase.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/DatabaseThread.cpp b/DatabaseThread.cpp index 2344dca..4d12e74 100644 --- a/DatabaseThread.cpp +++ b/DatabaseThread.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/DatabaseThread.h b/DatabaseThread.h index 8d8bbfa..37c6f76 100644 --- a/DatabaseThread.h +++ b/DatabaseThread.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/ExportDialog.cpp b/ExportDialog.cpp index 9a93c58..43d8d97 100644 --- a/ExportDialog.cpp +++ b/ExportDialog.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/ExportDialog.h b/ExportDialog.h index 65354f0..5da4b91 100644 --- a/ExportDialog.h +++ b/ExportDialog.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/ExportThread.cpp b/ExportThread.cpp index b795824..f3401f1 100644 --- a/ExportThread.cpp +++ b/ExportThread.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/ExportThread.h b/ExportThread.h index f5837a7..99ad28b 100644 --- a/ExportThread.h +++ b/ExportThread.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/GlobalString.cpp b/GlobalString.cpp index 4aa7aad..2bb9690 100644 --- a/GlobalString.cpp +++ b/GlobalString.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/GlobalString.h b/GlobalString.h index 2d1f4ba..711afa9 100644 --- a/GlobalString.h +++ b/GlobalString.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/IconLoader.cpp b/IconLoader.cpp index 4de091d..d275718 100644 --- a/IconLoader.cpp +++ b/IconLoader.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/IconLoader.h b/IconLoader.h index fe8669b..8456688 100644 --- a/IconLoader.h +++ b/IconLoader.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/ImageEditorDialog.cpp b/ImageEditorDialog.cpp index 749e412..a4ab3eb 100644 --- a/ImageEditorDialog.cpp +++ b/ImageEditorDialog.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2017-2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/ImageEditorDialog.h b/ImageEditorDialog.h index a9417cd..06a3c02 100644 --- a/ImageEditorDialog.h +++ b/ImageEditorDialog.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/ImportDialog.cpp b/ImportDialog.cpp index 0d0f6d4..d40c701 100644 --- a/ImportDialog.cpp +++ b/ImportDialog.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2017-2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/ImportDialog.h b/ImportDialog.h index e095ff2..70e0648 100644 --- a/ImportDialog.h +++ b/ImportDialog.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/JsonEditorDialog.cpp b/JsonEditorDialog.cpp index 9aaa392..62c1636 100644 --- a/JsonEditorDialog.cpp +++ b/JsonEditorDialog.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2017-2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/JsonEditorDialog.h b/JsonEditorDialog.h index b881088..4e618bb 100644 --- a/JsonEditorDialog.h +++ b/JsonEditorDialog.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/MapLocationDialog.cpp b/MapLocationDialog.cpp index 9ebb53f..759e331 100644 --- a/MapLocationDialog.cpp +++ b/MapLocationDialog.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/MapLocationDialog.h b/MapLocationDialog.h index 1abfa93..f0fdffa 100644 --- a/MapLocationDialog.h +++ b/MapLocationDialog.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp index 0528709..be952e9 100644 --- a/OptionsDialog.cpp +++ b/OptionsDialog.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2018 Syping * * This program is free software: you can redistribute it and/or modify @@ -109,10 +109,6 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : resize(435 * screenRatio, 405 * screenRatio); #endif -#ifdef GTA5SYNC_DISABLED - ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabSync)); -#endif - this->setWindowTitle(windowTitle().arg(GTA5SYNC_APPSTR)); } diff --git a/OptionsDialog.h b/OptionsDialog.h index ae086ba..4d35ca7 100644 --- a/OptionsDialog.h +++ b/OptionsDialog.h @@ -1,5 +1,5 @@ /****************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/OptionsDialog.ui b/OptionsDialog.ui index 40d8caa..9f1b0fb 100644 --- a/OptionsDialog.ui +++ b/OptionsDialog.ui @@ -20,7 +20,7 @@ - 3 + 0 @@ -683,26 +683,6 @@ - - - Sync - - - - - - Sync is not implemented at current time - - - Qt::AlignCenter - - - true - - - - - diff --git a/PictureDialog.cpp b/PictureDialog.cpp index 0ba79e9..97d8f65 100644 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/PictureDialog.h b/PictureDialog.h index 0c3155c..ef351b8 100644 --- a/PictureDialog.h +++ b/PictureDialog.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/PictureExport.cpp b/PictureExport.cpp index 41d0f0c..34ae2ae 100644 --- a/PictureExport.cpp +++ b/PictureExport.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/PictureExport.h b/PictureExport.h index 6ee84a0..623f093 100644 --- a/PictureExport.h +++ b/PictureExport.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/PictureWidget.cpp b/PictureWidget.cpp index 95d51a1..ffadd18 100644 --- a/PictureWidget.cpp +++ b/PictureWidget.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/PictureWidget.h b/PictureWidget.h index 2ebd21c..f622614 100644 --- a/PictureWidget.h +++ b/PictureWidget.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/PlayerListDialog.cpp b/PlayerListDialog.cpp index f828715..337d61b 100644 --- a/PlayerListDialog.cpp +++ b/PlayerListDialog.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/PlayerListDialog.h b/PlayerListDialog.h index fb779d7..8c99fb0 100644 --- a/PlayerListDialog.h +++ b/PlayerListDialog.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/ProfileDatabase.cpp b/ProfileDatabase.cpp index b04a4fd..09ff581 100644 --- a/ProfileDatabase.cpp +++ b/ProfileDatabase.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/ProfileDatabase.h b/ProfileDatabase.h index 89ae497..99bfc80 100644 --- a/ProfileDatabase.h +++ b/ProfileDatabase.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 4f39530..d58d428 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/ProfileInterface.h b/ProfileInterface.h index cba5d88..667d1f1 100644 --- a/ProfileInterface.h +++ b/ProfileInterface.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/ProfileLoader.cpp b/ProfileLoader.cpp index 3874140..2653338 100644 --- a/ProfileLoader.cpp +++ b/ProfileLoader.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/ProfileLoader.h b/ProfileLoader.h index 472c27d..0396e27 100644 --- a/ProfileLoader.h +++ b/ProfileLoader.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/ProfileWidget.cpp b/ProfileWidget.cpp index 09b7a0f..a325d92 100644 --- a/ProfileWidget.cpp +++ b/ProfileWidget.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/ProfileWidget.h b/ProfileWidget.h index 8de7cda..b7d2f77 100644 --- a/ProfileWidget.h +++ b/ProfileWidget.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/SavegameCopy.cpp b/SavegameCopy.cpp index b0f8064..9ebbe66 100644 --- a/SavegameCopy.cpp +++ b/SavegameCopy.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/SavegameCopy.h b/SavegameCopy.h index 6447497..f5550ba 100644 --- a/SavegameCopy.h +++ b/SavegameCopy.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/SavegameData.cpp b/SavegameData.cpp index 826746a..6345f29 100644 --- a/SavegameData.cpp +++ b/SavegameData.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify @@ -16,6 +16,7 @@ * along with this program. If not, see . *****************************************************************************/ +#include "SnapmaticPicture.h" #include "StringParser.h" #include "SavegameData.h" #include @@ -42,7 +43,7 @@ bool SavegameData::readingSavegame() QFile *saveFile = new QFile(savegameFileName); if (!saveFile->open(QFile::ReadOnly)) { - lastStep = "1;/1,OpenFile," % StringParser::convertDrawStringForLog(savegameFileName); + lastStep = "1;/1,OpenFile," % SnapmaticPicture::convertDrawStringForLog(savegameFileName); saveFile->deleteLater(); delete saveFile; return false; @@ -51,7 +52,7 @@ bool SavegameData::readingSavegame() // Reading Savegame Header if (!saveFile->isReadable()) { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(savegameFileName) % ",1,NOHEADER"; + lastStep = "2;/3,ReadingFile," % SnapmaticPicture::convertDrawStringForLog(savegameFileName) % ",1,NOHEADER"; saveFile->close(); saveFile->deleteLater(); delete saveFile; @@ -78,7 +79,7 @@ QString SavegameData::getSavegameDataString(const QByteArray &savegameHeader) QList savegameBytesList = savegameBytes.split(char(0x01)); savegameBytes = savegameBytesList.at(1); savegameBytesList.clear(); - return StringParser::parseTitleString(savegameBytes, savegameBytes.length()); + return SnapmaticPicture::parseTitleString(savegameBytes, savegameBytes.length()); } bool SavegameData::readingSavegameFromFile(const QString &fileName) diff --git a/SavegameData.h b/SavegameData.h index bc5cf2f..bedb57c 100644 --- a/SavegameData.h +++ b/SavegameData.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/SavegameDialog.cpp b/SavegameDialog.cpp index 5182e3f..c13d82b 100644 --- a/SavegameDialog.cpp +++ b/SavegameDialog.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/SavegameDialog.h b/SavegameDialog.h index cce13cc..4abbba4 100644 --- a/SavegameDialog.h +++ b/SavegameDialog.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/SavegameWidget.cpp b/SavegameWidget.cpp index 7d81d92..3c1c667 100644 --- a/SavegameWidget.cpp +++ b/SavegameWidget.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/SavegameWidget.h b/SavegameWidget.h index 0db69af..103fa55 100644 --- a/SavegameWidget.h +++ b/SavegameWidget.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/SidebarGenerator.cpp b/SidebarGenerator.cpp index 1d57e5d..e93474c 100644 --- a/SidebarGenerator.cpp +++ b/SidebarGenerator.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/SidebarGenerator.h b/SidebarGenerator.h index 5e906a3..446f73c 100644 --- a/SidebarGenerator.h +++ b/SidebarGenerator.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/SnapmaticEditor.cpp b/SnapmaticEditor.cpp index 954571c..18f481f 100644 --- a/SnapmaticEditor.cpp +++ b/SnapmaticEditor.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/SnapmaticEditor.h b/SnapmaticEditor.h index 1e57294..98ed2d6 100644 --- a/SnapmaticEditor.h +++ b/SnapmaticEditor.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp index d5414f7..c22d2e7 100644 --- a/SnapmaticPicture.cpp +++ b/SnapmaticPicture.cpp @@ -1,6 +1,6 @@ /***************************************************************************** -* gta5sync-spv Grand Theft Auto Snapmatic Picture Viewer -* Copyright (C) 2016-2017 Syping +* gta5spv Grand Theft Auto Snapmatic Picture Viewer +* Copyright (C) 2016-2018 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,12 +17,12 @@ *****************************************************************************/ #include "SnapmaticPicture.h" -#include "StringParser.h" #include #include #include #include #include +#include #include #include #include @@ -101,7 +101,7 @@ void SnapmaticPicture::reset() jsonStr = QString(); // SNAPMATIC DEFAULTS -#ifdef GTA5SYNC_CSDF +#ifdef GTA5SYNC_NOASSIST careSnapDefault = false; #else careSnapDefault = true; @@ -121,7 +121,7 @@ bool SnapmaticPicture::preloadFile() if (!picFile->open(QFile::ReadOnly)) { - lastStep = "1;/1,OpenFile," % StringParser::convertDrawStringForLog(picFilePath); + lastStep = "1;/1,OpenFile," % convertDrawStringForLog(picFilePath); delete picFile; return false; } @@ -191,31 +191,31 @@ bool SnapmaticPicture::preloadFile() } else { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",4,G5E_FORMATERROR"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",4,G5E_FORMATERROR"; return false; } } else { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",3,G5E_FORMATERROR"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",3,G5E_FORMATERROR"; return false; } } else { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",2,G5E_FORMATERROR"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",2,G5E_FORMATERROR"; return false; } } else { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",1,G5E_NOTCOMPATIBLE"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",1,G5E_NOTCOMPATIBLE"; return false; } } else { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",1,G5E_FORMATERROR"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",1,G5E_FORMATERROR"; return false; } } @@ -244,7 +244,7 @@ bool SnapmaticPicture::readingPicture(bool writeEnabled_, bool cacheEnabled_, bo // Reading Snapmatic Header if (!picStream->isReadable()) { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",1,NOHEADER"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",1,NOHEADER"; picStream->close(); delete picStream; return false; @@ -253,7 +253,7 @@ bool SnapmaticPicture::readingPicture(bool writeEnabled_, bool cacheEnabled_, bo pictureHead = getSnapmaticHeaderString(snapmaticHeaderLine); if (pictureHead == QLatin1String("MALFORMED")) { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",1,MALFORMEDHEADER"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",1,MALFORMEDHEADER"; picStream->close(); delete picStream; return false; @@ -262,7 +262,7 @@ bool SnapmaticPicture::readingPicture(bool writeEnabled_, bool cacheEnabled_, bo // Reading JPEG Header Line if (!picStream->isReadable()) { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",2,NOHEADER"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",2,NOHEADER"; picStream->close(); delete picStream; return false; @@ -273,7 +273,7 @@ bool SnapmaticPicture::readingPicture(bool writeEnabled_, bool cacheEnabled_, bo jpegHeaderLine.remove(0, jpegHeaderLineDifStr); if (jpegHeaderLine.left(4) != QByteArray("JPEG")) { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",2,NOJPEG"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",2,NOJPEG"; picStream->close(); delete picStream; return false; @@ -282,7 +282,7 @@ bool SnapmaticPicture::readingPicture(bool writeEnabled_, bool cacheEnabled_, bo // Read JPEG Stream if (!picStream->isReadable()) { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",2,NOPIC"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",2,NOPIC"; picStream->close(); delete picStream; return false; @@ -336,14 +336,14 @@ bool SnapmaticPicture::readingPicture(bool writeEnabled_, bool cacheEnabled_, bo // Read JSON Stream if (!picStream->isReadable()) { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",3,NOJSON"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",3,NOJSON"; picStream->close(); delete picStream; return false; } else if (picStream->read(4) != QByteArray("JSON")) { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",3,CTJSON"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",3,CTJSON"; picStream->close(); delete picStream; return false; @@ -354,14 +354,14 @@ bool SnapmaticPicture::readingPicture(bool writeEnabled_, bool cacheEnabled_, bo if (!picStream->isReadable()) { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",4,NOTITL"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",4,NOTITL"; picStream->close(); delete picStream; return false; } else if (picStream->read(4) != QByteArray("TITL")) { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",4,CTTITL"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",4,CTTITL"; picStream->close(); delete picStream; return false; @@ -371,14 +371,14 @@ bool SnapmaticPicture::readingPicture(bool writeEnabled_, bool cacheEnabled_, bo if (!picStream->isReadable()) { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",5,NODESC"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",5,NODESC"; picStream->close(); delete picStream; return picOk; } else if (picStream->read(4) != QByteArray("DESC")) { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",5,CTDESC"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",5,CTDESC"; picStream->close(); delete picStream; return false; @@ -403,7 +403,7 @@ QString SnapmaticPicture::getSnapmaticHeaderString(const QByteArray &snapmaticHe QList snapmaticBytesList = snapmaticHeader.left(snapmaticUsefulLength).split('\x01'); if (snapmaticBytesList.length() < 2) { return QLatin1String("MALFORMED"); } QByteArray snapmaticBytes = snapmaticBytesList.at(1); - return StringParser::parseTitleString(snapmaticBytes, snapmaticBytes.length()); + return parseTitleString(snapmaticBytes, snapmaticBytes.length()); } QString SnapmaticPicture::getSnapmaticJSONString(const QByteArray &jsonBytes) @@ -792,7 +792,7 @@ QImage SnapmaticPicture::getImage(bool fastLoad) QFile *picFile = new QFile(picFilePath); if (!picFile->open(QFile::ReadOnly)) { - lastStep = "1;/1,OpenFile," % StringParser::convertDrawStringForLog(picFilePath); + lastStep = "1;/1,OpenFile," % convertDrawStringForLog(picFilePath); delete picFile; return QImage(); } @@ -1014,15 +1014,15 @@ void SnapmaticPicture::parseJsonContent() { if (jsonIncomplete && jsonError) { - lastStep = "2;/4,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",3,JSONINCOMPLETE,JSONERROR"; + lastStep = "2;/4,ReadingFile," % convertDrawStringForLog(picFilePath) % ",3,JSONINCOMPLETE,JSONERROR"; } else if (jsonIncomplete) { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",3,JSONINCOMPLETE"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",3,JSONINCOMPLETE"; } else if (jsonError) { - lastStep = "2;/3,ReadingFile," % StringParser::convertDrawStringForLog(picFilePath) % ",3,JSONERROR"; + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",3,JSONERROR"; } jsonOk = false; } @@ -1377,7 +1377,7 @@ bool SnapmaticPicture::verifyTitle(const QString &title) // VERIFY TITLE FOR BE A VALID SNAPMATIC TITLE if (title.length() <= titlStreamCharacterMax && title.length() > 0) { - for (QChar titleChar : title) + for (const QChar &titleChar : title) { if (!verifyTitleChar(titleChar)) return false; } @@ -1396,3 +1396,25 @@ bool SnapmaticPicture::verifyTitleChar(const QChar &titleChar) } return false; } + +// STRING OPERATIONS + +QString SnapmaticPicture::parseTitleString(const QByteArray &commitBytes, int maxLength) +{ + Q_UNUSED(maxLength) + QString retStr = QTextCodec::codecForName("UTF-16LE")->toUnicode(commitBytes).trimmed(); + retStr.remove(QChar('\x00')); + return retStr; +} + +QString SnapmaticPicture::convertDrawStringForLog(const QString &inputStr) +{ + QString outputStr = inputStr; + return outputStr.replace("&","&u;").replace(",", "&c;"); +} + +QString SnapmaticPicture::convertLogStringForDraw(const QString &inputStr) +{ + QString outputStr = inputStr; + return outputStr.replace("&c;",",").replace("&u;", "&"); +} diff --git a/SnapmaticPicture.h b/SnapmaticPicture.h index 71046df..71b7c9d 100644 --- a/SnapmaticPicture.h +++ b/SnapmaticPicture.h @@ -1,6 +1,6 @@ /***************************************************************************** -* gta5sync-spv Grand Theft Auto Snapmatic Picture Viewer -* Copyright (C) 2016-2017 Syping +* gta5spv Grand Theft Auto Snapmatic Picture Viewer +* Copyright (C) 2016-2018 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 @@ -134,6 +134,11 @@ public: // VERIFY CONTENT static bool verifyTitle(const QString &title); + // STRING OPERATIONS + static QString parseTitleString(const QByteArray &commitBytes, int maxLength); + static QString convertDrawStringForLog(const QString &inputStr); + static QString convertLogStringForDraw(const QString &inputStr); + private: QString getSnapmaticHeaderString(const QByteArray &snapmaticHeader); QString getSnapmaticJSONString(const QByteArray &jsonBytes); diff --git a/SnapmaticWidget.cpp b/SnapmaticWidget.cpp index 16cbc6d..d18c006 100644 --- a/SnapmaticWidget.cpp +++ b/SnapmaticWidget.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/SnapmaticWidget.h b/SnapmaticWidget.h index 289dbf6..8c28f12 100644 --- a/SnapmaticWidget.h +++ b/SnapmaticWidget.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/StandardPaths.cpp b/StandardPaths.cpp index fa5ed24..af0176d 100644 --- a/StandardPaths.cpp +++ b/StandardPaths.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/StandardPaths.h b/StandardPaths.h index 619bdeb..d03df33 100644 --- a/StandardPaths.h +++ b/StandardPaths.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/StringParser.cpp b/StringParser.cpp index b93fda5..584a6ac 100644 --- a/StringParser.cpp +++ b/StringParser.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify @@ -36,26 +36,6 @@ StringParser::StringParser() } -QString StringParser::parseTitleString(const QByteArray &commitBytes, int maxLength) -{ - Q_UNUSED(maxLength) - QString retStr = QTextCodec::codecForName("UTF-16LE")->toUnicode(commitBytes).trimmed(); - retStr.remove(QChar('\x00')); - return retStr; -} - -QString StringParser::convertDrawStringForLog(const QString &inputStr) -{ - QString outputStr = inputStr; - return outputStr.replace("&","&u;").replace(",", "&c;"); -} - -QString StringParser::convertLogStringForDraw(const QString &inputStr) -{ - QString outputStr = inputStr; - return outputStr.replace("&c;",",").replace("&u;", "&"); -} - QString StringParser::escapeString(const QString &toEscape) { #if QT_VERSION >= 0x050000 diff --git a/StringParser.h b/StringParser.h index f15b537..59b6460 100644 --- a/StringParser.h +++ b/StringParser.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify @@ -26,9 +26,6 @@ class StringParser { public: StringParser(); - static QString parseTitleString(const QByteArray &commitBytes, int maxLength); - static QString convertDrawStringForLog(const QString &inputStr); - static QString convertLogStringForDraw(const QString &inputStr); static QString escapeString(const QString &toEscape); #ifdef GTA5SYNC_PROJECT static QString convertBuildedString(const QString &buildedStr); diff --git a/TelemetryClass.cpp b/TelemetryClass.cpp index 6db570c..521734f 100644 --- a/TelemetryClass.cpp +++ b/TelemetryClass.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/TelemetryClass.h b/TelemetryClass.h index 1e06ff5..475ce6e 100644 --- a/TelemetryClass.h +++ b/TelemetryClass.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/TranslationClass.cpp b/TranslationClass.cpp index 611d1f2..9afbf13 100644 --- a/TranslationClass.cpp +++ b/TranslationClass.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/TranslationClass.h b/TranslationClass.h index 138216d..963eaff 100644 --- a/TranslationClass.h +++ b/TranslationClass.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/UserInterface.cpp b/UserInterface.cpp index 7d63257..03b5a7c 100644 --- a/UserInterface.cpp +++ b/UserInterface.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/UserInterface.h b/UserInterface.h index 05ef444..c6f9ed2 100644 --- a/UserInterface.h +++ b/UserInterface.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/anpro/JSHighlighter.cpp b/anpro/JSHighlighter.cpp index 6d3b93c..7b3aec0 100644 --- a/anpro/JSHighlighter.cpp +++ b/anpro/JSHighlighter.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/anpro/JSHighlighter.h b/anpro/JSHighlighter.h index 08a0eb5..cad6453 100644 --- a/anpro/JSHighlighter.h +++ b/anpro/JSHighlighter.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/config.h b/config.h index 1ebab69..23a6a09 100644 --- a/config.h +++ b/config.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2018 Syping * * This program is free software: you can redistribute it and/or modify @@ -28,17 +28,9 @@ #define GTA5SYNC_APPVENDORLINK "https://github.com/Syping/" #endif -#ifndef GTA5SYNC_DISABLED -#define GTA5SYNC_ENABLED -#endif - #ifndef GTA5SYNC_APPSTR -#ifdef GTA5SYNC_ENABLED -#define GTA5SYNC_APPSTR "gta5sync" -#else #define GTA5SYNC_APPSTR "gta5view" #endif -#endif #ifndef GTA5SYNC_APPDES #define GTA5SYNC_APPDES "INSERT YOUR APPLICATION DESCRIPTION HERE" @@ -49,7 +41,7 @@ #endif #ifndef GTA5SYNC_APPVER -#define GTA5SYNC_APPVER "1.5.4" +#define GTA5SYNC_APPVER "1.6.0" #endif #ifdef GTA5SYNC_BUILDTYPE_REL diff --git a/gta5view.pro b/gta5view.pro index 09a47f8..ee6ae7d 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -154,9 +154,8 @@ INCLUDEPATH += ./anpro ./tmext ./uimod # GTA5SYNC/GTA5VIEW ONLY -DEFINES += GTA5SYNC_DISABLED DEFINES += GTA5SYNC_PROJECT # Enable exclusive gta5sync/gta5view functions -DEFINES += GTA5SYNC_CSDF # Not assisting at proper usage of SnapmaticPicture class +DEFINES += GTA5SYNC_NOASSIST # Not assisting at proper usage of SnapmaticPicture class # WINDOWS ONLY diff --git a/main.cpp b/main.cpp index f02fea5..5ab285a 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/qjson4/QJsonArray.cpp b/qjson4/QJsonArray.cpp index 531941f..ad8a82b 100644 --- a/qjson4/QJsonArray.cpp +++ b/qjson4/QJsonArray.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/qjson4/QJsonArray.h b/qjson4/QJsonArray.h index 94aab1b..dc4fc69 100644 --- a/qjson4/QJsonArray.h +++ b/qjson4/QJsonArray.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/qjson4/QJsonDocument.cpp b/qjson4/QJsonDocument.cpp index 59adf32..9d503c3 100644 --- a/qjson4/QJsonDocument.cpp +++ b/qjson4/QJsonDocument.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/qjson4/QJsonDocument.h b/qjson4/QJsonDocument.h index 12e8fc7..5b1e17a 100644 --- a/qjson4/QJsonDocument.h +++ b/qjson4/QJsonDocument.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/qjson4/QJsonObject.cpp b/qjson4/QJsonObject.cpp index 55f8cf1..ac36bb0 100644 --- a/qjson4/QJsonObject.cpp +++ b/qjson4/QJsonObject.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/qjson4/QJsonObject.h b/qjson4/QJsonObject.h index ad657bc..6ee3a97 100644 --- a/qjson4/QJsonObject.h +++ b/qjson4/QJsonObject.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/qjson4/QJsonParseError.cpp b/qjson4/QJsonParseError.cpp index 6bcfd98..598c67c 100644 --- a/qjson4/QJsonParseError.cpp +++ b/qjson4/QJsonParseError.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/qjson4/QJsonParseError.h b/qjson4/QJsonParseError.h index b87d7aa..eddf04d 100644 --- a/qjson4/QJsonParseError.h +++ b/qjson4/QJsonParseError.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/qjson4/QJsonParser.cpp b/qjson4/QJsonParser.cpp index 9b084f7..052c9a8 100644 --- a/qjson4/QJsonParser.cpp +++ b/qjson4/QJsonParser.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/qjson4/QJsonParser.h b/qjson4/QJsonParser.h index d54a0d9..f11f5a0 100644 --- a/qjson4/QJsonParser.h +++ b/qjson4/QJsonParser.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/qjson4/QJsonRoot.h b/qjson4/QJsonRoot.h index 77b9751..d249465 100644 --- a/qjson4/QJsonRoot.h +++ b/qjson4/QJsonRoot.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/qjson4/QJsonValue.cpp b/qjson4/QJsonValue.cpp index 68bf87f..8ac4770 100644 --- a/qjson4/QJsonValue.cpp +++ b/qjson4/QJsonValue.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/qjson4/QJsonValue.h b/qjson4/QJsonValue.h index bf32898..d902352 100644 --- a/qjson4/QJsonValue.h +++ b/qjson4/QJsonValue.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/qjson4/QJsonValueRef.cpp b/qjson4/QJsonValueRef.cpp index 7d67ef4..dade257 100644 --- a/qjson4/QJsonValueRef.cpp +++ b/qjson4/QJsonValueRef.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/qjson4/QJsonValueRef.h b/qjson4/QJsonValueRef.h index 567c68a..478b657 100644 --- a/qjson4/QJsonValueRef.h +++ b/qjson4/QJsonValueRef.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/res/app.rc b/res/app.rc index 1b2196a..5f4ece2 100644 --- a/res/app.rc +++ b/res/app.rc @@ -7,8 +7,8 @@ CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gta5view.exe.manifest" #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 1, 5, 4, 0 -PRODUCTVERSION 1, 5, 4, 0 +FILEVERSION 1, 6, 0, 0 +PRODUCTVERSION 1, 6, 0, 0 FILEFLAGSMASK 0x3fL FILEFLAGS 0 FILEOS VOS_NT_WINDOWS32 @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view" - VALUE "FileVersion", "1.5.4" + VALUE "FileVersion", "1.6.0" VALUE "InternalName", "gta5view" VALUE "LegalCopyright", "Copyright © 2016-2018 Syping" VALUE "OriginalFilename", "gta5view.exe" VALUE "ProductName", "gta5view" - VALUE "ProductVersion", "1.5.4" + VALUE "ProductVersion", "1.6.0" END END END diff --git a/tmext/TelemetryClassAuthenticator.cpp b/tmext/TelemetryClassAuthenticator.cpp index 6fb5375..fc523f7 100644 --- a/tmext/TelemetryClassAuthenticator.cpp +++ b/tmext/TelemetryClassAuthenticator.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/tmext/TelemetryClassAuthenticator.h b/tmext/TelemetryClassAuthenticator.h index d2dd840..4180029 100644 --- a/tmext/TelemetryClassAuthenticator.h +++ b/tmext/TelemetryClassAuthenticator.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2018 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/uimod/UiModLabel.cpp b/uimod/UiModLabel.cpp index 27c6a7d..4a2c2d4 100644 --- a/uimod/UiModLabel.cpp +++ b/uimod/UiModLabel.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/uimod/UiModLabel.h b/uimod/UiModLabel.h index 7d35e87..0988a4e 100644 --- a/uimod/UiModLabel.h +++ b/uimod/UiModLabel.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/uimod/UiModWidget.cpp b/uimod/UiModWidget.cpp index b517463..75cddf7 100644 --- a/uimod/UiModWidget.cpp +++ b/uimod/UiModWidget.cpp @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2017 Syping * * This program is free software: you can redistribute it and/or modify diff --git a/uimod/UiModWidget.h b/uimod/UiModWidget.h index d30637d..db3ae04 100644 --- a/uimod/UiModWidget.h +++ b/uimod/UiModWidget.h @@ -1,5 +1,5 @@ /***************************************************************************** -* gta5sync GRAND THEFT AUTO V SYNC +* gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2017 Syping * * This program is free software: you can redistribute it and/or modify From 55a01e7fe4b48671274cf3e53b739b536832cf4b Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 24 May 2018 23:33:01 +0200 Subject: [PATCH 080/359] readme updated --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9be8cfd..aab8939 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,8 @@ Grand Theft Auto V Savegame and Snapmatic viewer/editor - Let choose between multiple Social Club accounts as GTA V profiles IDs #### Screenshots -![Snapmatic Picture Viewer](https://i.imgur.com/dQdW3hx.png) -![User Interface](https://i.imgur.com/SRNQdq6.png) +![Snapmatic Picture Viewer](https://i.imgur.com/dQdW3hx.png) +![User Interface](https://i.imgur.com/SRNQdq6.png) ![Snapmatic Properties](https://i.imgur.com/j1Lodiu.png) #### Build gta5view for Debian/Ubuntu From 9b373669b2fc152523fefe9b8fcab0e1fc37efdf Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 27 May 2018 11:13:13 +0200 Subject: [PATCH 081/359] add future watermark to resources --- res/app.qrc | 11 ++++++----- res/global.pt.loc | 1 - res/watermark.png | Bin 0 -> 13806 bytes res/watermarkdark.png | Bin 0 -> 13323 bytes 4 files changed, 6 insertions(+), 6 deletions(-) delete mode 100644 res/global.pt.loc create mode 100644 res/watermark.png create mode 100644 res/watermarkdark.png diff --git a/res/app.qrc b/res/app.qrc index 461c44e..e2562be 100644 --- a/res/app.qrc +++ b/res/app.qrc @@ -1,6 +1,5 @@ - savegame.png 5sync-48.png 5sync-16.png 5sync-24.png @@ -10,17 +9,20 @@ 5sync-96.png 5sync-128.png 5sync-256.png - back.png - next.png 960x536.png - empty1x16.png avatararea.png avatarareaimport.png + back.png + empty1x16.png mappreview.jpg + next.png pointmaker-8.png pointmaker-16.png pointmaker-24.png pointmaker-32.png + savegame.png + watermark.png + watermarkdark.png global.de.ini @@ -33,7 +35,6 @@ global.ko.ini global.pl.ini global.pt.ini - global.pt.loc global.ru.ini global.zh.ini global.zh.loc diff --git a/res/global.pt.loc b/res/global.pt.loc deleted file mode 100644 index 5f648c5..0000000 --- a/res/global.pt.loc +++ /dev/null @@ -1 +0,0 @@ -pt_PT diff --git a/res/watermark.png b/res/watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..82de99890a4de98e9b84bb0ac1a2882fc511ba39 GIT binary patch literal 13806 zcmeHt`B##8`#&w_WTj0F)#O$a<};#cSt>42IgOI*Ozs<*nI*ZB8;Z24HH}M{TP|d| zGvxuGUXh=3xBfZ_+Azu|k%_m}79a5(2a{BYmb`&wShb>Gw7X_wYP zEdT(p3-0{ep8&v?*8srg13zq2-+B5WBTD_V?UIYrZ-DiU&l5^*zWUDgSZ99}0C4Qc z#&=V4H7rqmQ}YJg?VRQ}4c+bAfB505lcoCB&o|Eb-EfSFiVBau0dR~D54{n7`B2ie z8&?lG!QDK4Z)xub01g4*zn$?)9u|(J7|x6fD=^!XXD=C@zJ2IS?08+qFXui# z`i-#9><^q#Rvg`jPPA#lc|q#V{~2eJ*#7OSQPK6@((8~{g}Ad1_ndq9lk;D{yuoNX zoBl(Mv3w0^PV~U9#&PLgN z|MPWTiGDiC8S5Dzo(14;|3SING{^aGmD^8*_&2)`CY25TPHF=tw-ftOA7%0AvXfob(CJC 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 literal 0 HcmV?d00001 diff --git a/res/watermarkdark.png b/res/watermarkdark.png new file mode 100644 index 0000000000000000000000000000000000000000..07b3ef6049508293ccef8bc6588d3afcd8dd3e11 GIT binary patch literal 13323 zcmeHt`B&20{yy0$&(X|oU9z;Y!QosjHO(Q%Y}A}8#aYRmLPJf(S+G3n>6BKO^MGZJ z2sof7h-jYlkOL(OiK3YpDk@Hhh{6Z&-|$`Q`^$Z^Snsv=53u)Z@BKW_>v_GN-Eq97 zAg3$`000zhZLZ$~0QPnQ05ZpZ-7g(^*PjNJzV<(`yLBBP+5MD}sIv#z)J^ETW6dD*74Y(E==ocLra5@$e z{qXcHTZcPtPYx;p0H*=A*R5URn2W6V`ikIW)lFWT9S=j#`s3BBSBHLma^;cC*utTw z7mbYm*2uc{xnNb_F~s{wP-PHW+09|(d*Nq$eaF`U#h;!z|9#M3$>{mT{d-yhW7G~E zK75!dzz{1Ycria;as-hRiP7N#QY&xK^*Oa_-X&bn&S5z+M9FX}QaaK9#}D7sJTFZTfeN82N|gO01)39~4ZE|gUf zdrFPC@4K@GK*CbP`D6gvU$HmT5c~rNI?b}%bt!1%qgryJ7qTcj$&j+AH5G6G&{=al zWDv)o9P>4Hn+oPNZJ!9YMdKBR2wzV9Q{!=C{B?jAz3OeiS!(~8l2p^dwS*~S*f`a; z(Fb4|ud%y~tZo;iJgv4<^W2LQwR$cG7tYN<-KSnYMGfF}Ak;_(%72 zlEsmej*V8(q{v_$O2?M5;}3*808sDhHKZXNCG?YZhf^gtf5{0uFk8YuPIVb?Oe}Qq%3l~NKMkPL_G&<-<@Ca zQw?PMY0T9&7j?lE6O>J-k8~=y)(G*UH08?6v|DK*#9b2(CZ*G%Wz8+qbF+`B} z`WOOJ`0W#nz@1-cVI-gs>k6nXgpR#z< zqO*triaCka0q;sl#O2mkE$J%}1$w3hEx8Na?Dn{Yw&X_3*tR?7by1e&r~ZZZUZtFP zm^~FeJ+IXq1-uhm<=_hQ@}XS|{dH?>exv}mhX0qKH=v}c>sx$*PsaYgDq2Xx{NlkM zZ}(`EbovbM*sEVAEoJl#<$9Q6Ed5&sXHsFAVNNOtbHoch^XBUs#a>;aTteQKAXcJG z#dNo%LlhvrCl_|3LZ7e0tG~)E1cY|T(EKm+iLGJSFQROqjjpYVsJ*GQiipJ$wNu86 z+0^W95c3y@ZZ$VGp)i4`M`78DC%1$z(kf{*4abCFB&xd1V0PbIV+|p>aXZq~Nke#@ z`QA>x@0SmY5dY^m+ep|VqYVg;rC)Snz=~`1_;G2I;c7yAB#-_Wcj?U|H1*{A)#>cf z{06eF-Kt=S&RR5o%{~WdO2_d_iyc?#YF0U)?CvIOQdC{e{ZpUC-wPv0`*aB2U-0Kw zfZ$@6lf7QZ_6yLVwl%Kh9NneVNhPvg6T0v?RuSGN4ucnnwl3I;9eHNvMQnLnOAsTd zLdR~^Zsbq>Stz&9R&0XysuHEyio;mhsir7JHDMl1vIo%ln{jo-#=r}L_XaovxorhR zI?ecxgSz-M+fxJ8h0WukXD|;E{E>>mm#%G4D=wtcF39sU@wX>7IixcbGWrUCSf8`u zj>{OL%awX-bdt_e!riWrjmtxpZns!~tvArHO zIZ4!csUghp@J{o^_}Gd;hQA(2>|J>sVm>Pw=T&AV^WaMzYUGxFn8zSp?kl;-b=0E$ zX=w8uzYj!NT>nrSwMMS+<$6o}dl~L0^nqC`uQSc$aD$Owqvo{8QC1~J(eKDkD4U}2 z?;mOadja)FX%JQ*)l&m-(!Pi#a4FrM$E)$2R$pqh^EJcg2~9CRA;hpE8qgDKj~*}0 zX2%X`#c)oYJAV+_j+GH?)FnTw?z&hi!P&1qx7GRQM_8pi&@(8ZtAV>kYJ*$dWo&2K z4pyT?aap96#na_-5t6lyAb+jSST$k7BBy0*`y^y!j2Zw9U2$~DCx$GToU&QX38{DI z!aQ`gJ1$cY+3em>iD+c)97z4yIw~f7k=w9PEhsMel*0}WgaILYjsa3&&Hup=r?Ck(r&L4R z%rHf~8dGts9kSJJGueaJ)`s4+aOsT&@5FoU8-G5eRTxaawoMJfCw(1H9wV1Offrw~gP z-S-R>ZJi)`@gn_GjL!mi=wt#~hE;~0)27uHy~IvMRSnfPDDjsBLepTd7iT&j+w)3d zgmLT4^?k_lnOe`q>vY{p=vw&%^NFQfmgcZYd;>}BVyMKF1s;os>atNe>{Wc&aE4nw zjzbq!<^8%{H9}5?rR~|QlUv$>p6su_^~WxO**0Kgmb1?Lj3%5f4|`EnD8;ota{edQ zEhVjDxDEwj8|i$Lm7zKRc4r%3JDsTgsHBvg49vQTU& zLPZa__snZKxLt`T4gc3Sp%r)ZuS4@4XGv!8ESBI}Xga$EXXv zAS@?i{!>mjWI76glcC;gGO;Q&a$W1Qg&RN{-=);KZ`P_zi)Q?b zC(AFStvzI#P|b$4qGCa>P!^vPH-!}ht@0(RJYQ%w-&94br6@53oQDjoitFRYH+|MPv|92@EQ11+lAgOAz|#16aMGd~ z(ulSsc3%JHduPvkt3F6LSQD zX+BGL_y|khf%~QL+H^5nn_KwW5UpzOJ8x&)4c23T->r4OlMOIe<6=lL!;?;~vs^;( zq>qBUG3YeGthe+@0`}@Olmuw6ks0kXs4c_(U5UrG=e=NYjH^I}9L9>6s81o%5{^W_ zUB%)lt(K^AH!SfnNfi^iD&Ne@hJnfD8^UK3iA%MIwmg{+GvPMnwER|VfSvN7u@y|&laCZmZ?jv`rZI_C}Pk4^`dr6 z-nJu;?GKc3JA5oyyKW~B|9ML2A$sqs;s;lF3&nn%AVH>|R3)65y?p$FM-(0~u4wEv z)YBT%g(D9;hj?-5I5!5zD%WUYqsdnM;~2yL3^a+G2?5PxMf^4ht4tD^wkPh6-}1aE zeQ*h{p1Ofq+Y!vm&H4b>@0{c*H8zHgb>sI}TcM{Hdd`R2p|vC&rXZ~4XCkd!TuY3MZQd-T(A3b{^)1l;SXT$~e67y7DXkx&5 zJQVELO<}v+lr97!!+t{vCxr7oNXJUhaa|h~>XwzJkf-(L6ow#n+1Dse=<{i1$-930 z{bKd~n82g410-ULMN<}M^C_N!bL5p|_iFWHE9FeR1Y8HwnneLUbQ;+ZwGpuIyLh9O zaWUNTW@=ApW84NOksB3GeMtW~z?Xdb& z=_z}a)`Zx7&A1AT!!~0iVmUR${_?P>-CFmbogFpR&p$i}dCW;1T^eueWh6eVO?&QN z#PX*bYrV?G9mQXnt=yT9rlmSn1E8|@b79my*J5xrOj0_jBC?uoK*yN)M%5<9`-&Z>{~j&p-ig zS@h3;lvAiqUgX$DrGo^Ihm6AyP;~;;!LMjY)n9&|pQ8L0O7q>jL><{|gj1x?K2qjWboV^(ZM<`Hp38gA+^N_0Ps%Luqsv=I-x<$REw9Chy6rqr$3?gymg zD8Gl%k{olf2L@c+iygVjm%obI#B2u^+fJTZUzQYqGD*N zT+@=T=liosr!UR=^qz#|ke@XOu(S`RH;tT{HGz&P=-_?hRBBd(V_I#MzRIwb31fF zZ04@82MxV4ms?-Ro9UqVp1UeBIOTvws#bH0UL;&g3Vb#_UTlOF)J?>O4 zMxDltai<}`ce3-0WIj*R>=24@5+H-!0i|_Ui0G$NX}~*!=vUF6J0iNA zd69N;N!};__ip~~9RCX7KwC)Cw`_Xz#uGKkHBZA2@*Iv-vg4ay@Z5ih3+%YJ6Qc|x zqFK$lc4#>;;te3lk@<_~&VJMmg!?8m{lX zsWcys>aPggX`O#NXl(CVVnwy0?TXLqWnNjTB-Tc5J}ES05zVczWJ9 zN+g1S=3wf(_fpwwh;T!iJxv;G#(N=+16__U1j#P>uJKdGVPD$~p#2;^1XQir*l|Q2 z(*v>lBQ@FXmz0rNtrF_{?}@IS{IzDtv{O#3cl-n^<+0!`2 z?@>3HzuXoC&grx`RSdk_uEZZNarRrw8Od)NHlbOUTDr!)eY(kL>|mjsIq=?Z!jkG~ z^Y9W&|5tbUN!!~o(@Nz1}(G1u>&syF6*V;MT3Ww~}zJnk^VFr$2!-#+82 zK)xKO<&{P6vnNhan2d1;&wY_Uk4NsbfPRg4Dp}*W`S+~rceRA#^ZOpoy`KxbI{d6& z7c(THP{ixAb7sKd|PcV#)N}JbCKpA8k-DT`}ND4?* zLt1E+WMA37OM2rz98Tc`-=Z~3vUL6wD%s(vZtBK;&rhvpf;GslTL!H*CXrSfk-^=L#rb(M7;Zn=_Vb4J zDoR@{HH2At>90jYwK+w(@sn3QVQYl*rL4`ykV7AIoWQ(|%kc@ulPpM+3vVLDzsUQ6 zgy>O*`e!S;wbagQEVgEUK`K8v@z%-2p#(Yaf|j3=N-3>U{5L6&^4APU(sLj zdtUU&fxX8>a8mf4v3Oe^d>*^9IGQqbXm@?uhOdnrdHs* zyFPy^W?DqY?n$0EdAfO86S2ViDR)-&Hu_DNvV8jF=Z6ofM6_C-lk1-a1J#FbJtlxJi5waKnE`7eFkb8eA{q>bpVt zRf0H^Vs<$M#2bZey-4;*uooq<_ByT0EYCrJ<4{=t5#R$|o{wZNq{(v9c!PEM-k!Md zn@!GtE}m*tY@^{Lk5-!=;};qkE1( zKyPC!L6hkamZQ^k^*C^;@8TliS5>NkpfYwjUPyP{_Lt5Flys{t~n8K|R{Nv7|c@EBz`%{!UagkSjKk06G(JlRXar?i5 zw8s^DWw=KmIivhXzbNY*NeRd7f2|bg^19=9%-HG#ArD;g^>0^O?!{%kdIxF^=E$pt z+A|Cj9+M=4Tg0&KaLx+zS*vbL9>PzX!z)qQOqo zRewiOOQpk?buI)*;gzN=HwP~m>~AKIX#wg!Ri5|toVz~uhTS{V1KnUWk}N1>$JJY~ zN7^+l3a)XBM$Cw3Wgn1<B@9>S z(@e?>T&eq^_#X7em`&8#g}-|Sww5_9I@}~?e&-4!$zs!Sc(3$i`4F`LWIasd1_6IO zruFA6hBzW%-5Pdhx61{#La%3$@ z2dXidStm1jS2T`^GPhBYXYRx|E6yB&Osk@rdI0UG&fIrSdm$bIy{v-mgFjLjGqvhv zs3%!uaoR&%=47{IBNrYw`g9U>FxpGGgqyhP`>}Ru15&N>*jXzHzGI?n?fT>X;@IZ5 zpW5h^A5R`_D~~q8zza3?W0~0<@8Kl#=R_->!)nfXvi-M5p2o9gTr)ioV{vuM(Z@2T z6m^>`Zci-Ff_;=sOTEQTKyvjdHu)91+ZJvH-S}31;mD-|I&>8@x{3XpD79+WNSqm^ z;m`|j!-E$^S%yp0h=SnFob);Cr1Wj z^UT;It}rW61XFpU=~f#ewhF`&jSS7b3c^%fi>M0Lu*##pO{ z71?&OAeKW<-fn+UD-qGsFP-r2+6Y6hnM}$LySe^4A-x74&h@?2-1UUxT>toPVT*N8 zLB!*=mJ5Jd#`=K%N{}qBuUgKyT2`VMw4zM7)pUVUl)ZiL=5&Ue)N1|O;d@N^J!k+c z1?SET8lgmxS92MiHM0#|7^~cBpR`fYCNh7kubfXNyOT?EM`EWZJQWU+U$>aMB2G?= zvbSwL89#Fp8m~@Rc#JD-77i=@y9=c8`Vjqe$c(wjZJpIDettZY`F;Ftb6f;Nd| zH9l~w0KKkqT|T*K%`#vKR$i##oX`M8eNU^c^b?8kjee}&$pynZj~t2uMac7~oVFJq zEk_1t?*XJ_t3H*=pQ~;srT)l@8p8KU@HyhUn9v5_lCQs5WCP6yu?WQ3^01-QiBMBa zE#Dc^XYAwLYp`H38|!0X)$#O;kxv(IXd-^J)YXuvixJIjf3viAot={zyYBgEapZXB zjZ%A+#LHf1B9a_fVP>2P5Lv>-|JK)1nfZDm_pXw3@BBl^&Hbk|^RAqXPPl;Ik=;>^U~4Y@H4akVGLRx@fP;S}&uyA!gN5Q!9hBSZBp^TtQVjwE-RynTwh&oW8;afvJ zR~;Et3$o0xA#gn%GJ;Q&yOe5JoTvL9lx-|1og%^>S>>@sz(+=)G80{>JwI6cglf%q zzF6+0bF-?FrZ7kD3D_<&oaY`>0g}hrt8^!MkT`v|mL+UeMgw*|PD6XWqbY0ViQEH4 z7yr&_;C9x!47*@tcKMwgGFY%`$4C}C+lrlCjm_dYUHFC?o+I~%S&1tUwQ!Pg64u|O zxvXu3YKi_r#&Lx|e9L>*xP_#P(0f=j?l^4Zhr`H~2v?RY6~`5go3?^Irwq+rxi;(w zLl$g~Ip!gEzuSB7;%yO3; z4(zbH;rr`EE*&J8@jsJvYu^eYkG%%0{Hd)b@k?99%0rc&BL0K%6uPIq7dI5&WyBjv zxe4)_4%+c)F3E9RGF)iRd4#!=47myXz5_eZ@-;h_MyR9Wrj)6} ze4+16|In)5rPiX_xBgSVAVxN-KyFnuLNfR+=Y7$LCd2AN_G9} z&)YomHJESdKeS$!u1oi)*rrC?UIJHg#Z!r+o%_(h?2e=bQLfVVUt(2(>)u|?h5!j< zo5=2~`iaG$@75MYr=SLjj(_isBBD8^Z2 z?R+?g37z!-CKv?|v-k@MndIQeXQy{o2tj1;t`5X`C3XGj#Xt%nYvz3@qD?u5mzJcAH-Tacx zHucC^G4to^Ov{E{8IEp%e$jd-Q3I8zv|uw6Uq%s&=BMComqUJPU$KBam5C6PA)JvC z11NMz5RCsftWmr8vc2LM_P7C6EWQOUO^OZw9*Jdtor@f zY@)?0R}8NwS=D{UC`MCg&t!InJ8`keH*QXMia1!6vtLSDmz0;V{?Z!7{W^RIQJRna zb-r|G`-&&-4-2%prYx;?ZqhOIIv30x8`Ao$GSPia*`1;b02~S4?FEq5PVYBc^WWh^ z*xtwj>&E(n&!TU6!Xl0AbkU8v(4_BAjwH25K|nn(D>G5;rcnKwKAP4?FYX?AIP+MK z3ay7GE_*uVz3Ji7|`akM@-$YS|>6apD~{M}1}XfpLrN z8W^)x4+!u}n`y2{dmB-1xwi6xpea2d8ip#X z*omSLD*?k0VS@P~BAHexa^~!=oqQ<_soQic^-Z&U)$H^k<}`(;CfxD;Vn&ZQ_1yc< z01UC?QPS$>+Wk3-JMO?}IDw54*ce8S-@|2S)t~bI#F5r(1@nZ=*e7tkUSILU8qxQ@ zkv|RKSVhJPG;W%HT3Q2_kzbs8Y{%TBf{(T66iO~aUB}v{7i5wjBM~l79@S_qmqS=7 zxPfOSuO4oX#z%SHz@a-F*mEO{YaZT)?HZKuDhKaNcO@IfknH2Ejx3QLV=TizbD;Ft z*dY6GZ=}id-WjYQenG2~Mxyex3Vil`KtDKzom52pO-^T-%wR}stuFiGT4EJmvj2YR z2k*JJN4jH%S?^&L?G13rx0Uos3B-g z{#2t4zVP@3OcXeQbq}o=gvezpF*r*$Xip21$9)$jRq(%M9#p4DHd|Vu$6HojP*pTU zikimautv@`(jxpU1*gVQL~8G+(EZS56K`CfEXne$(+0wxR#_Z(n26S2uvcjsz0j0R z*dNPbyMXsd%lxc#iq&zA$>SQ}lNvnm!)%2M_h!bQrLilz*^22Dhik_)!oJ!V zn!iog6K?3W#hi(E+ewn_q^7YK{8rbx+2!5r#BTO8zeYs9`DOd16B>w1_VA!HqaCjf zq*L0u*^+A14*Tlryl^7Y#_Hi1%hDbW%TI#lCn55aV)EPlk_xB&8Uyo_?&l{}Y)HDB ztu(u@GXrj*Fki+pzmAu%_j-&DS#_H39+J(kk8M4Ht55M)MBQ&j)tm6UIIv2`|Aw^8 zV^0*$35(TqoxG0DRN_4nGJH1cpr|6Y5-li!qz0}0CK~FIN8Ls3WJ9ty$Mag$ZZjM< z8=1pd*5QqGJ1?7#>J2XNxWjgoC#WdHe?(e^L?xPI5|ZyL?DDu&*P`Nb&vhueEg!_kTh9}i`BpBJk24(F^LP3mOXCr$ga%X6|#OAcwZLM z_x1d|xR}lokW!_tj|^AZSpZ+i+mG22y|Z3bfpB|$LAWBV`!Pq(I#e3VNADXONIiO1 z>Kc3=&s<^MBgfeNuvf@N%R--(JyV-J(ekW0t8OZZ)c$lG*8EaLBcxJiW)1$OI8@8! zXbSHe?k_IATV_?JBTpHQQwH=Z(lve#(&%L{3ta2ztP?cG=sMVPq ztP$_V+?=RNzt9ekHIWOE@)FK$DCkv(HpL!eaLI$0Xy@6=#%T(h@_TUMy@iexP z*ybC|n52$`T9#`qmu*0t!zE@05PvvAmxB5^mlJzsm;X*K_Eq<-9tRE+qD@MSAj4)u zwYgxY)dJr;DhE8T>{|F+Um{lYZ+oFdYd36z(kX%=!XBDL41-? zHt2ievLLu)NXr&T*COl5eR=iBB~$TX#X4rDKqyulSw0 z$jyFtz^V6{bIHL>6DC;-X8nq8UY}i{2z^S6->QEqTbjd;fKO<&j&#(G7-uI{e-w-W zm#8)Vi#@7N47mMp2lc%}WOLOZm1HZ{pyUnJe!cYvco(a`#TfuiI5e#mVtRQP5od=M zJ62#&qBJ?ARZ`Fi{9_EK5){X~y*gZ$IayLYzr3dPA|`aQqg^RXPytE{uf|fqwrCk$ z7o~YWsXoRMOg+ZpuBCkrm8Gz{kERFf*8-dlGSxi7(GgoLKQ96VJmh5u;UBCT5GUDr z@&)bq{VAOHuwF}&CD{uJ(SVvScc>|6D zA1`Y;;A!J)6Pb)ecs_~MDQ}J<{#LHv5PiS626bF|G7)!~`4efivlBj6#zkKXyPP2- z9OFuuQ-{T3us~<+a__bLeY=0?{P%+1s86;7^fp%~2`+W&s1A{n^$zy@PWLY=2bc@J zN}$Si#J5_)jt)tlWTpGwp{4m@V^w+DS8Gw5P)E(JtV4q$uRRRE2o=870Z1YSzFVX1 z$=C^zo8cbD_8(k@^IZ}J0KiH)9cVA8fL*iT~Kq^<(<4~JV@HAa-bBQEV3 zu9umc@cnS|AT!~EQ_J}x`Otz2YeD_xuXg{)Q_6g;?E4M(e^AjhLmmAv`Np-b%?NrG zjkSwXN|A+RgGpzgEpwub3%^^P%JJO2x0|mOJALky*cW}7gWBrYL~`_maiEx9hl&e` z=pawy8P$Ll)0Xap$r9i_sr`=OuVn*cG?Dg-%mqr`dj~bci!I@-W8bZr_iWuN296~! ze&Y=AuWqgF$A~u8>o2g@Gt~@EMLe0Am8ROu<#AQFt_^y|i=+};X4<9|b2=F(YPHsLBPeVeiU&;=eH zKa<*#ryTB`8li;jA3osXM!#sD%Wm>8?cBS2P^}(p0l(MaZ$pveuh_Ki0BRX5*s<|p z3U5#?ZzS=QgV)~841@D-f}hvATkOBuWp7_)ei)ZFxn5y@W7Xgb-cgU^tq>2MC3Cep zy@qm65Trea6JmUyq5t~Z1nOmAvDA}ALs;c|q{(24D$LMT(4y8_2}`xSWG^~Dp#Mvwb~{MKIk$x~%DbH9np9P(jXWuQD=yQ2OOeayV*AH6nh%+u`v3}*}k zGkDmi?^D3W%e4tyPM4~T;V5cKik=@zZ=?4k!oSthu1zDPdhLJD|03|e2>dSs|BJx? iBJlq!0x8ZPC5j*LgEiq(?a8~7u)X1U9eefu)BgkVJ7hEf literal 0 HcmV?d00001 From 2b3a22b893dc16170935a89c99b9167cf0c77caf Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 30 May 2018 07:49:33 +0200 Subject: [PATCH 082/359] fix OS X build --- .travis.yml | 6 ++++-- ProfileInterface.cpp | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2bebc22..e963d96 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,10 +30,12 @@ matrix: - env: - BUILD_SCRIPT=wininstall_travis.sh - QT_SELECT=qt5-x86_64-w64-mingw32 - + - os: osx + env: BUILD_SCRIPT=osx_travis.sh + before_install: - ".travis/source.sh" - + script: - ".travis/travis.sh" diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index d58d428..0684f50 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -51,6 +51,7 @@ #include #include #include +#include #include #include #include From 48650633a55812b52878abd1eb983576e26f826d Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 30 May 2018 07:57:51 +0200 Subject: [PATCH 083/359] fix OS X build --- MapLocationDialog.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/MapLocationDialog.cpp b/MapLocationDialog.cpp index 759e331..77a32fb 100644 --- a/MapLocationDialog.cpp +++ b/MapLocationDialog.cpp @@ -22,6 +22,7 @@ #include "AppEnv.h" #include #include +#include MapLocationDialog::MapLocationDialog(double x, double y, QWidget *parent) : QDialog(parent), xpos_old(x), ypos_old(y), From bf81aea0c98eba7644225edc1b549e0a18a1f206 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 30 May 2018 08:17:12 +0200 Subject: [PATCH 084/359] fix OS build, add deployment label --- .travis.yml | 10 +++++++++- ImportDialog.cpp | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e963d96..d961204 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,27 +11,34 @@ matrix: - env: - BUILD_SCRIPT=debian_travis.sh - QMAKE_FLAGS_QT4=QMAKE_CXXFLAGS+=-Wno-missing-field-initializers + - RELEASE_LABEL=Debian 32-Bit Package - DEBIAN_VERSION=jessie - DOCKER_USER=i386 - APT_INSTALL=clang - env: - BUILD_SCRIPT=debian_travis.sh - QMAKE_FLAGS_QT4=QMAKE_CXXFLAGS+=-Wno-missing-field-initializers + - RELEASE_LABEL=Debian 64-Bit Package - DEBIAN_VERSION=jessie - DOCKER_USER=amd64 - APT_INSTALL=clang - env: - BUILD_SCRIPT=windows_travis.sh - QT_SELECT=qt5-i686-w64-mingw32 + - RELEASE_LABEL=Windows 32-Bit Portable - env: - BUILD_SCRIPT=windows_travis.sh - QT_SELECT=qt5-x86_64-w64-mingw32 + - RELEASE_LABEL=Windows 64-Bit Portable - EXECUTABLE_ARCH=_x64 - env: - BUILD_SCRIPT=wininstall_travis.sh - QT_SELECT=qt5-x86_64-w64-mingw32 + - RELEASE_LABEL=Windows 64-Bit Installer - os: osx - env: BUILD_SCRIPT=osx_travis.sh + env: + - BUILD_SCRIPT=osx_travis.sh + - RELEASE_LABEL=Mac OS X 64-Bit Disk Image before_install: - ".travis/source.sh" @@ -43,6 +50,7 @@ deploy: provider: releases api_key: secure: o7VneEz1aHfdVwZvOZLfopf6uJWNrFsZaBvunTmXFzpmNFhlNS1qwqgMUkIA2yBRbZ3wIzVs4vfwIHv7W9yE/PqK+AYL+R8+AwKGrwlgT4HqJNuk6VM/LNJ6GwT/qkQuaoOVw29bUjmzzgIRdHmw53SlJv6Hh1VE8HphlTT//aex6nCfcFhUZ0BETdZDWz5FSHwL3NalUoqfKfQrJeky5RXzCyCANQC2tKt0bV46GaWIgWrDo2KCTNqPtRWWf5GDmnkXE5IYRMQ3mXvO9iYh0v5Y2jo4PiXGUiFUU6Z3aAWFAiPdGclrBO697cf3lCTzDMhuCETR153qFYsLShUlFf61ITAmCeHAWETjZDri0lmPONo3GoNB6alGfYEA51qw14kXakrTpICtTJj7gw/gtUYOabW6hrzmieNzMBIy62RikDPjyakFnuwW2qNHRlD65e0jYv+6nCpb6E+OV16Ysh1zhV2vTfpfzVmSuyu2J+ELqXD3OZCXRSPpDIih9UQ8335p8FBji6jHORcgym/TRgdgRmENibh8tLzWp+UjpWHuWfcpvZgOskjfwU0iDMCayMJ7tDpOhXHcAhDRnd6XRIiOJ5YZCzflj2nEwmt3YUd7DwXS/AU+WHOmcNQBjXBxF/FJa35XXcy3HKJM5TTKqtph3medo30us5yXHeG6NNg= + label: ${RELEASE_LABEL} file_glob: true file: assets/* skip_cleanup: true diff --git a/ImportDialog.cpp b/ImportDialog.cpp index d40c701..59ea61d 100644 --- a/ImportDialog.cpp +++ b/ImportDialog.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include From 61864c65eb4647eac8bb1b133ef5527812fc5a74 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 30 May 2018 08:27:21 +0200 Subject: [PATCH 085/359] rename installer after packaging --- .travis/gta5view.nsi | 1 + .travis/wininstall_build.sh | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis/gta5view.nsi b/.travis/gta5view.nsi index 1b1e7f1..89a557a 100644 --- a/.travis/gta5view.nsi +++ b/.travis/gta5view.nsi @@ -79,6 +79,7 @@ InstallDir "$PROGRAMFILES64\Syping\gta5view" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Russian" +!insertmacro MUI_LANGUAGE "Ukrainian" !insertmacro MUI_LANGUAGE "TradChinese" !insertmacro MUI_RESERVEFILE_LANGDLL diff --git a/.travis/wininstall_build.sh b/.travis/wininstall_build.sh index 806292c..728d484 100755 --- a/.travis/wininstall_build.sh +++ b/.travis/wininstall_build.sh @@ -14,4 +14,5 @@ cd build && \ qmake ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"GitHub\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_INLANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_LANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_PLUG='\\\"RUNDIR:SEPARATOR:plugins\\\"' ../gta5view.pro && \ make -j 4 && \ cd ${PROJECT_DIR}/assets && \ -makensis -NOCD ${PROJECT_DIR}/.travis/gta5view.nsi +makensis -NOCD ${PROJECT_DIR}/.travis/gta5view.nsi && \ +mv -f gta5view_setup.exe gta5view-${EXECUTABLE_VERSION}_setup.exe From e76551161484af7de14c8c85f9f6348b4aec269b Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 30 May 2018 08:29:46 +0200 Subject: [PATCH 086/359] fix release labels --- .travis.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index d961204..f04e462 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,34 +11,34 @@ matrix: - env: - BUILD_SCRIPT=debian_travis.sh - QMAKE_FLAGS_QT4=QMAKE_CXXFLAGS+=-Wno-missing-field-initializers - - RELEASE_LABEL=Debian 32-Bit Package + - RELEASE_LABEL="Debian 32-Bit Package" - DEBIAN_VERSION=jessie - DOCKER_USER=i386 - APT_INSTALL=clang - env: - BUILD_SCRIPT=debian_travis.sh - QMAKE_FLAGS_QT4=QMAKE_CXXFLAGS+=-Wno-missing-field-initializers - - RELEASE_LABEL=Debian 64-Bit Package + - RELEASE_LABEL="Debian 64-Bit Package" - DEBIAN_VERSION=jessie - DOCKER_USER=amd64 - APT_INSTALL=clang - env: - BUILD_SCRIPT=windows_travis.sh - QT_SELECT=qt5-i686-w64-mingw32 - - RELEASE_LABEL=Windows 32-Bit Portable + - RELEASE_LABEL="Windows 32-Bit Portable" - env: - BUILD_SCRIPT=windows_travis.sh - QT_SELECT=qt5-x86_64-w64-mingw32 - - RELEASE_LABEL=Windows 64-Bit Portable + - RELEASE_LABEL="Windows 64-Bit Portable" - EXECUTABLE_ARCH=_x64 - env: - BUILD_SCRIPT=wininstall_travis.sh - QT_SELECT=qt5-x86_64-w64-mingw32 - - RELEASE_LABEL=Windows 64-Bit Installer + - RELEASE_LABEL="Windows 64-Bit Installer" - os: osx env: - BUILD_SCRIPT=osx_travis.sh - - RELEASE_LABEL=Mac OS X 64-Bit Disk Image + - RELEASE_LABEL="Mac OS X 64-Bit Disk Image" before_install: - ".travis/source.sh" From d94a3712be0efc53d81800d4d7efe583735b7aa9 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 30 May 2018 08:53:27 +0200 Subject: [PATCH 087/359] add git head if not tagged --- .travis/travis.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.travis/travis.sh b/.travis/travis.sh index 413c830..e1459ec 100755 --- a/.travis/travis.sh +++ b/.travis/travis.sh @@ -8,10 +8,17 @@ elif [ "${TRAVIS_OS_NAME}" == "osx" ]; then brew install lua fi +# Check is build not tagged +if [ "${TRAVIS_TAG}" == "" ]; then + export EXECUTABLE_TAG=-$(git rev-parse --short HEAD) +else + export EXECUTABLE_TAG= +fi + if [ `git name-rev --tags --name-only $(git rev-parse HEAD)` == "undefined" ]; then export APPLICATION_VERSION=`lua -e 'for line in io.lines("config.h") do local m = string.match(line, "#define GTA5SYNC_APPVER \"(.+)\"$"); if m then print(m); os.exit(0) end end'`; else export APPLICATION_VERSION=`git name-rev --tags --name-only $(git rev-parse HEAD)`; fi export PACKAGE_VERSION=$(grep -oE '^[^\-]*' <<< $APPLICATION_VERSION) export PACKAGE_BUILD=$(grep -oP '\-\K.+' <<< $APPLICATION_VERSION) -export EXECUTABLE_VERSION=${PACKAGE_VERSION}${PACKAGE_BUILD} +export EXECUTABLE_VERSION=${PACKAGE_VERSION}${PACKAGE_BUILD}${EXECUTABLE_TAG} if [[ ! ${PACKAGE_BUILD} ]]; then export PACKAGE_BUILD=1; fi export PROJECT_DIR=$(pwd) From e74b19fed0001a67463cbe29750471ac96cab4cf Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 30 May 2018 09:09:15 +0200 Subject: [PATCH 088/359] update travis scripts with PACKAGE_CODE var --- .travis/debian_build.sh | 4 ++-- .travis/debian_travis.sh | 2 +- .travis/osx_build.sh | 2 +- .travis/travis.sh | 7 ++++++- .travis/windows_build.sh | 2 +- .travis/windows_travis.sh | 2 +- .travis/wininstall_build.sh | 2 +- .travis/wininstall_travis.sh | 2 +- 8 files changed, 14 insertions(+), 9 deletions(-) diff --git a/.travis/debian_build.sh b/.travis/debian_build.sh index be16a47..ca7bbb7 100755 --- a/.travis/debian_build.sh +++ b/.travis/debian_build.sh @@ -21,11 +21,11 @@ mkdir -p /usr/share/gta5view && \ # Starting build cd qt5 && \ -qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"GitHub\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \ +qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \ make -j 4 && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=${PROJECT_DIR}/assets && \ cd .. && \ cd qt4 && \ -qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT4} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"GitHub\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ +qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT4} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ make -j 4 && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=${PROJECT_DIR}/assets diff --git a/.travis/debian_travis.sh b/.travis/debian_travis.sh index 8fa5ed8..73ed796 100755 --- a/.travis/debian_travis.sh +++ b/.travis/debian_travis.sh @@ -12,4 +12,4 @@ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/debian_install.sh && .travis/debian_build.sh" + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/debian_install.sh && .travis/debian_build.sh" diff --git a/.travis/osx_build.sh b/.travis/osx_build.sh index fcdd0ac..b25161d 100755 --- a/.travis/osx_build.sh +++ b/.travis/osx_build.sh @@ -8,7 +8,7 @@ mkdir -p build && \ mkdir -p assets && \ cd build && \ -/usr/local/opt/qt/bin/qmake ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"GitHub\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ +/usr/local/opt/qt/bin/qmake ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ make -j 4 && \ /usr/local/opt/qt/bin/macdeployqt gta5view.app -dmg && \ cp -Rf gta5view.dmg ../assets/gta5view-osx_${APPLICATION_VERSION}.dmg diff --git a/.travis/travis.sh b/.travis/travis.sh index e1459ec..e652f17 100755 --- a/.travis/travis.sh +++ b/.travis/travis.sh @@ -8,13 +8,18 @@ elif [ "${TRAVIS_OS_NAME}" == "osx" ]; then brew install lua fi -# Check is build not tagged +# Check if build is not tagged if [ "${TRAVIS_TAG}" == "" ]; then export EXECUTABLE_TAG=-$(git rev-parse --short HEAD) else export EXECUTABLE_TAG= fi +# Check if package code is not set +if [ "${PACKAGE_CODE}" == "" ]; then + export PACKAGE_CODE=GitHub +fi + if [ `git name-rev --tags --name-only $(git rev-parse HEAD)` == "undefined" ]; then export APPLICATION_VERSION=`lua -e 'for line in io.lines("config.h") do local m = string.match(line, "#define GTA5SYNC_APPVER \"(.+)\"$"); if m then print(m); os.exit(0) end end'`; else export APPLICATION_VERSION=`git name-rev --tags --name-only $(git rev-parse HEAD)`; fi export PACKAGE_VERSION=$(grep -oE '^[^\-]*' <<< $APPLICATION_VERSION) export PACKAGE_BUILD=$(grep -oP '\-\K.+' <<< $APPLICATION_VERSION) diff --git a/.travis/windows_build.sh b/.travis/windows_build.sh index 53ba6ba..8e72196 100755 --- a/.travis/windows_build.sh +++ b/.travis/windows_build.sh @@ -11,7 +11,7 @@ mkdir -p assets && \ # Starting build cd build && \ -qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"GitHub\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ +qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ make -j 4 && \ cp -Rf release/*.exe ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} && \ cd ${PROJECT_DIR}/assets && \ diff --git a/.travis/windows_travis.sh b/.travis/windows_travis.sh index 4811eb2..a77d6b4 100755 --- a/.travis/windows_travis.sh +++ b/.travis/windows_travis.sh @@ -9,4 +9,4 @@ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/windows_build.sh" + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/windows_build.sh" diff --git a/.travis/wininstall_build.sh b/.travis/wininstall_build.sh index 728d484..93da89a 100755 --- a/.travis/wininstall_build.sh +++ b/.travis/wininstall_build.sh @@ -11,7 +11,7 @@ mkdir -p assets && \ # Starting build cd build && \ -qmake ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"GitHub\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_INLANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_LANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_PLUG='\\\"RUNDIR:SEPARATOR:plugins\\\"' ../gta5view.pro && \ +qmake ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_INLANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_LANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_PLUG='\\\"RUNDIR:SEPARATOR:plugins\\\"' ../gta5view.pro && \ make -j 4 && \ cd ${PROJECT_DIR}/assets && \ makensis -NOCD ${PROJECT_DIR}/.travis/gta5view.nsi && \ diff --git a/.travis/wininstall_travis.sh b/.travis/wininstall_travis.sh index e9fabfc..ed44a44 100755 --- a/.travis/wininstall_travis.sh +++ b/.travis/wininstall_travis.sh @@ -9,4 +9,4 @@ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/wininstall_build.sh" + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/wininstall_build.sh" From 979747b8f5655281cb5b9f79a1df912f79bc8105 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 30 May 2018 09:31:47 +0200 Subject: [PATCH 089/359] update scripts to dev build --- .travis/debian_build.sh | 4 ++-- .travis/osx_build.sh | 2 +- .travis/windows_build.sh | 2 +- .travis/wininstall_build.sh | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis/debian_build.sh b/.travis/debian_build.sh index ca7bbb7..52e6608 100755 --- a/.travis/debian_build.sh +++ b/.travis/debian_build.sh @@ -21,11 +21,11 @@ mkdir -p /usr/share/gta5view && \ # Starting build cd qt5 && \ -qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \ +qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \ make -j 4 && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=${PROJECT_DIR}/assets && \ cd .. && \ cd qt4 && \ -qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT4} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ +qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT4} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ make -j 4 && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=${PROJECT_DIR}/assets diff --git a/.travis/osx_build.sh b/.travis/osx_build.sh index b25161d..8a5663d 100755 --- a/.travis/osx_build.sh +++ b/.travis/osx_build.sh @@ -8,7 +8,7 @@ mkdir -p build && \ mkdir -p assets && \ cd build && \ -/usr/local/opt/qt/bin/qmake ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ +/usr/local/opt/qt/bin/qmake ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ make -j 4 && \ /usr/local/opt/qt/bin/macdeployqt gta5view.app -dmg && \ cp -Rf gta5view.dmg ../assets/gta5view-osx_${APPLICATION_VERSION}.dmg diff --git a/.travis/windows_build.sh b/.travis/windows_build.sh index 8e72196..5ab864b 100755 --- a/.travis/windows_build.sh +++ b/.travis/windows_build.sh @@ -11,7 +11,7 @@ mkdir -p assets && \ # Starting build cd build && \ -qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ +qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ make -j 4 && \ cp -Rf release/*.exe ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} && \ cd ${PROJECT_DIR}/assets && \ diff --git a/.travis/wininstall_build.sh b/.travis/wininstall_build.sh index 93da89a..1ca3622 100755 --- a/.travis/wininstall_build.sh +++ b/.travis/wininstall_build.sh @@ -11,7 +11,7 @@ mkdir -p assets && \ # Starting build cd build && \ -qmake ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_REL "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_INLANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_LANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_PLUG='\\\"RUNDIR:SEPARATOR:plugins\\\"' ../gta5view.pro && \ +qmake ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_INLANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_LANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_PLUG='\\\"RUNDIR:SEPARATOR:plugins\\\"' ../gta5view.pro && \ make -j 4 && \ cd ${PROJECT_DIR}/assets && \ makensis -NOCD ${PROJECT_DIR}/.travis/gta5view.nsi && \ From 1b54c8c45663308635264b3bf680a50076b3d7e5 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 30 May 2018 09:39:10 +0200 Subject: [PATCH 090/359] add dropbox_uploader --- .travis/dropbox_uploader.enc | 1 + .travis/dropbox_uploader.sh | 1763 ++++++++++++++++++++++++++++++++++ .travis/source.sh | 3 +- 3 files changed, 1766 insertions(+), 1 deletion(-) create mode 100644 .travis/dropbox_uploader.enc create mode 100755 .travis/dropbox_uploader.sh diff --git a/.travis/dropbox_uploader.enc b/.travis/dropbox_uploader.enc new file mode 100644 index 0000000..60a77f9 --- /dev/null +++ b/.travis/dropbox_uploader.enc @@ -0,0 +1 @@ +Po§èQƒŠN×<ì1x£%™{ ¬Èw|RtZvö[kÎçòéAZãå2Á›øŸÎ«`ïJÑ,4vÖÏ¥@€®¦eÊ¥~U$+‡žóP€÷|ˆy<à±&–Hê¤ \ No newline at end of file diff --git a/.travis/dropbox_uploader.sh b/.travis/dropbox_uploader.sh new file mode 100755 index 0000000..ca8ee36 --- /dev/null +++ b/.travis/dropbox_uploader.sh @@ -0,0 +1,1763 @@ +#!/usr/bin/env bash +# +# Dropbox Uploader +# +# Copyright (C) 2010-2017 Andrea Fabrizi +# +# 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 +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# + +#Default configuration file +CONFIG_FILE=~/.dropbox_uploader + +#Default chunk size in Mb for the upload process +#It is recommended to increase this value only if you have enough free space on your /tmp partition +#Lower values may increase the number of http requests +CHUNK_SIZE=50 + +#Curl location +#If not set, curl will be searched into the $PATH +#CURL_BIN="/usr/bin/curl" + +#Default values +TMP_DIR="/tmp" +DEBUG=0 +QUIET=0 +SHOW_PROGRESSBAR=0 +SKIP_EXISTING_FILES=0 +ERROR_STATUS=0 +EXCLUDE=() + +#Don't edit these... +API_LONGPOLL_FOLDER="https://notify.dropboxapi.com/2/files/list_folder/longpoll" +API_CHUNKED_UPLOAD_START_URL="https://content.dropboxapi.com/2/files/upload_session/start" +API_CHUNKED_UPLOAD_FINISH_URL="https://content.dropboxapi.com/2/files/upload_session/finish" +API_CHUNKED_UPLOAD_APPEND_URL="https://content.dropboxapi.com/2/files/upload_session/append_v2" +API_UPLOAD_URL="https://content.dropboxapi.com/2/files/upload" +API_DOWNLOAD_URL="https://content.dropboxapi.com/2/files/download" +API_DELETE_URL="https://api.dropboxapi.com/2/files/delete" +API_MOVE_URL="https://api.dropboxapi.com/2/files/move" +API_COPY_URL="https://api.dropboxapi.com/2/files/copy" +API_METADATA_URL="https://api.dropboxapi.com/2/files/get_metadata" +API_LIST_FOLDER_URL="https://api.dropboxapi.com/2/files/list_folder" +API_LIST_FOLDER_CONTINUE_URL="https://api.dropboxapi.com/2/files/list_folder/continue" +API_ACCOUNT_INFO_URL="https://api.dropboxapi.com/2/users/get_current_account" +API_ACCOUNT_SPACE_URL="https://api.dropboxapi.com/2/users/get_space_usage" +API_MKDIR_URL="https://api.dropboxapi.com/2/files/create_folder" +API_SHARE_URL="https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings" +API_SHARE_LIST="https://api.dropboxapi.com/2/sharing/list_shared_links" +API_SAVEURL_URL="https://api.dropboxapi.com/2/files/save_url" +API_SAVEURL_JOBSTATUS_URL="https://api.dropboxapi.com/2/files/save_url/check_job_status" +API_SEARCH_URL="https://api.dropboxapi.com/2/files/search" +APP_CREATE_URL="https://www.dropbox.com/developers/apps" +RESPONSE_FILE="$TMP_DIR/du_resp_$RANDOM" +CHUNK_FILE="$TMP_DIR/du_chunk_$RANDOM" +TEMP_FILE="$TMP_DIR/du_tmp_$RANDOM" +BIN_DEPS="sed basename date grep stat dd mkdir" +VERSION="1.0" + +umask 077 + +#Check the shell +if [ -z "$BASH_VERSION" ]; then + echo -e "Error: this script requires the BASH shell!" + exit 1 +fi + +shopt -s nullglob #Bash allows filename patterns which match no files to expand to a null string, rather than themselves +shopt -s dotglob #Bash includes filenames beginning with a "." in the results of filename expansion + +#Check temp folder +if [[ ! -d "$TMP_DIR" ]]; then + echo -e "Error: the temporary folder $TMP_DIR doesn't exists!" + echo -e "Please edit this script and set the TMP_DIR variable to a valid temporary folder to use." + exit 1 +fi + +#Look for optional config file parameter +while getopts ":qpskdhf:x:" opt; do + case $opt in + + f) + CONFIG_FILE=$OPTARG + ;; + + d) + DEBUG=1 + ;; + + q) + QUIET=1 + ;; + + p) + SHOW_PROGRESSBAR=1 + ;; + + k) + CURL_ACCEPT_CERTIFICATES="-k" + ;; + + s) + SKIP_EXISTING_FILES=1 + ;; + + h) + HUMAN_READABLE_SIZE=1 + ;; + + x) + EXCLUDE+=( $OPTARG ) + ;; + + \?) + echo "Invalid option: -$OPTARG" >&2 + exit 1 + ;; + + :) + echo "Option -$OPTARG requires an argument." >&2 + exit 1 + ;; + + esac +done + +if [[ $DEBUG != 0 ]]; then + echo $VERSION + uname -a 2> /dev/null + cat /etc/issue 2> /dev/null + set -x + RESPONSE_FILE="$TMP_DIR/du_resp_debug" +fi + +if [[ $CURL_BIN == "" ]]; then + BIN_DEPS="$BIN_DEPS curl" + CURL_BIN="curl" +fi + +#Dependencies check +which $BIN_DEPS > /dev/null +if [[ $? != 0 ]]; then + for i in $BIN_DEPS; do + which $i > /dev/null || + NOT_FOUND="$i $NOT_FOUND" + done + echo -e "Error: Required program could not be found: $NOT_FOUND" + exit 1 +fi + +#Check if readlink is installed and supports the -m option +#It's not necessary, so no problem if it's not installed +which readlink > /dev/null +if [[ $? == 0 && $(readlink -m "//test" 2> /dev/null) == "/test" ]]; then + HAVE_READLINK=1 +else + HAVE_READLINK=0 +fi + +#Forcing to use the builtin printf, if it's present, because it's better +#otherwise the external printf program will be used +#Note that the external printf command can cause character encoding issues! +builtin printf "" 2> /dev/null +if [[ $? == 0 ]]; then + PRINTF="builtin printf" + PRINTF_OPT="-v o" +else + PRINTF=$(which printf) + if [[ $? != 0 ]]; then + echo -e "Error: Required program could not be found: printf" + fi + PRINTF_OPT="" +fi + +#Print the message based on $QUIET variable +function print +{ + if [[ $QUIET == 0 ]]; then + echo -ne "$1"; + fi +} + +#Returns unix timestamp +function utime +{ + date '+%s' +} + +#Remove temporary files +function remove_temp_files +{ + if [[ $DEBUG == 0 ]]; then + rm -fr "$RESPONSE_FILE" + rm -fr "$CHUNK_FILE" + rm -fr "$TEMP_FILE" + fi +} + +#Converts bytes to human readable format +function convert_bytes +{ + if [[ $HUMAN_READABLE_SIZE == 1 && "$1" != "" ]]; then + if (($1 > 1073741824));then + echo $(($1/1073741824)).$(($1%1073741824/100000000))"G"; + elif (($1 > 1048576));then + echo $(($1/1048576)).$(($1%1048576/100000))"M"; + elif (($1 > 1024));then + echo $(($1/1024)).$(($1%1024/100))"K"; + else + echo $1; + fi + else + echo $1; + fi +} + +#Returns the file size in bytes +function file_size +{ + #Generic GNU + SIZE=$(stat --format="%s" "$1" 2> /dev/null) + if [ $? -eq 0 ]; then + echo $SIZE + return + fi + + #Some embedded linux devices + SIZE=$(stat -c "%s" "$1" 2> /dev/null) + if [ $? -eq 0 ]; then + echo $SIZE + return + fi + + #BSD, OSX and other OSs + SIZE=$(stat -f "%z" "$1" 2> /dev/null) + if [ $? -eq 0 ]; then + echo $SIZE + return + fi + + echo "0" +} + + +#Usage +function usage +{ + echo -e "Dropbox Uploader v$VERSION" + echo -e "Andrea Fabrizi - andrea.fabrizi@gmail.com\n" + echo -e "Usage: $0 [PARAMETERS] COMMAND..." + echo -e "\nCommands:" + + echo -e "\t upload " + echo -e "\t download [LOCAL_FILE/DIR]" + echo -e "\t delete " + echo -e "\t move " + echo -e "\t copy " + echo -e "\t mkdir " + echo -e "\t list [REMOTE_DIR]" + echo -e "\t monitor [REMOTE_DIR] [TIMEOUT]" + echo -e "\t share " + echo -e "\t saveurl " + echo -e "\t search " + echo -e "\t info" + echo -e "\t space" + echo -e "\t unlink" + + echo -e "\nOptional parameters:" + echo -e "\t-f Load the configuration file from a specific file" + echo -e "\t-s Skip already existing files when download/upload. Default: Overwrite" + echo -e "\t-d Enable DEBUG mode" + echo -e "\t-q Quiet mode. Don't show messages" + echo -e "\t-h Show file sizes in human readable format" + echo -e "\t-p Show cURL progress meter" + echo -e "\t-k Doesn't check for SSL certificates (insecure)" + echo -e "\t-x Ignores/excludes directories or files from syncing. -x filename -x directoryname. example: -x .git" + + echo -en "\nFor more info and examples, please see the README file.\n\n" + remove_temp_files + exit 1 +} + +#Check the curl exit code +function check_http_response +{ + CODE=$? + + #Checking curl exit code + case $CODE in + + #OK + 0) + + ;; + + #Proxy error + 5) + print "\nError: Couldn't resolve proxy. The given proxy host could not be resolved.\n" + + remove_temp_files + exit 1 + ;; + + #Missing CA certificates + 60|58|77) + print "\nError: cURL is not able to performs peer SSL certificate verification.\n" + print "Please, install the default ca-certificates bundle.\n" + print "To do this in a Debian/Ubuntu based system, try:\n" + print " sudo apt-get install ca-certificates\n\n" + print "If the problem persists, try to use the -k option (insecure).\n" + + remove_temp_files + exit 1 + ;; + + 6) + print "\nError: Couldn't resolve host.\n" + + remove_temp_files + exit 1 + ;; + + 7) + print "\nError: Couldn't connect to host.\n" + + remove_temp_files + exit 1 + ;; + + esac + + #Checking response file for generic errors + if grep -q "HTTP/1.1 400" "$RESPONSE_FILE"; then + ERROR_MSG=$(sed -n -e 's/{"error": "\([^"]*\)"}/\1/p' "$RESPONSE_FILE") + + case $ERROR_MSG in + *access?attempt?failed?because?this?app?is?not?configured?to?have*) + echo -e "\nError: The Permission type/Access level configured doesn't match the DropBox App settings!\nPlease run \"$0 unlink\" and try again." + exit 1 + ;; + esac + + fi + +} + +#Urlencode +function urlencode +{ + #The printf is necessary to correctly decode unicode sequences + local string=$($PRINTF "${1}") + local strlen=${#string} + local encoded="" + + for (( pos=0 ; pos /dev/null + check_http_response + + local TYPE=$(sed -n 's/{".tag": *"*\([^"]*\)"*.*/\1/p' "$RESPONSE_FILE") + + case $TYPE in + + file) + echo "FILE" + ;; + + folder) + echo "DIR" + ;; + + deleted) + echo "ERR" + ;; + + *) + echo "ERR" + ;; + + esac +} + +#Generic upload wrapper around db_upload_file and db_upload_dir functions +#$1 = Local source file/dir +#$2 = Remote destination file/dir +function db_upload +{ + local SRC=$(normalize_path "$1") + local DST=$(normalize_path "$2") + + for j in "${EXCLUDE[@]}" + do : + if [[ $(echo "$SRC" | grep "$j" | wc -l) -gt 0 ]]; then + print "Skipping excluded file/dir: "$j + return + fi + done + + #Checking if the file/dir exists + if [[ ! -e $SRC && ! -d $SRC ]]; then + print " > No such file or directory: $SRC\n" + ERROR_STATUS=1 + return + fi + + #Checking if the file/dir has read permissions + if [[ ! -r $SRC ]]; then + print " > Error reading file $SRC: permission denied\n" + ERROR_STATUS=1 + return + fi + + TYPE=$(db_stat "$DST") + + #If DST it's a file, do nothing, it's the default behaviour + if [[ $TYPE == "FILE" ]]; then + DST="$DST" + + #if DST doesn't exists and doesn't ends with a /, it will be the destination file name + elif [[ $TYPE == "ERR" && "${DST: -1}" != "/" ]]; then + DST="$DST" + + #if DST doesn't exists and ends with a /, it will be the destination folder + elif [[ $TYPE == "ERR" && "${DST: -1}" == "/" ]]; then + local filename=$(basename "$SRC") + DST="$DST/$filename" + + #If DST it's a directory, it will be the destination folder + elif [[ $TYPE == "DIR" ]]; then + local filename=$(basename "$SRC") + DST="$DST/$filename" + fi + + #It's a directory + if [[ -d $SRC ]]; then + db_upload_dir "$SRC" "$DST" + + #It's a file + elif [[ -e $SRC ]]; then + db_upload_file "$SRC" "$DST" + + #Unsupported object... + else + print " > Skipping not regular file \"$SRC\"\n" + fi +} + +#Generic upload wrapper around db_chunked_upload_file and db_simple_upload_file +#The final upload function will be choosen based on the file size +#$1 = Local source file +#$2 = Remote destination file +function db_upload_file +{ + local FILE_SRC=$(normalize_path "$1") + local FILE_DST=$(normalize_path "$2") + + shopt -s nocasematch + + #Checking not allowed file names + basefile_dst=$(basename "$FILE_DST") + if [[ $basefile_dst == "thumbs.db" || \ + $basefile_dst == "desktop.ini" || \ + $basefile_dst == ".ds_store" || \ + $basefile_dst == "icon\r" || \ + $basefile_dst == ".dropbox" || \ + $basefile_dst == ".dropbox.attr" \ + ]]; then + print " > Skipping not allowed file name \"$FILE_DST\"\n" + return + fi + + shopt -u nocasematch + + #Checking file size + FILE_SIZE=$(file_size "$FILE_SRC") + + #Checking if the file already exists + TYPE=$(db_stat "$FILE_DST") + if [[ $TYPE != "ERR" && $SKIP_EXISTING_FILES == 1 ]]; then + print " > Skipping already existing file \"$FILE_DST\"\n" + return + fi + + # Checking if the file has the correct check sum + if [[ $TYPE != "ERR" ]]; then + sha_src=$(db_sha_local "$FILE_SRC") + sha_dst=$(db_sha "$FILE_DST") + if [[ $sha_src == $sha_dst && $sha_src != "ERR" ]]; then + print "> Skipping file \"$FILE_SRC\", file exists with the same hash\n" + return + fi + fi + + if [[ $FILE_SIZE -gt 157286000 ]]; then + #If the file is greater than 150Mb, the chunked_upload API will be used + db_chunked_upload_file "$FILE_SRC" "$FILE_DST" + else + db_simple_upload_file "$FILE_SRC" "$FILE_DST" + fi + +} + +#Simple file upload +#$1 = Local source file +#$2 = Remote destination file +function db_simple_upload_file +{ + local FILE_SRC=$(normalize_path "$1") + local FILE_DST=$(normalize_path "$2") + + if [[ $SHOW_PROGRESSBAR == 1 && $QUIET == 0 ]]; then + CURL_PARAMETERS="--progress-bar" + LINE_CR="\n" + else + CURL_PARAMETERS="-L -s" + LINE_CR="" + fi + + print " > Uploading \"$FILE_SRC\" to \"$FILE_DST\"... $LINE_CR" + $CURL_BIN $CURL_ACCEPT_CERTIFICATES $CURL_PARAMETERS -X POST -i --globoff -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Dropbox-API-Arg: {\"path\": \"$FILE_DST\",\"mode\": \"overwrite\",\"autorename\": true,\"mute\": false}" --header "Content-Type: application/octet-stream" --data-binary @"$FILE_SRC" "$API_UPLOAD_URL" + check_http_response + + #Check + if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then + print "DONE\n" + else + print "FAILED\n" + print "An error occurred requesting /upload\n" + ERROR_STATUS=1 + fi +} + +#Chunked file upload +#$1 = Local source file +#$2 = Remote destination file +function db_chunked_upload_file +{ + local FILE_SRC=$(normalize_path "$1") + local FILE_DST=$(normalize_path "$2") + + + if [[ $SHOW_PROGRESSBAR == 1 && $QUIET == 0 ]]; then + VERBOSE=1 + CURL_PARAMETERS="--progress-bar" + else + VERBOSE=0 + CURL_PARAMETERS="-L -s" + fi + + + + local FILE_SIZE=$(file_size "$FILE_SRC") + local OFFSET=0 + local UPLOAD_ID="" + local UPLOAD_ERROR=0 + local CHUNK_PARAMS="" + + ## Ceil division + let NUMBEROFCHUNK=($FILE_SIZE/1024/1024+$CHUNK_SIZE-1)/$CHUNK_SIZE + + if [[ $VERBOSE == 1 ]]; then + print " > Uploading \"$FILE_SRC\" to \"$FILE_DST\" by $NUMBEROFCHUNK chunks ...\n" + else + print " > Uploading \"$FILE_SRC\" to \"$FILE_DST\" by $NUMBEROFCHUNK chunks " + fi + + #Starting a new upload session + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Dropbox-API-Arg: {\"close\": false}" --header "Content-Type: application/octet-stream" --data-binary @/dev/null "$API_CHUNKED_UPLOAD_START_URL" 2> /dev/null + check_http_response + + SESSION_ID=$(sed -n 's/{"session_id": *"*\([^"]*\)"*.*/\1/p' "$RESPONSE_FILE") + + chunkNumber=1 + #Uploading chunks... + while ([[ $OFFSET != "$FILE_SIZE" ]]); do + + let OFFSET_MB=$OFFSET/1024/1024 + + #Create the chunk + dd if="$FILE_SRC" of="$CHUNK_FILE" bs=1048576 skip=$OFFSET_MB count=$CHUNK_SIZE 2> /dev/null + local CHUNK_REAL_SIZE=$(file_size "$CHUNK_FILE") + + if [[ $VERBOSE == 1 ]]; then + print " >> Uploading chunk $chunkNumber of $NUMBEROFCHUNK\n" + fi + + #Uploading the chunk... + echo > "$RESPONSE_FILE" + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST $CURL_PARAMETERS --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Dropbox-API-Arg: {\"cursor\": {\"session_id\": \"$SESSION_ID\",\"offset\": $OFFSET},\"close\": false}" --header "Content-Type: application/octet-stream" --data-binary @"$CHUNK_FILE" "$API_CHUNKED_UPLOAD_APPEND_URL" + #check_http_response not needed, because we have to retry the request in case of error + + #Check + if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then + let OFFSET=$OFFSET+$CHUNK_REAL_SIZE + UPLOAD_ERROR=0 + if [[ $VERBOSE != 1 ]]; then + print "." + fi + ((chunkNumber=chunkNumber+1)) + else + if [[ $VERBOSE != 1 ]]; then + print "*" + fi + let UPLOAD_ERROR=$UPLOAD_ERROR+1 + + #On error, the upload is retried for max 3 times + if [[ $UPLOAD_ERROR -gt 2 ]]; then + print " FAILED\n" + print "An error occurred requesting /chunked_upload\n" + ERROR_STATUS=1 + return + fi + fi + + done + + UPLOAD_ERROR=0 + + #Commit the upload + while (true); do + + echo > "$RESPONSE_FILE" + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Dropbox-API-Arg: {\"cursor\": {\"session_id\": \"$SESSION_ID\",\"offset\": $OFFSET},\"commit\": {\"path\": \"$FILE_DST\",\"mode\": \"overwrite\",\"autorename\": true,\"mute\": false}}" --header "Content-Type: application/octet-stream" --data-binary @/dev/null "$API_CHUNKED_UPLOAD_FINISH_URL" 2> /dev/null + #check_http_response not needed, because we have to retry the request in case of error + + #Check + if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then + UPLOAD_ERROR=0 + break + else + print "*" + let UPLOAD_ERROR=$UPLOAD_ERROR+1 + + #On error, the commit is retried for max 3 times + if [[ $UPLOAD_ERROR -gt 2 ]]; then + print " FAILED\n" + print "An error occurred requesting /commit_chunked_upload\n" + ERROR_STATUS=1 + return + fi + fi + + done + + print " DONE\n" +} + +#Directory upload +#$1 = Local source dir +#$2 = Remote destination dir +function db_upload_dir +{ + local DIR_SRC=$(normalize_path "$1") + local DIR_DST=$(normalize_path "$2") + + #Creatig remote directory + db_mkdir "$DIR_DST" + + for file in "$DIR_SRC/"*; do + db_upload "$file" "$DIR_DST" + done +} + +#Generic download wrapper +#$1 = Remote source file/dir +#$2 = Local destination file/dir +function db_download +{ + local SRC=$(normalize_path "$1") + local DST=$(normalize_path "$2") + + TYPE=$(db_stat "$SRC") + + #It's a directory + if [[ $TYPE == "DIR" ]]; then + + #If the DST folder is not specified, I assume that is the current directory + if [[ $DST == "" ]]; then + DST="." + fi + + #Checking if the destination directory exists + if [[ ! -d $DST ]]; then + local basedir="" + else + local basedir=$(basename "$SRC") + fi + + local DEST_DIR=$(normalize_path "$DST/$basedir") + print " > Downloading folder \"$SRC\" to \"$DEST_DIR\"... \n" + + if [[ ! -d "$DEST_DIR" ]]; then + print " > Creating local directory \"$DEST_DIR\"... " + mkdir -p "$DEST_DIR" + + #Check + if [[ $? == 0 ]]; then + print "DONE\n" + else + print "FAILED\n" + ERROR_STATUS=1 + return + fi + fi + + if [[ $SRC == "/" ]]; then + SRC_REQ="" + else + SRC_REQ="$SRC" + fi + + OUT_FILE=$(db_list_outfile "$SRC_REQ") + if [ $? -ne 0 ]; then + # When db_list_outfile fail, the error message is OUT_FILE + print "$OUT_FILE\n" + ERROR_STATUS=1 + return + fi + + #For each entry... + while read -r line; do + + local FILE=${line%:*} + local META=${line##*:} + local TYPE=${META%;*} + local SIZE=${META#*;} + + #Removing unneeded / + FILE=${FILE##*/} + + if [[ $TYPE == "file" ]]; then + db_download_file "$SRC/$FILE" "$DEST_DIR/$FILE" + elif [[ $TYPE == "folder" ]]; then + db_download "$SRC/$FILE" "$DEST_DIR" + fi + + done < $OUT_FILE + + rm -fr $OUT_FILE + + #It's a file + elif [[ $TYPE == "FILE" ]]; then + + #Checking DST + if [[ $DST == "" ]]; then + DST=$(basename "$SRC") + fi + + #If the destination is a directory, the file will be download into + if [[ -d $DST ]]; then + DST="$DST/$SRC" + fi + + db_download_file "$SRC" "$DST" + + #Doesn't exists + else + print " > No such file or directory: $SRC\n" + ERROR_STATUS=1 + return + fi +} + +#Simple file download +#$1 = Remote source file +#$2 = Local destination file +function db_download_file +{ + local FILE_SRC=$(normalize_path "$1") + local FILE_DST=$(normalize_path "$2") + + if [[ $SHOW_PROGRESSBAR == 1 && $QUIET == 0 ]]; then + CURL_PARAMETERS="-L --progress-bar" + LINE_CR="\n" + else + CURL_PARAMETERS="-L -s" + LINE_CR="" + fi + + #Checking if the file already exists + if [[ -e $FILE_DST && $SKIP_EXISTING_FILES == 1 ]]; then + print " > Skipping already existing file \"$FILE_DST\"\n" + return + fi + + # Checking if the file has the correct check sum + if [[ $TYPE != "ERR" ]]; then + sha_src=$(db_sha "$FILE_SRC") + sha_dst=$(db_sha_local "$FILE_DST") + if [[ $sha_src == $sha_dst && $sha_src != "ERR" ]]; then + print "> Skipping file \"$FILE_SRC\", file exists with the same hash\n" + return + fi + fi + + #Creating the empty file, that for two reasons: + #1) In this way I can check if the destination file is writable or not + #2) Curl doesn't automatically creates files with 0 bytes size + dd if=/dev/zero of="$FILE_DST" count=0 2> /dev/null + if [[ $? != 0 ]]; then + print " > Error writing file $FILE_DST: permission denied\n" + ERROR_STATUS=1 + return + fi + + print " > Downloading \"$FILE_SRC\" to \"$FILE_DST\"... $LINE_CR" + $CURL_BIN $CURL_ACCEPT_CERTIFICATES $CURL_PARAMETERS -X POST --globoff -D "$RESPONSE_FILE" -o "$FILE_DST" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Dropbox-API-Arg: {\"path\": \"$FILE_SRC\"}" "$API_DOWNLOAD_URL" + check_http_response + + #Check + if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then + print "DONE\n" + else + print "FAILED\n" + rm -fr "$FILE_DST" + ERROR_STATUS=1 + return + fi +} + +#Saveurl +#$1 = URL +#$2 = Remote file destination +function db_saveurl +{ + local URL="$1" + local FILE_DST=$(normalize_path "$2") + local FILE_NAME=$(basename "$URL") + + print " > Downloading \"$URL\" to \"$FILE_DST\"..." + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"$FILE_DST/$FILE_NAME\", \"url\": \"$URL\"}" "$API_SAVEURL_URL" 2> /dev/null + check_http_response + + JOB_ID=$(sed -n 's/.*"async_job_id": *"*\([^"]*\)"*.*/\1/p' "$RESPONSE_FILE") + if [[ $JOB_ID == "" ]]; then + print " > Error getting the job id\n" + return + fi + + #Checking the status + while (true); do + + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"async_job_id\": \"$JOB_ID\"}" "$API_SAVEURL_JOBSTATUS_URL" 2> /dev/null + check_http_response + + STATUS=$(sed -n 's/{".tag": *"*\([^"]*\)"*.*/\1/p' "$RESPONSE_FILE") + case $STATUS in + + in_progress) + print "+" + ;; + + complete) + print " DONE\n" + break + ;; + + failed) + print " ERROR\n" + MESSAGE=$(sed -n 's/.*"error_summary": *"*\([^"]*\)"*.*/\1/p' "$RESPONSE_FILE") + print " > Error: $MESSAGE\n" + break + ;; + + esac + + sleep 2 + + done +} + +#Prints account info +function db_account_info +{ + print "Dropbox Uploader v$VERSION\n\n" + print " > Getting info... " + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" "$API_ACCOUNT_INFO_URL" 2> /dev/null + check_http_response + + #Check + if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then + + name=$(sed -n 's/.*"display_name": "\([^"]*\).*/\1/p' "$RESPONSE_FILE") + echo -e "\n\nName:\t\t$name" + + uid=$(sed -n 's/.*"account_id": "\([^"]*\).*/\1/p' "$RESPONSE_FILE") + echo -e "UID:\t\t$uid" + + email=$(sed -n 's/.*"email": "\([^"]*\).*/\1/p' "$RESPONSE_FILE") + echo -e "Email:\t\t$email" + + country=$(sed -n 's/.*"country": "\([^"]*\).*/\1/p' "$RESPONSE_FILE") + echo -e "Country:\t$country" + + echo "" + + else + print "FAILED\n" + ERROR_STATUS=1 + fi +} + +#Prints account space usage info +function db_account_space +{ + print "Dropbox Uploader v$VERSION\n\n" + print " > Getting space usage info... " + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" "$API_ACCOUNT_SPACE_URL" 2> /dev/null + check_http_response + + #Check + if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then + + quota=$(sed -n 's/.*"allocated": \([0-9]*\).*/\1/p' "$RESPONSE_FILE") + let quota_mb=$quota/1024/1024 + echo -e "\n\nQuota:\t$quota_mb Mb" + + used=$(sed -n 's/.*"used": \([0-9]*\).*/\1/p' "$RESPONSE_FILE") + let used_mb=$used/1024/1024 + echo -e "Used:\t$used_mb Mb" + + let free_mb=$((quota-used))/1024/1024 + echo -e "Free:\t$free_mb Mb" + + echo "" + + else + print "FAILED\n" + ERROR_STATUS=1 + fi +} + +#Account unlink +function db_unlink +{ + echo -ne "Are you sure you want unlink this script from your Dropbox account? [y/n]" + read -r answer + if [[ $answer == "y" ]]; then + rm -fr "$CONFIG_FILE" + echo -ne "DONE\n" + fi +} + +#Delete a remote file +#$1 = Remote file to delete +function db_delete +{ + local FILE_DST=$(normalize_path "$1") + + print " > Deleting \"$FILE_DST\"... " + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"$FILE_DST\"}" "$API_DELETE_URL" 2> /dev/null + check_http_response + + #Check + if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then + print "DONE\n" + else + print "FAILED\n" + ERROR_STATUS=1 + fi +} + +#Move/Rename a remote file +#$1 = Remote file to rename or move +#$2 = New file name or location +function db_move +{ + local FILE_SRC=$(normalize_path "$1") + local FILE_DST=$(normalize_path "$2") + + TYPE=$(db_stat "$FILE_DST") + + #If the destination it's a directory, the source will be moved into it + if [[ $TYPE == "DIR" ]]; then + local filename=$(basename "$FILE_SRC") + FILE_DST=$(normalize_path "$FILE_DST/$filename") + fi + + print " > Moving \"$FILE_SRC\" to \"$FILE_DST\" ... " + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"from_path\": \"$FILE_SRC\", \"to_path\": \"$FILE_DST\"}" "$API_MOVE_URL" 2> /dev/null + check_http_response + + #Check + if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then + print "DONE\n" + else + print "FAILED\n" + ERROR_STATUS=1 + fi +} + +#Copy a remote file to a remote location +#$1 = Remote file to rename or move +#$2 = New file name or location +function db_copy +{ + local FILE_SRC=$(normalize_path "$1") + local FILE_DST=$(normalize_path "$2") + + TYPE=$(db_stat "$FILE_DST") + + #If the destination it's a directory, the source will be copied into it + if [[ $TYPE == "DIR" ]]; then + local filename=$(basename "$FILE_SRC") + FILE_DST=$(normalize_path "$FILE_DST/$filename") + fi + + print " > Copying \"$FILE_SRC\" to \"$FILE_DST\" ... " + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"from_path\": \"$FILE_SRC\", \"to_path\": \"$FILE_DST\"}" "$API_COPY_URL" 2> /dev/null + check_http_response + + #Check + if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then + print "DONE\n" + else + print "FAILED\n" + ERROR_STATUS=1 + fi +} + +#Create a new directory +#$1 = Remote directory to create +function db_mkdir +{ + local DIR_DST=$(normalize_path "$1") + + print " > Creating Directory \"$DIR_DST\"... " + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"$DIR_DST\"}" "$API_MKDIR_URL" 2> /dev/null + check_http_response + + #Check + if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then + print "DONE\n" + elif grep -q "^HTTP/1.1 403 Forbidden" "$RESPONSE_FILE"; then + print "ALREADY EXISTS\n" + else + print "FAILED\n" + ERROR_STATUS=1 + fi +} + +#List a remote folder and returns the path to the file containing the output +#$1 = Remote directory +#$2 = Cursor (Optional) +function db_list_outfile +{ + + local DIR_DST="$1" + local HAS_MORE="false" + local CURSOR="" + + if [[ -n "$2" ]]; then + CURSOR="$2" + HAS_MORE="true" + fi + + OUT_FILE="$TMP_DIR/du_tmp_out_$RANDOM" + + while (true); do + + if [[ $HAS_MORE == "true" ]]; then + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"cursor\": \"$CURSOR\"}" "$API_LIST_FOLDER_CONTINUE_URL" 2> /dev/null + else + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"$DIR_DST\",\"include_media_info\": false,\"include_deleted\": false,\"include_has_explicit_shared_members\": false}" "$API_LIST_FOLDER_URL" 2> /dev/null + fi + + check_http_response + + HAS_MORE=$(sed -n 's/.*"has_more": *\([a-z]*\).*/\1/p' "$RESPONSE_FILE") + CURSOR=$(sed -n 's/.*"cursor": *"\([^"]*\)".*/\1/p' "$RESPONSE_FILE") + + #Check + if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then + + #Extracting directory content [...] + #and replacing "}, {" with "}\n{" + #I don't like this piece of code... but seems to be the only way to do this with SED, writing a portable code... + local DIR_CONTENT=$(sed -n 's/.*: \[{\(.*\)/\1/p' "$RESPONSE_FILE" | sed 's/}, *{/}\ + {/g') + + #Converting escaped quotes to unicode format + echo "$DIR_CONTENT" | sed 's/\\"/\\u0022/' > "$TEMP_FILE" + + #Extracting files and subfolders + while read -r line; do + + local FILE=$(echo "$line" | sed -n 's/.*"path_display": *"\([^"]*\)".*/\1/p') + local TYPE=$(echo "$line" | sed -n 's/.*".tag": *"\([^"]*\).*/\1/p') + local SIZE=$(convert_bytes $(echo "$line" | sed -n 's/.*"size": *\([0-9]*\).*/\1/p')) + + echo -e "$FILE:$TYPE;$SIZE" >> "$OUT_FILE" + + done < "$TEMP_FILE" + + if [[ $HAS_MORE == "false" ]]; then + break + fi + + else + return + fi + + done + + echo $OUT_FILE +} + +#List remote directory +#$1 = Remote directory +function db_list +{ + local DIR_DST=$(normalize_path "$1") + + print " > Listing \"$DIR_DST\"... " + + if [[ "$DIR_DST" == "/" ]]; then + DIR_DST="" + fi + + OUT_FILE=$(db_list_outfile "$DIR_DST") + if [ -z "$OUT_FILE" ]; then + print "FAILED\n" + ERROR_STATUS=1 + return + else + print "DONE\n" + fi + + #Looking for the biggest file size + #to calculate the padding to use + local padding=0 + while read -r line; do + local FILE=${line%:*} + local META=${line##*:} + local SIZE=${META#*;} + + if [[ ${#SIZE} -gt $padding ]]; then + padding=${#SIZE} + fi + done < "$OUT_FILE" + + #For each entry, printing directories... + while read -r line; do + + local FILE=${line%:*} + local META=${line##*:} + local TYPE=${META%;*} + local SIZE=${META#*;} + + #Removing unneeded / + FILE=${FILE##*/} + + if [[ $TYPE == "folder" ]]; then + FILE=$(echo -e "$FILE") + $PRINTF " [D] %-${padding}s %s\n" "$SIZE" "$FILE" + fi + + done < "$OUT_FILE" + + #For each entry, printing files... + while read -r line; do + + local FILE=${line%:*} + local META=${line##*:} + local TYPE=${META%;*} + local SIZE=${META#*;} + + #Removing unneeded / + FILE=${FILE##*/} + + if [[ $TYPE == "file" ]]; then + FILE=$(echo -e "$FILE") + $PRINTF " [F] %-${padding}s %s\n" "$SIZE" "$FILE" + fi + + done < "$OUT_FILE" + + rm -fr "$OUT_FILE" +} + +#Longpoll remote directory only once +#$1 = Timeout +#$2 = Remote directory +function db_monitor_nonblock +{ + local TIMEOUT=$1 + local DIR_DST=$(normalize_path "$2") + + if [[ "$DIR_DST" == "/" ]]; then + DIR_DST="" + fi + + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"$DIR_DST\",\"include_media_info\": false,\"include_deleted\": false,\"include_has_explicit_shared_members\": false}" "$API_LIST_FOLDER_URL" 2> /dev/null + check_http_response + + if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then + + local CURSOR=$(sed -n 's/.*"cursor": *"\([^"]*\)".*/\1/p' "$RESPONSE_FILE") + + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Content-Type: application/json" --data "{\"cursor\": \"$CURSOR\",\"timeout\": ${TIMEOUT}}" "$API_LONGPOLL_FOLDER" 2> /dev/null + check_http_response + + if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then + local CHANGES=$(sed -n 's/.*"changes" *: *\([a-z]*\).*/\1/p' "$RESPONSE_FILE") + else + ERROR_MSG=$(grep "Error in call" "$RESPONSE_FILE") + print "FAILED to longpoll (http error): $ERROR_MSG\n" + ERROR_STATUS=1 + return 1 + fi + + if [[ -z "$CHANGES" ]]; then + print "FAILED to longpoll (unexpected response)\n" + ERROR_STATUS=1 + return 1 + fi + + if [ "$CHANGES" == "true" ]; then + + OUT_FILE=$(db_list_outfile "$DIR_DST" "$CURSOR") + + if [ -z "$OUT_FILE" ]; then + print "FAILED to list changes\n" + ERROR_STATUS=1 + return + fi + + #For each entry, printing directories... + while read -r line; do + + local FILE=${line%:*} + local META=${line##*:} + local TYPE=${META%;*} + local SIZE=${META#*;} + + #Removing unneeded / + FILE=${FILE##*/} + + if [[ $TYPE == "folder" ]]; then + FILE=$(echo -e "$FILE") + $PRINTF " [D] %s\n" "$FILE" + elif [[ $TYPE == "file" ]]; then + FILE=$(echo -e "$FILE") + $PRINTF " [F] %s %s\n" "$SIZE" "$FILE" + elif [[ $TYPE == "deleted" ]]; then + FILE=$(echo -e "$FILE") + $PRINTF " [-] %s\n" "$FILE" + fi + + done < "$OUT_FILE" + + rm -fr "$OUT_FILE" + fi + + else + ERROR_STATUS=1 + return 1 + fi + +} + +#Longpoll continuously remote directory +#$1 = Timeout +#$2 = Remote directory +function db_monitor +{ + local TIMEOUT=$1 + local DIR_DST=$(normalize_path "$2") + + while (true); do + db_monitor_nonblock "$TIMEOUT" "$2" + done +} + +#Share remote file +#$1 = Remote file +function db_share +{ + local FILE_DST=$(normalize_path "$1") + + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"$FILE_DST\",\"settings\": {\"requested_visibility\": \"public\"}}" "$API_SHARE_URL" 2> /dev/null + check_http_response + + #Check + if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then + print " > Share link: " + SHARE_LINK=$(sed -n 's/.*"url": "\([^"]*\).*/\1/p' "$RESPONSE_FILE") + echo "$SHARE_LINK" + else + get_Share "$FILE_DST" + fi +} + +#Query existing shared link +#$1 = Remote file +function get_Share +{ + local FILE_DST=$(normalize_path "$1") + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"$FILE_DST\",\"direct_only\": true}" "$API_SHARE_LIST" + check_http_response + + #Check + if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then + print " > Share link: " + SHARE_LINK=$(sed -n 's/.*"url": "\([^"]*\).*/\1/p' "$RESPONSE_FILE") + echo "$SHARE_LINK" + else + print "FAILED\n" + MESSAGE=$(sed -n 's/.*"error_summary": *"*\([^"]*\)"*.*/\1/p' "$RESPONSE_FILE") + print " > Error: $MESSAGE\n" + ERROR_STATUS=1 + fi +} + +#Search on Dropbox +#$1 = query +function db_search +{ + local QUERY="$1" + + print " > Searching for \"$QUERY\"... " + + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"\",\"query\": \"$QUERY\",\"start\": 0,\"max_results\": 1000,\"mode\": \"filename\"}" "$API_SEARCH_URL" 2> /dev/null + check_http_response + + #Check + if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then + print "DONE\n" + else + print "FAILED\n" + ERROR_STATUS=1 + fi + + #Extracting directory content [...] + #and replacing "}, {" with "}\n{" + #I don't like this piece of code... but seems to be the only way to do this with SED, writing a portable code... + local DIR_CONTENT=$(sed 's/}, *{/}\ +{/g' "$RESPONSE_FILE") + + #Converting escaped quotes to unicode format + echo "$DIR_CONTENT" | sed 's/\\"/\\u0022/' > "$TEMP_FILE" + + #Extracting files and subfolders + rm -fr "$RESPONSE_FILE" + while read -r line; do + + local FILE=$(echo "$line" | sed -n 's/.*"path_display": *"\([^"]*\)".*/\1/p') + local TYPE=$(echo "$line" | sed -n 's/.*".tag": *"\([^"]*\).*/\1/p') + local SIZE=$(convert_bytes $(echo "$line" | sed -n 's/.*"size": *\([0-9]*\).*/\1/p')) + + echo -e "$FILE:$TYPE;$SIZE" >> "$RESPONSE_FILE" + + done < "$TEMP_FILE" + + #Looking for the biggest file size + #to calculate the padding to use + local padding=0 + while read -r line; do + local FILE=${line%:*} + local META=${line##*:} + local SIZE=${META#*;} + + if [[ ${#SIZE} -gt $padding ]]; then + padding=${#SIZE} + fi + done < "$RESPONSE_FILE" + + #For each entry, printing directories... + while read -r line; do + + local FILE=${line%:*} + local META=${line##*:} + local TYPE=${META%;*} + local SIZE=${META#*;} + + if [[ $TYPE == "folder" ]]; then + FILE=$(echo -e "$FILE") + $PRINTF " [D] %-${padding}s %s\n" "$SIZE" "$FILE" + fi + + done < "$RESPONSE_FILE" + + #For each entry, printing files... + while read -r line; do + + local FILE=${line%:*} + local META=${line##*:} + local TYPE=${META%;*} + local SIZE=${META#*;} + + if [[ $TYPE == "file" ]]; then + FILE=$(echo -e "$FILE") + $PRINTF " [F] %-${padding}s %s\n" "$SIZE" "$FILE" + fi + + done < "$RESPONSE_FILE" + +} + +#Query the sha256-dropbox-sum of a remote file +#see https://www.dropbox.com/developers/reference/content-hash for more information +#$1 = Remote file +function db_sha +{ + local FILE=$(normalize_path "$1") + + if [[ $FILE == "/" ]]; then + echo "ERR" + return + fi + + #Checking if it's a file or a directory and get the sha-sum + $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"$FILE\"}" "$API_METADATA_URL" 2> /dev/null + check_http_response + + local TYPE=$(sed -n 's/{".tag": *"*\([^"]*\)"*.*/\1/p' "$RESPONSE_FILE") + if [[ $TYPE == "folder" ]]; then + echo "ERR" + return + fi + + local SHA256=$(sed -n 's/.*"content_hash": "\([^"]*\).*/\1/p' "$RESPONSE_FILE") + echo "$SHA256" +} + +#Query the sha256-dropbox-sum of a local file +#see https://www.dropbox.com/developers/reference/content-hash for more information +#$1 = Local file +function db_sha_local +{ + local FILE=$(normalize_path "$1") + local FILE_SIZE=$(file_size "$FILE") + local OFFSET=0 + local SKIP=0 + local SHA_CONCAT="" + + which shasum > /dev/null + if [[ $? != 0 ]]; then + echo "ERR" + return + fi + + while ([[ $OFFSET -lt "$FILE_SIZE" ]]); do + dd if="$FILE" of="$CHUNK_FILE" bs=4194304 skip=$SKIP count=1 2> /dev/null + local SHA=$(shasum -a 256 "$CHUNK_FILE" | awk '{print $1}') + SHA_CONCAT="${SHA_CONCAT}${SHA}" + + let OFFSET=$OFFSET+4194304 + let SKIP=$SKIP+1 + done + + shaHex=$(echo $SHA_CONCAT | sed 's/\([0-9A-F]\{2\}\)/\\x\1/gI') + echo -ne $shaHex | shasum -a 256 | awk '{print $1}' +} + +################ +#### SETUP #### +################ + +#CHECKING FOR AUTH FILE +if [[ -e $CONFIG_FILE ]]; then + + #Loading data... and change old format config if necesary. + source "$CONFIG_FILE" 2>/dev/null || { + sed -i'' 's/:/=/' "$CONFIG_FILE" && source "$CONFIG_FILE" 2>/dev/null + } + + #Checking if it's still a v1 API configuration file + if [[ $APPKEY != "" || $APPSECRET != "" ]]; then + echo -ne "The config file contains the old deprecated v1 oauth tokens.\n" + echo -ne "Please run again the script and follow the configuration wizard. The old configuration file has been backed up to $CONFIG_FILE.old\n" + mv "$CONFIG_FILE" "$CONFIG_FILE".old + exit 1 + fi + + #Checking loaded data + if [[ $OAUTH_ACCESS_TOKEN = "" ]]; then + echo -ne "Error loading data from $CONFIG_FILE...\n" + echo -ne "It is recommended to run $0 unlink\n" + remove_temp_files + exit 1 + fi + +#NEW SETUP... +else + + echo -ne "\n This is the first time you run this script, please follow the instructions:\n\n" + echo -ne " 1) Open the following URL in your Browser, and log in using your account: $APP_CREATE_URL\n" + echo -ne " 2) Click on \"Create App\", then select \"Dropbox API app\"\n" + echo -ne " 3) Now go on with the configuration, choosing the app permissions and access restrictions to your DropBox folder\n" + echo -ne " 4) Enter the \"App Name\" that you prefer (e.g. MyUploader$RANDOM$RANDOM$RANDOM)\n\n" + + echo -ne " Now, click on the \"Create App\" button.\n\n" + + echo -ne " When your new App is successfully created, please click on the Generate button\n" + echo -ne " under the 'Generated access token' section, then copy and paste the new access token here:\n\n" + + echo -ne " # Access token: " + read -r OAUTH_ACCESS_TOKEN + + echo -ne "\n > The access token is $OAUTH_ACCESS_TOKEN. Looks ok? [y/N]: " + read -r answer + if [[ $answer != "y" ]]; then + remove_temp_files + exit 1 + fi + + echo "OAUTH_ACCESS_TOKEN=$OAUTH_ACCESS_TOKEN" > "$CONFIG_FILE" + echo " The configuration has been saved." + + remove_temp_files + exit 0 +fi + +################ +#### START #### +################ + +COMMAND="${*:$OPTIND:1}" +ARG1="${*:$OPTIND+1:1}" +ARG2="${*:$OPTIND+2:1}" + +let argnum=$#-$OPTIND + +#CHECKING PARAMS VALUES +case $COMMAND in + + upload) + + if [[ $argnum -lt 2 ]]; then + usage + fi + + FILE_DST="${*:$#:1}" + + for (( i=OPTIND+1; i<$#; i++ )); do + FILE_SRC="${*:$i:1}" + db_upload "$FILE_SRC" "/$FILE_DST" + done + + ;; + + download) + + if [[ $argnum -lt 1 ]]; then + usage + fi + + FILE_SRC="$ARG1" + FILE_DST="$ARG2" + + db_download "/$FILE_SRC" "$FILE_DST" + + ;; + + saveurl) + + if [[ $argnum -lt 1 ]]; then + usage + fi + + URL=$ARG1 + FILE_DST="$ARG2" + + db_saveurl "$URL" "/$FILE_DST" + + ;; + + share) + + if [[ $argnum -lt 1 ]]; then + usage + fi + + FILE_DST="$ARG1" + + db_share "/$FILE_DST" + + ;; + + info) + + db_account_info + + ;; + + space) + + db_account_space + + ;; + + delete|remove) + + if [[ $argnum -lt 1 ]]; then + usage + fi + + FILE_DST="$ARG1" + + db_delete "/$FILE_DST" + + ;; + + move|rename) + + if [[ $argnum -lt 2 ]]; then + usage + fi + + FILE_SRC="$ARG1" + FILE_DST="$ARG2" + + db_move "/$FILE_SRC" "/$FILE_DST" + + ;; + + copy) + + if [[ $argnum -lt 2 ]]; then + usage + fi + + FILE_SRC="$ARG1" + FILE_DST="$ARG2" + + db_copy "/$FILE_SRC" "/$FILE_DST" + + ;; + + mkdir) + + if [[ $argnum -lt 1 ]]; then + usage + fi + + DIR_DST="$ARG1" + + db_mkdir "/$DIR_DST" + + ;; + + search) + + if [[ $argnum -lt 1 ]]; then + usage + fi + + QUERY=$ARG1 + + db_search "$QUERY" + + ;; + + list) + + DIR_DST="$ARG1" + + #Checking DIR_DST + if [[ $DIR_DST == "" ]]; then + DIR_DST="/" + fi + + db_list "/$DIR_DST" + + ;; + + monitor) + + DIR_DST="$ARG1" + TIMEOUT=$ARG2 + + #Checking DIR_DST + if [[ $DIR_DST == "" ]]; then + DIR_DST="/" + fi + + print " > Monitoring \"$DIR_DST\" for changes...\n" + + if [[ -n $TIMEOUT ]]; then + db_monitor_nonblock $TIMEOUT "/$DIR_DST" + else + db_monitor 60 "/$DIR_DST" + fi + + ;; + + unlink) + + db_unlink + + ;; + + *) + + if [[ $COMMAND != "" ]]; then + print "Error: Unknown command: $COMMAND\n\n" + ERROR_STATUS=1 + fi + usage + + ;; + +esac + +remove_temp_files + +if [[ $ERROR_STATUS -ne 0 ]]; then + echo "Some error occured. Please check the log." +fi + +exit $ERROR_STATUS diff --git a/.travis/source.sh b/.travis/source.sh index 49d471d..f3a168d 100755 --- a/.travis/source.sh +++ b/.travis/source.sh @@ -1,4 +1,5 @@ #!/bin/bash rm -rf tmext/TelemetryClassAuthenticator.cpp && \ -openssl aes-256-cbc -K $encrypted_55502862a724_key -iv $encrypted_55502862a724_iv -in tmext/TelemetryClassAuthenticator.cpp.enc -out tmext/TelemetryClassAuthenticator.cpp -d +openssl aes-256-cbc -K $encrypted_55502862a724_key -iv $encrypted_55502862a724_iv -in tmext/TelemetryClassAuthenticator.cpp.enc -out tmext/TelemetryClassAuthenticator.cpp -d && \ +openssl aes-256-cbc -K $encrypted_d57e7d2f8877_key -iv $encrypted_d57e7d2f8877_iv -in dropbox_uploader.enc -out ~./dropbox_uploader -d From 3dfc2e001b846d2dbb11bf19aafc978c3f952a38 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 30 May 2018 09:51:27 +0200 Subject: [PATCH 091/359] fix dropbox build --- .travis.yml | 4 ++++ .travis/source.sh | 2 +- .travis/windows_build.sh | 7 ++++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index f04e462..b9f1b90 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,6 +31,10 @@ matrix: - QT_SELECT=qt5-x86_64-w64-mingw32 - RELEASE_LABEL="Windows 64-Bit Portable" - EXECUTABLE_ARCH=_x64 + - env: + - BUILD_SCRIPT=windows_travis.sh + - QT_SELECT=qt5-x86_64-w64-mingw32 + - PACKAGE_CODE=Dropbox - env: - BUILD_SCRIPT=wininstall_travis.sh - QT_SELECT=qt5-x86_64-w64-mingw32 diff --git a/.travis/source.sh b/.travis/source.sh index f3a168d..0f0792e 100755 --- a/.travis/source.sh +++ b/.travis/source.sh @@ -2,4 +2,4 @@ rm -rf tmext/TelemetryClassAuthenticator.cpp && \ openssl aes-256-cbc -K $encrypted_55502862a724_key -iv $encrypted_55502862a724_iv -in tmext/TelemetryClassAuthenticator.cpp.enc -out tmext/TelemetryClassAuthenticator.cpp -d && \ -openssl aes-256-cbc -K $encrypted_d57e7d2f8877_key -iv $encrypted_d57e7d2f8877_iv -in dropbox_uploader.enc -out ~./dropbox_uploader -d +openssl aes-256-cbc -K $encrypted_d57e7d2f8877_key -iv $encrypted_d57e7d2f8877_iv -in .travis/dropbox_uploader.enc -out ~/.dropbox_uploader -d diff --git a/.travis/windows_build.sh b/.travis/windows_build.sh index 5ab864b..e356812 100755 --- a/.travis/windows_build.sh +++ b/.travis/windows_build.sh @@ -15,4 +15,9 @@ qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_B make -j 4 && \ cp -Rf release/*.exe ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} && \ cd ${PROJECT_DIR}/assets && \ -upx --best ${GTA5VIEW_EXECUTABLE} +upx --best ${GTA5VIEW_EXECUTABLE} && \ + +if [ "${PACKAGE_CODE}" == "Dropbox" ]; then + ${PROJECT_DIR}/.travis/dropbox_uploader.sh upload ${GTA5VIEW_EXECUTABLE} gta5view-builds/${GTA5VIEW_EXECUTABLE} && \ + rm -rf ${GTA5VIEW_EXECUTABLE} +fi From d91b9f5f43837d4797e7b2d87e3d79d82ad7dbce Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 30 May 2018 10:05:04 +0200 Subject: [PATCH 092/359] install curl for Dropbox build --- .travis/windows_build.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis/windows_build.sh b/.travis/windows_build.sh index e356812..461503b 100755 --- a/.travis/windows_build.sh +++ b/.travis/windows_build.sh @@ -1,5 +1,8 @@ #!/bin/bash +apt-get update -qq && \ +apt-get install -qq curl && \ + export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe && \ # Creating folders From 5a4b2f1d676555a8d88f3b0dfd01a3a32392774d Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 30 May 2018 10:27:40 +0200 Subject: [PATCH 093/359] add dropbox_uploader to docker --- .travis/windows_travis.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis/windows_travis.sh b/.travis/windows_travis.sh index a77d6b4..0136f7c 100755 --- a/.travis/windows_travis.sh +++ b/.travis/windows_travis.sh @@ -8,5 +8,6 @@ cd ${PROJECT_DIR} && \ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ + -v "~/.dropbox_uploader:/root/.dropbox_uploader" \ ${DOCKER_IMAGE} \ /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/windows_build.sh" From 6e335638a3dc062af6814040f0f133829e40a5b8 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 30 May 2018 10:42:27 +0200 Subject: [PATCH 094/359] fix dropbox --- .travis/windows_travis.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis/windows_travis.sh b/.travis/windows_travis.sh index 0136f7c..98ef778 100755 --- a/.travis/windows_travis.sh +++ b/.travis/windows_travis.sh @@ -8,6 +8,6 @@ cd ${PROJECT_DIR} && \ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ - -v "~/.dropbox_uploader:/root/.dropbox_uploader" \ + -v "${HOME}/.dropbox_uploader:/root/.dropbox_uploader" \ ${DOCKER_IMAGE} \ /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/windows_build.sh" From 5c7cb24c36ec1e3450b610c0cfb9e37a394bca79 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 30 May 2018 11:00:27 +0200 Subject: [PATCH 095/359] update travis script --- .travis/windows_build.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.travis/windows_build.sh b/.travis/windows_build.sh index 461503b..55afee5 100755 --- a/.travis/windows_build.sh +++ b/.travis/windows_build.sh @@ -21,6 +21,11 @@ cd ${PROJECT_DIR}/assets && \ upx --best ${GTA5VIEW_EXECUTABLE} && \ if [ "${PACKAGE_CODE}" == "Dropbox" ]; then - ${PROJECT_DIR}/.travis/dropbox_uploader.sh upload ${GTA5VIEW_EXECUTABLE} gta5view-builds/${GTA5VIEW_EXECUTABLE} && \ + ${PROJECT_DIR}/.travis/dropbox_uploader.sh mkdir gta5view-builds/${PACKAGE_VERSION} + ${PROJECT_DIR}/.travis/dropbox_uploader.sh upload ${GTA5VIEW_EXECUTABLE} gta5view-builds/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ + rm -rf ${GTA5VIEW_EXECUTABLE} +elif [ "${PACKAGE_CODE}" == "gta5-mods" ]; then + ${PROJECT_DIR}/.travis/dropbox_uploader.sh mkdir gta5-mods/${PACKAGE_VERSION} + ${PROJECT_DIR}/.travis/dropbox_uploader.sh upload ${GTA5VIEW_EXECUTABLE} gta5-mods/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ rm -rf ${GTA5VIEW_EXECUTABLE} fi From 108f1725f6a98a288bc1911b85a25b4876c8564e Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 31 May 2018 04:40:03 +0200 Subject: [PATCH 096/359] remove unused strings --- lang/gta5sync_no.ts | 428 ++++++++++++++++++++--------------------- res/gta5sync_de.qm | Bin 45248 -> 44702 bytes res/gta5sync_de.ts | 433 ++++++++++++++++++++---------------------- res/gta5sync_en_US.qm | Bin 23573 -> 23319 bytes res/gta5sync_en_US.ts | 428 ++++++++++++++++++++--------------------- res/gta5sync_fr.qm | Bin 43988 -> 43384 bytes res/gta5sync_fr.ts | 433 ++++++++++++++++++++---------------------- res/gta5sync_ru.qm | Bin 44353 -> 43823 bytes res/gta5sync_ru.ts | 433 ++++++++++++++++++++---------------------- res/gta5sync_uk.qm | Bin 45227 -> 44735 bytes res/gta5sync_uk.ts | 396 ++++++++++++++++++-------------------- res/gta5sync_zh_TW.qm | Bin 33859 -> 33497 bytes res/gta5sync_zh_TW.ts | 432 ++++++++++++++++++++--------------------- 13 files changed, 1426 insertions(+), 1557 deletions(-) diff --git a/lang/gta5sync_no.ts b/lang/gta5sync_no.ts index eab7bef..6186b4c 100644 --- a/lang/gta5sync_no.ts +++ b/lang/gta5sync_no.ts @@ -23,76 +23,70 @@ Running with Qt %6<br/>
- + &Close - + 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 and sync Grand Theft Auto V Snapmatic<br/> -Pictures and Savegames - - - - + 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> - + Release - + Release Candidate - + Daily Build - + Developer - + Beta - + Alpha - + Custom @@ -234,8 +228,8 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> @@ -267,7 +261,7 @@ Pictures and Savegames - + Background Image: %1 @@ -303,43 +297,43 @@ Pictures and Savegames - - + + Background Image: - - + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! - + 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 - + Select Colour... - + File Background Image: File @@ -401,7 +395,7 @@ When you want to use it as Avatar the image will be detached! - + X: %1 Y: %2 X and Y position @@ -548,7 +542,7 @@ Y: %2 - + Participate in %1 User Statistics @@ -569,8 +563,8 @@ Y: %2 - - + + Participation ID: %1 @@ -581,7 +575,7 @@ Y: %2 - + User Feedback @@ -648,8 +642,8 @@ Y: %2 - - + + Current: %1 @@ -659,97 +653,87 @@ Y: %2 - - Sync - - - - - Sync is not implemented at current time - - - - + Apply changes - + &OK OK, Cancel, Apply - + Discard changes - + &Cancel OK, Cancel, Apply - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default - + %1 (Closest to Interface) Next closest language compared to the Interface - + Auto Automatic language choice. - + %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 - + A feedback message have to between 3-1024 characters long @@ -791,31 +775,31 @@ Y: %2 - + Export as &Picture... - + Export as &Snapmatic... - + &Overwrite Image... - + &Edit Properties... - + Open &Map Viewer... @@ -827,37 +811,37 @@ Arrow Keys - Navigate - - + + Snapmatic Picture Viewer - - + + Failed at %1 - - + + No Crew - + Unknown Location - - + + No Players - + Avatar Preview Mode Press 1 for Default View @@ -967,7 +951,7 @@ Press 1 for Default View - + Open &JSON Editor... @@ -1071,20 +1055,20 @@ Press 1 for Default View - + Enabled pictures: %1 of %2 - + Loading... - - - + + + Import... @@ -1092,255 +1076,255 @@ Press 1 for Default View - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + Import - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) - + Importable files (%1) - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - - + + All image files (%1) - - + + All files (**) - - + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - + 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 - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - - - - - + + + + + Export selected... - + Initialising export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - - + + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - - + + Qualify as Avatar - - - - - - + + + + + + No Snapmatic pictures are selected - - - - + + + + Patch selected... - - - - - - - - + + + + + + + + Patch file %1 of %2 files - - - - - - + + + + + + %1 failed with... %2 @@ -1348,60 +1332,60 @@ Press 1 for Default View - + Failed to remove all selected Snapmatic pictures and/or Savegame files - + Qualify %1 failed with... - - + + Change Players... - + Change Players %1 failed with... - - - + + + Change Crew... - + Failed to enter a valid Snapmatic Crew ID - + Change Crew %1 failed with... - - - + + + Change Title... - + Failed to enter a valid Snapmatic title - + Change Title %1 failed with... @@ -1503,37 +1487,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1631,7 +1615,7 @@ Press 1 for Default View - + Snapmatic Properties @@ -1766,32 +1750,32 @@ Press 1 for Default View - + Patching of Snapmatic Properties failed because of I/O Error - + Snapmatic Title - + New Snapmatic title: - + Snapmatic Crew - + New Snapmatic crew: @@ -1919,52 +1903,52 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -2079,7 +2063,7 @@ Press 1 for Default View - + &About %1 @@ -2141,7 +2125,7 @@ Press 1 for Default View - + Select GTA V Folder... @@ -2185,7 +2169,7 @@ Press 1 for Default View - + Select Profile @@ -2208,15 +2192,15 @@ Press 1 for Default View - - + + Show In-game - - + + Hide In-game diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index e346dc2477a265e806769d0beca1c0e6f188b964..39045abf71601af03c08e7c4b05455866f452fa3 100644 GIT binary patch delta 3134 zcmX9=dq7TiAOAe(InU*s^ITAANys(T(vVz+lrAorOSv>PrA%~jZ7$1$YLsZE6j~QT zqnAyk%w#UT7|NR2#W1YVn9KIIVZFSc-t*VzJm);;_x*l9pYP}UJzw4yif#xW+S`l( zMgz({;!MEtIdKIbx2Whn6%f_|&YpmH73jnN>D~g?TmjsCfUX+>j}btJIu%{|tC;%| zc*DZ`_f>Ss1l~CVe6SY6v9myzK#19;fK9x|i^D(9&k~lirLpOa%dnBm4(1KGPN@Y!5PH)PY^QXHrcC1NOVu0vl9~z^8S{)n11NA z4d@?@h{In4ArBGpB?G@MA@SEWq{Ky!!_TGPXgvn(mdGNjRh5He*gU!pwn-fC+5$9=#hf!@oj)_hA`RY z*+ME`3bW6(k`hN@{#0tUwo*vU2m^L)7M2u!0!+~e*#r2zvrQ6id&eVoi&~k6oY2#B|=?;HwLK&&|iPC1gqICK@+MF2@d!<=>)Q5?U z`CfY_nhd`+NL!!7_rn~t4QnZZVUqUmV)mMYtyt76^`!KGXbii_jJk`x_wry<2hnYD zCm{Y)(dQp(KE6%#9m4}wo)jk!Ee28^itDb8V&zZ7jUA`aPCjCG7NzS{BW{k^!r1|F zPavE2%@JaS=U!mRL>0G0ixmeWIYY|D!)Y_S1?fILaDu-V=q}Bwq(mjUZv@&h_$R&2m%p_O z^bSwF=$3H3Q^<3=t()GZ-om*uNl40sUMd8CbAHUsFyh`ySJuy-V!BQ-3+A zH!BO(-`0>)cUS$3FTQ1h_6E6i8MO^pabB*9Df12X;(nmm-{5?65_=@l(D#f23|MV& zYdga^5@LA$U&Jw1!#fMB0i%Ny-%6;8p$&%Q@9qEr zmkg_8B>!e&A4aAwXQ$VW&@4; z<9I)An6Y+1CP(pDW8LW{O54eJx|VVD5k_16SvFs|V7yWL9cO!$@$qq1)MK0R&mMKa zWKZL($SB$-N^(4Tip>)%Io|N2Jx@s8QkvO>j#A%ey?~r5ss9QlA_uD2+d&%W&ED`I zE)B^H1=mQdZDSy5pgg?d8M3F;dy7NgOzTNfiUwGt-i!3x1?_@d)YS zFRwVdZ%J2XkLS8JOV_-7fx$%Bk{*d4)t##cl2?7T3rl_q^Z$`&AwtJq55IDu=f4y%js;DfieT z_BZ4ik1aq+ygc(BnH||rjy}2u7&1+c1q-sd*UAOscyNdHDt4_@G4Ozjt4ieBt`6LK zkL0>*I$*{g`P}u}bVH1MKEIxBStVb5z(A!<@};mJVKvqS#=0I6}EDF1SV+Qbf&o0X+NW~SV7k<`wuQ8ewD z$F?b2KYLEFpA>65mGiR{rz$4m`cxU5N(QaL%Fy6e+OLNa@im!Tl&7RwD1pZ_B|YIP z&+DgT`-E|hgeloU&D1LScKZd89jRnrV#ZD{m91^-fR3G%JjY=`T8dKWkt%H+eRG!KCLXcO2)k>!&Gy9siMb^HtIH6O*_zkj+(Tk{+<4h}EW!hrR|T zIh*V^*pUG{lZ!&CT_uyt7hTw72__G>Kgm$KX-+RDrq3}goj{y@-}HV>6n8~|DKj9C zlFT;czs~#88dIT7Ba#6-Q(-%9$~F}SF*9YCsm#jC>Px-`L& zdwrGZ`ZHG4Eywhrh|T5eYHC}|1B>1g@Uo4noTX?4_S`aN@)J-d1A9u*g8%`2`_ zq74@F)^b+*ZWr_6>C`-{++1^F7C&SLs5obr`OGW_&W%qkV*7TT8E27yyveOP+v0rw z4!@XEErYGJ_gHV6C1^C8#D1G4c@3!^aLH0NC!Q4FRB_RL%ZVf&;P-*G%K|bo$KN{Y z4^sYq7i)xD62Iksv&JlLCO=>zqJ6*Oe+QP(*zgi2nEYWULnv>Pk-dTDLlMJkt`Wj4E)R}MFQ QAXZA9?z>eU8DUxeKZ8$;ga7~l delta 3407 zcmX|EcR&<(8htxETV`gLl>|jpa1k*Gh@t{w>;+M=iv@*qn1c+N_0n6(k9utAA*AT0T8*W3q;te!9 z0-e`-iF_rb5v*x{7U-(9_!$D zqCe217=HBuQzxsK{{US(@w^GE(AP%AN=wjhA#uuUga_XN^csZ6w%|GUFmTsZ2e9G^ zMtyb~@ZE{1J(P36OGJIizyZUN{9_iGuYzOrFu?x;va`zouWMKk8UQ4&$0vIzYgQ$; z#5)7_lQ{I6HucQHKlgV4Vm(n+MuNFp@!%>6C^dMrSqCf_glG1_KtDH)eAD3%OdrP! z;<9ThmMqq|?;yjLWtvH&UXaKgO;SugP#mO5>+m};*IhHOGzREANmJ0JGZ4O8Q;>O& z78*3$Ah1>fGzTK~QtDNj>OV*zuaD-N0d~MPM)P>B2heuA=E;-$fJ+C>uMYDUKwLk; z^H?Dex?C9QU&joL!uazHyuwpR7(O4Ee?mxJI1*S_ETpdA0gO`}q&{d;rDFRW6^E3lnBuNt z$v~kZ_5qL%;lP0)V8$ll;At-)Gf1cuThod(;nZZQ3XVv7yj%`sa(>9zuLVIEdEI=ZM_Dp zvTGY%_#5alQ|p$__wBs2K^ZTA)f2Um6(0i~E@%@oJ=rZ0+N5$yACjP5_?8wL{j|$R zOSCdTdoYN^df(NaiKW8Bx@ylY=kG^3nro}FX@Rj=`^N?rU86^$UO7ie_lw4nw@IkA z*m4UGHjfp3roRVFJt_wMMb8K6#gLvnV9rHxXr~Pv885}0+HTDJwfM2~2+oBpF>fiY zbAh-lDxb3iVp(4nZ@0c;h5r^RI7&swim777u4uN!GjUJuXjbX_;xT0+`#M;x+|ZF& zBUWdwVn&Bm%m`Gmz+bFBoXht~;)6Oj4x_W;qv&JoqJiS8noFDqkHj}egQ!TJPOSfZ zoL=X$y_ktURI%4hUB}HO?Ej^EbWv5Ofm!*wH$ECG1%r&5oenru_u4f*j2^& z&4#IWcyC&*;*jfxlyC0>eQOQ#J}U!Ot~9LJkU?T24MkN&z^7jt%1_ye(+yt?`~_%# z!mw}GZ$ROE!+{zqIl0zw+Hsm~F&rXXX1Y@@6ckH$<#%(q}pWNH%INWv#XY*iV<>?xF+{}3TFasINjOWg>2uGWY zw+?^HS^sb2(__rY^QQ4PYb7u|*!VU&hV7Fext=`5TCq#6w|cNm&r2Se4`|f{snshl zprBG}J(EO~d=MeC2Q))IDMI{ zd0dY_$mWJE*d0H~)3A5JPII;mLHQN>NC6}1|`>N06l5bQ(2I7l?MhYc|jvNP-2w4um@brk5$Z{tmIuLz-VWgUjW#!} z<9t~3(Cib!IpFSOcKF_4;KhT?Axk)NU1L=IV2rtIkHx^qd*&YIQ=9|2=H6@BHpLa@ z5tX!P%ro;y7glrFZWWWv=9yP%(UQjIg6+&Sv88#>D0-f^*L>*2SbighsyK0r`OMgc zoEt}-#QH58mEv%czrW4(y2YvKg}e0lA5I-D?C-G7PGQ|yBn@vmrDRd+z*?vM6A~%$ zBNbDhJDsrefL<#sO{P$hi4m4=&nbCUOG}iGo!@r9TP99_!8S{_*lYFzIp12Q<&(JF z*0Sb274JI8viWT!kkM_LW!G1f#DAQnVsm%4=`Gu zc`)NZqvge?lrp1=Y|0(`T9_7znwr7_OJHaQ?1+aIX_&>UI3yqyDZEPLlSJ5fXXBj} zneU!$)FAvXgY{Pbbuof33!Q^py$1a69Yf7P27|;iu$AHJi6qn$DU2Q8 zuul@NlHXBE|1Z7t|DX0j{b|<3G^;%&-I|y@Ey - + &Close 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,https://github.com/Syping/ - + 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> - - A project for viewing and sync Grand Theft Auto V Snapmatic<br/> -Pictures and Savegames - Ein Projekt zum ansehen und synchronisieren von<br/> -Grand Theft Auto V Snapmatic Bilder und Spielständen - - - + Release Release - + Release Candidate Release Candidate - + Daily Build Daily Build - + Developer Entwickler - + Beta Beta - + Alpha Alpha - + Custom Eigener @@ -266,8 +259,8 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen - - + + Background Colour: <span style="color: %1">%1</span> Hintergrundfarbe: <span style="color: %1">%1</span> @@ -278,7 +271,7 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen ... - + Background Image: %1 Hintergrundbild: %1 @@ -314,44 +307,44 @@ Grand Theft Auto V Snapmatic Bilder und Spielständen - - + + Background Image: Hintergrundbild: - - + + 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 - + 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 @@ -413,7 +406,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! &Fertig - + X: %1 Y: %2 X and Y position @@ -576,7 +569,7 @@ Y: %2 - + Participate in %1 User Statistics An %1 Benutzerstatistik teilnehmen @@ -602,8 +595,8 @@ Y: %2 - - + + Participation ID: %1 Teilnahme ID: %1 @@ -614,7 +607,7 @@ Y: %2 - + User Feedback Benutzer Feedback @@ -666,113 +659,99 @@ Y: %2 - - + + Current: %1 Aktuell: %1 - - Sync - Sync - - - - Sync is not implemented at current time - Sync wurde bisher nicht implementiert - - - + Apply changes Änderungen übernehmen - + &OK OK, Cancel, Apply &OK - + Discard changes Änderungen verwerfen - + &Cancel OK, Cancel, Apply Abbre&chen - + %1 %1 %1 - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (Erste näheste Sprache) - + System System in context of System default System - + %1 (Closest to Interface) Next closest language compared to the Interface %1 (Näheste zur Oberfläche) - + Auto Automatic language choice. Automatisch - + 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 - + A feedback message have to between 3-1024 characters long Eine Feedback Nachricht hat zwischen 3-1024 Zeichen lang zu sein - + No Profile No Profile, as default Kein Profil - - - + + + Profile: %1 Profil: %1 PictureDialog - - %1 - Snapmatic Picture Viewer - %1 - Snapmatic Bildansicht - Snapmatic Picture Viewer - %1 @@ -817,31 +796,31 @@ Y: %2 - + 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... @@ -855,39 +834,39 @@ 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 @@ -990,7 +969,7 @@ Drücke 1 für Standardmodus - + Open &JSON Editor... &JSON Editor öffnen... @@ -1088,25 +1067,25 @@ Drücke 1 für Standardmodus S&chließen - + Loading... Lade... - + Snapmatic Loader Snapmatic Lader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>Folgende Snapmatic Bilder wurden repariert</h4>%1 - - - + + + Import... Importieren... @@ -1114,66 +1093,66 @@ Drücke 1 für Standardmodus - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + Import Importieren - + Savegames files (SGTA*) Spielstanddateien (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) - + Importable files (%1) Importfähige Dateien (%1) - - + + All image files (%1) Alle Bilddateien (%1) - - + + All files (**) Alle Dateien (**) - - + + Import file %1 of %2 files Importiere Datei %1 von %2 Dateien - + Import failed with... %1 @@ -1182,149 +1161,149 @@ Drücke 1 für Standardmodus %1 - + 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 - + Can't import %1 because file format can't be detected Kann %1 nicht importieren weil das Dateiformat nicht erkannt werden kann - + Initialising export... Initialisiere Export... - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA oder endet mit .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Fehlgeschlagen beim Importieren vom Snapmatic Bild, dieses Bild ist bereits im Spiel - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exportiere Snapmatic Bilder%2<br><br>JPG Bilder machen es möglich sie mit ein Bildansicht Programm zu öffnen<br>Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren<br><br>Exportieren als: - - + + No valid file is selected Keine gültige Datei wurde ausgewählt - + Enabled pictures: %1 of %2 Aktivierte Bilder: %1 von %2 - + Failed to import the Snapmatic picture, can't copy the file into profile Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren - + Failed to import the Savegame, can't copy the file into profile Fehlgeschlagen beim Importieren vom Spielstand, kann Spielstanddatei nicht ins Profil kopieren - + Failed to import the Savegame, no Savegame slot is left Fehlgeschlagen beim Importieren vom Spielstand, kein Spielstandslot mehr frei - - + + JPG pictures and GTA Snapmatic JPG Bilder und GTA Snapmatic - - + + JPG pictures only Nur JPG Bilder - - + + GTA Snapmatic only Nur GTA Snapmatic - - - - + + + + Patch selected... Auswahl patchen... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Patche Datei %1 von %2 Dateien - - + + Qualify as Avatar Als Avatar qualifizieren - - - - - - + + + + + + No Snapmatic pictures are selected Keine Snapmatic Bilder sind ausgewählt - + Failed to remove all selected Snapmatic pictures and/or Savegame files Fehlgeschlagen beim Entfernen von allen augewählten Snapmatic Bildern und/oder Spielstanddateien - - - - - - + + + + + + %1 failed with... %2 @@ -1334,88 +1313,88 @@ Drücke 1 für Standardmodus %2 - + Qualify %1 failed with... Qualifizieren - - + + Change Players... Spieler ändern... - + Change Players %1 failed with... Spieler ändern - - - + + + Change Crew... Crew ändern... - + Failed to enter a valid Snapmatic Crew ID Fehlgeschlagen beim Eingeben von einer gültigen Crew ID - + Change Crew %1 failed with... Crew ändern - - - + + + Change Title... Titel ändern... - + Failed to enter a valid Snapmatic title Fehlgeschlagen beim Eingeben eines gültigen Snapmatic Titel - + Change Title %1 failed with... Titel ändern - - + + No Snapmatic pictures or Savegames files are selected Keine Snapmatic Bilder oder Spielstände sind ausgewählt - - - + + + Remove selected Auswahl löschen - + You really want remove the selected Snapmatic picutres and Savegame files? Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen? - - - - - + + + + + Export selected... Auswahl exportieren... - + Export failed with... %1 @@ -1434,7 +1413,7 @@ Drücke 1 für Standardmodus Alle Profildateien (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1569,32 +1548,32 @@ Drücke 1 für Standardmodus Fehlgeschlagen beim Löschen %1 von deinen Spielständen - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All &Alles auswählen - + &Deselect All Alles a&bwählen @@ -1609,7 +1588,7 @@ Drücke 1 für Standardmodus Spielstand kopieren - + &Export &Exportieren @@ -1661,7 +1640,7 @@ Drücke 1 für Standardmodus - + Snapmatic Properties @@ -1703,7 +1682,7 @@ Drücke 1 für Standardmodus Meme - + Snapmatic Title Snapmatic Titel @@ -1802,26 +1781,26 @@ Drücke 1 für Standardmodus - + 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: @@ -1949,52 +1928,52 @@ Drücke 1 für Standardmodus Fehlgeschlagen beim Anzeigen von %1 im Spiel von deinen Snapmatic Bildern - + Edi&t Bearbei&ten - + &Export &Exportieren - + Show &In-game &Im Spiel anzeigen - + Hide &In-game &Im Spiel ausblenden - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All Alles &auswählen - + &Deselect All Alles a&bwählen @@ -2189,13 +2168,13 @@ Drücke 1 für Standardmodus - + Select Profile Profil auswählen - + Select GTA V Folder... @@ -2215,7 +2194,7 @@ Drücke 1 für Standardmodus - + &About %1 &Über %1 @@ -2238,15 +2217,15 @@ Drücke 1 für Standardmodus &Neuladen - - + + Show In-game Im Spiel anzeigen - - + + Hide In-game Im Spiel ausblenden diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm index 0554a5fb1bcf8ed1293b488e1324ad1f26fffa24..271a25eabf70463a0b38eb7047160a5e98955f85 100644 GIT binary patch delta 2884 zcmXArdt6QF8pof#_F8-Iwbs6L*(6qT zVUAo2sb)fIN8}_84pT|Y!JJHus81)isfotn{Q9iFzI(5|-}iZ*-}8IkcjZ;d_EpOE z=uH+x6hWjggR_VDr0d79#x`A})z29M3(1i7ZNqyu*lil|+jH zqS0D>_mOBhf@oeHQM3&)=dWU)1Y&cKVoy7;jL2kpjo1_GiDHt8t!9bFcM#hMCLAEP z$(=}iM(n*A2&|VFq#R(M(_FAVh^Cg{`D6v9mfa?DJ3*=cL>!xZGR>S$ zG_;7avIbsppJ z{a^GlBaz7E2bu6IjBx` zOw;c~miuKVi9v79$SUH`Lb6X~jr|BX$soHkC4d!ac)9Q9Jc+^9 zOp$5rI7oGnDH^29BZ*--OmRpa47gDuYcEmZEm8AGqV|SF+Zc%>cSsCcBr&d%DNXAj zGI%o;6~RQ~R7~X+7NO+8-|DLa`* zH>RRz3z_y4dZO4ermHgrZVqSOOoTE*1oKybHBr^92}Ft!`m-0f%;Z|Y%prtX5A_9RhaoYJlpEwsI*^mto`IX5YNe*m3Yl=GHU zKR#UFaxGfy$=jIz6NyZ$c*o2RROri(eC>)c+QECSLqP7NMC+$~U;ujPyn+wO zF(RRAKBVb9T&&61k&rOt0e|!HdyG>n z-!x|mTz!te=V!n=YyNraE3{&EiC+p63UGxA142aFbliSELP8f7hOQK*KZOUx-NMZ0S|r#h z%z6q*9bXG+l^c=BGhq>-qM`1>{y1!``c0z6ZHcae#ISOq%6LgPuaKr>djHzEah zK#TD2VklxYLwI}^EeRMebcn0a>n5S=CKUC5BgzI74mc~yBlVbnrc|^&hXkz5V$cRi zrZS3SC-=eC1!C%LNEebRW@{n&(D&lzr7hTKznB|51Ck#Ub7MNt%K?eTbz<%8TaWyhcEEAg#ro-hX@lGDz10vhSKdT==k$#C*IcoMFMx1Cb)O`0Vq}3?3!^Pq7PPf|I;}0mXQa#^w4a_AUrCv1^();wN|8D*Wm(fFY z&cr+f_)NXe7tc92b-oO5EWxWKPI|7+k3m9;t?EJ@Dh$k4Uw96QqP{iN z1}A!<`r&I7VmV3OeF&bhPu1A9`r%SLt+DIESV!qK9tIQU*CI;e^$-E0;x&dGoOtSN ziTdv~6C$_53;mi%O)aM3t>%LoNbhx8GeZwkx~z~G*sEFB0_mgIX!aJNveD}`Wq(5} zC#}+$FU`jL!2*eXwwk)xL$J>dEjxI5c~8*_rU$La$U+$a(Ybn*)Al? z{-oP~4T?Gj>5jcm!2xEeEBP6f4^7dPejbi>%{rgDDoE)&N7vL)0f|QG+Fj0IgE-ww jM^rfMiLUPeBpW*s*(5zFj~0KGmFH<3hL$_K^&0*UKb8kg delta 2993 zcmX9=dt8k99{#@Xyzk7smzj}DL`;QJnUba=rKG#aCDCz<#u1vNggwjDiR0EmYm;5M z=dyIxJrTK7AAGXq+S$`$m*vpM{gO*-IZx;P>v`XI=J&lk&-4AhZ)qh{QpK!yuz3>E zP$G>9IDtqX09-_*&R5V`AYu!MI!z?vZW1{>CE`cn2%dYIiR|2oyhDftn}T-PL<97= z-=(14Mxv>;M8p0h_GBHAp^mts9f;@Gt1=3O%q1`6vr+sT^6E&K;7nc}2@~?j>!}}b3wdv<2O|aKeI|~`xRks*5(EV( z7=4UFgAvG7NKqCrGopfGmIDWxDK_vPI?SZlG&h_-KnVx%Jmx8-9=t}>r-)L|Ax~F( zvZag$ZBD%?KOc12ucKvyAcOxFT66F^nAk?U)9r}NUFk&o0u=C`8h4?P@Hl#S69Lun z^mr$a`$P1~I+DnJ10&w{AqxD5g3+vk@pX*L4=BX`Ju`EB8xpT%at6L78WPSdDYH!> za`~Mp9x|AycL7tJ_d8K%1GAS{Xzs}zA8`cKB{5C!kvPhQxe;$A@>|3_d-i}xT*JK7 z9VYUf!Mav&K%6`_$)^>Co@6IoM535!?5r`Me&}O1bNM);#Bg^0)*p!a^<#^C@w?8% zZnsSvK-4pe-QI!bkLYs_=SMbGMxHAYc&O%E&^<0SR{Wh3MUd^ecdL+u>dhbR&O)}@1-5F-w z&6)pzw0&1|K@m7Nq!X7Eyp3q^Vy>V$42{~_xRrKeq4is?Xf?DF)46}9t_9V^?TUga zdws=K`0NH{5emkv=PC|NhP(gd4i=_h7hLA5rRiYq4Og=*0ArcOHRXMaMiwX-+^Arz zBiB?_h~Hhf$CImxx>&dm*BdbZT}<4kQ)VzQn&&zW`Udk3`%001j)Jbme8A4{h=zyp zsf`y<`B^@5`wT1_BfnGtLy^tA&6Er?edf!2&|$<@zHAu^iQLZbXdg%9^DSRqfaNvf zE?>c}h6IE8iXceRdnA8o{~64G*K7O@)(&&&qvnH-5;4=%-C{q&?VHsu^?K}q2=$oB zpt%2J^$a$PD4?5qRx%i48r3KE0UhV5+fUy@0V_0OTP~67e--q1Rd8^q#(~>QG|E@g z{Vt?*KBDpbR0{^)Y5M=G7W40VN;7rNaddo2V_AX@h3=Y+2>ekuSwX)}nmPAyuWnS( zqfC?a@B5f{7tQ)@3lNCalr)y0!#w=Lc*9iIQe&K3BqA;a_X{XqYH2UF%YB0>x9c5$)yB_@#E(YwYa! zSnY^?O+?Xmw3$2L4c}|ptn(I3&wlOS?t$vwPqj;|pt#RVZNBS&Fa-_TD&JKwp`fj~ za2?X*XfISDzG|Viz7C%8+NFJAt48IW)3tAmHE?%};B@vpv^EG%cfv6~AB3KH4?%Ic z(D#Eo?z4q{i;z&=Q$dF*g1;ZMbW0HeS4E+q9YWyMlQ8oVA*OUKn5YvHi!Wngg$a{2 zkk)C0FufFvg!C2W#=b&B*@A8EOkA*0!u52inFLx-y*Dzz6%#`5sFM^Bpxc1 zpC1Vg8KJ@#ntSPl%i*9f=$z2-;0wm8PPjTL9`62LXf_2Ab^j>5NPP`SMu|)-3J#tv zGEX|NOw>8L!NjjbV!PF7`m&SNXiz6 zri}*f5))f-E@Xl@`Vl-JtHqQTdKB0wPIv@Hd)*b&Dwm>xn_@blp)O_OrZ~hEQWUg{ zRnXn`Qn?uNomkbw5ig$`Vofs-?H`DjO6x&=l-TeD36i#mS1fRMze4e+VGLIF7O^Ss z7`)-ApgBjuz)A(92Z~L5A%X6o*xV}_?}Ag}&-=kh=LYe?5lAw?O?)WjVE%_!imeTx z)bCe`>8N17ff{07f zyXqD&VpY(dWbXSYEVgD@c!I)xUdnbqUL*2okR4Xo!*i9gi^RZ0owv#^r=4M*YqGcJ z8!#|Ip5_k9Ra@np1YrLg^4BM(U{{})S4Ea!Pdt)K`{OykSuSJn;S!jtVAL(SEE)x= zKg;C?bT}|WKJ@|=CpyZtJ}lyml&>T>VY8RZzkEO=cGdEetu~m(C0y72t_c)-=(@LJ zt|QuYob*DW#yP;0 z?kNfmY|$;c3F;&NqAT8q#{8%14vvSEQ4@71&P>F2LagqDt>ePRGUW=%KdEVj-#`lGy{3(t+k - + &Close - + 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,https://github.com/Syping/ - - A project for viewing and sync Grand Theft Auto V Snapmatic<br/> -Pictures and Savegames - - - - + 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> - + Release - + Release Candidate - + Daily Build - + Developer - + Beta - + Alpha - + Custom @@ -234,8 +228,8 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> Background Color: <span style="color: %1">%1</span> @@ -267,7 +261,7 @@ Pictures and Savegames - + Background Image: %1 @@ -303,43 +297,43 @@ Pictures and Savegames - - + + Background Image: - - + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! - + 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 @@ -401,7 +395,7 @@ When you want to use it as Avatar the image will be detached! - + X: %1 Y: %2 X and Y position @@ -548,7 +542,7 @@ Y: %2 - + Participate in %1 User Statistics @@ -569,8 +563,8 @@ Y: %2 - - + + Participation ID: %1 @@ -581,7 +575,7 @@ Y: %2 - + User Feedback @@ -648,8 +642,8 @@ Y: %2 - - + + Current: %1 @@ -659,97 +653,87 @@ Y: %2 - - Sync - - - - - Sync is not implemented at current time - - - - + Apply changes - + &OK OK, Cancel, Apply - + Discard changes - + &Cancel OK, Cancel, Apply - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default - + %1 (Closest to Interface) Next closest language compared to the Interface - + Auto Automatic language choice. - + %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 - + A feedback message have to between 3-1024 characters long @@ -791,31 +775,31 @@ Y: %2 - + Export as &Picture... - + Export as &Snapmatic... - + &Overwrite Image... - + &Edit Properties... - + Open &Map Viewer... @@ -827,37 +811,37 @@ Arrow Keys - Navigate - - + + Snapmatic Picture Viewer - - + + Failed at %1 - - + + No Players - - + + No Crew - + Unknown Location - + Avatar Preview Mode Press 1 for Default View @@ -967,7 +951,7 @@ Press 1 for Default View - + Open &JSON Editor... @@ -1071,30 +1055,30 @@ Press 1 for Default View - + Enabled pictures: %1 of %2 - + Loading... - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - - - + + + Import... @@ -1102,245 +1086,245 @@ Press 1 for Default View - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + Import - + Importable files (%1) - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) - - + + All image files (%1) - - + + All files (**) - - + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - + 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 - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - - - - - + + + + + Export selected... - + Initialising export... Initializing export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - - + + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - - + + Qualify as Avatar - - - - - - + + + + + + No Snapmatic pictures are selected - - - - + + + + Patch selected... - - - - - - - - + + + + + + + + Patch file %1 of %2 files - - - - - - + + + + + + %1 failed with... %2 @@ -1348,60 +1332,60 @@ Press 1 for Default View - + Failed to remove all selected Snapmatic pictures and/or Savegame files - + Qualify %1 failed with... - - + + Change Players... - + Change Players %1 failed with... - - - + + + Change Crew... - + Failed to enter a valid Snapmatic Crew ID - + Change Crew %1 failed with... - - - + + + Change Title... - + Failed to enter a valid Snapmatic title - + Change Title %1 failed with... @@ -1503,37 +1487,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1631,7 +1615,7 @@ Press 1 for Default View - + Snapmatic Properties @@ -1766,32 +1750,32 @@ Press 1 for Default View - + Patching of Snapmatic Properties failed because of I/O Error - + Snapmatic Title - + New Snapmatic title: - + Snapmatic Crew - + New Snapmatic crew: @@ -1919,52 +1903,52 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -2079,7 +2063,7 @@ Press 1 for Default View - + &About %1 @@ -2141,7 +2125,7 @@ Press 1 for Default View - + Select GTA V Folder... @@ -2185,7 +2169,7 @@ Press 1 for Default View - + Select Profile @@ -2208,15 +2192,15 @@ Press 1 for Default View - - + + Show In-game - - + + Hide In-game diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index e8bc8a7e4c3eec08757b48a54e4331961a7fda7b..243cabac8e10b5d1d2fec718cf5379834c2effd9 100644 GIT binary patch delta 3134 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 diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index 40cff02..a412bf5 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -32,78 +32,71 @@ Fonctionne avec Qt %6<br/> %7 - + &Close &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/ - + 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> - - A project for viewing and sync Grand Theft Auto V Snapmatic<br/> -Pictures and Savegames - Un outil pour gérer et synchroniser les photos Snapmatic<br/> -et les fichiers de sauvegarde de Grand Theft Auto V - - - + Release Release - + Release Candidate Release Candidate - + Daily Build Daily Build - + Developer Developer - + Beta Beta - + Alpha Alpha - + Custom Personnalisé @@ -266,8 +259,8 @@ 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> @@ -278,7 +271,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V ... - + Background Image: %1 Image de fond : %1 @@ -314,44 +307,44 @@ et les fichiers de sauvegarde de Grand Theft Auto V - - + + Background Image: Image de fond : - - + + 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é - + 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 @@ -413,7 +406,7 @@ Si vous l'utilisez comme Avatar, l'image sera détachée !&Terminer - + X: %1 Y: %2 X and Y position @@ -566,7 +559,7 @@ Y : %2 - + Participate in %1 User Statistics Participer aux statistiques d'usage %1 @@ -597,8 +590,8 @@ Y : %2 - - + + Participation ID: %1 ID de participation : %1 @@ -609,7 +602,7 @@ Y : %2 - + User Feedback Feedback utilisateur @@ -661,8 +654,8 @@ Y : %2 - - + + Current: %1 Actuel : %1 @@ -672,107 +665,93 @@ Y : %2 Utiliser le Style par Défaut (rédémarrage requis) - - Sync - Synchronisation - - - - Sync is not implemented at current time - La synchronisation n'est pas encore implémentée - - - + Apply changes Appliquer les changements - + &OK OK, Cancel, Apply &OK - + Discard changes Annuler les changements - + &Cancel OK, Cancel, Apply &Annuler - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (Langage proche) - + System System in context of System default Système - + %1 (Closest to Interface) Next closest language compared to the Interface %1 (Langage proche de l'interface) - + Auto Automatic language choice. Automatique - + %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é - + A feedback message have to between 3-1024 characters long Un message doit contenir 3 à 1024 charactères - + No Profile No Profile, as default Aucun profil - - - + + + Profile: %1 Profil : %1 PictureDialog - - %1 - Snapmatic Picture Viewer - %1 - Visionneuse de photo Snapmatic - Snapmatic Picture Viewer - %1 @@ -897,31 +876,31 @@ Y : %2 - + 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... @@ -935,39 +914,39 @@ 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 @@ -990,7 +969,7 @@ Appuyer sur 1 pour le mode par défaut - + Open &JSON Editor... Ouvrir l'éditeur &JSON... @@ -1094,30 +1073,30 @@ Appuyer sur 1 pour le mode par défaut Copie du fichier %1 sur %2 - + Enabled pictures: %1 of %2 Photos activées : %1 sur %2 - + Loading... Chargement... - + Snapmatic Loader Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>Les Snapmatic suivants ont été répaés</h4>%1 - - - + + + Import... Importer... @@ -1125,61 +1104,61 @@ Appuyer sur 1 pour le mode par défaut - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + 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 (**) - - + + Import file %1 of %2 files Importation du fichier %1 sur %2 - + Import failed with... %1 @@ -1188,153 +1167,153 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No valid file is selected Fichier invalide - + Importable files (%1) Fichiers importables (%1) - + 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 - + Can't import %1 because file format can't be detected Impossible d'importer %1, le format du fichier n'est pas détecté - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*, *.g5e) - + Failed to import the Snapmatic picture, the picture is already in the game Impossible d'importer la photo Snapmatic, un fichier du même nom existe déjà - + Failed to import the Snapmatic picture, can't copy the file into profile Impossible d'importer la photo Snapmatic, impossible de copier le fichier dans le profil - + Failed to import the Savegame, can't copy the file into profile Impossible d'importer la sauvegarde, impossible de copier le fichier dans le profil - + Failed to import the Savegame, no Savegame slot is left Impossible d'importer la sauvegarde, aucun emplacement libre - - + + JPG pictures and GTA Snapmatic Images JPG et GTA Snapmatic - - + + JPG pictures only Images JPG seulement - - + + GTA Snapmatic only GTA Snapmatic seulement - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exporter les photos Snapmatic%2<br><br>Les fichiers JPG permettent d'ouvrir les photos avec une visionneuse d'images<br>Les GTA Snapmatic permettent d'importer les photos dans le jeu<br><br>Exporter comme : - - - - - + + + + + Export selected... Exporter la sélection... - + Initialising export... Initialisation de l'export... - - + + Qualify as Avatar Qualifier comme Avatar - - - - - - + + + + + + No Snapmatic pictures are selected Aucun Snapmatic sélectionné - - - - + + + + Patch selected... Patcher la sélection... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Patch du fichier %1 sur %2 - - - - - - + + + + + + %1 failed with... %2 @@ -1344,66 +1323,66 @@ Appuyer sur 1 pour le mode par défaut %2 - + Failed to remove all selected Snapmatic pictures and/or Savegame files Échec de la supression des Snapmatic et/ou des fichiers de sauvegarde sélectionnés - + Qualify %1 failed with... Qualifier - - + + Change Players... Modifier les joueurs... - + Change Players %1 failed with... Modifier les joueurs - - - + + + Change Crew... Modifier le Crew... - + Failed to enter a valid Snapmatic Crew ID Snapmatic Crew ID invalide - + Change Crew %1 failed with... Changer le Crew - - - + + + Change Title... Changer le titre... - + Failed to enter a valid Snapmatic title Titre Snapmatic invalide - + Change Title %1 failed with... Changer le titre - + Export failed with... %1 @@ -1412,20 +1391,20 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No Snapmatic pictures or Savegames files are selected Aucun fichier de sauvegarde ou photo Snapmatic sélectionné - - - + + + Remove selected Supprimer la sélection - + You really want remove the selected Snapmatic picutres and Savegame files? Supprimer la sélection ? @@ -1435,7 +1414,7 @@ Appuyer sur 1 pour le mode par défaut Tous les fichiers de profil (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1532,7 +1511,7 @@ Appuyer sur 1 pour le mode par défaut Supprimer - + &Export &Exporter @@ -1623,32 +1602,32 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + &View &Voir - + &Remove &Supprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner to&ut - + &Deselect All &Déselectionner tout @@ -1662,7 +1641,7 @@ Appuyer sur 1 pour le mode par défaut - + Snapmatic Properties @@ -1704,7 +1683,7 @@ Appuyer sur 1 pour le mode par défaut Meme - + Snapmatic Title Titre Snapmatic @@ -1805,26 +1784,26 @@ Appuyer sur 1 pour le mode par défaut - + 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 : @@ -1972,52 +1951,52 @@ Appuyer sur 1 pour le mode par défaut %1 n'a pas pu être rendu visible en jeu - + Edi&t Édi&ter - + Show &In-game &Visible en jeu - + Hide &In-game &Invisible en jeu - + &Export &Exporter - + &View &Voir - + &Remove S&upprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner &tout - + &Deselect All &Déselectionner tout @@ -2156,7 +2135,7 @@ Appuyer sur 1 pour le mode par défaut - + Select GTA V Folder... @@ -2211,14 +2190,14 @@ Appuyer sur 1 pour le mode par défaut - + &About %1 &À propos de %1 - + Select Profile Sélectionner un profil @@ -2241,15 +2220,15 @@ Appuyer sur 1 pour le mode par défaut Impossible d'ouvrir %1, format invalide - - + + Show In-game Visible en jeu - - + + Hide In-game Invisible en jeu diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index d85a42aba749d858d2842fed2b7ab3bb7308e0b4..c7df0a1f10dbee6d31b291e8de770763c4df9ed8 100644 GIT binary patch delta 3134 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 Cgt}e; diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index 7fcdc18..1298770 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -32,78 +32,71 @@ Running with Qt %6<br/> %7 - + &Close &Закрыть - + 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> - - A project for viewing and sync Grand Theft Auto V Snapmatic<br/> -Pictures and Savegames - Проект Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра и ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ <br/> -Grand Theft Auto V Snapmatic картинок и Ñохранений - - - + Release Релиз - + Release Candidate Предварительный выпуÑк - + Daily Build Ð”Ð½ÐµÐ²Ð½Ð°Ñ Ñборка - + Developer Разработчик - + Beta Бета - + Alpha Ðльфа - + Custom Ðе извеÑтен контекÑÑ‚ Ð¡Ð²Ð¾Ñ @@ -268,8 +261,8 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений - - + + Background Colour: <span style="color: %1">%1</span> Цвет фона: <span style="color: %1">%1</span> @@ -280,7 +273,7 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений... - + Background Image: %1 Ð¤Ð¾Ð½Ð¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ°: %1 @@ -318,43 +311,43 @@ Grand Theft Auto V Snapmatic картинок и Ñохранений - - + + Background Image: Ð¤Ð¾Ð½Ð¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ°: - - + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! Свой Ðватар - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! Ð¡Ð²Ð¾Ñ ÐšÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ° - + 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 Файл @@ -416,7 +409,7 @@ When you want to use it as Avatar the image will be detached! &Готово - + X: %1 Y: %2 X and Y position @@ -569,7 +562,7 @@ Y: %2 - + Participate in %1 User Statistics УчаÑтвовать в пользовательÑкой ÑтатиÑтике %1 @@ -601,8 +594,8 @@ Y: %2 - - + + Participation ID: %1 Ðомер учаÑтника: %1 @@ -613,7 +606,7 @@ Y: %2 - + User Feedback Форма обратной ÑвÑзи @@ -666,8 +659,8 @@ Y: %2 - - + + Current: %1 СейчаÑ: %1 @@ -677,107 +670,93 @@ Y: %2 ИÑпользовать Ñтандартный Ñтиль (ПерезапуÑк) - - Sync - Sync - - - - Sync is not implemented at current time - Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ð¾ÐºÐ° ещё не реализована - - - + Apply changes Применить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ - + &OK OK, Cancel, Apply &ОК - + Discard changes Отвергнуть Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ - + &Cancel OK, Cancel, Apply От&мена - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default СиÑтема - + %1 (Closest to Interface) Next closest language compared to the Interface %1 (Совпадает Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñом) - + Auto Automatic language choice. ÐвтоматичеÑки - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. Ð”Ñ€ÑƒÐ³Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° будет загружена поÑле перезапуÑка %1. - + View %1 User Statistics Online ПоÑмотреть пользовательÑкую ÑтатиÑтику %1 онлайн - + Not registered Ðе зарегиÑтрирован - + A feedback message have to between 3-1024 characters long Сообщение обратное ÑвÑзи не должно быть длинее 1024 Ñимволов - + No Profile No Profile, as default Ðет Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - - - + + + Profile: %1 Профиль: %1 PictureDialog - - %1 - Snapmatic Picture Viewer - %1 - ПроÑмотрщик фотографий Snapmatic - <span style=" font-weight:600;">Title: </span>%6<br/> @@ -822,31 +801,31 @@ Y: %2 - + Export as &Picture... ЭкÑпортировать как &картинку... - + Export as &Snapmatic... ЭкÑпортировать как &Snapmatic... - + &Overwrite Image... &ПерезапиÑать картинку... - + &Edit Properties... &Изменить ÑвойÑтва... - + Open &Map Viewer... Открыть &карту... @@ -860,39 +839,39 @@ 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 ÐеизвеÑтное меÑто @@ -995,7 +974,7 @@ Press 1 for Default View - + Open &JSON Editor... Открыть &редактор JSON... @@ -1092,26 +1071,26 @@ Press 1 for Default View &Закрыть - + Loading... Загрузка... - + Snapmatic Loader Загрузчик Snapmatic - + <h4>Following Snapmatic Pictures got repaired</h4>%1 Change wording if the %1 is not a multiline beginning at new line <h4>ÐижеÑледующие картинки Snapmatic были воÑÑтановлены</h4>%1 - - - + + + Import... Импортировать... @@ -1119,54 +1098,54 @@ Press 1 for Default View - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + Import Импортировать - + Savegames files (SGTA*) Файлы ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ (SGTA*) - + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) - - + + All files (**) Ð’Ñе файлы (**) - - + + Import file %1 of %2 files ИмпортируютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ %1 из %2 - + Import failed with... %1 @@ -1175,169 +1154,169 @@ Press 1 for Default View %1 - + Failed to read Snapmatic picture Ðе удалоÑÑŒ загрузить картинку Snapmatic - + Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + No valid file is selected Выбранный файл неверен - + Enabled pictures: %1 of %2 Включенные картинки: %1 из %2 - + Importable files (%1) Файлы Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° (%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, файл не может быть правильно обработан - + Can't import %1 because file format can't be detected Ðе получилоÑÑŒ импортировать %1, не удалоÑÑŒ определить формат файла - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе удалоÑÑŒ импортировать картинку Snapmatic, название не начинаетÑÑ Ñ PGTA или не заканчиваетÑÑ Ñ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе удалоÑÑŒ импортировать картинку Snapmatic, картинка уже в игре - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе удалоÑÑŒ импортировать картинку Snapmatic, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, can't copy the file into profile Ðе удалоÑÑŒ импортировать Ñохранение, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, no Savegame slot is left Ðе удалоÑÑŒ импортировать Ñохранение, нет пуÑтых Ñчеек под ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + JPG pictures and GTA Snapmatic Картинки JPG и GTA Snapmatic - - + + JPG pictures only Только картинки JPG - - + + GTA Snapmatic only Только GTA Snapmatic - + Initialising export... Подготовка к ÑкÑпорту... - - + + No Snapmatic pictures or Savegames files are selected Ðе выделены ни один Snapmatic или Ñохранение - - - + + + Remove selected СнÑть выделение - + You really want remove the selected Snapmatic picutres and Savegame files? Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - - + + Qualify as Avatar Пометить как Ðватар - - - - - - + + + + + + No Snapmatic pictures are selected Ðе выделена ни одна картинка Snapmatic - - - - + + + + Patch selected... Пропатчить выделенные... - - - - - - - - + + + + + + + + Patch file %1 of %2 files ИзменÑетÑÑ Ñ„Ð°Ð¹Ð» %1 из %2 - - - - - - + + + + + + %1 failed with... %2 @@ -1347,80 +1326,80 @@ Press 1 for Default View %2 - + Failed to remove all selected Snapmatic pictures and/or Savegame files Ðе удалоÑÑŒ удалить вÑе выделенные картинки Snapmatic и/или ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - + Qualify %1 failed with... Помечание - - + + Change Players... Изменить игроков... - + Change Players %1 failed with... Измение игроков - - - + + + Change Crew... Изменить банду... - + Failed to enter a valid Snapmatic Crew ID Введённый идентификатор банды не верен - + Change Crew %1 failed with... Изменение банды - - - + + + Change Title... Изменить заголовок... - + Failed to enter a valid Snapmatic title Введённый заголовок не верен - + Change Title %1 failed with... Изменение заголовка - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1ЭÑкпортировать картинки Snapmatic%2<br><br>Картинки JPG можно открыть любым проÑмотрщиком<br>Картинки формата GTA Snapmatic можно Ñнова импортировать в игру<br><br>ЭкÑпортировать как: - - - - - + + + + + Export selected... Экпортировать выделенное... - + Export failed with... %1 @@ -1441,7 +1420,7 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1581,32 +1560,32 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить Ñохранение %1 - + &View &ПроÑмотр - + &Remove &Удалить - + &Select &Выбрать - + &Deselect Сн&Ñть выбор - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1616,7 +1595,7 @@ Press 1 for Default View Копировать Ñохранение - + &Export &ЭкÑпортировать @@ -1668,7 +1647,7 @@ Press 1 for Default View - + Snapmatic Properties @@ -1720,7 +1699,7 @@ Press 1 for Default View Meme - + Snapmatic Title Заголовок Snapmatic @@ -1809,26 +1788,26 @@ Press 1 for Default View - + Patching of Snapmatic Properties failed because of I/O Error Ðе удалоÑÑŒ измененить ÑвойÑтва Snapmatic из-за проблемы ввода/вывода - + New Snapmatic title: Ðовый заголовок Snapmatic: - + Snapmatic Crew Банда на Snapmatic - + New Snapmatic crew: ÐÐ¾Ð²Ð°Ñ Ð±Ð°Ð½Ð´Ð° на Snapmatic: @@ -1966,52 +1945,52 @@ Press 1 for Default View Ðе удалоÑÑŒ показать %1 в ÑпиÑке картинок Snapmatic в игре - + Edi&t &Правка - + Show &In-game Показывать в &игре - + Hide &In-game Ск&рыть в игре - + &Export &ЭкÑпорт - + &View По&казать - + &Remove У&далить - + &Select &Выделить - + &Deselect Сн&Ñть выделение - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -2196,13 +2175,13 @@ Press 1 for Default View - + Select Profile Выбор Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - + Select GTA V Folder... @@ -2217,7 +2196,7 @@ Press 1 for Default View - + &About %1 &О программе %1 @@ -2245,15 +2224,15 @@ Press 1 for Default View Пере&загрузить - - + + Show In-game Показывать в игре - - + + Hide In-game Скрыть в игре diff --git a/res/gta5sync_uk.qm b/res/gta5sync_uk.qm index 8d3756b0eadafe76a88678bc1b50b03f52c62849..e2005105ae00f2b4de8100eab15ea39fd4e0b554 100644 GIT binary patch delta 3134 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 IA9ywHe}#jPegFUf delta 3418 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 JeBia&{{xdZ)Ik6M diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts index 1448cd6..8352309 100644 --- a/res/gta5sync_uk.ts +++ b/res/gta5sync_uk.ts @@ -32,77 +32,71 @@ Running with Qt %6<br/> %7 - + &Close &Закрити - + 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 VenJam1n,g5e://about?VmVuSmFtMW4=:U3RlYW06IDxhIGhyZWY9Imh0dHBzOi8vc3RlYW1jb21tdW5pdHkuY29tL3Byb2ZpbGVzLzc2NTYxMTk3OTg0NjM1ODE2LyI+UFJPRmVzc29SICdBcHBsZVNPZnQnPC9hPjxici8+U29jaWFsIENsdWI6IDxhIGhyZWY9Imh0dHBzOi8vc29jaWFsY2x1Yi5yb2Nrc3RhcmdhbWVzLmNvbS9tZW1iZXIvLS1WZW5KYW0xbi0tLzU2Mzc1NjkiPlZlbkphbTFuPC9hPjxici8+VHdpdHRlcjogPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9fVmVuSmFtMW4iPlZlbkphbTFuPC9hPg== - - A project for viewing and sync Grand Theft Auto V Snapmatic<br/> -Pictures and Savegames - Проект Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду Ñ– Ñинхронізації Grand Theft Auto V Snapmatic - - - + 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> - + Release Реліз - + Release Candidate Реліз-Кандидат - + Daily Build Щоденна Збірка - + Developer Розробник - + Beta Бета - + Alpha Ðльфа - + Custom Custom @@ -265,8 +259,8 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> Фоновий колір: <span style="color: %1">%1</span> @@ -278,8 +272,8 @@ Pictures and Savegames - - + + Background Image: Фонове зображеннÑ: @@ -314,43 +308,43 @@ Pictures and Savegames &СкаÑувати - - + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! КориÑтувацький Ðватар - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! КориÑтувацьке Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ - + 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 - + File Background Image: File Файл @@ -412,7 +406,7 @@ When you want to use it as Avatar the image will be detached! &Готово - + X: %1 Y: %2 X and Y position @@ -565,7 +559,7 @@ Y: %2 - + Participate in %1 User Statistics ÐžÐ¿Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ %1 про уÑÑ‚Ð°Ñ‚ÐºÑƒÐ²Ð°Ð½Ð½Ñ ÐŸÐš @@ -596,8 +590,8 @@ Y: %2 + - Participation ID: %1 ID учаÑника : %1 @@ -608,7 +602,7 @@ Y: %2 - + User Feedback Відгук кориÑтувача @@ -635,8 +629,8 @@ Y: %2 - - + + Current: %1 Зараз: %1 @@ -671,97 +665,87 @@ Y: %2 Завжди викориÑтовуйте шрифт повідомлень (Windows 2003 Ñ– раніше) - - Sync - Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ - - - - Sync is not implemented at current time - Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð½Ðµ здійÑнюєтьÑÑ Ð² даний Ñ‡Ð°Ñ - - - + Apply changes ЗаÑтоÑувати зміни - + &OK OK, Cancel, Apply &OK - + Discard changes СкаÑувати зміни - + &Cancel OK, Cancel, Apply &СкаÑувати - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (або наÑтупна найближча мова) - + System System in context of System default Як у ÑиÑтеми - + %1 (Closest to Interface) Next closest language compared to the Interface %1 (Співпадає з інтерфейÑом) - + Auto Automatic language choice. Ðвтоматично - + %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 Ðе зареєÑтрований - + A feedback message have to between 3-1024 characters long ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð³ÑƒÐºÑƒ має Ñтановити від 3-1024 Ñимволів @@ -806,37 +790,37 @@ Y: %2 - + Export as &Picture... ЕкÑпортувати Ñк &зображеннÑ... - + Export as &Snapmatic... ЕкÑпортувати Ñк &Snapmatic... - + &Edit Properties... &Змінити влаÑтивоÑті... - + &Overwrite Image... &ПерезапиÑати зображеннÑ... - + Open &Map Viewer... Відкрити &карту... - + Open &JSON Editor... Відкрити редактор &JSON... @@ -1090,9 +1074,9 @@ Press 1 for Default View - - - + + + Import... ІмпортуваннÑ... @@ -1100,113 +1084,113 @@ 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, оÑкільки файл неможливо розібрати правильно - + Enabled pictures: %1 of %2 Увімкнено фотографії:%1 з%2 - + Loading... ЗавантаженнÑ... - + Snapmatic Loader Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>ÐаÑтупні Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð±ÑƒÐ»Ð¸ відновлені</h4>%1 - + Importable files (%1) ІмпортуютьÑÑ Ñ„Ð°Ð¹Ð»Ð¸ (%1) - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + Savegames files (SGTA*) Файли Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸ (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ (PGTA*) - - + + No valid file is selected Вибрані недійÑні файли - - + + Import file %1 of %2 files ІмпортуєтьÑÑ Ñ„Ð°Ð¹Ð» %1 з %2 файлів - + Import failed with... %1 @@ -1215,86 +1199,86 @@ Press 1 for Default View %1 - + Failed to read Snapmatic picture Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Snapmatic картинку - + Failed to read Savegame file Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸ - + Can't import %1 because file format can't be detected Ðеможливо імпортувати%1, оÑкільки формат файлу не може бути виÑвлений - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Snapmatic, файл не починаєтьÑÑ Ð· PGTA або закінчуєтьÑÑ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ знімок Snapmatic, картинка вже в грі - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Snapmatic, не можна Ñкопіювати файл у профіль - + Failed to import the Savegame, can't copy the file into profile Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Сейв, не можна Ñкопіювати файл у профіль - + Failed to import the Savegame, no Savegame slot is left Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Сейв, немає вільного Ñлота - - - - - + + + + + Export selected... ЕкÑпорт обраних... - - + + JPG pictures and GTA Snapmatic JPG картинки Ñ– GTA Snapmatic - - + + JPG pictures only Тільки JPG картинки - - + + GTA Snapmatic only Тільки GTA Snapmatic - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1 ЕкÑпортувати Snapmatic фотографії %2 <br><br> Фотографії JPG дозволÑють відкривати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð° допомогою заÑобу переглÑду зображень<br>GTA Snapmatic дає змогу імпортувати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð² гру<br><br>ЕкÑпортувати Ñк: - + Initialising export... Ð†Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ ÐµÐºÑпорту... - + Export failed with... %1 @@ -1303,45 +1287,45 @@ Press 1 for Default View %1 - - + + No Snapmatic pictures or Savegames files are selected Ðе вибрано жодного Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ файлу Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ - - - + + + Remove selected Видалити вибрані - + You really want remove the selected Snapmatic picutres and Savegame files? Ви дійÑно хочете видалити вибрані Snapmatic фотографії та файли Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸? - + Failed to remove all selected Snapmatic pictures and/or Savegame files Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ вÑÑ– обрані Snapmatic фотографії та/або Сейви - - - - - - + + + + + + No Snapmatic pictures are selected Ðе вибрано жодного Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ - - - - - - + + + + + + %1 failed with... %2 @@ -1351,81 +1335,81 @@ Press 1 for Default View %2 - - + + Qualify as Avatar Позначити Ñк Ðватар - - - - + + + + Patch selected... Вибір патчу... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Патч файлу %1 з %2 файлів - + Qualify %1 failed with... ЯкіÑть - - + + Change Players... Зміна гравців... - + Change Players %1 failed with... Змінити гравців - - - + + + Change Crew... Зміна банди... - + Failed to enter a valid Snapmatic Crew ID Ðе вдалоÑÑ Ð²Ð²ÐµÑти дійÑний ID Банди Snapmatic - + Change Crew %1 failed with... Змінити банду - - - + + + Change Title... Зміна назви... - + Failed to enter a valid Snapmatic title Ðе вдалоÑÑ Ð²Ð²ÐµÑти дійÑний заголовок Snapmatic - + Change Title %1 failed with... Змінити назву @@ -1527,37 +1511,37 @@ Press 1 for Default View Видалити - + &View &ПереглÑд - + &Export &ЕкÑпорт - + &Remove &Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ - + &Select &Ð’Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ - + &Deselect &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ - + Select &All Вибрати &уÑÑ– - + &Deselect All &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ ÑƒÑÑ–Ñ… @@ -1752,25 +1736,25 @@ Press 1 for Default View Змінити влаÑтивоÑті Snapmatic не вдалоÑÑ Ñ‡ÐµÑ€ÐµÐ· JSON Помилку - + Snapmatic Crew Snapmatic банда - + New Snapmatic crew: Ðова Snapmatic банда: - + Snapmatic Title Snapmatic назва - + New Snapmatic title: Ðовий Snapmatic заголовок: @@ -1945,52 +1929,52 @@ Press 1 for Default View Видалити - + Edi&t Редагува&ти - + Show &In-game Показати &у грі - + Hide &In-game Сховати &у грі - + &Export &ЕкÑпортувати - + &View &ПереглÑнути - + &Remove &Видалити - + &Select &Ð’Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ - + &Deselect &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ - + Select &All Вибрати &уÑÑ– - + &Deselect All &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ ÑƒÑÑ–Ñ… @@ -2172,7 +2156,7 @@ Press 1 for Default View - + Select GTA V Folder... @@ -2209,15 +2193,15 @@ Press 1 for Default View Змінити &гравців... - - + + Show In-game Показати у грі - - + + Hide In-game Сховати у грі diff --git a/res/gta5sync_zh_TW.qm b/res/gta5sync_zh_TW.qm index 79d4647c9bc4ee853d10144502271f394982d486..278dc97ff4191d4bb8717f69d1e90c40c5be9f0c 100644 GIT binary patch delta 3134 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 H+_?CETxw{d delta 3301 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 diff --git a/res/gta5sync_zh_TW.ts b/res/gta5sync_zh_TW.ts index 638135b..f4a6bcc 100644 --- a/res/gta5sync_zh_TW.ts +++ b/res/gta5sync_zh_TW.ts @@ -32,76 +32,70 @@ Running with Qt %6<br/> %7 - + &Close 關閉(&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 and sync Grand Theft Auto V Snapmatic<br/> -Pictures and Savegames - 一個 Grand Theft Auto V Snapmatic 圖片ã€éŠæˆ²å­˜æª”æª¢è¦–å’ŒåŒæ­¥å°ˆæ¡ˆ - - - + 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> æŽˆæ¬Šæ¢æ¬¾ç™¼å¸ƒ - + Release æ­£å¼ç‰ˆæœ¬ - + Release Candidate 最終發布版本 - + Daily Build æ¯æ—¥å»ºç½®ç‰ˆæœ¬ - + Developer 開發版本 - + Beta Beta 版本 - + Alpha Alpha 版本 - + Custom 自訂 @@ -264,8 +258,8 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> 背景é¡è‰²: <span style="color: %1">%1</span> @@ -277,8 +271,8 @@ Pictures and Savegames - - + + Background Image: 背景圖片: @@ -313,42 +307,42 @@ Pictures and Savegames å–æ¶ˆ(&C) - - + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! 自訂大頭貼 - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! 自訂圖片 - + 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 - + File Background Image: File 文件 @@ -410,7 +404,7 @@ When you want to use it as Avatar the image will be detached! 完æˆ(&D) - + X: %1 Y: %2 X and Y position @@ -563,7 +557,7 @@ Y: %2 - + Participate in %1 User Statistics åƒèˆ‡ %1 使用者統計 @@ -594,8 +588,8 @@ Y: %2 - - + + Participation ID: %1 åƒèˆ‡ ID: %1 @@ -606,7 +600,7 @@ Y: %2 - + User Feedback 使用者å饋 @@ -633,8 +627,8 @@ Y: %2 - - + + Current: %1 ç›®å‰: %1 @@ -669,107 +663,93 @@ Y: %2 總是使用訊æ¯å­—é«” (Windows 2003 和更早版本) - - Sync - åŒæ­¥ - - - - Sync is not implemented at current time - ç›®å‰ä¸¦æœªåŒæ­¥ - - - + Apply changes 套用變更 - + &OK OK, Cancel, Apply 確定(&O) - + Discard changes æ¨æ£„變更 - + &Cancel OK, Cancel, Apply å–æ¶ˆ(&C) - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (接近的語言) - + System System in context of System default 系統 - + %1 (Closest to Interface) Next closest language compared to the Interface %1 (èˆ‡ä»‹é¢æŽ¥è¿‘çš„èªžè¨€) - + Auto Automatic language choice. 自動 - + %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 未註冊åƒèˆ‡ - + A feedback message have to between 3-1024 characters long å饋訊æ¯å¿…須在 3 到 1024 個字之間 PictureDialog - - %1 - Snapmatic Picture Viewer - %1 - Snapmatic 圖片檢視器 - Snapmatic Picture Viewer - %1 @@ -808,37 +788,37 @@ Y: %2 - + Export as &Picture... 匯出æˆåœ–片(&P)... - + Export as &Snapmatic... åŒ¯å‡ºæˆ Snapmatic(&S)... - + &Edit Properties... 編輯屬性(&E) ... - + &Overwrite Image... 修改圖片(&O)... - + Open &Map Viewer... 開啟地圖檢視器(&M)... - + Open &JSON Editor... 開啟 JSON 編輯器(&J)... @@ -852,37 +832,37 @@ 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 大頭貼é è¦½æ¨¡å¼ @@ -1092,9 +1072,9 @@ Press 1 for Default View - - - + + + Import... 匯入... @@ -1102,244 +1082,244 @@ 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ï¼Œå› ç‚ºæª”æ¡ˆç„¡æ³•æ­£ç¢ºè§£æž - + Enabled pictures: %1 of %2 開啟圖片 %1 å…± %2 - + Loading... 載入中... - + Snapmatic Loader Snapmatic 載入器 - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>下列的 Snapmatic 圖片已被更新</h4>%1 - + Importable files (%1) å¯åŒ¯å…¥çš„æª”案 (%1) - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + Savegames files (SGTA*) éŠæˆ²å­˜æª” (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic 圖片 (PGTA*) - - + + No valid file is selected æ²’æœ‰é¸æ“‡æœ‰æ•ˆçš„æª”案 - - + + Import file %1 of %2 files 匯入檔案 %1 å…± %2 個 - + Import failed with... %1 %1 匯入失敗 - + Failed to read Snapmatic picture ç„¡æ³•è®€å– Snapmatic 圖片 - + Failed to read Savegame file 無法讀å–éŠæˆ²å­˜æª” - + Can't import %1 because file format can't be detected 無法匯入 %1ï¼Œå› ç‚ºç„¡æ³•æª¢æ¸¬è©²æª”æ¡ˆæ ¼å¼ - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e 匯入 Snapmatic åœ–ç‰‡å¤±æ•—ï¼Œæª”æ¡ˆä¸æ˜¯ PGTA 開頭或附檔å䏿˜¯ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game 匯入 Snapmatic åœ–ç‰‡å¤±æ•—ï¼Œåœ–ç‰‡å·²ç¶“åœ¨éŠæˆ²ä¸­ - + Failed to import the Snapmatic picture, can't copy the file into profile 匯入 Snapmatic 圖片失敗,無法將該檔案複製到設定檔中 - + Failed to import the Savegame, can't copy the file into profile åŒ¯å…¥éŠæˆ²å­˜æª”失敗,無法將該檔案複製到設定檔中 - + Failed to import the Savegame, no Savegame slot is left åŒ¯å…¥éŠæˆ²å­˜æª”å¤±æ•—ï¼Œæ²’æœ‰éŠæˆ²å­˜æª”æ¬„ä½ - - - - - + + + + + Export selected... 匯出所é¸... - - + + JPG pictures and GTA Snapmatic JPG 圖片和 GTA Snapmatic - - + + JPG pictures only åªæœ‰ JPG 圖片 - - + + GTA Snapmatic only åªæœ‰ GTA Snapmatic - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1 匯出 Snapmatic 圖片 %2<br><br>JPG 圖片å¯ä½¿ç”¨åœ–片檢視器開啟<br>GTA Snapmatic å¯ä»¥åŒ¯å…¥åˆ°éŠæˆ²ä¸­<br><br>匯出æˆ: - + Initialising export... åˆå§‹åŒ–... - + Export failed with... %1 %1 匯出失敗 - - + + No Snapmatic pictures or Savegames files are selected æœªé¸æ“‡ Snapmatic åœ–ç‰‡æˆ–éŠæˆ²å­˜æª” - - - + + + Remove selected ç§»é™¤æ‰€é¸ - + You really want remove the selected Snapmatic picutres and Savegame files? 你想移除所é¸çš„ Snapmatic 圖片/存檔嗎? - + Failed to remove all selected Snapmatic pictures and/or Savegame files ç„¡æ³•ç§»é™¤æ‰€é¸æ“‡çš„ Snapmatic 圖片/éŠæˆ²å­˜æª” - - - - - - + + + + + + No Snapmatic pictures are selected æœªé¸æ“‡ Snapmatic 圖片 - - - - - - + + + + + + %1 failed with... %2 @@ -1349,81 +1329,81 @@ Press 1 for Default View %2 - - + + Qualify as Avatar åˆæ ¼å¤§é ­è²¼ - - - - + + + + Patch selected... 修改所é¸... - - - - - - - - + + + + + + + + Patch file %1 of %2 files 修改檔案 %1 å…± %2 個檔案 - + Qualify %1 failed with... åˆæ ¼ - - + + Change Players... 更改玩家... - + Change Players %1 failed with... 更改玩家 - - - + + + Change Crew... 更改幫會... - + Failed to enter a valid Snapmatic Crew ID 輸入了無效的幫會 ID - + Change Crew %1 failed with... 更改幫會 - - - + + + Change Title... 更改標題... - + Failed to enter a valid Snapmatic title 輸入了無效的標題 - + Change Title %1 failed with... 更改標題 @@ -1525,37 +1505,37 @@ Press 1 for Default View 刪除 - + &View 檢視(&V) - + &Export 匯出(&E) - + &Remove 移除(&R) - + &Select 鏿“‡(&S) - + &Deselect å–æ¶ˆé¸æ“‡(&D) - + Select &All 鏿“‡å…¨éƒ¨(&A) - + &Deselect All å–æ¶ˆé¸æ“‡å…¨éƒ¨(&D) @@ -1655,7 +1635,7 @@ Press 1 for Default View - + Snapmatic Properties @@ -1738,7 +1718,7 @@ Press 1 for Default View - + Patching of Snapmatic Properties failed because of I/O Error @@ -1750,25 +1730,25 @@ Press 1 for Default View JSON 錯誤,未能更新 Snapmatic 屬性 - + Snapmatic Crew 幫會 - + New Snapmatic crew: 輸入新的幫會: - + Snapmatic Title 標題 - + New Snapmatic title: 輸入新的標題: @@ -1943,52 +1923,52 @@ Press 1 for Default View 刪除 - + Edi&t 編輯(&E) - + Show &In-game åœ¨éŠæˆ²ä¸­é¡¯ç¤º(&I) - + Hide &In-game åœ¨éŠæˆ²ä¸­éš±è—(&I) - + &Export 匯出(&E) - + &View 檢視(&V) - + &Remove 移除(&R) - + &Select 鏿“‡(&S) - + &Deselect å–æ¶ˆé¸æ“‡(&D) - + Select &All 鏿“‡å…¨éƒ¨(&A) - + &Deselect All å–æ¶ˆé¸æ“‡å…¨éƒ¨(&D) @@ -2108,7 +2088,7 @@ Press 1 for Default View - + &About %1 關於 %1(&A) @@ -2170,7 +2150,7 @@ Press 1 for Default View - + Select GTA V Folder... @@ -2207,15 +2187,15 @@ Press 1 for Default View 更改玩家(&P)... - - + + Show In-game åœ¨éŠæˆ²ä¸­é¡¯ç¤º - - + + Hide In-game åœ¨éŠæˆ²ä¸­éš±è— @@ -2223,7 +2203,7 @@ Press 1 for Default View - + Select Profile 鏿“‡è¨­å®šæª” From 99ffbf4178a1fb0c4d68410815f6ce74f8e77308 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 31 May 2018 04:41:34 +0200 Subject: [PATCH 097/359] update en_US translation --- res/gta5sync_en_US.qm | Bin 23319 -> 25424 bytes res/gta5sync_en_US.ts | 62 +++++++++++++++++++++--------------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm index 271a25eabf70463a0b38eb7047160a5e98955f85..f3a3c28f769d8365cfc869143fb44938ad19fafb 100644 GIT binary patch delta 4050 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 diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index d26cff4..d2d920b 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -538,51 +538,51 @@ Y: %2 Feedback - + Participate in %1 User Statistics - + Hardware, Application and OS Specification - + Application Configuration - + Other - + Participation ID: %1 - + &Copy - + User Feedback - + Limit: 1 message/day - + @@ -617,22 +617,22 @@ Y: %2 Participation - + Categories - + System Language Configuration - + &Send - + @@ -725,17 +725,17 @@ Y: %2 View %1 User Statistics Online - + Not registered - + A feedback message have to between 3-1024 characters long - + @@ -743,7 +743,7 @@ Y: %2 Snapmatic Picture Viewer - %1 - + @@ -1286,7 +1286,7 @@ Press 1 for Default View Qualify as Avatar - + @@ -1296,7 +1296,7 @@ Press 1 for Default View No Snapmatic pictures are selected - + @@ -1334,7 +1334,7 @@ Press 1 for Default View Failed to remove all selected Snapmatic pictures and/or Savegame files - + @@ -1346,7 +1346,7 @@ Press 1 for Default View Change Players... - + @@ -1359,7 +1359,7 @@ Press 1 for Default View Change Crew... - + @@ -1377,7 +1377,7 @@ Press 1 for Default View Change Title... - + @@ -1965,12 +1965,12 @@ Press 1 for Default View Failed to hide %1 In-game from your Snapmatic pictures - + Failed to show %1 In-game from your Snapmatic pictures - + @@ -1978,22 +1978,22 @@ Press 1 for Default View %1 User Statistics - + You want help %1 to improve in the future by collection of data? - + Yes, I would like to take part. - + &OK - + @@ -2196,14 +2196,14 @@ Press 1 for Default View Show In-game - + Hide In-game - + From 7b98e75f8de8277398474d5f6a29fd54d795b4b4 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 31 May 2018 04:45:19 +0200 Subject: [PATCH 098/359] clean up resources --- PictureDialog.ui | 7 +- res/960x536.png | Bin 19532 -> 0 bytes res/app.qrc | 1 - res/gta5view.xpm | 135 ---------------------------------- res/src/AvatarAreaProject.xcf | Bin 2084563 -> 43526 bytes 5 files changed, 1 insertion(+), 142 deletions(-) delete mode 100644 res/960x536.png delete mode 100644 res/gta5view.xpm diff --git a/PictureDialog.ui b/PictureDialog.ui index 982c0eb..888aa92 100644 --- a/PictureDialog.ui +++ b/PictureDialog.ui @@ -43,9 +43,6 @@ - - :/img/960x536.png - Qt::AlignCenter @@ -230,9 +227,7 @@ - - - + cmdClose diff --git a/res/960x536.png b/res/960x536.png deleted file mode 100644 index 6196065a0e29eba946336f809392fd55a7e93c17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19532 zcmeEtRa;z56Kw(^BoH7F+}$NOg9dkZo#5{7F9dfRbYO6IcXxMpcXyk^cX9s1xj6fI z_C@za)#|EU)m^oEhbqX4BO%}-eEReWNm4>Y>C-3J&QG6Uu)o26%z)6Gfgcl}6l7FH zKZc(_e};j9frW+r^5qL09NgEhU*X~5zkU1m{rh(W1O!Ax#2-I?AR!?kBO{}rp#1## z6BQK|4GrzruV3is=olCnn3$MYSXkKD*f=;ixVX4@czF2u_yhz5goK1dL`1~I#3Upn zq@<)|WMt&zj{1Frs6cQ2=78Vu} z5fK#?6%!K^7Z;b1kdTy=l#-H?mX?;0k&%^^m6MZ`mzP&iP*7AR#sL~QBhS@ zRZ~+_S6A22(9qP>)Y8(@*4Eb1(b3h_)zi}h0)c=3{?*slH!v_TG&D3aGBP$cHZd_V zH8nLeGcz|gx3I9Vw6wIcva+_ewz09XwY9agv$MCicW`iUbaZrba&mTdc5!iWb#--f zb8~lh_wexW^z`)d^78if_VMxY_4WPlzyJLF{QUj>|NZ+H5D*X;7#I{36dW8J5)u*` z8X6WB79JiR5fKp?85tE76&)QN6B82~8ygoF7at#=kdOcZff5rFlai8>lao_YQc_b> z)6&wwU~qbRdPYVD1Omy-%*@Kl%FfQt$;rvh&CScp%g@g*C@3f_EG#N2DlRTADJdx} zEiEf6D=#mvsHmu{tgNc4s;;iCsi~>0t*xu8tFNzbXlQ6`Y;0<3YHn_BX=!O~ZEb67 zYj1Dw=;-L|?Ck35>hA9D>FMe1?d|L9>+kO$7#J8F92^=N8Xg`V85tQJ9UU7R8y_E^ zn3$NHoSd4Pnx3AXnVFfLot>MTo1dRwSXfwGTwGdOT3%jWSy@?KU0qvSTVG$_*x1wJUlu&IzB!=IXO8!Jv}=+J3l|axVX5yyu7-) zy1u@?xw*N$y}i4;yT8AGczAexe0+L(dVYR>d3kw#eSLd-dw+k2LZRE0y59eb0Rw4q zkxwCT1QH*E?{*TJj-NguqW$mvJiX@g`Y{RbBq=KjzlHD(g9+DC`}!krh(Ae+2&%X( zpQSs4Rpwp>OzZvfT6pqefByUohk*{O5UcP* z?ZV($4eatAaJFQk9W*&wnp|AIv_h8_PS)F8$HDFyzb4$f4L*Np{r}JZn-;GgE(Ygx{K?N02bpYB`z6_Xb|vLoX-7iz#;3)`}18m z%Cl=B#(9aJd*(~ajoLXEK^pkTC11D0>F=8Bua|m882cd{1a|lLG4qYGCFfTugH+vW zssTM-XR{p?)(xK`?`S%y!~XwCKK7l7?j)n{%HzR#K0*$r2BWIQ9zN z1Ii2N7!*Dd#91o@d6me(ggrQyN{Ichb`3GOA@tFgx*$+bGrb>RI0WzWWHuQ;cC5yj zBEUv1zr`{~bj)#^Bf!Yq-{d%Oi2#_TK|P~<19jIdoANZ-bUnUL)Y&SPiDb2+3MOVw z>cB~<6+t|d&=c&saM?wjB|Ucqr|bSv#RD=oq^!=l$g+W#D}=ye;;5XlZ~ zLdKqJPr@Mx9l>n7pU;13VNcd(Pxw|(fEd19@pPnd+y;u{sx!q3xE4~d*~YS{S~Pgr zTm}Q7?sCJ=vZvbp0%%uINjb!}>i(f*%MB_fC0wn{y-NWlUdZzU9^C6X9lMxKrF(O) zx6ylL6zJb>!N_oWf5n)F*=RJ@s=2#b#Vg+)O|kkgKf8N$TGi}Rd zAj4nU!9^ZcKZtT3;t}N}^~a6nX-`0d>n+$kb0>t0NUqx>vIU(WN)gX_!8Ea1bsC;E z^+lYO#jEv1W$ClX2m)Wxv4ee|y-$W6>j%L$MbDzRhQS*ZMbCn31iv`wV=3h5%eO> z$et?#>TbhKgNdeZcW1;G=L)=<^E8GQhtwS{JvD#>0lu_L`FjhOe|yU4%MJh1U9$0y z@*?P5N#l*^tZE%lsRPL+5yLnBIamxefGLpXEj+&au!0!wm&kRVEwNVSG;cDL)CW`q z#_H!Lxk)LjqyNEb`e9urjb?Ywb=X&i3rA>7v#s@^aj!al_|`X)fj)odiDhJQ&x8Lc zF*EDvG$f-)Mt;D_*$8>|eTYK6nye2-!%zJ>YF}Y9Oj_sEO5oqPUnyTjHIvW<1EB7Q zJ%vEY4dShgW840}jpiv5mm_0cOkDy3R!we2arKknrZ|hQV+=n@ua-plGYXvgJ~Ra%vFyu-^<##awuc9UU!P0{mSe)o6R zhCiyCMj1>47>&mkiC67c>qSV6+&pV^4!9nvNGylptt0YyMO_3ex`wwcZ02Xl!mBYh zG>x(ze82BF6L{zWWu5;{tu*0)Y+1L8t{0xda%7B6K#o#v4=%=imQ&+jxrkz1!e*z* zx}(Hx;j5%~KP2E7hbnd}VX&UU(>-Rzt*IM@kA0X1%@0MzvB;=o2UP!gRSPfF2wZDB zlp4-oy^GyR?qWX7_!V|KKW2edH(ex84LAB+_Vf;X_%HX^PHW%ng8xE~gHjk-T5lP{dI178_nzQ4&xV7MLS-JR@|Q=f)brbergI zpCIv$2>9G%`9smHB4ekDJbPa2e-f2PED=&oy)9C`lMKuG=JL?lmr8SuXE zW$oDWR~q4K!+*+~4^NBuDx2QOeekR#bv#Iqc2mzeit6#{gv_!{9-9+SWRSwl%^|&K zOdJ4xK_a|v+MY1{jT6ve4}t;$a|+DV8Ok^>75GCFZqG`>^T=uKM(8hRBVai{vZ(U} zM8J#rtOsSCfb%ZCDcon>h4DsAnRPzW%*=bHtln_`nrbibq-u#OSKIf;1eGkc<~rcYV0bLq<1#_o=t7ZI4X=8aV2}?X%9iFq7&*@bb0H(E~TB z-SGZD@!{_g-{36x-`?d5Ry7S*H~leYy?t!?f#)tDP5TUaISuI1;yIo%Aa z@U`0e-8oj)dr-2{721iI#6~L#T_yX}LZ8%Fy0Il@u==;HcJOwKuYVq>F zU7V@U2BtgR*~lx=-3WX&e(y0ndbI1c6F$YEm1&OeAzO?@E?!LicsK`Cu#u8i*&P6| zu)~S8CC-JLuP$IzB zGoJ3QUk?!6S15d9htZ%^IRf*rN^PA9Gux622=P4O`bSoEulKEoY&_axl;Ypkk8Fw+ zt=eNaBe2rr`mHwV9(1Q0kzZXsF!_eYho0uJAm>I9#VGo$fpm5lDZiYizrm{U;vKno zfhF@|=X~85vRkg@zg_gJS^DU1ePDPLlvggSO#pTDd%5sx>!4F9?FuI9hKRnp9GiJZ zf;ku5)p#gz12s-;x4{7BL)L7N7+~-xILWF!Rxhy&)KJ5hu$RlefvtdGwd2p{P1io; z%YZ#pfaua*Go9jnL^iw;2UT`$j$l3ESm*t;H#;40L7Fr%koy!S#{iLv6;po5zsb@{ zRUL4b*w0x>H@@m|d{Hs^dZRg8=K45iu@1bfe_>%?_Z@(x`Arj7fKcwTFYr`_w6bXE zszY;^64@uKaI~e!q-G-h@CAta-$!m5EP7Q}EpG;SxMKmj_kSrX3pg%I3_w?mX#zZ859WMP2kt;#s*ptE4Q*%U{Nq^{ z_qvX~4IH3jrb-V&<$!Q_Fj$N5!1t%?Fwmh^?G^U~?H*6xZO&-@CGjE4RYcLskpd|F z!`d9T-<8@+-1|i}JDuo?6IR?0@1_GzePeIubtyzVw+_05FBD8(dALv)>6i8-aXhc` zuGTqJbeAb&L{9BApGO-#JTQH&03s5c0YN3!J;!W(=MJvp=otSE0$y{SbnKm=u;n@1 zpBoj1?^-|SbZ#@h8}biUlszVQyj^HLpiARt0p`z$bK=D2b_ZZ&<&MBF^8&M9E5V`8ME8U<5;NhRQk$4*%fnKcuxSy&ja3u)t>ZU zu$|T!T>Oz0-RbKSI!Igf=vgUA70}%Z2fxtYpI=g7SRGuut4-vvE)Ewr>)oOQ#Xcel zMp}*ml*hV#_m}K}=8j7JW$9P<$=M_Bzx%x=HEGC`u*TrVqxE|%caEf$2SC_}0v@#j zGhm&7e-G~cU)~U^%hC5XrsZz!5>@N?VVWjulxOW}1>BmyO8y#JDE91uEHLaWr_GZcNIE>yJ_D)C!&>p zrYO+Aa;f^ICcv*g^0F*}7eH`{2F%=Mu)UG&?Y=iXf`yjO=Q?f^DgD!i;=U(eK40)E zOpk`aI^*-sUNE>vU9jbPts~1BZ7S524!Q#yvMMv;X}<))KsNm= zFKAzDDgM&zHZtn*M;zq9O3MA)UhBqi8iXsD|Glo>R7ouiIP#yas>x=RI-Qy8wO^MH zuQv%O5wmvD=vg_wdFwtge0uRCIbUcZo;~>7&S!^_tRwtzjq71W38<^x)DBz#Zf;l- z{)%b|+&UgcA=r1c&p2x}Jp;YYGC?k(-zz5K?OS5?8L+rl)eTHxg%j;)HR@`|xb<|I z3>CV>y>1KA`s&ZvG=gnme#vA2-xK@V^GR*<_%-0tL!YqX5{WWKSz3>#&!YA3-PVmr z5{B3$MpfT;GVg0}1L#4$LxJP4!`;xDiTssPx@N?W_;g!&=0Aji#_-<_x`zemU91?4 z(lW#aiSw^aTX*cO=}`@0Iuq!5oUx8C?ST)E@D@&;RHr-Ly!on6G?7fDebL1%dCB3X zk4*k0;cn5N)c%gJGe+S%IT|B}n8YZLXnPggISp5y4D<0vhNIbwFDqj_1_kLke?y5F zS*xaxx0E5RgIfDc4KEJ_uWlWZWJo{}M{Yr3p7 zrnoqKTRMN$-g5ShdI-RglTYy=RekV&4QYh8-bS~hX;wGgQ|h(lCyRG~BH$Oab7r!| z9z>97(#dlWtupyQ<+@K&L28EG_3jU^3e%u_vIfBsTeGed56_pfhnI`29ur^^fJhFc*x?FZ=Nc&d&Qij zDar?~VkcEbXc(m!6>0fWso7#qa&uDWIaKN)Bxqm`XM)(Jr}Tq8Z&C_?WIzIq4y-`# zAW{#ygOr#aHE$&-r=U`!=t1_9o?pW$<;VN=cWpQ6o`%lcu9)A+Q++n6jVP8nd72Lr z41KQG;41Y*_uuJ=w|bU1uS0pmm%hjAPI8e+Y}zQK`_2<^;^yHwZg zN&S~^D-t~`e{_&H;$rhtlg}y^WvirpNJ2bHuKW-G6-35QnbsXV!Y{hI5M!eaZ_rao zF{;0Su`79s^KW`>+uPjnfx|#sYrtMiSlS<1X^Bm`p9(Y4v-(+pBg;Ry zv?TAoT0TrU3{Bhr6G;P~?%_gOQXaM2@`npnR6{NuRYT-iEH8H)P(a&L*&~sUgueH~ zw%ggA1})(CEr+kpjObpYqP_fZ7j`94evK2(0hb~~$}bgSWc>nzMjN4ClINzNE^|FmUXrNEhxNW~{LQu}uWdit`e*ImCZ3~P&WYB|{>542k7%fXD@ z>JD&7h1(h{X8hiQ-7SBB^4>TqT&1I8n$PxNIm=@#MNVn5$2;WvOE>YxQ+t31^=1A} zNt+#_yU_+IeB%ZUA~_>Mt`^|bF~rW2Gt?lRPzwFUi zckw@m5>!JRnNXt=NEl5k+p(0teyUnA=MatC3Gt}gQ!-FR=lsEUM%=&4G0j*p#VYNd z)WQ_xsJ(e?TTX{#P~jzN?mtRWpc#T<87cXztI6$%GtDR9@>C_>V&zj%sBG(V4RLTY zfe`F}I)8b$%4~)lJ}D|Xy0Z{bv@32Z1wAaEbpOJ-+Oqrak19uf1_*sOo-G(`B8cAb z6khzA`_+C8iI&fhL!>sk92@3tbPHDGqqW7uL+zJr(MM&&`4rYFi9HgyV)d}mdn_0` z`TZf#Lw?R7&Y&Lq>bipgSg~pEIB1S3vRaY>uGXuUkbPu)M!jNA?Y{ikL)`8yU>nS^ zPV%*%^YO=XN(f>Kd!K9A02PMXebd%~HG8kCheBVtt#C5m@PD5f1{P%i-1G%j$dn1n z4rZ!gex-~b8Pa=V9n{eny7|$XUa+W#W%;{bKW}Y`8B@0ldN25NpB0CnIyU?cN5R;j zuCO9IGlGG|1}RZ~N+#yTys;D5DBHA;|A5!)j*2Q*fE*ecK}HfcQ|!?30Pr2FNEgyj zFCtZz@f9fMuy0&DsoNM$JB?RZ2YU2kV1Y%ycDTB`Ko*qP@Bf}m?%KToB|$B zmS0!V?AGf0ElPQF`#UunOZVRKoQ-yD(qmoiqU1ZPu^!_|o9P-^XqyWITtzMo^<>(K z!&m!zeyJ4k{6#O$*y`|F+#X2-LC?C&WevE>C_@2Dl2w*3aGVuXeo(ft;s;I1A7X< zIX~4fuO==)K7iW1p6k}6-0DlVyZexL#^4FM{ji?u5Z=e9^r5dP^7n70j2;$o6@!&e zM}M_UH{)32xcUr^gF@vo=N9c~7x=d7^1l`Xqp!89C!ERTBL<%n8@z~)n5w|LYN^Y@ zr~i?bKUur@^Cu!JHnCB;yP7k{f``vqde%7BQkn{P|I`MiX|y2h^!GqsX@ea5m0aoZ zS6-(2L5Si(nmq^!#Yzpv4T`{0{v(r!8$MghYcOdoMZ}7;Gzy5`mOUx@>oqlE)lwv{ zY00LsxE%v1B<4xRODA7N%BE;UtyD5;VI%$Ste9^gCwoWv^gJTqutxl$RF}(slT|i6 zMas7X^0!0z-4Lbmp5}U%ITUPi^9^`XvbX)25t*AxX-HcF@>ejzI0x`OLK0r!T#BGs zydI~Cw|@o@ELK9a5#mHn@r1Fq{foXSAU{54I;+cDCmvHyc$45g!?z-a3ucc3-Q_`Qu^)aW!O zbvj6`O%R*CCpVILcVr!5%y_YLN5`4!6vn)=ic704H_OgSz67)Nw9f~V52_9Q*&1C) zmW>xvP}gUmoPZF?CBx@u8!G&_FevY{ zZqHyDw>2~ZuQpbHUX78iUGC7V7p5Zphq3sVV|>fPh87yZzCq+aQOu zUaIlWx2sWx)8*wOSnk;b6f639n?p``Fd=(8SA!~YvF$tOMD^{J(W=p;tCDY^ElVhP zy)L#1RQ;Mg{!UusImH}ru+X_e5OQLpe-0#4n2Neok78cH3RLA4sHk|k@!2U&Nq?4&9pp0~ z9P}OeCR5RrJ6oXv+CIk;%sBX~FU%Q^J#jeGsUYrscD4*^3K^2CZ%te#s^}q1Wc$;k z7$tH0P>m2uMMCc;g;qOnhd&{Dcc^hpGCfezoEq?n$6cAMw(yh=kD{N0@7(q*(hS;U zN&tC`9bH7dEy`UDA0~J3fIY4>#ZQTn#JR-B4$== zf(hP{^3m9WqJ^UrgKKC*47His6F8Sdo}T9FAsD7D&w;}++={9u=Gk9EIkeuo7PAVx zi)vAy!a+?HV~GE#-rcBKM|u;hj#Zy(N)1|ahlV$7F#&Bu7-~vm`x+!II8SUKgs$m` zi=QLQNYQ*J3#SqcXAB;P#cZNWzG&{b4j}W*^GFD=rEHok5>jVqJ4# ze)V)Ah;z7fXKo_JTO?IJe7*{62)jQJ-)Dc1zt5Tt4cYj|46r*3%HNjQKX zzmY+j(ehLjsm^AfK*m21??Yic6FA7Wjst~HFek8=@?07p4tnyXX^P`+Qbgr!uhD^& zdLj5AwrDbp(*v`crbW8{^t3lBX#ydj+piLEk)SAQ`!@`6MVxrJl;>-k@90q2mlGzwMzCWNh?cv~r7 zMv8&u=%@bAiTbC#=6yFYXvJIgi;~Sn8P@z~7HS~EN9$4Fr*U=aD4@X`+Oh+dfImJ+ z2twV+tushsz}QXMANAt+=<07*j54e2u~Np)_+|+amkk?;!kxw-fhi2C2369pS}Q3| ztK0seD$Vq{Q;e=aL;e9Hi_`=&L_=%v*JTYKHnzK#n$?=guzW*jOSYeLjnOKw6z0re zEmXq_UH!+9h85w;Sth#XKe&mH2=;)w7cXV^)OkHCy@v)_6N6;=B^}UXI*cFk-t*o4v1rm~jWK zU6rZnX%coc#2wNv&lV0|@0M?6ts~;yCM?}<32Z-*a$jE&P=uf8H8=D;=NI+b(LssU zaG>Vn(K_q@{&zd8&z9|>-u0UvSzUY!Fo_6VZ({)OFliz9iF?bLeZAi|WSHFO>eQET zu0jbE&rdl`KZwe~__p>FXm0oRcsuQ*vMIVs#;COV!Kc>xWNYr;Vivc^DFhz}K2#H- zuk>WJ_1?S5TgnIGdd?GX>*gqP0aS78hcecvs>C_p-$$b9=B)+dz-v4ybgd$PG2`V6 zbRZX4dYsv-KQvpE#-3aM3c-+EL-+A2{_;@qCt6I@TbSP~x$J)a(0{g=oBgi5NvkWy zw49zw!8HZsOBWxZN)?sED385<8)c-ciQrrxJ&i}Vswn&oPwG;+Ov znR3EHuB}mBclC`fH#|L%lH#{Qs^U2rR7X&!XE@g)K!+p`E-sm)g!NIh?x-_ISjW?y z-|{6bEi3o&Bhe5%5pU49GSc&lumpEVT32xzzmde#ybjlip{_Qh>0*j>?N_`=MC&VK zm94wdA4?ff#wYVp+)w+lhnq&6>WEjVx$J4bm2`3jv|lh~q;ToW@qs4(m*#})5C7C{ z;H*6Pug2Pe9>$sP8@d4jA?E7fLjeOPTG zVu(U&b9-Rq@akWAUu$kKRI4DEJlD61%E)KqOU{44YCmt>66l>2Z2_&@?=Sip@rLY6 zN;6{k7bjd3amJNxG9-Cg(Hn6lHb zRofMDqjdas+n)Y+q^Whf`kv@YSL2*=t0G5jmnf*;>C?|qJf!~j!<~jiLh~CxB{5HY@u)=}AiMs`))>Fdc28(U8xId9^_zDZrVtQbWQ&LDN3HcgY?Qa|0zud@tt z*?e9pAvwU%k98Fx58?aH1nsI~zDkM_ynob|*O|2k4B4wfmvRl`y|}vDOZyWKMk_{E z;=bvt1$kb{)+tfHIP*PwcP=Gt`;+~di~1bI{P>&}`&VxgsNh*X0>A4eA^2KA#6=I? z(Xne+CbS6+Lc69xomW9Xklph6kBTsx&QZtvwTAsiRj=A^Cn>D<9 z{JiBXTso<8CpD)>%CktejW^SH()bu)@B@@}5t79*lOgfq`JjW8=Cw;wz@NTMX zjb5*DcOPdP{?N!3T7L!WT20Hj9yra?J#4l{rbuIad@0<0k`I7y*Y}qU$K)Xq!*>kz z7D{bG#{22Fay=JREIan#jXkh9ajhIWuYf9yzG!f^Gu0?z47L1lP<;2o4yd^|V3$EF zJ0@vOrK!=#MUL8?SL?M`#+LDG*G7#nt^5xGs>V7_r^L|>{= zJO!_EY!O%^dgXlJcjuqWq6X%Fh_)e2st>}O#mVxOnn0zZOyI0+h``F~keZp}?Df#G zuqJT{5K$omK`dZxb2~=9cG2@SQXaKe}OoLhI1;>oR#S)ZSeOAlQZ-G5}j!Es>@*vJVJ+8?vi{r zX|DAL%l{Z!q0>lPxB%QujA%-E*#|Y$G;b2+39hf3VgfK`)|{(@#*yi&l!x^YQJXpv zmAdS9BTJ{AluU5S&a${OL(r+}*^L~w#0>Z^%7Cebr3tfJjY+y`Z?&Wg#V=L|-D6pu ziA*#o=y^+L>`KKeSRYl4m$3)j(~xP&N?KkIn}d{9Da(xK(Qy%F(puY|80|INKGu6g z#8zg-{#Uqkr*JHJp2o#k-XO#_{~tq$e2E=Q%^#c8V@a6KSvPX?vDRp}#dE>z-!OI2 z6cX*V(Ka15VZ`*|+wB)4TmVHO<`|~MLo$-bO00+DM@z(d#|?Fk;3kF(t6ivY5&w8| z8@=MV27~Y_uA5hH8?x7>K27Lh6qa)hzkWOyZnmSs-cMK{usHx zSv^Gw^Ul0K`eLp9CAIo3^pyVB##f^;r*Rho>&xZ@@$K=rX0e}W(JGs<-sN?z#>VY#^u=v{aLy;cOJzC>9YVgcKGN?j&QTBLMMp&){S^N z&!-=VrRyWcf0W4*vazjM*2RS>-5WTX>hR!c=394>|2I27EROr2U%`z>TUN`1axg!b zJrX?pi<>v7N;Mrcwl*KUU%-Y#^>rL*lMjOqo*7ieSqieej(JSe=ERh zeS6QcHU*o~>rWG`TlD&UZ^KXS4h~P+FS?gVClEIJL3+Of{guSn7)>wNd{^c3nXi=TX!}mi0gd>Yf0_7O zN_TSY)!r(CYn)TngQ8dVB{zmp35-FYRPLeA`#mlN^sfkLwG@Us`{aYGuIrffkR>H3 zYB6VIK9U~PVpyVSd+pP3Fc^U(ia>Hx#pEzzPnIs?YFZ}^8t8Es9%4OIrLn>)zZ?t$ zo5zJG+Sm^!!ZowrqV9x6;61lz)mgND|2KhJ;asRhKb%GSrO$L)WW88{v?l~N>{?^X zdAYji6YU?;mj|BnLVbR?@^1NX+Zg07{^f8Kl@=L}crfic5+}j+8-R44Y^&mXbl3t? zmRvCP|#0`m%?v*;?##*MD+q1!(PMg5e!@_D+?rl+V+ZRA+ z*R!zXhRZKKuZ3jTE(#iJrVNUw0Oh<9>|LCr)H5>*I|Bi=g$`}S#M7BS`+?m>KBx=2 zZ=lNc-JKz=jm62jg%Px-1RR5>i~pqX%?8=>VXmzpv=jQYfIFJ)OfuRPQA`mLWJT%W zpMCDa_$y+KCGwNNcW1(j9D|Om|8$aAianF2*-e!HPM3QmEL@xNl$ugpnXIPL@3FRl zpW}YF=sFF~>oKw_^D>p1RI0)11IX1JL!^3@K@7@r1~K@x zWN|s~P`5H{lbVrSmlOtGb*AneFOyPYxi7=l;n^cujKSm6UuVD9%vXQGYpR|eON@Qr z5E&Bg6@3wK3X@V)|3}36v7(qunKWwBl0YjGjVcs}%H8RUO}U7I*=(*rM1szV%i-r# zK?2xcB*^R7B9C9zWGBUrNR(-QtFCuSPaE%K{b*$=5ZaGb-Vo%{8KSB)qpD9tE2u6$ z9QH-m&Byl*Dg1f0ED0CD&OB<3GJRQ(8?_S#+crYkkM%nqMj6xl4V90U#2aAXt~fJN zbdgM1j!r_9q7w!DsmtGca%h914|gbr-byLw>15hRil%LGBY?oSr=Vzk2I#2hW|Q?A zww%WMV(v+bMwcQb=N-HV%*o^tbjct3n~h@(xX5kc>;3*y|2D^DSkEh~-Q*|5XlN)1T7hyqTcQ*qsxixxp5JqpyAby#g8IU>GuReIrF*C3zFu*S{!WwoY*pDG?B{omNEqey zHd;qwy#M}%>na+bZso@+Ls0ufoNt86dG;Efyr0zlOOT%QK7hgW4Rtz@VvCw;V5wps zAuts^>vkx@@dr7Yr@2}9EIgPeVF+uc8E60JB|;lrTL`uuB`e_fw+n~~g=_cY`fStK zlh2b4T7-BFzl1{}-(1s5D*73(?E9YBk>;aBxAB}$O$*2DFVz~%r%x0 zZ^`u&+7JTnP(^&Sk1yXlXqNZUpWLxy7~HUIvn?RPT*}8f6sRszNKM!yrWsf-%ciP| z-+3%MTsg{6Z>l54Rf+5v(4&sbi3_4-_AojfmA>*2$V2nbPK_!U)EF@`F{Hm1pT zjJ%*-pN)vAd3D`0(#@W7#HG1ss}LxOuO8RuOu1SIuIRIfl0VyiT8>xBUv2?`82u#JLb;`*S0c z05JN2?!Q5L36M>*Y$7XuQ^G|N=;otxb!ws&5akoZA3R$A0@>_dd@-?*Ufzq6qtYpW zvRBVJ5&ja7thFQh#^MK~?EK9+Z(%NAG5eGxO#R0vz};tk^|L&c!rrset+Oxc&f?0b zDN;r{GNJrr2>dku!%ZxyS}4l&*%5vO&@|Z~#iF5s{XZ^=Et+B~qPl%VcaGA7yXqW- zgr6LaVS}#ByHCR6&cn%8$l_S7d7;x-x_8M zoukQpEC=OWXTa)zhZ8rU%H$T*H2sD!LUKq25>h%oXZzo~<#i68EG2zJ-E^te_t$r7rn#$~{j) z^pCp|uJGHvjmskkCcyaY7#Rbd9QjDTjFVB<4}AV0yAOD;Do$t;nLu-C~l!YX)t}9d%6O^4q>j% zQqo|wt(4t%`R`5BEZ2p;G_jVVjzRL>NOaWmW&37L`8UarqeIPt%{koCMYm@5KYabd zaf}^Rd?j02`bWvRHO5xLZQYm)QpDvVjf)#=%ky&2q#CO^L*n%{P^6Ym>wXlU4C)IR2J5$}vdu1mg}MY}<7@ zKwb(RpnSBpV^)DCl{_>i(Wn#edIM73ceyEzhXM3?)=7Q!1s86dd$v#Mt{59;+x+zB zn?yyMf&8y8_|w1>{m{Y;mN5C-n=fADve;v!)2xp05n$XtnC=+~{>mL2>fqoT7g_Dk z-F#z8%ic>Pg+lK0BXFsxUb03BbXMUg>aTH0g*ij3Mn?&+SCYNpH^e%Ddv>zIzM{K? zT~oYU;$w;NY0WOprVry1?@Mo>Argbi5oS9CL}Xd7Ve>qrA8BZrwi!HP6Buhn)arE+ zI15oN;s{hL(?_Jw=HZo4Vo7WQvuC9D0^T{C2#EJNI!u`=wz*_wYoz-BS6eW@cKQ(W z!Z?Z>tEt=-|B}&Rz9C@9`Xipac*n`Lyr=qK!A+Kk@GM0V0{1>krDak= zt)BZ9bhp6y+SkFg4P2+6nzZBZH8bG!I%#AXH&DMzp7$K;;Ec zE$ueXglAfxsnR$RI}4*bWX`3c`C{sAw5rhWv%~e@{77EEc-d4S-?1+Szoe--g#EXa zQ4dFT#gKa-zb;D=_&Dd5(j~DRA!kS+y%wCrd!%;NOluxGdn~U{@MDp&IGznO~eH2($A&moZGh=+Td!IQ`s+Xx!T zZ5_MkWn`g@s`7qA8YP8piZ$5{H-E)pp8BUpibJ&od2VDV+4giiWT(Sfr<-1tp6O_wkKm( zF^g`CNXN@LNG=$Xtj}R{S8w-P7@PE4t?<-}tvb|igQM(TcU&=saRnX7vP6O{C?EGq zPOBrnsLF(mRP42>JZVg5U30pqq~Iet_QmkX^o0@++)VYROY#=iJ{%A=;&X8Mb^~+s*_x(ctg}9zH9ig2=apWK;W94lX3nQI73Xg@Qr=tvQ9>KgK

$ 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 diff --git a/res/app.qrc b/res/app.qrc index e2562be..82eeaa5 100644 --- a/res/app.qrc +++ b/res/app.qrc @@ -9,7 +9,6 @@ 5sync-96.png 5sync-128.png 5sync-256.png - 960x536.png avatararea.png avatarareaimport.png back.png diff --git a/res/gta5view.xpm b/res/gta5view.xpm deleted file mode 100644 index f1ee97b..0000000 --- a/res/gta5view.xpm +++ /dev/null @@ -1,135 +0,0 @@ -/* XPM */ -static char * C:\Users\Rafael\Documents\Projects\gta5view\res\gta5view_xpm[] = { -"128 128 4 1", -" c None", -". c #000000", -"+ c #FE0000", -"@ c #FF0000", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ...................................................... ", -" ....................................................... ", -" ....................................................... ", -" ....................................................... ", -" ....................................................... ", -" ....................................................... ", -" ....................................................... ", -" ....................................................... ", -" ....................................................... ", -" ....................................................... ", -" ....................................................... ", -" ....................................................... ", -" ............. ", -" ............. ", -" ............. ", -" .............. ", -" ............. ", -" ............. ", -" ............. ", -" .............. ", -" .............. ", -" ............. ", -" ............. ", -" ............. ", -" .............. ", -" ............. ", -" ............. ", -" ............. ", -" ............. ", -" .............. ", -" ............. ", -" ............. ", -" ............. ", -" ............. ", -" .............. ", -" ............. ", -" ............. ", -" ............. ", -" .............. ", -" .............. ", -" ............. .. ", -" ................................ ", -" .................................... ", -" ........................................ ", -" .......................................... ", -" ............................................ ", -" ............................................. ", -" .............................................. ", -" ................................................. ", -" ................................................. ", -" .................................................. ", -" ..... ............................. ", -" ......................... ", -" ...................... ", -" ..................... ", -" ................... ", -" ................... ", -" .................. ", -" ................. ", -" ................ ", -" ............... ", -" ................ ", -" ................ ", -" ............... ", -" ............... ", -" ............... ", -" ............... ", -" .............. ", -" ++ .............. ", -" +@@@+ .............. ", -" @@@@@ .............. ", -" +@@@@@ .............. ", -" @@@@+ ............... ", -" @@@+ .............. ", -" .............. ", -" ", -" ", -" ", -" ", -" @@@@ @@@@ @@@ +++@@++ ++++ ++++ @@@@@ ", -" @@@@+ +@@@@ @@@@+ ++@@@@@@@@@+ @@@@+ +@@@@+ +@@@@+ ", -" @@@@+ @@@@+ @@@@+ +@@@@@@@@@@@@@ @@@@+ @@@@@@ @@@@@ ", -" +@@@+ +@@@@ +@@@@ +@@@@@@@@@@@@@@+ @@@@+ +@@@@@@ @@@@+ ", -" +@@@@ +@@@@+ +@@@@ @@@@@++ +@@@@@ @@@@+ @@@@@@@ +@@@@ ", -" +@@@@ +@@@+ +@@@+ +@@@@+ +@@@@+ @@@@+ +@@@+@@@ @@@@+ ", -" +@@@@ +@@@@+ @@@@+ +@@@@+ @@@@+ @@@@+ @@@++@@@ +@@@@ ", -" +@@@@ +@@@+ @@@@+ +@@@@+ +@@@+ @@@@+ @@@@ +@@@ @@@@+ ", -" @@@@ +@@@@+ +@@@@ +@@@@ @@@@+ @@@@@ @@@+ +@@@ +@@@@ ", -" @@@@+ @@@@+ +@@@@ +@@@@+ +@@@@+ +@@@+ +@@@ +@@@ +@@@+ ", -" @@@@+ +@@@@ +@@@+ +@@@@ @@@@+ @@@@+ @@@+ +@@@ +@@@@+ ", -" @@@@+ @@@@+ @@@@+ @@@@+ ++@@@@+ +@@@+ +@@@+ +@@@+ @@@@@ ", -" +@@@+ +@@@@ @@@@ +@@@@ ++@@@@@+ +@@@+ +@@@ +@@@+ @@@@+ ", -" +@@@+ @@@@+ +@@@@ +@@@@+++++++@@@@@@@+ +@@@+ +@@@+ +@@@+ +@@@@ ", -" +@@@@ +@@@@ +@@@+ @@@@@@@@@@@@@@@@@++ +@@@+ +@@@ +@@@+ @@@@+ ", -" +@@@@ @@@@+ @@@@+ @@@@@@@@@@@@@@@++ +@@@+ @@@+ @@@+ +@@@@ ", -" @@@@ +@@@+ @@@@+ +@@@@@@@@@@@+++ +@@@+ +@@@ @@@+ @@@@+ ", -" @@@@ +@@@@@ +@@@@ +@@@@++ +@@@+ @@@+ @@@+ +@@@@ ", -" @@@@ +@@@+ +@@@@ +@@@@ +@@@@ +@@@ @@@+ +@@@+ ", -" @@@@+ +@@@@+ +@@@+ +@@@@ +@@@@ @@@+ @@@+ @@@@ ", -" +@@@+ +@@@+ @@@@+ +@@@@ @@@@+ +@@@ @@@+ @@@@+ ", -" +@@@+ @@@@@ @@@@+ +@@@@ @@@+ @@@+ @@@+ @@@@ ", -" +@@@+ +@@@+ +@@@@ @@@@+ @@@+ +@@@+ @@@+ +@@@+ ", -" +@@@+ @@@@ +@@@@ @@@@+ @@@+ +@@+ @@@+ +@@@+ ", -" +@@@+ +@@@+ +@@@+ +@@@@+ @@@+ @@@+ @@@+ @@@+ ", -" @@@+ @@@@ @@@@+ +@@@@@ ++ @@@++@@+ +@@++@@@+ ", -" @@@++@@@+ @@@@+ +@@@@@+ ++@@@ @@@+@@@+ +@@++@@@ ", -" @@@@@@@@ +@@@@ @@@@@@@@@@@@@@@@@ @@@@@@@ +@@@@@@+ ", -" @@@@@@@+ +@@@@ +@@@@@@@@@@@@@@@ @@@@@@+ +@@@@@@ ", -" +@@@@@+ +@@@+ +@@@@@@@@@@@++ @@@@@@ +@@@@@+ ", -" @@@@@ @@@@ ++++@++++ @@@@@ @@@@@ ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" "}; diff --git a/res/src/AvatarAreaProject.xcf b/res/src/AvatarAreaProject.xcf index d09d1e41b2f64bac0e21992a8dde613bd0d8a932..98c204e700d21a921fdfcc6364b16ebcfbe3d812 100644 GIT binary patch literal 43526 zcmeI5Yitx%6vt01EGS@EwG{*EBG|MNTJX_IFjm{x#t^E8SYwH3AG^zjKInr28remY z5@Q66S~UU*H5U1xMopUdLB*KV@Ij0kYy9Ff))*5XF{x3b>+iO^?R0o$haC*PXOiFE zduQ&QopbKv{AatJjmBCxhqg6ELXlWYSVYb{B9gm+jM;*alf%o!FuQW^jC}_3m%t48 z1PW4lQ!k(THKg;RoOXFrduwaBt(&r#gBMkGh8w!W&7rNa?v0_E+t=P{j?5pc8f$Hc zhL=Y>W6fqCwR5DXt9yG(IMmhN5^FBLpePb;YHw-p3>A$f%R8fu4WSh!E5^1HWLBmQ z71Olw1WnV&LnqIerrWwUH#EiCqM?=P_hRSv6YWgxTfU_&)*XtqHEj%cnfC3GNLRRf z;sQ9SipURWSRgU~3NB#mwKIF*HapdPZ^79<|Jo4uK(%URD=Dp2!HKg-PO+J}S{!6+f zl{eR&9${&l*p>S_FKiR$bB^54aLuJa+vZYOJ+;n^e?(?-T{AC-8(=M$wGKAHqwoT} zDKh6h_!z!{-$dr(qqz+Kxr<>XqjVMA%S5;X+F=j81|NxBYWNC%0j_;P9$X2fP$9C2 zu3L1E$dwJy0XyMIIEcxI;Vn1{U%-#>r^r(JXX#}kMZA9z@4pPYmaT#Hz_l-XNTihO zFMSGL1Z*gMA3lZe;CGSh{ua5OzA9%{mgDns>@U9!?iN{nAGE^5@C59KSKw{fO^2prs8D&>0{XGVqAvD z=MfPn2?TExySPRstv8;q%X-t>>VYv2BpC;gn?&(hM~TGc2=V)t6Ql_udSYzfk#qYlSeB{PGzk+$8Ww%Km%Rr`%1F19WjrxnQmaW`O}{&n8* z7$vA4P!HI52asNKOv>GW>r(_9mA~^&XSS#Z)C2BW;ibI9LLKka?)m&#*uFa%^}tjQ z6k7Nhn=`_yvUjTPvyoS2uO2WSP-Q>$J2I;3)C1}PFG}9sMs=-vKs}(!-n}mPUDi*m z)dT7QRrc<6=3G*Bd^VExZ`z+*pV_Mi{PBQ$R(L6^s#6cB2UOX6Sv$_8jjB5JfOeK`3 z0r#x%QdU)`9#9XcviGufoJkv1b?O22fGT_U8ltLBJ)jeDnky1Ih74f zo1&fVTiTktF!V!_f!|*Nq41Z0n6WuKmJpix5J8%rX z1nNfl5sZx&!WB>gH$yFKfHv3xyWxOHOC9t;9}L1UjEb}th-@amc?2kT;QJ2tbreDw zREume)IkJ#pcndJKxDgN5QbnFMqpIr!2lG9>@XBU8B{|ZM4(6H5koKZ!2k@x5Ddcz zBgil+vMT@uPzYsEE%Lab4kFM4z0d~(FetLeFa*Oe0;3{(15hCHw4o5npc?8R0zJ?x z@|>X$24E0|U>HV3_8CS+_6MK<3ZV?Dp-$wWAp$+n3wg1LY_!T&=31dFu#&T_n`}@h zYNH)W)Js3xsBxS&v)&{enESY_mTig8YNs8VGt+*yRmY_5Rz0J!*GpX1Hr~dKGq&59 z&$fPXpD)w(U+b$bm`-CL9oKD5RnK^fOB&DBZ(hcLjT**jvs-^;yF8s@liH$ME7LJx ztBy(At$Ie|vX{85ZM=;eXKc4IpKbl(K3}Hmzt&gHFrCIgIPJ&AOfm@PFr%^gHrqf4|1TQ^!HSV;p^ua9|$yk=62aS{wYZ#qV{7{ygRU L%k+4rk8k-8q|I89 literal 2084563 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
M& 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%0DpAhFW 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 #mkddWP*7>hfA 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

)k9=uWf}cIwE;>D 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

lKXziCV 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

6P2U5>PwedwQ*#D9 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 #cE1C7Tn7Ca|+Die7MV@oJhH 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 r-{SeY1ajer9HIN-tn)EX_o6VJe-*;8ezXVKz<8 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 z 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%0AVTL1*- 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

tZNW5FdPX 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ν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 z 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 Date: Thu, 31 May 2018 04:49:17 +0200 Subject: [PATCH 099/359] update community translation files --- gta5view.pro | 4 +- lang/README.txt | 2 +- lang/gta5sync_no.qm | Bin 23 -> 0 bytes lang/gta5sync_no.ts | 2209 ------------------------------------------- 4 files changed, 2 insertions(+), 2213 deletions(-) delete mode 100644 lang/gta5sync_no.qm delete mode 100644 lang/gta5sync_no.ts diff --git a/gta5view.pro b/gta5view.pro index ee6ae7d..eb4ddd5 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -131,8 +131,7 @@ TRANSLATIONS += \ res/gta5sync_fr.ts \ res/gta5sync_ru.ts \ res/gta5sync_uk.ts \ - res/gta5sync_zh_TW.ts \ - lang/gta5sync_no.ts + res/gta5sync_zh_TW.ts RESOURCES += \ res/tr_g5p.qrc \ @@ -147,7 +146,6 @@ DISTFILES += res/app.rc \ res/gta5sync_zh_TW.ts \ res/gta5view.exe.manifest \ res/gta5view.png \ - lang/gta5sync_no.ts \ lang/README.txt INCLUDEPATH += ./anpro ./tmext ./uimod diff --git a/lang/README.txt b/lang/README.txt index c21786f..fd72055 100644 --- a/lang/README.txt +++ b/lang/README.txt @@ -2,4 +2,4 @@ Community translation files They get loaded in ApplicationPathExecFileFolder/lang -You can help translate with using Qt Linguist, after you've translated you'll need to send me a pull request on https://github.com/Syping/gta5sync +You can help translate with using Qt Linguist, after you've translated you'll need to send me a pull request on https://github.com/SyDevTeam/gta5view diff --git a/lang/gta5sync_no.qm b/lang/gta5sync_no.qm deleted file mode 100644 index 9dad8dffceb9623e88f8b96d9cd0caf25574c6fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23 fcmcE7ks@*G{hX<16=n7(EZlpygMop8iIEWihQJ9+ diff --git a/lang/gta5sync_no.ts b/lang/gta5sync_no.ts deleted file mode 100644 index 6186b4c..0000000 --- a/lang/gta5sync_no.ts +++ /dev/null @@ -1,2209 +0,0 @@ - - - - - AboutDialog - - - About %1 - - - - - <span style=" font-weight:600;">%1</span><br/> -<br/> -%2<br/> -<br/> -Version %3<br/> -Created on %4<br/> -Built with Qt %5<br/> -Running with Qt %6<br/> -<br/> -%7 - - - - - &Close - - - - - 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> - - - - - Release - - - - - Release Candidate - - - - - Daily Build - - - - - Developer - - - - - Beta - - - - - Alpha - - - - - Custom - - - - - CrewDatabase - - - - No Crew - - - - - ExportDialog - - - Dialog - - - - - Export Format - - - - - &JPEG/PNG format - - - - - GTA &Snapmatic format - - - - - Export Size - - - - - Default &Size - - - - - &Desktop Size - - - - - &Custom Size - - - - - Custom Size: - - - - - x - - - - - &Export - - - - - &Close - - - - - ImageEditorDialog - - - - - Snapmatic Image Editor - - - - - Overwrite Image... - - - - - - Capacity: %1 - - - - - ? - - - - - &Import... - - - - - &Overwrite - - - - - &Close - - - - - Patching of Snapmatic Image failed because of I/O Error - - - - - Patching of Snapmatic Image failed because of Image Error - - - - - Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. - - - - - ImportDialog - - - Import... - - - - - - - Background Colour: <span style="color: %1">%1</span> - - - - - - Ignore Aspect Ratio - - - - - Picture - - - - - Avatar - - - - - Background - - - - - - ... - - - - - Background Image: %1 - - - - - X - - - - - Force Colour in Avatar Zone - - - - - Import picture - - - - - &OK - - - - - Discard picture - - - - - &Cancel - - - - - - - Background Image: - - - - - - Custom Avatar - Custom Avatar Description in SC, don't use Special Character! - - - - - - Custom Picture - Custom Picture Description in SC, don't use Special Character! - - - - - 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 - - - - - Select Colour... - - - - - File - Background Image: File - - - - - JsonEditorDialog - - - Snapmatic JSON Editor - - - - - &Save - - - - - &Close - - - - - JSON Error - - - - - MapLocationDialog - - - Snapmatic Map Viewer - - - - - &Close - - - - - &Apply - - - - - &Revert - - - - - &Set - - - - - &Done - - - - - X: %1 -Y: %2 - X and Y position - - - - - OptionsDialog - - - %1 - Settings - - - - - Profiles - - - - - Content Open/Select Mode - - - - - Open with Singleclick - - - - - Open with Doubleclick - - - - - Select with Singleclick - - - - - Default Profile - - - - - Custom GTA V Folder - - - - - Force using Custom Folder - - - - - ... - - - - - Pictures - - - - - Export Size - - - - - Default: %1x%2 - - - - - Screen Resolution: %1x%2 - - - - - - Custom Size: - - - - - x - - - - - Ignore Aspect Ratio - - - - - Export Quality - - - - - Enable Custom Quality - - - - - Quality: - - - - - %1% - - - - - Picture Viewer - - - - - Enable Navigation Bar - - - - - Players - - - - - ID - - - - - Name - - - - - Feedback - - - - - - Participate in %1 User Statistics - - - - - Hardware, Application and OS Specification - - - - - Application Configuration - - - - - Other - - - - - - - Participation ID: %1 - - - - - &Copy - - - - - - User Feedback - - - - - Limit: 1 message/day - - - - - Language for Areas - - - - - Style - - - - - Style: - - - - - Font - - - - - Always use Message Font (Windows 2003 and earlier) - - - - - Interface - - - - - Participation - - - - - Categories - - - - - System Language Configuration - - - - - &Send - - - - - Language for Interface - - - - - - - - Current: %1 - - - - - Use Default Style (Restart) - - - - - Apply changes - - - - - &OK - OK, Cancel, Apply - - - - - Discard changes - - - - - &Cancel - OK, Cancel, Apply - - - - - %1 (Next Closest Language) - First language a person can talk with a different person/application. "Native" or "Not Native". - - - - - System - System in context of System default - - - - - %1 (Closest to Interface) - Next closest language compared to the Interface - - - - - Auto - Automatic language choice. - - - - - %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 - - - - - A feedback message have to between 3-1024 characters long - - - - - PictureDialog - - - Snapmatic Picture Viewer - %1 - - - - - <span style=" font-weight:600;">Title: </span>%6<br/> -<span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> -<span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> -<span style=" font-weight:600;">Created: </span>%8 - - - - - Manage picture - - - - - &Manage - - - - - Close viewer - - - - - &Close - - - - - - 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 Crew - - - - - Unknown Location - - - - - - - No Players - - - - - Avatar Preview Mode -Press 1 for Default View - - - - - - Export - - - - - Export as Picture... - - - - - JPEG Graphics (*.jpg *.jpeg) - - - - - Portable Network Graphics (*.png) - - - - - - Overwrite %1 with current Snapmatic picture? - - - - - - - - - - Export as Picture - - - - - - Failed to export current Snapmatic picture - - - - - - No valid file is selected - - - - - Failed to export the picture because the system occurred a write failure - - - - - Failed to export the picture because the format detection failures - - - - - Failed to export the picture because the file can't be written - - - - - Failed to export the picture because of an unknown reason - - - - - Export as Snapmatic... - - - - - GTA V Export (*.g5e) - - - - - GTA V Raw Export (*.auto) - - - - - Snapmatic pictures (PGTA*) - - - - - - - - - Export as Snapmatic - - - - - Exported Snapmatic to "%1" because of using the .auto extension. - - - - - - Open &JSON Editor... - - - - - PlayerListDialog - - - Edit Players... - - - - - Available Players: - - - - - Selected Players: - - - - - &Apply - - - - - &Cancel - - - - - 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! - - - - - ProfileInterface - - - Profile Interface - - - - - Loading file %1 of %2 files - - - - - %1 %2 - - - - - Import file - - - - - &Import... - - - - - Close profile - - - - - &Close - - - - - - - Export file %1 of %2 files - - - - - Enabled pictures: %1 of %2 - - - - - Loading... - - - - - - - - Import... - - - - - - - - - - - - - - - - - - - - - - - - Import - - - - - - GTA V Export (*.g5e) - - - - - - Savegames files (SGTA*) - - - - - - Snapmatic pictures (PGTA*) - - - - - Importable files (%1) - - - - - Snapmatic Loader - - - - - <h4>Following Snapmatic Pictures got repaired</h4>%1 - - - - - - - All image files (%1) - - - - - - - - All files (**) - - - - - - - No valid file is selected - - - - - - Import file %1 of %2 files - - - - - Import failed with... - -%1 - - - - - - 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 - - - - - Can't import %1 because file format can't be detected - - - - - Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - - - - - Failed to import the Snapmatic picture, the picture is already in the game - - - - - Failed to import the Snapmatic picture, can't copy the file into profile - - - - - Failed to import the Savegame, can't copy the file into profile - - - - - Failed to import the Savegame, no Savegame slot is left - - - - - - JPG pictures and GTA Snapmatic - - - - - - JPG pictures only - - - - - - GTA Snapmatic only - - - - - %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - - - - - - - - - Export selected... - - - - - Initialising export... - - - - - Export failed with... - -%1 - - - - - - No Snapmatic pictures or Savegames files are selected - - - - - - - Remove selected - - - - - You really want remove the selected Snapmatic picutres and Savegame files? - - - - - - Qualify as Avatar - - - - - - - - - - No Snapmatic pictures are selected - - - - - - - - Patch selected... - - - - - - - - - - - - Patch file %1 of %2 files - - - - - - - - - - %1 failed with... - -%2 - Action failed with... - - - - - Failed to remove all selected Snapmatic pictures and/or Savegame files - - - - - Qualify - %1 failed with... - - - - - - Change Players... - - - - - Change Players - %1 failed with... - - - - - - - Change Crew... - - - - - Failed to enter a valid Snapmatic Crew ID - - - - - Change Crew - %1 failed with... - - - - - - - Change Title... - - - - - Failed to enter a valid Snapmatic title - - - - - Change Title - %1 failed with... - - - - - All profile files (*.g5e SGTA* PGTA*) - - - - - QApplication - - - Font - - - - - Selected Font: %1 - - - - - <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? - - - - - SavegameDialog - - - - Savegame Viewer - - - - - <span style=" font-weight:600;">Savegame</span><br><br>%1 - - - - - &Export - - - - - &Close - - - - - Failed at %1 - - - - - SavegameWidget - - - Savegame Widget - - - - - SAVE %3 - %1<br>%2 - - - - - View savegame - - - - - View - - - - - Copy savegame - - - - - - Export - - - - - Delete savegame - - - - - Delete - - - - - &View - - - - - &Export - - - - - &Remove - - - - - &Select - - - - - &Deselect - - - - - Select &All - - - - - &Deselect All - - - - - Savegame files (SGTA*) - - - - - All files (**) - - - - - - - - Export Savegame - - - - - Overwrite %1 with current Savegame? - - - - - Failed to overwrite %1 with current Savegame - - - - - Failed to export current Savegame - - - - - No valid file is selected - - - - - Export Savegame... - - - - - - AUTOSAVE - %1 -%2 - - - - - - SAVE %3 - %1 -%2 - - - - - - WRONG FORMAT - - - - - UNKNOWN - - - - - Are you sure to delete %1 from your savegames? - - - - - - Delete Savegame - - - - - Failed at deleting %1 from your savegames - - - - - SnapmaticEditor - - - - - - - - - - - Snapmatic Properties - - - - - Snapmatic Type - - - - - Editor - - - - - Selfie - - - - - Regular - - - - - Mugshot - - - - - Meme - - - - - Director - - - - - Snapmatic Values - - - - - Crew: %1 (%2) - - - - - Title: %1 (%2) - - - - - Players: %1 (%2) - Multiple Player are inserted here - - - - - Player: %1 (%2) - One Player is inserted here - - - - - - Appropriate: %1 - - - - - Extras - - - - - Qualify as Avatar automatically at apply - - - - - Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture - - - - - &Apply - - - - - &Cancel - - - - - - - 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: - - - - - 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 - - - - - SnapmaticWidget - - - Snapmatic Widget - - - - - PHOTO - 00/00/00 00:00:00 - - - - - View picture - - - - - View - - - - - Copy picture - - - - - Copy - - - - - Export picture - - - - - Export - - - - - - - Delete picture - - - - - Delete - - - - - Edi&t - - - - - Show &In-game - - - - - Hide &In-game - - - - - &Export - - - - - &View - - - - - &Remove - - - - - &Select - - - - - &Deselect - - - - - Select &All - - - - - &Deselect All - - - - - 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 - - - - - TelemetryDialog - - - %1 User Statistics - - - - - You want help %1 to improve in the future by collection of data? - - - - - Yes, I would like to take part. - - - - - &OK - - - - - UserInterface - - - - %2 - %1 - - - - - Select profile - - - - - %1 %2 - - - - - Reload profile overview - - - - - &Reload - - - - - Close %1 - Close %1 <- (gta5view/gta5sync) - %1 will be replaced automatically - - - - - &Close - - - - - &File - - - - - &Help - - - - - &Edit - - - - - &Profile - - - - - &Selection visibility - - - - - - - &About %1 - - - - - &Exit - - - - - Exit - - - - - Close &Profile - - - - - &Settings - - - - - Select &All - - - - - &Deselect All - - - - - &Export selected... - - - - - &Remove selected - - - - - &Import files... - - - - - &Open File... - - - - - - Select &GTA V Folder... - - - - - - - - Select GTA V Folder... - - - - - Show In-gam&e - - - - - Hi&de In-game - - - - - Change &Players... - - - - - Selection &mass tools - - - - - Change &Title... - - - - - Change &Crew... - - - - - &Qualify as Avatar - - - - - - - Select Profile - - - - - Open File... - - - - - - - - Open File - - - - - Can't open %1 because of not valid file format - - - - - - - Show In-game - - - - - - - Hide In-game - - - - From cd20e0b5127617faf9ba2112cd2277ce493fdd4a Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 31 May 2018 06:12:47 +0200 Subject: [PATCH 100/359] Telemetry system updated --- TelemetryClass.cpp | 6 +----- TranslationClass.cpp | 1 - main.cpp | 30 +++++++++++------------------- res/gta5sync_de.qm | Bin 44702 -> 44855 bytes res/gta5sync_de.ts | 28 ++++++++++++++-------------- res/gta5sync_en_US.qm | Bin 25424 -> 25241 bytes res/gta5sync_en_US.ts | 28 ++++++++++++++-------------- res/gta5sync_fr.qm | Bin 43384 -> 43009 bytes res/gta5sync_fr.ts | 28 ++++++++++++++-------------- res/gta5sync_ru.qm | Bin 43823 -> 43488 bytes res/gta5sync_ru.ts | 28 ++++++++++++++-------------- res/gta5sync_uk.qm | Bin 44735 -> 44360 bytes res/gta5sync_uk.ts | 32 ++++++++++++++++---------------- res/gta5sync_zh_TW.qm | Bin 33497 -> 33258 bytes res/gta5sync_zh_TW.ts | 32 ++++++++++++++++---------------- 15 files changed, 100 insertions(+), 113 deletions(-) diff --git a/TelemetryClass.cpp b/TelemetryClass.cpp index 521734f..66eac7f 100644 --- a/TelemetryClass.cpp +++ b/TelemetryClass.cpp @@ -52,12 +52,8 @@ void TelemetryClass::init() { QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); settings.beginGroup("Telemetry"); -#ifndef GTA5SYNC_BUILDTYPE_DEV - telemetryEnabled = settings.value("IsEnabled", false).toBool(); -#else - telemetryEnabled = true; // Always enable Telemetry for Developer Versions + telemetryEnabled = true; telemetryStateForced = true; -#endif QString telemetryLegacyClientID = settings.value("ClientID", QString()).toString(); if (telemetryLegacyClientID.isEmpty() || telemetryLegacyClientID == "v2+") { diff --git a/TranslationClass.cpp b/TranslationClass.cpp index 9afbf13..ba69204 100644 --- a/TranslationClass.cpp +++ b/TranslationClass.cpp @@ -617,7 +617,6 @@ QString TranslationClass::getCountryCode(QLocale locale) QStringList localeStrList = locale.name().split("_"); if (localeStrList.length() >= 2) { - qDebug() << localeStrList; return localeStrList.at(1).toLower(); } else diff --git a/main.cpp b/main.cpp index 5ab285a..c4c4be4 100644 --- a/main.cpp +++ b/main.cpp @@ -116,18 +116,8 @@ int main(int argc, char *argv[]) Translator->loadTranslation(&a); #ifdef GTA5SYNC_TELEMETRY - if (!applicationArgs.contains("--disable-telemetry")) - { - if (!applicationArgs.contains("--skip-telemetryinit")) - { - Telemetry->init(); - Telemetry->work(); - } - } - else - { - Telemetry->setDisabled(true); - } + Telemetry->init(); + Telemetry->work(); #endif if (!applicationArgs.contains("--skip-firststart")) @@ -148,8 +138,9 @@ int main(int argc, char *argv[]) } #ifdef GTA5SYNC_TELEMETRY - bool telemetryWindowLaunched = settings.value("TelemetryWindowLaunched", false).toBool(); - if (!telemetryWindowLaunched && !Telemetry->isEnabled() && !Telemetry->isStateForced()) + bool telemetryWindowLaunched = settings.value("PersonalUsageDataWindowLaunched", false).toBool(); + bool pushUsageData = settings.value("PushUsageData", false).toBool(); + if (!telemetryWindowLaunched && !pushUsageData) { QDialog *telemetryDialog = new QDialog(); telemetryDialog->setObjectName(QStringLiteral("TelemetryDialog")); @@ -161,12 +152,13 @@ int main(int argc, char *argv[]) telemetryDialog->setLayout(telemetryLayout); UiModLabel *telemetryLabel = new UiModLabel(telemetryDialog); telemetryLabel->setObjectName(QStringLiteral("TelemetryLabel")); - telemetryLabel->setText(QString("

%2

%1").arg(QApplication::translate("TelemetryDialog", "You want help %1 to improve in the future by collection of data?").arg(GTA5SYNC_APPSTR), QApplication::translate("TelemetryDialog", "%1 User Statistics").arg(GTA5SYNC_APPSTR))); + telemetryLabel->setText(QString("

%2

%1").arg( + QApplication::translate("TelemetryDialog", "You want help %1 to improve in the future by including personal usage data in your submission?").arg(GTA5SYNC_APPSTR), + QApplication::translate("TelemetryDialog", "%1 User Statistics").arg(GTA5SYNC_APPSTR))); telemetryLayout->addWidget(telemetryLabel); QCheckBox *telemetryCheckBox = new QCheckBox(telemetryDialog); telemetryCheckBox->setObjectName(QStringLiteral("TelemetryCheckBox")); - telemetryCheckBox->setText(QApplication::translate("TelemetryDialog", "Yes, I would like to take part.")); - telemetryCheckBox->setChecked(true); + telemetryCheckBox->setText(QApplication::translate("TelemetryDialog", "Yes, I want include personal usage data.")); telemetryLayout->addWidget(telemetryCheckBox); QHBoxLayout *telemetryButtonLayout = new QHBoxLayout(); telemetryButtonLayout->setObjectName(QStringLiteral("TelemetryButtonLayout")); @@ -185,12 +177,12 @@ int main(int argc, char *argv[]) { QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); telemetrySettings.beginGroup("Telemetry"); - telemetrySettings.setValue("IsEnabled", true); + telemetrySettings.setValue("PushUsageData", true); telemetrySettings.endGroup(); Telemetry->init(); Telemetry->work(); } - settings.setValue("TelemetryWindowLaunched", true); + settings.setValue("PersonalUsageDataWindowLaunched", true); delete telemetryDialog; } #endif diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index 39045abf71601af03c08e7c4b05455866f452fa3..75ed2bc5cfb8e92f0d079e819044c2d71bf702c0 100644 GIT binary patch delta 769 zcmbtQT}V@57=F&TU(d-R0zpeVX#TLAW}re)VxUr#3Sp6vFt@{8?wr-mhA25NB%+JT zc=0D~b6Y<&B)wP`6$n8RT@1Sjf?`EM7lA@IMi&KrXN#`7>x1uozVH3s?|Gl+jb+*6 z4{RdMV(N|M&i&KPaNHXPc7226Q5#Ua3db`uFyn?}&A>PuuPcF@2jE!W$5Ew5p^44a zkSZ*SGetsasvM~3B`1rpTUGRcjS26_X{z4-nZ26Y1{|JeYZn@USb`LjS9nhuQ-npY z&~fuM7TZZ#bE|Datp_GQQK_Yj%|+;-r9*g2mn^4van_=Vvt713&oy8c)MIU8Ni$uw zR;TDHCv;xua8EzDEYR>$VAQ-;IrW%^}nXYp=ovsbYMBh}u=l7p17F9{noTF}w3 zB0U)|1De;Rr{iaUJ-yP3x(Xy7a{R*4BfU8E73i9h)H*E=m&3ZttH>T#$VH2ZlCd{9fdKFA&#}lkULWt$mg^Ga*}U?+ zlDvZdRUP1-@=QZ?|7@Wt43#z#&I+T4;nJ8$2tRWZFzQ^Dis|CXGU`d~NN*-n(r;W6;HCfo delta 598 zcmYL^T}YEr7{~wT?Bkt#gQzI5n!Z?5cvJhJ=~bGRia|wGM25!NrVih2wY@XC*n*@> zt$1)c)9F?Q-PpxYsUQfFsE|eIO<;EhftfdX7xg4k=ixlR|Ka)Ie`deP%#ysHmtzYL zrq3KnWuQN~1?*jeKGOsg&q04_1%}>3FEED{=pWt8EcBH_%mwm@8aZ;0LSkzBP(rw# zmI3?PgwZho3?3l2Ov;D-G%0V3269^}wzbN4sjWccxGdc802v3hTe?Ie%~_Iibd8#< z19I#REm|9>#O9JC%XG}vBI@X_?GiUF*}~5BjPm$(7)W=~MSG3R_E5jQT&4;%ZGS5i zN+_kmPGd^7%&gNqBfUz$lx8_TOHGb)IT56gqeEst(Y)iCxIl@bmcwrKd0z=oyQ046 zy8`TQQ(uMVfb1UTGBEK$eN*=hIGa)nW|H4l`dP&5^W=6m%h6#9Icr5TO*$*YRa$g5 zC?`gK^WSs%ovJEiE}k#ja&XXf6sO=tB{T%#LpL*o^$lerKtDXYbW}UQ$IiF(av)Zz zwQ4sbal@|}!JdF-Ml{pQyzY&f^gX-VJ&e=;7a#_cSNaj>+>HPXbaD<;Dpz%`msJ$k zILA2t>hNZ7bkoXtwie;*RKX=FJYp!aCFJc%0pBapVwMeJt R_nO{%TFn;c+aG;a{{T#%v{C>7 diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index b883bcb..c7ee247 100644 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -758,7 +758,7 @@ Y: %2 Snapmatic Bildansicht - %1 - + <span style=" font-weight:600;">Title: </span>%6<br/> <span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> <span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> @@ -769,22 +769,22 @@ Y: %2 <span style=" font-weight:600;">Erstellt: </span>%8 - + Manage picture Bild verwalten - + &Manage &Verwalten - + Close viewer Ansicht schließen - + &Close S&chließen @@ -1432,7 +1432,7 @@ Drücke 1 für Standardmodus Ausgewähle Schrift: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>Willkommen zu %1!</h4>Möchtest du %1 einstellen bevor du es nutzt? @@ -2001,22 +2001,22 @@ Drücke 1 für Standardmodus TelemetryDialog - + %1 User Statistics %1 Benutzerstatistik - - You want help %1 to improve in the future by collection of data? - Möchtest du helfen %1 in der Zukunft zu verbessern durch Sammlung von Daten? + + You want help %1 to improve in the future by including personal usage data in your submission? + Sollen bei Einreichungen Persönliche Nutzungsdaten einbezogen werden um %1 in der Zukunft zu unterstützen? - - Yes, I would like to take part. - Ja, ich möchte teilnehmen. + + Yes, I want include personal usage data. + Ja, ich möchte Persönliche Nutzungsdaten einbeziehen. - + &OK &OK diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm index f3a3c28f769d8365cfc869143fb44938ad19fafb..5ebdda802b16e4c3106b83d44ec4926308d3f3a5 100644 GIT binary patch delta 368 zcmWm6O(=tL9KiA4|F@TCdmfo&BD1`0>d_X;Tu>A{h-Z7YxlnV!?OBnF!%&h7qF+QI z^41PGX!0)QCF(I(X-7pZE>=?Far*SVd>?Pv;x)6@9ronie=N3p(Kzwv)K7g32)J#(it7Upp*q+(O z3S%VzIWy$KVU!nWM??A~m(H0jzvA7z1;Am!M1KuH;Fo%JeHa)aRX4)gs7*hOffyzA zVdkNFLks#AY246(!8j!i5#Ar=HZCIo{&or(Js3*Sl+lUOD#eYr%tlepj?x`1b8ZYy zkgDO|rXQ{agYVRADrZ4bOkq|^s%aPf&lEL#t7PG5%nnfG7LLa{0jy=hxpEBn$D76*l(Vpks#L1V`LS*mH|54i)Sn`8a;}2OU@qZ6mGxG z@w*KiwD!;#;svXV2K{*7`mtkC94svXblb#Hp#so0D~@032JmG?_0SLgLmtb5hekbE z<%EW?Aq>!H8TZ-T)`Yk=3-VDGz(zEF}fTL4-m8}BAlHAYS z-O~I0UjVj;q?$ej5PgT=MBZ+~cDtXvLB-xf!>xGT?k07t+WUlqSO4)%UQ{fSMCcKB zrKRa&fNdF3PVHca*`#KuDW+ylC`{Lwp5W#a1>J*z__n^@5zSzeiJZ^`h>#LhHexTHeO^&O;weop3!nlOS4o$Px#haZq3Do{}(%?lmGw# diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index d2d920b..f723784 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -746,7 +746,7 @@ Y: %2 - + <span style=" font-weight:600;">Title: </span>%6<br/> <span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> <span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> @@ -754,22 +754,22 @@ Y: %2 - + Manage picture - + &Manage - + Close viewer - + &Close @@ -1409,7 +1409,7 @@ Press 1 for Default View - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? @@ -1976,22 +1976,22 @@ Press 1 for Default View TelemetryDialog - + %1 User Statistics - - You want help %1 to improve in the future by collection of data? - + + You want help %1 to improve in the future by including personal usage data in your submission? + - - Yes, I would like to take part. - + + Yes, I want include personal usage data. + - + &OK diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index 243cabac8e10b5d1d2fec718cf5379834c2effd9..2fa3468ab11b2a23c3382815592337f7e72d21f5 100644 GIT binary patch delta 379 zcmWm7J4iwS6adic_1k+w5Gh4!Wa;pr2tldngM|)3(Naq!5!R+q1k#`&613#+`ZtB3 zf`(i~=|e_fLBdOEX$Z$6A!rI*f?m@ZPx}S^4OC5DI(us0M{#~YbGLqc+nfbp+YwbB zlhR0O(G+?G?raZ0Qvj}P1L*YvcOwCasDP{gI}cpLAovN~*C;@=pUff)Qkh($0u!!? zwC8$&!66z(AI7S5ArL;GVX?6*zJX7PP5^5Q>)U349TG7Dy&=}>0Gu!2gmM~p6!SFXeG4CUk_ zn9>q2Kq~r`+c8xmo5G0c47n5z%+3+7C?I*r+hI3l^XyeX2QVgKuLG+9LlbPp^#G9B z5quX^v(@Pqz+#ZC@A?4Jee}~Yg2@juFm{Yzk&CflEI_A>5tAw68Ea9^G9t`=7WK-v KP|=y|R{jC|N`nOe delta 720 zcmX|7Ye8^mt2HCXstg&Ub zJeCPmr`XCxClH^dW^D%>U#FzDpN$Vvt!{|LchH)yg~h_;)VtW|Hwx<;*~Aj9>HU^y zjq%PaKM>VWouPtFJL!hO&LRpuFucyE$L6}oGSIqUZZ;->!dY|M_&z|LFw4h(0g*Y1 z8B5s2ASDGv`{=jP#U{(>u*uG*G$ff?*z|o$n&w$_oq}dp`HbHBbYK^-UuS(ba26;y zXno;J0#hFaeiazDE>)(0`XTFz+7C=#r=MnFP)B(d7aQj!S;YT*rx}Z##WyKwsWu*) z+yq8WCiGUThRrl2vNApm=aixWL3mLFj`NU2>=7}DOLV$o8(nqku9TP{mO-4|O;UFe zKf!yIpzPtY_kzS#g{y9XUG9KdVicOpGmejT;vGRX7?5~dh_@@UEVZj% S#m|)v?s2Q`s>J)L;*7udU)bRQ diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index a412bf5..6b1e0df 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -758,7 +758,7 @@ Y : %2 Visionneuse de photo Snapmatic - %1 - + <span style=" font-weight:600;">Title: </span>%6<br/> <span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> <span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> @@ -769,22 +769,22 @@ Y : %2 <span style=" font-weight:600;">Créé le : </span>%8 - + Manage picture Gestion de l'image - + &Manage &Gestion - + Close viewer Fermer la visionneuse - + &Close &Fermer @@ -1433,7 +1433,7 @@ Appuyer sur 1 pour le mode par défaut Police sélectionnée : %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>Bienvenue sur %1!</h4>Voulez-vous configurer %1 avant de l'utiliser t? @@ -2004,22 +2004,22 @@ Appuyer sur 1 pour le mode par défaut TelemetryDialog - + %1 User Statistics %1 Statistiques d'usage - - You want help %1 to improve in the future by collection of data? - Voulez-vous aider à améliorer %1 en envoyant vos données d'utilisation ? + + You want help %1 to improve in the future by including personal usage data in your submission? + - - Yes, I would like to take part. - Oui, je veux participer. + + Yes, I want include personal usage data. + - + &OK &OK diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index c7df0a1f10dbee6d31b291e8de770763c4df9ed8..061cd2a28b4ac9361c1d7154e9f182ebdedef03c 100644 GIT binary patch delta 383 zcmWm7O(;VF902hD{(IY-_mq-pD<*6^ydq5&g`!Lj9MqIn%K=d)D=7!N$dTIqdvBX< zq-Jq2v?kwDDC)J9aR*v%R0Q{$4 zzl4!Cf2POge+3~q4N#T67i4|<(bX+-eD+bJz(OzJ1f@W9~23!

z4VJywNX1|7s(8|O_0fA5K(Q`bnqkTF(dBL%+Q4#s0-$06EO$Ks<;!4s$N^$wU|B8j z23TI10OIXn`C=uWLA$D+%{1VMYS9?muByCQ1+d$w3i_r2qCe2YCfV#hyhgx}Xeu%r zXV=+Eq6EMdV5=wX0LeSpTQtPxzGJRvlFh}?!>3u&ifi1*W};|Uds*xqo>d=Z^RIDD z9Wo?*+J&bffJ6y)Y3f<}6JF4m84loW&GV}GlD;dt0^l#!_iD2Mdo%j}nL2>T6@9Sd z8vrITuB~D77coaj%;GPtm!;g;tTVIJ2Ff}g%N)a;ZjmK^Vnpw?Wo}9Lr*;514AO(C z;{bcgq{kyUfOML;PCP6GOdHHBxrsSL zo7SED3vjtFtCl1c%WP(i#ebqlEPNZcLNy5P;VrzKyD4)Mt-Ou9xQ#R$ PictureDialog - + <span style=" font-weight:600;">Title: </span>%6<br/> <span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> <span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> @@ -769,12 +769,12 @@ Y: %2 <span style=" font-weight:600;">Сделано: </span>%8 - + &Manage &Управление - + Manage picture ÐаÑтройки картинки @@ -784,12 +784,12 @@ Y: %2 ПроÑмотрщик фотографий Snapmatic - %1 - + Close viewer Закрыть проÑмотрщик - + &Close &Закрыть @@ -1439,7 +1439,7 @@ Press 1 for Default View Выбранный шрифт: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>Добро пожаловать в %1!</h4>Хочешь изменить наÑтройки %1 перед иÑпользованием? @@ -2008,22 +2008,22 @@ Press 1 for Default View TelemetryDialog - + %1 User Statistics %1 пользовательÑÐºÐ°Ñ ÑтатиÑтика - - You want help %1 to improve in the future by collection of data? - Хочешь ли помочь будущему развитию %1 отправкой данных? + + You want help %1 to improve in the future by including personal usage data in your submission? + - - Yes, I would like to take part. - Да, хочу учаÑтвовать. + + Yes, I want include personal usage data. + - + &OK &ОК diff --git a/res/gta5sync_uk.qm b/res/gta5sync_uk.qm index e2005105ae00f2b4de8100eab15ea39fd4e0b554..151097e740dbb2730ab3c8de6101c576353ed35d 100644 GIT binary patch delta 387 zcmWm7J4hP=7zgnGeR+CUP%J(Q@n~#4%Yh@ zJ}=KpjA&ar7%0JD6t#k{7S41l2pJ0sqEo>|>N)+!-$9AaE~u(wd#v`?t)ZJ<&%wyr zUa1?9?v|_4WPDxT>TT5*p?;YLp1+2g_XD2)PqyV+}=nd504M21b>UE3dcWx7W z6rbdPkQE~%LfyA|Kw04?3Q=N+H!UKsxXGqeCM)P?q#V%7sra!CF#hld+c+7|*tCTx zxyL>BPh<>o$v#Z+ANJM&__nA$^;-oF^2$ z!MIR?jW}TFyyFomary38^?00@4NkS7rr4ZV)v}j&eZsQKE)FiwdO_HpQ-7 awIm9(_A*!hWJ%|tcQW^7pXU7QGtvW}(};2a delta 757 zcmX|6YeszuP&A_Zk zGUPO;)6HfVh{!)9=|W26Duplz{}lcV3Azy2Z#&{~4|AprWQ{zT(Ya z3-J$!OV-Y2UhT936lkZ5(kOjk`f0ay<|mjRMgfQo%qwnyl6^40!~nAd%v&;_2J=TF z<6SU+uLhVarglXwN`9h2#j+vsPEq=(9Kdu(Aq-3b#II8$ilO;8^Z}#9ZE94S3=5-Z zW2O+mQ;4=M*a6Z`+OHf&sVg+6jGk_NTBX}~0L@oYyUK%RZ_vxCUbN_^+p3U$ zZclUnb%@QrN4wOuC^JDP)FzZDqfgXt%jbG@UDF!?zHVK=CJS(+LN}PO0Yo3`gpS_; ziC!AlSkU4@nq!o-&_5avTKqyCS`)fEL3!-}%Iwjcb{Qpa(umGuU2<{H#}5HCu5d5L z&j3^|bF0A|K*rAaE5O}dZr%9};H011l48s!^oP!Z(%ZCD??DTjl-Jjy`4~;EAGWsX4l|)_FHis?qM<6 zZo}NnxU+ZzgR_%lTk4u_=pfV&l5=`l9%y_H!N8+OjCG@7x*AAg`>v; zUO_ykP_p1PJZ8xEm8Z62JL_v_Q*6v@W@utK`foBAp@wDTsEuvVh&ypdUeT7{P_A&{ z2KGDhSvz9~?q<0TrtQgJ)x^9yc9RpgV7W@}<2Zrqu^XEIpVHDNM#!i)BoRL^j1Xgu vd`TcU5*9Dj-sbGp%sTfMaw*XN diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts index 8352309..d929df7 100644 --- a/res/gta5sync_uk.ts +++ b/res/gta5sync_uk.ts @@ -758,7 +758,7 @@ Y: %2 ПереглÑдач зображень Snapmatic - %1 - + <span style=" font-weight:600;">Title: </span>%6<br/> <span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> <span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> @@ -769,22 +769,22 @@ Y: %2 <span style=" font-weight:600;">Створено: </span>%8 - + Manage picture ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñм - + &Manage &Керувати - + Close viewer Закрити переглÑдач - + &Close &Закрити @@ -1433,7 +1433,7 @@ Press 1 for Default View Вибраний шрифт:%1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>ЛаÑкаво проÑимо до %1!</h4>Ви хочете налаштувати %1 перед викориÑтаннÑм? @@ -2002,22 +2002,22 @@ Press 1 for Default View TelemetryDialog - - You want help %1 to improve in the future by collection of data? - Ви хочете допомогти %1 подальшому вдоÑконаленню шлÑхом збору даних? - - - + %1 User Statistics %1 СтатиÑтика кориÑтувачів - - Yes, I would like to take part. - Так, Ñ Ñ…Ð¾Ñ‚Ñ–Ð² би взÑти учаÑть. + + You want help %1 to improve in the future by including personal usage data in your submission? + - + + Yes, I want include personal usage data. + + + + &OK &OK diff --git a/res/gta5sync_zh_TW.qm b/res/gta5sync_zh_TW.qm index 278dc97ff4191d4bb8717f69d1e90c40c5be9f0c..90b338e3d5fbc0a7357348667f8769743ee592c1 100644 GIT binary patch delta 373 zcmWm8O(=r_9LMqh^WV#}J&%$ymNrG1dPG`n4ql4d%E8Kki@d*G_Uy4eTP$r3YbSYG z|2T+A4Jno^@)A-g>S>OX#>s({liEdjoIZU|zu$8lKVxWWIUO@Uey^`6RhH|at;>7| z0AEO$k{IYt9DD5Eeh_xT0Oh?PoVWl=cR{$&0*GM{vj6Ub@Kgif6F~TCRP84R<3uS( zB9rDsCu7~K2CyL2V-%;>=m6&!H8iy)h!3m90QPyz`W*m)SsK?&p#OywO%(k^UD_q4 znDW{|rh-~^ZWP}ruIoj4lJYvqXk}A3K6NffJ^CibObdD&dKc+fe~-Rpim;XFy`v4b z0p&VURHPpIW!)$rk;`Dipoc`m0EYTVF{Dx2q=?aN4<-4tSS3K+41XT$Q%@iASK=K& z@KyC)HO1eyeE>A?^Vwh&K>ns5V*>^XRKvN^-$^3p#Hmr*=4=?aB86+ul<^#cp2~QjU0EL`;TmS$7 delta 614 zcmXAlO-NKx6vxlI<9xh%1EwTJXQGi{I;CWIFu=4?Uo~Hq5m%+2P z%@Odtbpz-kcs>_#Rds4E09Y6dDvZncH$8 zV-qcprvsFXptasIfN(Qwu>_DY&r+5cG7MIoc0>5e*3(*rKdj8^L)s!6ur?ytbzU8K7oGY_TT+a({~LH%kF76^hEa?*Qr~ z8?$>6b+QyksFeM(`w&gA6OMdj9%97dN0DPJ<(NUC7&Ap*Nn}8J7T*U@*e}h;ukcp0 z(xRFIFc&yKaK@!qCqDule<-cd7yw;mUqmkozhgO0A2JFUah9XrDmLNFN8t&Ua-O!I zxxK}|GMltYl7J#}$xN554DJXVjtp(N+B4dI_ Snapmatic 圖片檢視器 - %1 - + <span style=" font-weight:600;">Title: </span>%6<br/> <span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> <span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> @@ -767,22 +767,22 @@ Y: %2 <span style=" font-weight:600;">建立於: </span>%8 - + Manage picture 管ç†åœ–片 - + &Manage 管ç†(&M) - + Close viewer 關閉檢視器 - + &Close 關閉(&C) @@ -1427,7 +1427,7 @@ Press 1 for Default View 鏿“‡çš„å­—é«”: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>歡迎使用 %1!</h4> 你想在開始å‰å…ˆè¨­å®š %1 å—Ž? @@ -1996,22 +1996,22 @@ Press 1 for Default View TelemetryDialog - - You want help %1 to improve in the future by collection of data? - ä½ å¸Œæœ›é€šéŽæ”¶é›†è³‡æ–™ä¾†å¹«åŠ©æ”¹å–„ %1 å—Ž? - - - + %1 User Statistics %1 使用者統計 - - Yes, I would like to take part. - 是的,我想幫忙. + + You want help %1 to improve in the future by including personal usage data in your submission? + - + + Yes, I want include personal usage data. + + + + &OK 確定(&O) From 06ada3d7709138c0ae68dab2219dc1739b1cc29c Mon Sep 17 00:00:00 2001 From: Syping Date: Sat, 2 Jun 2018 07:15:07 +0200 Subject: [PATCH 101/359] updated README pictures --- README.md | 6 +++--- res/src/mainui.png | Bin 0 -> 42909 bytes res/src/picture.jpg | Bin 0 -> 481200 bytes res/src/prop.png | Bin 0 -> 12740 bytes res/watermarkbright.png | Bin 0 -> 15891 bytes 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 res/src/mainui.png create mode 100644 res/src/picture.jpg create mode 100644 res/src/prop.png create mode 100644 res/watermarkbright.png diff --git a/README.md b/README.md index aab8939..9ab406e 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ Grand Theft Auto V Savegame and Snapmatic viewer/editor - Let choose between multiple Social Club accounts as GTA V profiles IDs #### Screenshots -![Snapmatic Picture Viewer](https://i.imgur.com/dQdW3hx.png) -![User Interface](https://i.imgur.com/SRNQdq6.png) -![Snapmatic Properties](https://i.imgur.com/j1Lodiu.png) +![Snapmatic Picture Viewer](res/src/picture.jpg) +![User Interface](res/src/mainui.png) +![Snapmatic Properties](res/src/prop.png) #### Build gta5view for Debian/Ubuntu diff --git a/res/src/mainui.png b/res/src/mainui.png new file mode 100644 index 0000000000000000000000000000000000000000..34354762aaedffc042b1ff35d1581db909947040 GIT binary patch literal 42909 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

C@sToN4iIR40m_==6No(4B|TH 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ýse}bM?xZuzaFr& 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

hTTt%ajw-r7`vXh@XG5)*BUAT?3 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

J{^M^Jhb5%*~C2Q8$wC|?HA^tm5o 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%0D!iucQup;8}g&)hz-7=s%{{=gX`Okjb_fLTL-xXk zUnq&E7ZNUS{&i-vR@~je&QMyk(5>|1lam~zrKDMtr6kgqN|x5W6oe1rMgZp>8mu^Y zm^$65*K+3UyeUk^u)85a!}Aur_SqqIp2Cl1^*ZEuW4E?326iNR;~k7XDMcptRDI`e zv!|3~_3P&kI)CbRMs=BcuS;KWR;TpYUPUl~gnjC*9s#Im2nA)zn{DM{FJ|fZ>~iEk zB`8;8-&%kjT!9tOI}uid_VhHS?vqMcmHORMu@E7RV5lrm%nqoO+J)0H-Ml_zGI=?3 zWj6(YX9A0edH(SK0FpouIb`l%DY{ajk%lMa$b$p8b%u{(UY9a7(;V=u-*pmU^&w|O z9FtQd&#?|sa=lAcqU*5of3J{oFqm%?c?cMq#Jo7)N(K8ipOjekGwK;n#`$o zlCQf8?WM?dAFU^(@%nb6abaE5r>wvm#sjv+iEozKGv9Ozn1U zE-(r3YPLT)3<+w*VH|cMdz??RcjF>Wddn?CbxD+DFK6(+MwjV|@cpPF_Vcud=>7Ux zCMu}%(~ea$CJFTVv?acoBIOM>gHMcqBRBW1{{H}Slb{;Cs=Y0aqT%i|*r^#aK9)xo zH49*y_2x@W6kRd}qWXLz;VC2CQBl9)P*YtoovC~GMXGe4TepRqEDtpA`y>XWc98Dvaimr;yfmJ>VMo=CCv#D*|0>3f^}?qY#v_97qME3YXksP?_&yR zebh6kU+K5i=kB!qyvgRJHn1c6c58e3>zk^jL*3LSRd+pg13Y69UE(nt<)oTJ{@%bd zFES7Vr?1eyF>7T8%A4fFpFj!@8VPjj^t^?zV5n29HGDiqo#YbrLdtixr`gQgV^7F2 zsm4<7p7NHF-JVOdIJ;?;t`XK-YE;24KiCg%2uatn{8WJ<-~t9oDZ(mvh#+46b~UY= z?K2biXxSNfq&V@6C`F=pcw%o!b@<9&$a+8akewunY;H^UaHmX~=2w@3wW6uGvWPK2 zF4S&PBCOc#ACe$9v*O>nCd#Fflsw^08y6X$rKA|*QIej3y!DV(7-=}RfjTRi)s4X6 zRT)@|v%qow#%>h&0EIz{9Q+_-^hdgME*l!joN+dlb5~cDIf8CGYp548#bt*v1yKEm zyyr%9ad%Bk+WAIzV)D0Oj)n8ib|gUArw;=1*0ls^#hdORuCq$Ccd)j#J zoaxm?A|K(iK4iKXW(BKn0t~IpgFLx9UvpL)XsjkNLqHKBIyl3n>4=0tA(w?h@Xz24 z8NpOPMfX-=YwEFa`6LYU2en~V|zH?o3#(Gl?Q`qM>YhWYMg!`e2q*Pp1 z2*32=T4@*L%ok%_z)4siWM<<n(7Sv{Q~k-Oj45ioxoaM9@*(C&=uFwoBq zy?`{n5gkHTFdE~uyw@z9h9=!M-hO6FA$3Ws1akxHLI|eN9$3*NROY=ds>^lIhLQwB(SMM0iaPgQv3mW=cRLx zpbgGj5ZQ;on2y}PhSsUx0uoIE3)FK808!=uEq;=Li0{{{u*r@#rmIw!0GVi9zYyKl z{@r<%Jt<7AKu|de?@x7^g|sMWx;d&+q96YNn3o;yBp5u*z3GNn!>}J2X)E;kt%s8_ zFQzG#!Gth@F6qGQ?(a1wuu0X(or_UpbpB);4@@%*{3SXM;Xpg_nXBq6ZeS)y2!|^?PG1 zHNt5)MA=}WGgR+m%-2*gOJDnl({4~DQAr)Zhh1&z1P_%gYAp;x`R^eKJ4ZGdJinn! z*?4*-h~|A9E6rr=tAIo8!)FDCr=tZ-UrAO8SUWO|s&p4q13ftzx7 z;{y~*#3X?Mr}t3H#&!Z9X0)(9XFD;ci?2}B7V@GQB}2<%m;ylztoT=%0o^(Y4FZxV zZO;nMy&nw&B#Jx6!01P>7Uq=Y{0eOF{{WvSs}zd>7STe!eLWvmD~tL8FYDv9{lQocBdlTDQdWEwg^+@F^a54#rjuVlygrlOue=9z=fu=EI2GkYO7C z04ZKef!4H6`~@wmT~B=77a+;1OUL|E=Up9?$CSZ#MibDGSKW?2yKZ9344aKHfUVJ= zrxEi(vM>WAB1|;9StEw}47pjd>X9>KV(xa*Z2th)rpfEfH@y^Wjv~1F%OLzZ ztW7ea5vFy`{a|czRM*BUX6y|-vZfvp@mK|kU%psu{n=xKZlgjHH3SQcoR`rkFFH%ahPJNb>?TJof;q-owmHM$Z+kl+nN^4$TRh;aV^bz?9Xx<0YU&z*pp67N>j z?}rYTN~fnVoDBO{W3*3__`tJq#~iIBou&}<(-nK8trC-0&Hu%{{RU9mWNUFR>tz1D9^C?&&ikjfwGpfXt@SrL|4O*kv_u~ zCatB^j60wXa82%3I-g-M9Twk z+5TAbfQ2B`SQKLSn7?gxLragoO!S|;@R*7hx^*wEU5ArM0zFFUEN?e~!4$+$I#d;JoT zg*lcs*a!8q!3IABYw|(z0^%4wQKwQ1 z*@bfr?&DQTUE-l*^q2v;re%g}x?2@;plL-8%Ra{E#62ph$^-$PhNqZKT0M|u1*540 zl44vK+W|}&z&b}WxX1D7o}@;wba2SS2K&qmj2tqiep9jtqSfUILWC~Z0_!!d1<4#0q%c`FW(cKe33y$A7+Q(?9^r3Z84;4!VT|X_wiQR*fI^<4S6wWf$;&$oo zuhi8vEcKOMfL=O|ItM`>&5*=kjx#Wi{~KjyPiS%@~F|u4~2{6KArt(7`uB;zgvWs*m)~zBh1=R#?d;Y zf((}wG)uT_cg+lVfLY)&%1=_^kg%mZ`zXOUu z9L%*+FG}&!!6kGvsifCLBwYg@?SVZ0pr;EW%H8@o?e#+~L8+DBSm2cbE3X_fjJ!Z` zDbC;CJB0P{*`r_%(|32gZVV6V85;(1aZN<7x5Ij!gFw~-mMI$4xZ9MfrtU4;Uv`vb z1Z%2Sn6TYYFi4Gz3BUTc)`=UNBWu`5X9qEN^MpE#*o9qj);I)1q;*(s!~Z+eep(6G~1yF?b2+kTQIr_o=tKhxsUaR_odiT^pOyJnjp#0?kwx(1AtGzr4TYm@` zkU8319;lMk2lV96(p42~2Np$xn?PE`9ej#e0290;cS;xMwH31YiHuzxVg zHsx}ZJ8|bQ%uO!_{#{ny2BFGPxcT;?k6Sb+wmcO-k1>Lko=v@=Rn5SpKb47ULnoJTqsLPW@lXcS&i}oedf^xlSydb9B^8e9acXP zgJXw8!E8XJDd>#~hXE&gct7wt2v6vx#+I)Z;R{L=&mWOmFU&MOJ^ujRMC6$1?<_5w zT7q44+BD)WVQVM9&zlURo7<-YIoLG)hh{}kkjWt=07p0C$hy5SqNw9pi2XcXghqtx zdxhv%u_Jko-QV;_%`JRy^wDWhpu8c8=YLXAk;*#wVcj z-;vz^0JB1Wn6hHY>sXfkvPmW?=8WT`%b!JeBnt2Z{{UD}>Q>%$iAPC|H5>`K&jws3 z(+jVxYI$)L!0EiEKhCPT1bd&F+v)Uk@7&(WJ2Z+b?bhEBE;feFi%sSd`=+KXcWu(N z9$}m{)@9Wd)sf##Sto!vm##89(3yP6a@H{BKdOFCz5+XN{p`6}r~ZJay60nI;lLLI zX&t%$0Jdo(##}RcDmYHR0I-Frfcp}MUg;^Re=Jfv+sK>r{0ViXd3v0Siv4=% zyZKwn-#Ufpy;kH2t+8|skZbB)OPI90J(WE#UPs`YXO-bUJ4=7~Y{dE@k2uE7rp8L( zPDWs7EJPd5QJI<+86w;sG-ZCo#=e(a(wr?X6Uj@W_7by(B#zVGF+tKxtze9LQ6Nr( z;z*R4oQW7zNKm~-OML<<83}*a9owio@IDvc8kl#+<8kD6Am;tqg%*a`Z}ew45yDcW z8#??v52iIuvAzZibY5SJ{{V33C}a)fuRtl@WV)4PeF({{SL21?lQhtQeX7gZCE_s^d=wHWoW2snFQ} z0Jx%v8oER$&lc0v#}h}Qhg3o1*xsw@bqhFS0H5^jAh3lAm}-dL%@4MOUyLcg+9kUhH8jw+2twz>zp(_>0X_EW52H{Ii<%?ZEdj2)=yksC+ zqN)y~LK#wf1kD@`W4=ZHVX8&q%g)nQ=eHERu#zp?*eb0wYDIn>Nk_o(UU^fT*_d&S z@-B$MOHP3uThnf;r^IT@c~gJjr2NbsDbSS!gL~3qqIEs*>?S1dCon!?LJO*hloCfs zs4Se$TzMT1XA&-}J1GtE{Pqj0ue&s*UW*q;fsa1KN!@@m;IFn72fur;5qU}{(Y(IFe9Ih&>J?o`fH zI=FYv!lOI4wZ`Uj5$2f~(m_(+FF&VKSxajAyXf!w<0(#1kGCOW-yjmAJD8Z5$m0pq zj)-Guf+(CO%tjaVC|R4>AD~XJa?=^dk&%5Mhl?Ew1HTL?0AqX9(Mj>gJKbkuexN*E z@(>7gKdNB?foZ+OvP$PO455IId1Kyc*;`buIuTaE=ysQ3G!@6E zKfC>yQQfc8olf)+Prkr%be7{VZI~jRKUF1wj=Ca}NC2^0opiL|1#N~e&cnq z!3012KD1SJX;H_vjB+qkpY4cnk4+dbUCK+uUQ7l>--RZRw|Y-92}45$XIuQG-8rQz zpDSg`^5T|c5ltN2owzQ0Q?OIo*qegi>b}s@(;NQllbz!U$j-~*UH1ZUIaaLeTneZoDKU@oq4X@b31gVM! z7@_wCv<+bCwUCqYrA}P?i7Crrg>)bwCaY)_mDCn!njCnU5NhOhh-C?=EVz%-MWHad zZW4=UZ%sCSv7_O_ei2K?Qmas>A4@f$tNJmw<((+&s2tF@Y=l_b`_vC|H-=E$6CpvN z1WyMd%__;>UD@sk&A43YWM#Fz&6`+;YM0XeM@mCI<087c*At8qgu(psF`|L<Wn@G?6Yf%j&at1)k#)bWRQ!2A~dKKk!VfyT;K;}@vEMa^?c5{$#*{5d|dd1rI z-Rm46777Yp;Kf$Urm`Ex>RMXB_nz^-+Px4SA102HI^Lms@=(7&5qXNb33EEWaQ^@qL!3p_OGca!B3{sJ0))nKwO!tv ziqxGTxW*4r%T@YqGg?l3pD)yBm7Th*I)s}scpf13prddr(huMvwXkX|-r07q{apkl zwM%=OwmkI3sL6SCPKiQoty@_U1Eyv|r+wv3f2d8zPI+u`AUPyarg`fPp9-t01LCI& zZ(hTYT}_1=^~22(T;sZ8s6!-X(VQ3_63*m^@>Cfoq<=~&Htw@O#zpne=Q<%CxM>^Z zP#ATntfoO=Fg&-Bym$Rb&TLVNlp;=$iW4z=FGqAKa*bk=zL&)d_;zos;Ydc(p3b~4 z(3ce4O~`tXyi(?+RQS8dK!Tq0T;daspc%7U*0V^!?K8v1{m1r<<%zpm0@!jU*e-+U z4xVECnVAc2NXFzAGH937yzHEOXj_H&RYB|j0K}f`MMV6N@W%7g*gu&z4s=C|`idiz z_5qJQF~3~a46E`LYh(c^P-fdk6|Jn{B#O@7l{Mo((^$`E4%`=lc95ucQy*(Wx_*0I zD|qX2K1LV0GZCU5rQE1lM+s&oCqVB{s{C8ijOT6vs}OR>HYa;d5z^_(@$L?EOnuJtu38Z&MX_ zRy1i>Byp6!UMxjJeQ-9!ME6zj!lrZegHC!T^FZhu(rBK!zWYXJ0?j8M{p;DgXDTcr z>|xE7hu&@^Vh}XN+%;_*8u@9%)TPY^N0EkS-ii}wih;Qa0uc^t6&-E)E2A8|Kq|1; z78E!e@ghSiNSj>{&(SzZdJm>K5K{c}uXA@VHLuu=q?wymxL|B6`V~?|hw`2y`t8?# zuEx$dtz(Ip3mBaEzXOi;efO2hVH$u`FQ98hX-Z6&GUTrlBsH>M7lXxvLwX78Aelna zkzWSIJmX(k#7}-%>mDnzR#(dHq-*s$VkasCe0$+`qJCb{DzvXx?# zf0(&pOA4C3m76Y(97tP<`^+Li&T?e4ccLF% zz)`qUS9#7tA1n%ym7-7&K=o=>MjFw#*!2(tY2~VCbJSOS*RESt)506t9vDh zkdw(h)nab^!S&e9d;5~mF5JREtSBe~G%O)vy;qD{%9qjuo0V+G{62h@oxuws5Z<`@ zlG(&JnPKw>5v*Ky$P*-Y>lsX7%W=QzeNF)@ak^X{VOB zepTI(G_%emCuNLP2*L@U=;))jfcLO71>8ONaAg^cC`wa^YY1Y0vGfkyj8iL3ZS>Dk z45mzkJ~cb{SB1`L6B^^o6I9t$QeyfrAAw8D1%CH43pobu;=Tfx9x2yPK*@7NF<01M^6F)}06K@od4)u&fZe_J+WcRwnGFOJ?h4DZL6Q2z0 zbD@=wBfuhTI8$;a2mb(`36TsWu*NVltsH?UinY?V6#C3>uQ%FjeimN#O-8Rx>GW@A z^~WXOXdV`~n6tK$ zp!jXc)Y@a;U2>F0Omn>HI;#4wB^<31lncjg2m9zk zLG8#pDIi>jYPL$N+u5@cD-4E*rPTEk&$Ofz$Lthf#F^2Q^XKAyxpoAdNGDB z6N)6up_)SZ%VtJGAx+${Wjf2DlWrA9V{5_UVZb)T<{b>Si(0#K!r@S^O!f0N1Aw85 zBx^_R6~Aaga3Am9BlsdK;GDV$c!Isy(gJG85uhh-Vb`l`m%zUMBKU7?-0Gmo-5)y% zYGkOy#6=`$`<20dp8m|Y?RJ1uwVUi8L&57m#~ zhXrMy!renB;NAy*+>Nb*3r!X5u9Q2kBb_X`yJLrFmXVDpXT=!DGyec}oguSNeLs-9 zE#i{{bQ4@2Ngk>PZ}rsNzRL#k&ZqDDWFd~Var@;g8O*-W`(hWV?0R<~pt}O!g#719 z-Sd`8T>bFHRv&nQxtSvhhK-IX)Wx~c_UgbdRQ$y5S zliTVF-&m}4429Qp5nBPkn>zlEeF6%pXK3laY)N779d~+Zy-N-Os6P;ulaH9YYdu4}k z)Akux z5dK7es<|*PatVgx#Kj%Rn6v|N?);^$XgxkN*eBICL#`MJ*3}RLB&W>SdhRnd zUJ;2A0jOEAv7y>jyOc?uFeRdkLUTJ&^_MhpA+4{frI~7Xwmf--#`NmXHJwu_D)+i%1mR0`%=x*E;#mq4n zjL+9Y{Cl;^LP?5+O{pWFIb8n$#<0O-=CL6^rph$e+ya9KXAP6U?3qgdd!4^@?R3c- zG=f;&NhLAg{qO$(763y?9r{!Yu!}!4R$`6M+y4L-sv9@|09iFKCzCrJE?I|}?Hx|{ z8ZM~^ncmRuDgK1jq`k#PF99U|vct(Rw$pKvkw3co`g-`$0t zK&ye3RjChd=viIn-z{!-ug2d-A14n|?zmBMJ0CreY3Cbo=Ihqja{O0$Z%P>BK-0@{ zx$Js}mQE0^#VqqeUowLpy+lMayYmEDXQ_1EQN@|CSC+n&)CPKMvEiU&^I(ye>=f{- zmBvk`S_LvVOt>Fc%aqM8{#CV17kCrc$uB6xdK9RtcZlji-w|;ffwe7MXjyH}*O_e? zM;574vLtA$SneF+kISoVd^#Cc9-*CBq04yr)el#VAf?Ik@#q>B!iHPyO0iUIEJ6L^ zrit7B=0h^KOTZ!~X!e>;U)0&?)Q?$KTHzZ5(3t`as%3fO_AUPac%&WnmG6+a=Afvs z_}&!j(`R#Ng!59AFjP{iY)qGe^29>K=sXy4hUHx!*G|g-x~A$tbdK*Z;qmvDwAptG z9Q0V1W5y}UDArtw!dM?kd%l1SFCIp4EB8Q$lIJA4;KE9R70>w23#D1S0U77B9*nZokUvcmen{WC+OZ%B7mXD~6%W*^XVd|oS{^fj?nnIyq?W{Hd5`0ZJgEXGZzU9PQi z{{V{sm>sYN!qYm1cuLk&*&n4MQLVz_`k`cgy9YS8rEVT&P7&vR{S0{|B`B8ZYhO|? zCGJ}#eNA{^rAHJDjWg6937l{=gPg4R2=3mXt)KT&<47GKJ_7!NfwB$?y^A>b#`zHv*Y68zQ=7qUc`MtP<( z1xlp?T*j?);@o*oj^_*fuKfQ1q-QKAm}+?mJc_4_T+sf6k|vRtgq0jDHe*MkK#;IQ z%_37!l-6bOP&qtMe>X}Gph^>F)@8_G#Hl5OaGds*-;*Sz0l+V1b;~Wzs*&aNlBNkM zF$#L|UZ*J}*ci<|;|Ko$&~t&iSCtq407Jo@DjR&q@4MAj(tSuVgDU)UdjrgbZ5X7z_9$=jP3H5puhX=` zLZ-9vSGrFT7!3KB_vg^;rJ`>{L2x2KV=TF~*-(v_Fu5UqZV$P)$SR^Zv`W2ezjU_V}#&UthN7-9~HBEV_9i6g0*PAj8!+=W~-_R>2)tT`6NqDw=s3RXy;a-5e-uy?? zNd;Pgzx!6XjPp%s@aaa07LIFTA>W)nE`&4uw85CWfrn@E-EA)wLH0mbD*xwCf`vc`Go&yM>?rX5js5W6rOiwF(0QTqu5kv86;$?NVx1X|F4 zPRgL9ME0cdL*?)jrkQYNtLeOcC*kKEr!h}{CzC$FZ!C90S{RXnpa|j)odI$aio;{C zw69HM#@Uh+GBtJEcD&S#_w_hwn2caw#Rx7$<)F<0P%6i+QZOu~8mRy*UWM1_3Ls}= zxgo)XDY(QX;bFWih2Ik&lnQ^_qOi8A&RVBgUbJ!^_bEk)k;Z>eNo{C^&iYbxcr7p-s!9(2mX6zM7dxXn$Ej}iti`(0`&*0RhA50G`)Gp8^8xqvG!|@PI7i+^I zk}!S}hg7;~h^_9GaMRl$f;NuLcWsMSsne*LxmE=rQC*nFxZ@RI^Q`{R-NlsX0VMgz zflD)nLsMAz4^w3s#}(;DL$C%H8Muo=e3$we#(CV_DwcW9%#S3A2Mbe#4dONEADsa{ zgdr0QU{fIki6!CwH$MWIR}wbOE!r`#+s|GD0d^ei8lh}bCZz|DmY>$grx;idD1+gO zRIDv4RYgQ6q^?LVc!h>OUO>@zo*n!j*JXI^#_ahX$-zY)naX!GqhQi3TyI$be=e#i z1|t{Hill@1y6ltu>W4*8bzx_}->Gn=wCAE;mqD|JlCCHkTpASuXQ-DLrN8 zz6Pe2H@G}~<^%3+Q2f+r34`|2TlE~Q`7BFw+;>hLpze5a*vO9dNZa;P6AXgqhY^0 zQ)jfoMb@i<#o1JOVdQZ0F+Pv<9KWx2qb@U!Db?U*9s$j#X9EITz&RP_3lvoMhR9gk zdG*Vf#k7q4kq*LBt#>VFzQr)^B(l0}3o*g@?HU*lR>JKCEeh$}3os1oY;Ffd=vd6R zatRER?H}0hVjl{3mN$(6A32p7ASlcs4&65cd*SPA_$LmUt;6Ax4tcl_-QDN}v+|tZp z8&-e(Yc+Zm<*J`W%R%ZZJWLjv$*;{xc;&gjFLX=FjSAo|ZT9bld35+Aa&dfiVRO}_ zW9IPi*V=(Qe-@3Q8~8>D0V@3%)c~XyF;6IcgjAt6d%ZpLT!xYpFVS~}nQ+ofdWngX3fd}PHS<#@qK%0g zgZW{g&*(ON5GNzR~msN`K+^mQE-*xEOcE$?^q!rQ39Vz*g)RH z+8@GG!~y59{{Z2u(DE@3BlbG;BZ@>JcDX5+)8OdO{^{|zHQ@A%m#}ue`PJp@$vfox z3J4Jpho}PnA;QG`{lG{KLo?Rh#Dnzf7X!7ek5kDD4X`Z&0qV~6UF@t5H~mE;JI4zF z)FJk9liVF@z}6wqf@gk`;?^;zDpQ6%aIn5QbMdf|Yu+bK@_!|EVI7$ctRIcCy$8te zuAZXFK%;#S@Cjz@1Yrv1J~&|2rn__Q1x9W*3>$dakV0qp@T}kcfuJHTbYdh>n5uK!4s?acA#p z_9sFgt2l1A1oCAu@R=vzXLWXVcmhxkvX(@>_tZuHLf5u#BeGFni6Vv;!Nn39(n?Qv zY5nMqhD-u<;t&2%G7}B+rXTR~v=+-5)sRy|v#&J-Z@#tTEJfBdaUCx`B_n{&|1W>T36;;r*%^*zjG#jQ;>u`~Lu0PA(AUiaAM44hFl@ zXNHR!QP;a*1pfeN4nWfG-T7F#)I!35-87~?O-0$Z@(S@v&Gi>Q^V577Laag-iJ9j* zcD8QOoFNiq(L z%;tv^lIz^?3);fWNO=hfC+Z|kJ(0c)dnEn>)xYYM6~}VXZBC0EM($CSFS5EvZCawc z@nTzDu2e}co>PaeNpskPO-F}QpM>s_l9l{E#8sZ3(;U}OG9FQ!nc+rJ*$kG5!BNAf zrf_Wcuo*b?w_bb{{Sm-`)1JnC;@2Qh+j(A4*a{mB_?YjFvXvUOa{V`ap zItJcXL9td-CWr(Faob<@F&7zXN0HmV=5a)G7eFDs=ml+BZ$6@b)QEmNiSva+Ugnm6 zGqcpWX$JwdezUWIUAQG063E8ScGR(kzJw}8=e?c=!YOyiVeQwfdA9p$&78U_{{ZGU zeGutijcVSrqyy$?=29+~R(^K68Z-l8K9LldQXSrH?kMWGEd6@hROxJi(47ggF|JZ&OyqqM07Bo z=^Qm6A!Z0AXv}}X<11?S z43z|bB{yZP*}MiOW1%lV>-@ao{`8j`Rr3%tY~0KXux^#s@_|NQ}vm1q*?nY;w0F0kx-{Mh-9U=_s zt0GbgHB-Axbph^&TMEd6G5l)wo^j~wD1`3D4h6Tr4Oi$afOufC3c3$CSVt;^c#G=o zuN1!a*I0scV1t(a47yR@8R%9Jno0RFgmCkTjn7oB*Env=g&c5>#%!W|=S~|LpbSA* z1X5>xF{aFe^!IlD`WX0uvyUE~XIn@s%JwtoKSU$apV~gNKRO))D-`&K2hv;xg>@`W z*>v0s61R4bTtk4zlDYB z8GnR$YW8~I-)MtTW{|XrPj<3$fa)-A{ZjJY4PwdQt%=KwP02XM*cUE(rV+tEtoM*k z8->OnkY-hINl%FGY6}ETg|NK6SJP|t0Gy_%aGIns{{RQ-M_m>eWMC|2GKAL5VzDfN zO0u#nuNS=zL+l9Kw8B~XO^Oh9#r=x508lu3n)@Kz>J%FZIKljUuR7%Hc?PFh6tjd8 z=QjX3PxWlYJ+9f6MP-UN3>xLGlJS$B%?DFT1l;4|(8Kh5mhbrEIB{6Vq3k+=8w5*T z20?|S0yfbs9~zqnVubh;BDxKpY7X@Q`shA6>F#3CRlQ5KdcNIxyn5oRN!p+_)cG** zuj#CjjlsUamB{>z%wwFfxmREKvD%d!M$X9Xn;r9({{Xvt?%30jtU#c$U3j&iF<{F{ z!6BYI;K-$>Mv8m289+C|Cf*a3&0ctRTZLdm;8R0i{CDZEU%QCgDoLOOtU6z@gv%Xa zv5MH4xKnem5JiMiP3R$0Q&9mvSYKZUgi3E{;UU&r>*E0ZPw`jw`S){o;fGj?V%^fe z99(jp#Lbvczh~?j3totz_5NL{Q~vwC@o&05?tF?1#BQ_Iz(>Re&X&p_10Scn^2<9m zVnWVfNL0p=bzW?B!(SS?oJy`^o30`%keslMriT(ie{HF#CFNE}_-V!`Ooq3~{M)Os zjx61k`uqg15%$s~XkUDqYJNbe z2R{YgLQ=w6pub)6YwMO*uIr3YL=e5JR&CsDA~LvlsMGO2V5d#Pc`u!tD7!ePxiut- zMrvcmg#4Ha^yw)QxwV5%1m$M;+)UALAZ}GHfErCI(z28bDn_sDwZVBNoC_9PFI?|4 ztVp+RdE3=_y~0SaNjDvNwvMgK-vB7dcAa}M#)V(HiEr$ZJm7p%;C`8L2;JvT8zW ztR+m(%#z*CQbc^``fzGqC?~ImjBSpL3XvNwO5eS~?#v+ruCCb#TfS?wM=;OJ$Awsz z>eeAZsW_m8jCz0jozy<%(O}hWqQI{Hv}2>gsQ3-(m$k!uL);a~C4+3*DJR6>1HVTi z9v3^mCC98iSQrV@(OM)het=M2dH42tPNqI#9lXH=*PCIg=~R(&z{@+q%iN8KBb(ZC zHz`87f<2Zwqd@uAUl8W-Pz@2*oUTtBtkkeB?kqDTyOsC4@Ix;ub)qBER3|u>+y#!E zy_~yxfA6Ezq>?_s39b}9kBMx(wr=&amW_J?$`0Td=>Y7}rC|R6HXrtV;%2;x1u%NU z&2hSp0t%&cAg`*g$@*-Zq+6bRtn?w}o}u1hLuq6!zYV~Gt;6`L zQr)dAI%?NiFVP1eil=Y|y&XAPAq{N{RW9BcV6j7nt69|@hHe`#H{Qhaud_o=WeVPo z_Gfh{_RYPvOBsClosxq@SA7(wdm$LcUXEy1MwumSTxYu**l5wYh#0xJFNLrz_IgKy zc`O$@*Uz0H{L;9&M!iliJLw$-#migDKJnOuS05~=juc=bX!9Ip>&^LSw%nmzL|MOa zQ@~L#8fCFxsrosvzxU_rK8sMwHfy123B&gEDBm_4cyrpAa^$)=f2p+N=@jm`?gvXW zC#=O%`TpaC>Nb0((=CuEBw&T(au(GS2w1_+n98&O|k_Uv%R|&!?^%WbGY{3Ud0*SZ;CbwGza0_iY z1$T1-Ho%{uubk6>yoOY+Jf}{VxHd;UHnm$xNih?vCYjir$&V%j+(AXTr{emW!fn+& zr&26`efnC31F;wz+G{MTa(^`ik9&*nDFOUCRp*Pjbk0rVA zv3_ZmbI7ySeAS6zfv_jgv$kW=9nHS4{Qm&>0?hD9PNXt4$mtw8Xno+?xJfqrDdsES zFcthUB>k_gRlEw}Pbl>LQFlb=fFiG|h0n zA@KqBRuTji#U;kkCab>*1cbtDe@tE%GxxIvg_w5vxaa$x|Ghqb?|#-{b2Q8yw(9kvNBA%Jtii@fKEb7jH-hTsY!}J`;gz) z(o~^~^tBftsSjfbQdtIm5!n1kT7Wk2kY_bYkDA}8GZajz zngA!iz{k*nkFG4y;`Sed!}e|LG_tr`y1=ftxMo+^8i}zq@;eU-9xE=&O3^zKlQt~1 zXKApR4?dVH*dDQc=RLDMk!1c)cN@w1lI*j34oS2~V;Z1HlDLfmJ!0l~S5a+Wex#-_ z1-;VSuBl+A9lxr`?3VYq+*AXum}~xa4o$@0wIXO`^uon%3`nnG$(@843U=lodLCS| zt2dQ?T7NQ9q6@NqFj2N*7OyX0-!kmd=;yw}9Uj|?{g#Lg!b*D@$wzx`$39Kc zr%YuyBT-f6MrBqmG%PzT{;~HeAqG4t1iW1hVd^MEIKB^qy19Wy(b7`IHr#JdUs<6Ky6p z9Phuvdg3O3TXDw(Gf?XoUG5O(e|(l#d{_Hlg+Y`$n?{~*65Gc6@Uan`xnWF6F>%!| zb(Jw~F9;pj&G&|`CT>LH40&i}b8#{d*`i|lkB)LA04A2DIk?b<(CSdSz}VSz)%?AW zol7{{uYP1Gl@WQK%Qve^24{+h+7_YpeNncySQtn6RK);^?}q;VT*r46;6k(YWR_TH6GvhGZLP*q9$}xn3v-u~Ljy4}YQUM( zQkstIcwt0_e!DUG5J`9D9}BL$?6cdEeF1r97uf#*xM4hDt@wfJ9h^EfhuJxIIQ07V zHL|RyPSmWi{H`z0L;NGq)EIf@qI874VCN%Ga;kW1zkJ8s^!4ocZ>Nn9n2+4 zYF>t&v-uq}83+s#iNL|l57SZ=Wi;HX;q}&$4b;cL@s3$ZP&NMm#3bj5@5YS|HBK2q zf}GUpgyFf*;{h6fru^Z`UEx+s_ghp2vfmBUiT?mxISyNTNU~gcQsY>P6_G;KLim{~ zUvYOsOj*CDKhU#c6gR!WCRr&4elHET{gd_?_lFgG4FrVcJQH68*GM#_6!`?#O5KIx zCuhclxef#}b`%8?_H6K6F?R8N<#|$X* zrD(MyZUKlZb!mWDwofXbV%T}4&8YHEwy7!%dyB&ZQc`H5GGz*<+aLnP!e|iKV6+L9 zoO>8^xx4ezYZLg!z(%6_@ap{8ztIEL;YKCzDCx5hpO{76m9<@#-tA#-)#1rXm^%1M zw^Eg~_`e-P#`*jqozO9P2LzTEIcOvh4_*7T*x*@jzn80WZP{M;7>7W_^F6l}=t{}w zO-A1fCE#Rw+?iCsn29ZgV!~PZe6Lzf4a=eB)GMdskDVK;C6cwahOEbCb3wz@^6;?a zxa(AvclV&dR-NSLtWFRYxPg<}+mF#k=4Nf4Bp_1XvPR)0} zS?4N$dQzMR{xc-+Rm10<9;Lu#!niMm*E^6+d>(DS#ViV>_x*5M)g^fNto--lr;W-3{|v%5i1|E2>D?cu&(@%A=pzL zVS09OPyOSnsja7f$QZ}hwd7p>@JG8pM9fsS+>-*q=J3z zp#wXk=M>E^wC65auN_~(m=x$~hcY_SELZPCW9(1kSFzF~X8Q{%+1kfRi-nlzmrEm1 zB_@?z{<&_CF^+{B&oG8$}l{PlU1SPNIQu<;8Gt1q!qeiAqNzGJwgcE!gaV3H6 zt8n>HjiAaL$Og-yP!6t{6m5nhH+=^*j>+Jc1(o~Iw(Dfh1>`ni$6QPfkn|8wMLmlr zt177TAHv2)hq0GG=jM1*$$}Z?W+uXh?lT&=#G!k4YNdjt^>R8Bv0Xb7UU4Rn4CMJN zf9y5-OZTc8tE%RV3%zTi_7bfg54&D9k|pE#P`|s-V^$dJD_aX;Y+q@_Ct4gSUR$-2 zDtD=92Asp_NwvbNRU)PC!ci2~Ckd2&_q2prg1%?!0jDWq6Nmg9I0}`KNvdnb4cmqS z2ot8?rS)uv_#z05l%Be6r;6WNmRp{bh4?vV6PtvCPq zS2eYJD%^l)Ah=^EwA8Ch8Uj~~WW9zA6@ zNt;;?f9*Xa`F4g)w~c`*sX50v5t+aXOa8MO`lfUlUsFv_XAd&^#_Eh8e}o&@CYN) za1POCy%^j?f&u?1na5B^^AkW$h=2truQo{X>Pusudyn4BU^1n5H6Z2fl-4C8nNQgZ z$~*|DMc(F9%xz^-04>tS&Tc&9e4}5P{nd6&DPZzN@F2w6Hu9sMN-X={=AQfT_Q+y6 zT9<41SpGB5k-3mcnLlwS4i0GWlXqLRcdV*U|EWmWD@vtlue)D{#e|Q| zmT7Qps3hJ<`J8cA&S#Rr0?>#+cf>R!L6j3%Uy2QbCNCS$Q+-DNeb_$nh)LM}BHY|P z*OsQ2n0o80lrAlkww_K-#mE`>(4^OZe=H(D9J!q$k$X#s@gjSTg^awoTwS%iKEgo) ze$GLQMnl}ZBiSr;`crX2=Xg2>WMa#RV^C{IS1?vB)r%G1FBlLMB~K%8h!P%leag{U z7n(B|`(>B3m{80fbjBgzz2VwXMnOJgDc}}o$ajMr3VRjZL!MzCRi3fBg!MVoGWp?k zy?1Ec;49{xrHu1Be17JsIAogSA(Z=jIEMZVi8vEaaGoH|IN|YR4zy(bA7C1L_=Xk(m8XhW$xp}d*uPtLt+(fX{K%ImY58Dn>oTKH zpC;5Nk4uj(gm0gJ7$qUF3X2+Pb32-ASg= z&)VhO+W!w3uD>+ju{~v7YKmn-A7xhvsPPULT+X1j>x9ZxNu~jBR#$+}Ua0EA9`Qu* z?e4EXqKHbOSfY;+P1XKfiUH}GVC|X2xHl13kPeZB720r|>s;KnYvJ)1Ldfm4o!K{f zpG8Md!tW8RiVxm+pSdt{(;+98XEVokmSH8$_>eB}PFDM1bq~sQ7F-glI*-(^MPBc& zC%`5*03lkOZNj_$f~!TKXd4xiSQtR`9{^+T({m-Y*qQArvXkqr4|cAq&&KU>umqU$ z`e_}X9F*`J0tNCvKyVNDYr1)Jg(n>L2}Gmhfd*U$?ad`A$aoZ zv_4#JzOaH`oj3z-(+542yA^i;v|566e~ZpU zApwj98*k&IH<*FN$ObV4+{$ClEgtn#b+l}XsxBnu6 zL%5iy4=HK6s)ST6jXePX!YGGlG#uW-sFcU6mm;B7X$Ld^EL&nKO)@V-AA3E_)XmS9 zhYs5p!K(POyr`xEFf4H6>obA&M+M8#}saW!oH18XCSi90_tS*c0fC5lF3=S3redR5d!`}4!X9lBRNU^2&boI%U9 zE-_oo#=JQ~*)&1FZuVP7JEaO;Ea<0Y=3Ioh2UQd*N2ubhU$hHxoop)iF)J%B^)(Vc zyQXfgU#-pI;Bnr|EUzcK!PHb1=pb;*)GU#zWq$Qbx8tuO6u&?%G=*gz;BU5(h_OES z3r0mj%j+#E2Z(s8K_O(=6V8H@MI%HO6D8MgvkX$EZ6C}>8?7q=dz00+O5PVH7r?W}?;D!J$z zvlm70;oc}Ro@rU$d@~!V zo0i>X&|yj@)ls`><>z2EMI`1LaKm764I=-}703W7f$0Is1Rv>#$dCiq!nH{j33UeV zeX0=gDYr097K4+}sOjV7@D8F|IWxwdnZ`j<%uENGfTe3wHk9(9F_VjGTKfA2T^3WZLI; zif@%mb{3|%9{DX#7nQn%Csk}%*-;cR0hZ-n09|OxQcV1Pt2T zuZHE-W<~0y10)PyK436j!Bnk8%3B3gk=P|ZC9`2UH-iR(Q3U`uyVt8QxrHE*|EjlC zSFN98r_6mH(CVOhQb19ltH}#0Uj|{i$`V$kY<6_%#>JROdYWgZ3QZJDCOy#I9voeFtCil;a4>Q9AL)@5ocsJ9LPauz`RrjlEj447x(3ICN&Z0BcLh+#~ zs%Oy1eG>BJp}27)^FxTPmI%32GyOOo_cv6W&-fU~l>by^C&4P06$x@LfAMFG);CYy z``8FkoR*z>YYz1Z3}f+LSa$ArQ71TS^ydZ(NLUWUdxdn2TLu=zWkECDx<*S(Gj)qo znM(mwQ7sOwm#&x(UU!~9A_VMwzEC2O@NK8daS#wT4UPTc(x$Ruw?SQBiPBB`B0%xg zvt!^kg|7B2pq;7s8Iy%DjMmizorP0juOyQ{jABI^NJ1|^={XI?b}d%Z#JYF4;rlqY zhhRjsxsLE+o2Q5Jk(Lb!ZNvAPvq`ppi%Z&-rF=PJ1{07 zG)^|MU}<|K9#tHVeVQ$l3WC9W3qi0D;kNmB2>$^F45n$GSgOq8wvetOjt6$>T1k6< zoECw+9+~oWt?)zBg)3GJ#`9E@7{x9=*r+aIy7&^68b_PO0I$%h--3=ZUfIuPlZ5;gW;m6ox3d0CQt+Mwml zNDNScz~MTzlPY16&o(9lIcOTnJDpsFMT+=_~@+bWrYk z1bsT0ot^p-C)LVS2M*()4+>0?j!TRUWXYVpzs7_w94xg;Iew+W%tfm=zOwv?;z;v< zf9FS18i0(><2xiL3FkJy!E;pwm~yU{v#Mv^Xo!$n8nw?n+kN*r9vet$Naz_%B?M zcjg8;jqN5FqlL$=EGpZWplxR%S4iBo8WNGCcGC{# zrGArFRe2_;z|7w>(~sa# z(%@0-DZ#VMMv`X>oR`qU{8Ylso*pr;SHogBfZ!*3xs)O8O=P(n3f53duFmPeasE0y zHNEs+`kltnZs zRz=z|ixU?SAc95!=VZb(va&8g{-gGBOu{R>=~e#$h7pz4!TOUO6b3%?7zRz*NM)w; z{aX7`oc1GWJ=*Y&VjklJLz8ENkYz$HhA&;T#zum)$^^eUW-vFaL&PsK774U@ z7DJE2mYuF6WtvPvi8nuI!a+yQuu6LW)z8uIvr6LZ*rbtpbx% z3ZWu`sAd~z>E_pJO@bI-!`^a{Pz%TL;@YOQd9fjk)V+J|gCP+<1+NE!g#QDx+$X$Q zhL1p3NwXVXXP!Nw8WmUhh3{~+Iu0OLe?j`tSy8=srEpElU7gr=>@;QpO$2wEb-nGC zMxjk5ApfLwBX%NA-CmLS>F;m*5;;`u;=J$rinJHh*)6os&7{U(AWrY=aHF$eL&+oy zV>m5%&-DzhWU3_Qo_AO6Y3sMsL{B+JZP5geglU}D)93Zf66;X+Tzw1a{s$;2-(rB} z^>k1v z&Qvu_7}p)uKU*c*^}|gh9!4#za%fxI%vW63A2c{WJt=AAXCT|V74c150HY>@y(wgU zRpoxm`j6PN>-?LYuP%5$^`E*meAD)lOtD+TlOIru~MP2==E-QPdFY@6Y_u zEA8}*>OThP1I7XR`$-@fjdjM;^mYAyp~v+qMcOz)|Edn>hz$;$o}hu$3(g9neD3bY ztW8HVq&a;)70nFCWyAr9eFwqd*WDp_XS#Odo-Kcm&lMYTH5Jaid`;{hQEqOw`#a;2 zp95hC#Gv}v;~VvooQI}I*YM(#7RA`R!3HWv(^0RJhW`QvCj*H?2)jTh>3ExIVPTQ-!7;4>4i zV-p#`eoApAlDL*my^9&hY4a59Zx~Iuj%10|yL_gat?xR=SC2xRyIoo=@e0v#;~F{e zM0^Ic038%t_mbNIdi}{q!?^8hls!>*UWNK7!EKI>J`%_A+ACVB<(C2>r+B=cwy|v>Gdb2pn8S%f120oS zw@c*QtNB6BO7nu7OY^fQq}c5!6meNmw|U;UdJEG{7_?x<(%o-<$U^gw4|405%MRVQ*q# zY{;6FT@K~$Ix=ssCoy@m``W1!0gQ}gt+4U6Mv3RDb+%x*zR5UJ&T%&%m-d#6-&{yF zviiB}M;vWQdQajZ4@o)jYnIpQ99xlE=}TvUkRxco8G^7xq62+7m7bbwmEWO@Wc!o} zc~*6$bMs2|G(4$^MUdKQah@G22h0BLqi_kK$atQ{jixGhi9?ZP6zlHa{PCp!{fN4g zcIjRa19{HS!Wh$z|0lI#wNrIQ!FPS9J~%DYBuZl~Sq9!!T!A<{-14TJ%F6ZYvLEbR zCF1Y)YQjyJfM-ZrTrrECBI{>f@_ep*p@Exe69umj%PJO67%EPyMKl-+Li?4(q zJ}X>dqM|)FjB&0O=|aBjB<*7^q{b%9Z4`fF!BkQipejT>+Oe=WtFvYD575| z_N)nDbad!JRLk|C7Q#J5C{KUN`j_wk9_JLT?U*icVASYkX1k2z+lV~6L-q^gorgZb zkzf-doW3O`dwREEn4eMeWTC4eIcCK^1rYJ?tZ>HWRH`P3 zVrWN3x2Jm$fB>tfNp}wFJ0m@l1^^-6O*!uuCPGzAZ_STP4X|PegKY|(x*cSVrnw*y zA0yY)wGxm1b29jv;g0|dgTg(Tty#6bMuWsEutG5T8;ht3$FGN66K(*=e(VCV@au^=}hx})c~14T2cADrXNF86lzAxV53>Qw-$7{-n> zF=bv0x#FioPRYX&>Osj4U`*i+y%BfBiOpB1jK02zCqmc8aqvy0kmz@JwU!BW9OqP+Fk>_; zM>VfNU;LV3Y`LD&v3WQXo!d#{n8o7Y1?U0C0eT^~_~MN#>nvGNwnCYvbD=d_)ZxQ-gqVP1@yunz|M+<&w_!)WgdYl2aRt+}DT`8Xu z4MO(HKD}t190{)%F>j zW#3`d&wGPV%dDIMjY*J?grX(iWAExE*|Zr&9aX6JMhxqxz_$batS3epK*Zwk+x$*{ zj5&_iTdXi6Z-4gMpt#vdyEjV41ewDT;TH zdgMb;1z+#FB`@R_IR69Z>7fhA4h7fw+$ab8w-Awac7yiGMt!{OQK+#wx{V{2tkmEg zNEI!m-hfQe@I*N@JlZ-C-XF3mIAkT$hxA(ZB0W}W*kh3L%x^#G;y!QyiVtk%E8Lxo z)RYEQpaceDg^Wl;?*8PAZI~UBu%|gRs#kzp|Fcm0kJ)#EeyNQ_o}1g2XZf;;Ym1dG z#^d40fp}!7?&JxhUbQeEjMp%y_}qPJ7gk}H%3O5HC490>G4mI)$XTC$W!T8{YyXCE zOf;$;DXea2X14y)gHnsR;OBBjViP=qd+G#v z7%XOSlZAcklAbZ^LFp}Z$%-5D{MiZ)3b}t8dnxA)&rI(AYlONBWQLR`unvcymx=eC zIWv5mc2>|DAp`kv8ZQz=Gm$)WdKq?ndfZqwB%)a~a{f)h>bo}3v2;)LPqMf3hDV^Q z^ptkmz_r;C?doxlgALrf@+l-Z#B)e<0n2V4ComLEUYu}20_8U!RmDy>fr>aGGqENb z!4CAKUBHzUWXodqwE!0t6H#_@oY;wE@5{`lPOICk+UV33Ii*o#oFJ0~AHD{>L`j8( ziRxA?y?%tN))IVx<+-ZLe#4CI;7VDIusN4++a}L4D$j2X^r>ss>VYsM3Zof5l0zcc zg92A&X?j7rXd&)fdxQaYd;p>nZ(agZL+UvQkIuQ_5n zdU@M(s>W;+ghBZT9Z(Bv4wJvx^Gv~4Dh^XX#32;RkKPv+*}UQp2?K|x2CtM7i@JYG zG9g4$b7KTo^I#UYhD2j-YX^t8;|{y}-Xwb$5sIeb*T7AYUaGC%9&}pO1c&5>l}&cT z1Ph5}^P)bE*XP^qUjxPe2jDNugYnVm9ybeIb2&RS`wA278>noBB1}81_+CJtl7t<= z6^v6HuXRO+`W?z*J8MtqDQhhcRwzh;s6c+x%CUtU8h?E!>rt}^7{jO#GKE7zx#Z(1 z1mE0&_TvpV5j7F`2BhhnWKZxbvE;!aK$yK@UxmUxH$L6{;LRaOmxFuWZ*qEPM$Pvq z8ydmMm9Jx27X@fbQGK~Xv#eweLh4Ji{0ERQpc8q$Nm?ktSIiS^s}1(`5inizOUF-vO`Y6d>== zM(fffqWBs0&T3jOS3QMQeaZndeIu$|E3s^i{bf68aMteKTa4EaG2u5bM~IIG*I8A03ULK^^ z%V-bY^h_^G8-8hOkS1@pEL(%ktj_wGJCZ&|rwf zi@feYXrH1o=_}|g`071|_6J?nV0x^yN(dB$g{`Z5I7)XtLL96S&VuE{Y~0gfmvg=n zSO~w6O*w~_w_}8A?ct=woA21LWwUErCBWz#ZslPi6B|UZDc_KClwGCc*n1dG3dGey zq+cM|7RW}-Z zJv^`Z$LE^FX}+mUHIfZ{17E+W0|hJ6ha7!uO2JBG6roGkCIN=^DknKTZ)mfa-OU7Q zTVf`(YrW^{aGZW4QKit3$+fz~qiW;6ga51ga1dVQhdy2N-0dRffh<)l5 z%B|gs3$K;kbEBHeEj^_7k#+j{RK;xth%mYce+f&;jxNt6Zx*l#3&w59hdCLyc!Hwc z#PLdU+T0#gj&~#d%93af-|YwTG)z}Lhw@jqAQ3~JUWR~M*6IXNK{Oueu1@B*B~%6Z zZx=ia$ZrOK*7al3ga4$U3vOs7G+bi%|BeGSsVY7bv~*uO9LzD?zv{4;xo@E$+%box z+~q%TK}pJ5&}bjTa^&Hx9#!|2=F-D$tk%uR1MA{0`#yoM(IHmK!N(b)l$b0@(CH{q z!c=R_4aeYudmA<+I-lD92M`OaK`?z@#hnrez|SM86I$% zl%2Y3BQwmDKh2&&51UW+KTQ$yEK?Q`w&4X;_((PSK-Oj^qoRQMB)7AJd_Nk!nNr!a>*qv(7|)FV6c3zcgY6R}#G z-|>E8Zy(Mn-q8Mk04i`@Agf|XtfiwF*-u5+W8!>!xvTWS%dK*;`2b2`T5c0kC(+=e zAA_QHP8x=>>Ea{(vuU#e00*(X560b3MkRi_x@BWGHa*9%7(~wUbxZs4cKrCc_ie*a z93jYqsKN%?86&Bj{ks&j5(`2O1T%2^)Yvp;n(0Kh8@nb@AN~g#M&UJih^(0!6u!fl zC3KnPzIk$NmTIGJqTE(_uJ3M4TOmnMNE3y}dtf;{*8DUpb$OqfUf;&#H*YUrpX*op z!I?S|2mv!C6ncmJ3g?tVM6B7BcMhB?ODijrD6kN?gy8nkMXP2Ega|=osX_H@%K@GK7(N{pAM6HKpVhVh+9d~lzOZjt`3;gKMcRvO<@~5)t<1a(b^sPs zy0c6FTf!p<2?|)Prp?qjnEvFGUns^}f0&sImg4)IK!ni<(6Fq2OpmmEbAck=_+3#2 zX19Z;%VkVE@I+%S!Xdz}+dL-6W-7F2I;l~T(M>(e2v(Ae-C)vdu7seKk7mSmYUKQS ztx5)H>-tOU_;y^)BOBbOzdd8)C7dW)p*uy3_UNLUCGF@~<_{u~7*ZLd9xOYZ{In^g z7L5!tstcoR#B;c%?D{sVKnGLA>_F(_s!tqp@3khti#lJ2^18IS;wpjr9q`X7j4C&5mkk>r$5E%kX>v0S?fw<1Cy_)y} z(TIgCMj$g|gIUAlptw?U%DFk+CWp$?{)8m|t;R0UaGhldJ=+uCb$V?rA*1fXX{0!{ zP$3c*?a^dXwsF)GTrWT8p=c4B?R4QXN)Bk1CE1iKWZ_X4t_h!|cMHQyypn~KZ%~07 zjN8!lAp@YUf^Kh5v<8UV;C<7#A7M|;PPYO-Cqk||?{Mrxak$EZoyPDg)%V4;X17tH zTxT`SyScT#ki|=e>nC<4ldl0sv+fsZOsR}=>$y!G>*6(NqOap+w#vhSmtAfOVhO9c z6~E3@oxYC|S(j;lfn7c*e<6|&j(dcm8Pjsa*^V1@tZ1(A!?QrNqb ztG1)-OqxV7VV`U~FQJLxZx>`zuAlg-@KHw(?A;!5-pW331#R;g9yxbuM;>HKeuI~} zldQ}@K@^~=;lMkKV(99b*0s-LS*K_f4>-ev7Y>lJb?G%4&DquU^mO@3aS+#+DOLG{ zVpx|NX9WeV(>4D(UaMJ)sFyH^jFG>`BCua+iLtCvZ{NEk#;QhvORC}BwibiSQewu# zblPbVf6%KrmaQ4@S3jOPB`ATNNIQiThxgIj^!tnS*`GTr&hfuNPSOb~)9R1FWJSoP z-1?y^`H5o9?!xrdOJFT7*$iglrq;+;c(G6o>eG1GNo393F{J8016L*VOeCfSZRz1h z=`u!XPA}|_v{M(|eZZdO_TsTyaIfaA4G30ROsJt6!*FAVvaXB+V9`>2`|gw1B*Dl2 zBK0^;#`ms!_c7mqGIug~K`s*)SC@9dC#rzw6chWU5v5H;5i|bbl^LE$@9`&0U-@Xc zf1#5j->_2E&ociME^(63QqcJ+sb^ma2 zqn{hBe-zOm_K$g(Uu>j}$px&oFH%Hq3gLH*E}M(vIM9ff(WZ{Nz3hIC99t?|7} z?1f@AfX?#c1si_QTYzvrnWD?NdjXBBX5B959&V&rcO@D z;btUG1)tmt-SLxJls+|IYV=!(Le(&ja-oF$HV7nGp%oerFe}J$K6+{@yG`09=#Ugp!9SYCQxlh6MPm)1 zEj)r{cQ~r`^mjs|@F+nlSgLBUGDJ9d;-SLHUYV5q zjypUk`-TE7s9ul2lGl53oKcap^=TXVL5}9dCT70V?u#~pQ`j=NIB9o^S#e~# zV^OYifC;;dP)=E5lJ`1Nbi63$)){;4r~v#PA_MrR{CoYT5fg@n;5p5jduR3Cy~q&W zI;EYwX-fJ#ycyxpHNr<2lFC%7CXJoQ{{R=F zfBa|9U z(v1+5NiNiHWDyU?#v~*bD>}I+rrvK1Oay$)jcP(08tB>G4lzBg>u?-82yZnJZ-h3} z*vg3p7*FnwItp#G*d`14j(ad#R>FRG2Iue6k-F>RS*YN>#DSAP0cM8etz(|qY1xYY z8TG=k2@=m-JwbpZ$q2%MJB;@ScYOM;kXSXyAZ`QRXL_dg>9K=&dUra_pojb(VkdnO=y1~3`N>#yo;>4w! z%l_DRJTUA{{D#C19dQr6uQvhRuCD3BM)o7Jw#S$Q#58Yfn_SDEM+y!^xI*{z9f=I~k7iv9x_9Z)$1PE+8)AlKCf zg2M>Z3$yGjn`Vt-MRRL!yLj(X7G(SM(JmcyslfrTtEsUPNZDr`acf{|KZm1BA#Aj1 zUD$ULZ;p}?Gz7zI8vX6TumYoKvlov=<$~<-n^|sy5I7sPj$=zJR|Vjnv@vhGL-9Y( z98%z`I!cl0v5x)?&Z)6YEJP-;1_XSot~~_=K@y!?ncTufhRrq*V4$)*LqoOR%$=fp zkE{Fvsa@7wxqJv1+BtA$MQ)f#r*N!SR27Y9@QLJp3~b_{zY9u z?%f)i`6_jqw6?B8IzuO(Ejbzx81hbMI{__~|HYm-=0Cc`5k{8m0;27VJKN+ocB~#b zE#%4()CGj!ohW*L(nnjFoHC4P7QWI=`J^?Lq)qoG6%1&AP{8VAksO`?gmm5l42^kJB4?P`C`?^JCy?P^}2ju1SN7xkS6&;E8!biS|p_#V|sZqfw}j?{{{ zoX3JJ33lfY1-_y~sZ(lY>My$upG^_G5$xtfG<^?>C5SHbj%9jB$1W5Mr>2|a<9Lqk zzDCjyBTK}YPpkXDp2Jtcs?aU>!Qgzt${iG~H@b4ScaLaI)ep4ajGT&=l&-@RJ1X<( zt8Rd`#m#mKak!kDn4}^GnQiZFvJn*1_-w_cAv5%pc|^LO9Yz0d9PoXH$>(1+AzOXz zCX{R8kD`?wBuh+XEeq!%{qyo1GqOx%lBdi803vJ=0Dz%BGgfk`+NxJxBAqx|zWK`R z7lo`N6bTjs0JK&B2uyGW|IX+KrK{)GRrEGx>l0OJB2m&s{;3ZpnIQY2U7h-{Lj0@? zkNXOr9AVuFH*Sc#3tx@#_Bu3w+n5Ig&G(Wk8-wR?RpCe&iHbv-1nQb1@em~tnA_~t z73gs31i^MhXg~HjN znHNtR=Uh_>&I%~8F#ngE6aqo`=i6(5;y=J7&oL$=z*~+anz!?ys$ch-ju0-evoiX) zq(8f?{n@wdm7HSJKxw^bES8ayDnxtId*D8pdY&DQPy!jhoc^f;!Fa^{VL$7cI`a5I zy|dAh5Pk3=HQQP{9vpu4=&06!(Zg;5I({?fpB-yEnDSf5@!!I)fw6$9%VMQ3E$y^& z!b2n|JMI=%A?9mKZ|}bpI6`>FLNQM&vW=1@KGsEy>P@3xyW*r7rmUP24+*2BsWhVN z9Zzc28OAEJlx8t2sr};S)&qVHeo$zYMCNcUX!c!uj%KN}xGG~f-PV@{6u>ExDJh=E z>W@Vv)03lBMqMq(%4;&1@4MOACjD722CY~a2IZqP=R_$kXHDdx zgZ;E+cpa%*_c5}lqX(DZS#ixo_&ewHZZ`8BoCdfC7%^gR>fhbtT~haJ0Zl>9Kge?9 zEoPJ(74AZyTs6<2T4wVr1(}a%0$^J9AAs5HBz5jF8DVct$g5EtpT3=>EH*lB0g-u! zhETP=RyTisPDxu(_^FYv$E;$sKJ13OYzysouHdchgjox*UEmeYWXg`EL2PItl8Ll7 z5J?(qi}8YfKtXb(VWI?R~BetPW{TZk5l|Nr%zK% zA{d;p6W>zd;BxuX-=m!W0JuD278y*PT-buU-qd>>7^-fv zf(6RHp+^0sM?ZZaHDD4E@(3o&QuEZ)`D6tKFeDcdP10-3jXB5K&TGDInSOT^0077c zr9I&PaH-W2>OS0s{kH*t0RaL413-S)BEaQAk|ap}FK^=eE)v_>U}%m8a(Li3$7!km z&)Y>o2k@jBwDZ4~dyt^`TXB1i{QuuiLpU9^WSAF_mi*k-;+zQV&v80jVdox@^^Tt3 zr{#P+5pppRh1iW#G$Vom0Kf_wJhsGU*vtf!DH@^7YlQ}2-s(2SvDnyN5LWgSIGC;f z4i3(F%<3IZArd4BekSFnXxp4Lh&HVL19U}yAqApM>0{`*j0I7IwovI>el*q@t=VE2Tf6(sq&gvk4vS0SGwX0D_=?m*?9mz@d`wvjOH$@To zH_0*MxT7NpIfL6W$g=jLbn-c>(Qzgg3h@jrkY4lwId3V zVtk0Y@%RUKTg_wrDE^t@7?S$O*WR(|$-&52^FKgh?*wca2B$7y5nN(yT5^O^=flb7 z8Fu1^Li*z)kjeYzgN%&uCYaZlU)}RHbMEwmLIFrkBidCl%Q;12*3OJRa2MGXW5Ge6 zKLUiaT7@@iH#SWY<5t0Qajj>*O#1g+m8ynQ0{$;>rvo!f&HJR-uEocZX3Ri+S&`xGX4|ddAItw0H7h97yp%RiW z_ECh%Qy4HW9BrxUl;*K;F|fZUm=?t8BSrHY(*Noq7$0dKNT$tY+f0*+c=W={rWtFv z6)NsBo`y*3RbDzICOFu3C?&*&nowzbA$F8Ogu6gJlHA!$LcQKQyH3mg|a%|Hiq`)C*$$`htOw zk8wC9cY$fzBO^S4T@ z>pvS&+Wk8E*{EJZ+XW2kN;mM{nA4&_1UO3Z!-lH?6JS@&Bo-MbW&A8#1^nrCI>`rI z9>Iie?GP%1o*9^mBL};jo@F?#`C>tqUI7=40*JcMg%Pb^82EIV1V-BkD( zjdxx2xG@dRxVnPBgU7prD$kQ3bEq0Bg!wiA1lQsqj`w04h<+BljdlVu>>jQRyYeVx|Ee7Q)bB7DK15pePa zk;{t|BrXiB5F<|RCJdL9dWeL{pij=U1t)auw(9b^T)ntc|AzlO zGKR*A%eU1<5*OTB57(4)<-0AG0Fz5zP)q>y8%NBog=UGoh=wB%p&t8@8c?ST%o@AV zICw-PIbgqqAAjuI&Wi!pkg-Q5DDiQYA`DX8y;hH(d9Eq|)dC}EqF}@9)NsbR1w(Bm zyULyF_BmP}*bkZgi+;go3j`?(&&q`OCYf?F=zC3s)iV#mQ0lJ^(C&aU^n;O7_bqlI z4s7Z!2(M%IZ#3VB;GL&6H>fU&;nkxVdwTIVYr=VT4R?Ny zXHF#sS!AJ5(Y?Lo_z3Wi;Q1si!r}BxoG9Bys>fA@-%weX}gjgqEi_KcA%s_Mc!9O(#{zU^TQPy}*=4=T@EEk+s zOh33p-JTCIhw;fo4sYaUEUy5TmJ#t+l7$r88f+BS%Q|sdeQTW0IxU>-8yAZv$4z23 zk2x3k#>B7$(yERhBVNkNf9iIqUTNrBB6MKRXkwFC4vK#K`8VUPoi@r_5OKBx!t^Im zoAHk6ILv=Mse{T_{%TMrx+Q{w|Nds8co&w(8li5_OE<~Bv1!wcq?neCS~2r_fx3Rv zI%u4@&ogGXu30hMrdcld^NN~Rw-{${cLuCoXsqG^-YK~x_>%I_XJp8@Wh~%of|fmX zqXZJ^mD_7yn}1;sezYPzRV7=Cor6fMKFunBG9ET(@C}Tg*}In=zrM~+@?jQ6>jcw+ z)kHDZvOl1*{d!wb)lCA&WHf44o7>1M6+QQz7$&*x6*@4MnF)So&Lw|YqBo!NaeC@MdTxJCy_m;xhUZU z*q0XwTg!O!a98)?|A7Oyaa`(Fm&sd0*lnT7fYr_ZV>oM1I3Kr!~yxX`eHs z57h8UNy|bBn{;1AdlBPG0^mwg;#GSKz)r8Y%)}q^sx?v>QlW#TH29bn`~!?KZ8CRe z#h32h;>84b6_>F1;7@ry)Fjt{Z-8myp7{=}OPYvmPuK_Q2ij{VAJSPBaqF0I@MABi z{&9|eTI1tts-2!!w2qct!KLZ_^#eV1YsbE}UKW~HZ(8?{k@b%(umgqoKpum2h9O^y ztOdJcPkn5KmaBAC-cV>{m{~$RD z6B<4Z_Au;Z)Q)EVqf@V}gC`c4Y~SukB{bXq$5+cbraP6f8;iVk)w$}S7c};IiY?tE zAS#;8^9-Md^lwe9j7YECcXb{{Li{gcCXh`6SzpnkaA!LXBYJHKc@e^1G@PG%>4d$ z8PCy&D-?bPq9)*fpZT9181#gni01$QW$wU0q zVdL=;zQ#oG;B6*a-x|!9S<2%&%?uTHX)KA#V5jR%E6~pPTSi~iV=(r^8D`5-W37y@ zs$5ylo95%3k={YN(W@gBZ!wuK9PWvA=M!$Hj2UQo4cc#nM;Urd=Fd z4EOP%P>WXqBOF)t<;eoHnjPyIdsqUapuaXZA;=*GxBwucnYALT2-TVpOA{gYb}XzUyZ~Je1yXe z&EtDz3Dw;X05VPg4_msB!X#=1H>+{c{e_YqRhd-6+|oe9l@T3rVOni)wk#X&ZJo3c zw?#i|C1Z;&R8!z6(Cj?hm-5q+zfWL~G%DAEnA?zH33*@Xm7#b%b{GZ)ZqSZc&dB;> zyH^cSbA?rmLnOE?*k43rwN>Ygb)oDVz;UrB9fuW6yZt(sXb&=N3Z?0okvH${3{D1A zLaF295Z0IEq3`j9!F^W7x;F9nkVPMuzq>76RAk(+;&rk+NZj0RlN9S|v4im4Wpf#8 zXKeHY606_N%z;gqsnNgSEurbtWV(EPB8{3WS z@{6=(HhbII5j8WPNHZ;Hgp8UP&d^V7u+reOVxZO4OM><`xb#d2lUrZfil4mxd2%nnqYdfY{Lr=^SilDchR8&sL&E{MiD~<)@scFAY z!OY~tKHR*L#hL$+ORA;vSU^P29@WOCuq}N?xUcDYE}EG)t3+C>X-D=(w?jO9NM)DO zV7QG`gg;{2fk<;7;yusf#UXF>NHkyPN2}w8{pHzD3(=tPXSfgHII2Ayp=y8>d~?I? zE*7el@ri_Oo(-5}C8d3k;UUQQMer$g{`LIuP^s>e4J&-XJkjSl9Q2tU`0A`1NPC0& zPwBdy?at$u9+jlQYY^zsj+?HY=Ssb<W zrV|EE>XG^K2ZDGRS%&$t+RZ3%1OmFpLPN_nGtNcnrypv|-_bcLx_*ggZAKd^`6;}x z<7OOzZ3RpJIw74!Ip_Hps_$?V5e{7N=J6k3+9jcdCGdgr#ndQzbVA-)k>ggW<{c9q z#9g3iQrxf*vb*QyrG}P&(eN0E3|n80q%~P@bfL}0W+6n{P?=JX6pRw1$w_1!ewlT1 zq72xmUwk9M3KE&HF(yc4!@vfKWA5>v_e6`W@VK$G<{^q1DtM^E} ztoSfRx~puXJ-X7YZ}?eCl~!D+xtg0hncr~C(}xcd%wL$Z3QqvMwst9u{W^zg^y6U;Bbp+Z-qm=Xmaw}6B`Q%r$OAIVUn|zeDI?TWeO3s1(p4899@QQZ-1YaFTXqrPiFUDN zM57sbULJR$fmJHIP|K7tpE63VqCOJ^a*Kx!8)W*}VD6?zy`F){33UIWZRoQ2Su6ic z<2LfqLtz*xP)DC6d5s%A)G}z@{tlaA3lNrIn)-REPL`z38<`nRSOKPBh_n*kMiZTj zslvzAg=|HsyQQkN^JvIi(E5!`re^9R=kg4QHZ&_clBoQgm|STloCt*RrIw!`B*Yx3 zcXO)at_a!Vat~sR=lTKbES%x9VK9?_h32}jbu0ll+tdIqC)Pjc35}35^APGg7UG3W zgrgLv^~{ln5W@KP(-|qPGNK1|At%8qfiC^)JR|-gu@Q1xxi_rzX#8Eb$Dqr@Bhvm`8C8Iy4tskdrM_3~}e|c^n2dnxp## zS5d#f88%ZJJ*js9QnK@@KXLYzbO+EoP7@Jc7ImHu<$&^hZp=N|-~DSGN>68qjOe6< z8SM~`+GE!Uyq0Gt=j1u9Jd)2&YB1B-!W&mTy)M5odKucWe}FTYy11hPYzJd?ml%fC z3h~kaJx&`iUn%P(?DP?s3}2PBTMn+XBv)OFkzI>h!3FFg-lozpXv-rZXD{)3{K@b; zEg|BK?ASHOznw=hzxmvxr^la_dLf@)vsnb66Yi~?ZoClU$M;NQ^DNT34Dz_=znzo% zRLUV*XEzy{P3Fo&Ku(g>T`qvV`-xs}mJEuAL~JqL^U*<;N+V^^f0M}gi^NF>-(b2M zjMz?M_U^EpORM5yV%7tJikcF1jlCb>szLgq++6Iu)`!wjQe0y1SV{8A-mx5|F!h=4 z`0RZR9OFZo{i4~8!lN^8AgV<+0^W8j%N{`@Tv*B*O87a)Rg}NBoGgV zKYSY(Ux*6nZRrS8MpJqGh%f}b!%enJ6bp2I(+^=<&~U+{cI|AhX-X&tZAX5-fMsa) z=LT;9(L3&CoMq6Avyht5UGf=-BsrGEG}WpQiy zc$`AV_>1)Z2>?UT@?G2iaBgZSf1mvVO}FDgoaInPUBIk%W^gS$5&bm^)qCRL71|mJ z_O|a}M%UK#eW&p5%~8ek!Rt=t3}L8}&;HeYJ`lF6&l3qV_T*MIH(FwX?hu`wmIF5V zL|$h%Sgsfq-W6Z^(y7N*Bnn#KdRZJSicj`+R{8lyoStBf0h}~~6$RaY2_q)eB)aQ$ zNvBK_8|gbR+-O|REn$UFh17IBMbdN{|0>T@+^=x+7g?V;u& zt4e9qDmH?TXmNdeQrvcL*YZ2FD{YeGeXw)#{WA%wxBlcc$@#Z)_zm<_(2ty9MQL?K z-AD<8N={#$q7G_-S*TEhX05WWy%B`1W8iDrZymjXtf2Vslu9blBtH8c} z;6fV(dSLshug}pqch4>Fij)gR)q-4O(}aCVZ@(a0s!yCU@b|Mg-*MK_O`2_|%_ROB z!K|74?DmC9G?-D*8bVZqWDmhIW65JG+E5pB0mIN5od~*z2v|+GVZ$$|u%yPy$~78y5CpYEGNpK4l5FUzu?4n8 zr_gy`gV@1p<+-Y@u*JvroWK#)=0t#9DPaV3Lm5>AI?_@f9$QW#l(sB^0PI+a7sx|; zt(ba{2(IZ6O@5vhDYs@{4E_~Gl}V`Hw_!@>W%T>K)g8~B7AC>2skoeh`E=S3v*Q_? zH`Ee;fEoGLS=wmZb55E}oPpqpc7M^~X^-hm!u$0+@>PP`6}`rzf4fEqoHx>CTuC6) zKyUBX+VHN8+k69F1+}i2K!W%lw=g9+*@P3bi5!y3bJn=^$9J((li$W7^Psr&ALqJw zaAMFy)3V;*{|9hd!vjvLCmwIkg!rR zpr2qHps2$Ujj7UV5ZxFvb1WQr82|bj!@G2_l=_8btO$}VL?uVB6QL1a2Mp+N@6&Sg zs8HkK*jb8=raJmM)islN*W%4qXlrax4)l|QUNtj7Qo27cIqPe@Y9HqcrA8qi z6-m{I(f=hv>=$4ElS~G0X%NBj#-fV-a=uSa8;MPL_@0@7{by{kIL_&Xgg-pYP?RZw zH6Xv+NZ4!OONadu-&FeKF9uR3G}rtzyH%}fus)7oBC*8wX%4?_ zuV6Eh}s`|PiY6@62sZ! z?#rpev$~cn9@cescT2Bi^H?Q~kGGzPHuHA4PvBkSVIUG?;8Of6BQc*d^mf`|NL+9n z76^8K#iLciP>1iz%g>Di>?9{D#pYXG?J7y}_qS8!fjqc|eVbZ9J~J^m@6?#;q*(|1 zG>ciI1AqyL@u$%Sa3oh?H+peK2S*{+q}749Ah(T*@Y@l2NXV5qHY0n zTf0pEG!6Hq(M=%>2LHo9j9U9ek|ryNUJRqNd>%tE&D1eO@!2!3XF!H4lT2IO#`ribw~Y z<}kZ#;@okPa#QQ{~{-ah7BKi_5BGKU9}6mFp>SN9aZk6>n|6!qnpxgn{SyV$=X|w{Ry?6k=T79 zlwON}rQ+0`ZUNy1z`%-HCk?j^-prt9fQSZJJDK~|vSgw~L3zr7lI=WAM}(Tm2K}BYYq=e<|;nzNBj&Cx2@25`M(q? zqxs>%Z(*%7=*1<;&mO;9~Ga4jR>s#rZub|0OFO!*2M1=s{ZK&rMNc(am6rH8e^&|=@57)P=Cp>HO;6~;z+N<$D8 zQrSw*ML2rqnM=WV^SwRXU!{^dt!GpSD`C>i2yodeox z5q5GeV*K=Fx<6*9Q;v%<)Bf{+6HJ6IJaWTLXEA|4Ji9o|_iBom1^9Aq_2RDKp9P5=plIc|&G&pk{MAyH8>E*iQMpGFN}saV**prLFhmMcYJNb&CiWw~nY; zh`f-LydZ2De~In$cuw+})=~Wx4wb7bND79nL_Q{$N3>@?I*~96UT0K|-(f9I)K&^+ zGW7(A8l>Gz;)w>z3&6?>`F1anYOjv35SQ#hlDM)7hr(Wa(vzdVo98wPKrL%qE2)P> z$*7iknVYCqCRVG_duCai7pB4moqDBX4gOnmn9ObXjVqW%qUYCR#zp2uorQwWMzWy!3yU- zS-Sco`S`dmtA?8dapZF~#7no_{m3p1Hn^il09@fE7j|qD%yw01{2mdHjdJjx+TFg? zeu{uI{a>xTmPJIyaYxT6pX>>29!|GL%_wvMi=dZuX7!KPFR{DtcLD0qFNet8(yw|pU&!K=&P@GMqn0YtWH*Z z`>Tb_*@JUG-;xU>982YO^bX54JMlJxf&SrD({}AYKtwc5z_Gv*or4g?z;}>cm_Eq5 zv-h*ebsoO}=DVMA&K2t=v}| zs$3VQ`OE}epolKvEvhG%w#0A3vB=H3))YKQ0-U&Ip$|0=;(H$l$}0fbZP0-$I9La$ z>euxlcewmBCnh(EvA^xf^eL!(y-0RsA5wd5l~c%c?91OHNv(k%PQ(cp4`!S{AK-P{ zeGn^dyIRSAl-#qsmdmyEysP~55j-!Sou8Qy)bY7`Y4ls^HKVAy)TaDb?dfH0&&O-5 z!mSc0XTqWsW?is~ddB~16LH*$91{%nbkIOM>T}0~EmA`*OgJTY!HfhT z$-md_&IO5e$CPy-$}7|HMsQ?mIYgg+BS@S&9C-=k!YN};$JetEI07x76}K@D&iuI4 z)(ULjqy(ycCF&K~P1(Oem*<8n&^|@Gv9Lv6w=??Hc4fUon?XRZ5ElmO=#1;_IH47D z4ZBSVijX`?l3hlO7_6Z#b(+;B*Xr^i8WVt}su(m=a+YlL zMx?Rs=%TR46F(0_9|+~KWDL{kW#GH>o!F>eGV(?hJ-xV|EDulNvgA2Pb-Eve?r?VKd5jPt?K?ZJFDN8gg#be{*1dM*$100sp9gKI8;O`y%8;i7^(#_hW724SS| zr$lR?MO}8iAM=a8;du+B?(`;T?s@b2uQ1-04iT^C3Rj2DwRd1bp6Mzz)l9rjPG1tH{#bx--0hYQ@-t#0OQ zR&le^MD@FQ6dDcT@V7K(Fw$hsgNX$!SCUiif9G8Gwd&?kZ5o6_h>WoOX} zW|%VT;CpCIIDgQF?INa0%lR~&@@|Dk=O>HbA6H?*ns8Y?(;AY?CxFKc(jb;uSdcTL zD>SiUGMZa~1Hl8HPz0QMq?>UV2d_hF@mM3nJX$v+_AbKu8h`I}W+#)^P9FpZ)J>-d zH$GbhWJ*s)@15*GmL%YsnoO?qW8|g$1-l}~H6y%CDPgc)`Go@F*cs9Yp$Kybe3lPO&DD3i6t^9=6N(fjfZU6j1UI8y*(GH;Z zv`l!PZNfdnPP3;gBwGXOW}a6bZ^EUz=!08PB$f!BlYmw?($;>fBdDn<#7pWhClut& zN93=3!vb8P}a*=U;7Jk$f zPVVhO#S>KVWjz^pW0E^n$U@oT{JS@7IwlQH1K9=YQjFYYbdMF7Wh2PeAunKwEsS~9 zFch)z=|*?F%`~0~kqXRo{_C3AogtDMK|6~RMsDmDIRHG0ZTYF>N6VPmgdJ|th%y`V z@~c(DZ3&qYYzS?k>`xcyMLS=Bs);Rt+}E_>sWVhgBl}|-&$-7Y$%9q(R-$x_xfeE# zX5@1FR)L9?F{bs#b%44CO$XaMU5=09BHs z`U7r?8Z_7%xsR5HR7N=ZA(G8AeQI*J)~uv3is-7Eyg7y#c0L z{bDcCD|M|^PZwF}-#ECq8_@0iPcxJN_wp@e@OkM^M%Hl2DR<&r(!rhS>kOs(RmC;oQh+mJP&m%|M@ zx!XJxZv0#ez_F5JOSBb4b5&_KF^Yz&^Rkor4g>4$rm_oZ53Zyv&NdO)|Gu?qLZOX^ zG0KvpjC+F(jn)DGMMXtjQ&DKu!#S82zRU%k{&%5mjYzt@IDnHqnso9nxtSz$AD-Ub z(JGFw)EA?N@+W$0e^`SLA#l~+lN51|5W!@tK5J}Pr#L}%;=P`d1nLrp8CTx15Bcll zE{l=V&cicYrV+;-LO#P>8!90){mYXMUb`0?+F#Qqou4=1@Y|d$CbKiDevt~%oic9H zJhIa^G)-0~JW5%!qrPO0%p~Ctjf{ZEcej+XZD+6mpg z-v=~dE{vUA@9$Y2JF{^qw1Dw`tZN$YiE*XE0~U3x@FdjnnJaf^L?W#f6UzH|7E+_o zQDYFl#J>tH@_5ccHiSN;;7AK_^>TJCXp}2QF=n6`-HrrTgTGcuF5xDhug+ZAre_0U1`_X{|0H&Kki>^nf?vfMQ0N5wZk`cG1N~0dF2w~ zE(f)=nx|MPV~;s{z1 zrY_7I;3(4AXn=Vucs;iwSW87>p(3Z|F%71V)rvC-orCo@XLgWOM}#J$r?&V0_F9q@zfLqennHEsr3sJEA%U+Z6*V{>8`Mb}i{Ssa7F`ZMw8wSr z@(V}l?v87B>;ckezKC}VIG!>M(xjCzRF$HJOb;!=>nXcRDGhk_Np*3(u5J9I-~To^ z|10SHH~U8KLm*2xWtKY;2CF-5!-y&Gjnek0l96_$s3Ydd8pBj(Q_PJ0iRpVV*=z%2nDdd>HC*47bsEAPYxJzT-Fj68rQ+~GJ_}6QqPI{ z6}|Yaxs<*jaK7YeMwOP5B&`FxQTT6Yy&4h83d>GG^k9ULXpf|SdkUZF$bKya+P4$d zT5$dax5lX6TI1e!$>pt$^6g#|&G!>~Qgq)TbDv8!KOXuUdU#TTOTgc+SIAhSc5S;- zu2Q{?TesL&#Kwb!#VB+z#*;j`vPK_#5*np2SnqlBTFyV3IrD8rm4Wj-%|Ian zp>SC3gp;)9&g(I>)_^P^lx>oIWZ7`)Txib0gz8fu+Tk0Cv|lvumO2_dGV=3S?yxLw zld$b2{{WhG=RqE)SSWLrK8qVk%$}j-P)_Y5x$6n3L<4ZyAQ9PZvX~$(Hg*)Iqif6h zHSZM$prmV>hDEJ;XU;ToMF?+|Z`}0H!$IBW`#(&^V*}xx^nBY_h54*JVU4#R7Bx^o zB7KjqB*j!ei-ySgu7D4&ykl78SC@dU@{~as*|jQ>mZ!ih8aP!1-E=T|uVU?!94FHf zL#n*s2+bIhnGS2(w`JQ$vICIdLxMXmbAwgU`pZHc6$yhraJ&xB9CizSYGg9?L%biG zxes8AYAMoUz==pN8NGCNezwM5{`L2cN!KLRC1TgnBthoz;avrrYZ53|okVdp;}oOU zI_huaB)M75Ci0@zIc}m&N_jPCO?qP02j#;b-}w!_qmDx^U+ZDpjW)i@G1EI_1^@Of z_n|pdMlu66h7DQEizAFfO`pjeBE&v(MKsIow^DR)BcY^+aC7E0&`k92_oYgkq_@b< zY#piauv6~_GYJYa<&vd-p=3<62gMQmLH+z=MV)KEpHcg8G-u)1Vp2H!&XviNTm<3= zO-lOtU&C4yJ?(BkVh(}HwakW*{hxd`9YQW~w?1S&;O!@O8htxqTmIH@~e6p$(HH$8@cY>M2Lo0H`>V=Vk)oW*=+Air=tVq5`YdtkhzM<0*`Zx~P?K;?&5f(I8TFDci+wy{0YG#ul;r zE>XWXJt1C-h;8uIFnX%u)X<`tgO)H&v8CKkx+PVHv`3tW`$QAh8EF8Y1aoutGr<1* z+(5_{pGC?an4)5laXc4DVI~;13#Lhjfj7T{gK*iMA^k%rUABVz)>e_xAl!PLMC`*- z*l2D1g^eL#&}CjTUrj^!E@|C#xo{^X15C+?3%W7oK)ex430+@JTc`)LnmbIGqF3K0^6>%yLoe8ujdN zz2VIm&(I;rADew$NqMoePxRBD_0n zP?z+znp5hLYYg30vK@YPG`s>7pKub0G{j}n2*x^|f&e%PGlk>BiQ04?Cqg>k^WZ=x z!g5Ab4A7)OId%IEDYB{kL16=XGdxbegvZ`|HM|}5AFOI#Lw&k|4eF~CYj6-XK&>QF zz;8RWs~JWa+#_-?ql27)#&=lSBiYz0ObXR6EJ_IR3W5{g{YP z3WhZ!0%jLBkK%OZx2$R|${@`ef}i|{yS^{q)R-*Up!(J3c6=l%cKqOjU!^?t!eeDf z@y=+x6|tsj$M*y$wNiIF#NB(r90Pk!=KH(PFX|;*MTd4BPAobi=>{QU%}%mFW0SeO zleGi;`r?JP$E0E@VNb8?JM&YNkC{Qi#3P5C*{6Sig$%XEkR@D(fNLTu)4pCR1$bEp?II1EBi!c3> zcJwecqr)$d3sOkGpPH+ky9$+(NWudwHhe^eEZocoPlQK)ZLbA3poAWXZ{xk2n=>WR zU!C}_KHzCw`V*+;!bfOE12@s>vTwsxwph67Cxv^G;ED|X`gvItvWfMgBZ-6T3}YUd zeXeDIc>?+LDO9-IOF>-)^2?ineBQOz7FPws|H$Hxw3daaB^QTvlo z;9*Nu1VgtErP;175hW%j=dA1gCFWoCi#Xmr>B8q~8C|^<^6wBldT65CnfMkEc z?=+&yPwtQ`u2iDQGpec^3h(vY3}NxF#BD%T@!G=Xx~@`5T$ey%w@7nMr?EK--Qlqm zryF$napb6~wu~{#s^}Df(*)0Z=f1iw7Dl7(ga6C1mM7MiIC=8>?0mnx1kcp^rstFW zqgzDYU#XJ%O3DLXFf6gKIY=3#xh%K~Ea?0q)PlN79KT(z2G(#{vq3z1*5<9(cW11V zbTeqy1LCkPgThjqvZaerszvA=Vw*1{>EK~`H3NHT$@*7j2=}L627TRq@kg=`KqRxW z#_Pds3V7f9YO%BxTOe53*`TG7KJkeddjohh*H6@4Bg|RC(dZ#Gsp^M~H6axg)tf-i zn?p|MtMi2@scc4B2z76eqwFI_@@LyB8zlGP$>b4`0V!t9olI4SwsQb(w49a;Y%4pF z(74Z`e2`{7pHMW5jkGpmGKWbNLHlAA9~!%fCQFex<#u|SCjy^h=ssVhFB~e``}H$) zIha(ziibsAAaI18z!su_3lD-y#(#39I6#@pSh=keTU5XfM53Fv@z60kgDB(ia8G`y zL$mP8g_fpcO3vHJ7C)$KZpEBokIv>o*Fd;B zXwR~zk1$bJo=fAob^y#zQ8ljRET(j5Ce_coyVrM0icvU6ay3MaLf~-(V@I>rWI@iw z*iF9*yJt5q&a`=TZ5JmmoRNsqYB&neB6kcU;?fj#HrQ=XOxhw~4fLE*3ui+3*nS># zkEfBMgHb>^B3R#Ts~gbq<6a2d1xp8_3r@O9s4|;JsbzPDIx6Rd$lBaMeuR;db zp0Ot5xc{fdbpxb2w+g{cOlU%)y75_4_3O$}a?%5b^!`yApu6Xw>MJ@aQ)U8jxBkiEq5WiLiGIh&JBuEU`~&PIt9T)(s4oGbhL6)Ur=r+dr5Xj_FyxHl+&1AXghx$F=n zHpG=MG8~Hc^`85P6Yf-TXiPpO0yet%E(Tn2p@6T9|HkI=9I+r{u%4tjelVJU>aGmb81O;S1#b=!;+us z8<@FlJWVh2!Pzeu2yZIihO#f|U>j7`IGT2<2e}HqxG97$4mSjnPT3qhdiYQNKR_2* zIuL)PP3Wjf{rY%_IW>WZwGqC2GO=m8_jW}>NOmu|1J7;8JFGnttyfKi6ba-iPyfm7 zXFp>y8%4PK*6GX=Bp6Fv&l#XWC*lggSpM7+#w!edeRxc)fn5kwPi8o_Y9^$VsEv;h z)|%}$Geb=Lp$v7KR2{u$vZhh<;Njb@^0zt4&9a|!j%TL&!TW*)CP>3?@|yzFM3I^K!a|ZaEevM z;pHZNdjx?Ovc4%nVjzlFPXBe{_Ty31 z>DxM*4=;jMcs2dy<5cu$I1*oGabr-sh(>W$n1lSRIvUKt^2+VSH211u9m_ zXMy5f4+_)ewutopRDR%OBPA_jMabF}tYCd8re!s=LX2Z42Lof*(Mpsd}&Oz%b z*h&_ys;c%TYm80ucjBNoAjUf@E$>-_r_PNLa;j*`e96iRR{bG5k8!sa@5$L#8l7>H zoe@#D$aUvO@Z)FD%w31`rSq?`NLo*h=uu2CE0bKp#i{&zxkFA4H;^cEP;2q`7uGs~ z15q4Wnykqq(N|ivo)cFKAQbuol*?t_8X`p!MEtHSWYkdxnX{{2IVLt+d zH3}t?kndZBC)EJrv|L{)|3ULIj2j4S`QYx@b>K|J02#(_kY7FGqfg@8ryqJ-3{B{; z7A+?((iewxc10%4FC^YCuVqEBP>L;bP^3xDd0a|n{QL{}GA-=mvrp-$DCuuN*pviO zOFm89_@1&mhoFQML&G}nbwRDZy7H9EegC1R3bEe1x@<%Cn{Pq5Lmcs_BB=S0zVu#E zLq%rcl})i`98|;s;VO4LU!}VkAuIK5F8H<+Z-r+dt^FVRj>%A$`o1wQx3b(5Rpu?~ zR@3PukGQ1QifiTcDR;FOdecD-^tk&g502I3+hhgf(WaOh-q1_fgd+fFWTqHv8zT(`^8(wBv9kXJwzDH_9gu-}^5< z5`^F37XGgP3a6gxFsTVvOOZmOk7?1u}mBI7x0*k&>yo*MfaC)pE{?RS{7ZYBHn zGonp8)Y4&ejibl)R3O+gNKFSp>Y)nwr6=ek#9n7RCm7K382;E&^DLBu)K&{NI?F)4 zURcV?x$1EfGb-W1t=E{wT_~)=XCRntM`jxTx5TPL;f2WWSBd~CjofoW^6hh;OyM7S z$p%`mwRFcr+eN36>$toa)NM`+b^#MvRHT4?b^)E3#MgBa^qq-B@yV`WL^Fa$+V~40 zohHcCYJD_VM-jK8gA6}cdI|C3N#grk0REvv5 zw?J1#1)xTQ!nRTX|OPZuO zlau9|u_7}aS4n{7?n7fJH)K_t2kvQa+GVpCtg_(*FQvnfbN?t_h|HK1tq-7o>RuGM zIl$F|zNmr%3_KiZr-rkXRxz7;GQ-7X51}n+$5j!r2bcXuG97sv%|e1DKB54JK2UnU z3g&)Sluq2@!`tixwcBDhs==*`$RAi#91RPa_^SgAJxoktA3_452;XKcEn&omJp3>^ zuIvCygi?Ei?)#E9D^C=%VKz=zuC< z{R60sXosvjA0Twm-XK5geD zl*Yvo99^j9&%i{bwmwA6SeiVhvMBZsJz;6yA>iKGAM_MgTr=bAYP!&A&1%A<`r@1m zXj##@Y78!+Pqfo=_Bw{_@*$+U%hEAxW^85RGNdt|WUNcQ?9JmF$kNnsfNq5#P39IPr-iI z>`1r-R5o)umlh$|w1)2O{vt@?Sinp6QH^MVVp33Yg?X<6I5hq~Ff=b-IiMacFfCB@yXG zsmOt4vRNJ}ES)(yk)#AQ?Kn=eqs@iqd|W0p2hD%+utmqrg#lzY`?zjp$6 z4)bpmNU#EBD)?3%7U(?=g8lo)`5bL4=Tg(5TCZi0$M*Q;3rMu0<3?e6uBOU6xd@xm z>HfaxVf@FtP|v7ZVy%ZlwQ9L-cW2# zc1=-oK!K^IC;(SHf7_z|&vP#KdGQfKNm>Ivxv8&5#cP(HSrc~&{y)G2qey$zF{Vc$ zL@Jpl!Ks#Hr--44M5xcA>rdH>-Gp<`n7=!FAAG7D{X?!a4OgADUDv|da>&2ww=zcLb2^7HK(;3YgnE?bqU)+>p918Bh#x$x%j`_h7SIr23 zL08DBC<7w@0CUJrk3F4~68!=w6!2%7l}fGQgG}jgmb^dFv~0C!{HYrDAc&?2tdFr( zNDfHVZLMMrCWhc6BF$J391bzR`4CHwk9!O|w@`@3%h>z14d>{OR*G|YpOxO% zQU#MDEQdcKVSIG(g%VJ+v9uH3t;zjAeA-v1@V%HUt(7Fvi^B}c1d=m#rGE*?WnV zaK%Cr5hOIhr72xIcE;fml!hS{)1ly1d&QF(Mg^ETp1h0Cv-_;aXz6S%jmFPZXD5x# zWsUn&r&?Ez$Vgwj3Xk~`w>3D#f>3_CS5N{|acLg8^yLjoG{5zykb(YZ+TGCMLY+si zpK$dyIhfnr&-l+;lP6?rpB%fmGyO+uz#--oririC$!z(z9C_;gaUCXdq)43|-V($h zS6kk+5m~;%2#~tfjzzyq{{VDx<~S`^d$fD+7~2tZQQh#R23hDlEstBIP_yUA<;c4b z^}gpxXP1r{_0lEbfRA8BpGq;KDo2`y2e9{}nH~9&FABL-_x}K?v5c2P?e%)?t>=Gz zu9rxwlU!%T)nobsETyA7fYD39-A`D@*Po*bd_2#Qf)XJ<&GtdSNHru1L{_If{{WNA zhM2TG<5hBsn0_R%Xrn>PiQT1Iq!DO61gDqJcin86L0v^(ct?u739oV3;|L$gEa2zp zLm<>8ZTE^*7<<~5?s4Nj80Y>;rZJi0*M=Zm37uOKPz`4tzyAQ%3e+_5&kF=2uvN9sWN*t)H!V_}n5^;3Sc4s6x+~7d>2ZdX zphMo(%CKxV_|6Ih+>%YHgCysDUvsX& z!h5w^u<*R6_G~OFXSqd}jTXm4+G9_ovKo8y(cby@f*jVu$Lgc?iMEbs>+h`Fw zeE$G^E&#PJ=CqP}Y;E`D=e$1<0JI^wYvdw}>p(xSqZd>ObCML1Gfa50(WmESv0FE0 zY{3RGx*XC#28-^)W@K6{MAabrveTj<-&wY)03h(%@WPn%Ica?Ike#7!+u==GQ2mhR zvgALe$7aB4!9wA1ivV+R;6`&|pr9WH^Q4LBA`Zif6(N!!`WR1jtZN zrreLM@u>;1AUZvzs^S3F-@%S-c3S~Z@5m<8U-M@MU$en|(?yolXcm)g)0GEUH5hg| z`3*!bq}eAN>ToU*QFqGun15Xn{{UXU&auICic2S4zK1Y1cC$CuVu8dBaYKU9faoW| ztkot}9Ztf*gN_^8rLFbME0jqiJ*H1Z2*!%Bogi7fA64%!FVc@+B|YFfmRp&OSdO5- zP}O2$x~a*@3H|12X%y3<&e{*O3(mwaDB7inBy6O?2~?pKEHJ6^K6^?2c2C!c2yG{D z@l*0;H>|fY1Q}?p^splyxr~M>H_PYOi)*}^a`{oI%uow2W=*pRl@|4uATg%bTPxs{ zjUUY2kW1TKtNsN*)HHA+s$)Z&HrFfz47gRrY4AWHXrx-PsP6d$1YLjwkR*v7z~x>R z5X^|2GRGpNvzF3c zAMW;_*)83FhK6}?5s68LQVz#=G48mRV7moD2^wdbhndG=by4!6(a}AA{?rsg_lx=( z)Wj}0e<3{A+ugt9jruVX&6v5-6&4gF62JN2iWysbyk>jK$y^D=H2)W5?qb8Yt;UG#h4G zQ{6oZ16F{vH8EqZb>7l#t!DYeZM||(&5oqB6rTv5_}NvEJ6UP^pB3U5A02cvOwVez z3}g|VQ1MhSFp<cMMcnp`I#l|)8f>aP>FoRdeEM2dBpm9Ap-3M<-0 zNX^jSY1i=QsK7G%kgyub>sWSXn8o{!EIpWNrSZxf{{YD0q2;HB{?};;tC=MDP%$QG zIOqp7QC@k?T96m@>h$;JgL5ubQ8_gvo3jUOXm!;`l4S6IS2GR5_nq!T2I1)K)f2Uj z_giiTt^j+C{{U#EvkJ)VSkTQ%CCPY8Tu-^*4$5Z6yvAL$M&;!hh6U3$>lUby;%S2- zt#2i}XmJT{uczuBSVf}PyIO(wx?i%iUFIVJ?T1JBy%SH(&Z|G_qA*wnaKrq0RtK@FM zMgD7Sarx4bGDCwrSfPNK@den=6$$LzY}q$SPtx;z>$P9G z=4?1*)+E>y4QBoS062HJ=-vkrdX&DQn77uN<@J#6BO39DxyI=>{Q^ei7QPlH`#scX z&?@{mC1y#x8#qpyq^DvGnWhkdIp-wWtg=XEpZkcM(>A$sEmv>8SaU8TDmRLl2tkYI zE5<#kvul}I!d66C+k{6WnuGY4-Kwt^=+z2cJ%@n>#wsdkLFkn8jye>?c&9E%U6D)F z!AZZv45=e@2E`M3sGvNFK1U+1kd6cDrbv1$MG~>8wJ% zndngOV`;Mxft*{EiTzD3n7){fISlv9$4(mjLZwF7Opk!4$@_g`YX+LqBtJo$!`>Ao zqf-v!tTuNkXC+^5X+w*D?=@P2DwR!KOusr44A@lei;#n(C)+?H}?Jeri!Wq?%uEkhexfN%*2?Y^0>Es+_lxq zXJ5dbihck~fX*N27^JAdg4kB5)3&MC*3I@IGUdc0zeZNZQs63?O0BN^HekwB{aBLhbXLO) zoP79J{WF~NCL+MGsn;rDOss5pb3Ml75zXt{)r&PQt`zbWgCrKvmf` z%#{1~#(r;+hz$os8oM7}^@m{V^}S90F7H^wv}8HE41ab8dTHBgqR7>9=uo} z%DElvW#B&JHEb~Stw2MmKEBxom#(czAv4KH0?bWzzG%*r7MTRd9ct_U0HOD1O)_7+ zL%Iso_hQ#YAr4f5g2Z+kcbhQbGXU)m^=HC;Z2y{%XFGJYuO92fn?=;|AkK%?if3a%(@uog}N^F3meG7<0=_+Xe}lt}y4~(KAMC(o*_J z(c0{UjP)rR_!V1?B9y3s2R4A@6o@kiIm>XWi$+ktV!0Jc$g%)iH6p#^4e*rS7>45l zFQqrwSbER3I}yN;6r#ou;141d#=m;NL=J3PT+FaqzjvcLR~!Kgq38$&DUsZu^yz^V zbjAlWJd7v(x|8xzBpgJ~+^ixGG9gw_Xug=#!2=SMH?Yt3U)~~PAzQO1KIHyJl4l7T zf}zGP6L7&YH$V95mel>Xetk~zZN$AjwBjux zz1x|cQ6l~W;P-Y*3BOUNe{#nmL=hK5(ztgs4CcGrf2JVc)g=y?YgEYW#lhkRhsk;F z7SWepwkKp$$BEqBIZAN5DHVX_m736(oGjDRcF;7v0HmR!Dep1)`z-oO>i+;F!MV(u zew{{Ow5N`^Q>7Y{3S`;kJX#5?`+0H>glt!Rep7r`o4=tS0(*W5jAwkU-|hv=l{T{RdCVA3jOE+(9^iAO8p1u?K5-(|MS=XDfC0etUGu=h_~6asl$}@ioWif`rIk8hOcp3qJD&rMc4_T8 zzEBYf2X>|cwIS?De$4q*zq^}jQ3jOcN!WP=*?-sA;HGErwua|7W{78>E%o+@x~07( zO3+QB<<;$hz^2P8OLQLxVc07C1GZLb28 zz*DI-3!o}^mxwcL{*oA}Q3XO{{=Ylij(Sbky4xb0L${|bmzWXq_lqxd$S-c=^?3Q)eb!{2T#wPEZ4WeBFM zmKC_)1eRO6qu1^(z&b?nn3zX5R6|-N=Cd^gZUv6INtY9P<_FJ^-}+9J%lqqGA7-0$ z{H+a%`S;ljn8^-|vclj$*f9rH5DdtjY|Xv}yEz{U41|i@RnIKksm7KFZ7hv|O9ZtY zQkPfBs1&v4PSo&L-qb%5&hy1k(-SVcxHTyRrL`I%_NtLgeu86AZf9vE6HOwbyCp6z zT=!|_`zi9*Sx@{B!^JM9PyYb4U0jNhhhU0SY{`+ieGYO_w(0)Are8gF%!&Soiaz}U~rmga+YBF=Xp3rBvh`b*~AP`RrK=cSE7VbPni(S0_8i4Tb@1G;~g z?851)jWMNGg5Yw^f;7{SK!y~S&9zx%lG$0 z-lHOFT7i#NNs%`obUp_>Z{y~dY3Ue3!cnxvkuJ$o(#7cywc3@uJLF3t1zdt3>uKP; zrYI2GNm2oX3+AC>bX>hYWE?Gxd+6&BLrc(arw=vnaI@cMH{Y+Pqj* zR`s#1nO^`#L~h+HZ(b!i9A3ctyN_kwzcLHh{tOoi5pe(t8O{MW7yypTE^+%~SGnmq z;DW?{-=|cUINNvERj!u1Q@+%A*Jr49ow_Unz2e8w`ZgS<(>h)QmMmT#F=QkKqP#lN z$c-=prJ=G=;>A@=Ksu@SGm!0o%rxTn&2Q$VJkLQ+czxT0@!-aWT&+E_D(ipMfISyI zPco>plNL7XKpiH%hGDLN(!Ad|gi54%^%3@)Nd0ojCH1T}8FE-Tb%geTt?=HAcSAA% z05)x<=#uNu_h}4J_Mzj&4?;Jv(PRVu9e#nK_ZqeMSiE8S=pk7enr}-e_EsN5Y4^g& z`GK(0WlSfshA`dlg}$FSaBq2E&d#{O#BP`Lz0xjR%+J*Zxye>iNIRs|k8+DMqs}#t z&krrL1*1THL^Xmr{L(@}u;T9XJ*Ir2T1=-aUwEH%JBTxQBTUMq^SJ!8gO@F4-K#JD zK}0#)cqNg6yM@RMP(NK6wG}2trUwnHzy6xmwtkM$Un8tF&&4q=((7H*rizuN)cuz9&8W@y|s%_*{@2RyW zfkF9N^i*eOg@T_#p=%{|U3@MkL`vZ@&dRzZDfw+)xUG=L!!8JCyEN`EyCG{mMGY?Z zxW0nUxw|#$g7gx3=$_uwGy_z^Nywd+%~1y1Y%lYQa$B~8UY3iyHT_gVQ6K$$;P1B= zLy{}bdYCrl3!5#|@dVBl5HM#|ok9LXADh|qB3SGWYEa;a!1hVkns{IAva+)^6?`p| zRp}@VqTH3|0zx1xC6;S&8?(rT?*9Nb3puHb4*Q~IB*8^;P}YeoQWkGz4uTA|<=q=I zf9G%$39eB>tD2;+@Zci^Bs?-N!Eu5Bd53%Bfudg*cHqkpgr4x%@?u$dgOfO)m!YtC zg~@sYGuvFjd@r*i&1n^AUdt{+?*p_8-m6Xr>eQ#7bs1R2^`TcXMq<0|+8+&P<$N{^ ze>$v2hOxT|@VNp(4_&iQIS(F^mwjTVpOEwBAK`nkX@0*qrw*ET+FN8!C5~$dQ)GqH zbK~NDFP@MEG?l{Iw;RNhoJqwoK?3bLtAbc_HlD=hU){?{@~U#d1nbUIbBlsMz*wP?(l9gHje zZXkU`|%>ca-458uW&H0oq_8aj#A&`+ON84Cl)3h)KFcp8?S#9hSX3 z>h!0^iMiP#?mS~D^~e7Ji*K>rcCqn*UI+K3$yfNlG)A_p`Qeo9q+hWaXJ-V^D=V~R zfnL{KCKkm=4FLDFnx2zao=RSK(>&`5IkTj`fMfpv5J*tn0IDoT(QdcW$BX2*CO)ga z1VSG6vbspusN($1V2V5On%@BDfOX6^vl3WP%g-SvNyZy2?o8}?pqevu=Nik+J;j)k z2pVjQW55*qouc=0FznmsL=QF!2%7ldU2@UMRRP~$OSMCqutcyS2q9@IgS~^sE_F^( z`Opf6nBUnCX0u3{qG)tT#mq>|ld|djF2l@yS@hyghAuvSBN#b_rgeUqM)!M|t8z!Nw9^-Dsh8qmFuGdn?>C%L_#$^P>p|w230odrUNs zYektGWM7lzfWCY^?P@#lr!Qy9^!pYo^&Ge-ez2TQ$5|U!pbJoMeAkS*hkHMwA1sn&{^v0TRXt>g=5%jhRLYaX`QA*C$quiHC z&%2Bab(R%URG$n?+$0{sc+uI0z`0I@=H$LT`9)msR^0PB=4#HQ;Y#nKHS=B*#Aquu zC5o`G>qVT3DQaYq^qa#^=h(UIzd5ax@hSStC3K3c+LXfLGJ#Q5$-^s3Z_sR&atmsL zt?AQAI7@{!$@d=0A?PUZFtTHu`8d(aX=3b29s7mP#*)#UhxrB-O-(wRbU8^RE<|X1 zP}+1yIvjl18A4H313jkrYT_%;NWZ=oZ)36Y`a_Nv7T!YFyAfU&)}O$ET^^Mfq5lBD z;G+8S`wd5Q3$^s|?xHB1Uc0|7fH~=FMGGi78!IY1U>W)~%ut#t7q3)2w)3Qaxev8pAplA+`VD0cfe+7Mfcr;alhA1ZBt_eAwn^Y&V2|M z@@DrI6z-YE=+;Nrkf-bdJ+%!G#!Y-}Ci0i=r91%UTMUlCk1nV9n?|# z9{t5ty|u?HwY)u3Aa7QvkAw6XmU}cw)-F?-DC^BN9m;xebcqgw^3SePKLSnLOP4lT zSW~asl!zfLMXG8$lcXjxpr2J3clc2bMt1#6_VIPnb@)Iq&`~P~IjuZU*p)Z0>RgK~ zrUTqyy2d>)tch3$ZB*>}G&j%Dh>R2RsPu*G9cRWdAMb-`1m{tmw8Fe zR~g&mo2egNTZYC`ADbITeGtOXaU4V0qF%nNIkbCgkDx1L$QBv^T(n6n4;CpFIx9vP zelSvyUDDjx_xP&pyf~sN(Tp(|O341P{dr6xB)jhmg-J>~k zdW+C4FeaSD{%p+vVb}f8jJCW~M&|s^!|Fet=r5{n@~XHO->VyPXUkdkhe2)Emh#=2 zh+~^@MR_Vo2MTpeh6}QqnY5pcQau;?X|@&-ev1D9JcF@E8=uu#HA+| z-L+|=3C|?lz_^Fmc68>Ca)%Sn-8exe!??t5V-I*0D7p=wI0_Fdr>$FF+8CpP%=h`$ zC+Rt6iPNZq_K^s8UekFEHl0!SMjI?xA%vPZm=-9i1NAGcSg(zfCjsS$t#*)MX*6wa z?Akc--uzW-eG2O?Fu}%`rf z$B+U`H1@FG75)npyjK>YJJ{;_jGgLu1)x?7&0juMNYlAGnX(eWzJzaC$kus1btjI) z5CF=OA|~mk)TDpJ%fAz00`Y6%ud7_r^UW0ku&;o4sMZFalyiks9wq`gK$TDfu+xod z$y~)fg6}BGm*u2!&nRwZmgj5`BGpy_TB&L?sKTd(B$e=2U~d5SeeP-Zx5O$dvbZK+ zD4IX3%4N(cRm8KnEM-eDOMr5ngHzq##>u=}VH)~ijyznep$BWmOP&WJjfC2dxNyu}9a z4}Kyk(q6*zoM#UBhX^9MZg-co;@5g#_FR)Q4=D06PdJ33{$Eb?) z+L>ABMIiQBx@`gp5L#?5umop`R$w^~ZD-A}$*JKeGfH3jxu{w!s?snjz-UIZgPr`& zvwDY8nZ%k3;9~g?9i97#!TO!Q%HV{~arY(a1-3LiAbBf&FnP&s1x7;IVZRpc(gyG= zc-P0P-F~TQrbYN+uI{9+qFR;QEULej*MiQtQSVucUjIbY2n}-o_6pT-iPSQkcRJ_Cz3ud8JTwqHMV7$sk7Ft@DA8PmOz9tK^arVlMrS zJsp(y)q~R<3cb)murf6Kfi7e0wsfG&Ps-VFM33Xw*<&7`ag77*WAMNQeNkN5f>-8d zuh5y-xoW(26<9}t7HeJ_Ko&1)Q!jc(@ziL;Ck)vq@`4Ny3LKuGjBj50G~sXy6g{?U*clXW%H|2vY-bRj8#cMrvV zg1r9#u#-u$N{?0l0Ba2tbXv#`sxq)-k&wR-%>MubiaB6`*m>eHLN2+mY&$>$ze0Xs zIj92_qE(8T0-?)Lj?7{X{>XCV>N1*Z0)G4?G<+e$xj1fUk=_Uf? zud8ez>kmxhA6hg8!-#V;Uc$s@ft*xP>vSmVr!_o>_f2s7LS}?UP?ba z_6wh`Jn$g3c`8kXW@V z-UkCrq`)k;lD{Q8>VX^K`z=akwAaCu)2|{AkqSI`m3gk06No!5$nIJ5*z`*@{{Y`f z2}Y3(zZQz@oi`UGZk{CkT9XdcBNi~+MGu0C)T2wu(hkCqfzK9fC({1_^GmEmHpv3( zNZ-AfhIZ4jSJC;%qPC72Yw2Zlmas4OiEYYjM`@QMTq%BWe;$%m?O%*|CD+*{;P$Sc%CQT&2Q>Zz@f^eG(sobotig95dDE2zAd z_`JH~I?x(`r&@R3e{vy%edA&GbAC~uuzC5Z5-C%Hd~XNMMEr#-Y8c|+Oh_St=WtUi zTuGt@GFcV#Tol!v9k|Z+Y_51`R}Q2XS615ixBPO1T%r-17r6d&jppM77C3U26)!4vexoi-OAA8Lv!aW6a}cu44_!X6aE zk+8)TQi?Cs?9tqb`ibounrD-qnKC_ZC;ev;i}9|^N?iy5y+%&!0`RL>PbHx18zigi zcn_ALgOzI@5-(H!@KcLG+{WanvyFr$j;N3S0OS~g$FA+2uks+1USBzn#2$$p9}PdD z6+|A(MH{H*91nFwX2?~;QWu8-yc%-lo6gZI`eMmv>3{f|tBXeRJWG!^wxe~Tz{~2? zo$Byt8k{FL!1VoPrAF*B{=_cHfKRR{5Eg$M)oL`j5skPh5RxUmbIySy=!Cg4;oScK z_rZ7n0Bv-Gqf1;fGxoc)Bh)z#eX z*OAd4%xKxj2Utye!IFccg4^jTENqqw@_d5tr%ZAR0l`)f&^5aA&Fkta`<(gg! zevsre4S3w14DF70wPCYjI6*p7pr#O|_$BJ(XI8?$=_sgkYv} zAW~R`1p{i#a_FAmUCQ2)GukS-Tg0*(nKcE8=eVX%9ENAY52m&c$SqitPlQy9=RMCS zbv7{x=`b2r4e2dT-E5w}u<@pSxMdl)P8CDsAS`7k#o4V5kUenr9B1KvY&~x^8otRY zkR!p9FMp>8$DscJKB?dtCAj@YHolnB3peE>;Xb$5Y0FE}S#c$AQLxbXy9hnjRfoL2 z8xt)Irv;8hmpi-U^!4%J*RyZnj128?3aP&&r|;fjemH@k$Hset=UweSJ|Be@63)r{##be2~;A z6B8~N@rLH^r{PCAVQ{f=u2kI~B$pdRk2r&tHk^A0RC$eVMfm`WmBrOF(m;~vRY)=T z-4FGjSVCiK-Gl7wwMMhLD=Wp14(X zh2aIPN~#mIW^fI~#LFT&>NSvA2!t6mhafx%BQ3mB-e?E#X6)+~M7HJf&jJ!4*@|8m zf6%*laKgeHbtn;X*Q9*ZuRl(9SjgR884NBR0tC5Mh#{j+L`b(zjl7GRJz;q|lX4Du zbf24Lf;j8LHq(zV6@^kOr~;Dt8+gzE0O}%WK}f$ZOF#|lz@M#M%j1M+9<-|$nB487 zf-<0qqP0@mx4w27)y}i${DwTSO^3o-S$$~AaXVRJ)S6@bj!4d8Nw`lmlcpx;Ts(=;{&!Ov9!8C#WD8h&stNmd~AMF1C&0&1MNbXqi^(}Lop1!EID^3{W zCFwuvudpA()l9MRnBbH~i{w}HI-iX+$>wkh$yq3RXnhUT5Ga^zizS)2K<7u11!x`V z9yIOJWezFTi+@=O7sEinmv+gy8&~zsbb`R#`_|UBgsX#xCM^v%yOQJikGx!8nD1Af zX;5FQ#F&?^oXORma-ZJBkD#f)w`YdmQocQB@ zdOzRCJ>|_L$^CFZ8uYKr&Ya3!yOnKx zw{z?MZ2o@{1M|m>{{Rjwe=@QZOR$2cdyVD&eobSqz-93gSnE7jJ2OWNi2W}5JhY;elQ!5{&g2~D>XPz}+f zH03cDh)w~>!R6d!!P`*USfNPs0AIf^R%CmvL@cY_0eVGL<(>CcZhz9}nAm28B7!5n z0>uMYR}1JZt}TdvSfpfmhCQ@@Gx;e007MbaUwNq>LGJc_b+;5F5XeyYtacUd#=u)& z3f~g^s;1oYN;NJ)i^!q|d;b6h4Q(%;?1sg~)L`Ykp$2AP{%ZR@5MPRWYhXXp-*$RY znEoXsv>{N$v}(^RSXpNBI@3>bq^kTo`dFzo@o7t5obY6l0@Xm9xZu`*q>2Kgs$+J1 zM}wa<=h|tng&{PQx4xfGVDxGb28s@8K`15-F1+?=|@+ z4S3q{XI%5WX23gB*}na?lid#rdM=F8EL1*{kegGCx$&w^Py81oyAaytucZTv+pgB5 zKst_U3`zM`bbG++n#n@{0Hhh`6KoI~35|_r6=-jKpvct>z1E`X>N*~aK|2v9dtl;gv&et|8oTqUVo~JN6P!jSYq$P(r?hHif!v>XYRGEr< zdg`NlRH()ur33-O-vr{zo3pT}tRK)1OfxyLGDQKAVMWFD$@lZL(qu{!V-XA_Y(sJ01g|0@T0q_n>7Fv7N^@j_S&)!2MRJ;3OM_ zHzl!pad0fpBrYQXZ6Hk_!c-*RvS*;&Gb@dhy>O~HgBL2Y>b%$a@8=!K_WprDrTn zOrU5>33~KOksdPSkT;%0>W<7u^3}KAQi#vvJp38ec*7p%vg`(&1N!j0QbbN(Aa zsc6uv+Wa>FKYD1Q5og1Ibma6_^T}S&id>0er1Ks6Fj%oKWR+JY_M^-+zpW){12%0* zt{Eb0k4zko>R3j;n2c1a`lU4>>iFBJj!s<%kGgheL}`_M2N}VrDTGvNKk(p zRkr#Sjy{Qi`?L%ocwmNm&UTPP=$P@ z!LSiRIGZ&mb3(2Dk$l@~!G@sgx>@xUO_C}#Xw!xk87!(C7+Q&;IKr$^>G}`*^0kw`d|3l{=UBr2{{T2mMdMo$DYW`n zGXpG)=5!An?imwfzGvVI;qEM`G4z(k@K*tb>45})(5OV7XFzbDcap9D0F~`tAbR}D z6_!j{-bigL9Rhf_Mo{<$eP1U_m)u`U!Zpq?d{o5ISyE9}W}(>nQL@X{TA3SLB^muPD`-67oV(IdJBQ#)hZUk@%$2ApZ(7h zEYnL8GaaEa8rhnv3+pGD{%@K1?t;QoUR|TIX9+qTfG7( zEG81*2TqgQ**_BgoamEddlZ+ICQIa2@e_)iXSx94fMvK@&#Ic z$JB@uwX&?8zkh}+9v?GhVA(QNLy3usc_6XUQLTg9-y=m18`U2|-bb{5)JvuTAyt0L zRm6@y1`nMmO5ebIrdEoHJt!#we|rr$s7zmAqiwTpO-gDD{{UKxRdf%z9ESSW4n&R! zV2^}iZ=F&16wVdj^%@y7{0cud{>+crwH`KVugyttC^a2yCL>lCsa35tjNi6dH&fJc ztSq-2rlKyPlySf!vv3S?Vg#707pu!PcNTP$cN#Zqe;!e%duS=L-0CMqL4%XtA*9o~4ZLAs=No(yu;Y(3Y<`-FGA zt3Vj&t7CB*<31hRVzy9*WUzzdboIq>(XEvvk&*RLuMEipAE6q{2AULq{RhA03ic;z zbs-Cc!>s(|YhY#rJtZxUj5zfl

t4eH&~`<%C`yUuJ|=f|I%ncJV}1s%B@BQr%fN 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

#a2mS^7^~*&Gk|5y0`SxnznB)%~ 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

r&Z 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≦RY-kxe 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

=4@X6sG2I8+7~+< zA$7i3b1cOt+q}mWQB20rC^{uP9FAX+;LF3psWqZ+PY@B9B!=5>$P^I28Do1o(=&VI z3nRL}Vx-N#3E5SpB=qGyOU^OtzwJNDP$|E=QfTBjVlA`Y;3rd~pg9BH*M z*6b&0vtf})__-%wGy|P~RG5+I1_;Nxq-Fu>m}2(JI}x#;bY(P0BvHm0*MdnpZf8n|B4*QL|_Fk~xYY)xrs4=H}Ybc3$bnKJCW?Vdk5 zac~!Y1Gqg`9YDbprgt;h-xG-SYRrZDgZkz_)un&r%RlA%e*{n3du9!2&xK|J5^BKI z!IBu{_W$n|A_0M1L44Cfupy>3+hi)1P2o{b75{Hcwu#W$+aTge-03%OiOALGl>AOT0j$mQI`il1a-AGqF`B{hT&U1Av?C^_)O~;bV0F&Qp zaMuq%sq8NxU3%hyofvFqixG*AjyXMm7=$$({gjAbS>533`1KI{LEk5f8sy3Smxal{ z+rP*(oqg!Hd6W@#YhY;`eZ!hL=sXZCO<)QP8$>0~VCu6E^Y6S`olp|~S}Mdm(5%Zo z+%2Ra;QHw7aJ>H!Wy3tzQ!xSlAK7j{zF2hJ(&L#_7U;t>CIA;23c`o2YB`VP$*%`9 zRqiY5QqKl{XB_VOQd16YVl9ssbqmfGKd0auHP8YVk&6O4Z-uQX88RrD}gi#@A&v(c^3kPfUQOXKars(ap z-lKZv=eCb7TvgEOy7UA7*7*BH*x%L7kTt8Y<`f#2pmPd4|I0$U!V0Cm$sO_4-mxDly@^F{&!TBa#>9brc(Wh#fxyuwAdWD#DDZfqImXRh+b1a&vavU?Y zx>*v&&XXbOy*-m}v%OU@sPKO5wBDkR1U$QCxbD)DU#5iBV?Xdm5Bs79lIbj_;U8_x zROnVKXkL_mMN^qA`bF^w z)9HdSygcja%zhhQF83p!J(cx{@(_Uc(a%Sn>`?F`AY)6FfIlcGuk}k)MW!9e(YA%0+i)VW1kocXg&Ap1n zxZ`h({(g`;Q0yqX+!y1pk%I{iz3h j__K~oO8_*|?p@-P8yn?qkorV|{0~r)QqrU)0Cqk^IJ-w(^N&3m77=>;?!8+_qu^n;j^2v9 zdm8|V8(PTpLXVipUEXYX=CSp{f$jCmAdTBQtJh7PZ@=|fl&cGDv^stH%9UsG`&WN$ zl@(iUf+l>GKlL4W_MYJiW1Ya(^ud?b%tVoI-Sg%mI~13j1a|TJ(>U-e=SFpLAwTEh zs~pTNfrMf9oNjK6B;>!^F}+sCA&KQx-s)EFN?KA?^T8+Fr`9OQo8I^-p2!M1{0!fK z92{!egp*JsEqWt%)QnQs%CGo>JFZH!yc=iMYb){ti()98I0&D-x%AV}|N4+e1WV-p z?u=FZ;>cTASN&7=kH}x0!SK+-HP@cBMv9l_XlWP^RggW(dPAm%R;>16B~5{3ZDt`S znL(q@mn1SbYkc@#@oTC*JL|Zv6#~f{V(p~TW))k$Z;_ib#hzy@n&pHR5{)(W{)XP} z4)qST{HR_0yLW~$xOy+g(bhh$=IG#fP7iR)GdGPPf z7a7yrVjGHcZZ=HGteu3+yt?avscoyi7oU;+c;K0xMT@HcS^u^%Gcqp9jJ@Mco1lv!$>Cjj{9d^y^s^pf4lce_%f0JHD%BEZ|+FBzVGVXw)SHMz6}X3)ywygx^H z|JTL)-QLzlpYJwob3G}GDmPJ{eUC2*a=FeZB1|JR%3aIct~TA$DRS-Xz7LwELs<<5jlKD+um4rOHB&-PPBRkO`%ilmb(sZ=?p5Pzc*j!R zd}Vj_RXnvZEi7yf6P!V2(b}gdg)r7 zc9QkuDYWDKDTOUzO}lL6PWp8GXLpiwEcVRv(|;+v*T1G`VyAoKsCzBYlJ|7fn04-G z?&hwLEk}E-9(dPxOSVR!zAez4yd>Z#;f0yxiRhq?OJjEf;~~t@qIHhtx=TvvDp9+y z48~9=U@I&8=!&pePlLUyxyrusRGZgBAE_3btJ`d(O+jkDnZoTae){ z+|%lsT=#mWR{cG_{gd6Z&>&f?@a%ENVdedm-zVx(HArvklTEo56mho!?;+mP6<=i| z_^)fnCC>^hb^g)otrg*!$J?ihW|B7@TW#)oXSah+l3$oyY1*@LcD3MNo+(nVc!vh~ zJRm1^l<=tO+J6cc-#eK6{g*BI4QbDRD>AvrDP*Z!(W2czT1}D8$`h@i^hYg`anVqBGB> z^kEg26zRJy+|}ofVdL9Q-`XW+#%OCHQX&O=`#&!+OE20ozTD)9+KTf{h(8?iP7hW5 z)odTC`sK`<9hA9-m=7Z4g`^8l&VAi~gABLq?YWfmtXL+zO<|ENbCsyj=Axu*;y-@b z;$rxvGmJ;i=XQCEY91b|c?9!^_2<4(JfhG%eez_T2bWe=Yu9h~`gsTQ_5+xqfdkJ^ zMlG=3+*qBKhtMWWP)`TRzZNs!;eTL{9D5f`a{Th@!Jx{+E5{F#-IX+tz4D@(1c8T` z0Gy7@v&prbBM~Px1$O^EeSaM-|M2!m=`-ygV$RF$@R6>JXJDOboZ|%XpA74-LI0d8 ziLx%n<4fA#LJ7re+lh7LciJb<4yEh)sk@u|E?b~lmX7P#cF z18cmGeK~J2hh1uToR&h0ty8$UKTzY?_K$~x;fwxe=gGD>PWm zCB=WuecrqH&xA%wx7M9kOUaIp#*?%q_WSzVKt#VeHhNN{Tv4uliKNg=@gQxdBH%F5B}>#6C*QoF1)_BEPZNzQsH2&X6|o zOF0m}z@V%d4$P8KH=cafm1%hTs499i z^nps=#bjr98)nwM%b@T_iratxC-;S#1HU=}IsW`2D0rL4r-C!QZtuDi{yzVyeaFAx z&7S?D+4D(Z-nkw;dcR`7ez1KEk#Tah{j3xCUH;Y%t{+8s;tX|sWUiydk z=E(%fncmraaDdh)1?3$#>})OpHvhan5Q@{KE4#yNJt6@BU5!7VEpdfbG1A4IQDBG5 zJAcWjZCB7~{~D?&T{;|f**(fSG&uNHNEE<2;+B8Zt(!+b5Acj;#b5qSZK42 zW|K?PCx>5s^xNstKfp1OCgB-tC*sf4p4oA#Me&-W6 zuB-MC8vg|liYwKi@UbQlGxbcIi)Q`ND$V-K;R$YaQvl z-46iBV;T$1(ai=_dCkFyBSsS&z)fwcfUJMYL<1r`Z*tvNYf3X+Ik8lxeTY_#ZU#~J zpgS~$*U)*njwyp0d6XE||a zDm39HRPOPHg_E^SUg&jOG%1%gE8Bvx=P6m>(fNg*!{$4`^a2JF((#XM>e$Up= zWIX_y@6$v6P};Tx(SnbHceU&Rhk$vN#eM*g1~p9!9*uSo5bA&pXQ;*K`DoK!EdYRp zrFG|JL9|&Bqtk6|P_j3%O}~$vq!RsNRclau4ts3Tw(7JN`vTQI@8NZ`xr7B<-aL5C zVPUlzeeckH2~xOU;nOXHCR%KflFtY?^z4rL@R21`uZqeSO~Eh zUS`36Eo>*{J(B~%k5MP6tJCQgP!#3v`p!K706oYKk&eOYtV=GAuHkH)4zuqwUAe#Q zqg~O)#m3GutnZ4F9>;gCjkWbp*JRv--$s%n@G1t*w!9l0-GDDO`SR7?)+uzumM zc+eBJdR$ls-ni}~-U&nfb$<&W?#O#EubD4974de204C9fh(cgTv?rN2p zM-muW3is=BS|y@sV*dsfKSXTUy41lkls?|T-DQ(zZUz(+$ez?w{&2hkm;4>@bU z=qkc#id%tto)Kf9?36bQ z3LGRQe;{Fr|EA2DbmGXu_t*fVQ>MC+TB7?mk{F3S!h6`@j@Q?>xkf`%dG~KvqpRl- z^=FY;g$8q$)3feOH}*^hUr0$wJDBVRQ_7$|UZ#i$3KfMMfu$v7S!)9CiMH0#7}z7t z^zwc<$L{E924F5srYHqdG}rGK+GgxFBY7ZO;8s9Gf<7)5Q}Qd!b?%S6W6{zR%JH>j zAxxYjFI~`dnyLcc;EIH&b~^+X8#^Mr(A<&_2FX};YOJO(&;xFoOF^%P!xo07Qjs$C z3!KR3z8Kb9yw4%mHOr4*xvgetDcbgy*W}NEvRM)=9_PFt8hm2Vm1}N)aWcRIv*Wg& z1FxDhx0tHxz{|$shv^6hx=@%0w0ftJ`Jd<-dh9NC)Ys=johCfcM{n{K*9XiT_7uR|#&|Rq@6(>N*jO=^!_qpAnP>p2Ir565 zLtN*608t-R|J$3+Xw;>uO|Q{8i5JkA3Rpx5t(^egaPdL?$?#%}f8-S2=|U&+B0$Ks z<*s5OD9_^p|4>iLF--Q9QetrF`6xJoGHrYu?u*`hN3`$VqqCpz;o;aJ^m^Ah07Fbr zr=nc8tUcpvi)(sJ`e4oDC$cxri_qq3Q1up{>%+WYJmHYDt&(foo@||ed~;Zu3hzl8 zg!bR@Ua)xA!w)md09z~cI_h%vkAC9{U>JL5Zd?b0xM{Z0}=ML>`U?vJ;yOzxFO z3VS_rNJt18S7e;*wP09pNYz0%>rk_Ml)8dFr@ddYIU{_y5cesPPXum;!WO1)HA2)J zBOH^2du9#gT|RGo3)&VY!-t{QJ7uSP0SRz)T7?mS5jdWNCuKU;a<-X*eY$0&^`Cwt zKomB(?7GWQ+|wimYwbUDcE9J+hDUR?>c)A)YY1 zjR9qeuf7!-1BIdK34sUMgEU6qTo=&S4yUb_vz>CNA8z@v_IES?ncxd>GZ40rp~>dt zA#xf07|Kp%w?g@kpwG`b37->DlV=}nc8HoFF0U*zmbL34zA#_W{$)$8$pP6vb>(}l zY>QpWOsZ-{HotgueXNvE&?j6$bh7f``CmCH=yfPssV9Y$sxbbN(_hOi?fzZLpD3_` zPTW~>56xvkW}_*ugi^5l^zh4?0qQNN2C;he;^IQPir5pgLI*NjZAr#d0f+2Ny7nMS z7g7PR(xcJ}X@>}YRY+XPP8s9!W2a83JkvDm4kIv_S{ia$rx*GjGWi&>=b@JO(?$3;`@DqeHKe3#*4Z}KZ zG%Vk|zhiDf7R+tCVJKdg6&QFkGGxBV3r4A4?|B9NO+-))!$U!VFLzizsi|oMOlwCAjkw&Q>`&jC?q_L7+aImJ!r=B6$xq`#I%kCxDfrfsxHG4V;`hwRV( zT1I=1cs6kr#W9Yl^HGvGG|5)&nPoCJa#k4yvcVh(|93&WqDfh6H+|a4|3k3p5%Tc6 z2UEW48XC0>t)3gH!*U!_E4pq($Ey?Kx!hv;@7@l6IWX*~(}UlIrd8&P9Mr>~)}6nT zYlVFOp4dX#PNx3u3$!1<(1td9T6)8(HIa#PYfiTs`>xO8b;~!2Rm{x^zOYu!miL7| zG-?A^tds`8Q>Mi2R`{AAi9`Od8DY4k{vzi)ejnR@BPbA2yg-5Q1gr05X95(WPzzis z*+|q9k9xxDG=#10cSr_=V-^0E_Op z;MDnz1UCZrw8#8VbHfIqzB#!O$A2}k&QHE&r)Du4f42DA9~!QVTZp!98tMFfQItT4 zkKhN5U+?$eD2(4_ux)x$LMv`5P7^o|=xK~Pdm~J=G|1VwSDtc=BAbqJ;88d(gl!5% zv2L%L)d^MNO8#+QMzPyQOrhIRww8a?-UzEq76aW}Q~Fvbm|HxHmxDYUSKyE%+zgJz z*dPR}4e8tk2TTf*8}#pXUcX4=+;?{kDmQt4# z)^cxlzqAuDSp@UOduz7PFLUNryBxoM8Aysbt-ewzl58_Y7%tq6++E;iQJf!ooN}VP z-)UG+Q#giBXnx2fM`PzpCk>2uH!Ah&ykNWS7kBZWu?C|PbD=l#xRVE2pmBQJg41!`Tm^Dc*?!g))|(qw!K zYV=kM!j7V$KZm_9+!_0s{MM~oWQ*8V#RcO;(Cfpd1#a_WdCd9Q*y@ByyftSTi7J0M z@anrP`?)6!SdCyT*Y z%XiQTv$cPAeLFPO_9Mnlt%tzg4qg5|G^UexWlR0n(NtM8c9Gi-JqRu}&*uTsCh2>p z0FT{Bq#RM(Rb!@_hU2l>=@y>t`lD|_1?wnV+>W$~^@l*KEY?RX-YfIdR$3iB#9qxY z-sNBl%r^_Fu#w=J_Yrvku?@@FhSBO_TxG)1xc&u?`5cQOH0w|=!x!4_G#44kN*K$! zrRw)0f1_1opSmUP-ebHe1S%gFk62}^q|>M>0;doCG?Y4_eRTk^h&Br~c3dq~jqpZ8 z?_w$%kdX)%QNaOe<7uMm)su2L#AAYMtOd72bGvTb3Y(X+NK~m%Vue4M4(3FHtS~I8 zTw#;qZxZ!>h1+rK>zB#)?e{0c^&$DG0}2T=J2j%Hkq^&tbK4K~+@eZqT{ej{yO`jz zHx^IdX#P5*sql@Ga@MWb*s0OHUA}TOomnYt>NPhj{yJSY>)$15S1wkEgA2t&;^cs43IPQ(oe5dJ30>hxU z3`T=sl-5@GK{QJG`eoRH0a(>+kgVo5@j`l!U&<2+15+JrR*Wp@^->e|Vw-&b8B~a6 z$3XqX&njx39a6EF?4hiUG%FoU(-Phhh0UntS(Gc9n{Q6ZZdr3e^p=|IJn5t}?9j~x z_?4Ek{UeW9+pCJCFpj z(R~!-i}=3kM_@{iAC^OYM}dDG);{MuQ($`Q?Jtu_4p=Sk)-ozr!R z@W=?gkIzv0U3mO!qkuN*m+iMTl=>ncrXU%I+z9 zo9((rNTLr(o42X=r@AP_D%D*H77!?R#RJaMAIs(Vl*U$&7dv&UB>{(KY$78XOKHWp zg{F~hSxC-k{g|gXkNP|?Ud_s1{qiS{``$YSPA zrP*kxMMIva$n00$O%*fh|6~BVy~u(PSq*Y2&A&MKyf>wuc$7*C!6FkBldl^-j@v|M zFP`}j+QxhPeR8*`*kC=R;wTTsdE4WVJ|2%k({5E(_F8h5^VG`r8)SaJvXlkhNX%<~ z)AgwaR~t@~ZmDFBcSrvAN|F4dji;wvMYMAL%^X?p$=~n6xKxrqI!mq?$4TflvwU;c zZtKn2E#I1Y%b1Z`97|OiFLFqpVYoB{1YmNZUq&-nekz&my=ub)S_-Ufb))u)rRjbRAuavrh@hRh$s6l9I)rimi}_FQAHMuC3^6 z1n+$GX@WLa1Bp~v9F`u&JBV8=1(w@A)!kJqb{<_VmUmIr>B%gV_hR}mc(AI00d0=P z4p4Q+w*SbS+`>>SW5As~b6Fs+>tAgZl0Mo5nXgn(E*$)mr+EO23Y6K7hrj2#S)@JD zn1;fK-%L3Qd4UWRt?NgmV{vVf@f}eiP#*g^;Rm%A25wObimxkltD@hyp6cz%aUOod z8t!2SJ2I*Wnp6^)w-X$Ls~R#Y=Z#?FD}0ZisF)s7#Eo&gepxW=dNaks_EQz6@rj}# zvR%qlB1nt=*ZLi~zLnF+Cs7yB4rKj#AKErga(ir%d_&?W@D210w2)AlO3|5JD@YY0 zIU2j<^p+9v+R7yVh*1kG>RZD%((+l%x$E{jzE|hR9M9vB^sd~o*5HkENFO?x6S+0> zPx)NSYMdDL&YvrnZPByEl@rtn^IwHGFMZN_IL6X}2W3{)#aw6xhr5nU1_^SoknHMRt$i{x5fj-j$+QE#k+E+<44l4R)`&6$+`M_SNF*M5sR)8h-&X6~#CydV$iVra5k1s_xPG+B@~E zHJ>f+VF!%WeGMPXWL*a{-+qTPr0N-A;|^hEDt+g^Jp$8B1l@lF_eW4Hb+MUFNu6|) zyBSVkG{M$5TIhAKNV!MtO6bifk5s0MD2Lx_Aq9V*x-OS-FIYAuIyHsg@PS=NPoB(8 zcPFRO+F#GLsWR+x9wUdG)dL!%`ZYM#57eM!n9rNPl@27HU11LjoNgVN;dY*xrn(xG zH}z&i2_>mi`=n8JzhNU`>u-2^WUUSX4IeXGWDsRhc5EZxbk+!ch*0eJa=xKaH^yZ^ zg$?$-x=D~S7Zfv>mF@x0`rN?x@2=|)^s~;bE1NZl=|@jCYyAu&I zf3H}lB*BD=(-IbQMg!7n?Yr-ZK2zNSB`F8E_PDKTc_VsOI3oRksH-G+tg?0CuFeP< zr)}?+IjREZtq)i#B)X}bEj^3ykonl_VcS&yb#7Wy-YewCY(_Q$h}7jS4sBL83EQ=E za&uYc5v;J^O4^EDST_6P)}_-P&yfsj;$mGyj|$7?;?h*FaIaaCpyCsMTF=r)VM@vV6(Kb!D=Ntrvm9G9Q8sz) zWMKL7^nxRf@9?NEmEX{INX;!`VPd)JR2RzIZfz7Zl^qdmx_fn<;^ja5p4I6QZzz83 zVm!wvqFv3+nx}LjUPbsRFvjv_+kM|D4?76nA95Q{pt5pQN?xrBt~)&-1Z16uyNd2S zZ4bKi1u>inV!-b;8uo=ZXiF}1*RTKFFiVzK4RCIq6l4vV!wGCR08yJzWsyhO*^}ao z8$Kcbr^59fd^|V3_DJDznh`11TGZSTsqJ172q5a(R5Uf7p{@eqKCp$j(lGO$YzX1@ z%hl06oVP=qM-SAIYuuzVQ#q--;rb*yxz0eRtsE55a7@KhxR+%6zc$B{ng+{$0*nG-Axlio+8{vzajEg%^g8Q_;8P5AK zK`*z!xc}i9hyQvQtJz>g5YPWCZDG5XDAU8^r+dmCsnKpIgp??4Vj#R(`p}uob3xc( zJ6;hGrSW|EX&Pff_EH+;YxgUtVZ4W{uMFrFXg;CQz7x(N2kDu)ekhe7Ji`xDtD`TMfPI9=5aGsO{wzGr~o2JEuLsfpLbYMO7=54~AkX+N{wmjg$){ZNd)% zGD0q-?REbz!MeqZ&f1F3*9rs6>FXEKvBw*3;@^&&#TZDN08f}64C_PpG^Z~K!kLSN zblRjTnE4L6MYXCvk$))Sg`jfIU?a@(lA@Z^JqKsni6PS_ zX?A6Jw@^p!b_>@Zx{kOVOs1#UInQD~_V$4yDajFwfT3BBryV$UTO{|;v32yt_FtY| zWLC7Uz1mkv7jVpLcm>|^*w@_;-XH-{IT~e6?LM(-E{aGG1Z5$-;Xls% zHjEvwTe}QzKF3BiLSaQ9-`*5(Q%?$%hGl>GWBQor?$H6}{9RKVvd*rGxE0A6!p$kP z$=A?9&@Z#0#m1b&+Hn#;gu?u!!ho7RW=}(9;$nk>HxvW9+2rEqZR>mGwmUgo7$!5@ znI69ut}-m|a-Qjh0%;+i@ZG#%Y9*~#cJ^k22pR-lQ-19v4@h#~!s!JszMpSb%xm2r zb4$_{4Q6JtxO8Gg4C;0-qZ;Y8&`#ixeYg&oRiSNCRi&s-lkf`#R;kM@a=Tz`Uy(%V z&72a^Oo@xEk5U9FA`%{MwDL>W=5PMtUU}v&7@WVN9OKc;O(*v9WxRtybO-7T(xXhT zFxD**_`Ls@1Lq^Kt88w(Av#g7B0&7pC9j$w=w@l@0JLn3BBX_69gZh|mGX;6#IlM{ z;ilN1-jdN^5B8O&KS=aDX$-U;5jpxst! zV5X1)y+gHUkOQmz(e|wsOkC+)n6Kq7#j-J_xwXZ2>+AZvv&sk?D~xdXIS7=D$XE4F z&@8)S=9*8$(-$3Z+P;Ji18LY|A?2}!K7VRX9GQCyoOqOQarH~hN>Y;lJM%BvORv7? z=jjZ(d>MCkesCzrVE_d+W?SWa*Pc*(toI2wCD;EqXITSP{q^gdqn~+*1243<41ojk z;co!|g^542041xcv+lXRzIJ1%n5?6cJhMP$^X zs?j}+msjhPWf^oq8r&?x!DEqt_m)oA?0*#fY!-)x0c%B_j&MGWNeurua z?VGRf@f6Ti96XGWhW%es3>fjB&5YT(uszj=>c!iAW3P{n;LdHXhRKvz76<80OC1m_ zUJ1R<<-pR38qe*{1i#<@I$S*6qjN+4c4f7+_hEBGEFLTjNd1)Bt>aDF<+=EqN<%l5 zR`ifgP7kIxfSbAm@)E5m)|m;#88meemF;mgi6;n%^(24Am0J2i?Y8DmwUZM87Vq9c z)LJED#k5K!60vhO+;KITDwa?0ZgwKYe||W;0N!YZ&J_Wh9KYf}7k`x~&24GX-~H0p zUTwN5Hw|{W z@)2}W`YYSm0yiyo)q0h7S}{$2Bwjl+J>l=-%!bB7IYjua+dGvl?S8z zee4doykdGXq=49$=60vq6lt<(JWGqGo3P*w!R8~LVn53gch4kdHY?9Cd7c1H)S!k! z9x@XwolKaKB&kdk;Ny#Or7XAz{HA`H#VF0ytCR$+`dQAbc_K%BA4HFZI|r-T@w_;Z z#7wydL_G?0V+PE)09$B8JgMfptJy{{KE>4=t{E#!doXv~vo*Dv$PG3G53*Xa(iA2n z`)^!IK3_-Ih45mvU!8W7Nj!m6T*9Xxjk(faWtm+)pb)EEMW_)qqRdX!;a5b!&2xnC zpY}5O5TNk8zha2#(_ww9!Q^c=N=HTxvcuE<-+U@TW_cA)nz-IKc4VT;Z%R$3%4hJS z)RB|(-`3waQ$ljsP4I~M4A=YYE>y4do4rL2gP$j|>q<{kKYG=LNFwM)%7TKDrRbw&Y8TCh(4cz=v*wkj`1$tT z_sBgA4@I)5cg7^Ky(}R1L~+I85d*HGnRIxDmf-SRNhe`Xu;NfeezgDZL${Mf!i<_1 z3I*S}#hQC2R|7LpFDtLo=A9Hujk+Mp$wnFF%-p@c4ntN!3(Z;3!JuWT{-?g0Bvy;n zddg-Ptz&qM_?gq4?;kSR8WSd7NkT<+8U}OXT0_Wrd?jw6hd7iH6PfTL%)*xI(9@MbE^zyol#`U? zvpH$CK^aRJ-4wc^3`x8_q_Cf+nZAjFSNDP?>=4_~mKw!oalG%V?>it(JxWFkmJSrj z3%+UgxHa^U zJ6Oq8*n&X1rdt!^3R^%0W095kn1ze5F;e$X$Jf^+t5Y>GiLeDNFBn$}u6X>)9oWKC z`cQy$vcMCDlG+`wljya2HAXdb-FsL`x@geKURV7JuT^)Tx`m?=Qe72Me z+`%FPy{e=`3#YO8*jhTsV|a6J4>otqk#+`i7fUFujV7KR@))ike7n0iLslQqQkSaJ zQ}!wonB~*t0S&m*Nf`7iRGt zac%{%&j{wo0j{ZlY4r-!CtT!fUQHG?>C6?z>`niKpoIqCA$TpV7UCY68*P|YF|etO1{~Ehd;j@ z7${FozI)=HCB75bfUr%}rw)RNBccN*CMLbEkC32b$PvvHaxb?uU)B1`aSl&IqO}(O`Y$ys#V?id_)jBy1d(x}t*_ z$`wF(S9jUBLxp-jqk_>*XZP-b&0Le@08s{1^BzXNWXE&5-C z`{qyJn9uN8q9j3dgn+s_yz`I8Qyu_N)s74K@tT}syq7R5td%Wh)UhPiRn=dorh%Dm zyDatjPH|z^zBV6~TFh}$fk`Oo1vU{qG#AOw>fDZwWI|nnPkSgH%-sGS8{b!Xqw$QT zJIV_!_Ts%(7gq91XX$6W<*=Q#(5s07lCFKHg=Ii7z5Y_KJ%Lilc}ZeAQ$j-#lh~c; zd2r~>=o5rlsdDp~%kKL;2*`2cCqp z9KTwl3MKU%d^A+c|1p=!ckHUuGVNm+1yu{;LmkyJ*0X@94CVvVyTR6IgJkGm$VkE} zqsN-R-c6oNKwK7ND~y+Jb5NiZFr9K zKJElHu)6;7&*@XHk;dgb5JH#w2uyqf{R@Rc`%G{AzXvIZx{+`E)yx7ISf{E=DRN-T zQ{{{01;}%RE5eu388_`u`%X86&Gh$&>vFBrGp%%xGs`Rdi4L4S&&uVURCBFPVX7dk z(OzCS7SS9T->RH=2Mkc{Ve^Tnk*W(?o)O5TvC3=B_{115J7TbH1z62f@;W2IlKfe} zT=L2X!(wPBkgC2)WbnAj^~slb6$AW2N>8@;Lg{3r8(IpQchJLV<$n_YcbFt9r7dt1 z!i{)WFXdWsGJlqv48+`{rs&uvF6V{MEPLwNS5A9HyM?uPv6zpKy*WRNC<&)4iH+gU=}!&zf#3l|E3l~B?e_ge}1@9Boey0 zxr5%QekNt4ci$|%ICl}<@W&`{898%Z?X*`~ZhrPNy+3Cn_obpw9)7QpdaDvr_u}VRUHC&BWtl^8oy<8Fjcim7Tt>rVz)z4r3oT%_)7@bxKW9 zI`dPUlE0IGsEEe#DS5W2B8ZIi@HU9EMhJw`rdDeVy;0rd7KizJH#wk0=6^G`zotE_ zs^2>VUs2OdxQbx2pQn$EA_7X|(`Ir;l>Blr(5Jbd{KS3-mHafHFGo-|QKx#R(o+BW zH%0Z7JcDsjW|pA^zmPPP1{}=xzjHTOH{I}23N$OxTCzwf-NKkS%vN$wMkxWLjG#ug zD6Lrj3@FqVYRq4%f5rM}&3n3+{N-+`!`a@0O6T#i1x;ELwfm5kBNRkNXCc0$N1u7G z%l-iGB8)73pF6`)9uGfUK;}FUH}yU@WE2_K97#Eswk6IsG*OVt87<=8wLD>UfSkHT zDqM|wfdFY2qKydoyQ*g7JQ>CK{H>gPpmA|* z9FYsQ+bak|#@cOkc9&I#+To5^kb_TmIR6UrSSOiW{v@jQp(WtC;K` zLXA;zj0hEpnupWpukecT(!#fuB8uG)xF6V^!T%zv95wv4ze6zn)fx5Y}OOd z`S|Ky_GAcz=Vur4Lw`QoV_J|xzwH^Z(p}c>R%9&AX`Bc&fFADEX-nHDjUw{}otu{q zDiC(aHpCtm{+qFVIY~MZ?+xOINoD^d>-`xPZ~X5}Z*B$r-}QeH_`eAJUj+Uy0{<6* g|NkNY*|TY-*5Oqe=)b-E&o0219WPZ}^n3XK07^}(bpQYW literal 0 HcmV?d00001 From 9b41d80d9ade3da18e94ef7a70589d1aed10e42c Mon Sep 17 00:00:00 2001 From: Syping Date: Sat, 2 Jun 2018 07:17:29 +0200 Subject: [PATCH 102/359] change SPV screenshot format to .png --- README.md | 2 +- res/src/picture.jpg | Bin 481200 -> 0 bytes res/src/picture.png | Bin 0 -> 676980 bytes 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 res/src/picture.jpg create mode 100644 res/src/picture.png diff --git a/README.md b/README.md index 9ab406e..c903a67 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Grand Theft Auto V Savegame and Snapmatic viewer/editor - Let choose between multiple Social Club accounts as GTA V profiles IDs #### Screenshots -![Snapmatic Picture Viewer](res/src/picture.jpg) +![Snapmatic Picture Viewer](res/src/picture.png) ![User Interface](res/src/mainui.png) ![Snapmatic Properties](res/src/prop.png) diff --git a/res/src/picture.jpg b/res/src/picture.jpg deleted file mode 100644 index 2439929a047ecb78d916ebda3468d5ed0f0abbca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 481200 zcmbrl19&Fewl@03?%3?OW81dvbZpyB2VZR4NykRVw$(8^w*RcP_d5Ih_n!Ma_uhZj zGi#2j8gq>CPE<{d`dI$h0w76=Ns0kLKtKUxp9kP$o034(-NF>7yyb40)`Co(GMW}EEEWk zzr){1K2IQ^VBiptP|z^2aGwl~NPm?S7$`Ux1Ozzv=To20=KyeI2$Zjkf{>_+hET)~ zXiNcddC(+6wZG7nW-dvYzdHuPz+zxxVdIdIQ&4`RVqs-t=iuZL77-N_myncFR#8<` z*U;25GBzjjaQ+kih3x-= z3;7clC^$G6IMiRbKtSF80*(w0@s$x0MNkpS&;ga0DF7NxC@!z|7Yqrr(k1$L#~D}* zQkHG9tG}TAjqLv&u)zOc$o>o1e{ih=;K4vXD-R4Azz-O4_?iXV3eDW=emL6@>}ge5 zXAGwOMg-&a-hLu!{Pb1LNw zHn|@kB4pbf%J$(!@Q9>pUVY`?%AT*UI71wI2XPgxLq?>sSd}pj6@YY_t10pO0O(5W z%8)B1=#&l`K|pmw<&<#Vl?%V4C{y*D&Z}l{{AQ-yb|a7+bd8$#wfg~0F}~mqcsu4I z2(5Ub^<#SJ-imxNdx^RD0Qj5R%()^Tu7`qeJsF%I0-1*hwQOlHT>6&~F(Cg8f=qF~ z(-$c*xrYmovvY;^t~njD369`J?Kzgz6se^sEgB@{r$0Y)VwQJILccPL-)p^_Jox=W zJj*%f?|uhq#yOT|dP>2xA>drYg5o52PkZBkjGy36_I*TzpJ|Mxj8ZsP-hdiene)S8<80HpZEyn>Bf`uG7 z^U#y8!scr{$yWLRIQy#nJMlC0o15x;hxV(4d-r+gzeJ=NxhtSp>{R~S>V*H@_W#nC z_P4&Wr~kXYu;-rc!{56f0KoNljuw-T)qEDZkx_#^%(3DsRc9t*gZE6?@tOF)t@{u6 z4c_0}3p|Z~*Tm9iO%%Mqy=VIpUJCzj5Hw=f&ca4+*w5b1-_!2zYhqxPz71-(o^w|k7$gN-XQI1UMd#e@aZPO#mmu<@1nGa%{xd~ASCecW6Y+NYN2fZqk z5RW_`zVnfM0Cp;7C9|o`qt^PI-&HWuBe|lNlUh0W8P+m$5(z-2>^wE9X3h6SXYYje zHQo+-w~ReKjR=<___yJ%D1CYdf;`{yc|HI~Dj$GH5gsMt>yV7#N!Q5m=MTVdRkiPJ zoKME_*!$5q=JTAmc(Hv@-JL=MS#|xjyd%}Yk0kxZ@y@Ra^J$;Oy;H`&4Sj|A2G)Je z;`geG@x6`Y(m}#o*@9-4)FC%6YvU&x^crdU??pc1!Fm=g5y4&M&}{uu$@M>}4Bf(e8m{nivY&4&R_r@uu%B6M;=eZ)t)tL73)P|}k*ptfQ2LRc{9baY)qSq{TtRbi0`L$xoxWm;JaokTTc%2i=jBm5JE~=cu z*VKA}t!gyJcjnb9_Y|cPdA)&M{=p#2HQ|;QaT;$)0-S#EENuR^CW*il9v=o*&XIca z9pAmRL$CnXtLe9wDQGK28s?++=^)|+FQF*Z=?o5*(#s{I>jA$*ia#h(B1S^>suo%?DjIE8Swn&f?+Bpn%-1Zpwqjl%f2McolS5D=nG$L4-bo0@#&c4|sN9#sTcu71>qY=KJG#7x?0gye`X373B) zM=Jz)u*wPA@@2<;-!|7IM*gbo&!7E{#9-Xo`MaTQ8CkBQT~97Z64Eb$jUC)Z_RX@m zoT?;5HQ2@X;2EaT-C^o~hCD-K5mRd?`M)Hw_pM$0vBO`}9{DO!;@arTcYo3P0f@1w z_Og@@6EK$8lYyGxxGmI#*^cj6G7du zO>`YoMX8R50$oyZ?xw_`64P%~bMsnuYtAdd{IZk!ju+v&8Y;#H8l88riu0PwHy`nC%fd+qAU~|68{`YFaKFrt8*Q

C@sToN4iIR40m_==6No(4B|TH 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ýse}bM?xZuzaFr& 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

hTTt%ajw-r7`vXh@XG5)*BUAT?3 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

J{^M^Jhb5%*~C2Q8$wC|?HA^tm5o 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%0D!iucQup;8}g&)hz-7=s%{{=gX`Okjb_fLTL-xXk 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

t4eH&~`<%C`yUuJ|=f|I%ncJV}1s%B@BQr%fN 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

#a2mS^7^~*&Gk|5y0`SxnznB)%~ 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

r&Z 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πV;!H3^yBdN~_f>B_TB? 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

?bx10oWeKubYInyzhPclqkRZBxCc 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 z z{Fi@mPbdy$fAu;n_Z8RGM+H+w8xQVKfL3gkz3$A&g0sOKiN4+tT+BTO*9Z%b39KH} zxN>R+!w=7D!p}{hH-Olx@70SSH{I27BKWm(wmC>o6v?rmGlFdOz*d%9)z zj`9E?5CPMRML2fl>c+S!y(bqH>`l|D;=M!f711re#*i8J=D__iw2z{7>oYp}x>;3K zl`Zb}a1tf=-%MsM)g!*@TU3ddveTA%*s(5sojY8M4$FexbSu13^guP7Z4y6RoF_Ci zpeuE{$p&Vy0iTDa@oKqaZI=qUFblapImCXcb%3{2S1&KqYR!%=zEdEXStOIG^KhLM z`=p0N@_SYy(u-_%`!|#LrA;XN{HIEe2*Q}DFz^a7Xt%Jx-vY?wh?2+V3m(W6yH4$b zZ{}J*OwP!)kgyTSv1~jslK5Wni#39jDee+-k$aUc6A*lEWPB_iNcjFDFM0hwj}RQ+ zEyYcrjfsr1FL8#3d(LG&+{fo!YOuAHDy#)P;>hI$jFY2erSL3utE}f3^Svs3Vc85g(JLAos1iU~NtuOl#6nwavO&&!8b&7tHGE~h-m5c1rb#|AS)V>K=Nb}d z+k`LnJSml0fYXwe1SEm0TTD9pPAvF{VS!glL}Bo$^1;i#g&(=dr&K#1R-B+eMyX4M z^~sgNDpsnD886t9EVxv5Nk!6u#iXX}$$$8l1@tTL=P z1X=cO{z}ZQ3JW5YXt)h7Y)OlBCA;@4X<>Hg&k_?b_e6Y0tRY6q8d6k=Bb1u?u zV7=~AmI_9mqKU5%K}`=LQ#Lv(L|e4gITA&NsXEG{NraiHVQ_Vg=)qx>1Xynd2#g&Hv=&;G3)EH=n zgSKJLDW*Ao3+uA*eK?D=1sLHab934gek@DBG|0FH8{h%bsFEjVSj#ttKa{h(M2`S# ztyAByQWE-H-uOCg;3hkWduhMLh1@E(ClC=Z$7 zrNt+@9xVI)G%sOB$gWUzNK<#JZqeg}v+2Kqx!moY80iT8Ra~MCGM!PMGrfhUx#dTgS>uZl~KmD6H z^faG~2AW)@w_W-pXi?X$=jRhuD~_5YD33fgiUfs{cps6U{%)&)5Rpi^e>! z7~tN`W;gX^`=?n6UdqN|sxCSo?YYC%^+`G8sS$Ti`34gozmFN_u0Gn>8DbZ5jPs6n-(6^xDnYz|eag0>;0*v=%ZR4?v@fNU zYY>igD?l>V5qz`aic@b}{1XOc_MQj*uTBu;&nNTYPf<_%;o;$_?>BqXx?ZOu>FGw@ ziS^$p$?1N6z0{G}1>el+J#Zzw;|1s5XVu23QB%`HE7wYo{w^DPRXQzsUy+-1q%LI& zs$lKMFk}6}lSp17`#dpGzpffz&Wkv}e*&l$J`IguU?gf5myoxAuoB+SgDKFces4uRDik>!y!qeVMvE>LWObnbUG$e2<5m-LW?K9>*Tk1Lff zBa&x%{nPg%qNM@;LL8nq_5lpVwY8cgE$25f(!^ zhL6zX{z*$;)!yjA9SnKGR2X}5`cX5q#MkHJ3MSLzG@?({@HPvBiB{)l;zh=Yy=`dX z2e7=&EOoR^^-~b3K7XwOBj!|^-u5<(G5{8lWA2#FTCQ^b@bECU)LN>Y*I}H-)H`XP za%R$t9hOW-MYRazEe9wa84cW`Hhi%M6?GH=nU!{CI+;L+=&Z4fV|K=^;|=wKoJyjp zFwZ^Oi)X^l(_=ba)c5b0b;8J$;S0_b*2^pH_}HWK-#)n1cQkl-2YHZoi)*Q|s~Cq$ zgzjhZk;dA+u47{t;Th3`B$dR~ufkrJp8I|@u#aWqVk)K@t2OA`5};q{Cwt~buc_h% zft1cwocdOVo?TbESUYSD;#pEJ0WpD)UN1DaS~m?9pqI``qG&A`yHi|QSgaZ9nqtpu zJc3T^==zAwPA$TsgYULziOt)-w|D3!>}?j>meij_MKuk0Ng#X$<^B^O#a+$(ZV#L6 zkX*?DTUlr&t5Kf}laNV7L5MU6_)-vwq0v+?1ko2wPzS55;=1%s0|`N8qzmk90C{E6 zJ>#!X_Q>cu6W7;>KC55I*X-w;JW~jS0ixk__GYWRo<_=oB>+nywhV@}y}49_kYfzq z0`=`nm+?9NwG+#t_Y*U2|0nHh?BNyAWAswhn0Kb=3E6p>+u5+i#NbibAW+THBGt1K zSk=q7?sPnNkpgLEJw(C%VAwBo1ED;P{S*#8uVgV5^nTz&{2##xAR9J>ZBA6EHRpXV zFTwP4^if~^js=n`O%9}>e~a~-o){uk#VQJ&d>cZr5XAsIJvphZ-d9GNnVO;_xZ9{4 z38bt^Yf!-Dz0Yd9*S;at9IGpeA(#s89T0FU9&#qmks9OS8tpa#TkLb!OR|c8*D>lG z8_&G`;|AR)_zTS;weVewK%Y(}Y(*nqMzcPbV|RWPuzURJ{JmpPP|)PJj={=PvX2{F zRhDAHtYjeTxi~R-JYN*ft>tRV_qwi$}mUmEm}cM0$Z zfiS#!<>#DKG>BZ^-%_NJ-SX_QfK>fG=`S($A?FWkcZ=uQb8agn5s2ribwI1*4^9;g zZaCm$p{nCaebF(-YNDbA%a5LO3AEFtpI&&YsNX)A*@+S4gP-9|%8!B-CXZrI%w}xz zt~eCy%-%zRv!fF!%o-*c1osMxcD!2HgRJ@N8F6kq9GLD8M|R@?jCo3z0M7uQ#^#2% zko4&9^`C8A;^A|IgKE#B2?>!HLqo4K&K+k1vk74WH5H>k)*(y1>AcD+PYpk>U>vzvh0v0iBu&N{@4nAz>k*ch^@bR^|>(T=*- zrhwair1slos#~chx3ol=RBYQ~dv@-~Z$XaR3wC)g5RzQ5uTtW!?dScMA`!rk(PSNt zaHzkh4%w5i!^2ny<^gOveadV$T@R@y2lzqU8%a6zW)jat6jrcv7s~nxk1E9=LLB+? z_HZnB(Is*C1+Yq-eZ-bl-~UhD0MXjT(U11`sA6suAWQlm_ObL2z)Y8;xnuM@; zyqiN$eX`U^N6XD)JLz{q6_5VoIR#%DgKwUb(EjyGNHHjc(bV&_6*0@Dl6VBrVNBq4 zPZ*4m>CLa2NlCU;IRtN89v3BDD3P|;G>MHT^qY=4F2pQXRF;mVJelm6gEwk1hmEfcWAV=OVHGVo3zHpHO;WIHNv#{eN zvkEdZOU-?~IS<=VXJr$V@-7=>6tUiRAhNG`hq}I##9oQ~Y>M87y_P#_=a2m}smjp) zehm|_+!nmv_3HtRf7(8~zCN>S_t-|4p%yXR@1Sy}I?wa&OVO&h%Mt>Nao&rdQF`B7 z)bg53P;ZU?A4eI~g%o`s{ts;;{n*EESd@(U@_2E=07AahC?$&{B>%$(jQW84K8y+W zPKXhN#T#oSnVkvIC5yl-A(M1eEiF)hXr;08r{Y~+UREI7I}93HxF1i5A5YL}x5p?t z-#Z7LZ+~R=YAkZ=&t(TvZ>uhj`Tv|!Dx97bwKj@%1Z`WkHKzCOwLCj?w=Es`mwx+P z?od`67Tmn~GWbvMIqv+cslN{1srg}g)s=>EJOD99fb94kD#yNyn{+ONpa~p*~(L!JW zH`Fq%r;%%9S5YlXaJu5v*fhA|z3fwYj#N;-khS?7RLFu47HcKa;b(Vzlk1l%!YQL&H4EPhPY*l%ZG9%cP@)?8ae znCB!Q!Z-lU$f%RgG?*0wK??59l_s2 z&VDpUweh2^{kAKS{XlVcC-8)bN0`BMpYONp28+jGUzcy_jC*Iu_GV2x8d3JJq5W`x z29j~TRVT=H%HDqN$NWUk-OvAt&9)2%!p2QVU!o!uz_OQm;B@p zA2q1gZOP)cj~_Gm^9Pl?kGu{x$vF4*yclK47u9JuQzZNFJhWFISC&?XVhoy7>7>h2 z&dzGZ{HoCzi-lbIG<5nD?TM-4B(U@MtbL4nyk&qbxYxZmBTFCWL2^1w=&LtwOT>ge zv%b+;f9B<}T?_KM+M0lmY9=Z4xi9MpDivaMd86zMJzr1I7h-svEOmWG!FOI$&Sy_; zW?6TQApK+kz*9^1mGh{Hdg72IZIAw7f1U~He=Pt0$?SZ13jI%ZLpxsywztl%x3>Ck zZf>6P2co+HPxjJz{(I$h-fi-uAC!KuvW*ChgC<^hu z;9mD=*tvy;#dv3#i|GKFBBT3vy-A{qh{X9QOXyH&`dCZkdA&((QSd5rA+O7ktKpmz zDmY|x{q*JSuL#c6bNnzt8q%#?t}gR6-?AXft{V2{KSuOl69qAM@*b}{Zx4T6uT0vL zDXz!UpcKDg_(xV<^wNCx@srih?^aQnSa?Jr9S>(b>d-pxs2D&oJ(5C* zUjZYfxMS?+tq2RrzlB*bvsC9Y%!zie+QH|QLi{GTJY(0D(D@aV)~bT`q9G(u{JXmB0tup!w;L&+w1izq+!tl~!wA>#VX ziSdQX%gSk}i7h2{@d|kET3Itt?FRDt2P#`@g6rhsGmtx409p}*A|pH^5Mo-ETfFK? zOiL#pstZJy^z1YdPhVq>zGB_^q>Pb_H*~{=Ll}OIJ?k+#W{yv$|EgzM#6Fk~$scyUOI} zzHPH$%=(xD0+vyeSh5RZraW)uDP%hiod*F5kgQz1c3M+nBThy&!S~`1y66~OqiE64 z&CTRw8y~$Xg5bff^FB`%9}eGrhwKb#<$c9?S0r~+WMmOEMwl5_E4J{n?m7L@*_9`m z!x9Am?F{slR{2!ofU~uIGF|RS;$agF9mL^OADzY?jStHuYLp~!R8O&&x@fHHK(FL+ z0Xjyhg_YxZo%4JcW-or|b_0k6xQw$4V>vGYH03m*j6$0OF*#6uQ*0}KD6-^mc;{AG z>G6|N$f;cIdb7p1-Aw86Wq#jcu2_x3?|ebJFaID!nZPLyc-d!Ok(p`P(OX!VSephP@(G``Pp9*;%o@pBByT zwjE}&|0a~QWv`1pj{bgqg{Bi*1U}5QU5-l2!Cl;((M6YxCPY|{Akfoe4{GxS_G>NM z5+J<&(>;$-wOPCWxj35eh$ek(O|ptSBN)G31pS@2JEhI?(`-tI>v?m1y8!RkH30jsQfk(#3>wsE~&j|9b&? zYDc>5{*)5R%CU%^Z1cAs1}og%t~)-)pC$?flth8?I12uh9iUOIP|MWH}iXcClfE6_sNbvz#^q@XY$6RHrE$e(Do)4zBLWCb) zoNz@ZwF`knGs~i>Er9^GKaY9sKKtpct*G8v7gg|ERF&(Bxt5r^F6#?I)t_qC39Pi? z1%j3%{&j$EVt=YG{)?TNM=*a8WzPfXxs!7jl`nWq=NnkBaGr#pBwO6eXzo5IH49XC z`PS+BopS#WVvoYaM%?6uVC(0Xkf7IJ2BYH}<{oB!@Nw_kjoIP8?u=bQ(V{{hm8ZKP zW|`W9Ef^Vk2>+$Vpic9uL_Lk|?d?j}P}gVq@*=pU%pXnIgv0F#OUM1LDm_N|3Wb+C zNquVGmK4bX9S|r%Go0I1|2MzzySrl%wjgT<*!9NF%l?A(m$O1}iI<=hW)@$PW^eDm zb2X1In2XVIO=Wtz&!)H;)2yyhx{#6G-CbIX$HqbIaba~`ET97oBlMk(!{Req?!9{* ze*ZpCPw(}ss{>nhU~jZ6MoC;;oDR{Z5MfW~7WDkjnv9P&^H;-)Bawo=)|IY0FiFLp z&08Y-=9F3llaNqW7T&g=GW_vmK@O8KWvhtc`lYBt^IM|qxTNKd(^roNQ+_@Yvmk8o z`=gD6>9&X6yoZoHG)j34K$mDZur6RcgPv&2$W{}TP!h8P`KnSM!;Gf7MlQs@Bbs61 zCl)e<6GYuu^-Yc_Dv1l%w=){l;%=+$KHF6-`vWBonIoyleST_@pYFOs?+JNWe<0q{ zPg^GnXhkVz>JVwV&<$+5FBDS<=t$$gTFxt+lnZL>fpd(ONj|&3E*e0G-akyUVuL0t zQF@vt*zz$wgZLZyMqfa20NO&L+yzj;fFa=I1o6~-g^nXwt(d(qEhQRw_A>EZ1L$5s zK;>D?IXW1G(f?brpYfFICg1pOEP)$fcny(O@40h#bpWM*b^u`!7Ws}Nps11-SIhu(v% z%t_B>9v0^wZXWJ$o7{dqB>cKc$Zo3EHuX50u`+R5F*EZXdBT=Oa~JefNL@l^wiBNc z1i}@WE5SD|n|@P)Lz%E_+g}!qw~YCTqp-xG|3h0_8|!Y1SkRH&!|Cxo|CcEG_h)>h z-XW;QzwHioA+g@7q-eNggY-doxdZ$im6}a@%e#5OpG?WQcQP0ISMvF{x6jkqMc>|y zELU1l$#&U%Slg*){^QzpOHWFJDfvEyEO_nZrtg~#O3cUxp=ay9m#aO;?S33~POawx zP>OeJm7?+eg&%r3cBp}Lqov$?%OmiGFHZ)L)4dlWUrKdmVEl*Pt)Ik#tn#^E>i+<) zY0**k3d~hp@ZL#3^2yaU!!-OMm+!Ti6@+R8pCv()lSRnFtC4uDErk+>6k!mj-$J#Q z=1Z%jk1ikcRy!<}u-7394|5x5Faqn0oyBSYa77M;CByXe zi3qui0P-x~j2qFv6W&ZKD>MWClrih9&)bYHm+5QVirUZG;uYg02%aAmvZBW5RfX+N zgE=47)H$tcci5^k-|Q>a!go#0LAOd!(XV8U)iW;01?&b%Xk(9e(}EfHwg8{MhQsnX z;J4$m*zym`UX@*=W{7+A8)8;OYsmlG-t%9#tNeF&<0e&I0?$4<4k?8kyPw_chkV`p zZNL-ikaD4)cW2WiSs%L~NZ|ySKlFZ=LuqqUz5gSCQO~!vx-QxkI z#&M*5zDdI}3`3K6Zj_^`Ev3XbrfDW?{TV+FJ_Z2BU~y9O?Y%pKW)z-x!Sqtqwr#8G zcDn_D<#HJ>7;S4*;qc$+`!VizGt+&-f`}~I4jppI(HZY{yM7$v^#gX8@o4~P+cw(z znW7z&SJhhb)Vqg7*BvwrmcmR&weNc{U$584>m@qezjqH2Z=9XJeDf7S(lRzp(=!b%caSps;8b zU26I~8dN9biQ9)n(KMHyY}-x|LK4K|C}P?IQA@E zH4{e0r=lG3ho9rUN8IjrCyn^?O%?F(!?XR#>xvUG_G*$jhgO8I{G_`86p=6j$XaHa zfruc2R|T}J;aJb$;lhc;QfpRlN$J6ZM{j)lySr^6NiA`yibQ79Js8WVX?1s@Nm@OD z0`6c=42W2Rr6%J0LJ{4@1nuriD;!L{=bR~bFEN2Gx<7u}I}jj*4FXQ4B{0#j9B@Kj zgXA_J*j4QOzC0cP{MxXDGlH2SLXsqjqWf`GBoszfb1)`CN_EN%X9usY3&5bDxvZsZw_9^Jt4Umh?vLf?%@oRi~d7Fqa(5Gr;qpOp<0*1W54rSyRIu`SROBP&W*I; zh(B5X@6p`Z1p06&Hsi{(#CxvtW;m0ZXEJW|wQwLqjJBJIa^KH3AhY8~yin|416rN~ z3mql{kT8mdeM(~V;)nUzQ^5F@#E=fd4&yMiPU!WdZFk$h5tyNiSgPBm8OQOwR=upj`87A>BKi5=`&>eT2zW}@F|$ds zJQ3mSifj--T|kLb-p9U&CZd!k`N!VSvov$i%wDxOnc@+?)2GM}jgt?*xMDRtDH#u@ zF%g)#Y4FoHr9>VR4+DUDU`=hR=2z+$1inh01c0YVBl~dGc_%O(4>>`ayq>@&7$JN+ zfK=VQx)~xgO==}oHwh+TRd7dwgp+oyRzHyLTpd^#%*_r?b9XiLd5#Vx!fChQu3ANe zS=@aXdL-+b_S&`6aU6HM&Dq(>*l!8Ey4PA&y=mK0t(3ye8q|ouEMGgj_3*84)>;`b zw5O4)4a|*n+p*NDAOeUvXX4bY(t}6mJn{N6dR;9$W|q|MhHOs5SgBTbt7Rl$PK^U1 zO4~Lf1^~l|wU!~*km3`IgE4i8XznGenIpEyiP3(l z65Hvqj^xvR;Bce^`@Dmrl4sQ9aEf{uvZ@MmLf%|GgRODUaMzUDl-ONk=}IZZ?K+Pa zVQ+Fg)2F5;9UN38HSr^`XCLOAMFep2fh0l%Hd9k=nkIVg@Li74Y;@11=-%57W>g}Y z6?dNqroqYM2q2wEAXaJta5YK9i)GN}d~Y;*dU}fHrIcY9;$4?g?%lh0=ic21=Z`<} zsZaj=&wu*Xty}$er&<~j0C@cP0uez?OASz@Yg-n9#KVv;;Zj5zNg@(af-01<4OX1!jwsmZliRm@{}4~KX3?8pIx6e%4O45?-oZcRkgw(Y80 zOi5k{%cZGmzZ-MTA#0(Ki4&uPm1<_lR5Jl5WUMt0yUlv_%H2EPtGS>9m^UorP!{VI zAlI7B;N)oKT8~%V-#oexY8X_ahzT=G)Ra<1nx^U0aj{rBlL7X9&)f>3k7FHntssl< zau3@}B;lqt2L*70)U}JQA)>zTA@co*a?ZP93@27joVo=%l`@7rU>wI%tF#>nBf6nE zhQig%Q3y&Yo=ZxJh*<~)654Tl{I_p>=j3$#)o*^S# zoQH3H=Z!x1FW-J;xmZiH2JFCbB^G>z2_awCK7XFos#Uo)|powI6)j(&=SI~4)#23 zGpkyJcsBi*Wr(%bVHmCgRzji@8&lekLHCrqco%igcLabkjN4kQ?b|#|V zB1xQ#|Lo8H?4SPgUqgZ^Cl1Y?9F)IMXyrf96qk2>pJ1)(c=gGZhY|Y-sQ#C z5bxc)*Y`cKh&1L%1Wsgq-Q!s9W_VypAtI7UklZS|BSpN+bOX*6H9Xw`Fr_y7yx6Yq zxAEclYo(Mt#|H`%QS_EiT=WB6TMmgF?|6I0hFM5z8EdVG-lj%G++i4o zaV%lw6rIQ9@eGQD4*t|@K9zSH{?=1}Pa%@VCoi8xOrd*rp~D z56o;=$2gPK4Gp7HbVuf?jfOq>+e`tVPTo+`bzRqWQQ-+-v0i1Z^I|uz8c{;g$=!r8 zB_;+&TrAr>w5O*h-}vfZKqwv!L*2e!uiLhDM`jfE<*IWV`t639iBUtQ0z^LNWFfjW z++I67m98_hi|uaH7ixvU%n=C&9fn~5v)ydoet7@Q zJ8!$tH~#kPrGlw<-TKwrFQ1;>NYWyriV`}LXhhr??%_2>Bp@eb_3DZa$`sX$R5h#a zJ*qT`u;`$B4Wg9F|oBL+UO6u^yfwMU4HI%;RSO(+3hxKqHCvTIp?-bLms=X zdHneCx;t_;i=3gD@*fnznUFVk!&kEFCvBliDM=b81_y`9b0eVW07}9gDe&ptZnvi- z;*_Pb?{}xRST%liG})1^kdlaSc-{pj9g|R1oe&xnt!_{Wv1uA4vT5H*h!n{PxdieZ z!^w$A9i|i%7R~#+?WtrLW+suDvf@>%sfcK{P01;xwr#x@PqG_#_wV1obLUPe<=VAt zw{PAK{&yYvJdUN5%ZttI`%|*U*K?ykBl^*xBjQ7N#LUaCYumP6ED&+MUSGR$z3Up= z)tpOknQvUXes*@|?rH_eleDU8VGS-6>10_e5jX|ZHP40B4aR;Kqvv-TOucY>+UGZD z)1L_1`d&R2i-oFIv+eG(TbwKx%OPvmb(-_RHKG}{C4b&F`uWbMz0b=99=w4kkm>5!$uBO?zw(v8%DFy#c;5_m zL*Gau6cRRrVeE;Bl9*Q{a&Ur4KsXzRbSV)LI)rYTr?%CD#HCX@;FVEEV5k8%&;5OL z{K1#LDwyE4R*ov=Q;Qrj%EJ^Dm?V|+DRiW(KW^sWF~obS7vBe_2SJ3Hkt8`{E;Z-T zCduWrt9GD}Fh1)%V?gd6UUi`aaG)t0c7M0bk#Z1fA9Nu$s|1SR4SUzMN2?`CdUUZv zkt7Kba?xBiwUo_fqZ3jy(N+MNXzHa2=22=fvxuq@VgqDAD|PVQoN;4Xqh)Rr8wV+o zh_IBBQfg9z1Zaxx=#UbR)z(KHfn7d+1bb$Bz(5FG#=KZ9SIh3++i!L^PVe7+Xmt=K zFn6uY3}Hm=+HzvyqIzQ?IE>eeTQogNw~B z=PXF$A`!1kEv#;JT9{+v8nO1J=%ydWUElWu0jd>2S}eMuWT-)!0ptYXyYAli{n62C zyZh8|ZxzBlbY2XV+k@?{cD7w3Y z=P~zc8g(hQ-^@G=!*aPavs?-ywrv~iED;H#&x?zT?QRf}Zm~i{HDKvXi#rnGWO82$ z5dt|zGUAi_C{P${qXJ(T7Ck9 zfCGW){Q6I}?|$$-CInrZx<(SydbMntrXR-bcI!mF2zg))rmEvOiU=?x;T{wq_lV0a zhlNEo0r^z8+(SG`Vn^IEsT8ld{v&c*!G&K))t*VY=Z(hc6cXoDke*P%LIply$ z?qp?h=m+y6%+VQG6J3fN-YP;P5@@CY_U0;SViL_0_Ze`4^q+zUxjEvP>K^>uj4kcGp$WXJI z*F=efLDF^G^9ulQk+w}lu1es*@YY&#^^Qe90XF`yc(k57?wCD(4ebo)zx{^v|$ z22AwPkN(WA&wW2Gx|O5#<6u^$5in?*Hmm}2&O@FQ|EXa%tXN4QF~(BGioRS-p~B?j zn86Xe4!hxvZ+ul%&rYvjzkYMr=6)Q8zAP3;!_LqReIx=xb61);`lW3b#7yAA(Cf~ z&3cvl@o2powmJIaNjRtu^kh`ZGu-I8=I(=MYxI!^xxiXovPsMZK6Ff$-FpL263EY<)x zXdx&ept(wFL}cQ4cePeDMGzt~!jf|=y{pyA-NPsU{-cK<``E``zWs`sZTlS&agxnu z(-Cja&-*dQ8Q2YdRp%z;GZC38;+#=Vew+I7>41&g9nc;9=`hO ztH;O31n5Mi^Z?NJ{n618GlzVV_lf6o8;w_J6CgSfs~Hi0>y0g~II`}=*~=s90MrBo4vFeQmn z!*}oAef{;<|MP$TFP6(?Vu^itw5m0jN!LAwU1h>TG5FA05x-T;!srYO)U>{VfQ4rDdn4p0D+mk`m^p@ zL4yvnYutYh@Sx+3gu(c;?<4>K_I4M(C!mu70T2MW&B^2#aefZOgz@hIb9={D!? zWtHe;`?I&GLxd-%Llc(-JvH2=?sUCMLRv=#uj6oeaZ#&|T9|7DS^+wz)QNZm4T-mwUhyOvUhejsFOTM`$-)8nI@Gnf(q0hVgxI1Xdq zF67nQuRM6`@0gH)tJRn@H0`o$TL*4hSuVTRK79LV!Ncx?(7}Nm5FE4u0An)Mb+@>7 za-!q#-8cTWA4|7fl8AKOc)q=S{Ky5*nj6;^>*LjG*AHW^gVBS>mzy-YyATpM=8SH{ zK#e%UxEuO98iF*5gv7wi$fprxBb-EXDGY9AXh^_TwTuG*bWJ)vI>%4h^a}bX#~KMcq8O$=Z_wm*(W~!$>XEb#}^k>?Z)+&cf+{Z4d7y0C_*R6!vYZi z>zJ(|N+aMgGfAmyTH57Ov})1mGwu#R08Z#`wH75|W=1Ae4JP#uL+bGNsJ#C40Z$HD z->2v2Tzde)+0;y_NnIjSNGV0`lp_#L&9Uw;_*2lrVMYKEF(o3>8o4WIW~uF>tRo^I zTrvC*1M=Lr#FFbcj?yF|3itSE$E6iQ z)|!cUjuQ_g&lH&1qV+FVUVZ@*5OP?QIs)0%8AwfYfB3^6{=_FfK}2Q_<^)(vF1fnaox#xeW2xgfR@16J)&gonsgp1RbQ2c2lxuYzOBqw!EEiqdwg?o&`kVp5C82?B`}0N`s5Iq|)ly37n$))K*biz2 z&09&r2(I8x1l@97u}a%)`pr1@rIeIf1P&uyAaul94TX}hs)AwGsyZ>(Nw{s>l+xwp zB{I2M32u{ts*XchEEbf60dpyN7(At+-@f_golkt~=a%hqv)fez=41x7XxFquE(God zpb_G0=-^g_X*7UhnC+;!y8xt?!$Q=oPHi+jf6w<^ zj5&NxAK9nX20wX{$@{zF1h?B99N(Ac{Z#_Nvv(>Itc%>Mnq`?r_d3&7fv zxO**yJI=MFw#ofKM1W%MXr4F~Rd7nuGNnF`Zpf*Pkv|b)_^Yu-grhBM?gl5g|Z?!2%dKi4Y@TaHp~& zViaHZ_=9ff#19@n+H5w6czSgF(T{#~eY6r0(;ASrmO^R?+|BzT1ECQqU@^~X3TTwd zl)D(Fr?Cen4l;L>a6jxsav*XfCrXmk>KwSRy(kax9ylFczaFgjVg(2tq14gQkQ0Pw z77M6#smWRzZU|hEoKvk}2DOxil2{Q}fISxF1Yk6YxaobqUw-t-3;_V6*IK99h}L-_ zSAT}S`~;qD&(xFWd%y1%d-A-Qhe5A;rU;W!BdM*s%~8vBw`&(iqY@IE7Xk%0N82Na z!7F}F80B5G9Pd_F>4yWIr740yJsbVchk3jNFhYFK1_G z|Kq>e7JNJ-3H z)zPR{LnHu0XGBAEVG@xf;)cpmzQ7S3yw*D8QQZLvkfugiIPBPFPyHYz?*mqCZ*?CL zA>kf`IGMninneQv`_!3WUEto1Bdo?4A#Ms#Ff~wMU<4#04Px7s^SiHhVi$W4*Z=xSHw6Q4i)W>%R|m;sCcMQGVJZQCrm&aB>l^l-P^ z^?eSz2_zZH2#oGt+!_&~6iq^GMJ7wr$W}xHH+KzV5Lb(dYnz&`>zFx|Ig7;tQB;*! znzrlvv5YtIyW5kVPZu{QUgk z!-vmF#`V*)pZ(O&wQalU`>|F)V&q{Mgb4r^2~mig0uCn{pOzn`ZRs|+vIUuQmhu+hyl(JlQ#60FLythsr?`o(2!@kt}1aCio z+x=r<_~HBY9Fh)xW;u3zVu5i4bRqyB$7Pcgv}wc;7%>be4E!nI(5XBf1O(3h%3)0( zFwcI@=ubfodmGbvJ{Yq|arask064Xr+FHv~cGR=&-Hg7>`j01a4Z$Y|WOqU&kz6Yy zwrz_JfRKdUP1UOyYNH{L`Qt6DX)P&y(yIe}cY zePO>aVgG>4BqB(}$S4gF5w)gfR&%+3_b#<<>N-Z+?RM$nVmI^?>9Z;UgoE`=7Ib%V zU|}LEwW@-nueybnf^G;#K!$kGiWxcC2LX_tNsu|`vEP+auAiNh>O}H^u&8*)I;QC0 zR!!H-?sNa~Km6DK@;8}yP$x=YH8`=+U^yZizQEyC{sTYT!82X`@ILL_f3P)Z7=~`q zxqDc4q?8cROuMf8z2E!2KlnHQ=0mT3_;-HicaY@n-Me@0+`ZgwB_)w&wOSQb4Wph` ztYiT5Fs5)sAPj2?2X}N=A`oUK#0b1F^n=^Y-3@|x09O|INHJ{_q-|cHBP*qI&1sf*GxrJawoNm<$3Pvi0U`!Ux`YPp$8V zGIZD*jS*7Qb&-V*z)aAkrfpIZ*=#OKDLGd&Lz2|6nHSU4brI_rj`tJ(xVQc|NT@YX zP*-pTw^#ugDJ0-++iEUdYO>btb{k^~P7*`T#d@7DcjxC9tFAph?gXor`qqQ{scmF& z1Qmv=7WOZto-~|?KHjf^7Y$u|%Zz8IXJ=>ES6zGY_yPIi?YG}16f;9dK%2(^5l6pR zEfM#M}Q1KTnTAR^1<@;xSXJZ~TReShzdNS=G| z471)VpVyz%l4Z~QoetNQr#u(Bu4`DlDkcK=ux=QJ;c$Bs`)NW{_XsQuNncFIu8Okz z>`otE8Si*j4=L2qmk+~GN+D@#tzbG^3&q+t|CTwEfs8*NR9N+pT~gA``Pv+gk7lbIuSpQWNbVFco(9;sJ*sIyj*NIubKp zKf5ME6Jy(~*2;v+z|2avCrqL{Isy>YQq;hoe87_yfe|x{2RBzN4U7uryEH?(e{>rXO)a^}Ka}pQ|o8)M&iGyRIXK zTI-l~mD>G+5Viyajz64(^@|qz9ZnRpgS+Ds*bN@y(0F*9wy%8QogD3EL_vv&gxsQO zn(DP(F8`!F}6m zPhPu-t-aDnJk^>%J2Z~Sl_ZnwBpk$us8$breZCNcXn<<<>LWymga`W_fXS2-=V*dy zXA!5#VZ`FS(KwF75H~P0r_>XRSVJT{QMlq!O+YiXMWE?cW_kI&1M6W zo_^^2zG)gjqjpjAZaeg~Sl-qOuXK_!e+h|s;1qB=z{|2TZ3f0Xk2qqLqcnxn|OAJ0$VI31t<-E$|MbG~!u zPFQaOSTOdcnd37i{890zxWU=4bg#ODy;v|HFq5jUnTdK`03k)h5@> z8El^CEQi6}A~K5?RaI>=E1eHGhLs|s)pIpK<641aySW77lv+S8;6*{2l*jC{*5wCFpnaX`#q@sdY~GEm;j*Rl_77 zQ6m>u_k?nHj}~`YfF|Y4(~oc{njXweNFmlqpp+Us3=>&DHu?%fZTxvRz40Zg9` zcZl@Ffd3Ptd8y-9zVemN{LBC5oi}YC5N`BdlWIh?Ua#-mxg#P#6l0SQ^y8DC{N#7O z`ucLYyu7?Ty0$((UXQsVx=(KB5EcOM?a=Qh3tN!yJ8Azu%%A-4S$`aX4_mxDpUQdBSIG zVyUy~W1WZ}h9L<4%mKKE?8xo7GxN1k(V3 z79Yp4cL4CFX_z_e0^Oll3?y0A5fB_Ob}kxk!P_>4=CDTimq*jZQ*Ho21hX@{SiT^P6|>?;bx&2(P^IO1oTPvn)pDjs{?EYPW9P+HM|} zQp{^&arc^Q+u%z#Zz890%-ii{(=@x?u3F{2b(K$7YQoVG3;^!ky9Y!F+_r70<8swC zO^2M+Kq%E@fD#Gt0QBI|LjWM5rfC7l4RfxpRltb>h&T!Fm8rSzKc$YyEKTcZ!&v&U zXkTl!*(9K7Wh8aXb=uAqjU@I6w^tz=#(MtXUKw*E%{Y!sZQCwVN~3ztxjGOLix`0; zTtG5W?ZUKj_R;$y~Q!O=I0d~6`fQ!)Azy9^p)6=f&!U6X5^mG`8)8i9l zB0yEmV^!7on3r)RMiOE+W)uku_yEZ2=7R{-01oL{y1Ck_sS>r#Y3Zi@Iy2Jf9tKcUjNIlKvXd>RS=ng8Uu1dV41K1 zLMytL20r0r{BGy=S>?*yMo*dBHo4S^2r>ub?a*uKP?kO$gUmg&s!B?}7lj0Zq7Jnx zAhlgr%}U8(2{IN1veb6tPyn&00&zA(5R}e2xvQk6ZIkAH90~v|+GZSKZsqsO!xh71 zdUpoqZeT{i=U#MO*S2kF^F>nAG*K*q5g1*5DH<#hbugVz7X=U$YKF;yAlBho<7q%) zc?~GULXj=Z^GB{$bFYHbb)6CQeSh)ze7#&=o}Y6{jKs`!k8;Jrsj7f%2Er7myQ)Sk zPU^Z{zxkl_l+X56H2n*Th^uL-O_M(U@sIa?FHJWMroWHB$B&9hzi;&f8PlzsFMadN zf9?*;FNRL znOb&4-&301y`o`CDIw2Zllw8crj&xK9h-^+5+FrO1N*l&K_mb? zg%apQ;f|3TGcX&Xn$(_3coSlV} z%=+m1YPCAQyd3)>S6jA-EX|@5gHlFh>Xt1t2O^WJ)f!SMAwtcgiwlc8j%6Y=#!xOU z81v4_Rkf&XH#?FQc4X=+qPc8 z5JDGh?xmKhI@S`IG`liZw?>GOK<(De>qOM=HWwEcN!s|ho?XB7<=4NmJ~>8VtTpGH zShklJw{PF3Jz1@~JE%fMU~nQLP#eo`>><+H0~T~NtzbwloZWvw;X6i>1A>;Oxi`_8Lu`h)MEy0-&@buA_5 z+{mP)p8cT@`|0@WjG(A$7=@}%HvY4@W6&zbajdn@3X(b&w^~$J-LllNX4?%zMP99s zYprg;sX0A6ZTb3k^LTT4QHC+%E%KCpGTN2_TG@ zaPM$}Y5-)BSZJ;>M^v8;x%Z?Fn}SN8#QrC%jrcY-B622X4uG|l#7$Z)m)qTLx7nWE zybk7ImSoC+jB!gN4AK`o90@M?d<-FMjb? ze)ZSkga3H^_%R|by5{cPyEk85^{P#~!pNO~>AyKU;N9xdi`HKM{W~Scr(x;u-+jXq zAJ@3ELI>gqo6Bt;%l-QgFV1%lA3l8f<(G$XXH`G*na_OdTW|d3Uw--HAOHCE>(?bo z9?LiyAq%tS5kcS?3!|7~$D_ES8_h5Ru)7`dE}}w4TQf6^4+emKc))O=WOzri$Fuag zXHja}KaiZl-{RdT6^B1)Ze7=HF3%r7ew?H|y>_-(EDW)f!c7~Uv4b1rN|fQrk8xh={HbnTSa^r3RdW z0AprqRpVvM&9xLui4#lJTxvyd05Y}2)bB37`Q5jR)5kvY;p5{|G#zVo!|G&+lp36@ z{k%&;gbyA(sI@YJ@T6&3Ef%}&cGnN36xEtix_|#ZbC}Cns9yKOKqhA4baHb2?Ys9b zx7*iVd+qr6SXIYyNGTbhx(&IMG6ZT{EyxD8SS(VLL_`|SIgdjn_BswgxLU2+)%tR~ zdHDDO5tqx=IF3XFPE~W+?IO08geQMMo#KHNu*RB2WayfWP{{$w!`@M~h)k&wphzTU z_UO?gl!Z|vDLG))It)V|$5N}(Br1)4Y|}IyCvYA6A+WiwX{AZ`@87?;xX85}9UYOd zRdvF3yAlxsFJlh>8h5Ow(G?hg$ABn;!#p&F5?-~rR5h(efLaZTS`rWuEje`d?yjui z@=gwY-wWZg>k@M*W7ZlJ%{?0ZoKsjw`|-4!??$D4pE!K)H|OvDZpYtMDgVUMafPBi ziBtpz4DPzyZQ3rv2S^enW_?DRuLcfIL5!Ae&O@5kfP;BrfCNE=c&cfh?UtgvH%%)d zV=colkV9Cu&7RXUzj^M<=YeCad~;*H8}k)!Bx1bxao=G?-L@?Pm#ns@c;CMLp^yFS zfA%-ueB;jB_sP6n9p8TKweNlVI~i5crR~m6k4{ckkM6gR?mwtCb`B5%i@3+)?~Z$< zCVWPPgJj9zE~#BCSF2UiGzeg3B54neA^;koI*7U1Sc{daYF^!{TB%lj);e6lMBqpm z%K%IcSBR?06R8l0$XMnub^v5|GYdbvHZ|8yk1uxH!>|=5Qq{I?^H`deYOQMKR5MckSAyY1^AG-Ey=qfBDZ}d+oK4fBfU?)oQov5pCJE zxvCk2bsPf5@wltI`XT88Xg(%H$H*B3in_YrDc6IOyN`TAe(Jr?kVLq1M2zc`P4kt_ z^E*iUFj}H1vk(9jrqJ`bj9cV@M1wumpQ+FhV6A$5a+aFz@#BkcfBU;cbnB&;Zr!@I z*=&M$p@8J(@pjzwP-3{>Gh8uD_QaJZ-(v)d0}=uuk^qL{*+N@RMDfnSoB$#roETJ5 zwGaZK=V2s4)$oR*L?S4~)J)9`;_%Gf70v&D_TH>Xvg0}vJd3;EB_eXE%-S~q1Vl=j zq1sGpjcKfVe(}uwf_Z4QS+|;0b0m_2NPr-KLZPzOtjvt<-s|q?oO$pYkx^A31&9TL zFq?cRR3S4XZrsKFobP-Kpm}zyZjFeca>03#G(W$XFU}r({t2<)KfZNz{Z`$yW+*Af znAryhUdbDfXhg|Kil9~PyKaqWB{ETSRy9c(RZPW9r;|o4i=^$o3}zq-SaLwryDEhG z==d6-yEtEb{K==&>5~sW_#jmN#nY!^P65GCq_CQKjE`YP#IEaxVKDSWLSH< z((dgaM#&e8)qJt^-iu;MHt@bGw<1sx+^}4-S|d0AgJ=kh1hqyFR9r zVwRj#M4CX(5jhUz47HFu)N%F|F@%lJKLD;HbSPC z8_&iIZxnOG-~avJpPrt^7^kyFRr@|6QwSmJh`jEI#8E_C?Y7uPd4Lr!wJD_nE)m(V zL#N)p#x}XIaFk zfo$SSiaqNqTtn}DQDK&x!n&&Jx*o3=+Sc3y0Mt-SqvVuwE@xO(RYk=%8>VhJ<-n|_ zDM@)oc2x|@E;sb)62eY}6)HCNFy6VMH7WAy zs&1mnS5kM159{~kdC569P1CK`BCyj&Dh4lg+_m&>+o zZ{513k{&*MI1IxFAAI0_Wo8DF<3O&F5na|2CAjT-w|^NYNV@gPD48Ty)`!jgnYJLY zU0Pl!vwt=AZv=O9%9l}4o7EV03>n{qrOiz3@jMhzqmMi`t<3;hY#O-?>*;S@Qf;IYDHqM%3Q&Y`l7J%M!To2+#I)9tP&Lkwr$t3 zvNiO5Peg@}u?1E@jhQ|Bx(VKM&aodlv*IEG1c3;ceAzlgBo7%8#j+z}Ml{HxWm3b8 zY8XNwf@ja3e);8>tMwAm-nskE&AWG8wfAzljxhs(W<{nU3o#p*`J3W1V zF+cN2-Z?TLhmCKqU%#HSHh{HRGpSdrManV8zNrIJ5%igWsf@KOv7gTub=zLQd3zX! z4?q0n|Mm`AffHKNjTDWrs&@4ox)^T+A}TeFDHe*XOQY#0Uw8-}4~SGo!!FcV+7x(=v9%uUnm@9(D}mT8V!&bg$Tn=HjN$`$xN+Gz^Cq%4*ldO!cD5d(8nYnTv9AJ#?WLmV|-utq7Z%7WFh+VZ|(HR&Bm_syGV$$zPAzieUMMBhd-DEN$z@Pr~r+@t)|E^>{mm9c* zx4#yf{6}q%zxk?Ap4`+A2#RP#pqrKzWaRX#Y0eqZ3}u(r|8Fnb`1*V8a9eR#f(&nj zIluCYzbhZW=(RcIu3+x6VA@a-z%G3-OWIrk6_H3psBpcYtW+-beHoYGPS=fEMmhA0 zpa08zK39c{^A-CbVjrc}MiBx6)S{Mt=iPVJ?9)#^J3Bl3+rRmn>140(I!4Sn zWyvAb0^*$a=%Zi%_P4)%{N%~IAN;uiX$BENlh{iL!9=_DDodJ9r|jFV8)of=l@K`R04R$Yi5VmjRS1rJ@QcNKS~sIUulBS3*@wS+ zs;nvJid|Mv$*c9ETd$_m{ibPvI42>Zp^Hhf0U=^a$uY8N?z_Ma5Q1Yf;Sikn6;vgO z?C#w=pZxaICr?fe4-V$@^P|Hn1)MU|lv0vxX27)RxOnK-=<6=$+zm!JX*`!PvJ`kK z>M-CLi5K$qwU)r>V0qU;IHxP z-=Z^#z4BKB*!n%^lpIo1)u2lK(#)KroRdZHo{1Q9$-crZ|9ER1wWTRv+KYZw9@VZ< z=+^dO=bxgglZj6$ndDvMrmXMV()l(1-!>>=*R`Wmhoh`GrM7L$8%^7KNYaFAv0hcq z6VWiFoN}ngSC~!PW;#J)av@X!4NwTdn7}zl3Ys9AwRN-165}X3VaA*@h!O)Rp+Qkh zy3N=2oV>}xd~M!x3Ba4h7&BN&Ei(cG$f`1ARSi|;oXZPR7H(4Y~#cvXD_o|`eKxAeY7Z=Z8 zygWNQ^WGPZ?3F85Zrr@)i5H8-`FwePejZ~+a)zV|rg905!Wd`*$fgQ}h;;MjZASOS z7hn9-KmF6ad-rZ$zagTC=oqU&Y8c}n?5Ys@VJO^9u${%Q4ENOD41$FnkB*)AKmx$8 z2>%0wSKTw-Jh87E_HSDtkS!*%rNHj8<_bNxAmuwaG;VvmEXF0r9JC;p6K3!IY}(G} z=ZmxRFCRRZzkG3gd_0{_8KCdhh6F}pf<}nN(+E_-F{+?i0(8N%_Z6!6FkVgBxB-@# zq}eNb&B!8`LA%d;0J zCnrxIpLp-@-n(;jbksBrGb0kIWg}25CjW&Tl~PhbcAnWoRIs6KT-$^%znlXo0V^;V zf{|~UvYobV8}pFTuv{)h5`i;S%T~%t6{s3-KR&3&2JdMX`M%&lR}R*^5Z*`ymgLrm3sYt(ORR<;pd~oMaFX;!%y^oFl+) zxc~qIZriqYzOHMYOkD`wddQ}+>k$-0V;WK%x^7k1H8O!{f}{vpCFT@!u7Y2$y9G3z zhdW%|`}IdJA%^JP2%-d|52A~n2!`l=wCF8*4WswoJ0l39_h`{02;$LukKXy6?|WVE zpD=Uw+2<~6eb!1xo2NiT`O)Fn);0xF>l0qQ5<#M(HnfnkJ|khB;Md^jt0ibX&$Z0D zffK<%STQ<^uQ(lh%$oa}Ltx2AfRy+$&O^VcFAw&I zM9VwfJ48#7OGjRmB?3i(IRh_3c+CcI(M>Y%E`BE#Z{A4WH$8bcI|Gk-1A}I-mD4NN z=(M>#5_v{|s*}!9acpYSaE$s}C9pbXJs&)sTDz|8Et2_u{pT<^Vddd+#)z}1>4x--e?$`k0#%GMS?`)h* z;7<1c$dVkS`Luq0g`tChd|b|LVu5WgM%;nXAj8dOmxFmSv^6`yp39ek#04axT*GF8 zubr`k*mx@}F+AvT-}>WF|MCjkF)u~a85KM z*@GTUh9V>*I!x!6G8}+;)yf4pDzPEEX*n2K&^Ks{6bm^RO@cr+-^&vvH@#mRx){cf zfwPe!nDB@FuE+hSGhjJ8jEglHU@3Z{<7|5o=QO%((m`f=30ce9>W`v8p@VE?(meA! zT7}wkF80X6_Nyy4yBdr-==VY!nFHI!5!+D)B3Vc66_9$)J}kK=!E}Z1iMkL3Yo-Rh zneXjE|JnA$7_X(8>^m>sUNCxQhwlyF^Oj>~$Q0#$k4uF1|Cyo-gBA&f53r#Xk<87V#=$e|sh76jittw+(vI6} z@i>YxAbhox-(z2ef?3Bt2}OkKjE@`Tc7FEoxb+py8NVcQTxzY9(t|)pk)TOcECN9q z5Z2%*w}?yVfkAY~Tyxi4vjV9A@muBd%VM$x%)yOD-Q9d_+%V;BtFuxYS=>&1o1ZW% zOpjb7tfatYbkthC;bMM%{^@?c26!FRrv7X9+uxh13=a=C2L+>hzej$u#x=@`;Gl-^ zwnz&Ep$e6W{=R1=EHcQ>Nwu$DDf%g}m_?A)K*If(bo@wOMg#eMs)SnqQfGT$6=XsN==KI4uB%RmhI zZ323WUhj`Jt?uLV#7g9vgt1z#w5`BqFOXQ#@=aHK@j;FSh;?Kw#B~WuH3Qegk#Y;t zRPK1$_hD7jE8yXJ&rBi!h_@Xn%^bUwJ^`YcSke=bgdh6M5{uE_+ApwD;W}Hmml9C# zbMXH7UNzQ-iGP$t$cGFJ#v{RGg=md1u7JzbWQzpQ#<=vk*Vj~f+Z^%qA2fTtyT0(z zbtbxA+Gm|V+!5g0m$7_1A%>2i6Xd27n@dhJIhBuox2GYleN}KN|1vEJom@D&uCT?0 zG67P&jzvwawK`Cs^-Dx@O;yrDD$&*7bQiJYWwn<|?ERF48S`b? zlTz@kQl>&BO`l^L1|ZQo#%>UJ=tUvD!5=3|H8J+g^{xz~4V8&A0wZ!p7H$8$dtN$L zjGyV+WK`;}o*>?5W@nfzYXX+}*J;F^7HWbR-FZWCiY->GgYmra<20p;{;VPeNIW`_P zDq%2SO?k|PE^?0V$jNqDKIv1;dEHhy=r zCPR3IxQlY%hEW;?k71+Z76;a_mK}I7w_Tr8@`e9XZi%kZmy28e%g%ig(_!xE`&}hv z-fvS_tWX#y8jHZ(j1?O+4`Ps~ORPtivfkTYy)CYK|Ni~<*;)V4P!t7ET#Zqi_l51D zA266ol$9AwIfIf5>Gc!X?BEzuY-2KWof9F#V<+>|5BTdB1PHS3df2J!uBw$eU`pe| z2idMT3JN48-IxZNKqN(qAL4IVwyUyX(;l#s`0VYiH+%6(2&lA{X7&f=Yc;K7P^n4i zP!f^?*XL?3e?BQ&_rFWWtwiODc;5YKD1E+Ydzda=?#61eQCS)#t33onM)_SHI1k~o zw{|2tV1qWA8L+WDEk&y`Bd!j?ESIv&3LYj1_>4i@65#y26Yjb>oGN>tcGe$qy?dxH z?6BNvILk!%Ej>@^52}K5)(wjKXgKSCRv+Yb`PS-HX@v&CU4~qB-~#`EsoegZ#Nby{YG zHN`odi9z#aX+1*Y4$PXQl-zzKhNV|CYdBky99u(6cQp3Eh?) z1UAaJ)Zbonfas5`s(Iw*9G6XK1bS*aD*k`V^Akc_ggVeZw&N8|9QeB2|7MsHqepL9| z8|tv{(us}UX*IkVOWY3&2HhVd(-Kjw;4miGaqGLI%`mc73|*$d?m7#w3pqd)I13H@6gjtm67%^5O$~Z@zg|k zsH!T4_3O5f{_2N@L{L53;ww})Z(){F?Ed2PZX=zRS<`S9%JZzK7PID+mzg#Qs#+=) z3+|Wd&weK5kA&)@_V@l)(eyYsHGe+6o=isonGBG^MB;g-e%gdL<+7}dFAEc|n?G5gpr8p~oOv;fz5r+>i%wY#}c*hbG^1t=OP3K$aOkAz9H6Gs{glIY%~55NYO4P1|aE##AQvSS#6(nGRTy>jziv>d?BPY|Jq)& zABco+%5z!DW4`?M6;YB7?uQI-k&IeJX0^R(wD&n)dIPyVPl}Vg*;u!F-*tZy7hoXB zwAJZS{l4P3)vT#B&^8zwvlWWNUQNe5T_EU0v&zzIJzl@+PAdA3hBS7vY2(6g zRc-sx@JnH|%=g)_nrpHJhP|yr0^-S^QqRnWaJ48$vHGW@O=O2TDsqn&7bHI#jRJQ> zT2#~^8&RHwmq6AS5Fyy=`R#omlx+x~6=4$GSMc0GTqmCMl6$+I-kYDrO-`#glx4)$ zS6n3tO{7neHfr0NoYw@SYyhg;Gp9+dRfi&{2v9$%e&geHJH(dvm0})UPmEkMTEtw^{jf?dj2#4yM}H2bDJYCJ?am~BAi>!O5~B7gU6pMbyM(jGmfC!}>=$NiTmWaP&EnTr$s7X}R#lc@Ztx6Q_{aWze7ZxPwdJ6Ayv3yjv<>|mi7S8dD#S?#0|S((a3uzD zHGf8!p99EH#kqF!VdBbsx`SJ+ZJ~1=$`9OxvoGC{?@!6xo1XwVSX_ct8D>uIx zJ?)2grB7_bXK3k+TRaZ`o=naZmUHS9qd3fr8)2u<$EJBJNCWU>&T`4Dk4?h3zmfnJ zp+lcBZCJqNCvJ9(dMYM9kfRWEU z2P}@^f^fLkw)sKYh`S*UM30AJHm+uzbu45;BH(5%W6Sq+GwpqzIG_@E1l00=xa<{7 zd|q(Er4rh3i`bi;fB6}^BlR~oz7@9lZT_q4N!kaR2XJzU;6xk4FE&$sogo6>gRGLY zS;i*D=|m@%k{nTQHTK$ee!7fjTGoCf=0C~}Br-@v zf<=2tOa@bS2*d~_tCCDSgLyjhzVvurpKztypc2yeDa+Y8NDCQ1R{Z(cL2tN8Y45t) zH?8aJ^uhhhov?(XFY7YUL*D@OGTMm^3rw>)db8`CDrUnPy5tB+?_h{>mOvPy!A)-OLxTrlaUz& zDrHQNpQR=(>Ih@_LmCFBfh$~oFilmt&21c&^=m&+o+U!j)=^KucVXvLpGgwb%}PwE z^77jFVaE7jPlw@+_xb-~5m3sZD5?Zc`fAA=U#cSgCI@@RmZT&e$M!pB`0Gu^&RDMB z3v31{myj#*STy9Fzm9&sM?*l0YDxxC_`Lz3S6}4G2+T6cU>jizaQN?5O zeX#N{MfkY)(C!=l)zB-D+NJRWWS{o?wg&#H#Ok%5HxK2CUO-YK7A~pK1Any8Oj3~r z5e}v{@8dx53*14_x6-JPELw&dPKtK@8elho(&z5_$ekzd?Y95tbuQqstK9!vk1<8+ z`mUn-<4dwPP2}1FfoGVwqs?SlJ0c{9F z1t*=QS>gEH`AjJ-yaSA>K2A=IW*h^m>?K^ zKZ_C+%`0yE$W1E)_t}<-p6AEggOq@O0BNI7pZ-et{$uQao-A>5U38XKcD3wRlXFla z!uWi=C2cqbWfB4eQD;K$~#i!pu;Nm*5CX_8X=V3p*(qm97~mm|3| zP1pWZaZFJe+0GwEQ2(GCS!^`vk;3dHbp+-Lc9YUN)c7!tl7)!5?7F(J{?$)9v92Z;kXR0b?64T|xZE$--Kqo9rH*UkE*$E*Y89I#!s@4#;C*L8II^Csu^5#+B0AAt<4ZHU^PO3 zrbw(6L)G}j5z0eNPjrkRC6M}A3x;#Hy;QR1l=NIVv%?soz zKnio80!I+qbQq{*dc2ADw~UmJkXOY1!b0Sj6dhi}>U*Cn|M{xrl`nMq!_0Y`HUdk^ zf{|JycVc@YPf}8{s~ojAFqSo2W61o2DZ=u#x+Plf4C6raMUU3Bb;hI z{?62Jv>J!rBvr_u}yB(pcMNYy| zmI~~iKFnwn<_K(e#kVW*?q`{nyGt7g$9A#qc#v?4FtH=WWz4gSMy#Z@9tEv?Ss{_l zpZ&eXdT=uS%8bZwu0X(#c1+*V&h;Mj2av`3cz!cGu$J3E36oB89&QrqOVzP07vsoExaeic`ARenD-V(#^!Zyic!( zifF@2ZGe(33*mBic^DGH2_0}i#y-SD5GU2A&&ha8w3^X$rG#7JF}oFW(=$NqQT?59 zhWO)$O=PTOLle1gm?1N&xdein)@!%vv`$U2?j2XB{V(2gd6{5>lFi7*QkX3IhaOW( zb2>zf`!G$!GXznQiqNR9w+|syNraU*Zhx`2UB`28fbhsJ58wNpjnxpGJodTz|F;dw zQoB0taD7@?acU5cdoWQ9r2VUuu0i)>Me|P&Q@R5oMbFp1NVGy?Ccbr{&zgkNmWt2k zVY5}*xfVk9Wj;x#uK;K$*@6M4I+%}uiBd)tkM`MID}#Xhe!+HWBy23LQpV3?oQ|HJ z-mrzT;bO|$H@;UnfY;IKGbn4q^vDXN^kB#L|4>%CY%bw$#0`~S57 z9M2LodAIwdia&n02vXCqF@!6zSdLXh!7h69kwJ?~7Hh~PYp0Yvc!9%6uA;Vv`5Lbq z1f4*?h_^}J^6_8Y=^aVtgMI#VO#%AyzqAwm2ZL{TxmxOc=u*<4?+%pU$ve?X4ibdQ z;u_o2#nTCH=~^XqpjLsZ`y8xSW=;E*pqX?sR$UM}q&B9f{%4qFH5+6JYfxf4S_&Dj z0r415n^uQ*GqI}kcRNtlS>xS7q#&350li;QnFafDZ%@?qg<)3I37;aJ87Z_E3qPKS z#p&MibX|)NewVa4UT)K`KX!go*r~gxo?>G-kC1EZX;jxqK`WP9Q72b?<)O!@HkEJA z_HtfBxe$*yXFYMAsnFh#LIe{pgOk3%Mo#L(zYX7Vv{wV8OJupv_=753iz&G{f%fq5 zHfSCWr<+M%HECp122LhryvBv;0fdeBb8Gz1v4_+VFRpA-$x-KgI1=13PcB*b6K0>IS%W zz>{iwL*MiwYip>@zh!4+e9#!jPA)_$Ei}q2;)9m%=7`2&Gwmvseo2~9Nc4P^?jR7h zLXt>H61(@;{^$n~^~2$Rl3NuI5+n0vh`rMzpi)nTaM!s10%{%xiA%0g-kQ1)C%eX*s&DT;73Zei|>c6+yfsY*|6a3o(Q}O zeh42r`+g}q5Sa(!XTre5;w8gUXk{*Y#mbJ@iUg}+b*szwhHxv-I z8DYi8W&$TLy(fCUl%?uB<$pPEm1(wo1+5A=Im-hK^c}9pi<>Svg^Qg&;l7lACMmD1 zl6Jq7)jI5~$9EG1ghEzVW{6vy<(7r6{?(5AQhqqS0OWoyp6OF}9wHN$t!v$S7R zDNrkRc`Vi8Mx)^QK&_csGJfy8xY*dygEO8^QZKzPh()&I6_KyrZ^W|&>sdXvM=pk8 z#&_{d&_t`*D?h^q)%Hvt<$p}|b_)Y_eaT6d6etu*j>*Zyr6rAf^P+VGMgrv>5C=Jz zFJ2MEJXXh^9V(Hnig_(VooUd7^=lx388yL(Av0K3u;`CD9t@0f2m1mAT&jxXiS?)h z-wxRCMLtoFDNN6<{d6)kIgf8rwTY?E`Y$iYR7YCW+Y3iWVb%NI-{EHO*c;Rq+!ukD zC~NFi1hm@IBW>dUcrgFn1^|2d_28NZmbeKg{AVqd)vNBV{p=*Ny`441!Tz* z3|aeCl~dH}@Rq?+ZQ#qpr)DLMxmy8dGw00zOkf|S?6!2;e}fZ#G7$rzMyy&)q4BO7 zvZcwce9ZO3{FDVO)83*sQe!#=wv_{#d7;F%$A7_?uA1TBji5monizG3yTWEpELHJH zA?PpbQkskebjDb75GEF7Of6~j&k8(HK06wFx|ww0z`Jkp9J@rHdAoiqUN0Cic(AWT z`<@NV0OPoL(n{eCUP1zXQ3Kp(gpL`97CaNFRHF3t9aQKZFmjps0M%KkHX~D9CISX16mu4WHm4mvi&*aQ64l{k`%g9Q^$G)z~MA zJfa8DANj4)IT-|08Cr6Kul8bm!eV_b!JO5C<|Hqv`6FMxW~QHS=ECqQE=bdFT9)@< zc(|2SZ5*cnralvomy(aiNkh435-8RW@Iy@*d09TLYe&5Eu*2!GUmjmr%oCGw1mrwm zgmTGYJu%6au0I*)`3DPx>!)jSTuoS&@ICwGp2a~dEw}7qU1JwuOP6}d`$b<^eRcz- zP1Hr0%T4+-t6$!|qMYO2M5I|aT@;v06{2V0z{wgU>|(gJlI(;Xju`00C2s1f_X~`9 zv@4&k@}6KNZf?y1fSHjy4D(Ie+wNj(DcszlqPG#&>>?hx zE1MgWz_>*sm9%Wi<^{)b<-V|kQJeD!GNn0MZ2rq@FNB*p5W#(fut3zlR}901Z&Kk+ zlE#CAO!+bxiS&|vx7 z2F5GA%)gpWF9TOv({VHCtU^eOY~J=M!Qn5s!vf6^Kk-=>S&TY7l5zt6t(;jl9j)hQ z=1B&4-`@Antn1(1DIm-e%k0}?Z94QY3h+N~8?0+cf>(+wCV|d2Q+6{_kQ-e)S88&a zE9z=#I!prXrKu7LU<95^h(Oum#k(N5S%Vwotb7S{K79=CU$oh`f}( zK0ZWz!?`_wjv6&08ZXB+?4z&C$LTr(T@>o?!h&qy+1Z(cV&46h@YRxE-rU6YS?QwK z8y{HS)a2yGUPG1*Qntx9E8?tOk4saTBB})`HJS{a=*{mnS0qTLGQAgL+gpaV+kQi`XTemX!=v@zcm5YOU9ACE^h~pY zQHoomU*5E^6YRw(T*OADE?6+fFi$7DMA%qt&3~#}1%fh(`RiT3t7&k3k0Eq5=TdLP zi(R@K#!>icQeq;{^-aKgJ95Xgs7M3k-Xo@9bZ~9bNNqMtxY+My;9h_~`}}II?JGXJ z#<&_;sXIntukHNnE$0qpLmpTbf-!%MN#^7IO@?O{?YFW28l51o{8_9JV49&D!~s{Rh-c?x;z!0zPCy50wK$0KJt4vP3kGlI1br!| za7Z&~aTv#RTm3&)Y3uu^nY)b7xGxH*IooovT4EQGQ{m#hbq__M?*ZOGm{*-1mrA69 z;q1=!%F4?1b@TDvHjj~k0avTUr5`3Ezb4xE#1E0|CE3htJI@6OGF`a`L-N^MOye(F zdEBhjwbbO74YGyb@+i{G_#hSgdx^QnL`S|aFnM!S%$PfHB2$z52oHl~7CkE3Tzn4| z0vz%JE}ff~ZoaCRV zxA-Q)f2&~px?Vp0_HpvdPHbNi5^OlROI}la*m}hp_+vD1#}}^AM(D0+#%LC5&~X*Q zkek;fE-5x9#TXoEMNwHF6*oTq4v^D(IXR`*DWODXj7&y#MV?%E~P)FXNO?|GVA;j;S!6uwS1y31t-}zC+4>VPqR?6*h>G zwKSbYme0f5H2Pr7HW;(7(+y_AA)50p&;P_Gqa^ti=GmtK+233pvYy|&@?0&#af@LU znHBEP=Tv_~dgmWa%k>0RVQkDB&WiE!(lgAE56Zi~{?M-^`U7U&Tj+_LA22A&fV{rP z`MAf^srUEuBU2t4JZU5IOXu^uLv>lqBdas}V6TQfWMy^KK?p$xWqXZO3425|Gu3DGU*u$p^-!m}K8|Dbb*fRK%nLn-V?)AT5!oYCuW9ggxGK^IQEmR(#RMqOI%<%H}&aC%7 zuI%QHPlw@*6K5*m_L>y907Bv%A*RsZ(AMK`s`r}f8UZ?%w+y@GMsKKaSCITM-_)0h zcH8f6-us^dT%zdza0fdZabp`6-}T>Yu`O2Tww3C%73j*tYSow*sQnHQVO<`?BSh)a z1p@Xga#Oo*Ee0rHgz$AiC=|T6wUpDA=YI-)@z9_55T79NbWksLbu0*9&&C)N;?OdJ zTF8eieoCto>rQ_y?i~g)0Wj@~*nyPcraSd=5SMD?y28`f*Yx#Y5{&Ba7gBVn=XS^} z%K`J^slg2+yVY2~R5vkS9kbJav{4N4LMq!V99}HK=7qie{;y0)^X9yQ5 zrv|=6gK-QPg{}oQta992*{<9zmZii>xQ0yWq>c;rdj)u;ATwDg zpEDJ`<(m2E6%>CY7)hD_*=NS+});NM)7L z)$x>)*T!xOB+2@AZepf#An32BxDL;N#EsUY`|eJ3j6jfL#D?-n!}m(K z^(?-^weaBE9b>r20fYTetdoe@YagBI5F(IlJT2(#$Ecg9JKS=s<0^Zd;hnbo7{<$H zPL1RPCX61C52~{6bV>Xw`}pb%4sN*M6*?=rihU2DOrosb>!j%j60uz6`CYE87Ul7f zD;#&8#q^&zlSSE(Yovw8q!gOf&zni)InFXd%2QRAg`jT@9BUZFujhNijghJA>*nvA z+ZLB30`_T+171L5WwBPe1qfu3?aP%9rr(9v>9>$GcrwF~!Z0(v;#59SPu=)Ft>VCx zRDlvVcXu)w#@cBitk)P+m}KaJX0HVUE;rY+6+)vCObrdZ=!4aU^neLR0skdByh2;P z68g4jQZ+#sgjBbCBl-qXj?nItD=3%s1Tbjh7l=0wO$`3~VpdiY$IDNYuc{m0@RQCz z?yPqKe6W9ycU?3ZX_=(Fy!|K)MqwzLbwvh&hVm!?is!FzFNbACgS3=)e}7fRZphr1 zI{lL~H8L_XV@rlK`-CjtMW95tGBd*l#G{#cS^BDT0Gk>;T@DEJVea{x<4?q~Yq5P1 z>?9-~y5^s+vo;WdtgBGe7<^5D?acleX#bG4|MS(+f^p~P$DP%rvD?<<(?9y2R*P$U zxAL=N@^UJKOuRUn$l4ayZI3AdiZmYbs0?IukxJGnqT{vfZl*`7hO+bryxM2b(EPBo zseUtZ*KtzWS@-dD3if|lXiE=`DP3JhrYDYz?!3I>pPHI+W(S-xXVNplBACi%kp8HT z%P+4;w`D`3I+RqOl&$AY@4Sq4=?j&ve3JCBT*h$-k7T!=r|WWOpjZB>wihX_o&M(I z2+`0QUk2y^A4`$}pfjNScu}?4w){8_M1fvCof!vQi7mt4ym`G4ltJ}d;@-p2hK*tI z58Vr|z3!}xv2E7?l4-pwHOu!gLU5T+W-fUopVNPgP19#QyySzq7%2C&$p*uRj?$%x zx?Nh|fK3>mGl9*E!ReLc0TNK>^t$F}DI{_TL)YzdWIEmBgh_q%v(kqd`T5IY?^c67 zgS4m{3)*DS*dp1UQYBHdrZMhS-*S{W0G@ti5-yx2=B_bD`<{lS*Y@Pf z<*uRkA_|=(t1!s6is|Lx=PV^$fmr4yS9}{`bqFzgNqHvImAP~uHx?Ohe_}tOlN4^K z*wDmM1QH)CLNfVr1W~VRXdGvLBA%aIxLm#DKszA5RcQM^HzGb0FE3^JyW8@_ensNi z$ZG9MfH@|k3vURL}-7h{TcLq(K$&_?z~LzLq!87!RW!iTvQk` zXbuZk?S&K;9(o{C6j~t(7(xyu3U!$op?@?l6=*0&nm?vU~6(1Be#O*Q)i~5HuaD_sz##kTeZV+d(_FCaWb@_ zzce`c%fNMtw!t4`qFMi~&1*7$G&B&bcjz!$29E6I;lju!pI}Z}O9?4dFozHGxzr@K zX5Hm;k+8_AhXjfuZ4>fXCTIU$5gOF$VuL&)B%MG#ySxb>e}@ zQp9fosNm>={pf;~4JG!+(OpG-m1yYwi%vF563O1sPZJE>BeXV z86lud?TQ)AAepa)6UGMF^m*a|&MBEkM2{B?l0K*BQ+fWhkWYiTvj08LVhA|Da$LS! z5d)-o&Mo5$b`*g?*iLjs1oD;FSKVR@Gsa)6Q2s&6h%N2cg7tl-qgi@kz>e_v@x6cc zT|wxaz{?g1|J#GLe)rV9U^XCB5vb*=riGY_4J>I-lL=uT%)nrbFQl?GA<6y=HI}sL zwGm2iWp>Qw>qga?xU3HDwg4rHlU0omQCfJX5b4;)X(oz=I8)}f-| zj}0qdLD6c;kswG54pn212;7c9Dl%TWkb?lB@8LpI4R?+F#_m*E^fg<+z2p1XSpU-@ zw&jN-&xv>MT_tHV$I68Ej$~UFy!SMYC8B)J&`Mu58;S~SWe+;b^(D(FqfH{M!;uay zezJpD^av+s8x=bUS6+l6 zWmLP9&1BerSE5)85q}(JX^^z9yq1nXJ}W013W7S#UC}vmyH`~QYQg8`e>^{a4;TEr z8|wP;?QvdCDeiUUM}jUh*nR8%u5hOWdTw_1{r}i(6OwmplSK+wOFlKxenalHADe~k z5*1d@D~7svbm}STtG{-*4bT4Ef4x^DTJdgMpCAZY0x+wf-%`yOQ5V*^GPva|apq9( z>wl|l%lC%-{LoUx&=xJYVl5VHT!9k1mvHT$NL-)TIhA*~a#%@)MX?QkvRx&ktL>c# zzcUCDadPm_e*(xzVPJ5O>5pkpw@b^XOl*wGJ@0yeE7ED(xKMSZ?nX*mr&R5R9{;Ao zOy|%vy4J=^$WE z*D`sFi;9bv4E#zv#VIo8WZ@O+_0my()$XeV~Ym6O9a@wfO}QAi~GPu6s4 zHI^7X%M{KcC(onB>YmL+6VC*nYP5-)0LVxax#E<>=-|N1G^W)XtID8n>EP2YSID1G_O@B74g<^3`IopM6v92?*${CJr1J@@rzl$+Pe^&`(uB|dAp@qXn8?%K*S|{2&Ac(%x zC_^a=oj70mg{-m-%=kaQ{X>o6k8d5%s;YTrXVU=A#oveoY7N{V((lR@b;oa?y!-K< zNQY>ivcFHpzRje++fqg6Pyed2v-ybtMJ;2}ZF_s$>tACMmi8qve1@%Em1!=;uTjUd zy_RNs!g0Ajdt|kZMD;%+C#wMEA;MF+FH?s zsmV%V5LmZ)9d}%1CJ*xtP_~r0;PG{%$ zFl2_TeB4(eT*GjVhSFlo^1gsDnMJQ|1=*RvNrN)fLIa7ViN~hpCP8=_pE4Uc&FRlp zY(Me+t9Oa+(ZY~P12!59V~h=2z};S9KE@nae<>#?pIsVEi-dtnNI%9;^8PCbb$)XH zOo$ft_LWH~k27`-ojgt?Qm1utYW+-yOvksML+DzNVSV}h7Mrz!n>^~!MxpKx=d;wq5sHg^Y zoYpG`juty?$*S`bkFYSGl5!)-y{MrQXhMiW$* zt}Bb{q8)UmRk(5(ptP#*KN(7tG23c91Vf#M8>SaSUzbd~y@n_^h-;_kzj`S44UjKj zdyzXd^iu47OADv>-(e5QL;GNjeWMv67Rj#mTH4%)_7_1tMTSFKXjFJARe_&M!?b21 z)2W5(`*D_UJ51Yvx@X9v^Dtl!hWNvlsc z*VmsrcjVT6z1)0V%9K=i-&$ZAI@Tr70j-SgIIJWvFrgIXJlj~)%iEgBi^&XmKYFol z`2i1Yl0f_!aj8edvSW0)ZGEH9$$<)_kdjP}a8g70j8at7Z0lz7)WsdoBAN@rvXEYz zMMv|Evce?twZbS&rNX~(v{!v#={q-Kad#*YY+DuN)-msrPibzQiG}5WfS~`R(9tR3 z=y%h|06>KF$AS6d zoz^fyV6AUjg%upGRD|YZlBCo%Uz#lP`;(9uOwUbiuSuU3g=qOhYIW#K-;AXYrovsa z9#Ywu(5W45n7?d=)xu$XX?iSN{A97>G=sb$1AG z_W5I@qCTSXj#;SE0gC{@iU^difN z;~~oD`WiYcLLh6l`&R&Hs5omta)cl?X)>f2<-mmGlYx9Y(W1auID!Yuku^<8vO$#3qc7un$a8)b_WrpPNZTww?~4S}S0xs5;xO0=?r&#WKcR+0 zg;*{@{_x~N;WE3bsQw=f5Fbo+q(vk)iTT%tOFt+-@w4oEK~steQuIUb>PW?2-hu8u zQ_sGBCJGvb*!EsbD*mMPq)9WgUk@iZlw*Dw(Lb4Z6$TlJ%~p0aw>p>86)Ui~-0EMT zcli0g$2?l@dO9B&bnNi+kJ zd6Vv`GkrDdzw=z+FVlbYU~-x)u@55ZCYsUE+nIk$9Ilvw&a@pqZ+cLkuJya8^nY+%GQ{29I0YWvo4w!&T!hbDbV^Urqd1I_h>AYyrJ5O!5V zFsb0nfI8HCGO_tDf!(u8PGV@4ROtYEc^GV#!wv%E1?}{_4*;1kg=X`cSX(VFcrM$t z7O74XVG*;31%?u{U7OSM@-Z{KM$}g~=>1H_s1crJ3N8H*8$*q<<%T56s+QT8VcQF1 z2ntSe*y5&lp5;7kd3Urvoy6f*puXz?rswxK`0154D%(_GC6fdj*7_c5)&+xj(TrBgKV(l6pZGZjToE(hqhqwUo zSPawKleovnr4FL;afd8j_I0z`pO}8jo@cs4<}0{w&FL|I`~H#NK-nrH|BExPww#t< zC@tMLi&oqItw3|@>*dvAN3>sUlxj5m7E?F{Vc}Qa)k_hbz9^~ zI|w_pCJ9A~5QNzAUgkggiOjG5bBGHP`x@P$jf5V((0CpiHlS!7pE(eB?6(|+G(UJw z=5w?MCNAR=R;xFvLCZhJQMb<0HaWOk@b=@v?iA(6kEgXblibuRu;`q6KDvd!<=0<)(~A z`}5A7=V0rpXoPo>u?6lK?j|==m{F@eE@<3SdMgO z;LCau!2~B&lR4u%`%xHk0TTRs)}YLhiy>e)xD_gKWX2cJv)>LizNG-j==-0bL`>1^ z*9RkPR!t6^W+pCqCD))+yKD4^*uPiTSA%R&W=I9x(>a&klmOXhpe$Wqz5gHoFLydn z$LEtDSn~T9Tfjme(0CW(OTo6s5U%bWh2X*L4mBBEo&AP0Z51lC278)WUNBq5@2jlr zL9Pq$4yse!$X;F{b^`;0`=#TDT&mFIVedu8YGE4V-0x?6C=@ZQ^#Y;AB1+Kf(CWQ1 z1u4~&5*T;|X^GAcvkskeuLu8_nc4GR^vPHfP$SD4`v^*qmJ9!H!5Y!{aa@K`iX`Jl zB$%>idh}VJUmktXm}+F!<>jb^d@$*}dE&jT>M~Zjr$$?KhF&d1ga3n5c80aICaXF; zg&Nt~Z-7eGK-6cXZyDT~mc!YdX5A}nZcU5y)TGF|KXQP~lE{xc?y8bDhZGndcBTOC z9K&PplasfHc3NL?C+s#u?sa};qXNp9Vzz3X6`!h7o0bQr*dhJn$k%hkyLl`1u8 zgH6riB8d4B-0;@M3s`PA*X;`#V}B{t2`pk6H#Tec7>2g3|HLu>R+c1du=mpdblIe1WXZeeFJ^V4gKYr2?6U%jv0%t-@ z0<)VHr3H8e_c+xVK^)hc^Esx+~1)2X;1MqqVqvh@>asmvZ#UB{a$ zzDT`FACz_t@OJY(xmPiEtHmq)Kbp?^ugS;l;-g11Ktjo(gh-AC$q~{FMt3*TC0(OI zkW@N{fJ!$=OMfWo?vieJ_Wj}c2lm5WyRY5Xb6gR z(r_SS+x@a&_8e}cK%|xv6PUTq;eU-C`a>D#)<6KJ`ke~#yg>4Jq}k!UYdu2tuy?<= z#%640)&T6BwS99#1!#88ac^sFRc3RX%`V(P)g)?dOs1TpK)S^A0jKBkiQ-&uf==gb zn9rV~=$!=&AedoahXzmWsH5guU$6yqNR`w(NnPGtT%7IqcK0Wu0&Mb_%=+z*M?nq7 z)%6Qb_6C|oNs92d@F~`!v<;yvJPPTz8;!a&TOz6Y(ggX@J|x_mH3z{|7PY**qB7R@ zcSPMn2{I|4d5GaL2=r;N>ZlXVofur|unBv@*d?Mo0pUGqPZG|;K=fw#CJ8zIjLATjr0QgfeeaE$)YEi7t ze9}{qJVYA2AqgW-js^7y z^K5+Ty?d_|LS!?e$^TltZEO*@jk@ksa&BFEChB6m;y`n5SgKyRPo;p}Y!~;sVz0h&`FL-4tRPen=xF! zmL7-qz40(btSogk7!0Y@W_J-tx39RoTfaR&^5V!V&~}LbdW`A-DCS`kFFj@EL5NE6xDMC74~#*)*l*o%YX4~vEe@pGfpz9GWL)^^y`7LM7b zeSpq5wql}rm?HJL5J5>~3Cxi_+x2ilC(FTly8OJz7RY@-v2vf@@r*jqqJ)~#+)rnP z&NGfPlr^`)FbF|+Z*Ol{>`phgvJXE8UG3i|l(?U9%*0f|5%1~O5}759{J#D^HX?L$Iu*;T4G?8|Il zDr`ArwlV=QY+uNA&KZ*j)3kU~5>U|3GBi{{nLSdH`X36+&ZJRj?Ig-otjkfO_s7aV z07VOoAs`p_s=0NwwV`Sr$zW+}ik^X;r4dlQP^KQ1N;Wm8Krr^Vx4Pd^Pu6Pty9E(abQqx!^aO4Zswo!!Ka(O(8U zqb3jbdaBQNs~X=xx7JTjhkJVygXTOa3|SD$Vv1@DB)XQUH!otNa^L%&331z3QgXGwvuX^uR|VP~Hdu7< zyDVJGm>@HYNz%?`vzzOc4#WuRwAlh%&{@ryBhS`J0a+y&08oYOx1Q%Cw%&iw4rwhb zyd=xjMxV@=D}T@m&g1-|$dKaGK`TJMxz@>DeBM3t<2M*KjQSU;zv%q-bcypWa(-(| z@HVnmz`I9nruori)KqVc_S|{6x<6_2{v`&Mo=p3PBghJ!)GnKS-`*z{kh%j^-~QBhGCAm>@}_=gd?we3J9(v_dp(lz-UZ*a zfTq#3Z+w6@p#>6_LXrUl;j^Og7NVQ;)3e_LP2dbZl=O;h!Bh*((vSou4QMRpFGVfK;X(&DjTsbu*K>2j<&WLxY0B74N#(t^>*f13;-H(|*r-cl_l40Z z?pU9|R>pFSKov{#lN}p(r#|@)+*@$2_j*e zas_CJf&Ic%+x>BiagT)W-Qi57!DEtp6*C^7-5#l@@uE7{G57rw>?AWf;{%~=IBQXA z+*gtG&S174Td3AP5W7cXM6ukOzfXZ2p(QJ(h&=%fA4jN9D}KRXZ3&t+-qeP?WoK*98F?sTQNqomc8J4ne63(Zo3=fFH z$=VfA>1w?4kLMlNEWzfynGuuD?+-A-sQXic5hq?D@BH8cOP#KIpcoGhHI0rOF?6)TLa z+JiXqlzT$feCC>rgVdO@z|f=nccx%6CCuoI(pkU>FF2fcRzYc|CBAk`i9Ju%$h#PUI!?8ZoYxi7B2zqERKIYxWF4m6anYq%$HlFpXxZ-bAR!E{c_- zIqnSMg`-Ss5oqsrQ0T(Ux~0~G=BZIP4rUU~SD8iox^AQJIzOcryO-97+YpAAZgybj zh6-5UoTHbQS4Fhpuf~WxC(*^F!C^!Axq4Nc8(YzH2@jP2#)&b8SpI&$mL&g4JP!-lv;ytveykA zh+e*um|&M^jaoj5XcFZk?V}0^-d!I~MadyGbB8D-m9^LX%x%<3N065r7(9?6{k9tz z93yDT{hF+aXSId0CzoW>bRGqD@>0|c!l?3X&Xhft`&*6q=THqR>Un!LcQ=0m86(1Y zeszoRN65piNMz7ti3wjv+72in>8c~>;t$G9=_5-@LcX1(AVRzI`S&;rd1iTeZlgmX zE+HVEFgA42d*e^`S@ut4zyM<+2Cq2T;lm$;(58_@mh118x=s59DD`om_K@C zuR@t9XBn3sF8{lY2XB~wC*)Si+vE$9O3$bbLdj@ zp3|BNo6=B3doYBwYTb5WrdP{o7NtZ#oR3LRP7GBX%$d{4XzuSC3PWD?YwWLHCw4e0 z?%mwnpwc6&9xG`u*n-DTz01d~>DZ&17cdNaB#BISGC_V8c=GZ7y5H4uTmJxMLXZZc zn3K4*@;OUFDj*-6)5fOX#wN$%PpSg{_ze` zE_T*Nj@yVD*7ApFXzUgbHPW5XbA%Euf2_C<#B>ZF>)()Vh2 zPAB`gbrdVubc%-o+tIv;ggIkO)o<;V6QGWay(m=C*7-)tjX;NJ0LlcXA2{Rtl=nI* zeEy~dTFtr*5ilKPp^H+Fh4|U~ffgk2)ho!^f8Ez~+%BQ2IK4Cb@b$lGH7?|hz+or> zJ=+Eo7z|JtDG zbTChWK0hYZ3@YCVCXF(M!uVz#wab6?Pfo$a8p=AYW;9~2uBzY(P^)aSA zkp~Ctn7i}N3)MWB^>z)!ptye*j<*d#_k{{YfMbiV9IAjYmtK`uv9CM&ZB#_`hpB(g z%=i2_KMH0nD}Yx-28;&gHrn>T2^E)m|Ngz6OI1r%c^!5Uw}TS3OgQhAtOlHk1@CCV zyTcXLwvqd^xq(`%UiF`?-Jgt6?xB#Yo0}fg(hs@M{m*uyQ-OcABT{Na&41{=lV;%O zVaL<%%@OlIKB$<- zS{Hn_i2mR_><*0NvXiukD=R}n$$aYUUi!|x{1xO{?Lq9l*)8H$4G*wjKaRIFj2hw< z$;GppzbK`#?;gZAaiF^=>_=JYA5d_I^>y>Zd$Sg+aR2LLT6+5U4JsMHgzG}-fHivX zs_o{|sZ`PGF@Q1eW0D~ds8CD%QXRsDFLWb*%pvHVs^;I8iiB&uKt=cCI+bO|lj&A_ zkmcfE#gnM1N$vr6C6QkJV6Ytz^qdLMk}~{?4Nsv5?aKs5a5r}uxW7{&#U=0$+|#QI zll(mLPrH8?BR7Zv{WY45r4+DG82|!g4{vK86EJD>f3?lIX&&(L>+ush8=>8O?yU~8 zIQh}j5i09~{7Y2!=_7zCsCeKBX>|raaG-IwyeX8pD@3(Nu{6a6UFx8&*g-cg=45Vl zvr&+a+C_;A^1JK*_y!5Ys$Zi{0H_YWSY$H}QF8slQ*UhS^u9=sP&QY^zE>M#Xo+2q zBve?S+$u`zj_YkP>eTaHyF%gSFdD_?Ky6r2hOv60*(2Ix4cNBm*3y{PCE=z&jH`>Y zrbH4BNJ8=1qs;yd`E&Dv&!)b}{I_+n@P<3|XDAvgW17C(sNU4D;xvrk9Tno?IjR~= zH8hRf&_%H5I8;s(D(h=Ooqq^+V&7|DD3z&9NSh`YUI^3`ddf_KRr!F`y%PvfQ#?`~ zNwDEXD$Gr)kxm*lE|C0FV>(N|G$(%JFQ1AsZr2~7M)KEK;^O+XH3@9ak?m0$BVx|u zH3Tnkxr2Ykwi77Bv#8v zh6XUCYeR_$-GtU94$sVGZw{aTC!Ru zXwvpGq~=7iTtvvLCth6>?%SovNbKcZzodcei~Tp4Td7@Z1D3%6LonaSYKDswqxL-4 z;|503aLdJi&^BiR8Y^?ki#WYyXrJc%)!oHR?Tt^k10j)^2uEVtnB{VuCTj`^-Q zyoZOU0PCc&0*g^?NuZF{Nd*LwLZ%6rl5O1X%@K>=XDU>p^YrN}#@X>?^Dr_o$SjO= ze|M;~%~)4X&HS%shjOtbX}(ixq)0n?-gC*Vi7$C%TR#S&0AH!ln}XJ6@ycS5W3B&f zN^G5h;b{Vg3(G&4VdhqRZ}?wr6@;m%-ie6?lT#MDc`SO;e%*z7!F_ab|B+!zgZfy+(&CNJzn!cke`z`IgFSKrPp$xbl{uL^liBz3~xAC11BFkV%Se%pdGwwZMoIt!XpzJP$s%BC0Z8=Mush8ac5aU9(tMbYVp}c+OQUi?+WLE$dm}kmA`=cnw#DC zQi4Ll^1Al0k_Z_4c3Hd@W#6j0_^_y@!*26ldy;gq-(f=TYb5R=VA3Rghh(wbvHtb8 zPY+)x5&{T6kFA-UVn3J(Y#wa?ejGWM``OQBXfjh@so>O19s0TJZvU;@?tPB*#uGY! zF8MvkJlFfm`t&+Aq*Y!HtW+MbVq$EZupxxPe4MixESHlL{Xwg6P4Z-%5pw7%Ww$4($A$dr%KNz z!|kuKMJM;~<>v9X9#!xGR$yx_$T|4cAc8fVl{XX6cBh59-AqCO+?93OjLha^^Ar=W z;zTqSokU?qWm5MRm-*gv;Rk z`WWMJd{^&eAN(-Hq8dpx{iccSOF@ug4aUiqilBlb&JS>5hTuNv(8e5hRWXHi8n}d9#-{J!Qb55DM27;nq!v%5&Q300GI>5n2A^X-xTl_6r4SL z20vkJYL}*i%|H`Wk}S7d$I^RrN!Nd5WuS0w&DuX=@fL=JHX#A!O&$7FZZ@gUNz|7z1WYZLhY#z zjp?$-C*QNrU+B(yE*yC+kK+EYr|#E?lR->k-Z?xcSHCUnFpnqKS?6Vf_?O!GfmcZE zA9;>ehMt73>*^tVBTZ?j5u>Syj&iL$N<5xC`J-z=_%9h`G-dhbRlG0Qmpf!k(cLRi zr}2ahpd<=B!7_%)X4ST5(JCS?E-oyrXJnMPq1&6`+qQ?+bTof7Zt}fq-Z=+Wq3_NH z9S#@PQ7h!*Lz~nu{S;4ydw8+w;qRIX+iwUX3}XmDHF4MlR#7ajS}{kyEy5;|L4D-a zu}>vxXqN9^UY0mb^7)~9{gm!u!|$C51{8v0EE#^3@~iQ%a!$g&7f|!6^c&4_kSrKb zwUK^gD0xX0D!9x<=1L{up@iB^vDid0qF{%6NDjISGMO?}I`g;ExxEa?uA)Gla38 zFJWcNFDiogV9dBFW5#h>`+Xuqb_G>?02IX>6vC8)Yy=~K(@1)Y;i+NDlbj?Up{IG5 zo2U<*lV_M`m$-=ba41@mtY<@EC^GnEVKPf0neW6AF$8T;*ga*xZn|AUJjlVTb}?0Y zVzR!gjT?cdOZ)1r{**oc8>Oa!dM+4;>^kR`*c7iPi~z{G3VnHXwcXKz!{T*At)OWbd!@+_@;B9-jfYB|97?l}j*`&*&_j;$dT27Xke$-5+9QmCe z&Q1DXFIU!$TF18KH>HN!Dg%pb|1053cprtyJl65)>hbyFnr(y|K{aB{GPL!%35@{e z*|z7fC+uKa0q5f6Y^8n|12k*+1!QZCD$=$hGv`Y&tD(EE#6?R&`n?Vf$uIkysV8Z< zUh*NFG+O5M-#3O?7=;5a8vhJFD2>3ZmkOM+$XS&&Hj{oS%vJ4c8rjtoJwBK-$XLzGL$CytJ!&oVtdn%Vi9-$jXzJT)_1Y@ZZW<) zDW((@d(Eh7aT=J25>=$z^uHAYO~P(mnL_YXx(y@Ox{2E__gExoqK;6f4Fm6E zBCJn}hfRFO6Tu34|i{{bq)iS#YJST$=XPX8e7j_?v_U#FG%KN8xPu07lO*%Ht7RAwiL#lKY#qK zVOh;jMmevB*}EbRF@iMktoW1a)Kfcjdm1v1_BR6zYtvA>{i>pZrV^9CqpRjd%wpT~ z7myiR@uP&|9fW7XF%1kG?dCh?{^#4DB4jYC<*E6$9A>I<;7-@Cfo2cK z_=n&J%V>HyrOs{jy7MkoX@~rs8a-azu&xT;|LjVR3E1q!M1Y?@43Y#;dUn~G_R(f7 zsX^P{8G3Qs5sVvg!O`5|f*NhS5GeFD6O$!_=})|UtoX5GFz8?EXD2*OwJO9k5{?P@ zrkhCfFR!7^Md`$ICknxJ+wb84 zlHerfFKrnKO*fcuv;Ye$sB})TFIlro(7~f?qrk*ZdeyOn*#mxVYI8-DvQt*Vb~Y)W zh->=y%1Kmy`?jFMYIBPFzwZtRrr^-5*#lu4fCA$t5^ocSIAzd`3cdI5F`kBvEb78L z=q8NAZyL);I`K`^1*6l=waEH0sqGDoW`(v&1c?$I&M#CR;rRjO^Vvbca4$CKC4#&z zui9FEI(%85IK9o_NQV`h#|aawqyP_4uyy!!MMXuu-5;TzDMo>wE`kazJTvbTsW=tE z>{xOvz`6n>43dhh^O;XXe|{5F@TM!7VDK}TiK6J5!B_1p z2n(1L1sIGC6^abTl*&{1#nhcZp7~2T22$jcnVGXEJ{zD{foxZzL(#6ia*wIq2olN} z9;Y0S=lqTAr|;TVu3MCuyx+UilzxAEP$Lgty}H8&c(*KNS9fSAv1#g6(~-&WYw*hm z3T}7yNSd$1d+Lt%2gq@8wI)7B;wr}T1RJbhoD9Z4Jy>l~4tYL3^qpz4pL|Qyii`aG#j4$Rp=>gwO3SsWzPQ6BnpRy;R1knRpFDsktg8M&fjMOzf zk(BF|zW|iYZJ{%`R&+wQDfE=@$zOqxQ|LgNFa!fPs2)1GU)L3-k2MZc-hBV zpJT&9%6Pbhxi6l|Tg`;ZK*@^2&#uqjn@7f!2u(_FtC-9zFI9e+6Ur1pibD_U6JC zl<83*a-_HmG!;x`O9_+GjA;qcAmGp?$`r**PVAFYUHp%OCJW~sn2|BL1%HHR^q54` zP5z6bP(^7=)hqW*t2n?wCyx-ATip~cySm{|gf=b(V#P!sH(X3==G%@I9_12i&=Jol z?cSP?S!OVdN$>6STKnohyFg-9{fOqFoGc zsIr)7#i>Q5I$SRQ#Up#5rt8z3IZN*-9`EY%ZQr~uP_MWM(5V>i_GSRY{gf$krD>^> z5cU7)={dw$W&pQg!1!aayn~()8B9)Y`Zb2qM$*(=l7)cA9?lG0WNe-pR!}w`5-%pV zklYklVTH+Bw$MjGyVsTD@+?uvota;UzM|V77%$l|$=QI%b*ja^q{)hGvWje8ji3!J z=+6UiLH#-mt`mDXI4Y~qMSv`?2>IZ^`pwYDE|B7{ivEkDRY=&1S!A_Vf@)tp%u3RJ z{;xb^V`DiRX_iRRISsR|eM|6)3E|UbsE(+ zJD7UuSkGi)$NMSxS|%WVhkQx*t!IbXYX477{ z|IC)~Mu$g69RQap`RmQE=ADPn3yKz@$<*29`1Rw%$oO}Q>g`@MlBK3Hfde6KtJgSR z^edBf5wx^2n9yxo$$jjSkgwD#@A_Chk?>4dfw&D}>U_^Y&-{VKu0Lc@Sm_Hz@6NuF zaw`}DNV21eUVU)H4KMlEH8L5MNOyAW54FaWbABa;hKhDm@dxaD4~!jF#y(b#%+oJT zlz398y$FzS_C^5FN?iRuT|uq%D|L)kd8ZXD8V>bITZ$Jy zTzCJgQOm*J=2bPyMZRTL7c@6N=Z!}wM2~b*IeXm){Esjiq0fh{M&nj<<-kikzL`qZ z3}DvldkpJO>?LHlOr*$u6!LgX<_!lj7F!Q9?KA#&e(;Lnkm3L(Ob8Jrkox;wvnK{3 zR$5wbEL)bg?XK@O{@Y{BTrXzdRzrE1fJl+MG<=xpgn}k)_n61CGR`>yiw4|JJZQ-BRs;aBH5PEXS&mta zOjDW6nIPN+)_%S7$?#3yx96TsRn2c3l_H*N75A5gXb62eN|sVch*W?fEqN*dJ#jtx zp?p`NOzIo!0A7t`F%ym7fN%uCNYU_1{|kUA3R`;ciE5&A@uV#N<6AIP=4*g#R*>Fn zFK=l=9x5DJ21z-4trVp6n$VlvgH->6^R3Pyo&OHj-t_Noc#6ZqR3(BQbVqNUpT^^2 zOsp!-LVsVv6V+b0);wwjom>Z^$fT>;4Gn@px9QJg)lYpVJ>%2hbjq^0~|NEYic0isyZ+@c;+pe@9bqaw-BEoR%MA+n{Y`JZIyw=HkxqV=x5;1 z7&KiOMqC<4uQ~JIo#6`BsQl$zM(JF@?=mDq6o5#($J5`RTCzo4AI%*EnvNN7JS5nj zMk4sGipM7MgAuZ_%%ZE~p$L>sW$rwJgp~ot;K8l+FAV=3%=99&oZt#iu^ByMKqJ-b zq=cb46GJ!7h;p#ER3ro$;>sRuk)<z*pKp;7{d+PACENuN+O{$EcMvMCWMb4WF zMaQG(Rbfu(?v|G{YXmqD$QkySe?M@*Vj8&}46rP*JXU{|(i2RhK|9rkFP6ZBgIEeK z3045qDMxe2aSp>gCpfg6CURATTkv_jjSlYvf9f)gp|XeFwO0i!GZ41a+u<7lnB8W4l3 zHfyol^tc-AeM3SRd%o}(Zbl*lp_J4SOqCnfW{V{s9o3-^x@k+Rp8=*|E{e>B@ueWf zHLiU1--{7P%Wm$Y{M~-zU>6D*E@vcM$rIvmtV!NkdCg_gDoTD3{18@3LXw#YI>@ae7>+vk`$FGsfcakQYtJ zq}LxZ2J=Jom%*`i-}K4M83=w4gj?=z`b_CX>#p-NHa$7QR5Zwei1&!6^H>^}UcS^3TO z?aoSGOcT!hGLkXJxbhMfG%Xl$_B&iu^P{E7H3-VtHPRHD)i(dTm`*S5J>Z zy5uB(PW@*(y$;aE!U)2CvtgyV<8Q2As(k1Fxp2dlO7%argq2CK5+Gr}R+wOYAT(gk z0vHxc4hA5dQxjNjYJ5oAT0adtAoAH*w|=9=Yyq0 z0ty4&M3x3~7R-K&0y4YRDY6+ExztQ)a*oI9^sV)RZt;mJXi{b?sbf?or${jgTLakh znk4aOGfM9ff`Zw0S++t4_o{I~Sp2E!>blfbBGpsR<_r1mkhbQ@_c z=RL|@$=Pn8f9+j_;r}GrW-Z2V$b>hn$XVcwE?1&`PQ}_c5K^G$ZstI28gFE;O+`dB za)ER538+R8=bEEn>*?JixoZE1=e2dYFiCjR2`@GuTr-|073^&6Fanc(XB!_LPNk`p zK0pu>PlX_0oc*o9Q!x9(YGY`W$`k7G9KEgVuTGpi?s(#Qt}uD5GjXMq*Q|Knlen$? zdf<2Y@5-x2H|P0MaOJtr@~PxlAM*EVnS#*zEo3uMs<-nCS_VUe zUdm4J@__%i*oTdA49Lm(YYxgqDhvi;lB{mjjqAKr0#W{a-|?Vy(s8|1k$u#xWHhTX z4WLRKE(oJeXd-+pP+QvCI`{g;AyuATlaPhZ$k(llg9*0wIolj;K#@q=2oMKb%8hk4iA^O+8&RxhjvieW0lltx6@J4lZU(NXTO&e={kb+CWfee{MtpZ zrF}#EW3v7)Dv^@$3%OwZKOR?QLH9=u2J(KMzUPDIHnZ7}YSi&hcCHB>woI+`xu>@& zZIQWmBV1_{HOwE#+Ks(z!ORk@B|*nV?#YgP^6YV7&q8(EG19Dd=X zHaS0ITlxV3E9tO#hDKrYG+1-zcw`-p+T7f#ranw?>8GsChFIp_fHMJ~d@lD~bi%&~ zuLBZsZ>_=MwM`s6&uL-ihA$KGJzfLXS%L=}f~Zqgx_KPO!xiEOUG>h-MR_gj1qM~yon|bk zsZcCuL(W<3<->k!1zj85CtTO__DS^C)OS8y%1;;TpVB(|am63)f{dfxbD!>pCK++m zlLJPH@6bMU+?|`;@21cn#|B)tU3b*`_;`9o1ZR&B0lB!i=&yUr3)!BCR0fi7 zivHmloh8NR(4Sj_Bk z79YQNac2l_7Y15rNOZX_a8-_IG!0TVL-O0a&Lg;U?NEcNUjqqPEjXA~9$|$6KKDhi zxanZpr=o|-3G-s3&=-EskJnr|?}H9b^?(GD3FCxqnmDTo9ORY)#|}}xBA!hPo@i3V z_Nu5RHiybpMddtfBHQ-eJF_~=yd}OgSm%`0@jq18s8E8_uYPw2HK!M}-jU2-Z9{Ft zf}It16ShlA_(b37iV43iqVV9|dASU6w%=AzNtqRzG;%+J^Wja9uwj}5K2|y(zO9=n zw@m+I)InoD_@B3imcyv~=a{lEQr(zg;G=mN3cB4VI_)|~IP#$|;xBzewT!`lQ;Zu@ zRse*LsSWq+pv@i|ewcTp?PFB)R&{ihl9Y?dr`{LN6akV7u>JO06b(khw1!v^gx?Sc z-s%|pAN`MgQK=m}m26O1w}fwW^}*qG4QEA4Gh?arWFQy~-B*Dh}OyOXEEiN|GKn#N@zN9nag=HFL+Z@2-pp*u0`qdln)zY$l7= zo>Jzu?mG%ij(|8d3E!s)mfRv|-Q3)GU-UzoDI3qH{5M#MaR*yJ<`xrL-lN{FKH@JW z!G6#AA+qo7Yf`MuYeW*5AUj|01M5~?H1~~qUhYZsU9Ebvafh*9#MbG1_ACj-X9uAA z5oRlPbh6Xz=&9~An#sXYfgr=WK?TL-1~Xvf--wR^mk&n`%dIyzGG9JDnLgef*gW4f zJb?gWpKksYmeO-ZZp{_WF30Vy70RzabrVbc-TEKrX>sxRIt8ArznvTF;a<1o?2_e; z17eD}^dn4vmipZpq+fPbn%;3EEb(04@$WW&E%!UtpSG3XYK3a8>T=y(k7x`#!>HZA z>DX=bcsXXwpKYa-&g(jIuSV;(hx!`WxGckWvYh2!98vm2XRWRIpss+XA9_)U`djGa86NFL+9V9`(;n@VCMMl?5N9v&w|v{;?iO z8XDqINz@rGAH=dOLs-dtqkLXHvB)m_kM(C`+LbFK5#QTq41E%FE}?*RJjH{Vb@vqk>j z6W>neWJk8Ykg_#c;qcDxU8LO~e{LSQ_41+IZ>^FCY%D10&zc&XjSTlHBf-tDE-noL zE3^7;Rg6O5Y~RY_FOM6I)xsE(2p&3SQe<=bf6E#px~mH6Adn0gN5=s_k2;AKJvBs_ zR35-;YEPO3U?>jnJbtm52^?;A<|fc&OQ5sZNuUwxlN~%ia=^BM4k#cpVryp*54$*V z$d?ulrCmk~`q=@0LXLr|@*R|o-Zq4)vuO>xcC}n2~-y|0E`B&`S zadDVJANhC0{6`7iMTuS}Zj@6*{XqA&T|juupi0rZNL6^TDo;3Xg8ijqoj^^yNl|L> zcuxz7p{1Y-4UQa*y9yh8P;>dZoC$1S%ODBRijo^Qw9c3!FvHpbxm~Mzr4D`Q>N04S-YI2Gg@@a6E0|}7aHHNUe?7?CIJG67mKvv zBdZ|ddL_h$(3uoXc?qxP<62`T1JKus`?aKPc~k;Wfo8zO|7fDOw`L}d0Thu3Z?^5Y za_D%7?fCb_jLPf&C{VD($LsWPeXYCZAUpQbZ_k+xD)&$m^u+aqx^ciN(DD$Cj1da? zK`0BLebX_lGXvT-l}Rs8WxgAnLCq#BDFYGARCJxLI%qaKmFw`kDVssck_X4kZXa&~ z!26s%T{JY0VZ=d_AwkEK?ems%1(L%9KV!;6MTAH+ZC@p3gHZPw;@qG!ty)Y>X7s#H zws6eOYK90A1TwEhkB%j@tT$N3Uh|!0%*d~=F}79ny;KOnmP+JX9|c-cBf}-^ZCqgU9mS|KAHxolaZ*bn5chXO5tx4{9|es@n$R zB?O(ucihcBUz?~F{5+Ahq`I36q-;Djjb@F^D`4v})9s~7P7zgYs-G%-mMECWH7K|i z*4UxunyG)$M1TmkcZP=kcDv>QxDgd_0~0LW5)s1zk5N{-G0865;({KAMtCU^2{$4{pBUBuZtARYa)^2Ww& z?!!n!M?7NXdEw+~efAj*@}bUJYW_0T^$%c_%DctrRo=?tBA}C-pg6Vt#G!Hovv4Va zsjXw@|#?TeR!Lk0?}wlTGG7C91P=b*VIz|Wu323Bm~V_k>h)sZ`8 zsA49s0x*P)4ze?~Qzqe^$oQ8hG`YMuhQZuiL?um_Q)2tZ4gaF>N<=gvHsP92mICBR zN6Ukm%M}}=ys=vabBIwUACy`|$nf)fNKh%~+%?iB{y;0QB(jmDXq#P$ZhGfFoHE{#V?-XB$lp*1t*v4g{OD_=|nQ!7UUs8#G48rzzh z8ygka0&a&)Q19AZI1)DtGRI654kSJk4d@v_SW&=A?$Lb5@JER=Vf?o#hlD0 z9EqhsW~;21Msv6iPwhT9V2C zhXJb!344*4pL}Fw3f&Eei|rln4R>B02!X~lqA`#qH+>OHD9rSX27^!(CJMIKq3@8w zHf*ueztocF##QXCrh3g4sM>2*LKn8T{dUuv;uN^Ie)fh6ILoyFM+*NbT!wDNO(UeLvFLximHwY2I(SqD(}cs5$aoOeE-^&dM`q!3G*G`oGVDGKn@r z|JM2?bcq6#AGd0V@3+>kwqqS;VX4p>z6OTZwednyvXINh^w8CiGuuW%=6dyv3cW!!$){c3FV(ll$*w+C{Y= zi%7V=cp|Oohe(pj4^qV&MdxWZq>gUo!#IREC z+gq@iy}KV39uW``T$3{M zbqI?^;S)Q;6+5Pt@Luc14^)#f5)6mJZR|}er)lro>C=Y1IA@Gg5FBz{O&> zON%)ARwpFT*O)QUY(JVag}}^;yL_4hDlfZktxgyB_y8aWGPjU!GZB-DGP{~JKUZVl z^dqqvmYsX7cq1bRenBWHNMo!CFEk1m?7>4$oc+o zd%5)5H|o$f;g{Q??LxsmXgA<;-v{)%c{@|p$j%(C%l_GIV7MD@_*jrP&$l-vs zU4>9zt*ChAYG#T_acTIvM-}P@DoBb2Fu00s2WHPXOVGA;0wn9`mX9xgKxsSSCshV9 zi?#273F7PqBLu2)GRU_?t37B&nWCnnGzT{hz;$ruFa^j zTFrDl5W4V}zwC>#f6rKC=!01AjsAEF7jZ`Pnor0spVR}?-CbYfy(jAa+e1yHta+jYe9 z@P^KOh2i~A??8!c`pF-4iO61XP!R%2$x%X1>uurY8KcAUj4 z{u?yykC(!vU&k?|Vm%U*H5FYaT)ckF4lZqcCF^Cx1bH@a7F*5ozpN1D4R!Z0cmG&f zhxmY{>E&sr42{y$j-kQGoVz>Sy&W$`J;M&~O$aMwbCWa)IA(1moL#D`|NDr& z%?5=J!lKKRPBRi?f!6bJ=JVL9#LvbaQ|I7JG3 zKcE18aM-I*tUjubElpC-b0M*pJaNyu}v#-<9Jm>f{o%=Yna(A?1$bllk%Rlc-CguvmR=7~y_FRci7dM{e zIqm|d8L*f^kTSCQ%V%OVCrc8jw>(7c#3|CbG|dG=P< zo0sz-3&)&avAxKHX1Q>u3FngEEazK&8g?>$ErpjYq-h(5CvK=>>ZEdNs*z7zc5!eK z@N1{oT)Uaz_@4j77su2444iVjp|8#NBRh#$1ekD8O^B+|6i07fvM&0X6tVIVk9^Bu zqZr(VEWikM!`0jrO~kQ0jddY_TxOn6z96~`mK(eGoA19J*wJi*1l!WJJ|#Z9KkBbK zI17AvmnR43_*M3KYLROuL%QNGQW2GYhV^`}<#KUZXAW^i_@a z#~vBSszbs#grn?vD*G7O>mb==&t&fs$L5>toq2Rf_9o*fjy5unKil9AOkCm0FRyGvj%b_;QcL^eVUi!lTz-G$rDC0^uEmPT7_-Og$6gD%^eQL=5I z)BxP_8soJ~@ek81A4i(-K{%|_6f%ejz?05xZS88w!and~&sO;oQ$Eg-c|6V>bPF!o*8`!1;axX7BX!KN7mj_Cz?!cP%#= z0^evguX1;DOC9*_$Vp6n*x;{N--kgwG5YUQOL#pR0plVf+t)L$ya#>gOO1>J+u#PN zeu`WT#wCN1F%u$Cks<>n>Vg=p@d=r6mg>%0mWu*y*qFj}G;`RJ|KZvnp5gg7h&RNf zBeG9k3eQBzo`np3LcI`7ZCMCunaeIE0Imfje!2|X4D`EzSIaBLgqI~EH@W#max;ij z)*+u^Do7W@O)qO+LYUTz%#s}R$UO3+CiPuuqI6XP{W#=up#;~}_0si%3hl6DmZrdE z`~K-=FxA5P`uga*sPT~ddKT*E-JvHPSAQ>M<>ct7c}_c==CV zl!MZVbWkoq4ztd^8Dl)@($NG=S8O=G{p?BIuJIyLSmrF47*vQw5i*|w#ty)K41d*R znx-d3Y)kmo$;7@*2KuYFSBb-v=DIN}^GB0r?!AgSD94kQ3`RP6Njs`RfXnhLjLZdX z;413M7?jC9esRa*^8EHX^wL7}`2Oul*1fbe*x?$sf&E!PcC4ZInn!SrJXOLxf3wn3 zs=nbH5ZWvznNHY%Fs39$PtA;0*5#GhNMiRv+uRIYh=Rl3y@xe{4=Gk`T`te{m}IMJ za2xzBqoE>ZUG{}LH4sAWADi6+ao{g0SET@yteBB%s@QKLb)one#OJVG8vHmc zfn{_^wncj1OKjdIN zs?K_!^OmzM%!A#gHW4)-ul>$7O}>X*biDTCQ!oAj(~>JSv}Cb?nq#pC2dOm*ziJQ@ zk+gma263>2p}~!1F-}b7bv}wq{=W9RD)T~3hK}WY=+ta8PEfXNke`2Wu(wy8d6j+G zJjGiZ2huUDVMy0p(MpgenWIYNDZy)rFLv8dRE+aeQab@ykmY>BYB~%DQ7<3dDcOC9 zADk>op-)psc`Jx|(XCmU42lspeuAeemgPQ8(fjk4h4Yu*765ZXl%}MYw|$*skutxU zBFZ*wE>*wokCR=jGZMHNPsy|Stl08Y#e`-7Z*C#xW6<5HUnzHWY;p1Xbm`K!O{q@fe%9e2GcetckVjlsAsFgf7q2tWIhBj}R5wFEH>1U?wqxtyXL40Sw;0RE=3Bsy#axthNkketj-*4ad?VC1UcclLFLJi%mND zavD6W8qS;BTT?TM$KzA(zzE4;sqieX@&Mpt*%L*}4vT!O|6SaJ3QDc0@Gra6vBQG@ z66)P*S~I@=a6NtJDfZoPbt-vA)pc=r{@y?v?wV^M{3#3OXQ@DTFdJz)sH@~Pv?>Mr>k^w9%TVr^ zdlI1f&$Mb9$oaZU`;QMQY&u~}{?ilr2!8uEvpk(X671OUpyG#hHF!QY0<2^!oflKI6nqAuht!q(!VHwI2NRb*hv9?0zp&)BZ+GsBVa#rhNNShFGCT zMu~>2X~(Ap+&$xTesDCfy}d2iami$-SMe${la{twd%RuT4}fmd3cpVWRZpo6+7G;n zrE6<%r-A& zVG^IruHk$~6xGhgRS;g7-dE}TX|z%u8lk5~UVyD{kA=PV3cTDL{WLY0rsr0lb-Z0h83ACfIz2muFSVs?8@%@-vQ* zYiEnVlN}qF7(?NvvR&>kSOpQ?Q+nM2{j$2LOnnYJvAW{`=|#7>HkyK}l751uO1Juk zx$1H>pq+q)d>{Y1uXhhd&jAhiml{Z98AHDNm{38@krh`+FBCDM4eNtBt* zedDK@4F#e@Z2HeyJSJjzrhmT)Fn2;6b5+)@XFFrj^F9rnaiV$cL&y3=G-T!DVsyGT zRiwWloH^-uPgP5EHTj;TF{ip&R{(iEzx2M0oo|TL{##BrMK?wC3ybxYS_7ht_mUxU zFV-146nkjh+U-cmN*r~gg?-FE1MhHFtx(z1MtrpP*iJRAk4wm3_Gis;wfYW1uJBhK zK(Cuts#1pGPY-A^Z9fcua<{A0E76BUP5r-`dm-2Vh;T*!ratDVZZDIgQ$6`W<6`CH zS<%TEy%G0@b8qH{Z>_gGU&9lIc32_WgUYj}zkbRszFV{~++!QQnE15LhP)Pu$6RlC z9VRe{&xt6=`J95ZEI)g@1GYmXZ^8$OghQ&v%sIr}_pIn_1Sa;^xNUR&L+z-rCuDEZd<5znkos**s}oZM@^#z}Oua zdYy}Ye6K=s(U0?Z;mH18n9K5@3pdcfoP3P|C|U8%aYRG0#J&jj0v$ws6h(t259i0_q% zixh~Eg{24i;JAB4+BmO#3kfFI;PuwUm|B>BrX`iY3{&{Jzn>@?m+6PcXM ztl4I$^b1(@dA70M?T-0O|6}-S$4KVluR8^p;-m%t?s#VU=4QI%VzTO{7jRRib^JRC zXcG|M_jxMnysBoG`uv<+OjbQr*1`E?m zc<}X|U7Z7nGd57?@YUdOE0D_tIDJIK)YDE>&G#RwRB!MB1tunbF3R41GZoSdru#hQG|5`G!^30m zLII{)Myj%^!6#XExVg=_I6bJ0D@xq_{{5|!%zbwAzd=4*+d+{_d<*8Hoz$Jz@n*V&9rXc)hBtVqOlv67wu*j+J*+ zVuRLdP}Fz`RW;)BbJ{X8d&xrX`kwR#u$Z6d+<^{GHb{7OysXKUf%gw;RERyk%6-sd zb^mKibiFEn@tUdAgUBw_>!D&sX~sQ_nr1!`n~mwjdyM3qj3oBL3gV1CCCDEFvcX{2s^7;zdL8eo5)alyO-;E8YlO8&TL zZmB<1oYMRH{KrFIu4>ljBr3fd)p0VF5hfL^;8R1xA!6S!&&<7Dw%rKeMBF}kz3_{1 z<=|ki&z!SJjxCUb_C4gA$)@n5xufe!;@Fa)=S*HeFsyk!rSW#BsKJHF{^bh4+v@US z@K#LO>Fnsqb!F3vIpgc<+49Mblr!I;95d4TqZ~fjv8YE>!ZcX{!%oG`%auokn01h_ zkCV`_Ht*mcYIJg77y>;%7~=$I>LlVU6vZh!eIs&zS@LbLC!VFkmC#1dcQaA`wvI94X`TN zE+Q-|naIgKHZSJpwmlnyJwp0a_4qg*z+M|K^qGQewR= z1dSRR8qB6ApGBj4I|qZQFfjxKVRZ8oz}dmwSeatmOfxPK5d{K=EZdqjPnx3~x(_ZB;andb?wXnDdMgtT9b&{f!n4Pbv3X-!A2&&Tj`L%U& zcz75j{lDTy#a9~+#qGLL!YhY{F~;JqGscvbdz)^B7{ecx`SjzbPU4;R!{y(# zlp8l}hJX3v^d(+LW4(j38J^xdfvQd+4CqI2M%2855gP$s@y}DNL{~%Zx9j^?C!t@B zA1?;(&y^=K3QbcvRNnzIjL@Q*qo}#-kh&lb@0#=J+buzT)4uk({Zrw?-FoJgu9S+n zte@DWfbE>hZ5$za4;7`HTc-=R-q)7gyeh9D^cmJYxB@yJKQ%9fhep)@u1_EC`K}RJ zsn2gR;Nv@2A~x`Q4D;-I`HyE+2yhO*yX$K57~i$f8J)o@6()Fh!KtpXt<6f=&QP~7 zX{^w|izdWqqSi=)uo3!PT$vCDP;DzJVyEbP1fEwKI%83_{`Hof5ONA$dXc(Fns89` zC3MQfG@i3G1-S+sJlWMiDTRvxVU1ErCtW7icFP8Pet39sf9Xsadu$(a@`#qb?F4(e zr1C2%fanMCG?k_(SW;GXoUf;Bi+#-Gc~fg0vEt$_5&x1$5tL96TdrLsGM&Am^2DGO zCa|^-2?&nZ+(TKO2HD>ded`D%Yg!J$Tp}8mbUzqM)g!lwnEPZtdS7t9OdB@l=jjy9 z4)gFmz^ioKs5|-yCM9HgO(wTm`KT01t&^gZ2Vkd2BB;81XKntvR!dtlSXYa(wCTToTSjrD! zgK_XD4B#Y9(Zee#f%DHlaD+)%2xlYI1aZd;-GAoDdhDa7xrrT*+(f;4l71yOTK7fG zzLDVBYt)7p%P1_PB>$)XkbyCfkU0H#15;4+eN-%^5bNxiuXV)xj7>wdD!rs!x+q?M z@z>|XwC3vuLD44(H&eLFK%{bFo;&}KgIqSx&2g5Cl(K8W7fU%TvW?KqU$hp1tn@7u zs%`B7?NTqH*0G`bBtouxcl|sV@+#)uO-r?I<^@+ZxNuz4UCLJ5_c7QXfGo-Jt?s!n z{3@D386qkExH*gPEVivo^2cYij!1+@x?}AhvIlX0*7*x{9}{v!>6Geuh1g%*c;$4wiYDmD%2~mB zYwuRL5uW&_G>}3~C{Rf=hJfyUeE|P0s z+5=Ftu8Vg41|~#0?;J5EM#J0m_cjvV)x$^zT|+-?)90d-}A3CNuP19YCE~PT#7FUygrt+-jOOI zi~TKd5A}4<65sf@Yo>Xsb!oA=B?Iy`vqGQ$$HJ}pLe{m(f3G%zoqsC!Fz+=>cl!N* z79c4D^${g)ki6g|0afK9kcIsHv~-m>6Lw45ee#ZkJQ5`PJd)oS=J?Jsi#tnX#wnT4 z$9p zyaxtfl>PkK_>G%n0zjC?e$B@FWHJ2y1}+ChvtdC?NHE0 z@O5s#5@X?gth6zcnC&k5C2u3?+`lA&Y%12P{H#mLNLq8p-{;TQ>I^UXq1`WRoI!R5 z`88XX%5MWiS>o;{Kc2^Z98RPPLpTmA1uluC``64cCC+r_*HbwMMkDefxbuI6b;dc6 zJI!jml;hwAyN&dDzR9Z?g!~C$9T3y>VR3~PF1T&b)d6YjVPN#TbqRj!+LIDb-?utA& z_D2nLUnb%zJNaZVhZIu-a3LZfa?4&Q+s^(vfg{uA3^!{r%b4YfpiE;OHf_ zR+>6RXO!?urV%@cwBfpsudjdgbNCDArtPrkQO*CT@*Vmd!r>g4TF97(ONdclQhHPQ ziYMrko)W6p^0D}asng}*fcTX}J3Cp(9paRU=)K7|NOKY0%wJjDc89=FO1 zNjlALV0mf1Kqo|U3*xjtLEn!eo~ zSYV5*tgKXs!>zUtBc!z6DM*iU`#3X6CiJ8jrco@0vJ3G!vJUhVubY}c z>hz3IAvwE!T7qwOUcfo?W8~s;nD5g^xv1I~PF(93*8OJ#%3l@g1=(cy;1tQ_OBIAm zeqt{*N>wzqYR!Dd_|S{$P*pXKZ_tvInv6d>C*9S}c={PKC{=+v;`9NXBZK4d;h*&- zAneXciv!jkOLzo3P1GML*M_t#{Cj71eMjNG6#8NhmsyhfPCcbwLd%jQp)CVNWG!Oq zhutrRAnN6XP|7z67G;@vN6hVnM5nYlVu#)X2d_jgTZv~cSb6q|?No$ggN^W30uWD4XZ~Fa_rPs69o^hqur->u}`*Y8le*&dTs`hIp zL5;$JBc~i;1sd(muZIYpBasPHwx4^W&Rdhr#&Qon&%=u!d(Zhjdt+u)@_k@4uu`oY zI8G~jGgrsbd@GOCK*^zo<&Ptd zh~Tbw;;S7F>lxY9%)@^^meQU*LD@l@&vfkep1>4@Y)dRFCbzzS;E}XotNU&b1mto& zzkHFe1!riPqie!DjSL5x%-e&4a%CsF5#dK6-=g6OZh~(vX$bSU%mW^-^iydNbQ5+t zVdb-s5$m?KSZe4!LE?Ya&ev3o(I1iQu^=k zcl>l6tI!5SVPEp>KuTcymbk6UKW=I7h43k7J;+j3j@)GvA54_)sxa{C_;u7EFYd@Z zH42*@SPR0pkkJS+M;3^`QV=!6UQF4JR|$DwnZ7H2ajk}U%5~V&Av}aQQPM*)G6t|Qp<{OrUy!TWWWRA1u@tm4xBq#npP z>!3ka?bJz>V#VYj@Edm(q;}lAwwC-a3_nUx>#N;$P}ZYQ4r?;pjC6!ihRfBazyM%3 z@x*BxON=8CS{Qa{@WZENVb|xC6JlfD+id#zqf?hac~HM_F<4hgJ*ULF4*a#8r2s;# zwT=H+g%st|C^W&$FYN7~L~U0zAg%bY%#F8w1l*RlabvM|$wXxmFyD{**_3od`V`KCBDJNIxsqn+P8Hia{Chvd3g#QKq z4~M>F@!2RW0PsasMic1J>rUskk?1-fSDI*Ogbk+K94hler$pL<&L8&$js6}$T`bQn ziSWywt=?{T-0t7(d}%4K1M9+z#Xs7?t8V|&-ueaBUGvk&`z+oSW^0*`R<@%G<6f1b zUhN{Im|q|OA?#1d1w6DnM$=(Q&=@ppX)>pGg^X?ctZDG!fqh+nK$|>`=HuTtu^YpB zOR*3IMqRNH6R)-Qec6jEMLSZYFjs;mI4%fWB^p2EZmBo_>;)V#1_Z ztBz2nK?(=-^EMThIyjA(xbh)-=emvE_68q&*xJR&KPy`}dKaDiu0!*O)T?#c+pQ{J z-v*=UX}6|-WU3E%M2W_COX6l;@CIr`c@M?3yGv&|M}*h?A92M<9{2g61>GsTim zfLYP4&eo6@d~fCPtSpuHxlurNDZ3kO6M&Ufwe-mqJ86dAR7f8Te7E3jjs1Iaf%_-< z%2@_?H~Ze&uX1~uJYxolcdxHs*|Gig4o!LDY|=`;vC&deob<$k3Y4!IHh4#dP!2|{ zbBfLNz8$7LUS#x46e^%VU z2&$xMJI@|vwai*k3l;@8D}AIG5}(cR!OYg4kKcBY(Cb^rfcNPfF=bxTvzVcRA8+`g z?b7($WHyzF>-wL+%Px0~%s+L#L#&8W3H@SIq^Mdfw$5uEi)s^BvIU8BPubZqdl7Ra zULQ3a9*Ubk!eG!(5*4x^i`W7Vf&e?u(p zN=667!J*F|ynhoXtTmplpP8@y$bbF1I~Uia?Ao8}#2Rv1GvZuGn^Q#pktWZ$VamU9WiqaKdX9(8DBt!iP zoH4`@j}`afY5L%ozj_~WXepr{Mp$C$2EB}6Uu{!k`u&8a9tD+TK<$xELRqei16o=D}If((|3G}hI^!qV}^s5pqQ9CjLoBv z7q8W_VqN2Ox6aP6JUG2lYr?zfPFOV#JTgdjxy;6t-uUEFI=`^Xt_Id=#TQi=X+U-E-*{Fp~K+yT&$%}+) zEhS|0B%g=E*KEUKi zw333SW_dDa`2CRmz$FU{(_I<{WeF01xD5I>7-7)YEmUu^-D~IFWOk|GT{C~+_b;Ft z<^6>gMo)qa+V~^M6hV=A*@o%s-#%ucqwVg56BZDzwFd%!WvK{8r6RF-9?B&9qtDHI z0GGP76g*`@q9B*4M#P;TxJynjN)94aLb=vO_74VmdU~E7mTWiol*hbf;S|x2q0=P# zb61+HNWnl#jMF+q6a4gk6+D9wwh!;VdohPbw3^ZL-hRkO2{t z@Atr$o}hviwvhs!Hxo@XZJ(PVoFLI;w6QCO14jDOT|jZ?hnV+u-1GG2i=oz zXRLj``!UL4`fo@``urn|?heLQz4;cVfi(~(MhWZCDT0(p{!}yQ_jpJY-O(gYW{gi7 z463KqI@zZzNw$v3ndQKg6ZQ*z=EoQF^s6bU;@@Ezqi)QXrG4sTx-1NHB)GX!9e#Yx0?Jf{_r7EZ2h#^S zgX@Y%LCKfUmiR{7IE#3_?zZ_;u@XZ~@?rhQl|GwKx7RP~q`AMZiMfXkvhrb0~ zZSwgnxVPTk0EQ0F%da2xBCoCLOx~;JZ<{#7-xD&tEn`;L3&gV6zzX%anI0A{TXCZj zjw_iX(h16^OlCEze}0|#7F|Iz}eX);1#X;vJ> z#@P^~rT?e-qto2dV({6Dg|joTVwiMya=i|S?Ua-hM4Z@@6NGLjW8`aqIM}4`{6hxX zoZ|V@l(Cx`eo&06H7Rx^CSMt5&Aa;M=R&!-2rvV0Yibh4P9-2p3|C^cWp8GpLSGpo zI`McfYgTm%_(Lk;zE+ctN!M7B5>4@o@1+g9pR|_(S~V%m7k8{}ks*Nbbr8@FSDju; zlk_iq>h=r>z1)-yJ$*On6UgecSKp$@WXt0#YHaH~Mh>N?#+NwGo0_jrr0F?1+mb3n zdn(6K9WNrOr?%_vutw@^PZSj)qq?ye!ielC%f`0Wv(dy5Mr*=vR+wui(WxhOF|4Sr zk!RL@j6^nS1qnojvYsvF>1nGd|HFKx=B4xTY&#ApeQCP>=i*3m+^V0yKR*ne;#IHz zs8K^7&O57BV^TsW^S3}XQV4}ez$qc9`;o@Z;(zlCmo4)Q@2C5i@!?j0fdSC-y-j3( zEIk%jAD%hoq|*}DePd{2hLte0tTEx9G(_ES^a~9tKI07ec-Z%XdL#_57Tk zWy~iaT?fHH0xm@<6B@_|)Fp*f=!hDz*Pj|GoQ8VH})YM&_PR`_NNLZbEIJ4%~ zVGjd{NfAjPOlS zAi&IRi9{~BsSj39?$3fDGXtfa*H{(8xrq)!V915bd1z3gzS2S5W) z5x)(@Gy`d^?qWq&cCO__@?m&Rlhz+RTnSJQzOj<>^c7D`9HY(7>mBREji$PQEvzIu zVi18#5uj^I5uqAiSXl7nBZMe;B&b;~R!+6Q4iXpARm+LNp!5cbOSoN;g+22?wfFBZ zQ-7;DSCO~aGAw=bWIeX!-f(@zo#l_eE8aQfL}sN8zXm;s!hi6E9guY#?3Ts|y7@+3 z3u!XR8Es=Tisxx@oRI6kQK7kBYQkDL#h1RWFavJnFNC(55&^tOi@F!wbH??Yj7wQa zB&GyIKnT8zD^gvRL#L#VuU0Hw=PX4h-~NjV^?4SDq6L=Om`2&PnGlb7c5$$kWo|7& zz9XL0-+@$zM3ueTej8yEa?deoH|T0 zoS3$owFb=>7y4Qgn%I3?!jQbY3|l~Z{M(~-ZmHeCQzL4Coze~&^G1xBc{;pCjDd-u z%aYKcr{egddw0?|G+qIzbCecu|cFV_q)b3=Y zXBbtWhBDAJQQg2lkPwy0%j#qVi~bNI_su;lUc0g3%LBQMz9Fz4xuso&>sp3gvE9_~ zApbf|_=7|;O-&k}+>_&j7xA9(1nrSp%F4IP zi*FoiEcX#x8qkP-MxyaQL+?M-y4w|cI||^9MykGMFZl9c`>8>(>TI=|AzAl{wT%+# z5TMt@oRrWJw+5R&lUM0|ZE;TdVS{muSrR$5la4UEZ>o?&mF`YsAW~F!!J@~jxAAi{ zP0*qp$T+oM1tGotBYPmyHQndQp1Kly}}z$i<>v zAPUNqQC4?-^Dq;<+-vu;gd({wa#iZCE+>*|kClvrtGTJE9Q!Z0!vyx;&X&VG9xEv=N~9Y%hqqHAy}SnKTVb}Y#;@cYWUmutpRk$}i#UInNTwic%ES4w zu~#8P6?7>0bbb&QcmqkBrGWkM;daJq@P|hd+3vy`Zetx!-4~JerG*^~6+&>n|@1v{a|gW2p!bU=^Y2 z7<9Tmm9T_<#lvDI*y7@%nW+mzs5r#;^zi=D#X6uxeDmx_L;Lk&$JxDGy)BoTn^%2R zR~YFo3t{U<4V)mhtx5_rBPynC6H(lKdGzC7mCTT&arN%@)VRgb)uS6zvrEk)n&Wc? zDbM}EI}uG{p9xtNEYGk@7g*WWW)`=K_KN~GzfZe$vSIFgUxyzLY=#t0Whd|W)g5UE zXC8byy0bM-*ulGXCI4c7X4&1NK@)Q3LfgG8AX}|F33}%W9Qz!5D zAqh7W5kKxXs|HVFjc}`;tT;eEWGM{JQ9gY1)^S`pti+H4tU2=7^6v~M%B-rnIE6O+ ze+NpeyG=d+byLXx(r_StQ@H#6u@%}OW~g2tC9E$*^tz^+voZl^gJ$kri17&t9)5mr zfH;>^0q}%wF8FrbUhl`EVQ1gJjeBdr%k$k|*}sfM4;$u=pI#ANd;)6`dHJL^dgkhW zHHh+BCU2Vcyu0ESMv7$XhSGwW!(XHgi&qt&=Lai#%f4|~9+0yOM6TLGBie@nF5gX> z?6oKJiDu+=$Wr6J4K7+=O>c5VR_0m5=Zx#UMsrtfz2<+x$O%XWg<7({j5-8&Fs?0g zd(zN>bro23(K3@zChv*ps|BrouH)u&+RBYVsFG=y*nJhzgj*L{>ZoTxc3%e`ce&q8 zO<+KGAEA_#=%hp#hL@BgkgBCmj3;Xise-io^*Hw(0!Xb|I(n~^(>HD%D3S?oE4}`$ zJz7aAMZ`~;z>lnBr(_!XWx;)fTQ&`Fl~0q3I=skxmW~aE;t(aC&Tp;{enL zk?BA_Q49f00vEQflY;x^t$qi;wze?ahp}nHm+hedn-a(|#f{S4K=cFa)-C9dX+Z_9g zWgTx;61MPIy?2HHw!M?CQPeXbKGD6Laz8jwX2B( zz5&EzH-RP4Ahh^d%6A8?e@`DWLCzG@AxVrHod&v-L6k;J23=kKy$30HwGZw4FCURp zM)>+lwk!Ht|&qPUQh&_W7cVwyq5XyDu^eRK3T>cQ;7?yi_-@V(;Q z+nS|o751Cs#M`sP8^48vCo2mB_u%gZYU+WBpq=n~x+qBEcT4xcvE8fGtmTWt!*@$( zeRJ9k_wH>Awx2cRm%+$E1O$v-hGs^kV@RWn=6UJ%#{KopGVMl>(o^kY zGr?U_8c5(atff-_qd=)(?ov}|GtlN65Yecv0k>N}O|_z0Rz0Nn5*9*vJ{1W%EWp?B+itY_@x)NQl%fu{VT4yJnJ8_%c17G{R6_Iie1vLAsEb; zxn0<>;PrLLEszyPnQUDowIq%2x}5^)v)fqqYpLHdMb9WSqQaZFX) zyP8`J2GlVW|;K4cs-U z!Mpv3c}At}o<2u$38!F=U~PIShC$WAB&^3lun9%(hiEr5CaaWEq+VH1K;W$OI3o4dR*QfEg%>K zCUm~;*=` z2BIHLN~>#2=oM5)ag7>-1hZ>gog_>$h zr`oyC4$LZIOY%Z4{)~AZZogLeQ=IL!yk@_s(PppQ6ViIak6RU9V^ruz0J(MeaW6i0 z_2BH^pK;vubbFnC5(I#VF(&g)%(6^5vN3^bNIh6;ml@Mf!$;+i=nNYd>v0295y3)I z$h?R^;jfuxm#uC*WAybNI$X^a8b-+ZHJQ$G2-@fObD=%x{Of)*_t~@9rMv|~~_TOyZAD#N(ChvAmS(Uo?G^*!l)mEb!`>IQ>L)=nXI%= zNsAy#5jKXsd|~qzvd#Zx-D{8>?hng|o--ij(1Kg$OVC6c;;yY8>r){jT~sxZ1jURX zOF0;2^a7Fqgl!cO741mIx1mhbzn5E7HG~@%m#~&PuBDR`MOB`kF~VSdkVq?ticrsenMks#In{)c$|WFnCgZWG9HSr&OgV18;LtWa`UBTeU32la+P zc5{yO8#8+j+CP0T8pUU03RJ4@MV1N{AM$WZ4Jp4i$>{hwsm%J*Tpa5XrSA}Yg) zPSh@&%S_tixR3B9Yz@>{*2=jj0S82_3Xx*3`-l5aoPza~OyEfkW)M=Xk zcWTvtu-m9IwMGYhes+&PXi=CmmvO+~8}H?qkn}WogOK{~*$eloKz$Ki8u&T}^W>uy z+=<^8yX_3XayWA^Uh63H-t1tiihWUVrC|l$?t=|lxY=@0wUgj&-BhcI*Mr#)dCN@7 zc-AQL$(sE3hqdr~ob;y1tF1t|U16oMscFdo2b0YHP)&hjcvJ9iokMqoLlviY8 z&@ES@1Jy;}Gpk{?X(GGk%KKzCG~O}np4U6A8|%kCa2Ov_sm6rl0=k~?YqOBMxCeU# zoMD4j!kEtNO$z&WYe#BGkb=EW1)AgNvCFC{om)d1Cdo_o<4Ny5i>vhy`@F_EYClHx z*Mf5zw`V{0{ttsg!*x)LO&NRE;;?xc#FN{8yrxU#<|T4ct(0bp&aSeRDdB|`(rk0U zbP42+=oAG}$;r^LOiCjEviD&bY8p8#e1%X>VLf6FVZu5;6Cu&`tF^Ji$jGHfGC-l7 zs)ww&a~COAVL`6!5D{rfI<^+X@Nh%hkr>D>bC5h8m0y?SN2k-1$}_$%G@LXbxEgO5 z9d`pqBLa}>u-C>r9(%2?E-`ef(|tJr4ki<@j1d&C$a| z-0JQw7VcJ6`HVV&h@QTn0Fu8B#%G2a$!%E^CWoQJeH(m%qM;koC(eP+3BLMz{*# zf8y5r*hO_Av#|I~MJ$=muIJ}z@DOtbbr*wE*XP-uKUWfw%qJ4I#YH^j&c z*!7GYOmnra^)({rdiK>@?8?cFV`oacYh zpUuo=FFwd#cjR8_gL@2KM=#pKs)`(|L5M^9n^xQ~LdC~d z-}?txzcJ)WwJXV?ZgFvbkxoTVj*HIVFVAyGmbfE9bhK%e-@#67`+lV3=H=DYhl-A? zf!ou8VcGk*Piji}-BulDRlpZq@xME&4{poLM`iaDWy$P`pJUZo-+i!1J=|=yR_xLH zQ3w~1nZC_i-0a8`{aY70;QZ@=YVcc=m}hW5BbpFrT-=uHa5U+5w<>P9<8_GlO55h9 zC6W7qp!W&UMHTunS<493B1io2?XUj>WkH(0Hx~L2j?Kx^Po_u9l0QnU|=!p*DD1}DTNTE zmT??Y4k;yV&0Q1BELs=k)s^XUp;sT2(PoPz?Q(x@&7%b6bjBaVurp$t|NfPMU1kQ3 zKA2loMZxE97J9V9J(m5|lIQmzC-QuC=~+MFmH3hw0deoSV&;^RL0hWrbGQebp_=Dz z#>rxSK7#4HucbpW6X;H?nER#c2hR{=>~iYjdw<%rPdt_3uRi?ir{DRVkTyB@A{SzIVGT5TgZ;L|}j!uUzZ2j18QxgaxfQ_e=nQm52=Hwh|)h z4D$v6XdYU=bTtS)7)Va?vtI>O1%vY;gjaqk7@`=EC`_VN=e`J|R_Rr3F~){4lxZBN7~?n&(=>@12_Rxbj;b6u1d1F$ zZPLabolfp~Qj?~|Urf|grq)Vr{s42FS>s-rm z(}yzc{^pa9zx?83(UD1~@vvPbunLMGtu_lO_ua}pg~KFMRZf`utBbzBxVY*rFD9Vf zVXV7hovco~R(FTto24`}RQ2Ysp)-h5W{%n<=PU;AJ$-Vxdm&oUK&*w3#Dpkvj47`G z!+Lv_Q~Kg#YvovL4QAHL-HU=vHk->x(64$9-6YnuVF&?ew$Gg!KEAOrPypZ%m|0BE zyF&;H(hi3MQMg!bQ^;n@k#6s9YMTIK%xi=gLPR3P5lom_s}9FwpZWUH#czJ++n;>= zvk(HJocKA~#q79f6#)h?e(-XiY20|0tqTTX&N4CtpThw~L|sN}%&bX6#7N}RZmqRa ziXu3=kx$4{W^S!4^D~FTez)6&5H7ZtmzS6O{r=+OqU*Y6&z`l`a_*R-h*YuGjDcbZ z7})v$t(H|6r)i1_x-N)L|NFoGH_W)ZyXm@&s%mn5xgE!{lmr3(;m47jI{}u#rq){D z_h(?Kd%eob?%76mdXxEb{I%>Ne$^Vb7!vrPks7%BQ3-7-6Cz4&%>bKt^qm>LF}HGA z{mXfN{R>|8M!QVXX6FNk#Xd1Bo%pZf;z*9;JB0dPDR2SOqzJq+) z2+#kzcX7bE1LPHHeEF~nz(mN5%s>Q0aH`do?U}beJXsaN^){RrTx&i>h;vCXXFiLF zSQFz8vzNtv-=`1_0gVEYf-D0$3Kmk#ImH-9aY5G*k($?$I>WyK(0|daNzi<`{c&X` z2F`94Q$-lZskMeozOiABP2U`svy6VayS>SziE5ED)d{ibT!$*&$7=%s@f>#|3SM42 z*YDL|F`LvEWcYbDo<~leM|>|?DzL;2o(6>HUL~IV%{Irp&*>=mh5-cES{cF3-E+vL znt-&bfr*0=2P11zc6WQWF@!Wt2j91MUDp&m>>z}+RMK7!Au0gGm_0nq+dfX7nx?7W z^pW_){u4wp6BF@qO-ITEBqAU%25NKD(lvWJZ9#QutN7gQY%f$`j>rAbf|Vv5Gf)^x z`TWagiXAGTnh~N9AxC62{{hNwawk~YL5XK7rJV$F!oUP$0cKVJnGu3M0$|eAHK)^l zh86<^o)*%{NCtSuYd?R0%vX_+=DTS&6QS8Kl^7$QG8W+U1%!d4F$edbAV5>AQ^`4V zL{KdvvOl!D-5f$bwvf|tn(pp)PoKU^w_z%Ev%Pf0_&83rRz*xHb?bGKHC<8_E&iuT z^(ihB5!q}uen*38tCay0(~B>k9S(=@{-X~zn=Mc>B{Q%lWg4ex06^r(F;&radSQ|3 zvR!wAjo&OGgjVYQIEK)g6fjVP+JuM{idxGd^f3@3faW;6gvCtNbJ2AylLHpTa4fZ! zW=N%!-EQ~d#fx{|dBYTHqZJrhf1Rw{%8v-%R&t!+N(|WyH_gyP> z7={?*_TmDWn1YBfMWUc;B7)#$5C>S9*tC-ZBSA~7j0Zx=vHbMo|M1zTKb1BG(u80p zIgx2?tr2lZkpm*d3NRHzqS$TM{ia`URu|X(dc_>8nToBiE=V|lg(O!Ok5u)=ix&VW zRWYjJJbG@1$HNd4Gl8|bU9X;f@zY@#LI^347!+w3jDTXy(u@P=_4=K+pALt+yTe_R zf?&1OyIW9^?dFQj-6*O=$RJ>)P28HE>YRmI7D6bc0L|CVH{Bk5DAvZ|xXSCz<|1-J zYB}o{U;dPtMX>MJHfQ3X0V1Z9U zTx_l`x8pc;U2e5rY}fzp&;JaORkiE7riRY?WR5WgCKGL~buqP4)~od1yH9`c$A9$f z`R7uH!*0ka!~o+owIXba2CKfGBOrc>q>f*gH+sne0DuLUu;1?whr@$1`n)VS91csH zIHlyP?Uw?)`+G34eEmw=*ygO@CB=}5VvLg-Gn+K#s7Or(UW*}oopbV_(t49%d>>-s zomMYi=iB?W0{Znlxy2}Q9@l)Tp5Xx+{M`Jir~f7*dy`Fesi~Y*qG$1Gi@j%YdMsHF z_XVYyZ@p&Tcld47{4v{Fd zlM>&gH6=nMI&EdOIh^}JbLK&+%YzN@Iju9?|e>yHzlsfn17N?~L*jt1*h^yFtbl{P0J`u!P}Q$DC~OGISRq3;K~ z{XD>2$@w0VL{gY9)+-w=B3CgUG!WEG)B=(&&>qkL1fX5lr8s-dLtx_AnwHigApkYC zHceTr?=r{iF6WT)>`GS)0jWu8wQ3pn2e9Y+!`*&2_(i#WxkJRqj~`!NUOjo7LI|ob z48t@{hCm`d1u<`sOD#o-XtUW|Zr4Bl@sAPg> z=s(m>Xs9G;p@k$Agoa9;U8Pb>=o)g0i9tq?KH2!*9nLvg+-K%SXD~7&I}#;`ivU5= zEzImqXZXI~_ay+#W|L|rt~XD1u5#brh(s-FH4t^wU&--KKBUOZ&UsbMMa@JJskc8SfN3AI-K|Ww%d_cnii@*(2rlPbN=73N-XvFy-RR>oizzP7&O_s~=FK+MJ&=}R zv%0pTKICR{-iCHC+s9bIh{$=WE5X|69hLn@3R#7g)Nj%;l?*xOrlBhGY=WE5{pT;E zca0f%*T$@bf?$TJ;$l@Y85b+_%WgXDQXcAqQbCXrvV_nkA!ard&ExSEu+trsn34h_ zN~J(q4L^Wl3PyG5Bp`_B0RXDn7MVj8LzhwrjR|}=sm$8(18NqvdIxikaxO6rRi@vz zZQbhlHiXa;SR4Fy-(Nm@bhez|t+&l=(llMyHJ-TSsFDc;i5kzV)$Ol;^|#kIug$XL zVKNP9y5Db^uxpxOALsLV?1wtja{wUkhiq9FsDRK-sM3+YX&4;@uFv_lEQh%jI{e9qgN_LB9Fi`5Hb!uZsel1H zH}X8Wh*glYs4mWy|LH&d&;G~%_P?o@`sgl_H)M{-yxCfJjy&muhT$|<3=oer?otXF z9Yr1Wrd&JA<74$+J}X)`12se;=PYLA+(`B%RyD->Xa}MyW-^uf;f0xr>A`e-$waqC0qT2I`kC~1snsfv!1vJ$Ezs?Iy>tCvz#tBJn;Uh4$+w2ZFlAw-SLJr=bUo{pp{^wZyFf^fRRcmz6n)k+O};`sbp?b^GtQ0z|7fH z&2DdR&(1E`2*}tG7(3uf^;QM%eatzf*tT8HLzU2+IyCAETSQ)edDV4Y-7PXR=t!&w z&=Qk(PDG~D$uJC_(FBPZ5bDRN%53MHV|EUF6LK06f5p^9Rdq~iL^zogn22rGt7$h; zi79K_%{QCPPd@za5DRgaO-&5gfKXJ25&Hm*cXgKIh`X*MgBYW|!TT{)sfZwQT=bai zSqISo0PI641!};J3w7^TNBzCAN6|2v6G3gwS zaS~F@kbq4UvKo^gVgyiTzuImYsck~er7A$o%vC>DE{asLx)6$5+f7BRxJgMUn~}m+{>3QbL>kgldkQ$4x|9U7himFd3kwt zbBFAtTrXzJ5Q3IoOZMIkeMWMj?b_L*SlR9Oec!ijTltFovgCCn&1u==GRI-g+ zo#MSG#FF!A^wQyhLd-nga~vPpcV2(KG z@gZJsc%mV=k`+xWK=YVHQFnLy{eC*_nx=^{65%ims&;X48GJkR8yEQH7q5n4h%ud= zKTD~gYwFLsfHid>xF+rTY0HiGFFyZl81@Ior2sSe5ZVR{0YS-!tv*EI&T&M*G@{ zX8QLOEA#bX+TWs;^J`wGf~Tq<1d)IV5moA3lMRU3lZh!JdjNc}VgDN0_uE{#H{Yi{ zI7YSRI0axGr@UX8BK}*B-cR4{*FaZJ^%xHbiK8a?AcH;~4jq-y$11!&W2(gpP9hJF z_=v;5se^4HCTc=m**3}mz{U4{U&$T^nyIfpD@p3c|M;$m?|~KLXM}r^+3A<|2AAWo zFFl|DMyF;fSr0}I1)$&j-P%!d6H69}i?;3i9-Fx#qY5FR5uhUQaaMZjyFHyNeITuUB+G4nQ9$#_I(`1qmD|cosuCj z0iRzy`Q)RY7f>@`=9m*0I!6a?+r7cON`2<@`D`}px-Q0eeSLj>eQjnwa6b$e7Z+^} zTqvOpt_@8og&2vr(%CAf8IZTSy^#O_AOJ~3K~%F8CJ$rMxdIc4jY5&SK(m^+P-2Xw zs2NVD^X+=oIGapnU%c2Y7H6@PN7MOc5Cal0Fhwn>NGN6+T;Z4a2l(5%$Tfc7a{`Y%p)NI5fgaE-FDqH zq4l8)0Rm>RVW@j5C}LHvHl$)EjtnsqQ7$5-n3*_-h*>~YCbRjGT3u=7V1$TFWBHhK z5lMTf(bM|k<#Pa-PN&SgTrQiYY1?)-n@LWeefC+?G~4agd;j?HqY~4L7cZFk?9nB% zGi2X{ltt1erR`^*eYD$bUDJ{Gx2rob4lOrLGo4PWrKf2cRjsVdsu$|IZn<1eCX?&y z>#pm(Z?11{eA`vfcl{K|-Z#N{jzjXHQPtgcmo1VDMr3A1O%0qQJkXiE_g&N0d9#S1 zn)f`JOiIxqr-Me|UL-*5h@ePXt)llnrhdqUnQm`yneo*ZFWR=9Po~a$01F|Ap&_V3 z9iiVd6HkOa2Ya!WQYx^lP9;(*DJ3v!x^^;|q36|p_aFU-|Ni5P^UY@U^2O&()6~WN zWHNKk<)p!R(%d>S1S0K+tuyK4?bY3@-S!%+cO(SK5om=4DumFmYt66#fNNsP*@)Zo z?|lDPO}=dqM$&%XQe zi%&fBaz0OeVTUTY-*21>cT;8-gHlTH?p{ocqX6$HjU#k*4|YH)!0pXl&K2J-OMVwoM=||&rpVu($l(|=eB8@duv(QUoz5DMgr+)QJeD2x z%KVnfS^Ua2;$2lP;y1N6(l>gaqN6N{IzVS1Ugbr4$DyfUyW7A1yCmZ>Bs| zGTiqe2kaWsL+8`6z`B=5pJ;53lk5kh#KY&UkuhKuj|9MP)@rq-b-)Kz#aE}7pF&*@ zN>+SO?HzxO^BATYTWeso`V>S%O326l*<7@BDnY1HK!z0p8w zt(fosWc0UPYuI5;=aG-m*#*9!NV5KPUii=zk7) zQp1P97Oaz0aEN5JP02auI5bVe6;O>>)VAww&beutJ`Uqo%2cry0llXd(r|I{h{&O_ z56p~^>p35H5P%Ht3j=PK?L9km>hv=kKBA7#!4c&UQd;0D#pE2ZAD)nwqMBfYo<(Oh!UP6RkW7GXqgmtCLYMd;sA&AZ+PD z0G6r(sy8}0)@G`vmQ7mkQLW@$eXm(nM41TL2^bModMpu(LCj^W8vsj@m%@hGsDu??GJ9dN&0H!jTF813EGXmfc<8Hqny|yNs&F1`UQCp6b(xh$8 z?7QFn?hilsaF=>On$6B+NNgqN&GY9!_uf12L(^^gA!o65Zo8%*;(R`DLz7YpAuN~6 zI1IP9w~NJWHk({uUw``Pr7om5*T9gXDzI}R zISu`+ahCNje)g|ly!_O8t|$^fop$YPGPMq+M3UMQT(kHxq{h6%{Bog%lYH4D|4jrK&O} zs>spcxl;KS%k$7p0)<@mv)SbK_BN%$+%bD1Zva&{guvB@B$63{z!tN~rypG(!WNhu zmjctptoGQeA=9px)(6(x=Hoy@usU{+(q(!Pu zi~*Ty^KU*lAsB{X*zM2G&KyA+_BHUOYn!%f*0(oc()ngSX#mtQcgw}q&1)3#4Co>5 z_J8x&A893&gA!WhTpywl5Kclt4whB|`+E%o{}#y=4<66Qe)mCTR*zOKR!;xq)Iaz8 zV{3d{)9Byf-&f$;xIqySFhZ(Gb^s_vka^rq6N$;&%#E*kWh8vpCw==j_l3~|2irU9 z@(0J|NCi;6De;iOKjZ}r%)9TmM}l+xkE zE2UK5F##jsq-n7#K>T7OC;&7#g@6(f9Qwf1 zk6&Gyr)}Hulhz)1*Z0*xiND2pbw80B=@5j@egFI441Kx&VxVpM>&dp{sQ)Kq4P^_3K zFe=!tANH%;C-V^6&T?kg#_m+_zyInPRg`*jeSpUqClLqe_3_ww z?~k!T$7D(oA@-+V-JyWvHwTZaUcw zy{ej$nMsn8a~phcL`ccBZChp<;@*IWea&vKcya*nRC~RgQZ6}mT{{f@L8YxBgfCxS z&nDf|$Ct!#codAcQ0E*oR@}b&Fq^bT8&V&06=o0-XgOXrK(3VH2VaT;AsCrsNBHu^ zi;q6~sL1g2+2zL{|2pNNX@ZsnT0nGrcTJk-onsfi{POeHUw)M0#?0C#AgZKX%!2pM zcYs_nWC0@Q!(`r0+u2z=d$fyLv{A!iC?Z6nK&2?7Gs4|^gUE)Z4XyUQbGljGp3OSb z_?_=usto)6b~2g7y&!Ta>H-tdd@`L*r~6)})aQ_&@!NfAR727v9kizW4s!?K-7?+O+HKt_=-UMm=Or1E6u}LI_|qHm)9- zxRjBJS=-3!{K?sJ&V;sFt%w|gPbr02NHJZ^&R)FyMF>H}5r)QjWmZ(NLWm}UP-#li zb^#IBw|8dhz0*3_GHlyP)!J1@Y2Wv1W&$$CRvr|FVS%F+R)^jiA>R&rm>P^jA+^hU)5z$Y_+?aHjVfg z`#oW~x%v_ugRCSlU$)-T(1He0%?_XK^JfvRW z{U09d-xH_p!*cdCxcl@CpAyp!r8FHC2=|#)1Xg?3`-1zO2k`;Yu4%Q zeb70sy<;h5==XJpzT0d>B>2`8>sbWIHHJ_`f_Kh&9dl<%1vcy5WHO7ZH8Zc)w-=9Q zLS%}$q@xfBP;0JG4HIA<&${h)Q!yRR5vZX_&N+D3G|gf@n{|`a4?x`ShmrW&~nl!b4yiBG$F0iApXe>WHg$Wzu>pedlT7C(l3L%)79{P;%s4I1*%o z<4GF`sUHR+Kr#a{eM1xFeRH_X0nqAf8&uAgiv>>+sfcX%eI?-x!;o?&z%gD&4H55d z?=CMdL)%^5+!X@b57$?lK-fTHO#QGcB{|;_b1sF*G4qJ1WA7Vg=HM6rauvbH7>5DT z+BWR=nM@J$mciz%8^TiA#mLSVuo*`%;TB8P~~-qQq1Uf-<{^wGt68~lE^ z_KXDj-m|CueiPU&X5CG&pZ)ot5rcD>^U#I{2{b1Kah?%T#fpdlg86o`T%14Yre{nI zyJoZ71Go?-V_b*<5oXD$-%cho2Ju8Wl~Rfmlaf&EtaZEf>u1l-I*X6~_d*A!w^Uv42-PwF55WC2Y#l>0Q_roxl8GEeq214&# zP%EMmV-$s$)CkE)5h?@_0P7ObY_!PR{r$Y&S@bx}s+{_oTd!^2*5yr_C zfq_{y^nmET-@bnJ#pUJ2v};WSP2j);yt%ol(59~IOo|IW=kor0kB4E{?b4@Te184< zr9nZ^)`$8WM-v1G!HouuWxy_Co)-N%i>8;O7q+0yq} z&}KzMB#&4LDJk#nwoFts*XFJ3y7_#*SS*}#1O{Mf-*3}uzu%i#JDt=lkdq479(=22 zMsPom#FOMaJekg(jH0VB##A+@5@SBL0r+mcI}wd?`oo1&Q@8a1Y(|eTZv7BJ0kLu< z0P$_L`f2y_@FaPs7);+zrmSL>(<$bW3w|J4p2%#F>O|i$6Cxm1C;Rc8tX3=UhNfxi zp&y1+Oihn3WjUuJKsIsCZ&o*LJIU9@`Mg@Ky6FWPG4XLBejMJ{@$fOdd_JE)e*Cx+ z5~kgRKzF;{(C?`UHJ9rsL>AL5R`UTwYd6XwDpHjXcpUW|Ex8X2n#3S+7d(bQj@@h) zZf{mkpL~DXxU5bItD1p~9UuazmU`34227tf>Sj`>Y2j4jWODXrm5Qmt`X4-bnISPIxor9Vvhfqq9 zT*mOjahXF{!+Io-IIYowOlB5i4*<2gt$_|i%nrIq(>S;7`;v1SA~F%WieAY%PrGT1 z1FB8uv**u0{oxNkAP&QB@0*DN_4`BsB)Ly(ExC?eNAE8&GO5{qzen~ZrM~YQ@6ON9 zCzDBx@$T+!GMN}a-}gXVO7X5Bq7Q5^KI6d56coXbeAlI1R;$%^x2tD`g6;a)O`5t= zQvfoo41|(X>u9&z#TeV^#CwO{15qrRQarG6N-07JjO0CcO;Z`?^){Jv{^G?8W}eMv zhhzXsSxPDFa5|YGVlFWcQNf6?aU7T&f-%#7cr2ySj}RLd`a z^>?pdzF3}3ax!MpTq@BT>lo%(-va}J8XiT$&Ut2r;cKVS-*l?__f=k3^>dv-A4fG~ zM(a4BdSg=`LdZGSW$w`v(=^SyZ~?!w#qhTt+kZQ4%)6~xBvRW|GayA`FjcFW%C+|> zs${lYE<*?^!`oxRcOmdGSvn zpXwIslOEL$!EdIjRKqC_*6-6%_c4Ix)Sq{(#sHv(cpt0PsyV)|q)&n{B#W7mK`A94 zs6!$$^r;L{hC+ubpNOLC^RCw+RnA>itqpNs?epzy8fFvUHf`G?jT2%6tKl8@e7Eu8 zLulr`uSMGf=-#NeEVI+6Jfr~;!b=q3#JuoVP(W=n- zsL-t~&3?ZZ!(tkXcu)H{)cXU7_We$^-0jvWtHW8@4;^URw)MQtIp5vgP1Uve zC*WMw&`ag#q?8bG65K!h>7V=u|M=gN61D9A>;LMX{m=i)pXJi_(Xluo5HPjkux3NE zfac1SRIR|g`Z}kc?BhbV4xB6GqzWV4p?R$6kYj^-UpF7n-KHoCr;Vr)ACr^-?8IZ> z06-5rQw1(@rBu`8=d)SUG?U51ImgbQ zot8Bf4#0;k<1=UgGJ zT^m%g9s=Pi&_lJ{tv40khwMtu+x2GT9U0+a%>oB3{}@nTlJm4!EDXq)Q;{JhRjuuC zU2YfwF#@27?DyN7o2xoQzrDS_x_VW8v}Q)k)m%$NjdRY^dcCeXd&e|wyEgcGyW0=@ zoU=*+07B=O5e-zj&{RZvjKh5l)ZuaP?D3O}NAth?`4?7lEU8G59G`!Bb$fTc+iV=E zcgUoUMav${m>VLWlMNBu$=UhYqw|X=zG=aEMe0R{yfcP&;^WQE`*s-CAAS6be%K&N zPI0xqe*fu{^YioI{Exoht!`5(1(6ZFbBho{ikq0%AAj`eez$q`<<0ZYUdPCBDEncr zyTT4@Ud<1G@Z-*hi^Y7uUZ;Lf03e2dp>4D6)hG)vHHJ+VSa0^kez80UWB{6WvwpWX zU?eXP6@)?S&6UtqoS^^?vlt#A+Kr<46AozmX$ zFn1d<+5u+j?qL2Kup_i z(zfmG?JWR=5JKD4jMDjX@%;IxFTeO)Bu%H?ZntraCB?=!W&kw-Vnkn2yy~LTK+Bgdva($ zPk->flhJYXOQ#YJKskzfwVu8YCaU@y^}8o_y6Oi!RK`~0tm{I#oJQgSKy5b-qy{2B zXdaG9=0^>*NDaFldDx7Hj=xCGxn_^WeP0d5pq8`bm>LR26&0N)1}-VBZc^$8a)BL| zQmW?6@*esDMC!ckcd43ccDvC>K*nd`W%K>B#Buc zvj94e$UsP7jwmqsz_eYj2pA8P@ngAsY~y$PKBcr;t%#^;nwnRvAZC6(u{Nnyiz93r=Ml2A*<^ZoG5_fwe^BDqv9(k%m;U@`{|3lN0jv-h6MAH-Hz<{?*$9XZcuJx=Yant&q*W(4Y6Kx?IeyZ5 zlmJix_d|4!LI|!N0?``3Gr}1J9@td$0dW18A1Qjg=B*|z9wd@gTuYPaJ;;oFWm$)PMf@zMIaFTuNznb{-Yg@pML%;{<1EA8r6bXs6R9p{qSr za9T<(CHkhrN+K({_N9HlfAr{bz1|prb8ffWiAd8Og@AVMRU&ke%S4HNT#Z(6c8mqG|ZYy!9s}$KKbm^ z zAd($YAj)VJDCL`uoYx}k-TK95F>eeqLeac8Ez{Qj`j>yh%qgWdIKX07a?Z{<1!Qt! zq~a#?<@v?av*i;PIyD5KtXVZWl&QFJZ%tXrH_a`o!<>({SU;reR*i(h=Q-w!|i=^v%6aqstQdG*DM-DZ;pnk~<|u3K-{$mqP5 zxHj2%;>VBXakyUJu7_c0!xDk}zDKXYHHZ$O7(|D9b8}O2-0wDzE}x|#r?``x9zVL= zZ|Lqes${P17uO|3A|N7^EaY1<$YMkR(GeJ7eR7qiX_`P?}L> z0C0PIi-^QP>=6-|cl&)4TxgmQoN4L%{`Ie3zI^eyfs`DP!8->~obzHz$5hC1F>8d* z3Xy!XeP z>Z5P$-=%EDcW4-X!{^d(Akt8Tn!0&hd_VY}$=+Cn*TI5wj=@X|j%S~$AvkXe3hDqD zbKGn``S_#f&!2lzAW($Lo5165fWT0J04R%yp?BU)9UvJJGa?-p(WCXvjRPlOhlr4+ zs7li`T7;{(Ne#_Bxl|I^m^?yI4Zm99si2yMz4xB+=;}ieGcs4H4F^U9qty&SBt8%# z4l&?>74r159LfLyAOJ~3K~#7ch8-*Jn)R38fI=u9jeSRzM4kQAGWtNB(>!DmDJh#s z><2Rg9d#X**b>mIf*~0~Dw;|}1c%i3(KHdm(I#l1qAL5GMTdRtH~aZ=Ia|zK6UHP} zfXdIWpEu`JKct8PAUbc7bkw|%ib+;-cvK6hp_qR8`t@PAi&a!cfK_3p2F|$(rj9X} zl7SEekc^puFpC7P3=>0OwW2_14nWn^5Y$2q!&O8w(3APYxNkpjX7E5`fNBhTle|Z@ z`!~!fpIR;J1W|PyavwXKdN_jf0Gd*+LDlsE;Js%?RVDEIA;p*o9bxdkQ8gw^Q4lHk zw%^BL7ywjq1b}P+&SzwDVVky-K&6QDp$W6pm%FRm<;Bw&V`v)Z9Dvr=9f1L`l#){J zhm><}C!K<&5{oGVI_HL%5V02t?030*d3)zV>%Greia;&`01Z1tV^nsW3lM>KL^M{O zHM$}VdD3;U-&r=2bkR}clb6+B|KEQuB@u=Yn)8dxi;K(K+ttnORf>hYTb`dGG8hn2 z&V|{3qG$^=Y|AX?1oaLbd9j1KS$h?;YOs(?9|Z=4r2Q9uPG0|avDh|TIX zX{w-Fh2sbS48{llz%h~oarCRUp-MRiBB=LgAN*li#DuP@tVIk!CbO;%M?U)aV-b1w z^vPt>?W!3L4H4OM(kxlT1OQ6T28c{r167@?&9D!S8AU`ukg%Ahz96oLVd%4()m~9R z6rr@v#ocB;?GjKbqCjVl9xKvh(yeaq++dXQk}+`>iSvGE>M|i$dL(Hcb-( zBT>##RYPb+1VN_L+4a?J2qA<(z|IA;JPgS>hsYv=b)awKvLI*K?}o)w}>-|x(9HakPt?1p@E*NaHUHb`E&cD=b>-Mj?dc~cp7ff~YK2suYUolYle z9ES|lm4e^@!H?S6vh8NZ!3-0K=aBY0u+(w6Tz1RZJaD;qw7@?&SC!pv_uY%{c3n4} z&Mq!4>fqcVAVS(~7G3-JCqEXE+spMI{p7>z+nZnh@|VSQKAX&EKlsrPzb{FC{p*k3 zfB*e2zj*!fd~tJ`58+h!7T3W3>^_kOqAouAKH_bS`jbV7z& z&_gP_>o&BKwIL&+*`#xDd42V&&Y5zK&Vgr2Y14Eqnt|*cPr9ZRwOjAs0maZM}fStmXw6v8mCy1XfpMx#Bwvonuf0v^pKos!>Drj3(I;xx>b|5)Pbm zPSpWu@BrSb9$A5qBumo-Ghv4&I-Pbg4ZFL|=g*&CTwLyV0|63ZjQwIU6DwzDXCHt3 zaoe^f$EVL8H7!rt>A(En{%RQZt=nE)yS)itVtF#DXe2+bDf&))mq ze0E+0?pD9aV)%QRjQ$>8^8sA;6lHJ>rMpkbQmsI-2NZ~}nH+yxT<354>npbbiU7!8 z`M*1;;NP_CnJSQtv);;Zfm&o%yd44{8LK(Rb>3s3_?A-kU5oXDYxOIr8egdZsfFh8 z4f7j6i=*A-gnCi!N}yuq-cBIblWFv+miibTehdp7$%6KfV~vPv1prLnKv#}L)k9{r zDpbwuNSUp}QBl5URy(QPG;b`_{>Gl3jPix1pJ+s%t`J zV^s-nED@1%F2?m!*0ATQoPZi)SNX#F(34Ha-2$FKGm)yd(cTu&BXW(g#e*ukR(pro zmwMBuTCST}iX%6zHdkcS$LIqyv#F(&hG7r`0;&PRr)n0_Y+`2Oj#~%=7h2~?t&nB4 z)V9s#<>jj{uU6OB)A_QSO;aAc_c>(~MJC4}Y9;4k7?=pWADa-+ib;V|nEfye3bxs8 zC$mL1XuK<8MZ|j_LMU-C)igwOCqMm1i{<10^RND&pa1+9o84}`-L!4HT+R(_GM&VjnJLCW$1E3OM&`zQM?fO7 z+3nFpR2e|uglvvI0}}uhsYaZ7=4dn%5LW^1qf1Fo@3%+c#{;e8@!IUVMpb=i-O zyq-3}Gsk{NYNka^H4U51nki%@DHzaoUFRHW#t>X8T7%7N5Z!@s!EPD)zF)7`-uwCT ztZmy|#;p_~kE1dGCXZxJwUkn^#MK}K0QHGi@2IYVc0fx>L)=$}ao-P{{eBW6-_=}WQ3Q;|Jm z+N@uHdH3Zotfvh*#Gx0_6k`tUlwBYfZr7`>YnB&JLRkFaAOAGwqCn{U?Rvdf%!grE zt*!#u_uqT;-oKv=N_s1u4$;7xYc&|#TQ?6%@YRNtk>^9d(Vmh)r*TH=hzR-ti}5M-b{(>xPuW1 ziA<78CQqn(Hl2U^$tQW}J5Ss+hljX|L?aUjMhMQJSoJc30;BVeopX{)&M~lKLMB8L zKy^+ll*2h1LFU10kyr*Tb*rsr^KR&e7~h}1&&<1B zKc7#R%ek4bcaurC-EN8`zyhGRw^x7j{IlKm&UrjOkH*I}LM48-J}^7ctfI_>NM_jg z(S>e#@%ZtR?@VXsLsC`ly6Nv|G5n3?Ax9B_xo-ht-{SvbU!$?OUx=HEh)Q7sgF~dSSzVjgY+sLDWy_M@x-9x+pF~#sDY@8)B>7_9CIb&m|BfqtFK6h z+yo**(>kJq0}HHHNysEw0HOh@YRt*E4KW)CGwT=!1Bhr?3*WjT7lnhw96(HuAu=O2 zUNyy1N9=FY%1#e!UDv3p-RJY60wGY1c0aqg&@sT(-srNx3=LHP6{^VHzS;wDib}6M zlEdE;9CJ^lzKsgskfVmgkv}M*xgNE8utEr68eA}te(0TZ=o%6I^0OC^hHU0##d_FKg`x zY9&WSEHQIKrDX4%pETn|eK1hQl7n|Cmz)ZDYP@IWt_`IWNrGyOH8?HTC(GGlRFJHg9{?kAGA9nq=oy^+cu3x`u0+*EAHsm2&DW#-AiZ?Z@_D?*~l|fNJ zF*5`L-*oIX53%O?A!2Z(3JR#IyWP$?$Idwy05D6cy#b=tW5h1h;GV2fC9+l9-84%t%-A-5GMP-erfu6-uU_rrP_C|=bD?RL%Q+&a7}l6BF%{X1Xzt#&N8`OrzaCiOqY$io@RV-eT_|Pq4newt8s}VFpP?IN# zPDxT;o-~@f0u`_#nrxGB(1D+KbdxxQ?mpM`6H;BrV+!NhQF@Q(q=Z*odgvjS>9sN0 z)@~|zS%(ThQh!63nyx<}^+wx?Iu6^vn` zB|+DJLiHY+a+w0pMKXdgI?)}anRd$29>2LA2#AG}4OE710OdTKD(+#*HpQdCHa03K z1}U}TIdWLV@0X$R1m=*j-9k;CXM=KDiexlB&VeZy7S>N2mOr@@W=RW^)to2)JqTYq z>0~&K1s8XhY+Kq*v|jA*KNDdi2E>#qWD2;HM?^KgD=VpadWW;7?j)qdszCTH3W7rb z^EWm1_v}=GpS*DP3ABPF)YLjYq|2L5`kUH>^3=iIc?{p)=f+;8c5B4aJlxiH2S7CEAH zO}*D8_y!n|Q7x-TJK2}MwtTOGSHCRPM=AI2F;bucTf2JIYjGueLeTRR5K%b%7QKF$ z+4wJD@?ZSZR<3~G5<7p_oT9>hZT_^Ju6ne&5kL_u+*1*cT$lyH>+{u+;9tYrQAFHH z0O~QI{m0{~Un~ifc;8KRD5lNrQZj@^_?!twrOL%r9EhpV4mCJo0FF*;&+aU)x^dU;tRlzc!0#(UPU4MlOH~{*t(R}%Z|{C zUF7om?YVWt$=09k?MguS^)lw1hs3^bIR)AF;o(0+C=`0J_@DS`ZTT3s8ktEs0mLXS z&XL#d3iX1$;iujV*n~V~0NQglNR%QA1cvlGb_fDAA3NeBM^zU=C;U{MP?)->YX|CPp?aOHY^?OxlJD~3R@4u-96YzJe}DpLmB=5Hj>923}yKIt$uu}XYtlf0o6&O z_?5PXcvv>b=I5Pf+QU=wKc3dBF25fblVKknNe&<`;=oC_4Ttso^F3(GH zz?=Wi(p3CI>bszzE<2Eo`NaM6UEM#&(uA?mwGk5dDC~RX}E6u%2>(~y$^LG zHqafAdQuB!XC19onq(#zrf?EPQjn+PfW@QWrGjEDVv820j8hQs)8~RTaaQen^{uC_ zn-D)FJ<;xY$g?;rq{DkAq~W*0tOkm-XtZrh%3}eY(B4*OHb0`32uqQ4e}srmuI@HJm+9GTV}|SnSH|?RzH0We?7- z=ZIk-3W#5SA@Cd@z^-JBrZW)5m_WJ%Yb;*fGHJT>DN~)=I(G%FQT}P8&R6|9DscBn zpB!0)TWD7qi3!Zk%l=V^tZXLZ?UmqPWNVdu7s?Edp!yv`T5~Qffcu9 zi0DI2JpRast#snwEk%;Sk#)>U5P6=N}LH;mH z{hpjOSJe!ohB{JPYiHuy#j9*V$AOByFBbGw@L$*vQ5xeUNM$nYF*Kx>T-7kM*$lGzAVc=

2QFFZt1n5LJEsD_Zc%$C}? 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 z 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 z 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%0DKcnpt{GHZQ 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 Date: Sun, 3 Jun 2018 16:10:20 +0200 Subject: [PATCH 103/359] update Windows Qt to 5.9.5 --- .travis.yml | 6 ++---- .travis/debian_build.sh | 4 ++-- .travis/travis.sh | 2 +- .travis/windows_build.sh | 16 ++-------------- .travis/windows_travis.sh | 19 ++++++++++++++++--- .travis/wininstall_travis.sh | 2 +- 6 files changed, 24 insertions(+), 25 deletions(-) diff --git a/.travis.yml b/.travis.yml index b9f1b90..fa7bd35 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,16 +10,14 @@ matrix: include: - env: - BUILD_SCRIPT=debian_travis.sh - - QMAKE_FLAGS_QT4=QMAKE_CXXFLAGS+=-Wno-missing-field-initializers - RELEASE_LABEL="Debian 32-Bit Package" - - DEBIAN_VERSION=jessie + - DEBIAN_VERSION=stretch - DOCKER_USER=i386 - APT_INSTALL=clang - env: - BUILD_SCRIPT=debian_travis.sh - - QMAKE_FLAGS_QT4=QMAKE_CXXFLAGS+=-Wno-missing-field-initializers - RELEASE_LABEL="Debian 64-Bit Package" - - DEBIAN_VERSION=jessie + - DEBIAN_VERSION=stretch - DOCKER_USER=amd64 - APT_INSTALL=clang - env: diff --git a/.travis/debian_build.sh b/.travis/debian_build.sh index 52e6608..4d7598b 100755 --- a/.travis/debian_build.sh +++ b/.travis/debian_build.sh @@ -9,11 +9,11 @@ chmod -x res/gta5sync_*.qm res/gta5view.desktop res/gta5view.png && \ cd build && \ mkdir -p qt4 && \ cd qt4 && \ -echo "Grand Theft Auto V Snapmatic and Savegame viewer/manager" > ./description-pak && \ +echo "Grand Theft Auto V Snapmatic and Savegame viewer/editor" > ./description-pak && \ cd .. && \ mkdir -p qt5 && \ cd qt5 && \ -echo "Grand Theft Auto V Snapmatic and Savegame viewer/manager" > ./description-pak && \ +echo "Grand Theft Auto V Snapmatic and Savegame viewer/editor" > ./description-pak && \ cd .. && \ # Prepare checkinstall step diff --git a/.travis/travis.sh b/.travis/travis.sh index e652f17..e88bc95 100755 --- a/.travis/travis.sh +++ b/.travis/travis.sh @@ -3,7 +3,7 @@ # Install lua if [ "${TRAVIS_OS_NAME}" == "linux" ]; then sudo apt-get update -qq && \ - sudo apt-get install -qq lua5.2 + sudo apt-get install -qq curl lua5.2 elif [ "${TRAVIS_OS_NAME}" == "osx" ]; then brew install lua fi diff --git a/.travis/windows_build.sh b/.travis/windows_build.sh index 55afee5..e64cac3 100755 --- a/.travis/windows_build.sh +++ b/.travis/windows_build.sh @@ -1,8 +1,6 @@ #!/bin/bash -apt-get update -qq && \ -apt-get install -qq curl && \ - +# Prepare environment variable export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe && \ # Creating folders @@ -18,14 +16,4 @@ qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_B make -j 4 && \ cp -Rf release/*.exe ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} && \ cd ${PROJECT_DIR}/assets && \ -upx --best ${GTA5VIEW_EXECUTABLE} && \ - -if [ "${PACKAGE_CODE}" == "Dropbox" ]; then - ${PROJECT_DIR}/.travis/dropbox_uploader.sh mkdir gta5view-builds/${PACKAGE_VERSION} - ${PROJECT_DIR}/.travis/dropbox_uploader.sh upload ${GTA5VIEW_EXECUTABLE} gta5view-builds/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ - rm -rf ${GTA5VIEW_EXECUTABLE} -elif [ "${PACKAGE_CODE}" == "gta5-mods" ]; then - ${PROJECT_DIR}/.travis/dropbox_uploader.sh mkdir gta5-mods/${PACKAGE_VERSION} - ${PROJECT_DIR}/.travis/dropbox_uploader.sh upload ${GTA5VIEW_EXECUTABLE} gta5-mods/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ - rm -rf ${GTA5VIEW_EXECUTABLE} -fi +upx --best ${GTA5VIEW_EXECUTABLE} diff --git a/.travis/windows_travis.sh b/.travis/windows_travis.sh index 98ef778..8025ffa 100755 --- a/.travis/windows_travis.sh +++ b/.travis/windows_travis.sh @@ -1,6 +1,6 @@ #!/bin/bash -QT_VERSION=5.6.3 +QT_VERSION=5.9.5 DOCKER_IMAGE=syping/qt5-static-mingw:${QT_VERSION} PROJECT_DIR_DOCKER=/gta5view @@ -8,6 +8,19 @@ cd ${PROJECT_DIR} && \ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ - -v "${HOME}/.dropbox_uploader:/root/.dropbox_uploader" \ ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/windows_build.sh" + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/windows_build.sh" && \ + +# Prepare environment variable +export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe && \ + +# Upload Assets to Dropbox +if [ "${PACKAGE_CODE}" == "Dropbox" ]; then + ${PROJECT_DIR}/.travis/dropbox_uploader.sh mkdir gta5view-builds/${PACKAGE_VERSION} + ${PROJECT_DIR}/.travis/dropbox_uploader.sh upload cd ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} gta5view-builds/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ + rm -rf ${GTA5VIEW_EXECUTABLE} +elif [ "${PACKAGE_CODE}" == "gta5-mods" ]; then + ${PROJECT_DIR}/.travis/dropbox_uploader.sh mkdir gta5-mods/${PACKAGE_VERSION} + ${PROJECT_DIR}/.travis/dropbox_uploader.sh upload cd ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} gta5-mods/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ + rm -rf ${GTA5VIEW_EXECUTABLE} +fi diff --git a/.travis/wininstall_travis.sh b/.travis/wininstall_travis.sh index ed44a44..31a6853 100755 --- a/.travis/wininstall_travis.sh +++ b/.travis/wininstall_travis.sh @@ -1,6 +1,6 @@ #!/bin/bash -QT_VERSION=5.6.3 +QT_VERSION=5.9.5 DOCKER_IMAGE=syping/qt5-shared-mingw:${QT_VERSION} PROJECT_DIR_DOCKER=/gta5view From 5840d8e8e9b071200b5038ba82cd2c31a11a7b49 Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 3 Jun 2018 16:20:55 +0200 Subject: [PATCH 104/359] fix copy paste mistake with removing cd --- .travis/windows_travis.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis/windows_travis.sh b/.travis/windows_travis.sh index 8025ffa..0b7c12b 100755 --- a/.travis/windows_travis.sh +++ b/.travis/windows_travis.sh @@ -17,10 +17,10 @@ export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe # Upload Assets to Dropbox if [ "${PACKAGE_CODE}" == "Dropbox" ]; then ${PROJECT_DIR}/.travis/dropbox_uploader.sh mkdir gta5view-builds/${PACKAGE_VERSION} - ${PROJECT_DIR}/.travis/dropbox_uploader.sh upload cd ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} gta5view-builds/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ + ${PROJECT_DIR}/.travis/dropbox_uploader.sh upload ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} gta5view-builds/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ rm -rf ${GTA5VIEW_EXECUTABLE} elif [ "${PACKAGE_CODE}" == "gta5-mods" ]; then ${PROJECT_DIR}/.travis/dropbox_uploader.sh mkdir gta5-mods/${PACKAGE_VERSION} - ${PROJECT_DIR}/.travis/dropbox_uploader.sh upload cd ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} gta5-mods/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ + ${PROJECT_DIR}/.travis/dropbox_uploader.sh upload ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} gta5-mods/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ rm -rf ${GTA5VIEW_EXECUTABLE} fi From 72377e49ebd9760629344b1d8935bc59a7cf5297 Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 5 Jun 2018 17:55:38 +0200 Subject: [PATCH 105/359] delete audio folder now at uninstall --- .travis/gta5view.nsi | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis/gta5view.nsi b/.travis/gta5view.nsi index 89a557a..46000cc 100644 --- a/.travis/gta5view.nsi +++ b/.travis/gta5view.nsi @@ -225,8 +225,9 @@ Delete "$INSTDIR\imageformats\qwebp.dll" Delete "$INSTDIR\platforms\qwindows.dll" RmDir "$INSTDIR\lang" -RmDir "$INSTDIR\platforms" +RmDir "$INSTDIR\audio" RmDir "$INSTDIR\imageformats" +RmDir "$INSTDIR\platforms" Delete "$INSTDIR\uninstall.exe" !ifdef WEB_SITE From 8fc3dc6c7c926240d9aad6ee6b5e711bb41b004c Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 6 Jun 2018 22:13:59 +0200 Subject: [PATCH 106/359] Update to Qt 5.9.6 build --- .travis/windows_travis.sh | 2 +- .travis/wininstall_travis.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis/windows_travis.sh b/.travis/windows_travis.sh index 0b7c12b..aafe48d 100755 --- a/.travis/windows_travis.sh +++ b/.travis/windows_travis.sh @@ -1,6 +1,6 @@ #!/bin/bash -QT_VERSION=5.9.5 +QT_VERSION=5.9.6 DOCKER_IMAGE=syping/qt5-static-mingw:${QT_VERSION} PROJECT_DIR_DOCKER=/gta5view diff --git a/.travis/wininstall_travis.sh b/.travis/wininstall_travis.sh index 31a6853..fa8ef57 100755 --- a/.travis/wininstall_travis.sh +++ b/.travis/wininstall_travis.sh @@ -1,6 +1,6 @@ #!/bin/bash -QT_VERSION=5.9.5 +QT_VERSION=5.9.6 DOCKER_IMAGE=syping/qt5-shared-mingw:${QT_VERSION} PROJECT_DIR_DOCKER=/gta5view From 29f883555d58d938eb5b27b56e45fb591e9e6037 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 7 Jun 2018 17:07:30 +0200 Subject: [PATCH 107/359] fixed UI issues, Personal Usage data check box added --- ImageEditorDialog.cpp | 1 + JsonEditorDialog.cpp | 1 + OptionsDialog.cpp | 30 +----- OptionsDialog.h | 1 - OptionsDialog.ui | 89 ++++++------------ PlayerListDialog.cpp | 1 + SnapmaticEditor.cpp | 1 + res/gta5sync_de.qm | Bin 44855 -> 44483 bytes res/gta5sync_de.ts | 206 +++++++++++++++++++---------------------- res/gta5sync_en_US.qm | Bin 25241 -> 24869 bytes res/gta5sync_en_US.ts | 204 +++++++++++++++++++---------------------- res/gta5sync_fr.qm | Bin 43009 -> 42446 bytes res/gta5sync_fr.ts | 208 +++++++++++++++++++----------------------- res/gta5sync_ru.qm | Bin 43488 -> 42861 bytes res/gta5sync_ru.ts | 208 +++++++++++++++++++----------------------- res/gta5sync_uk.qm | Bin 44360 -> 43763 bytes res/gta5sync_uk.ts | 208 +++++++++++++++++++----------------------- res/gta5sync_zh_TW.qm | Bin 33258 -> 32837 bytes res/gta5sync_zh_TW.ts | 208 +++++++++++++++++++----------------------- 19 files changed, 607 insertions(+), 759 deletions(-) diff --git a/ImageEditorDialog.cpp b/ImageEditorDialog.cpp index a4ab3eb..6ce6d84 100644 --- a/ImageEditorDialog.cpp +++ b/ImageEditorDialog.cpp @@ -37,6 +37,7 @@ ImageEditorDialog::ImageEditorDialog(SnapmaticPicture *picture, QString profileN setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); ui->setupUi(this); + ui->cmdClose->setDefault(true); ui->cmdClose->setFocus(); // Set Icon for Close Button diff --git a/JsonEditorDialog.cpp b/JsonEditorDialog.cpp index 62c1636..ed89dd3 100644 --- a/JsonEditorDialog.cpp +++ b/JsonEditorDialog.cpp @@ -37,6 +37,7 @@ JsonEditorDialog::JsonEditorDialog(SnapmaticPicture *picture, QWidget *parent) : setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowMinMaxButtonsHint); ui->setupUi(this); + ui->cmdClose->setDefault(true); ui->cmdClose->setFocus(); // Set Icon for Close Button diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp index be952e9..24b7a74 100644 --- a/OptionsDialog.cpp +++ b/OptionsDialog.cpp @@ -55,6 +55,7 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : ui->setupUi(this); ui->tabWidget->setCurrentIndex(0); ui->labPicCustomRes->setVisible(false); + ui->cmdCancel->setDefault(true); ui->cmdCancel->setFocus(); QRect desktopResolution = QApplication::desktop()->screenGeometry(this); @@ -406,6 +407,7 @@ void OptionsDialog::applySettings() #ifdef GTA5SYNC_TELEMETRY settings->beginGroup("Telemetry"); settings->setValue("PushAppConf", ui->cbAppConfigStats->isChecked()); + settings->setValue("PushUsageData", ui->cbUsageData->isChecked()); if (!Telemetry->isStateForced()) { settings->setValue("IsEnabled", ui->cbParticipateStats->isChecked()); } settings->endGroup(); Telemetry->refresh(); @@ -549,17 +551,10 @@ void OptionsDialog::setupStatisticsSettings() ui->cbParticipateStats->setText(tr("Participate in %1 User Statistics").arg(GTA5SYNC_APPSTR)); ui->labUserStats->setText(QString("%1").arg(tr("View %1 User Statistics Online").arg(GTA5SYNC_APPSTR), TelemetryClass::getWebURL().toString())); - ui->gbUserFeedback->setVisible(false); - // settings->beginGroup("Startup"); - // if (settings->value("IsFirstStart", true).toBool() == true) - // { - // ui->gbUserFeedback->setVisible(false); - // } - // settings->endGroup(); - settings->beginGroup("Telemetry"); ui->cbParticipateStats->setChecked(Telemetry->isEnabled()); ui->cbAppConfigStats->setChecked(settings->value("PushAppConf", false).toBool()); + ui->cbUsageData->setChecked(settings->value("PushUsageData", false).toBool()); settings->endGroup(); if (Telemetry->isStateForced()) @@ -640,25 +635,6 @@ void OptionsDialog::on_cbDefaultStyle_toggled(bool checked) ui->cbStyleList->setDisabled(checked); } -void OptionsDialog::on_cmdUserFeedbackSend_clicked() -{ -#ifdef GTA5SYNC_TELEMETRY - if (ui->txtUserFeedback->toPlainText().length() < 1024 && ui->txtUserFeedback->toPlainText().length() >= 3) - { - QJsonDocument feedback; - QJsonObject feedbackObject; - feedbackObject["Message"] = ui->txtUserFeedback->toPlainText(); - feedback.setObject(feedbackObject); - Telemetry->push(TelemetryCategory::UserFeedback, feedback); - ui->txtUserFeedback->setPlainText(QString()); - } - else - { - QMessageBox::information(this, tr("User Feedback"), tr("A feedback message have to between 3-1024 characters long")); - } -#endif -} - void OptionsDialog::on_cmdCopyStatsID_clicked() { #ifdef GTA5SYNC_TELEMETRY diff --git a/OptionsDialog.h b/OptionsDialog.h index 4d35ca7..85ecfa1 100644 --- a/OptionsDialog.h +++ b/OptionsDialog.h @@ -47,7 +47,6 @@ private slots: void on_cbIgnoreAspectRatio_toggled(bool checked); void on_cmdExploreFolder_clicked(); void on_cbDefaultStyle_toggled(bool checked); - void on_cmdUserFeedbackSend_clicked(); void on_cmdCopyStatsID_clicked(); signals: diff --git a/OptionsDialog.ui b/OptionsDialog.ui index 9f1b0fb..6b47ffe 100644 --- a/OptionsDialog.ui +++ b/OptionsDialog.ui @@ -420,11 +420,11 @@ - + Categories - + @@ -458,6 +458,13 @@ + + + + Personal Usage Data + + + @@ -466,74 +473,32 @@ Other - + - - - - 0 - 0 - - - - Participation ID: %1 - - - true - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - - - - &Copy - - - false - - - - - - - - - - User Feedback - - - - - - - + - + + + + 0 + 0 + + - Limit: 1 message/day + Participation ID: %1 + + + true + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - Qt::Horizontal - - - - 0 - 0 - - - - - - + - &Send + &Copy false diff --git a/PlayerListDialog.cpp b/PlayerListDialog.cpp index 337d61b..1e61647 100644 --- a/PlayerListDialog.cpp +++ b/PlayerListDialog.cpp @@ -35,6 +35,7 @@ PlayerListDialog::PlayerListDialog(QStringList players, ProfileDatabase *profile listUpdated = false; ui->setupUi(this); + ui->cmdCancel->setDefault(true); ui->cmdCancel->setFocus(); // Set Icon for Apply Button diff --git a/SnapmaticEditor.cpp b/SnapmaticEditor.cpp index 18f481f..adef8e7 100644 --- a/SnapmaticEditor.cpp +++ b/SnapmaticEditor.cpp @@ -38,6 +38,7 @@ SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, ProfileDatabase *profileD setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); ui->setupUi(this); + ui->cmdCancel->setDefault(true); ui->cmdCancel->setFocus(); // Set Icon for Apply Button diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index 75ed2bc5cfb8e92f0d079e819044c2d71bf702c0..cc3ebac6ac3324a1f1081c38af91f69b44c74195 100644 GIT binary patch delta 3104 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 Y&VeyWG1<1>4kdL1D#enggMt?QAA|Ud1poj5 delta 3463 zcmZWrX;>6j7Cl{EO?Opw(<&ftVB;+r-I$>r>(aKyFmgZ#*C@1KN56;uWAX z|I@t=EV;Bc+}&RA0`PYPn%z;+EgN{V3V3@dgrlc{HlYx6OF8p4aX(;jg}8Ge@a_$W z$3)<*hY)Lto0B14>I}Hdfp|3n=v1I$(sJnf2Lg-NK{uS(^%``wXMlw{uh5Qy4ltC` z#ZG6@t>DA*^B1H9~5x^x@RAs1PF zeSnz-SiS!;89Im^@y&sxLpbtm9;Hgh=LdU{WmnW}v(v+6#b~%fLvl9mY}EnFhv1QI z3=nG8$lp`6lyNGqKCj}smKwJY>0rkwO(+Ih~{NB14{M zwKj0xW1wKNHnQv;7D}ZyF~bAcRHseaPG$qAX;;3aA`bQ1yh##Mph0^$kd6)dMq3p_ z0$=Z?t;KIgcVz;?1fW(i) zz&|PJ$me3vATF@*ggCZO36OD5Ty}LJ9mvifAiCT8_Y=#!cL1rQRa_GzmhFvZneP_& zub2c#pNq$oSQeqTSXmN4JS)~_6wvQ|DyDT+F|UJITd{)QW5tHX)-2XV;+^PYOnpIo za``;atwenONgxSss}q~%Pk*j+-d#ij^_yQkAmp+xVC#C|ogKQUnp431EM4-JIAEei zw?rZ_tDfrYK9THE>viuX`vQeGb;aI{D{GXlIE#+0+N3Le76D9IsoTD63TtzTu1v^b zhW62w1yPW&Fx^Lcj`Mw%?!uIE3bIA_rO=#3JnVZ1T@VMfvm9I=`Y`t+9a;~63aoZ_ zaI1D?xA@v&d^8zcgprlUU_PU)?`$y}$R4IV(B7L{#RqO`C^*#PZ9AwtN zIr|V`aM4>AlaXfa^ofJ`f6E#bW7p|t-{iXzu3~tNKIQ9rV8{ji;(gnI_ukRJS2B-| zDf+^iLSVz|`t2ueMCd;r^$Xxvt}nOm{S8>VK!4~mDYRbDpE||j=y*o|L-=^+;y``F zQ8F}pwf>jAy@0Kv{>5SDbTE*9F&<70AiFc?YHL3+RX(s$wS>yVTQ<$uT%s>YW|R_EjzQzI2ou zUW7EPXbpFUEmHW}bBv%~iq@A?n$M)zA~LlgR7x8Dh>?~^Ni&Gzaw+wXo`CJRwCV&M zZ*@b;3A@fJxhLiN1k!M*aB`nIz8F1_ND}R4W3>F^0ZJ3!Q*Kbwfb49!@jR)GJECZs9FKplXhWRY$i7$1O-v@_ zD6J3D5syboz+y6J9;Wme_Lv&@Ta>6TNadVDWrZUp@Oq+TC0*fyU6tIx2ug5Y$qj4Z zUV2l-+-N2D0v&GsLRtHK8PL3iQs~+jSdpO=du4H*_A2HUE87o{f$Y0V*@>peE0v=w z+_^R0Q$AVo22U+fN@cR09+e*C0}YhME2jrGvgLoE)TT3nEt{0fo2=Yg3Y0Gkc?`+Q zQ|evgnDrBs-;aIAatl(?<3ppkA(Y8A+9=(93`8w5HsALJFs7~1d6g3xa5B0n8b&S| z-9Bx@97{5Kb^DDBWf`a2JJK_UJY(7@;?z6Fw~kEX*5Gf<9#Tk2rW%WSa9mnqEY^r* zz)8i`xyIr!I;LziZZ|XX#KFc-9#DdfH;h%@0@rghUKr)dO*+$9_k;nt=Na#AW^M&} z7@yDOdYhk^+Uy;}7Vc%Tx4rJe-PYOEwvmk@>zb)s5c@&fYLjOj9auTU6qL=D+tNkF zE@sn!kX69=Z%rYllk5izO%p09(Zt)P2xn&V&}}Nt(wY`rp+u`3O>1{E(wS{c`zKQK zoZY4)$EWaA;;Z8HjdoMj6c;v*j~qp%nrC3Eqx{`O zHRgzOzGKP~Qtf-e@!<4CQhZ&-Id>e7+c-buZF8GhWMuka^T1z8`CDzwQQd4jkNs?p zo%@)(b|3AuXF^{h(E9Y55gA_bY|vXyf}|eOioM>w)p?Yu5Wxyeuz)2 y@`XL?gz{s7Rbp@l45q&}%;UnDd`jiQ|HIc`%b6n6tf`i;f5-C5xh27&Y5xKZ2H83Q diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index c7ee247..903c521 100644 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -176,9 +176,9 @@ Snapmatic Bilder und Spielständen ImageEditorDialog - - - + + + Snapmatic Image Editor Snapmatic Bild Editor @@ -189,7 +189,7 @@ Snapmatic Bilder und Spielständen - + Capacity: %1 Kapazität: %1 @@ -214,17 +214,17 @@ Snapmatic Bilder und Spielständen 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 - + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. Jedes geschossene Snapmatic hat seine eigene Kapazität, ein Snapmatic mit besserer Kapazität kann ein Bild mit besserer Qualität beinhalten. @@ -368,7 +368,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! S&chließen - + JSON Error JSON Fehler @@ -557,22 +557,17 @@ Y: %2 Participation Teilnahme + + + + Participate in %1 User Statistics + An %1 Benutzerstatistik teilnehmen + Categories Kategorien - - - &Send - &Senden - - - - - Participate in %1 User Statistics - An %1 Benutzerstatistik teilnehmen - Hardware, Application and OS Specification @@ -589,163 +584,152 @@ Y: %2 Anwendungseinstellungen - + Other Sonstiges - - - + + + Participation ID: %1 Teilnahme ID: %1 - + &Copy &Kopieren - - - User Feedback - Benutzer Feedback - - - - Limit: 1 message/day - Limit: 1 Nachricht/Tag - - - + Language for Areas Sprache für Standorte - + Style Stil - + Use Default Style (Restart) Benutze Standard Stil (Neustart) - + Style: Stil: - + Font Schrift - + Always use Message Font (Windows 2003 and earlier) Immer Nachrichtenschrift nutzen (Windows 2003 und früher) - + Interface Oberfläche - + + Personal Usage Data + Persönliche Nutzungsdaten + + + Language for Interface Sprache für Oberfläche - - - - + + + + Current: %1 Aktuell: %1 - + Apply changes Änderungen übernehmen - + &OK OK, Cancel, Apply &OK - + Discard changes Änderungen verwerfen - + &Cancel OK, Cancel, Apply Abbre&chen - + %1 %1 %1 - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (Erste näheste Sprache) - + System System in context of System default System - + %1 (Closest to Interface) Next closest language compared to the Interface %1 (Näheste zur Oberfläche) - + Auto Automatic language choice. Automatisch - + 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 - - A feedback message have to between 3-1024 characters long - Eine Feedback Nachricht hat zwischen 3-1024 Zeichen lang zu sein - - - + No Profile No Profile, as default Kein Profil - - + + Profile: %1 Profil: %1 @@ -854,7 +838,7 @@ Pfeiltasten - Navigieren - + No Players Keine Spieler @@ -1002,28 +986,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! @@ -1082,7 +1066,7 @@ Drücke 1 für Standardmodus <h4>Folgende Snapmatic Bilder wurden repariert</h4>%1 - + @@ -1090,9 +1074,9 @@ Drücke 1 für Standardmodus Importieren... - - - + + + @@ -1131,14 +1115,14 @@ Drücke 1 für Standardmodus Importfähige Dateien (%1) - + All image files (%1) Alle Bilddateien (%1) - + @@ -1173,14 +1157,14 @@ Drücke 1 für Standardmodus 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 @@ -1636,12 +1620,12 @@ Drücke 1 für Standardmodus - - - - + + + + - + Snapmatic Properties Snapmatic Eigenschaften @@ -1683,7 +1667,7 @@ Drücke 1 für Standardmodus - + Snapmatic Title Snapmatic Titel @@ -1693,30 +1677,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 @@ -1746,62 +1730,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: @@ -1855,19 +1839,19 @@ Drücke 1 für Standardmodus 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 @@ -2174,7 +2158,7 @@ Drücke 1 für Standardmodus - + Select GTA V Folder... diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm index 5ebdda802b16e4c3106b83d44ec4926308d3f3a5..0892020679b609521f5f2b5feb9cf84fd44da84f 100644 GIT binary patch delta 2972 zcmX9=dq9l&8h+=S@0)MF%giK0YLrW2x+hIHsj%Io=;o3;o3n0V5!T6|tmQbYZ9CY_ zJwzS1M2RTcSQNSLqFs@#tGGkMmgSEe&Nbn%)z)q1wlg<-G zP9Uc20#?KkyM7l|n}COjY+Z@nht@^o6={d2tlZlL16bwuv zF2sWO_7fKk>^g(Ex*Cv;Q84ZSS+%uNVrp# znKzNBhgG#HB$%l0c-5wiN3gI>wVxPRcT`m}{1_BgMCU#B%1^ zvu}v_X6Bbmu`p;l)40z_6nB7WX-+|uvzgX=wL~8A%wI#($x31v^UkL;QN&xdu8AK)`0U z&t7b-X<*IsZHWRn*76Qcn$y^T!Pp>d9y>B{2bB1UU3ohc1caOjwuiMVTja49I_*+$ z*h{vkZ~{j3OZITqXap*eEtjTZ=nUghLUV0(eXEpZGf5E`$cN)iPJ!U>dlQ;pwdf(Da zW9CA?rJ9okNf^x!nhTGBb}KYjBm1DEa?L~427EuSX*+!j#B6x6bs-E}rJyBN!9m-2 zBfFm{X+CdifT7*vdGq`881YrS=f8o@qxea)N~}0Thw^Ee=v8>afwJ;2H#X>1%ZHO{(0d5qT~Yp;|WA==zT30S&hsu(K=Rp z!HPTD!EO1-!cy&!*Eqi8$7_cd)M1ndY3J+$5#Qt5xs_>1mZ)9!5SH|<(PpN@ihh^1 zD|-EenQ_>h-Jm@GJDG@gBIoxm5vle@yy&5$VcOJR2OD|EP8m^~e+ zsueze>x*TxUSRI~}Vy#g@oxx$Oo*RW`ssA>V>fj?SB)zgj-??qjg-XM@5_KZV8dk@iN zMGU;o5PkgMWmpe!;PgB^f2CktjDkrA#X)=8h{QHAY)S%dOb;=x1?xgf#f0CG4QZn| z`h_0W+K6L*gR;H85T~42jt1t5pAs7CW;KgjVz9CHR|RdZE9i1r!LYx?((YYw5q%IV zZgWIlFF?n2vh!@>3K_{zbf!wh*V#MDgkn6)vg|VqL~@gnPS!fj1Nk z?y6u+j##%JR#qUkEOT!yp*sw7nhbH8Ph zI^2i@sz@?)Na;UGvOf+Yog*Z_Oem<0kOHGxF>WqW>UAg?d|JxV!vcFo%AS1_8ETN$ zTasbHW@&w76XriS{Qn;)rb1eO1&j?nrA_Zw;!n&-Dc3FtDP1Gwxo2aenF_|VNcqR0 zK=g2_=qx%<(Mx4nPPnk5q*GbrFkZW*ia8*Zyad<;jFv8hwjj*2q`HM@AnA@&zby?H zMzwS!w+3N}FiVYg)6n?{>5uZCA=z66JKM?ZcM(|7O%|S_Bk#}TPKU1Js@o?U*K~#g zVX~tHsclPS$I}k@|J7f1H@|^G1LeuiAg1moFNg*D#L9m^IT2UgEqU$GT0ho51!8*5lC=>CGE?_OrQ8`P&F57g2!q*@nrMhrkC5Am! zms9~Gy!5(cBO>eKt6)H|Zplsf5LvFaa1^YMZ&X4Va zp=;5zQZ+Uz(2GAefRK&ebg>aeF4p@QFvNY{=p)0B1Zj$X?sDj9O4A>oJOetmD;WGj ze&4zg!z?}WTu%!mV z_B>(O-JXK~7NZS?SD{3=F@~ZqLU9h}7|xeMPoGnUYqcd%?tr1O_ff3hXn5s>j!kAm q>-SJFWG&dFgcRG#$(?fk>F83dbNa{@4|aaf7SA?c^WC#`9REM&;4m`) delta 3143 zcmYjUX;>6j7QJ0v)!kLq3riy+i;W;4C?L>m%BHd}B7&$}ip0 zYm=4hL!J^*1d-x6a3+!FH1I9_<|T9}BVyJP>AH#7YeY8Bh`6allT#~_M>u&+Aex#+ zG+s-@kCo6em*~}2qSz@Ft8L8(iQT(`DA7#pNtS4m6|o(_>E9CDIhsg(K_+c5P95{aOw*39ExKxNS=++MA`xJ z9ExX7O(f5ufT;!KITSFpojmXP0td)zYa12{zK`;ABbA-r$9OHbll4#^_OzPM^Bs`Isb8Y~V*D{OJqTfM= zK1}Y0bWpdIDfnbRkyk%c=7R<5T+Vb_v(pK%9*~q8Sw8CX5dyk(KsXX+vGebDMT>O ze65LMy5#)cuZfad@{-Z8v{7to;;)OJtD`~<%^4*5y&iGS_49z zzLalx2_fV&<(o5k2r^6FXhdSJHS*Rh5a(qlZ`+Lh3rq__aB7s@to4*)i@9mW4Z+D|16vym`q z4%^YR4)1f=-ab2`Vg2mgxhK)8H`%9GE&_M6&rcW;bw9@r?e}Lm{k|<|Mfoq%AFg^X zVAnRHxDDLw_7+SZ1(&-co5M8-oFixU&cG-t<*LV`oakPzdOZ?~{gK-_m`>#L zn5$Vk3xWo6bdI%_+udw;a z8%~c>*v0(@XLlxD?}x$_f>C zWSj8&ZN=cJuaTgIQWz+LfQuyz^ph}ry;9HC5~VjN?YkhbqfzPBD(ZHJH`VL%U%#t+IUk8;BpPtZJ_!nzmY5 zb0!a%qCArL0LR`?)*pO~b&He@S3s2U8)ZuioUcEpyq%mzWc^gx`xz!daEJ22L4Tr* zd&=J%VYn%+DlVoC#H75ca%}U40?n$Z!5Ua$g=*5zJHg-%Rnoo=w6d!zcPA3@|45a8 z#)Q^-qQmMc*3gsP>f4UQ&N z+gVu5n^Aq&bOS^81J%QmRmjZhh3c`P87)w)dO3F^9sN^s9yu`2(`OY~BXpTGlb?+cF&no`m?4OZ9tsv_| z!V`}Ovi>3bUeMT#LIS~p!JLeMc0I!Al6Yu7SMUvhrjZI^!oq4S_(sAMUkTG62w}Si zF?|Pxh^%S2K*tKneb^VVU6}SGJR)uuG9PN8ak?<`M|fpamXOuB1_fjaIfR0S-xjvU z<6PBWXmMFE|M|e}sPrQ8w$S8YgZrpQXui&&+a?R=Zr#Dg1H$<&ZIB>cxY&vLkjYEY<(7K394 z&}C|I_GK_RVYj$W3kmE_i0hYL!+C9DnK2y_+!D)Tdhy;}!h}6y*;hzdXEulx&)4Du zCRMDm4S`$p#A>hgSU63>gif*MC>V(M7wbMBsyt2nY@HLvvA1|)-7C1!UB%{HB$ROq zhyWR7;@R*%m^n@CC_(`l_TrU~O}IDe#H&^Kw20A(-L}~<{bljjlQ%IK*(cH;*4xzV zhtV+C95vsMihQT4Ee~DBjrVu8zSJ5FM5rA_P;DKgc04r#-(bVlULKFZ&?xnM7bGTk zR~IG%$NQ;Q9iN8@Y^UBhxeAgjQ*RlE=bWp$TE@cMJ0(nTP*=y8$eI+T>KYv?5BgMn z;vpnR%dN~6Y|Z!8{hz=}BU{zamt%Xnx5mE98yDuM8v8y>gP16dM-aN+B1+?V3t?hb zXo5Cke5%(;IBcXQEV2|1*{+GyoI%$|X{I+r2=4(+x*nEwvy(8`S@YI42obwWQ?U=_ z1TNDYo&jOa@jEofPtSsfFG}clLDM?R22IzgWknF~vso+L>_S2oTKn_eQ1VS}fDTPO z`ldD}0!|RKwE1hmr$dtV*!;!d@dpVfT-Tn?!+w_@-H6vww%-T3@SnkJ)H}M_9(hQt zOSfS80L>?{S(kU^D2VRRE!%|5*?;S{o&&MYAM19#%)lHB*B!hBChRP9bt}U$4_E41 zn@kX3r>?WT0nC-_x>(+|e;KB+9VRWXf5PmA%A}Ybq?vdd*~5lvQjp6y+Nhn2O#sneq(&YsH_hXN`K!YBd>!rUFCE zUs3*ip5fl ImageEditorDialog - - - + + + Snapmatic Image Editor @@ -179,7 +179,7 @@ Pictures and Savegames - + Capacity: %1 @@ -204,17 +204,17 @@ Pictures and Savegames - + Patching of Snapmatic Image failed because of I/O Error - + Patching of Snapmatic Image failed because of Image Error - + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. @@ -357,7 +357,7 @@ When you want to use it as Avatar the image will be detached! - + JSON Error @@ -542,7 +542,7 @@ Y: %2 - + Participate in %1 User Statistics @@ -557,60 +557,49 @@ Y: %2 - + Other - - - + + + Participation ID: %1 - + &Copy - - - User Feedback - - - - - Limit: 1 message/day - - - - + Language for Areas - + Style - + Style: - + Font - + Always use Message Font (Windows 2003 and earlier) - + Interface @@ -630,113 +619,108 @@ Y: %2 - - &Send - + + Personal Usage Data + - + Language for Interface - - - - + + + + Current: %1 - + Use Default Style (Restart) - + Apply changes - + &OK OK, Cancel, Apply - + Discard changes - + &Cancel OK, Cancel, Apply - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default - + %1 (Closest to Interface) Next closest language compared to the Interface - + Auto Automatic language choice. - + %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 - - - A feedback message have to between 3-1024 characters long - - PictureDialog @@ -825,7 +809,7 @@ Arrow Keys - Navigate - + No Players @@ -984,28 +968,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! @@ -1075,7 +1059,7 @@ Press 1 for Default View - + @@ -1083,9 +1067,9 @@ Press 1 for Default View - - - + + + @@ -1130,14 +1114,14 @@ Press 1 for Default View - + All image files (%1) - + @@ -1177,14 +1161,14 @@ Press 1 for Default View - + Can't import %1 because file can't be open - + Can't import %1 because file can't be parsed properly @@ -1611,12 +1595,12 @@ Press 1 for Default View - - - - + + + + - + Snapmatic Properties @@ -1662,30 +1646,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 @@ -1715,68 +1699,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: @@ -1830,19 +1814,19 @@ Press 1 for Default View - + JSON is incomplete and malformed - + JSON is incomplete - + JSON is malformed @@ -1975,16 +1959,16 @@ Press 1 for Default View TelemetryDialog - - - %1 User Statistics - - You want help %1 to improve in the future by including personal usage data in your submission? + + + %1 User Statistics + + Yes, I want include personal usage data. @@ -1993,7 +1977,7 @@ Press 1 for Default View &OK - + @@ -2125,7 +2109,7 @@ Press 1 for Default View - + Select GTA V Folder... diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index 2fa3468ab11b2a23c3382815592337f7e72d21f5..3cd7d13d9f76f12152e8d061974916405929c33f 100644 GIT binary patch delta 3050 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 delta 3448 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 diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index 6b1e0df..debd501 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -176,9 +176,9 @@ et les fichiers de sauvegarde de Grand Theft Auto V ImageEditorDialog - - - + + + Snapmatic Image Editor Éditeur d'images Snapmatic @@ -189,7 +189,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V - + Capacity: %1 Capacité : %1 @@ -214,17 +214,17 @@ et les fichiers de sauvegarde de Grand Theft Auto V &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 - + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. Tous les Snapmatic ont une Capacité différente, un Snapmatic avec une haute Capacité peut stocker une image de meilleure qualité. @@ -368,7 +368,7 @@ Si vous l'utilisez comme Avatar, l'image sera détachée !&Fermer - + JSON Error Erreur JSON @@ -559,7 +559,7 @@ Y : %2 - + Participate in %1 User Statistics Participer aux statistiques d'usage %1 @@ -584,168 +584,152 @@ Y : %2 Configuration de l'application - + Other Autres - - - + + + Participation ID: %1 ID de participation : %1 - + &Copy &Copier - - - User Feedback - Feedback utilisateur - - - - Limit: 1 message/day - Limite : 1 message/jour - - - - &Send - &Envoyer - - - + Language for Areas Langage des Zones - + Style Style - + Style: Style : - + Font Police - + Always use Message Font (Windows 2003 and earlier) Toujours utiliser la police Message (Windows 2003 et précédent) - + Interface Interface - + + Personal Usage Data + + + + Language for Interface Langage de l'interface - - - - + + + + Current: %1 Actuel : %1 - + Use Default Style (Restart) Utiliser le Style par Défaut (rédémarrage requis) - + Apply changes Appliquer les changements - + &OK OK, Cancel, Apply &OK - + Discard changes Annuler les changements - + &Cancel OK, Cancel, Apply &Annuler - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (Langage proche) - + System System in context of System default Système - + %1 (Closest to Interface) Next closest language compared to the Interface %1 (Langage proche de l'interface) - + Auto Automatic language choice. Automatique - + %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é - - A feedback message have to between 3-1024 characters long - Un message doit contenir 3 à 1024 charactères - - - + No Profile No Profile, as default Aucun profil - - + + Profile: %1 Profil : %1 @@ -934,7 +918,7 @@ Touches fléchées - Naviguer - + No Players Aucun joueurs @@ -1002,28 +986,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é ! @@ -1093,7 +1077,7 @@ Appuyer sur 1 pour le mode par défaut <h4>Les Snapmatic suivants ont été répaés</h4>%1 - + @@ -1101,9 +1085,9 @@ Appuyer sur 1 pour le mode par défaut Importer... - - - + + + @@ -1137,14 +1121,14 @@ Appuyer sur 1 pour le mode par défaut Photos Snapmatic (PGTA*) - + All image files (%1) Toutes les images (%1) - + @@ -1191,14 +1175,14 @@ Appuyer sur 1 pour le mode par défaut 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 @@ -1637,12 +1621,12 @@ Appuyer sur 1 pour le mode par défaut - - - - + + + + - + Snapmatic Properties Propriétés Snapmatic @@ -1684,7 +1668,7 @@ Appuyer sur 1 pour le mode par défaut - + Snapmatic Title Titre Snapmatic @@ -1694,30 +1678,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 @@ -1747,64 +1731,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 : @@ -1858,19 +1842,19 @@ Appuyer sur 1 pour le mode par défaut lecture du fichier %1 : %2 - + JSON is incomplete and malformed JSON incomplet ou incorrect - + JSON is incomplete JSON incomplet - + JSON is malformed JSON incorrect @@ -2003,16 +1987,16 @@ Appuyer sur 1 pour le mode par défaut TelemetryDialog - - - %1 User Statistics - %1 Statistiques d'usage - You want help %1 to improve in the future by including personal usage data in your submission? + + + %1 User Statistics + + Yes, I want include personal usage data. @@ -2021,7 +2005,7 @@ Appuyer sur 1 pour le mode par défaut &OK - &OK + &OK @@ -2135,7 +2119,7 @@ Appuyer sur 1 pour le mode par défaut - + Select GTA V Folder... diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index 061cd2a28b4ac9361c1d7154e9f182ebdedef03c..16d302ce5d6fa986926de20ae51ea03df57eae87 100644 GIT binary patch delta 3050 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 P>+g1IU-A2vU)BEsWXE-y delta 3517 zcmZWrXIK>H8a+GAmYLaQEhu7LR1AV5AP5*mKq(fi*hNKL6{RR3>W#1#jG{(Gf(`6g zqTE;zyBG_WSg@xUxoTpR7+Z|ptM@E(Z}Q_l`|NXOzM1bW=e+Ox&7+IL?W@8Pr=ZsW zIswWf;vm5JK5;4_KT*-UJs`{k8dw1F8sPQ?pzQ@rH|9n+w&k7zd>nxqZ&hp*35+-a z%$^6~z)7HfYlsWib7uu{2hgM(;^t|<{3?itMBpDzd_-Is3h|N~P^UM<8!pt&{muVGHzF+4NJa-VSQh2SOj<9SwPntD&{_ihuu-bB6#c#2V6?w zVRx9<79MtodE?+=clf0N9>04NgW$QM9H*yFr zd&6EL+eHlo_yVW#U471xx8veA7z*B9zB;OpZ+OHT~haT$o(j3M99 zajQE>`ZbGuYG51K2k;z<88bElO}imG$P2K}!-5@GfN9@j)99MO_$}D?b~2?JiEsC` z1!8k>aifh9W)6uy(N_$xSuIUk z+dqLRX`0N!;XvRFO>PH@9g(le&G?y8P1J0GKnZ`)l=j#Sbdxm|ujp@XbIsLm$v|AH z=Ams>W1#hP&7()Z0JUywo|<-1|Jj1;p*$d9wa~j&6)F5p7`JIq7 zCk9ydR7hR(70^3KSlEWo>kbswjr0M62C10XMc6teh|&eA7@nl!ly8J>?eYPQuaH+M zxY@i%sP{d7P;vZ66_*wX#c}t5lxsq1sXvewD(pSp3`lhm%EXprc7bs0Fo{~eSvb4Q z41^^J6_fbh%1OedM@s?6WZ_?DyHly@!rjeIz>*B1>Op_jc8T!f=0%|IGvQ6=WY|!< zrtr?YHZbdkgS7cNu-M{I_sj>NeT;)kI+<$y#KC{^3m{i;=wCdKjZ)~4kl_lfC~-(E zBD4O39OitaBDyOMiw8<9fsGD({TW#3Hir{&B(P_WL-}Iv?-%WGaRv$2hdI1j%Mz-S zDe9E+4rFYdXo#s~MBT;an`qcrS9G6L3mCgb^nXW5yUh>-LTO-%v)DUuEs)+@oOvUd z0rb!7C^oirFp0&jHUSg8R9uiL7H^Mbn=cV}%pM3xd&EP^C^lh~Shm)W_)@IM_>yrK zt2n8qiVK6qiv6?se3p2x%7xAPiTEJ)5a51Fe0}8{F;;wk(4TIfX+`_~5y4ugt;dzT9TU*$Q`ONI3EzD*> z+419Wwsda>rsI+v(7z&uA?qjE=1i2_~USTa4NgDzf30mdcj_HFG4w6N+<{!DB+ zTz4U&IWv=VcQlK5|3>%r@O75*d%gT3oeFkVar90V(;n!Z#4W(8Jbi;oD(vI0Z*jt= z0Bt(!-QSzAyZObJfw^DpLeN;T0J9ZTkzyQJUM{W0LZTwk*NIj|^3UuwHT z3gbWMj~{1KH2X|{JGw96`ltTh0Wy;?LH~GrTcB{O{=;6@V%9r@Hlm!(;A&`8?nP<# z8$#a}u}0n)!v0tfENyP+v9*E&zJ?)bJp&mTX-GL{Wz%gke0GNtMMfDilPOKtEW-@f zAJ|O32HO@ZAH+{E>~E99IT~RoJAQ@Q>I}#C(~+)=q5LF^FQ%{I*8cA}m{Sc;4lyH3 zXTx(#8PIFK;bZJ@Hb;@Eq6D}+s$BsI>sN2xALEnYX{96lqpoXSAta21^<%>wwL@7G=Ea#k2iq)4;nl;j>3B!Zx+zbDvt&;^7v9-(Upd4tWvRIl8WKQDo*(z z?{8R#N7iGx?1mN?a8y2h^A7g~%4e3BQv!GS+(SBA?INGIrUQMN$QQyiz=Tw}B4ZEx z->|Cs0uusNOq#1=PE)yJ3#D-OlW#QX&l99n{(c*ovAmXl*-dFi4U+FEX~5?bH|u;+IJV&E1v2$QSH_m&%aKzSJT)Q9LagekM?}xsvZ31k4z%6nbXU zj-+DF3Z-Z_8TkCVQhd~&d7^S)c4MBgvT|_tP=2k{Q_7MUP~mW*jSdQ(l#{_#9Q7}i zigadB&{esz+R7tkzH&96pC2=A%3bGpX0BCU9{Q2(=A)u(AEUS`oW&&?rH9ODu$!^w z*O!54tI=t0Z5HP{Vr$ezP$ROsAF4QSy0I{Vfhik}MP_C`*4KFO2_;yz%Xp%dK!aN2 z`R>j@fRh$nqubXV{0UQJk4w*b| z((x=GQ$P+!ZJj47x|NzbhRkKr{M!^_I>tG0&eX4r(hP7j#W=BwyL_eM*f*xB*C`nJ^{aW*q!--(-kf}8H$Rx4m?th`;D+1g6{pGcr>^D=ANvE7f}_maFOUk4 z-_6DU2Hh=E$JziQP%V+R%^1Q zZEGKIUq4IyxVY4~_;hP(nk6wMd2HS>Pv;W1mUj)Y!A!Vqb-MNxBL7OIeRT+S=l`Fi zZ*{Qtr2i(zsYgOmLVA0P&;KH6GdgZswHv+fR(+tm*qnw!n1?qv+gbaYrJ(8@|I5-} zY@7P0SyL@}P1-am*%5RwPTv7; ImageEditorDialog - - - + + + Snapmatic Image Editor Редактор картинок Snapmatic @@ -191,7 +191,7 @@ Pictures and Savegames - + Capacity: %1 Величина: %1 @@ -216,17 +216,17 @@ Pictures and Savegames &Закрыть - + Patching of Snapmatic Image failed because of I/O Error Ðе удалоÑÑŒ изменить картинку Snapmatic из-за ошибки ввода-вывода - + Patching of Snapmatic Image failed because of Image Error Ðе удалоÑÑŒ изменить картинку Snapmatic из-за ошибки Image Error - + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. У каждого отÑнÑтого Snapmatic фото еÑть ÑÐ²Ð¾Ñ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°, в завиÑимоÑти от которой можно Ñохранить картинку Ñ Ð±Ð¾Ð»ÐµÐµ выÑоким качеÑтвом. @@ -371,7 +371,7 @@ When you want to use it as Avatar the image will be detached! &Закрыть - + JSON Error Ошибка JSON @@ -562,7 +562,7 @@ Y: %2 - + Participate in %1 User Statistics УчаÑтвовать в пользовательÑкой ÑтатиÑтике %1 @@ -588,169 +588,153 @@ Y: %2 ÐаÑтройки программы - + Other Другое - - - + + + Participation ID: %1 Ðомер учаÑтника: %1 - + &Copy &Копировать - - - User Feedback - Форма обратной ÑвÑзи - - - - Limit: 1 message/day - Ограничение: 1 Ñообщение в день - - - - &Send - &Отправить - - - + Language for Areas Язык Ð´Ð»Ñ Ð¼ÐµÑтоположений? Язык перевода меÑтоположений - + Style Стиль - + Style: Стиль: - + Font Шрифт - + Always use Message Font (Windows 2003 and earlier) Ð’Ñегда иÑпользовать шрифт Ñообщений (Windows 2003 и ранние) - + Interface Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ - + + Personal Usage Data + + + + Language for Interface Язык интерфейÑа - - - - + + + + Current: %1 СейчаÑ: %1 - + Use Default Style (Restart) ИÑпользовать Ñтандартный Ñтиль (ПерезапуÑк) - + Apply changes Применить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ - + &OK OK, Cancel, Apply &ОК - + Discard changes Отвергнуть Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ - + &Cancel OK, Cancel, Apply От&мена - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + System System in context of System default СиÑтема - + %1 (Closest to Interface) Next closest language compared to the Interface %1 (Совпадает Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñом) - + Auto Automatic language choice. ÐвтоматичеÑки - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. Ð”Ñ€ÑƒÐ³Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° будет загружена поÑле перезапуÑка %1. - + View %1 User Statistics Online ПоÑмотреть пользовательÑкую ÑтатиÑтику %1 онлайн - + Not registered Ðе зарегиÑтрирован - - A feedback message have to between 3-1024 characters long - Сообщение обратное ÑвÑзи не должно быть длинее 1024 Ñимволов - - - + No Profile No Profile, as default Ðет Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - - + + Profile: %1 Профиль: %1 @@ -859,7 +843,7 @@ Arrow Keys - Navigate - + No Players Игроков нет @@ -1007,28 +991,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 уже добавлен! @@ -1087,7 +1071,7 @@ Press 1 for Default View <h4>ÐижеÑледующие картинки Snapmatic были воÑÑтановлены</h4>%1 - + @@ -1095,9 +1079,9 @@ Press 1 for Default View Импортировать... - - - + + + @@ -1131,7 +1115,7 @@ Press 1 for Default View Картинка Snapmatic (PGTA*) - + @@ -1183,21 +1167,21 @@ 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 @@ -1643,12 +1627,12 @@ Press 1 for Default View - - - - + + + + - + Snapmatic Properties СвойÑтва Snapmatic @@ -1689,7 +1673,7 @@ Press 1 for Default View Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² Snapmatic - + Crew: %1 (%2) Банда: %1 (%2) @@ -1700,30 +1684,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 @@ -1753,62 +1737,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: @@ -1862,19 +1846,19 @@ Press 1 for Default View Чтение из файла %1 из-за %2 - + JSON is incomplete and malformed JSON не полный и повреждён - + JSON is incomplete JSON чаÑтично отÑутÑтвует - + JSON is malformed JSON повреждён @@ -2007,16 +1991,16 @@ Press 1 for Default View TelemetryDialog - - - %1 User Statistics - %1 пользовательÑÐºÐ°Ñ ÑтатиÑтика - You want help %1 to improve in the future by including personal usage data in your submission? + + + %1 User Statistics + + Yes, I want include personal usage data. @@ -2025,7 +2009,7 @@ Press 1 for Default View &OK - &ОК + &ОК @@ -2181,7 +2165,7 @@ Press 1 for Default View - + Select GTA V Folder... diff --git a/res/gta5sync_uk.qm b/res/gta5sync_uk.qm index 151097e740dbb2730ab3c8de6101c576353ed35d..6285e03b6b33fb4de2b671de2d838a4485ec6e2b 100644 GIT binary patch delta 3050 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 P(b;Jp9~7_N`JM8A8^wbx delta 3480 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 B&U*j= diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts index d929df7..9410a39 100644 --- a/res/gta5sync_uk.ts +++ b/res/gta5sync_uk.ts @@ -182,7 +182,7 @@ Pictures and Savegames - + Capacity: %1 Величина: %1 @@ -207,24 +207,24 @@ Pictures and Savegames &Закрити - - - + + + 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 Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ Ñ‡ÐµÑ€ÐµÐ· помилку картинки - + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. Кожен знÑтий Snapmatic має різну величину, в залежноÑті від Ñкої можна зберігати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð±Ñ–Ð»ÑŒÑˆ виÑокої ÑкоÑті. @@ -368,7 +368,7 @@ When you want to use it as Avatar the image will be detached! &Закрити - + JSON Error JSON помилка @@ -559,7 +559,7 @@ Y: %2 - + Participate in %1 User Statistics ÐžÐ¿Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ %1 про уÑÑ‚Ð°Ñ‚ÐºÑƒÐ²Ð°Ð½Ð½Ñ ÐŸÐš @@ -584,171 +584,155 @@ Y: %2 ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ - + + Personal Usage Data + + + + Other Інше - - - + + + Participation ID: %1 ID учаÑника : %1 - + &Copy &Копіювати - - - User Feedback - Відгук кориÑтувача - - - - Limit: 1 message/day - Ліміт: 1 Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ / день - - - - &Send - &ÐадіÑлати - - - + Interface Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ - + Language for Interface Мова інтерфейÑу - - - - + + + + Current: %1 Зараз: %1 - + Language for Areas Мова перекладу Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ - + Style Стиль - + Use Default Style (Restart) ВикориÑтовувати Ñтандартний Ñтиль (ПерезапуÑк) - + Style: Стиль: - + Font Шрифт - + Always use Message Font (Windows 2003 and earlier) Завжди викориÑтовуйте шрифт повідомлень (Windows 2003 Ñ– раніше) - + Apply changes ЗаÑтоÑувати зміни - + &OK OK, Cancel, Apply &OK - + Discard changes СкаÑувати зміни - + &Cancel OK, Cancel, Apply &СкаÑувати - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (або наÑтупна найближча мова) - + System System in context of System default Як у ÑиÑтеми - + %1 (Closest to Interface) Next closest language compared to the Interface %1 (Співпадає з інтерфейÑом) - + Auto Automatic language choice. Ðвтоматично - + %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 Ðе зареєÑтрований - - - A feedback message have to between 3-1024 characters long - ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð³ÑƒÐºÑƒ має Ñтановити від 3-1024 Ñимволів - PictureDialog @@ -848,7 +832,7 @@ Arrow Keys - Navigate - + No Players Гравців немає @@ -1002,28 +986,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 вже доданий! @@ -1073,7 +1057,7 @@ Press 1 for Default View ЕкÑпортуєтьÑÑ Ñ„Ð°Ð¹Ð» %1 з %2 файлів - + @@ -1081,9 +1065,9 @@ Press 1 for Default View ІмпортуваннÑ... - - - + + + @@ -1105,14 +1089,14 @@ Press 1 for Default View Імпорт - + All image files (%1) Файли зображень (%1) - + @@ -1120,14 +1104,14 @@ Press 1 for Default View УÑÑ– файли (**) - + Can't import %1 because file can't be open Ðеможливо імпортувати %1, оÑкільки файл не може бути відкритий - + Can't import %1 because file can't be parsed properly @@ -1637,12 +1621,12 @@ Press 1 for Default View - - - - + + + + - + Snapmatic Properties ВлаÑтивоÑті Snapmatic @@ -1713,96 +1697,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) @@ -1810,19 +1794,19 @@ Press 1 for Default View SnapmaticPicture - + JSON is incomplete and malformed JSON неповний та неправильний - + JSON is incomplete JSON неповний - + JSON is malformed JSON неправильний @@ -2001,16 +1985,16 @@ Press 1 for Default View TelemetryDialog - - - %1 User Statistics - %1 СтатиÑтика кориÑтувачів - You want help %1 to improve in the future by including personal usage data in your submission? + + + %1 User Statistics + + Yes, I want include personal usage data. @@ -2019,7 +2003,7 @@ Press 1 for Default View &OK - &OK + &OK @@ -2156,7 +2140,7 @@ Press 1 for Default View - + Select GTA V Folder... diff --git a/res/gta5sync_zh_TW.qm b/res/gta5sync_zh_TW.qm index 90b338e3d5fbc0a7357348667f8769743ee592c1..46c5e09bf33dcd9e4a35f7f260835fb0418726b4 100644 GIT binary patch delta 3054 zcmXX|c|cV48vW+Zy>sU-GZV522(qaNgoKPp$)6JG#4?SSomKe zq97u132+LLxddEHBZG^sWPC!& zU!$PY9h!S(rSM%qDV{n=+G5(97MY_&4{AEp_*q4iAGq{ zw?{^Tz+-By0KsWB)ZK1EAz>Wd-o+86M$-Mf7^0C=RN_ybL=*2Rm>H>HZmr6G9|+n- zstQIvB1(!^Eh|qWa^I}lIOa_v-<7J3i*CT86RJJLz`EV4qZ1B8(I=|5Cnz{mr@9)M zM-+BLb!UqMk@Gy&pQb-=5*a*I_jF$og)U{B>Pm=)KVT+#_CUgY%(Sz8P{NU!6}J+M zU75LS;)(L@nFXKkBYG>7DIS6Un_Xvi%y@&yBSgW8Z!vq{^@nAC3Xc3#!K9Cv{i8~W zRPGA$GE>sa*qdAjDxXJpC>SFun7f9lO7A9$Q!z)68j0cqnPZJEM3X;c>e=B4`%|Xj zBm~P}!?b*6Kz`$yw)uE&-b?1vpPv%RgP31hqTtwGrt1p}qMYYU&+P%Lomz)6zQsPhavr#w zeR0AFBA;?>|9hd)oW%t76u{3M;P457zjGaR1qV3ZLKR zt}>W1W4?y-t0q!AYAo-0VF(H|HsOCE^rtoU&3ded3{6}rBoDc&naSi6O_->u*$d_D z%QU7lH}J>cIL*Z{S9FxCxvqkQgAZt)o%{~OCh%fkA-qgeFyb8r<9G8G>>i@|zw>sT zF+{GdyxWT=tb_IZ>t6!Bz4__6M~V0#K5H2|*Lm|fA$V@UKn256_}uIGEc|U!{_xlF z`Ty-A@-gzu4ptDo^E3a+_Jtr6z?Zg`63yMgS2pAUQ~0lY zX!m5{`|zdO<0IB$0dCgTH(r62)3uGqQHc9Y+k6HY3pCT-twSR=QQC)&^_Yr2?W@!@ zB2z$#V12p)p4ST2KL>-EUT|2{4R5XrL!Y`piBw_uVh|7v3feUZKHkW{8){+H+E9e< zoG|KAEvCRi7+>^Y)#K7Z&Le&UlWXv_8B^Z*%ZW7Mle1&m*DqNZt ziK$5wI=uXdhW#eoO@06Z-;1gq5RS_hRd@Pvhp4l327&FOW3&$zQldDdC;|<%i{8Gy zI54qEd@H*gxJJR8cNJV<6ay-rVMD(ZgVJM(UVBrF?!k+RzGCce$i{0mV$xkb(Spn3 zl;0rj>&asJvE|s{dNGsGkmFEsQv}Y{ty9q2Nx_jV3MMs(#|N1#;n`HNzJo&;>cz9y zt|R@O;<>VBSTIXGe+PvMI>ifFg;@Dr;>EElqL_tZ+oB^#_X!1Kf)t$Ot6=5^v272m z7_eCE7@UABVtQlV>c1s0B8SBIz(|Jfc-d$4lGY=1u)WH@AjhAHT zmolRD1!1Ejp!*FIHev4wOo*{V@&CB~!V_YCO0@`Uf-rmMRZJfsAjZs?+Ga z&`GLY<$zl@L^`o51>^Nps-Fu&1?fN(C>SQ43G6|d7fNk~Xkftt>B_b&+$HZxS4;8x zBkiQrWjzy}+ewe>e#DdoC}?XVvs*%uttBQ|xPy*D++?$Zmx=siWQz~XvB8(g_7bGF zDUt0@+9G5XvWMG4DD{gx!v(~+X1O2=ICiVNv?dL=;01Z@xKdcMR4#iR-)jryauti8 z5l0lv)XC*xASMRMl?HSk6)K;&3k&j0x8x>I1_x%z7ox0jJx`ObJw->>-SVB!5w77? z@{9R6aDIr+uG5Q1>d@KsU@xRS(7E|x{;hI!?$=Ow`dFRcTC7&H3I*+l>jHv5z|>^u zf^`j;|5>`p^{^%=Sr>1C5c@n*&=hrBx40eN%s8vtxECEp)aVW+!t0r-x|&l{k?Kwb z-~L0_G}RK<=y!TnYR27Qs~3OlL`PkEyK`Om!4s|bHDIoNKGuf?Aserm^!dvnvCC%t zkr_Eqwp+p21pTQzyg%Zi!FIMk=Kt+dL*N5QJ*CEw?3RbiMPLP6sD+gPgl{9Y8$!6x`eeISYqdDUR~|#rKuj~@jh35%iCgn NNxO|hb=u-$;eV1FS^fY3 delta 3326 zcmX|Dd015S8vf?YIWu$4nPEgx1OW#Tf?-DxHAPTBlub4f6m@`6iA~wUYd8=tSL9KN zNG;qFQIo4BD&m5PlDUFtYFQMfx5&iGNF$f~;(4xr@Vs+4=iA=*`@Y|=t(5ttoY`nG z{wWbnCK8qdXA=z(fyG4pP6-|LL`)gc&|itz8$`CvL|in{TwPV9ohb`%z0HU;y%JhJ zB$|Jg$grN6=5w&JB(@Ts*l^%MBCCDG)-NMk5?$&25}Spi01eZ7X}<@PF(wWBAt{i759rOYyNE`trj_G8h{7Xi-N8;UR7AVe&55F(Q&WE- zkyjL5JUoUd#GS70G9km1Ub=q+f%vKP^T!;~yfXSdCyK~-gG~6=jVR^~35{hEW{;KG z?n8n$j4Xf5pP+J`tfY1xk!y#nYT^VUzh+rg(T|WSPqv2`NVr>eB;pX!I1gF-6U0jo zmR+BbLlkB$dtmy|j>sWL_VD37BCVV3H_c~6p^c3FiE21>VP?AZfWjY`x##=9L?W{| z_FW`Ahsj{N)!;u z{5>^?Or)K|{Npu*XhFZ6um6hZEs_uW@&%E*liaEROgS{m{R;cwph2F{@NXignevPx zdj!5C&#D8nF7L@#y@VnPM!q4DM+=;mAN50G-ap9C8bIKi26@{C*auX}ua<&f#SZzC z?PwwMXjUP%O$1|ySXF!%(WGna=-qHE)UnP>2csuDSigTD>9|tXKL`$H$FVcVZ6}(g zXUlE|Ac5-YNvxg8V+h;ewi`q(k#Nxlwqbt?#++pjmM0Ra4zMT0R1nt5wruysFs8EY zMeif;ixS40OSssLZ9i6y_r%`su_Cg&#QvOe0z-R`ecE{mxQl&u+z$k6Id;H4bR}o8 zcM}Ly+EPm|UXB)rzLQai}a>aqdT; zZl>Z&=x9`yq3D*a$MZf#|H-eAV1!cWD}aJE63*BrVZygc3w94t{vzdwE-388DV@%m zuyIFkQaV37i!D&8bpH>~dy#T}<`E+0WTmkLOlZ8689^`@JY2$Q?@o%h2MC~?*frv2ya((A5yL3ot`=nEqU%K~_D9Pl>cg&rEv8my2dicZ8j(?Q=2Q*6%WIf0@ZmS@BFo3rN&CpSpikpHi z5&=iW3y!7Jp}8n{`9jmge&Nl9wZM}SzI8yt{6oT|UH#b4FNDd47@|QFgvcJ)C1wgS zKcPoVgPMfIM`lC?QNrw>K&?lWU^u#hNFO4k6DqPFEo`0+$C?TWE$t=rBME0e6^_{q zg>)N*mYW=UqE9$~ryJAot?=chHb|foEj3~N6XfHa9`Bxr) z^@E~|B#gOJDPX?>W24l((f&wv&|V!0V47&Tg4 znRNpW%fw2*cu25atPH)6Gjykf#^++?<-<6Vy2PqyWkhDf#Tv`;XjUJw)^#PmyCva5 zU$O2G7)Y0i4W|bx-zGMf+u=wo7LS+D!IXU}wqzrrf-ay50SfBGa{)bA^$lWs0V>FU zBzA5!;z;>ayk3Lr$Nb0QUCT5qsO#ciC%(bBO_I?1nwtGE1S|Eanty6tJZv%gtpz9Nr7w7G+Q)*nlsn~+cj}5kS4H76K{bo_H~soa-^pC2Ba~(&{XY3 zg)@3J2WLU+^!GJQr;>0B87g6@gXV0~Q20@sv0@v}j2M%d@J$ygx@$J#%e%PmM4I_( zG1p_xnT1Zqm<=+S<*oq5qdUwFFUWvIHWJ2Gnw`pl18-Jq{T7%AxvUNN15_vVYLlIF zaOjNFrY`M+eXlmB^AIk~?b;>lk+`x~yZJnrcHg4?_+vc3eFI>gu(3M|}ndVcOsAQ1R#hZQn - + Capacity: %1 大å°: %1 @@ -206,24 +206,24 @@ Pictures and Savegames 關閉(&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 圖片更新失敗 - + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. æ¯å¼µ Snapmatic 大å°çš†ä¸åŒï¼Œé€šå¸¸è¼ƒå¤§çš„ Snapmatic 圖片å“質較佳。 @@ -366,7 +366,7 @@ When you want to use it as Avatar the image will be detached! 關閉(&C) - + JSON Error JSON 錯誤 @@ -557,7 +557,7 @@ Y: %2 - + Participate in %1 User Statistics åƒèˆ‡ %1 使用者統計 @@ -582,171 +582,155 @@ Y: %2 應用程å¼è¨­å®š - + + Personal Usage Data + + + + Other å…¶ä»– - - - + + + Participation ID: %1 åƒèˆ‡ ID: %1 - + &Copy 複製(&C) - - - User Feedback - 使用者å饋 - - - - Limit: 1 message/day - 一天åªèƒ½ä¸€å‰‡è¨Šæ¯ - - - - &Send - é€å‡º(&S) - - - + Interface ä»‹é¢ - + Language for Interface 介é¢èªžè¨€ - - - - + + + + Current: %1 ç›®å‰: %1 - + Language for Areas å€åŸŸèªžè¨€ - + Style 風格 - + Use Default Style (Restart) 使用é è¨­é¢¨æ ¼ (éœ€é‡æ–°å•Ÿå‹•) - + Style: 風格: - + Font å­—é«” - + Always use Message Font (Windows 2003 and earlier) 總是使用訊æ¯å­—é«” (Windows 2003 和更早版本) - + Apply changes 套用變更 - + &OK OK, Cancel, Apply 確定(&O) - + Discard changes æ¨æ£„變更 - + &Cancel OK, Cancel, Apply å–æ¶ˆ(&C) - + %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (接近的語言) - + System System in context of System default 系統 - + %1 (Closest to Interface) Next closest language compared to the Interface %1 (èˆ‡ä»‹é¢æŽ¥è¿‘çš„èªžè¨€) - + Auto Automatic language choice. 自動 - + %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 未註冊åƒèˆ‡ - - - A feedback message have to between 3-1024 characters long - å饋訊æ¯å¿…須在 3 到 1024 個字之間 - PictureDialog @@ -846,7 +830,7 @@ Arrow Keys - Navigate - + No Players ç„¡ @@ -1000,28 +984,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 已被新增! @@ -1071,7 +1055,7 @@ Press 1 for Default View 匯出檔案中 %1 å…± %2 個檔案 - + @@ -1079,9 +1063,9 @@ Press 1 for Default View 匯入... - - - + + + @@ -1103,14 +1087,14 @@ Press 1 for Default View 匯入 - + All image files (%1) 所有圖片 (%1) - + @@ -1118,14 +1102,14 @@ Press 1 for Default View 所有檔案 (**) - + Can't import %1 because file can't be open 無法匯入 %1,因為檔案無法開啟 - + Can't import %1 because file can't be parsed properly @@ -1631,12 +1615,12 @@ Press 1 for Default View - - - - + + + + - + Snapmatic Properties Snapmatic 屬性 @@ -1707,96 +1691,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) @@ -1804,19 +1788,19 @@ Press 1 for Default View SnapmaticPicture - + JSON is incomplete and malformed JSON ä¸å®Œæ•´å’Œç•°å¸¸ - + JSON is incomplete JSON ä¸å®Œæ•´ - + JSON is malformed JSON 異常 @@ -1995,16 +1979,16 @@ Press 1 for Default View TelemetryDialog - - - %1 User Statistics - %1 使用者統計 - You want help %1 to improve in the future by including personal usage data in your submission? + + + %1 User Statistics + + Yes, I want include personal usage data. @@ -2013,7 +1997,7 @@ Press 1 for Default View &OK - 確定(&O) + 確定(&O) @@ -2150,7 +2134,7 @@ Press 1 for Default View - + Select GTA V Folder... From 609efb7fba50094b52826ae83a63f89920ab7128 Mon Sep 17 00:00:00 2001 From: Syping Date: Sat, 9 Jun 2018 19:18:51 +0200 Subject: [PATCH 108/359] update README, Qt translation --- README.md | 2 +- res/qtbase_uk.qm | Bin 158434 -> 158264 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c903a67..4f918c2 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Grand Theft Auto V Savegame and Snapmatic viewer/editor #### Build gta5view for Windows (Beginner) Download the [Qt Framework](https://www.qt.io/) and install the MinGW version. -Download the Source Code over [GitHub](https://github.com/SyDevTeam/gta5view/archive/1.5.x.zip) or with your Git client. +Download the Source Code over the Repository or with your Git client. Open the gta5view.pro Project file with Qt Creator and build it over Qt Creator. #### Download Binary Releases diff --git a/res/qtbase_uk.qm b/res/qtbase_uk.qm index e24be7f3d7c6b9efcb8eecd84b4774ebe6b9d744..7d588e99f3f91e3172845beb084e4d062a583e45 100644 GIT binary patch delta 7809 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

Y2nG?_+Z6P16ZbN~y2a#Qvlpj#8= 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 delta 7993 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 hHm(u9{d+0>|6l6&2miB3@Y0xB%xv$&1lIr8{{t Date: Sat, 9 Jun 2018 20:38:12 +0200 Subject: [PATCH 109/359] compress global files --- main.cpp | 3 +++ res/app.qrc | 14 +------------- res/global.qrc | 17 +++++++++++++++++ res/global.rcc | Bin 0 -> 16864 bytes 4 files changed, 21 insertions(+), 13 deletions(-) create mode 100644 res/global.qrc create mode 100644 res/global.rcc diff --git a/main.cpp b/main.cpp index c4c4be4..5b58da3 100644 --- a/main.cpp +++ b/main.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -291,6 +292,8 @@ int main(int argc, char *argv[]) QObject::connect(&threadDB, SIGNAL(finished()), &a, SLOT(quit())); threadDB.start(); + QResource::registerResource(":/global/global.rcc"); + UserInterface uiWindow(&profileDB, &crewDB, &threadDB); uiWindow.setWindowIcon(IconLoader::loadingAppIcon()); uiWindow.setupDirEnv(); diff --git a/res/app.qrc b/res/app.qrc index 82eeaa5..6267979 100644 --- a/res/app.qrc +++ b/res/app.qrc @@ -24,19 +24,7 @@ watermarkdark.png - global.de.ini - global.en.ini - global.es.ini - global.es_MX.ini - global.fr.ini - global.it.ini - global.ja.ini - global.ko.ini - global.pl.ini - global.pt.ini - global.ru.ini - global.zh.ini - global.zh.loc + global.rcc template.g5e diff --git a/res/global.qrc b/res/global.qrc new file mode 100644 index 0000000..424d0ab --- /dev/null +++ b/res/global.qrc @@ -0,0 +1,17 @@ + + + global.de.ini + global.en.ini + global.es.ini + global.es_MX.ini + global.fr.ini + global.it.ini + global.ja.ini + global.ko.ini + global.pl.ini + global.pt.ini + global.ru.ini + global.zh.ini + global.zh.loc + + diff --git a/res/global.rcc b/res/global.rcc new file mode 100644 index 0000000000000000000000000000000000000000..c064e239c5fd3e2a5e21f52ddc0a076bc9021cbd GIT binary patch literal 16864 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 G6#oyx;m5}S literal 0 HcmV?d00001 From a33bc8145bcb81b11b9b58a1d7836732d81864b0 Mon Sep 17 00:00:00 2001 From: Syping Date: Sat, 9 Jun 2018 21:16:33 +0200 Subject: [PATCH 110/359] make depend for resource generation --- .gitignore | 3 +++ .travis/debian_build.sh | 2 ++ .travis/osx_build.sh | 1 + .travis/windows_build.sh | 1 + .travis/wininstall_build.sh | 1 + gta5view.pro | 6 ++++++ res/global.rcc | Bin 16864 -> 0 bytes 7 files changed, 14 insertions(+) delete mode 100644 res/global.rcc diff --git a/.gitignore b/.gitignore index 023ea2a..717ea76 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,6 @@ # Qt project user file *.pro.user + +# Qt resource file +*.rcc diff --git a/.travis/debian_build.sh b/.travis/debian_build.sh index 4d7598b..d9d88b2 100755 --- a/.travis/debian_build.sh +++ b/.travis/debian_build.sh @@ -22,10 +22,12 @@ mkdir -p /usr/share/gta5view && \ # Starting build cd qt5 && \ qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \ +make depend && \ make -j 4 && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=${PROJECT_DIR}/assets && \ cd .. && \ cd qt4 && \ qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT4} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ +make depend && \ make -j 4 && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=${PROJECT_DIR}/assets diff --git a/.travis/osx_build.sh b/.travis/osx_build.sh index 8a5663d..1fae647 100755 --- a/.travis/osx_build.sh +++ b/.travis/osx_build.sh @@ -9,6 +9,7 @@ mkdir -p assets && \ cd build && \ /usr/local/opt/qt/bin/qmake ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ +make depend && \ make -j 4 && \ /usr/local/opt/qt/bin/macdeployqt gta5view.app -dmg && \ cp -Rf gta5view.dmg ../assets/gta5view-osx_${APPLICATION_VERSION}.dmg diff --git a/.travis/windows_build.sh b/.travis/windows_build.sh index e64cac3..8b03d2d 100755 --- a/.travis/windows_build.sh +++ b/.travis/windows_build.sh @@ -13,6 +13,7 @@ mkdir -p assets && \ # Starting build cd build && \ qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ +make depend && \ make -j 4 && \ cp -Rf release/*.exe ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} && \ cd ${PROJECT_DIR}/assets && \ diff --git a/.travis/wininstall_build.sh b/.travis/wininstall_build.sh index 1ca3622..4b0bb7f 100755 --- a/.travis/wininstall_build.sh +++ b/.travis/wininstall_build.sh @@ -12,6 +12,7 @@ mkdir -p assets && \ # Starting build cd build && \ qmake ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_INLANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_LANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_PLUG='\\\"RUNDIR:SEPARATOR:plugins\\\"' ../gta5view.pro && \ +make depend && \ make -j 4 && \ cd ${PROJECT_DIR}/assets && \ makensis -NOCD ${PROJECT_DIR}/.travis/gta5view.nsi && \ diff --git a/gta5view.pro b/gta5view.pro index eb4ddd5..ffd2a30 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -191,6 +191,12 @@ isEqual(QT_MAJOR_VERSION, 4): RESOURCES += res/tr_qt4.qrc # QT5 ONLY STUFF isEqual(QT_MAJOR_VERSION, 5): RESOURCES += res/tr_qt5.qrc +# RESOURCE COMPILATION + +depend.depends += $$PWD/res/global.qrc +depend.commands += rcc -binary -compress 9 -threshold 0 $$PWD/res/global.qrc -o $$PWD/res/global.rcc +QMAKE_EXTRA_TARGETS += depend + # PROJECT INSTALLATION isEmpty(GTA5SYNC_PREFIX): GTA5SYNC_PREFIX = /usr/local diff --git a/res/global.rcc b/res/global.rcc deleted file mode 100644 index c064e239c5fd3e2a5e21f52ddc0a076bc9021cbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16864 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 G6#oyx;m5}S From 867281f80a97efd6cf1d3cd53510dbeac62e80ee Mon Sep 17 00:00:00 2001 From: Syping Date: Sat, 9 Jun 2018 21:25:05 +0200 Subject: [PATCH 111/359] deliver precompiled Resource again --- .gitignore | 3 --- res/global.rcc | Bin 0 -> 16864 bytes 2 files changed, 3 deletions(-) create mode 100644 res/global.rcc diff --git a/.gitignore b/.gitignore index 717ea76..023ea2a 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,3 @@ # Qt project user file *.pro.user - -# Qt resource file -*.rcc diff --git a/res/global.rcc b/res/global.rcc new file mode 100644 index 0000000000000000000000000000000000000000..7fc6f1d405629f6e3003dae93dea7719bebedeea GIT binary patch literal 16864 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 literal 0 HcmV?d00001 From e6c8a48e12ea72c89f4895bfe52f8f2debeae1e4 Mon Sep 17 00:00:00 2001 From: Syping Date: Sat, 9 Jun 2018 21:53:28 +0200 Subject: [PATCH 112/359] use RCC path --- gta5view.pro | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gta5view.pro b/gta5view.pro index ffd2a30..c44734d 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -187,14 +187,17 @@ isEqual(QT_MAJOR_VERSION, 4): SOURCES += qjson4/QJsonArray.cpp \ qjson4/QJsonParser.cpp isEqual(QT_MAJOR_VERSION, 4): RESOURCES += res/tr_qt4.qrc +isEqual(QT_MAJOR_VERSION, 4): GTA5SYNC_RCC = $$[QT_INSTALL_BINS]/rcc # QT5 ONLY STUFF + isEqual(QT_MAJOR_VERSION, 5): RESOURCES += res/tr_qt5.qrc +isEqual(QT_MAJOR_VERSION, 5): GTA5SYNC_RCC = $$[QT_HOST_BINS]/rcc # RESOURCE COMPILATION depend.depends += $$PWD/res/global.qrc -depend.commands += rcc -binary -compress 9 -threshold 0 $$PWD/res/global.qrc -o $$PWD/res/global.rcc +depend.commands += $$GTA5SYNC_RCC -binary -threshold 0 -compress 9 $$PWD/res/global.qrc -o $$PWD/res/global.rcc QMAKE_EXTRA_TARGETS += depend # PROJECT INSTALLATION From 24ca6675371846f0e6e70850ba82564701fd4757 Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 10 Jun 2018 01:53:08 +0200 Subject: [PATCH 113/359] add basic configure script --- configure | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100755 configure diff --git a/configure b/configure new file mode 100755 index 0000000..530b5dc --- /dev/null +++ b/configure @@ -0,0 +1,89 @@ +#!/bin/bash +#***************************************************************************** +# gta5view Grand Theft Auto V Profile Viewer +# Copyright (C) 2018 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 +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +#***************************************************************************** + +# Initialise bash script +set +e +EXTRA_ARGS= + +# Find Source Directory +SOURCE=${BASH_SOURCE[0]} +while [ -h "$SOURCE" ]; do + SOURCE_DIR=$(cd -P "$(dirname "$SOURCE")" && pwd) + SOURCE=$(readlink "$SOURCE") + [[ $SOURCE != /* ]] && SOURCE="${SOURCE_DIR}/${SOURCE}" +done +SOURCE_DIR=$(cd -P "$(dirname "$SOURCE")" && pwd) + +# Find Qt Installation +QT_SELECT=qt5 +if [ -x "${QMAKE_PATH}" ]; then + QMAKE_PATH=${QMAKE_PATH} + QT_VERSION=$(${QMAKE_PATH} -query "QT_VERSION") +elif [ -x "$(command -v qmake-qt5)" ]; then + QMAKE_PATH=$(command -v qmake-qt5) + QT_VERSION=$(${QMAKE_PATH} -query "QT_VERSION") +elif [ -x "$(command -v qmake)" ]; then + QMAKE_PATH=$(command -v qmake) + QT_VERSION=$(${QMAKE_PATH} -query "QT_VERSION") +else + QMAKE_PATH=$(find /usr/ -executable -name qmake -type f 2> /dev/null | sed -n 1p) + if [ "${QMAKE_PATH}" == "" ]; then + echo "Qt qmake not found" + exit 1 + fi + QT_VERSION=$(${QMAKE_PATH} -query "QT_VERSION") +fi +echo "Found Qt ${QT_VERSION} with qmake located at ${QMAKE_PATH}" + +# Find Make Installation +if [ -x "${MAKE_PATH}" ]; then + MAKE_PATH=${MAKE_PATH} +elif [ -x "$(command -v make)" ]; then + MAKE_PATH=$(command -v make) +else + MAKE_PATH=$(find /usr/ -executable -name make -type f 2> /dev/null | sed -n 1p) + if [ "${MAKE_PATH}" == "" ]; then + echo "Make not found" + exit 1 + fi +fi + +# Clean Makefile +if [ ! "${RUN_MAKE_CLEAN}" == "NO" ]; then + if [ -f "Makefile" ]; then + echo "${MAKE_PATH} distclean" + ${MAKE_PATH} distclean + fi +fi + +# Set Prefix +if [ ! "${PREFIX}" == "" ]; then + EXTRA_ARGS="${EXTRA_ARGS} GTA5SYNC_PREFIX=${PREFIX}" +fi + +# Generating Makefile +echo "${QMAKE_PATH}${EXTRA_ARGS} ${SOURCE_DIR}/gta5view.pro" +${QMAKE_PATH}${EXTRA_ARGS} ${SOURCE_DIR}/gta5view.pro + +# Make dependencies +if [ ! "${RUN_MAKE_DEPEND}" == "NO" ]; then + echo "${MAKE_PATH} depend" + ${MAKE_PATH} depend +fi +exit 0 From 681e76737e278bab92dab2b605f0c7b695f4a401 Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 10 Jun 2018 01:56:55 +0200 Subject: [PATCH 114/359] fix indentation --- .gitlab/wininstall_build.sh | 28 ++++++++++++++++++++++++++++ configure | 4 ++-- 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 .gitlab/wininstall_build.sh diff --git a/.gitlab/wininstall_build.sh b/.gitlab/wininstall_build.sh new file mode 100644 index 0000000..1197b9e --- /dev/null +++ b/.gitlab/wininstall_build.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +apt-get update -qq && \ +apt-get install -qq lua nsis && \ + +export PACKAGE_CODE=GitLab && \ + +if [ `git name-rev --tags --name-only $(git rev-parse HEAD)` == "undefined" ]; then export APPLICATION_VERSION=`lua -e 'for line in io.lines("config.h") do local m = string.match(line, "#define GTA5SYNC_APPVER \"(.+)\"$"); if m then print(m); os.exit(0) end end'`; else export APPLICATION_VERSION=`git name-rev --tags --name-only $(git rev-parse HEAD)`; fi +export PACKAGE_VERSION=$(grep -oE '^[^\-]*' <<< $APPLICATION_VERSION) && \ +export PACKAGE_BUILD=$(grep -oP '\-\K.+' <<< $APPLICATION_VERSION) && \ +export EXECUTABLE_VERSION=${PACKAGE_VERSION}${PACKAGE_BUILD}${EXECUTABLE_TAG} && \ +if [[ ! ${PACKAGE_BUILD} ]]; then export PACKAGE_BUILD=1; fi + +export PROJECT_DIR=$(pwd) && \ + +# Creating folders +cd ${PROJECT_DIR} && \ +echo "gta5view build version is ${APPLICATION_VERSION}" && \ +mkdir -p build && \ +mkdir -p assets && \ + +# Starting build +cd build && \ +qmake ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_INLANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_LANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_PLUG='\\\"RUNDIR:SEPARATOR:plugins\\\"' ../gta5view.pro && \ +make -j 4 && \ +cd ${PROJECT_DIR}/assets && \ +makensis -NOCD ${PROJECT_DIR}/.travis/gta5view.nsi && \ +mv -f gta5view_setup.exe gta5view-${EXECUTABLE_VERSION}_setup.exe diff --git a/configure b/configure index 530b5dc..0009205 100755 --- a/configure +++ b/configure @@ -45,7 +45,7 @@ else QMAKE_PATH=$(find /usr/ -executable -name qmake -type f 2> /dev/null | sed -n 1p) if [ "${QMAKE_PATH}" == "" ]; then echo "Qt qmake not found" - exit 1 + exit 1 fi QT_VERSION=$(${QMAKE_PATH} -query "QT_VERSION") fi @@ -60,7 +60,7 @@ else MAKE_PATH=$(find /usr/ -executable -name make -type f 2> /dev/null | sed -n 1p) if [ "${MAKE_PATH}" == "" ]; then echo "Make not found" - exit 1 + exit 1 fi fi From fd5ce958bdb09e3ad80b1f0dc92d780df8695f32 Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 10 Jun 2018 02:00:20 +0200 Subject: [PATCH 115/359] remove .gitlab folder --- .gitlab/wininstall_build.sh | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 .gitlab/wininstall_build.sh diff --git a/.gitlab/wininstall_build.sh b/.gitlab/wininstall_build.sh deleted file mode 100644 index 1197b9e..0000000 --- a/.gitlab/wininstall_build.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -apt-get update -qq && \ -apt-get install -qq lua nsis && \ - -export PACKAGE_CODE=GitLab && \ - -if [ `git name-rev --tags --name-only $(git rev-parse HEAD)` == "undefined" ]; then export APPLICATION_VERSION=`lua -e 'for line in io.lines("config.h") do local m = string.match(line, "#define GTA5SYNC_APPVER \"(.+)\"$"); if m then print(m); os.exit(0) end end'`; else export APPLICATION_VERSION=`git name-rev --tags --name-only $(git rev-parse HEAD)`; fi -export PACKAGE_VERSION=$(grep -oE '^[^\-]*' <<< $APPLICATION_VERSION) && \ -export PACKAGE_BUILD=$(grep -oP '\-\K.+' <<< $APPLICATION_VERSION) && \ -export EXECUTABLE_VERSION=${PACKAGE_VERSION}${PACKAGE_BUILD}${EXECUTABLE_TAG} && \ -if [[ ! ${PACKAGE_BUILD} ]]; then export PACKAGE_BUILD=1; fi - -export PROJECT_DIR=$(pwd) && \ - -# Creating folders -cd ${PROJECT_DIR} && \ -echo "gta5view build version is ${APPLICATION_VERSION}" && \ -mkdir -p build && \ -mkdir -p assets && \ - -# Starting build -cd build && \ -qmake ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_INLANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_LANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_PLUG='\\\"RUNDIR:SEPARATOR:plugins\\\"' ../gta5view.pro && \ -make -j 4 && \ -cd ${PROJECT_DIR}/assets && \ -makensis -NOCD ${PROJECT_DIR}/.travis/gta5view.nsi && \ -mv -f gta5view_setup.exe gta5view-${EXECUTABLE_VERSION}_setup.exe From 1f1025787eb4c1484ba7e0a17acb17b8ac4e4240 Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 10 Jun 2018 02:11:49 +0200 Subject: [PATCH 116/359] fix QT_SELECT --- configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure b/configure index 0009205..962a1d1 100755 --- a/configure +++ b/configure @@ -31,7 +31,7 @@ done SOURCE_DIR=$(cd -P "$(dirname "$SOURCE")" && pwd) # Find Qt Installation -QT_SELECT=qt5 +export QT_SELECT=qt5 if [ -x "${QMAKE_PATH}" ]; then QMAKE_PATH=${QMAKE_PATH} QT_VERSION=$(${QMAKE_PATH} -query "QT_VERSION") From bcd7e3cd15b04418cfce4b86ca3d7457a1a82480 Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 10 Jun 2018 02:19:11 +0200 Subject: [PATCH 117/359] update readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4f918c2..9daace9 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,9 @@ Grand Theft Auto V Savegame and Snapmatic viewer/editor # Note: You can use 'sudo make install' instead of 'sudo checkinstall' sudo apt-get install git gcc g++ qtbase5-dev qttranslations5-l10n qt5-qmake make checkinstall - git clone https://github.com/SyDevTeam/gta5view && cd gta5view + git clone https://gitlab.com/Syping/gta5view && cd gta5view mkdir -p build && cd build - qmake -qt=5 GTA5SYNC_PREFIX=/usr ../gta5view.pro # or just qmake GTA5SYNC_PREFIX=/usr ../gta5view.pro + PREFIX=/usr ../configure make -j $(nproc --all) sudo checkinstall --pkgname=gta5view --pkggroup=utility --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n From cde4b380f822c02c4515a08b64b890d71702fdfe Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 12 Jun 2018 06:30:08 +0200 Subject: [PATCH 118/359] update configure to accept arguments --- configure | 81 ++++++++++++++++++++++++++++++++++++++++++++++--- res/global.rcc | Bin 16864 -> 16984 bytes 2 files changed, 76 insertions(+), 5 deletions(-) diff --git a/configure b/configure index 962a1d1..ff9878e 100755 --- a/configure +++ b/configure @@ -17,9 +17,80 @@ # along with this program. If not, see . #***************************************************************************** -# Initialise bash script +# Argbash generated code +die() +{ + local _ret=$2 + test -n "$_ret" || _ret=1 + test "$_PRINT_HELP" = yes && print_help >&2 + echo "$1" >&2 + exit ${_ret} +} +begins_with_short_option() +{ + local first_option all_short_options + all_short_options='h' + first_option="${1:0:1}" + test "$all_short_options" = "${all_short_options/$first_option/}" && return 1 || return 0 +} +_arg_prefix= +_arg_qmake= +print_help () +{ + printf '%s\n' "gta5view Configure Script" + printf 'Usage: %s [--prefix ] [--qmake ] [-h|--help]\n' "$0" + printf '\t%s\n' "-h,--help: Prints help" +} +parse_commandline () +{ + while test $# -gt 0 + do + _key="$1" + case "$_key" in + --prefix) + test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1 + _arg_prefix="$2" + shift + ;; + --prefix=*) + _arg_prefix="${_key##--prefix=}" + ;; + --qmake) + test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1 + _arg_qmake="$2" + shift + ;; + --qmake=*) + _arg_qmake="${_key##--qmake=}" + ;; + -h|--help) + print_help + exit 0 + ;; + -h*) + print_help + exit 0 + ;; + *) + _PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1'" 1 + ;; + esac + shift + done +} +parse_commandline "$@" + +# Initialise bash script - Step 1 +if [ ! "${_arg_prefix}" == "" ]; then + PREFIX=${_arg_prefix} +fi +if [ ! "${_arg_qmake}" == "" ]; then + QMAKE_PATH=${_arg_qmake} +fi + +# Initialise bash script - Step 2 set +e -EXTRA_ARGS= +_extra_args= # Find Source Directory SOURCE=${BASH_SOURCE[0]} @@ -74,12 +145,12 @@ fi # Set Prefix if [ ! "${PREFIX}" == "" ]; then - EXTRA_ARGS="${EXTRA_ARGS} GTA5SYNC_PREFIX=${PREFIX}" + _extra_args="${_extra_args} GTA5SYNC_PREFIX=${PREFIX}" fi # Generating Makefile -echo "${QMAKE_PATH}${EXTRA_ARGS} ${SOURCE_DIR}/gta5view.pro" -${QMAKE_PATH}${EXTRA_ARGS} ${SOURCE_DIR}/gta5view.pro +echo "${QMAKE_PATH}${_extra_args} ${SOURCE_DIR}/gta5view.pro" +${QMAKE_PATH}${_extra_args} ${SOURCE_DIR}/gta5view.pro # Make dependencies if [ ! "${RUN_MAKE_DEPEND}" == "NO" ]; then diff --git a/res/global.rcc b/res/global.rcc index 7fc6f1d405629f6e3003dae93dea7719bebedeea..60cc68801121025d06d78b3326065fa3a7e53df6 100644 GIT binary patch delta 445 zcmaFR%y^@Pk)yCEwU~i{foUU$66@w`Dj!)k3tPIdZMNpW%(_{Vm5Fup9w{lV%{TNO zux#cRUCX*zn@fmw^A6)^*3HK?`B^82+Z#^~a8R85(LrwVNqfb~UG@r-xg6XkPjFC} z{0hik1;iU1948k#$khX_VPFDcMkogHApj)G3&bEA1}?$WDcA$GBtP4_`#ex;6HHWE z7D;pxOjJw;NmK|X3Nn&0xgKi7516p3IYKd`1x!@`2vqa}ke&e(wK778G8Dl?1-y_% vjbNgz!cbA5gBc}YqFUbKNQ#4C!d$EfQN{?EsL3@X(F$;o07K16111Up*9l>a delta 324 zcmcc7!uX(>k)yCEwU~i{fpH^;66=hxoaq?<=xq6^A3``)qpcumAg^FH+iOU}cifn@Mq?Q7CMlc?$Fpwt%;{n+W zj21AS-a#NY2*%?Q0m@0hc$ynQQbjN>zZy{K4;W8nKae*G#uNDg)Hnmiv-k_-MZkE* Q3xT`}plTq+z+mwi05(K6WdHyG From c7ec038e26b7a1f34ec63c735814a05255e1fa34 Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 12 Jun 2018 06:37:05 +0200 Subject: [PATCH 119/359] don't do make depend automatically --- configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure b/configure index ff9878e..f020761 100755 --- a/configure +++ b/configure @@ -153,7 +153,7 @@ echo "${QMAKE_PATH}${_extra_args} ${SOURCE_DIR}/gta5view.pro" ${QMAKE_PATH}${_extra_args} ${SOURCE_DIR}/gta5view.pro # Make dependencies -if [ ! "${RUN_MAKE_DEPEND}" == "NO" ]; then +if [ "${RUN_MAKE_DEPEND}" == "YES" ]; then echo "${MAKE_PATH} depend" ${MAKE_PATH} depend fi From 291236ff2c10fb7a3c08fcdecf87130ef612b062 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 14 Jun 2018 11:36:01 +0200 Subject: [PATCH 120/359] better and more efficient uid generation --- ProfileInterface.cpp | 47 ++++++++++++++++++++++++-------------------- ProfileInterface.h | 3 ++- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 0684f50..b26e33c 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -56,6 +56,8 @@ #include #include +#include + #define importTimeFormat "HHmmss" #define findRetryLimit 500 @@ -496,8 +498,7 @@ fileDialogPreOpen: //Work? { QString selectedFile = selectedFiles.at(0); QDateTime importDateTime = QDateTime::currentDateTime(); - int currentTime = importDateTime.toString(importTimeFormat).toInt(); - if (!importFile(selectedFile, importDateTime, ¤tTime, true)) goto fileDialogPreOpen; //Work? + if (!importFile(selectedFile, importDateTime, true)) goto fileDialogPreOpen; //Work? } else if (selectedFiles.length() > 1) { @@ -540,14 +541,13 @@ void ProfileInterface::importFilesProgress(QStringList selectedFiles) // THREADING HERE PLEASE QDateTime importDateTime = QDateTime::currentDateTime(); - int currentTime = importDateTime.time().toString(importTimeFormat).toInt(); for (QString selectedFile : selectedFiles) { overallId++; pbDialog.setValue(overallId); pbDialog.setLabelText(tr("Import file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId))); importDateTime = QDateTime::currentDateTime(); - if (!importFile(selectedFile, importDateTime, ¤tTime, false)) + if (!importFile(selectedFile, importDateTime, false)) { failed << QFileInfo(selectedFile).fileName(); } @@ -565,12 +565,12 @@ void ProfileInterface::importFilesProgress(QStringList selectedFiles) } } -bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime, int *currentTime, bool notMultiple) +bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime, bool notMultiple) { QString selectedFileName = QFileInfo(selectedFile).fileName(); if (QFile::exists(selectedFile)) { - if (selectedFileName.left(4) == "PGTA" || selectedFileName.right(4) == ".g5e") + if ((selectedFileName.left(4) == "PGTA" && !selectedFileName.contains('.')) || selectedFileName.right(4) == ".g5e") { SnapmaticPicture *picture = new SnapmaticPicture(selectedFile); if (picture->readingPicture(true, true, true)) @@ -602,7 +602,7 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime return false; } } - else if(isSupportedImageFile(selectedFileName)) + else if (isSupportedImageFile(selectedFileName)) { SnapmaticPicture *picture = new SnapmaticPicture(":/template/template.g5e"); if (picture->readingPicture(true, false, true, false)) @@ -673,17 +673,16 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime return false; } SnapmaticProperties spJson = picture->getSnapmaticProperties(); - spJson.uid = QString(QString::number(*currentTime) % - QString::number(importDateTime.date().dayOfYear())).toInt(); + spJson.uid = getRandomUid(); bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); + bool fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak"); bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); int cEnough = 0; - while ((fExists || fExistsHidden) && cEnough < findRetryLimit) + while ((fExists || fExistsBackup || fExistsHidden) && cEnough < findRetryLimit) { - *currentTime = *currentTime - 1; - spJson.uid = QString(QString::number(*currentTime) % - QString::number(importDateTime.date().dayOfYear())).toInt(); + spJson.uid = getRandomUid(); fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); + fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak"); fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); cEnough++; } @@ -728,17 +727,16 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime if (picture->setImage(importDialog->image())) { SnapmaticProperties spJson = picture->getSnapmaticProperties(); - spJson.uid = QString(QString::number(*currentTime) % - QString::number(importDateTime.date().dayOfYear())).toInt(); + spJson.uid = getRandomUid(); bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); + bool fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak"); bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); int cEnough = 0; - while ((fExists || fExistsHidden) && cEnough < findRetryLimit) + while ((fExists || fExistsBackup || fExistsHidden) && cEnough < findRetryLimit) { - *currentTime = *currentTime - 1; - spJson.uid = QString(QString::number(*currentTime) % - QString::number(importDateTime.date().dayOfYear())).toInt(); + spJson.uid = getRandomUid(); fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); + fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak"); fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); cEnough++; } @@ -1337,8 +1335,7 @@ void ProfileInterface::on_saProfileContent_dropped(const QMimeData *mimeData) { QString selectedFile = pathList.at(0); QDateTime importDateTime = QDateTime::currentDateTime(); - int currentTime = importDateTime.toString(importTimeFormat).toInt(); - importFile(selectedFile, QDateTime::currentDateTime(), ¤tTime, true); + importFile(selectedFile, QDateTime::currentDateTime(), true); } else if (pathList.length() > 1) { @@ -1945,3 +1942,11 @@ preSelectionTitle: break; } } + +int ProfileInterface::getRandomUid() +{ + std::mt19937 rng; + rng.seed(std::random_device()()); + std::uniform_int_distribution uiddist(10000000, 2147483647); + return uiddist(rng); +} diff --git a/ProfileInterface.h b/ProfileInterface.h index 667d1f1..4aef151 100644 --- a/ProfileInterface.h +++ b/ProfileInterface.h @@ -113,7 +113,7 @@ private: int contentMode; bool isSupportedImageFile(QString selectedFileName); - bool importFile(QString selectedFile, QDateTime importDateTime, int *currentTime, bool notMultiple); + bool importFile(QString selectedFile, QDateTime importDateTime, bool notMultiple); void importFilesProgress(QStringList selectedFiles); bool importSnapmaticPicture(SnapmaticPicture *picture, bool warn = true); bool importSavegameData(SavegameData *savegame, QString sgdPath, bool warn = true); @@ -124,6 +124,7 @@ private: void insertSnapmaticIPI(QWidget *widget); void insertSavegameIPI(QWidget *widget); void sortingProfileInterface(); + static int getRandomUid(); signals: void profileLoaded(); From c3e030e827e2ca7e8363360621ed2f2f828d4283 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 14 Jun 2018 12:28:12 +0200 Subject: [PATCH 121/359] G5E 2.0 implemented --- SnapmaticPicture.cpp | 48 +++++++++++++++++++++++++++----------------- SnapmaticPicture.h | 1 + 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp index c22d2e7..b0ef844 100644 --- a/SnapmaticPicture.cpp +++ b/SnapmaticPicture.cpp @@ -91,6 +91,7 @@ void SnapmaticPicture::reset() // INIT PIC BOOLS isCustomFormat = false; + isModernFormat = false; isFormatSwitch = false; isLoadedInRAM = false; lowRamMode = false; @@ -138,6 +139,7 @@ bool SnapmaticPicture::preloadFile() else { isCustomFormat = false; + isModernFormat = false; isLoadedInRAM = true; } } @@ -207,6 +209,29 @@ bool SnapmaticPicture::preloadFile() return false; } } + else if (g5eContent.left(2).toHex() == QByteArray("3200")) + { + g5eContent.remove(0, 2); + if (g5eContent.left(2).toHex() == QByteArray("0001")) + { + g5eContent.remove(0, 2); + rawPicContent = qUncompress(g5eContent); + + // Setting is values + isModernFormat = true; + isLoadedInRAM = true; + } + else if (g5eContent.left(2).toHex() == QByteArray("0002")) + { + lastStep = "2;/4,ReadingFile," % convertDrawStringForLog(picFilePath) % ",2,G5E2_FORMATWRONG,G5E2_SGD"; + return false; + } + else + { + lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",2,G5E2_MISSINGEXTENSION"; + return false; + } + } else { lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",1,G5E_NOTCOMPATIBLE"; @@ -440,6 +465,7 @@ 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 (isModernFormat) { picFileName = "PGTA5" % QString::number(localProperties.uid); } picExportFileName = exportStr % "_" % cmpPicTitl; } @@ -1132,27 +1158,13 @@ bool SnapmaticPicture::exportPicture(const QString &fileName, SnapmaticFormat fo { if (format == SnapmaticFormat::G5E_Format) { - // Modern compressed export - QByteArray stockFileNameUTF8 = picFileName.toUtf8(); - QByteArray numberLength = QByteArray::number(stockFileNameUTF8.length()); - if (numberLength.length() == 1) - { - numberLength.insert(0, '0'); - } - else if (numberLength.length() != 2) - { - numberLength = "00"; - } + // Modern compressed export (v2) QByteArray g5eHeader; - g5eHeader.reserve(stockFileNameUTF8.length() + 16); + g5eHeader.reserve(10); g5eHeader += '\x00'; // First Null Byte g5eHeader += QByteArray("G5E"); // GTA 5 Export - g5eHeader += '\x10'; g5eHeader += '\x00'; // 2 byte GTA 5 Export Version - g5eHeader += QByteArray("LEN"); // Before Length - g5eHeader += QByteArray::fromHex(numberLength); // Length in HEX before Compressed - g5eHeader += QByteArray("FIL"); // Before File Name - g5eHeader += stockFileNameUTF8; // File Name - g5eHeader += QByteArray("COM"); // Before Compressed + g5eHeader += '\x32'; g5eHeader += '\x00'; // 2 byte GTA 5 Export Version + g5eHeader += '\x00'; g5eHeader += '\x01'; // 2 byte GTA 5 Export Type if (picFile->write(g5eHeader) == -1) { writeFailure = true; } if (!lowRamMode) { diff --git a/SnapmaticPicture.h b/SnapmaticPicture.h index 71b7c9d..fd644f1 100644 --- a/SnapmaticPicture.h +++ b/SnapmaticPicture.h @@ -160,6 +160,7 @@ private: bool isLoadedInRAM; bool isCustomFormat; bool isFormatSwitch; + bool isModernFormat; bool careSnapDefault; int jpegRawContentSize; int jpegRawContentSizeE; From 2d62bbb97e6767f21623210983b8240922f3d12f Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 15 Jun 2018 04:43:13 +0200 Subject: [PATCH 122/359] random generator now based on pcg-random --- ProfileInterface.cpp | 10 ++- SnapmaticPicture.cpp | 1 + gta5view.pro | 4 +- pcg/LICENSE.txt | 201 +++++++++++++++++++++++++++++++++++++++++++ pcg/pcg_basic.c | 116 +++++++++++++++++++++++++ pcg/pcg_basic.h | 78 +++++++++++++++++ 6 files changed, 405 insertions(+), 5 deletions(-) create mode 100644 pcg/LICENSE.txt create mode 100644 pcg/pcg_basic.c create mode 100644 pcg/pcg_basic.h diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index b26e33c..02411d6 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -29,6 +29,7 @@ #include "ProfileLoader.h" #include "ExportThread.h" #include "ImportDialog.h" +#include "pcg_basic.h" #include "AppEnv.h" #include "config.h" #include @@ -1945,8 +1946,9 @@ preSelectionTitle: int ProfileInterface::getRandomUid() { - std::mt19937 rng; - rng.seed(std::random_device()()); - std::uniform_int_distribution uiddist(10000000, 2147483647); - return uiddist(rng); + pcg32_random_t rng; + pcg32_srandom_r(&rng, time(NULL), (intptr_t)&rng); + int random_int = pcg32_boundedrand_r(&rng, 2147483647); + qDebug() << random_int; + return random_int; } diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp index b0ef844..cda5287 100644 --- a/SnapmaticPicture.cpp +++ b/SnapmaticPicture.cpp @@ -189,6 +189,7 @@ bool SnapmaticPicture::preloadFile() rawPicContent = qUncompress(g5eContent); // Setting is values + isModernFormat = false; isLoadedInRAM = true; } else diff --git a/gta5view.pro b/gta5view.pro index c44734d..2a875da 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -64,6 +64,7 @@ SOURCES += main.cpp \ TranslationClass.cpp \ UserInterface.cpp \ anpro/JSHighlighter.cpp \ + pcg/pcg_basic.c \ tmext/TelemetryClassAuthenticator.cpp \ uimod/UiModLabel.cpp \ uimod/UiModWidget.cpp @@ -104,6 +105,7 @@ HEADERS += \ TranslationClass.h \ UserInterface.h \ anpro/JSHighlighter.h \ + pcg/pcg_basic.h \ tmext/TelemetryClassAuthenticator.h \ uimod/UiModLabel.h \ uimod/UiModWidget.h @@ -148,7 +150,7 @@ DISTFILES += res/app.rc \ res/gta5view.png \ lang/README.txt -INCLUDEPATH += ./anpro ./tmext ./uimod +INCLUDEPATH += ./anpro ./pcg ./tmext ./uimod # GTA5SYNC/GTA5VIEW ONLY diff --git a/pcg/LICENSE.txt b/pcg/LICENSE.txt new file mode 100644 index 0000000..8dada3e --- /dev/null +++ b/pcg/LICENSE.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/pcg/pcg_basic.c b/pcg/pcg_basic.c new file mode 100644 index 0000000..8c2fd0d --- /dev/null +++ b/pcg/pcg_basic.c @@ -0,0 +1,116 @@ +/* + * PCG Random Number Generation for C. + * + * Copyright 2014 Melissa O'Neill + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * For additional information about the PCG random number generation scheme, + * including its license and other licensing options, visit + * + * http://www.pcg-random.org + */ + +/* + * This code is derived from the full C implementation, which is in turn + * derived from the canonical C++ PCG implementation. The C++ version + * has many additional features and is preferable if you can use C++ in + * your project. + */ + +#include "pcg_basic.h" + +// state for global RNGs + +static pcg32_random_t pcg32_global = PCG32_INITIALIZER; + +// pcg32_srandom(initstate, initseq) +// pcg32_srandom_r(rng, initstate, initseq): +// Seed the rng. Specified in two parts, state initializer and a +// sequence selection constant (a.k.a. stream id) + +void pcg32_srandom_r(pcg32_random_t* rng, uint64_t initstate, uint64_t initseq) +{ + rng->state = 0U; + rng->inc = (initseq << 1u) | 1u; + pcg32_random_r(rng); + rng->state += initstate; + pcg32_random_r(rng); +} + +void pcg32_srandom(uint64_t seed, uint64_t seq) +{ + pcg32_srandom_r(&pcg32_global, seed, seq); +} + +// pcg32_random() +// pcg32_random_r(rng) +// Generate a uniformly distributed 32-bit random number + +uint32_t pcg32_random_r(pcg32_random_t* rng) +{ + uint64_t oldstate = rng->state; + rng->state = oldstate * 6364136223846793005ULL + rng->inc; + uint32_t xorshifted = ((oldstate >> 18u) ^ oldstate) >> 27u; + uint32_t rot = oldstate >> 59u; + return (xorshifted >> rot) | (xorshifted << ((-rot) & 31)); +} + +uint32_t pcg32_random() +{ + return pcg32_random_r(&pcg32_global); +} + + +// pcg32_boundedrand(bound): +// pcg32_boundedrand_r(rng, bound): +// Generate a uniformly distributed number, r, where 0 <= r < bound + +uint32_t pcg32_boundedrand_r(pcg32_random_t* rng, uint32_t bound) +{ + // To avoid bias, we need to make the range of the RNG a multiple of + // bound, which we do by dropping output less than a threshold. + // A naive scheme to calculate the threshold would be to do + // + // uint32_t threshold = 0x100000000ull % bound; + // + // but 64-bit div/mod is slower than 32-bit div/mod (especially on + // 32-bit platforms). In essence, we do + // + // uint32_t threshold = (0x100000000ull-bound) % bound; + // + // because this version will calculate the same modulus, but the LHS + // value is less than 2^32. + + uint32_t threshold = -bound % bound; + + // Uniformity guarantees that this loop will terminate. In practice, it + // should usually terminate quickly; on average (assuming all bounds are + // equally likely), 82.25% of the time, we can expect it to require just + // one iteration. In the worst case, someone passes a bound of 2^31 + 1 + // (i.e., 2147483649), which invalidates almost 50% of the range. In + // practice, bounds are typically small and only a tiny amount of the range + // is eliminated. + for (;;) { + uint32_t r = pcg32_random_r(rng); + if (r >= threshold) + return r % bound; + } +} + + +uint32_t pcg32_boundedrand(uint32_t bound) +{ + return pcg32_boundedrand_r(&pcg32_global, bound); +} + diff --git a/pcg/pcg_basic.h b/pcg/pcg_basic.h new file mode 100644 index 0000000..e2b526a --- /dev/null +++ b/pcg/pcg_basic.h @@ -0,0 +1,78 @@ +/* + * PCG Random Number Generation for C. + * + * Copyright 2014 Melissa O'Neill + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * For additional information about the PCG random number generation scheme, + * including its license and other licensing options, visit + * + * http://www.pcg-random.org + */ + +/* + * This code is derived from the full C implementation, which is in turn + * derived from the canonical C++ PCG implementation. The C++ version + * has many additional features and is preferable if you can use C++ in + * your project. + */ + +#ifndef PCG_BASIC_H_INCLUDED +#define PCG_BASIC_H_INCLUDED 1 + +#include + +#if __cplusplus +extern "C" { +#endif + +struct pcg_state_setseq_64 { // Internals are *Private*. + uint64_t state; // RNG state. All values are possible. + uint64_t inc; // Controls which RNG sequence (stream) is + // selected. Must *always* be odd. +}; +typedef struct pcg_state_setseq_64 pcg32_random_t; + +// If you *must* statically initialize it, here's one. + +#define PCG32_INITIALIZER { 0x853c49e6748fea9bULL, 0xda3e39cb94b95bdbULL } + +// pcg32_srandom(initstate, initseq) +// pcg32_srandom_r(rng, initstate, initseq): +// Seed the rng. Specified in two parts, state initializer and a +// sequence selection constant (a.k.a. stream id) + +void pcg32_srandom(uint64_t initstate, uint64_t initseq); +void pcg32_srandom_r(pcg32_random_t* rng, uint64_t initstate, + uint64_t initseq); + +// pcg32_random() +// pcg32_random_r(rng) +// Generate a uniformly distributed 32-bit random number + +uint32_t pcg32_random(void); +uint32_t pcg32_random_r(pcg32_random_t* rng); + +// pcg32_boundedrand(bound): +// pcg32_boundedrand_r(rng, bound): +// Generate a uniformly distributed number, r, where 0 <= r < bound + +uint32_t pcg32_boundedrand(uint32_t bound); +uint32_t pcg32_boundedrand_r(pcg32_random_t* rng, uint32_t bound); + +#if __cplusplus +} +#endif + +#endif // PCG_BASIC_H_INCLUDED From 196cb8bc55f230d5391553edb00e49d7c3dc0835 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 15 Jun 2018 04:52:29 +0200 Subject: [PATCH 123/359] stop precompile config.h because it's not C compatible --- gta5view.pro | 1 - 1 file changed, 1 deletion(-) diff --git a/gta5view.pro b/gta5view.pro index 2a875da..60b4ab9 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -26,7 +26,6 @@ TARGET = gta5view TEMPLATE = app HEADERS += config.h -PRECOMPILED_HEADER += config.h SOURCES += main.cpp \ AboutDialog.cpp \ From caaa6a1d8579390aa05699847859416c63a22181 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 15 Jun 2018 05:04:20 +0200 Subject: [PATCH 124/359] making config.h C compatible --- config.h | 5 +++++ gta5view.pro | 1 + 2 files changed, 6 insertions(+) diff --git a/config.h b/config.h index 23a6a09..2381763 100644 --- a/config.h +++ b/config.h @@ -18,7 +18,10 @@ #ifndef CONFIG_H #define CONFIG_H + +#if __cplusplus #include +#endif #ifndef GTA5SYNC_APPVENDOR #define GTA5SYNC_APPVENDOR "Syping" @@ -44,6 +47,7 @@ #define GTA5SYNC_APPVER "1.6.0" #endif +#if __cplusplus #ifdef GTA5SYNC_BUILDTYPE_REL #ifndef GTA5SYNC_BUILDTYPE #define GTA5SYNC_BUILDTYPE QT_TRANSLATE_NOOP("AboutDialog", "Release") @@ -146,5 +150,6 @@ #ifndef GTA5SYNC_BUILDSTRING #define GTA5SYNC_BUILDSTRING QString("%1, %2").arg(QT_VERSION_STR, GTA5SYNC_COMPILER) #endif +#endif #endif // CONFIG_H diff --git a/gta5view.pro b/gta5view.pro index 60b4ab9..2a875da 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -26,6 +26,7 @@ TARGET = gta5view TEMPLATE = app HEADERS += config.h +PRECOMPILED_HEADER += config.h SOURCES += main.cpp \ AboutDialog.cpp \ From caffd9f246f4dfd10bc24af3acb422224671532e Mon Sep 17 00:00:00 2001 From: Syping Date: Sat, 16 Jun 2018 04:58:51 +0200 Subject: [PATCH 125/359] update readme --- README.md | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 9daace9..1274103 100644 --- a/README.md +++ b/README.md @@ -11,25 +11,33 @@ Grand Theft Auto V Savegame and Snapmatic viewer/editor ![User Interface](res/src/mainui.png) ![Snapmatic Properties](res/src/prop.png) -#### Build gta5view for Debian/Ubuntu - - # Note: You can use 'sudo make install' instead of 'sudo checkinstall' - sudo apt-get install git gcc g++ qtbase5-dev qttranslations5-l10n qt5-qmake make checkinstall - git clone https://gitlab.com/Syping/gta5view && cd gta5view - mkdir -p build && cd build - PREFIX=/usr ../configure - make -j $(nproc --all) - sudo checkinstall --pkgname=gta5view --pkggroup=utility --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n - #### Build gta5view for Windows - # Note: Install Docker Community Edition and Git before continuing - git clone https://github.com/SyDevTeam/gta5view && cd gta5view - docker pull syping/qt5-static-mingw - docker run --rm -v ${PWD}:/gta5view -it syping/qt5-static-mingw - cd /gta5view && mkdir -p build && cd build - qmake-static ../gta5view.pro - make -j $(nproc --all) + # Note: Install Docker Community Edition and Git before continuing + git clone https://gitlab.com/Syping/gta5view && cd gta5view + docker pull syping/qt5-static-mingw + docker run --rm -v ${PWD}:/gta5view -it syping/qt5-static-mingw + cd /gta5view && mkdir -p build && cd build + qmake-static ../gta5view.pro + make -j $(nproc --all) + +#### Build gta5view for Debian/Ubuntu + + sudo apt-get install git gcc g++ qtbase5-dev qttranslations5-l10n qt5-qmake make + git clone https://gitlab.com/Syping/gta5view && cd gta5view + mkdir -p build && cd build + ../configure --prefix=/opt/gta5view + make -j $(nproc --all) + sudo make install + +#### Build gta5view for Fedora + + sudo dnf install git gcc gcc-c++ qt5-qtbase-devel qt5-qttranslations make + git clone https://gitlab.com/Syping/gta5view && cd gta5view + mkdir -p build && cd build + ../configure --prefix=/opt/gta5view + make -j $(nproc --all) + sudo make install #### Build gta5view for Windows (Beginner) From 06a8657423d7dd247d52fae5e51e672b7c99ea88 Mon Sep 17 00:00:00 2001 From: Syping Date: Sat, 16 Jun 2018 05:28:56 +0200 Subject: [PATCH 126/359] fixed mass import --- ProfileInterface.cpp | 7 +++---- ProfileInterface.h | 4 +++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 02411d6..9bab574 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -121,6 +121,9 @@ ProfileInterface::ProfileInterface(ProfileDatabase *profileDB, CrewDatabase *cre } #endif + // Seed RNG + pcg32_srandom_r(&rng, time(NULL), (intptr_t)&rng); + setMouseTracking(true); installEventFilter(this); } @@ -804,7 +807,6 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime bool ProfileInterface::importSnapmaticPicture(SnapmaticPicture *picture, bool warn) { QString picFileName = picture->getPictureFileName(); - qDebug() << picFileName; QString adjustedFileName = picture->getOriginalPictureFileName(); if (picFileName.left(4) != "PGTA") { @@ -1946,9 +1948,6 @@ preSelectionTitle: int ProfileInterface::getRandomUid() { - pcg32_random_t rng; - pcg32_srandom_r(&rng, time(NULL), (intptr_t)&rng); int random_int = pcg32_boundedrand_r(&rng, 2147483647); - qDebug() << random_int; return random_int; } diff --git a/ProfileInterface.h b/ProfileInterface.h index 4aef151..34acde6 100644 --- a/ProfileInterface.h +++ b/ProfileInterface.h @@ -29,6 +29,7 @@ #include "ExportThread.h" #include "SavegameData.h" #include "CrewDatabase.h" +#include "pcg_basic.h" #include #include #include @@ -107,6 +108,7 @@ private: QString profileName; QString loadingStr; QString language; + pcg32_random_t rng; bool contextMenuOpened; bool isProfileLoaded; int selectedWidgts; @@ -124,7 +126,7 @@ private: void insertSnapmaticIPI(QWidget *widget); void insertSavegameIPI(QWidget *widget); void sortingProfileInterface(); - static int getRandomUid(); + int getRandomUid(); signals: void profileLoaded(); From 3b305fb8094a2e63b4ee1ce4cbb852ee716c9f90 Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 17 Jun 2018 09:27:10 +0200 Subject: [PATCH 127/359] add clipboard import --- DatabaseThread.cpp | 4 + ProfileInterface.cpp | 147 ++++++++++++++++++- ProfileInterface.h | 1 + res/gta5sync_de.qm | Bin 44483 -> 44621 bytes res/gta5sync_de.ts | 328 +++++++++++++++++++++--------------------- res/gta5sync_en_US.ts | 328 +++++++++++++++++++++--------------------- res/gta5sync_fr.ts | 328 +++++++++++++++++++++--------------------- res/gta5sync_ru.ts | 328 +++++++++++++++++++++--------------------- res/gta5sync_uk.ts | 328 +++++++++++++++++++++--------------------- res/gta5sync_zh_TW.ts | 328 +++++++++++++++++++++--------------------- 10 files changed, 1148 insertions(+), 972 deletions(-) diff --git a/DatabaseThread.cpp b/DatabaseThread.cpp index 4d12e74..8cac13e 100644 --- a/DatabaseThread.cpp +++ b/DatabaseThread.cpp @@ -169,6 +169,10 @@ void DatabaseThread::scanCrewReference(const QStringList &crewList, const int &r emit crewNameFound(crewID.toInt(), crewName); } } + else + { + netReply->abort(); + } if (threadRunning) { diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 9bab574..10f0cda 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -29,11 +29,15 @@ #include "ProfileLoader.h" #include "ExportThread.h" #include "ImportDialog.h" +#include "UiModLabel.h" #include "pcg_basic.h" #include "AppEnv.h" #include "config.h" +#include #include +#include #include +#include #include #include #include @@ -42,8 +46,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -710,19 +716,19 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime delete picture; return false; } - QImage *importImage = new QImage(); + QImage *snapmaticImage = new QImage(); QImageReader snapmaticImageReader; snapmaticImageReader.setDecideFormatFromContent(true); snapmaticImageReader.setDevice(&snapmaticFile); - if (!snapmaticImageReader.read(importImage)) + if (!snapmaticImageReader.read(snapmaticImage)) { QMessageBox::warning(this, tr("Import"), tr("Can't import %1 because file can't be parsed properly").arg("\""+selectedFileName+"\"")); - delete importImage; + delete snapmaticImage; delete picture; return false; } ImportDialog *importDialog = new ImportDialog(this); - importDialog->setImage(importImage); + importDialog->setImage(snapmaticImage); importDialog->setModal(true); importDialog->show(); importDialog->exec(); @@ -804,6 +810,60 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime return false; } +bool ProfileInterface::importImage(QImage *snapmaticImage, QDateTime importDateTime) +{ + SnapmaticPicture *picture = new SnapmaticPicture(":/template/template.g5e"); + if (picture->readingPicture(true, false, true, false)) + { + bool success = false; + ImportDialog *importDialog = new ImportDialog(this); + importDialog->setImage(snapmaticImage); + importDialog->setModal(true); + importDialog->show(); + importDialog->exec(); + if (importDialog->isImportAgreed()) + { + if (picture->setImage(importDialog->image())) + { + SnapmaticProperties spJson = picture->getSnapmaticProperties(); + spJson.uid = getRandomUid(); + bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); + bool fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak"); + bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); + int cEnough = 0; + while ((fExists || fExistsBackup || fExistsHidden) && cEnough < findRetryLimit) + { + spJson.uid = getRandomUid(); + fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid)); + fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak"); + fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden"); + cEnough++; + } + spJson.createdDateTime = importDateTime; + spJson.createdTimestamp = spJson.createdDateTime.toTime_t(); + picture->setSnapmaticProperties(spJson); + picture->setPicFileName(QString("PGTA5%1").arg(QString::number(spJson.uid))); + picture->setPictureTitle(importDialog->getImageTitle()); + picture->updateStrings(); + success = importSnapmaticPicture(picture, true); + } + } + else + { + delete picture; + success = true; + } + delete importDialog; + if (!success) delete picture; + return success; + } + else + { + delete picture; + return false; + } +} + bool ProfileInterface::importSnapmaticPicture(SnapmaticPicture *picture, bool warn) { QString picFileName = picture->getPictureFileName(); @@ -1337,7 +1397,6 @@ void ProfileInterface::on_saProfileContent_dropped(const QMimeData *mimeData) if (pathList.length() == 1) { QString selectedFile = pathList.at(0); - QDateTime importDateTime = QDateTime::currentDateTime(); importFile(selectedFile, QDateTime::currentDateTime(), true); } else if (pathList.length() > 1) @@ -1354,7 +1413,83 @@ void ProfileInterface::retranslateUi() bool ProfileInterface::eventFilter(QObject *watched, QEvent *event) { - if (event->type() == QEvent::MouseMove) + if (event->type() == QEvent::KeyPress) + { + if (isProfileLoaded) + { + QKeyEvent *keyEvent = dynamic_cast(event); + switch (keyEvent->key()) + { + case Qt::Key_V: + if (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) && !QApplication::keyboardModifiers().testFlag(Qt::ShiftModifier)) + { + QImage clipboardImage = QApplication::clipboard()->image(); + if (!clipboardImage.isNull()) + { + QImage *snapmaticImage = new QImage(clipboardImage); + importImage(snapmaticImage, QDateTime::currentDateTime()); + } + QUrl clipboardUrl = QUrl::fromUserInput(QApplication::clipboard()->text()); + if (clipboardUrl.isValid()) + { + QDialog urlPasteDialog(this); + urlPasteDialog.setObjectName(QStringLiteral("UrlPasteDialog")); + urlPasteDialog.setWindowFlags(urlPasteDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint); + urlPasteDialog.setWindowTitle(tr("Import...")); + urlPasteDialog.setModal(true); + QVBoxLayout urlPasteLayout(&urlPasteDialog); + urlPasteLayout.setObjectName(QStringLiteral("UrlPasteLayout")); + urlPasteDialog.setLayout(&urlPasteLayout); + UiModLabel urlPasteLabel(&urlPasteDialog); + urlPasteLabel.setObjectName("UrlPasteLabel"); + urlPasteLabel.setText(tr("Prepare Content for Import...")); + urlPasteLayout.addWidget(&urlPasteLabel); + urlPasteDialog.setFixedSize(urlPasteDialog.sizeHint()); + urlPasteDialog.show(); + + QNetworkAccessManager *netManager = new QNetworkAccessManager(); + QNetworkRequest netRequest(clipboardUrl); + netRequest.setRawHeader("User-Agent", AppEnv::getUserAgent()); + netRequest.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + netRequest.setRawHeader("Accept-Language", "en-US;q=0.5,en;q=0.3"); + netRequest.setRawHeader("Connection", "keep-alive"); + QNetworkReply *netReply = netManager->get(netRequest); + QEventLoop *downloadLoop = new QEventLoop(); + QObject::connect(netReply, SIGNAL(finished()), downloadLoop, SLOT(quit())); + QTimer::singleShot(30000, downloadLoop, SLOT(quit())); + downloadLoop->exec(); + downloadLoop->disconnect(); + delete downloadLoop; + + urlPasteDialog.close(); + + if (netReply->isFinished()) + { + QImage *snapmaticImage = new QImage(); + QImageReader snapmaticImageReader; + snapmaticImageReader.setDecideFormatFromContent(true); + snapmaticImageReader.setDevice(netReply); + if (snapmaticImageReader.read(snapmaticImage)) + { + importImage(snapmaticImage, QDateTime::currentDateTime()); + } + else + { + delete snapmaticImage; + } + } + else + { + netReply->abort(); + } + delete netReply; + delete netManager; + } + } + } + } + } + else if (event->type() == QEvent::MouseMove) { if ((watched->objectName() == "SavegameWidget" || watched->objectName() == "SnapmaticWidget") && isProfileLoaded) { diff --git a/ProfileInterface.h b/ProfileInterface.h index 34acde6..cfc64e6 100644 --- a/ProfileInterface.h +++ b/ProfileInterface.h @@ -116,6 +116,7 @@ private: bool isSupportedImageFile(QString selectedFileName); bool importFile(QString selectedFile, QDateTime importDateTime, bool notMultiple); + bool importImage(QImage *snapmaticImage, QDateTime importDateTime); void importFilesProgress(QStringList selectedFiles); bool importSnapmaticPicture(SnapmaticPicture *picture, bool warn = true); bool importSavegameData(SavegameData *savegame, QString sgdPath, bool warn = true); diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index cc3ebac6ac3324a1f1081c38af91f69b44c74195..796c47a599b68b028963bd0457884a00f164cb99 100644 GIT binary patch delta 1924 zcmXAp3se->8OQ%KJHyU{Wlt2`ippXPL>2)P5yS)q2^KZW5dxB0NkqF;BD=tfE2#|| zvtR^)0#`(I5ip1*kdlPrK`D5|tkzn@TEaQe*q%ImP^(srsntCCZFly}{$}pn`@Qb} zey6YSqhIj#f!w2ppm^@P26G6%=a~kp!Py1=_@_W{DukL2K)6Bd1&mqk>;YmkeYBf>tV#sE!P(LIlXc9n?k3i7`5wAk@D z3wSj`?A-ASQcNd{5{=v$W)?$&t6%b)}nfudQ#}O4@JHHeF}}TDEFCPf;K(;o6T^-2q~9w0+$Vfck^X>}Pa-ti98{ z0O&Aje>^rx8Vi!dnogEmdVBWgw6(8FM=UhH@v1ZsQw99`4QY7f5~aOJ8W|uz z?3Q1|^lI5~H3?|=S`KksqsX;#_#={A-DMV~jd|{jY;HIQ3e+ zE=;>e5qadoe4_A+Tt(l zPX+jcb|xy%a*ZrX3195a@vlm0qU_iCH%F0ox!m8)QBSrd_*ngkzk4}ZR}c7i>JzBP zZt_2IcMCN*k<}{Urh_56;BHdFo($cLzeiJZ3e?S*B;{6UbaUfLp)))>(-ksbQNXS$ zalr)XuP0#{EU?pEfKvJo#R}N433(`__fX{Hd;01fwW1hB^z0pV{QoH$^pilBAKkN7 g+bzX;c1vhVk*(BXD-F#rvWKz~>zuxJ`LSK^u<%Cp0+0+Zuu@Sl7Rgd{uf&m`~p%#8lCUJgh`u$lz)75 zxUa!7+-T$=EGLqH;BHuk8`kMy8E#mY2+MH8x*M?k8U^g}hjmXk@Z?fhJ5zzUXJ8#} zRK)qX-GR6%R42=Zq}(20??pUUL417|Qeu7}fgMQ69z(z1hq*01(4b~3tKeqIi*V#M ze;{u$yTqB|XQRJ|exy|5_F)m&cnkLm7XS(EobvrdpkT{U$c7N%t@@1H*o^%m+un7$p!;|_EQ>U{}%rIZX*z%zfS*DeET+5F!Lg}~!h{@H5@O@&)VgKD z3sVjPYior~eKYA)1d9{Ga#jrrtrL#`HKNekk_Cv(!ZBwiAb%~KR&z+r6`||kWC~5b z;4R$+OiuH$_=1l$UkKg~Cw;FKZfBha#@7meUA;hz5FVZ))t)n~TQH}lic2n^14<`| z1&5Xa=|{veSq8S$iw+xUH|-T`3nGDC6{2S%4ZHcS=qabJTjIrrf6{?P;bP;a#bnDE zW*5y<6UA?M3PSQmtr*)5Xx`8U4cdUvByDiY-$3O#?Wk@)%HsxYTGlvV$pY;%z6e

b)U11SVt_)&Br&<0EEvUVw5C+OG_TnUZ10c?8r}n5{X{A{n+vSj zDsA|IR3!7#JB3wru{_eo(ch7?ebUif`h3}SsUxxySbkgTI(L=SpI~>ik-?H|x;`6l zWy_(Z{WPIY4*QF8wqp^q>mnVA@_g5MAbX3PrK25Kj>|c9w6W3wIX~qdr8Gg#UrrP@ z%d7vKMAso(-g<^=KY3HGO1?op*2>j3J5|%ljb|6oHlpR$$d@R60rL6T4!Wy1SC-Bpe?OA@Y_UM}Liz5J-+?)MtqM0l;)=&B+%LmiuNZ>pewCIhPtB)>)^KIq z##D;`FG|#8TI8F5DASjFh|NB_F8g@k0gI4K{&C8Sx5$RT>q_QbKj2^!%aCH_M5SY7 z5G`gWb4%vMM&)8|3Gf0_EEiAtY2gCZWM zeER{7{?rWRr#4z$PM^}Rt^u}1FoSI7Y%D@HXHQj~ek9j&M=j6q0k&RHtL^FZM7h-J zWHO4>tk+0jk?Hm8=U%k&&#OPL(eZLnOU^3GeVUx^7>an!J`hjdo78C=cx zf!r>`v4!Mvs7-{?;JMX3#Eia+&2#Gr%_g~SV;?NYY))xUfyn5Gj{s_!u1_r diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index 903c521..03e49ae 100644 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -66,37 +66,37 @@ Snapmatic Bilder und Spielständen %1 ist lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + Release Release - + Release Candidate Release Candidate - + Daily Build Daily Build - + Developer Entwickler - + Beta Beta - + Alpha Alpha - + Custom Eigener @@ -314,14 +314,14 @@ Snapmatic Bilder und Spielständen - + 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 @@ -780,31 +780,31 @@ Y: %2 - + 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... @@ -953,7 +953,7 @@ Drücke 1 für Standardmodus - + Open &JSON Editor... &JSON Editor öffnen... @@ -1051,25 +1051,26 @@ Drücke 1 für Standardmodus S&chließen - + Loading... Lade... - + Snapmatic Loader Snapmatic Lader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>Folgende Snapmatic Bilder wurden repariert</h4>%1 - - + + + Import... Importieren... @@ -1080,63 +1081,63 @@ Drücke 1 für Standardmodus - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import Importieren - + Savegames files (SGTA*) Spielstanddateien (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) - + Importable files (%1) Importfähige Dateien (%1) - + All image files (%1) Alle Bilddateien (%1) - + All files (**) Alle Dateien (**) - - + + Import file %1 of %2 files Importiere Datei %1 von %2 Dateien - + Import failed with... %1 @@ -1145,13 +1146,13 @@ Drücke 1 für Standardmodus %1 - + Failed to read Snapmatic picture Fehler beim Lesen vom Snapmatic Bild - + Failed to read Savegame file Fehler beim Lesen von Spielstanddatei @@ -1159,135 +1160,135 @@ Drücke 1 für Standardmodus - + 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 - + Can't import %1 because file format can't be detected Kann %1 nicht importieren weil das Dateiformat nicht erkannt werden kann - + Initialising export... Initialisiere Export... - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA oder endet mit .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Fehlgeschlagen beim Importieren vom Snapmatic Bild, dieses Bild ist bereits im Spiel - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exportiere Snapmatic Bilder%2<br><br>JPG Bilder machen es möglich sie mit ein Bildansicht Programm zu öffnen<br>Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren<br><br>Exportieren als: - - + + No valid file is selected Keine gültige Datei wurde ausgewählt - + Enabled pictures: %1 of %2 Aktivierte Bilder: %1 von %2 - + Failed to import the Snapmatic picture, can't copy the file into profile Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren - + Failed to import the Savegame, can't copy the file into profile Fehlgeschlagen beim Importieren vom Spielstand, kann Spielstanddatei nicht ins Profil kopieren - + Failed to import the Savegame, no Savegame slot is left Fehlgeschlagen beim Importieren vom Spielstand, kein Spielstandslot mehr frei - - + + JPG pictures and GTA Snapmatic JPG Bilder und GTA Snapmatic - - + + JPG pictures only Nur JPG Bilder - - + + GTA Snapmatic only Nur GTA Snapmatic - - - - + + + + Patch selected... Auswahl patchen... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Patche Datei %1 von %2 Dateien - - + + Qualify as Avatar Als Avatar qualifizieren - - - - - - + + + + + + No Snapmatic pictures are selected Keine Snapmatic Bilder sind ausgewählt - + Failed to remove all selected Snapmatic pictures and/or Savegame files Fehlgeschlagen beim Entfernen von allen augewählten Snapmatic Bildern und/oder Spielstanddateien - - - - - - + + + + + + %1 failed with... %2 @@ -1297,88 +1298,93 @@ Drücke 1 für Standardmodus %2 - + + Prepare Content for Import... + Bereite Inhalt für Import vor... + + + Qualify %1 failed with... Qualifizieren - - + + Change Players... Spieler ändern... - + Change Players %1 failed with... Spieler ändern - - - + + + Change Crew... Crew ändern... - + Failed to enter a valid Snapmatic Crew ID Fehlgeschlagen beim Eingeben von einer gültigen Crew ID - + Change Crew %1 failed with... Crew ändern - - - + + + Change Title... Titel ändern... - + Failed to enter a valid Snapmatic title Fehlgeschlagen beim Eingeben eines gültigen Snapmatic Titel - + Change Title %1 failed with... Titel ändern - - + + No Snapmatic pictures or Savegames files are selected Keine Snapmatic Bilder oder Spielstände sind ausgewählt - - - + + + Remove selected Auswahl löschen - + You really want remove the selected Snapmatic picutres and Savegame files? Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen? - - - - - + + + + + Export selected... Auswahl exportieren... - + Export failed with... %1 @@ -1397,7 +1403,7 @@ Drücke 1 für Standardmodus Alle Profildateien (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1406,17 +1412,17 @@ Drücke 1 für Standardmodus QApplication - + Font Schrift - + Selected Font: %1 Ausgewähle Schrift: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>Willkommen zu %1!</h4>Möchtest du %1 einstellen bevor du es nutzt? @@ -1532,32 +1538,32 @@ Drücke 1 für Standardmodus Fehlgeschlagen beim Löschen %1 von deinen Spielständen - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All &Alles auswählen - + &Deselect All Alles a&bwählen @@ -1572,7 +1578,7 @@ Drücke 1 für Standardmodus Spielstand kopieren - + &Export &Exportieren @@ -1666,7 +1672,7 @@ Drücke 1 für Standardmodus Meme - + Snapmatic Title Snapmatic Titel @@ -1772,19 +1778,19 @@ Drücke 1 für Standardmodus 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: @@ -1793,66 +1799,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 @@ -1912,52 +1918,52 @@ Drücke 1 für Standardmodus Fehlgeschlagen beim Anzeigen von %1 im Spiel von deinen Snapmatic Bildern - + Edi&t Bearbei&ten - + &Export &Exportieren - + Show &In-game &Im Spiel anzeigen - + Hide &In-game &Im Spiel ausblenden - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All Alles &auswählen - + &Deselect All Alles a&bwählen @@ -1985,22 +1991,22 @@ Drücke 1 für Standardmodus TelemetryDialog - + %1 User Statistics %1 Benutzerstatistik - + You want help %1 to improve in the future by including personal usage data in your submission? Sollen bei Einreichungen Persönliche Nutzungsdaten einbezogen werden um %1 in der Zukunft zu unterstützen? - + Yes, I want include personal usage data. Ja, ich möchte Persönliche Nutzungsdaten einbeziehen. - + &OK &OK @@ -2201,15 +2207,15 @@ Drücke 1 für Standardmodus &Neuladen - - + + 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 75349ea..f4a0e0a 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -56,37 +56,37 @@ Pictures and Savegames - + Release - + Release Candidate - + Daily Build - + Developer - + Beta - + Alpha - + Custom @@ -304,14 +304,14 @@ Pictures and Savegames - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! @@ -759,31 +759,31 @@ Y: %2 - + Export as &Picture... - + Export as &Snapmatic... - + &Overwrite Image... - + &Edit Properties... - + Open &Map Viewer... @@ -935,7 +935,7 @@ Press 1 for Default View - + Open &JSON Editor... @@ -1039,30 +1039,31 @@ Press 1 for Default View - + Enabled pictures: %1 of %2 - + Loading... - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - - + + + Import... @@ -1073,42 +1074,42 @@ Press 1 for Default View - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import - + Importable files (%1) - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) @@ -1116,46 +1117,46 @@ Press 1 for Default View - + All image files (%1) - + All files (**) - - + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - + Failed to read Snapmatic picture - + Failed to read Savegame file @@ -1163,152 +1164,152 @@ Press 1 for Default View - + Can't import %1 because file can't be open - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - - - - - + + + + + Export selected... - + Initialising export... Initializing export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - - + + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - - + + Qualify as Avatar - - - - - - + + + + + + No Snapmatic pictures are selected - - - - + + + + Patch selected... - - - - - - - - + + + + + + + + Patch file %1 of %2 files - - - - - - + + + + + + %1 failed with... %2 @@ -1316,60 +1317,65 @@ Press 1 for Default View - + Failed to remove all selected Snapmatic pictures and/or Savegame files - + + Prepare Content for Import... + + + + Qualify %1 failed with... - - + + Change Players... - + Change Players %1 failed with... - - - + + + Change Crew... - + Failed to enter a valid Snapmatic Crew ID - + Change Crew %1 failed with... - - - + + + Change Title... - + Failed to enter a valid Snapmatic title - + Change Title %1 failed with... @@ -1383,17 +1389,17 @@ Press 1 for Default View QApplication - + Font - + Selected Font: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? @@ -1471,37 +1477,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1741,25 +1747,25 @@ Press 1 for Default View - + Snapmatic Title - + New Snapmatic title: - + Snapmatic Crew - + New Snapmatic crew: @@ -1768,66 +1774,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 @@ -1887,52 +1893,52 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1960,22 +1966,22 @@ Press 1 for Default View TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? - + %1 User Statistics - + Yes, I want include personal usage data. - + &OK @@ -2176,15 +2182,15 @@ Press 1 for Default View - - + + Show In-game - - + + Hide In-game diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index debd501..0138ce8 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -66,37 +66,37 @@ et les fichiers de sauvegarde de Grand Theft Auto V %1 est distribué sous license <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + Release Release - + Release Candidate Release Candidate - + Daily Build Daily Build - + Developer Developer - + Beta Beta - + Alpha Alpha - + Custom Personnalisé @@ -314,14 +314,14 @@ et les fichiers de sauvegarde de Grand Theft Auto V - + 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é @@ -860,31 +860,31 @@ Y : %2 - + 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... @@ -953,7 +953,7 @@ Appuyer sur 1 pour le mode par défaut - + Open &JSON Editor... Ouvrir l'éditeur &JSON... @@ -1057,30 +1057,31 @@ Appuyer sur 1 pour le mode par défaut Copie du fichier %1 sur %2 - + Enabled pictures: %1 of %2 Photos activées : %1 sur %2 - + Loading... Chargement... - + Snapmatic Loader Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>Les Snapmatic suivants ont été répaés</h4>%1 - - + + + Import... Importer... @@ -1091,31 +1092,31 @@ Appuyer sur 1 pour le mode par défaut - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import Importer - + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) @@ -1123,26 +1124,26 @@ Appuyer sur 1 pour le mode par défaut - + All image files (%1) Toutes les images (%1) - + All files (**) Tous les fichiers (**) - - + + Import file %1 of %2 files Importation du fichier %1 sur %2 - + Import failed with... %1 @@ -1151,25 +1152,25 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No valid file is selected Fichier invalide - + Importable files (%1) Fichiers importables (%1) - + Failed to read Snapmatic picture Impossible d'ouvrir la photo Snapmatic - + Failed to read Savegame file Impossible de lire le fichier de sauvegarde @@ -1177,127 +1178,127 @@ Appuyer sur 1 pour le mode par défaut - + 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 - + Can't import %1 because file format can't be detected Impossible d'importer %1, le format du fichier n'est pas détecté - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*, *.g5e) - + Failed to import the Snapmatic picture, the picture is already in the game Impossible d'importer la photo Snapmatic, un fichier du même nom existe déjà - + Failed to import the Snapmatic picture, can't copy the file into profile Impossible d'importer la photo Snapmatic, impossible de copier le fichier dans le profil - + Failed to import the Savegame, can't copy the file into profile Impossible d'importer la sauvegarde, impossible de copier le fichier dans le profil - + Failed to import the Savegame, no Savegame slot is left Impossible d'importer la sauvegarde, aucun emplacement libre - - + + JPG pictures and GTA Snapmatic Images JPG et GTA Snapmatic - - + + JPG pictures only Images JPG seulement - - + + GTA Snapmatic only GTA Snapmatic seulement - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exporter les photos Snapmatic%2<br><br>Les fichiers JPG permettent d'ouvrir les photos avec une visionneuse d'images<br>Les GTA Snapmatic permettent d'importer les photos dans le jeu<br><br>Exporter comme : - - - - - + + + + + Export selected... Exporter la sélection... - + Initialising export... Initialisation de l'export... - - + + Qualify as Avatar Qualifier comme Avatar - - - - - - + + + + + + No Snapmatic pictures are selected Aucun Snapmatic sélectionné - - - - + + + + Patch selected... Patcher la sélection... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Patch du fichier %1 sur %2 - - - - - - + + + + + + %1 failed with... %2 @@ -1307,66 +1308,71 @@ Appuyer sur 1 pour le mode par défaut %2 - + Failed to remove all selected Snapmatic pictures and/or Savegame files Échec de la supression des Snapmatic et/ou des fichiers de sauvegarde sélectionnés - + + Prepare Content for Import... + + + + Qualify %1 failed with... Qualifier - - + + Change Players... Modifier les joueurs... - + Change Players %1 failed with... Modifier les joueurs - - - + + + Change Crew... Modifier le Crew... - + Failed to enter a valid Snapmatic Crew ID Snapmatic Crew ID invalide - + Change Crew %1 failed with... Changer le Crew - - - + + + Change Title... Changer le titre... - + Failed to enter a valid Snapmatic title Titre Snapmatic invalide - + Change Title %1 failed with... Changer le titre - + Export failed with... %1 @@ -1375,20 +1381,20 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No Snapmatic pictures or Savegames files are selected Aucun fichier de sauvegarde ou photo Snapmatic sélectionné - - - + + + Remove selected Supprimer la sélection - + You really want remove the selected Snapmatic picutres and Savegame files? Supprimer la sélection ? @@ -1398,7 +1404,7 @@ Appuyer sur 1 pour le mode par défaut Tous les fichiers de profil (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1407,17 +1413,17 @@ Appuyer sur 1 pour le mode par défaut QApplication - + Font Police - + Selected Font: %1 Police sélectionnée : %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>Bienvenue sur %1!</h4>Voulez-vous configurer %1 avant de l'utiliser t? @@ -1495,7 +1501,7 @@ Appuyer sur 1 pour le mode par défaut Supprimer - + &Export &Exporter @@ -1586,32 +1592,32 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + &View &Voir - + &Remove &Supprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner to&ut - + &Deselect All &Déselectionner tout @@ -1667,7 +1673,7 @@ Appuyer sur 1 pour le mode par défaut Meme - + Snapmatic Title Titre Snapmatic @@ -1775,19 +1781,19 @@ Appuyer sur 1 pour le mode par défaut 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 : @@ -1796,66 +1802,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 @@ -1935,52 +1941,52 @@ Appuyer sur 1 pour le mode par défaut %1 n'a pas pu être rendu visible en jeu - + Edi&t Édi&ter - + Show &In-game &Visible en jeu - + Hide &In-game &Invisible en jeu - + &Export &Exporter - + &View &Voir - + &Remove S&upprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner &tout - + &Deselect All &Déselectionner tout @@ -1988,22 +1994,22 @@ Appuyer sur 1 pour le mode par défaut TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? - + %1 User Statistics - + Yes, I want include personal usage data. - + &OK &OK @@ -2204,15 +2210,15 @@ Appuyer sur 1 pour le mode par défaut Impossible d'ouvrir %1, format invalide - - + + Show In-game Visible en jeu - - + + Hide In-game Invisible en jeu diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index 3758948..4bc1468 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -66,37 +66,37 @@ Pictures and Savegames %1 под лицензией <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + Release Релиз - + Release Candidate Предварительный выпуÑк - + Daily Build Ð”Ð½ÐµÐ²Ð½Ð°Ñ Ñборка - + Developer Разработчик - + Beta Бета - + Alpha Ðльфа - + Custom Ðе извеÑтен контекÑÑ‚ Ð¡Ð²Ð¾Ñ @@ -318,14 +318,14 @@ Pictures and Savegames - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! Свой Ðватар - + Custom Picture Custom Picture Description in SC, don't use Special Character! Ð¡Ð²Ð¾Ñ ÐšÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ° @@ -785,31 +785,31 @@ Y: %2 - + Export as &Picture... ЭкÑпортировать как &картинку... - + Export as &Snapmatic... ЭкÑпортировать как &Snapmatic... - + &Overwrite Image... &ПерезапиÑать картинку... - + &Edit Properties... &Изменить ÑвойÑтва... - + Open &Map Viewer... Открыть &карту... @@ -958,7 +958,7 @@ Press 1 for Default View - + Open &JSON Editor... Открыть &редактор JSON... @@ -1055,17 +1055,17 @@ Press 1 for Default View &Закрыть - + Loading... Загрузка... - + Snapmatic Loader Загрузчик Snapmatic - + <h4>Following Snapmatic Pictures got repaired</h4>%1 Change wording if the %1 is not a multiline beginning at new line <h4>ÐижеÑледующие картинки Snapmatic были воÑÑтановлены</h4>%1 @@ -1073,8 +1073,9 @@ Press 1 for Default View - - + + + Import... Импортировать... @@ -1085,31 +1086,31 @@ Press 1 for Default View - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import Импортировать - + Savegames files (SGTA*) Файлы ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ (SGTA*) - + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) @@ -1117,19 +1118,19 @@ Press 1 for Default View - + All files (**) Ð’Ñе файлы (**) - - + + Import file %1 of %2 files ИмпортируютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ %1 из %2 - + Import failed with... %1 @@ -1138,169 +1139,174 @@ Press 1 for Default View %1 - + Failed to read Snapmatic picture Ðе удалоÑÑŒ загрузить картинку Snapmatic - + Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + No valid file is selected Выбранный файл неверен - + Enabled pictures: %1 of %2 Включенные картинки: %1 из %2 - + Importable files (%1) Файлы Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° (%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, файл не может быть правильно обработан - + Can't import %1 because file format can't be detected Ðе получилоÑÑŒ импортировать %1, не удалоÑÑŒ определить формат файла - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе удалоÑÑŒ импортировать картинку Snapmatic, название не начинаетÑÑ Ñ PGTA или не заканчиваетÑÑ Ñ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе удалоÑÑŒ импортировать картинку Snapmatic, картинка уже в игре - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе удалоÑÑŒ импортировать картинку Snapmatic, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, can't copy the file into profile Ðе удалоÑÑŒ импортировать Ñохранение, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, no Savegame slot is left Ðе удалоÑÑŒ импортировать Ñохранение, нет пуÑтых Ñчеек под ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + JPG pictures and GTA Snapmatic Картинки JPG и GTA Snapmatic - - + + JPG pictures only Только картинки JPG - - + + GTA Snapmatic only Только GTA Snapmatic - + Initialising export... Подготовка к ÑкÑпорту... - - + + No Snapmatic pictures or Savegames files are selected Ðе выделены ни один Snapmatic или Ñохранение - - - + + + Remove selected СнÑть выделение - + You really want remove the selected Snapmatic picutres and Savegame files? Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - - + + Prepare Content for Import... + + + + + Qualify as Avatar Пометить как Ðватар - - - - - - + + + + + + No Snapmatic pictures are selected Ðе выделена ни одна картинка Snapmatic - - - - + + + + Patch selected... Пропатчить выделенные... - - - - - - - - + + + + + + + + Patch file %1 of %2 files ИзменÑетÑÑ Ñ„Ð°Ð¹Ð» %1 из %2 - - - - - - + + + + + + %1 failed with... %2 @@ -1310,80 +1316,80 @@ Press 1 for Default View %2 - + Failed to remove all selected Snapmatic pictures and/or Savegame files Ðе удалоÑÑŒ удалить вÑе выделенные картинки Snapmatic и/или ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - + Qualify %1 failed with... Помечание - - + + Change Players... Изменить игроков... - + Change Players %1 failed with... Измение игроков - - - + + + Change Crew... Изменить банду... - + Failed to enter a valid Snapmatic Crew ID Введённый идентификатор банды не верен - + Change Crew %1 failed with... Изменение банды - - - + + + Change Title... Изменить заголовок... - + Failed to enter a valid Snapmatic title Введённый заголовок не верен - + Change Title %1 failed with... Изменение заголовка - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1ЭÑкпортировать картинки Snapmatic%2<br><br>Картинки JPG можно открыть любым проÑмотрщиком<br>Картинки формата GTA Snapmatic можно Ñнова импортировать в игру<br><br>ЭкÑпортировать как: - - - - - + + + + + Export selected... Экпортировать выделенное... - + Export failed with... %1 @@ -1404,7 +1410,7 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1413,17 +1419,17 @@ Press 1 for Default View QApplication - + Font Шрифт - + Selected Font: %1 Выбранный шрифт: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>Добро пожаловать в %1!</h4>Хочешь изменить наÑтройки %1 перед иÑпользованием? @@ -1544,32 +1550,32 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить Ñохранение %1 - + &View &ПроÑмотр - + &Remove &Удалить - + &Select &Выбрать - + &Deselect Сн&Ñть выбор - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1579,7 +1585,7 @@ Press 1 for Default View Копировать Ñохранение - + &Export &ЭкÑпортировать @@ -1683,7 +1689,7 @@ Press 1 for Default View Meme - + Snapmatic Title Заголовок Snapmatic @@ -1779,19 +1785,19 @@ Press 1 for Default View Ðе удалоÑÑŒ измененить ÑвойÑтва Snapmatic из-за проблемы ввода/вывода - + New Snapmatic title: Ðовый заголовок Snapmatic: - + Snapmatic Crew Банда на Snapmatic - + New Snapmatic crew: ÐÐ¾Ð²Ð°Ñ Ð±Ð°Ð½Ð´Ð° на Snapmatic: @@ -1800,66 +1806,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 повреждён @@ -1929,52 +1935,52 @@ Press 1 for Default View Ðе удалоÑÑŒ показать %1 в ÑпиÑке картинок Snapmatic в игре - + Edi&t &Правка - + Show &In-game Показывать в &игре - + Hide &In-game Ск&рыть в игре - + &Export &ЭкÑпорт - + &View По&казать - + &Remove У&далить - + &Select &Выделить - + &Deselect Сн&Ñть выделение - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1992,22 +1998,22 @@ Press 1 for Default View TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? - + %1 User Statistics - + Yes, I want include personal usage data. - + &OK &ОК @@ -2208,15 +2214,15 @@ Press 1 for Default View Пере&загрузить - - + + Show In-game Показывать в игре - - + + Hide In-game Скрыть в игре diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts index 9410a39..8a4e386 100644 --- a/res/gta5sync_uk.ts +++ b/res/gta5sync_uk.ts @@ -66,37 +66,37 @@ Pictures and Savegames %1 ліцензовано під <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> - + Release Реліз - + Release Candidate Реліз-Кандидат - + Daily Build Щоденна Збірка - + Developer Розробник - + Beta Бета - + Alpha Ðльфа - + Custom Custom @@ -309,14 +309,14 @@ Pictures and Savegames - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! КориÑтувацький Ðватар - + Custom Picture Custom Picture Description in SC, don't use Special Character! КориÑтувацьке Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ @@ -774,37 +774,37 @@ Y: %2 - + Export as &Picture... ЕкÑпортувати Ñк &зображеннÑ... - + Export as &Snapmatic... ЕкÑпортувати Ñк &Snapmatic... - + &Edit Properties... &Змінити влаÑтивоÑті... - + &Overwrite Image... &ПерезапиÑати зображеннÑ... - + Open &Map Viewer... Відкрити &карту... - + Open &JSON Editor... Відкрити редактор &JSON... @@ -1059,8 +1059,9 @@ Press 1 for Default View - - + + + Import... ІмпортуваннÑ... @@ -1071,34 +1072,34 @@ Press 1 for Default View - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import Імпорт - + All image files (%1) Файли зображень (%1) - + All files (**) УÑÑ– файли (**) @@ -1106,75 +1107,75 @@ Press 1 for Default View - + Can't import %1 because file can't be open Ðеможливо імпортувати %1, оÑкільки файл не може бути відкритий - + Can't import %1 because file can't be parsed properly Ðеможливо імпортувати %1, оÑкільки файл неможливо розібрати правильно - + Enabled pictures: %1 of %2 Увімкнено фотографії:%1 з%2 - + Loading... ЗавантаженнÑ... - + Snapmatic Loader Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>ÐаÑтупні Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð±ÑƒÐ»Ð¸ відновлені</h4>%1 - + Importable files (%1) ІмпортуютьÑÑ Ñ„Ð°Ð¹Ð»Ð¸ (%1) - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + Savegames files (SGTA*) Файли Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸ (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ (PGTA*) - - + + No valid file is selected Вибрані недійÑні файли - - + + Import file %1 of %2 files ІмпортуєтьÑÑ Ñ„Ð°Ð¹Ð» %1 з %2 файлів - + Import failed with... %1 @@ -1183,86 +1184,86 @@ Press 1 for Default View %1 - + Failed to read Snapmatic picture Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Snapmatic картинку - + Failed to read Savegame file Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸ - + Can't import %1 because file format can't be detected Ðеможливо імпортувати%1, оÑкільки формат файлу не може бути виÑвлений - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Snapmatic, файл не починаєтьÑÑ Ð· PGTA або закінчуєтьÑÑ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ знімок Snapmatic, картинка вже в грі - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Snapmatic, не можна Ñкопіювати файл у профіль - + Failed to import the Savegame, can't copy the file into profile Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Сейв, не можна Ñкопіювати файл у профіль - + Failed to import the Savegame, no Savegame slot is left Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Сейв, немає вільного Ñлота - - - - - + + + + + Export selected... ЕкÑпорт обраних... - - + + JPG pictures and GTA Snapmatic JPG картинки Ñ– GTA Snapmatic - - + + JPG pictures only Тільки JPG картинки - - + + GTA Snapmatic only Тільки GTA Snapmatic - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1 ЕкÑпортувати Snapmatic фотографії %2 <br><br> Фотографії JPG дозволÑють відкривати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð° допомогою заÑобу переглÑду зображень<br>GTA Snapmatic дає змогу імпортувати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð² гру<br><br>ЕкÑпортувати Ñк: - + Initialising export... Ð†Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ ÐµÐºÑпорту... - + Export failed with... %1 @@ -1271,45 +1272,45 @@ Press 1 for Default View %1 - - + + No Snapmatic pictures or Savegames files are selected Ðе вибрано жодного Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ файлу Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ - - - + + + Remove selected Видалити вибрані - + You really want remove the selected Snapmatic picutres and Savegame files? Ви дійÑно хочете видалити вибрані Snapmatic фотографії та файли Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸? - + Failed to remove all selected Snapmatic pictures and/or Savegame files Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ вÑÑ– обрані Snapmatic фотографії та/або Сейви - - - - - - + + + + + + No Snapmatic pictures are selected Ðе вибрано жодного Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ - - - - - - + + + + + + %1 failed with... %2 @@ -1319,81 +1320,86 @@ Press 1 for Default View %2 - - + + Prepare Content for Import... + + + + + Qualify as Avatar Позначити Ñк Ðватар - - - - + + + + Patch selected... Вибір патчу... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Патч файлу %1 з %2 файлів - + Qualify %1 failed with... ЯкіÑть - - + + Change Players... Зміна гравців... - + Change Players %1 failed with... Змінити гравців - - - + + + Change Crew... Зміна банди... - + Failed to enter a valid Snapmatic Crew ID Ðе вдалоÑÑ Ð²Ð²ÐµÑти дійÑний ID Банди Snapmatic - + Change Crew %1 failed with... Змінити банду - - - + + + Change Title... Зміна назви... - + Failed to enter a valid Snapmatic title Ðе вдалоÑÑ Ð²Ð²ÐµÑти дійÑний заголовок Snapmatic - + Change Title %1 failed with... Змінити назву @@ -1407,17 +1413,17 @@ Press 1 for Default View QApplication - + Font Шрифт - + Selected Font: %1 Вибраний шрифт:%1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>ЛаÑкаво проÑимо до %1!</h4>Ви хочете налаштувати %1 перед викориÑтаннÑм? @@ -1495,37 +1501,37 @@ Press 1 for Default View Видалити - + &View &ПереглÑд - + &Export &ЕкÑпорт - + &Remove &Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ - + &Select &Ð’Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ - + &Deselect &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ - + Select &All Вибрати &уÑÑ– - + &Deselect All &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ ÑƒÑÑ–Ñ… @@ -1720,25 +1726,25 @@ Press 1 for Default View Змінити влаÑтивоÑті Snapmatic не вдалоÑÑ Ñ‡ÐµÑ€ÐµÐ· JSON Помилку - + Snapmatic Crew Snapmatic банда - + New Snapmatic crew: Ðова Snapmatic банда: - + Snapmatic Title Snapmatic назва - + New Snapmatic title: Ðовий Snapmatic заголовок: @@ -1795,64 +1801,64 @@ 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 @@ -1913,52 +1919,52 @@ Press 1 for Default View Видалити - + Edi&t Редагува&ти - + Show &In-game Показати &у грі - + Hide &In-game Сховати &у грі - + &Export &ЕкÑпортувати - + &View &ПереглÑнути - + &Remove &Видалити - + &Select &Ð’Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ - + &Deselect &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ - + Select &All Вибрати &уÑÑ– - + &Deselect All &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ ÑƒÑÑ–Ñ… @@ -1986,22 +1992,22 @@ Press 1 for Default View TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? - + %1 User Statistics - + Yes, I want include personal usage data. - + &OK &OK @@ -2177,15 +2183,15 @@ Press 1 for Default View Змінити &гравців... - - + + Show In-game Показати у грі - - + + Hide In-game Сховати у грі diff --git a/res/gta5sync_zh_TW.ts b/res/gta5sync_zh_TW.ts index a2b7b76..b38a0e6 100644 --- a/res/gta5sync_zh_TW.ts +++ b/res/gta5sync_zh_TW.ts @@ -65,37 +65,37 @@ Pictures and Savegames %1 使用 <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> æŽˆæ¬Šæ¢æ¬¾ç™¼å¸ƒ - + Release æ­£å¼ç‰ˆæœ¬ - + Release Candidate 最終發布版本 - + Daily Build æ¯æ—¥å»ºç½®ç‰ˆæœ¬ - + Developer 開發版本 - + Beta Beta 版本 - + Alpha Alpha 版本 - + Custom 自訂 @@ -308,14 +308,14 @@ Pictures and Savegames - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! 自訂大頭貼 - + Custom Picture Custom Picture Description in SC, don't use Special Character! 自訂圖片 @@ -772,37 +772,37 @@ Y: %2 - + Export as &Picture... 匯出æˆåœ–片(&P)... - + Export as &Snapmatic... åŒ¯å‡ºæˆ Snapmatic(&S)... - + &Edit Properties... 編輯屬性(&E) ... - + &Overwrite Image... 修改圖片(&O)... - + Open &Map Viewer... 開啟地圖檢視器(&M)... - + Open &JSON Editor... 開啟 JSON 編輯器(&J)... @@ -1057,8 +1057,9 @@ Press 1 for Default View - - + + + Import... 匯入... @@ -1069,34 +1070,34 @@ Press 1 for Default View - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import 匯入 - + All image files (%1) 所有圖片 (%1) - + All files (**) 所有檔案 (**) @@ -1104,206 +1105,206 @@ Press 1 for Default View - + Can't import %1 because file can't be open 無法匯入 %1,因為檔案無法開啟 - + Can't import %1 because file can't be parsed properly 無法匯入 %1ï¼Œå› ç‚ºæª”æ¡ˆç„¡æ³•æ­£ç¢ºè§£æž - + Enabled pictures: %1 of %2 開啟圖片 %1 å…± %2 - + Loading... 載入中... - + Snapmatic Loader Snapmatic 載入器 - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>下列的 Snapmatic 圖片已被更新</h4>%1 - + Importable files (%1) å¯åŒ¯å…¥çš„æª”案 (%1) - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + Savegames files (SGTA*) éŠæˆ²å­˜æª” (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic 圖片 (PGTA*) - - + + No valid file is selected æ²’æœ‰é¸æ“‡æœ‰æ•ˆçš„æª”案 - - + + Import file %1 of %2 files 匯入檔案 %1 å…± %2 個 - + Import failed with... %1 %1 匯入失敗 - + Failed to read Snapmatic picture ç„¡æ³•è®€å– Snapmatic 圖片 - + Failed to read Savegame file 無法讀å–éŠæˆ²å­˜æª” - + Can't import %1 because file format can't be detected 無法匯入 %1ï¼Œå› ç‚ºç„¡æ³•æª¢æ¸¬è©²æª”æ¡ˆæ ¼å¼ - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e 匯入 Snapmatic åœ–ç‰‡å¤±æ•—ï¼Œæª”æ¡ˆä¸æ˜¯ PGTA 開頭或附檔å䏿˜¯ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game 匯入 Snapmatic åœ–ç‰‡å¤±æ•—ï¼Œåœ–ç‰‡å·²ç¶“åœ¨éŠæˆ²ä¸­ - + Failed to import the Snapmatic picture, can't copy the file into profile 匯入 Snapmatic 圖片失敗,無法將該檔案複製到設定檔中 - + Failed to import the Savegame, can't copy the file into profile åŒ¯å…¥éŠæˆ²å­˜æª”失敗,無法將該檔案複製到設定檔中 - + Failed to import the Savegame, no Savegame slot is left åŒ¯å…¥éŠæˆ²å­˜æª”å¤±æ•—ï¼Œæ²’æœ‰éŠæˆ²å­˜æª”æ¬„ä½ - - - - - + + + + + Export selected... 匯出所é¸... - - + + JPG pictures and GTA Snapmatic JPG 圖片和 GTA Snapmatic - - + + JPG pictures only åªæœ‰ JPG 圖片 - - + + GTA Snapmatic only åªæœ‰ GTA Snapmatic - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1 匯出 Snapmatic 圖片 %2<br><br>JPG 圖片å¯ä½¿ç”¨åœ–片檢視器開啟<br>GTA Snapmatic å¯ä»¥åŒ¯å…¥åˆ°éŠæˆ²ä¸­<br><br>匯出æˆ: - + Initialising export... åˆå§‹åŒ–... - + Export failed with... %1 %1 匯出失敗 - - + + No Snapmatic pictures or Savegames files are selected æœªé¸æ“‡ Snapmatic åœ–ç‰‡æˆ–éŠæˆ²å­˜æª” - - - + + + Remove selected ç§»é™¤æ‰€é¸ - + You really want remove the selected Snapmatic picutres and Savegame files? 你想移除所é¸çš„ Snapmatic 圖片/存檔嗎? - + Failed to remove all selected Snapmatic pictures and/or Savegame files ç„¡æ³•ç§»é™¤æ‰€é¸æ“‡çš„ Snapmatic 圖片/éŠæˆ²å­˜æª” - - - - - - + + + + + + No Snapmatic pictures are selected æœªé¸æ“‡ Snapmatic 圖片 - - - - - - + + + + + + %1 failed with... %2 @@ -1313,81 +1314,86 @@ Press 1 for Default View %2 - - + + Prepare Content for Import... + + + + + Qualify as Avatar åˆæ ¼å¤§é ­è²¼ - - - - + + + + Patch selected... 修改所é¸... - - - - - - - - + + + + + + + + Patch file %1 of %2 files 修改檔案 %1 å…± %2 個檔案 - + Qualify %1 failed with... åˆæ ¼ - - + + Change Players... 更改玩家... - + Change Players %1 failed with... 更改玩家 - - - + + + Change Crew... 更改幫會... - + Failed to enter a valid Snapmatic Crew ID 輸入了無效的幫會 ID - + Change Crew %1 failed with... 更改幫會 - - - + + + Change Title... 更改標題... - + Failed to enter a valid Snapmatic title 輸入了無效的標題 - + Change Title %1 failed with... 更改標題 @@ -1401,17 +1407,17 @@ Press 1 for Default View QApplication - + Font å­—é«” - + Selected Font: %1 鏿“‡çš„å­—é«”: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>歡迎使用 %1!</h4> 你想在開始å‰å…ˆè¨­å®š %1 å—Ž? @@ -1489,37 +1495,37 @@ Press 1 for Default View 刪除 - + &View 檢視(&V) - + &Export 匯出(&E) - + &Remove 移除(&R) - + &Select 鏿“‡(&S) - + &Deselect å–æ¶ˆé¸æ“‡(&D) - + Select &All 鏿“‡å…¨éƒ¨(&A) - + &Deselect All å–æ¶ˆé¸æ“‡å…¨éƒ¨(&D) @@ -1714,25 +1720,25 @@ Press 1 for Default View JSON 錯誤,未能更新 Snapmatic 屬性 - + Snapmatic Crew 幫會 - + New Snapmatic crew: 輸入新的幫會: - + Snapmatic Title 標題 - + New Snapmatic title: 輸入新的標題: @@ -1789,64 +1795,64 @@ 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 @@ -1907,52 +1913,52 @@ Press 1 for Default View 刪除 - + Edi&t 編輯(&E) - + Show &In-game åœ¨éŠæˆ²ä¸­é¡¯ç¤º(&I) - + Hide &In-game åœ¨éŠæˆ²ä¸­éš±è—(&I) - + &Export 匯出(&E) - + &View 檢視(&V) - + &Remove 移除(&R) - + &Select 鏿“‡(&S) - + &Deselect å–æ¶ˆé¸æ“‡(&D) - + Select &All 鏿“‡å…¨éƒ¨(&A) - + &Deselect All å–æ¶ˆé¸æ“‡å…¨éƒ¨(&D) @@ -1980,22 +1986,22 @@ Press 1 for Default View TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? - + %1 User Statistics - + Yes, I want include personal usage data. - + &OK 確定(&O) @@ -2171,15 +2177,15 @@ Press 1 for Default View 更改玩家(&P)... - - + + Show In-game åœ¨éŠæˆ²ä¸­é¡¯ç¤º - - + + Hide In-game åœ¨éŠæˆ²ä¸­éš±è— From 0e337b4decdf67816ee4680451f7a8493898e89c Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 17 Jun 2018 09:51:46 +0200 Subject: [PATCH 128/359] fix Qt4 compilation --- ProfileInterface.cpp | 15 +++++++- res/gta5sync_de.ts | 82 +++++++++++++++++++++---------------------- res/gta5sync_en_US.ts | 82 +++++++++++++++++++++---------------------- res/gta5sync_fr.ts | 82 +++++++++++++++++++++---------------------- res/gta5sync_ru.ts | 82 +++++++++++++++++++++---------------------- res/gta5sync_uk.ts | 82 +++++++++++++++++++++---------------------- res/gta5sync_zh_TW.ts | 82 +++++++++++++++++++++---------------------- 7 files changed, 260 insertions(+), 247 deletions(-) diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 10f0cda..ff7433e 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -1433,15 +1433,28 @@ bool ProfileInterface::eventFilter(QObject *watched, QEvent *event) if (clipboardUrl.isValid()) { QDialog urlPasteDialog(this); +#if QT_VERSION >= 0x050000 urlPasteDialog.setObjectName(QStringLiteral("UrlPasteDialog")); +#else + urlPasteDialog.setObjectName(QString::fromUtf8("UrlPasteDialog")); +#endif urlPasteDialog.setWindowFlags(urlPasteDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint); urlPasteDialog.setWindowTitle(tr("Import...")); urlPasteDialog.setModal(true); QVBoxLayout urlPasteLayout(&urlPasteDialog); +#if QT_VERSION >= 0x050000 urlPasteLayout.setObjectName(QStringLiteral("UrlPasteLayout")); +#else + urlPasteLayout.setObjectName(QString::fromUtf8("UrlPasteLayout")); +#endif urlPasteDialog.setLayout(&urlPasteLayout); UiModLabel urlPasteLabel(&urlPasteDialog); - urlPasteLabel.setObjectName("UrlPasteLabel"); +#if QT_VERSION >= 0x050000 + urlPasteLabel.setObjectName(QStringLiteral("UrlPasteLabel")); +#else + urlPasteLabel.setObjectName(QString::fromUtf8("UrlPasteLabel")); +#endif + urlPasteLabel.setText(tr("Prepare Content for Import...")); urlPasteLayout.addWidget(&urlPasteLabel); urlPasteDialog.setFixedSize(urlPasteDialog.sizeHint()); diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index 03e49ae..24a367a 100644 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -1070,7 +1070,7 @@ Drücke 1 für Standardmodus - + Import... Importieren... @@ -1242,38 +1242,38 @@ Drücke 1 für Standardmodus Nur GTA Snapmatic - - - - + + + + Patch selected... Auswahl patchen... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Patche Datei %1 von %2 Dateien - - + + Qualify as Avatar Als Avatar qualifizieren - - - - + + + + No Snapmatic pictures are selected Keine Snapmatic Bilder sind ausgewählt @@ -1285,10 +1285,10 @@ Drücke 1 für Standardmodus - - - - + + + + %1 failed with... %2 @@ -1298,60 +1298,60 @@ Drücke 1 für Standardmodus %2 - + Prepare Content for Import... Bereite Inhalt für Import vor... - + Qualify %1 failed with... Qualifizieren - - + + Change Players... Spieler ändern... - + Change Players %1 failed with... Spieler ändern - - - + + + Change Crew... Crew ändern... - + Failed to enter a valid Snapmatic Crew ID Fehlgeschlagen beim Eingeben von einer gültigen Crew ID - + Change Crew %1 failed with... Crew ändern - - + + Change Title... Titel ändern... - + Failed to enter a valid Snapmatic title Fehlgeschlagen beim Eingeben eines gültigen Snapmatic Titel - + Change Title %1 failed with... Titel ändern @@ -1672,7 +1672,7 @@ Drücke 1 für Standardmodus Meme - + Snapmatic Title Snapmatic Titel @@ -1778,19 +1778,19 @@ Drücke 1 für Standardmodus 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: diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index f4a0e0a..8b1ce16 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -1063,7 +1063,7 @@ Press 1 for Default View - + Import... @@ -1268,48 +1268,48 @@ Press 1 for Default View - - + + Qualify as Avatar - - - - + + + + No Snapmatic pictures are selected - - - - + + + + Patch selected... - - - - - - - - + + + + + + + + Patch file %1 of %2 files - - - - + + + + %1 failed with... %2 @@ -1322,60 +1322,60 @@ Press 1 for Default View - + Prepare Content for Import... - + Qualify %1 failed with... - - + + Change Players... - + Change Players %1 failed with... - - - + + + Change Crew... - + Failed to enter a valid Snapmatic Crew ID - + Change Crew %1 failed with... - - + + Change Title... - + Failed to enter a valid Snapmatic title - + Change Title %1 failed with... @@ -1747,25 +1747,25 @@ Press 1 for Default View - + Snapmatic Title - + New Snapmatic title: - + Snapmatic Crew - + New Snapmatic crew: diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index 0138ce8..3807488 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -1081,7 +1081,7 @@ Appuyer sur 1 pour le mode par défaut - + Import... Importer... @@ -1257,48 +1257,48 @@ Appuyer sur 1 pour le mode par défaut Initialisation de l'export... - - + + Qualify as Avatar Qualifier comme Avatar - - - - + + + + No Snapmatic pictures are selected Aucun Snapmatic sélectionné - - - - + + + + Patch selected... Patcher la sélection... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Patch du fichier %1 sur %2 - - - - + + + + %1 failed with... %2 @@ -1313,60 +1313,60 @@ Appuyer sur 1 pour le mode par défaut Échec de la supression des Snapmatic et/ou des fichiers de sauvegarde sélectionnés - + Prepare Content for Import... - + Qualify %1 failed with... Qualifier - - + + Change Players... Modifier les joueurs... - + Change Players %1 failed with... Modifier les joueurs - - - + + + Change Crew... Modifier le Crew... - + Failed to enter a valid Snapmatic Crew ID Snapmatic Crew ID invalide - + Change Crew %1 failed with... Changer le Crew - - + + Change Title... Changer le titre... - + Failed to enter a valid Snapmatic title Titre Snapmatic invalide - + Change Title %1 failed with... Changer le titre @@ -1673,7 +1673,7 @@ Appuyer sur 1 pour le mode par défaut Meme - + Snapmatic Title Titre Snapmatic @@ -1781,19 +1781,19 @@ Appuyer sur 1 pour le mode par défaut 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 : diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index 4bc1468..ea29da3 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -1075,7 +1075,7 @@ Press 1 for Default View - + Import... Импортировать... @@ -1260,53 +1260,53 @@ Press 1 for Default View Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - + Prepare Content for Import... - - + + Qualify as Avatar Пометить как Ðватар - - - - + + + + No Snapmatic pictures are selected Ðе выделена ни одна картинка Snapmatic - - - - + + + + Patch selected... Пропатчить выделенные... - - - - - - - - + + + + + + + + Patch file %1 of %2 files ИзменÑетÑÑ Ñ„Ð°Ð¹Ð» %1 из %2 - - - - + + + + %1 failed with... %2 @@ -1321,55 +1321,55 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить вÑе выделенные картинки Snapmatic и/или ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - + Qualify %1 failed with... Помечание - - + + Change Players... Изменить игроков... - + Change Players %1 failed with... Измение игроков - - - + + + Change Crew... Изменить банду... - + Failed to enter a valid Snapmatic Crew ID Введённый идентификатор банды не верен - + Change Crew %1 failed with... Изменение банды - - + + Change Title... Изменить заголовок... - + Failed to enter a valid Snapmatic title Введённый заголовок не верен - + Change Title %1 failed with... Изменение заголовка @@ -1689,7 +1689,7 @@ Press 1 for Default View Meme - + Snapmatic Title Заголовок Snapmatic @@ -1785,19 +1785,19 @@ Press 1 for Default View Ðе удалоÑÑŒ измененить ÑвойÑтва Snapmatic из-за проблемы ввода/вывода - + New Snapmatic title: Ðовый заголовок Snapmatic: - + Snapmatic Crew Банда на Snapmatic - + New Snapmatic crew: ÐÐ¾Ð²Ð°Ñ Ð±Ð°Ð½Ð´Ð° на Snapmatic: diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts index 8a4e386..f5609eb 100644 --- a/res/gta5sync_uk.ts +++ b/res/gta5sync_uk.ts @@ -1061,7 +1061,7 @@ Press 1 for Default View - + Import... ІмпортуваннÑ... @@ -1297,20 +1297,20 @@ Press 1 for Default View - - - - + + + + No Snapmatic pictures are selected Ðе вибрано жодного Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ - - - - + + + + %1 failed with... %2 @@ -1320,86 +1320,86 @@ Press 1 for Default View %2 - + Prepare Content for Import... - - + + Qualify as Avatar Позначити Ñк Ðватар - - - - + + + + Patch selected... Вибір патчу... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Патч файлу %1 з %2 файлів - + Qualify %1 failed with... ЯкіÑть - - + + Change Players... Зміна гравців... - + Change Players %1 failed with... Змінити гравців - - - + + + Change Crew... Зміна банди... - + Failed to enter a valid Snapmatic Crew ID Ðе вдалоÑÑ Ð²Ð²ÐµÑти дійÑний ID Банди Snapmatic - + Change Crew %1 failed with... Змінити банду - - + + Change Title... Зміна назви... - + Failed to enter a valid Snapmatic title Ðе вдалоÑÑ Ð²Ð²ÐµÑти дійÑний заголовок Snapmatic - + Change Title %1 failed with... Змінити назву @@ -1726,25 +1726,25 @@ Press 1 for Default View Змінити влаÑтивоÑті Snapmatic не вдалоÑÑ Ñ‡ÐµÑ€ÐµÐ· JSON Помилку - + Snapmatic Crew Snapmatic банда - + New Snapmatic crew: Ðова Snapmatic банда: - + Snapmatic Title Snapmatic назва - + New Snapmatic title: Ðовий Snapmatic заголовок: diff --git a/res/gta5sync_zh_TW.ts b/res/gta5sync_zh_TW.ts index b38a0e6..60763cd 100644 --- a/res/gta5sync_zh_TW.ts +++ b/res/gta5sync_zh_TW.ts @@ -1059,7 +1059,7 @@ Press 1 for Default View - + Import... 匯入... @@ -1291,20 +1291,20 @@ Press 1 for Default View - - - - + + + + No Snapmatic pictures are selected æœªé¸æ“‡ Snapmatic 圖片 - - - - + + + + %1 failed with... %2 @@ -1314,86 +1314,86 @@ Press 1 for Default View %2 - + Prepare Content for Import... - - + + Qualify as Avatar åˆæ ¼å¤§é ­è²¼ - - - - + + + + Patch selected... 修改所é¸... - - - - - - - - + + + + + + + + Patch file %1 of %2 files 修改檔案 %1 å…± %2 個檔案 - + Qualify %1 failed with... åˆæ ¼ - - + + Change Players... 更改玩家... - + Change Players %1 failed with... 更改玩家 - - - + + + Change Crew... 更改幫會... - + Failed to enter a valid Snapmatic Crew ID 輸入了無效的幫會 ID - + Change Crew %1 failed with... 更改幫會 - - + + Change Title... 更改標題... - + Failed to enter a valid Snapmatic title 輸入了無效的標題 - + Change Title %1 failed with... 更改標題 @@ -1720,25 +1720,25 @@ Press 1 for Default View JSON 錯誤,未能更新 Snapmatic 屬性 - + Snapmatic Crew 幫會 - + New Snapmatic crew: 輸入新的幫會: - + Snapmatic Title 標題 - + New Snapmatic title: 輸入新的標題: From c909e201784130bf5dde1acecb844a9b263c65d6 Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 17 Jun 2018 10:52:50 +0200 Subject: [PATCH 129/359] improve configure script --- ProfileInterface.cpp | 1 + configure | 94 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 89 insertions(+), 6 deletions(-) diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index ff7433e..78b4e9e 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -64,6 +64,7 @@ #include #include +#include #define importTimeFormat "HHmmss" #define findRetryLimit 500 diff --git a/configure b/configure index f020761..27c6e97 100755 --- a/configure +++ b/configure @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash #***************************************************************************** # gta5view Grand Theft Auto V Profile Viewer # Copyright (C) 2018 Syping @@ -35,10 +35,15 @@ begins_with_short_option() } _arg_prefix= _arg_qmake= +_arg_telemetry_authid= +_arg_telemetry_authpw= +_arg_telemetry_pushurl= +_arg_telemetry_regurl= +_arg_telemetry_weburl= print_help () { printf '%s\n' "gta5view Configure Script" - printf 'Usage: %s [--prefix ] [--qmake ] [-h|--help]\n' "$0" + printf 'Usage: %s [--prefix ] [--qmake ] [--telemetry-authid ] [--telemetry-authpw ] [--telemetry-pushurl ] [--telemetry-regurl ] [--telemetry-weburl ] [-h|--help]\n' "$0" printf '\t%s\n' "-h,--help: Prints help" } parse_commandline () @@ -63,6 +68,46 @@ parse_commandline () --qmake=*) _arg_qmake="${_key##--qmake=}" ;; + --telemetry-authid) + test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1 + _arg_telemetry_authid="$2" + shift + ;; + --telemetry-authid=*) + _arg_telemetry_authid="${_key##--telemetry-authid=}" + ;; + --telemetry-authpw) + test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1 + _arg_telemetry_authpw="$2" + shift + ;; + --telemetry-authpw=*) + _arg_telemetry_authpw="${_key##--telemetry-authpw=}" + ;; + --telemetry-pushurl) + test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1 + _arg_telemetry_pushurl="$2" + shift + ;; + --telemetry-pushurl=*) + _arg_telemetry_pushurl="${_key##--telemetry-pushurl=}" + ;; + --telemetry-regurl) + test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1 + _arg_telemetry_regurl="$2" + shift + ;; + --telemetry-regurl=*) + _arg_telemetry_regurl="${_key##--telemetry-regurl=}" + ;; + --telemetry-weburl) + test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1 + _arg_telemetry_weburl="$2" + shift + ;; + --telemetry-weburl=*) + _arg_telemetry_weburl="${_key##--telemetry-weburl=}" + ;; -h|--help) print_help exit 0 @@ -81,12 +126,24 @@ parse_commandline () parse_commandline "$@" # Initialise bash script - Step 1 -if [ ! "${_arg_prefix}" == "" ]; then +if [ "${_arg_prefix}" != "" ]; then PREFIX=${_arg_prefix} fi -if [ ! "${_arg_qmake}" == "" ]; then +if [ "${_arg_qmake}" != "" ]; then QMAKE_PATH=${_arg_qmake} fi +if [ "${_arg_telemetry_authid}" != "" ] && [ "${_arg_telemetry_authpw}" != "" ] && [ "${_arg_telemetry_pushurl}" != "" ] && [ "${_arg_telemetry_regurl}" != "" ]; then + _telemetry_args="${_telemetry_args} DEFINES+=GTA5SYNC_TELEMETRY" + _telemetry_args="${_telemetry_args} DEFINES+=GTA5SYNC_TELEMETRY_AUTHID=\\\\\\\"${_arg_telemetry_authid}\\\\\\\"" + _telemetry_args="${_telemetry_args} DEFINES+=GTA5SYNC_TELEMETRY_AUTHPW=\\\\\\\"${_arg_telemetry_authpw}\\\\\\\"" + _telemetry_args="${_telemetry_args} DEFINES+=GTA5SYNC_TELEMETRY_PUSHURL=\\\\\\\"${_arg_telemetry_pushurl}\\\\\\\"" + _telemetry_args="${_telemetry_args} DEFINES+=GTA5SYNC_TELEMETRY_REGURL=\\\\\\\"${_arg_telemetry_regurl}\\\\\\\"" + if [ "${_arg_telemetry_weburl}" != "" ]; then + _telemetry_args="${_telemetry_args} DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"${_arg_telemetry_weburl}\\\\\\\"" + fi +else + _telemetry_args= +fi # Initialise bash script - Step 2 set +e @@ -136,18 +193,43 @@ else fi # Clean Makefile -if [ ! "${RUN_MAKE_CLEAN}" == "NO" ]; then +if [ "${RUN_MAKE_CLEAN}" != "NO" ]; then if [ -f "Makefile" ]; then echo "${MAKE_PATH} distclean" ${MAKE_PATH} distclean fi fi +# Set qConf +if [ "${NO_QCONF}" != "YES" ]; then + _extra_args="${_extra_args} DEFINES+=GTA5SYNC_QCONF" +fi + # Set Prefix -if [ ! "${PREFIX}" == "" ]; then +if [ "${PREFIX}" != "" ]; then _extra_args="${_extra_args} GTA5SYNC_PREFIX=${PREFIX}" fi +# Set Build Type +if [ "${BUILDTYPE}" == "Alpha" ]; then + _extra_args="${_extra_args} DEFINES+=GTA5SYNC_BUILDTYPE_ALPHA" +elif [ "${BUILDTYPE}" == "Beta" ]; then + _extra_args="${_extra_args} DEFINES+=GTA5SYNC_BUILDTYPE_BETA" +elif [ "${BUILDTYPE}" == "Developer" ]; then + _extra_args="${_extra_args} DEFINES+=GTA5SYNC_BUILDTYPE_DEV" +elif [ "${BUILDTYPE}" == "Daily Build" ]; then + _extra_args="${_extra_args} DEFINES+=GTA5SYNC_BUILDTYPE_DAILY" +elif [ "${BUILDTYPE}" == "Release Candidate" ]; then + _extra_args="${_extra_args} DEFINES+=GTA5SYNC_BUILDTYPE_RC" +elif [ "${BUILDTYPE}" == "Release" ]; then + _extra_args="${_extra_args} DEFINES+=GTA5SYNC_BUILDTYPE_REL" +fi + +# Add Telemetry Args +if [ "${_telemetry_args}" != "" ]; then + _extra_args="${_extra_args}${_telemetry_args}" +fi + # Generating Makefile echo "${QMAKE_PATH}${_extra_args} ${SOURCE_DIR}/gta5view.pro" ${QMAKE_PATH}${_extra_args} ${SOURCE_DIR}/gta5view.pro From 9b5cb46c3525c8c2e752a8dbc71a1cb483c30c0b Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 17 Jun 2018 22:02:41 +0200 Subject: [PATCH 130/359] single selection hotkeys improved --- PictureDialog.cpp | 2 +- ProfileInterface.cpp | 25 ++++++++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/PictureDialog.cpp b/PictureDialog.cpp index 97d8f65..cc2cf07 100644 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -955,7 +955,7 @@ void PictureDialog::editSnapmaticImage() #ifndef Q_OS_ANDROID imageEditor->show(); #else - snapmaticEditor->showMaximized(); + imageEditor->showMaximized(); #endif imageEditor->exec(); delete imageEditor; diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 78b4e9e..d717010 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -1803,7 +1803,13 @@ void ProfileInterface::massTool(MassTool tool) return; } - PlayerListDialog *playerListDialog = new PlayerListDialog(QStringList(), profileDB, this); + QStringList players; + if (snapmaticWidgets.length() == 1) + { + players = snapmaticWidgets.at(0)->getPicture()->getSnapmaticProperties().playersList; + } + + PlayerListDialog *playerListDialog = new PlayerListDialog(players, profileDB, this); playerListDialog->setModal(true); playerListDialog->show(); playerListDialog->exec(); @@ -1811,7 +1817,7 @@ void ProfileInterface::massTool(MassTool tool) { return; } - QStringList players = playerListDialog->getPlayerList(); + players = playerListDialog->getPlayerList(); delete playerListDialog; // Prepare Progress @@ -1897,9 +1903,14 @@ void ProfileInterface::massTool(MassTool tool) } int crewID = 0; + if (snapmaticWidgets.length() == 1) + { + crewID = snapmaticWidgets.at(0)->getPicture()->getSnapmaticProperties().crewID; + } { preSelectionCrewID: bool ok; + int indexNum = 0; QStringList itemList; QStringList crewList = crewDB->getCrews(); if (!crewList.contains(QLatin1String("0"))) @@ -1911,7 +1922,11 @@ preSelectionCrewID: { itemList += QString("%1 (%2)").arg(crew, crewDB->getCrewName(crew.toInt())); } - QString newCrew = QInputDialog::getItem(this, QApplication::translate("SnapmaticEditor", "Snapmatic Crew"), QApplication::translate("SnapmaticEditor", "New Snapmatic crew:"), itemList, 0, true, &ok, windowFlags()^Qt::Dialog^Qt::WindowMinMaxButtonsHint); + if (crewList.contains(QString::number(crewID))) + { + indexNum = crewList.indexOf(QRegExp(QString::number(crewID))); + } + QString newCrew = QInputDialog::getItem(this, QApplication::translate("SnapmaticEditor", "Snapmatic Crew"), QApplication::translate("SnapmaticEditor", "New Snapmatic crew:"), itemList, indexNum, true, &ok, windowFlags()^Qt::Dialog^Qt::WindowMinMaxButtonsHint); if (ok && !newCrew.isEmpty()) { if (newCrew.contains(" ")) newCrew = newCrew.split(" ").at(0); @@ -2015,6 +2030,10 @@ preSelectionCrewID: } QString snapmaticTitle; + if (snapmaticWidgets.length() == 1) + { + snapmaticTitle = snapmaticWidgets.at(0)->getPicture()->getPictureTitle(); + } { preSelectionTitle: bool ok; From 99f3c22ab062a6ced04e8da3bc5a8ff19d44e59f Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 22 Jun 2018 14:59:39 +0200 Subject: [PATCH 131/359] update telemetry blob --- .travis/TelemetryClassAuthenticator.cpp.enc | Bin 0 -> 2944 bytes .travis/source.sh | 2 +- tmext/TelemetryClassAuthenticator.cpp.enc | Bin 2944 -> 0 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 .travis/TelemetryClassAuthenticator.cpp.enc delete mode 100644 tmext/TelemetryClassAuthenticator.cpp.enc diff --git a/.travis/TelemetryClassAuthenticator.cpp.enc b/.travis/TelemetryClassAuthenticator.cpp.enc new file mode 100644 index 0000000000000000000000000000000000000000..498ad862dbbecf213d132368b1e9b5b130657cb5 GIT binary patch literal 2944 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 literal 0 HcmV?d00001 diff --git a/.travis/source.sh b/.travis/source.sh index 0f0792e..833e125 100755 --- a/.travis/source.sh +++ b/.travis/source.sh @@ -1,5 +1,5 @@ #!/bin/bash rm -rf tmext/TelemetryClassAuthenticator.cpp && \ -openssl aes-256-cbc -K $encrypted_55502862a724_key -iv $encrypted_55502862a724_iv -in tmext/TelemetryClassAuthenticator.cpp.enc -out tmext/TelemetryClassAuthenticator.cpp -d && \ +openssl aes-256-cbc -K $encrypted_db000a5d87d6_key -iv $encrypted_db000a5d87d6_iv -in .travis/TelemetryClassAuthenticator.cpp.enc -out tmext/TelemetryClassAuthenticator.cpp -d && \ openssl aes-256-cbc -K $encrypted_d57e7d2f8877_key -iv $encrypted_d57e7d2f8877_iv -in .travis/dropbox_uploader.enc -out ~/.dropbox_uploader -d diff --git a/tmext/TelemetryClassAuthenticator.cpp.enc b/tmext/TelemetryClassAuthenticator.cpp.enc deleted file mode 100644 index 04589890498d70f4a4d0f60ff6129f277e148a93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2944 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 From e2b7062e26f0db1bbc300f52581e92ac8d87a333 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 22 Jun 2018 17:11:18 +0200 Subject: [PATCH 132/359] update CI scripts --- .ci/ci.sh | 10 ++++++++++ {.travis => .ci}/debian_build.sh | 0 .travis/debian_travis.sh => .ci/debian_ci.sh | 2 +- {.travis => .ci}/debian_install.sh | 0 {.travis => .ci}/dropbox_uploader.sh | 0 {.travis => .ci}/gta5view.nsi | 0 {.travis => .ci}/osx_build.sh | 0 .travis/osx_travis.sh => .ci/osx_ci.sh | 4 ++-- {.travis => .ci}/osx_install.sh | 0 {.travis => .ci}/windows_build.sh | 0 .travis/windows_travis.sh => .ci/windows_ci.sh | 10 +++++----- {.travis => .ci}/wininstall_build.sh | 2 +- .../wininstall_travis.sh => .ci/wininstall_ci.sh | 2 +- .travis.yml | 14 +++++++------- .travis/travis.sh | 9 +-------- .travis/ubuntu_travis.sh | 4 ++-- 16 files changed, 30 insertions(+), 27 deletions(-) create mode 100755 .ci/ci.sh rename {.travis => .ci}/debian_build.sh (100%) rename .travis/debian_travis.sh => .ci/debian_ci.sh (92%) rename {.travis => .ci}/debian_install.sh (100%) rename {.travis => .ci}/dropbox_uploader.sh (100%) rename {.travis => .ci}/gta5view.nsi (100%) rename {.travis => .ci}/osx_build.sh (100%) rename .travis/osx_travis.sh => .ci/osx_ci.sh (55%) rename {.travis => .ci}/osx_install.sh (100%) rename {.travis => .ci}/windows_build.sh (100%) rename .travis/windows_travis.sh => .ci/windows_ci.sh (64%) rename {.travis => .ci}/wininstall_build.sh (94%) rename .travis/wininstall_travis.sh => .ci/wininstall_ci.sh (91%) diff --git a/.ci/ci.sh b/.ci/ci.sh new file mode 100755 index 0000000..6f7ebbf --- /dev/null +++ b/.ci/ci.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ $(git name-rev --tags --name-only $(git rev-parse HEAD)) == "undefined" ]; then export APPLICATION_VERSION=$(lua -e 'for line in io.lines("config.h") do local m = string.match(line, "#define GTA5SYNC_APPVER \"(.+)\"$"); if m then print(m); os.exit(0) end end'); else export APPLICATION_VERSION=$(git name-rev --tags --name-only $(git rev-parse HEAD)); fi +export PACKAGE_VERSION=$(grep -oE '^[^\-]*' <<< $APPLICATION_VERSION) +export PACKAGE_BUILD=$(grep -oP '\-\K.+' <<< $APPLICATION_VERSION) +export EXECUTABLE_VERSION=${PACKAGE_VERSION}${PACKAGE_BUILD}${EXECUTABLE_TAG} +if [[ ! ${PACKAGE_BUILD} ]]; then export PACKAGE_BUILD=1; fi +export PROJECT_DIR=$(pwd) + +.ci/${BUILD_SCRIPT} diff --git a/.travis/debian_build.sh b/.ci/debian_build.sh similarity index 100% rename from .travis/debian_build.sh rename to .ci/debian_build.sh diff --git a/.travis/debian_travis.sh b/.ci/debian_ci.sh similarity index 92% rename from .travis/debian_travis.sh rename to .ci/debian_ci.sh index 73ed796..c8728e7 100755 --- a/.travis/debian_travis.sh +++ b/.ci/debian_ci.sh @@ -12,4 +12,4 @@ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/debian_install.sh && .travis/debian_build.sh" + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/debian_install.sh && .ci/debian_build.sh" diff --git a/.travis/debian_install.sh b/.ci/debian_install.sh similarity index 100% rename from .travis/debian_install.sh rename to .ci/debian_install.sh diff --git a/.travis/dropbox_uploader.sh b/.ci/dropbox_uploader.sh similarity index 100% rename from .travis/dropbox_uploader.sh rename to .ci/dropbox_uploader.sh diff --git a/.travis/gta5view.nsi b/.ci/gta5view.nsi similarity index 100% rename from .travis/gta5view.nsi rename to .ci/gta5view.nsi diff --git a/.travis/osx_build.sh b/.ci/osx_build.sh similarity index 100% rename from .travis/osx_build.sh rename to .ci/osx_build.sh diff --git a/.travis/osx_travis.sh b/.ci/osx_ci.sh similarity index 55% rename from .travis/osx_travis.sh rename to .ci/osx_ci.sh index 4e4ae37..b144697 100755 --- a/.travis/osx_travis.sh +++ b/.ci/osx_ci.sh @@ -1,8 +1,8 @@ #!/bin/bash # Install packages -.travis/osx_install.sh && \ +.ci/osx_install.sh && \ # Build gta5view -.travis/osx_build.sh && \ +.ci/osx_build.sh && \ cd ${PROJECT_DIR} diff --git a/.travis/osx_install.sh b/.ci/osx_install.sh similarity index 100% rename from .travis/osx_install.sh rename to .ci/osx_install.sh diff --git a/.travis/windows_build.sh b/.ci/windows_build.sh similarity index 100% rename from .travis/windows_build.sh rename to .ci/windows_build.sh diff --git a/.travis/windows_travis.sh b/.ci/windows_ci.sh similarity index 64% rename from .travis/windows_travis.sh rename to .ci/windows_ci.sh index aafe48d..dd2a293 100755 --- a/.travis/windows_travis.sh +++ b/.ci/windows_ci.sh @@ -9,18 +9,18 @@ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/windows_build.sh" && \ + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/windows_build.sh" && \ # Prepare environment variable export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe && \ # Upload Assets to Dropbox if [ "${PACKAGE_CODE}" == "Dropbox" ]; then - ${PROJECT_DIR}/.travis/dropbox_uploader.sh mkdir gta5view-builds/${PACKAGE_VERSION} - ${PROJECT_DIR}/.travis/dropbox_uploader.sh upload ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} gta5view-builds/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ + ${PROJECT_DIR}/.ci/dropbox_uploader.sh mkdir gta5view-builds/${PACKAGE_VERSION} + ${PROJECT_DIR}/.ci/dropbox_uploader.sh upload ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} gta5view-builds/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ rm -rf ${GTA5VIEW_EXECUTABLE} elif [ "${PACKAGE_CODE}" == "gta5-mods" ]; then - ${PROJECT_DIR}/.travis/dropbox_uploader.sh mkdir gta5-mods/${PACKAGE_VERSION} - ${PROJECT_DIR}/.travis/dropbox_uploader.sh upload ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} gta5-mods/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ + ${PROJECT_DIR}/.ci/dropbox_uploader.sh mkdir gta5-mods/${PACKAGE_VERSION} + ${PROJECT_DIR}/.ci/dropbox_uploader.sh upload ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} gta5-mods/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ rm -rf ${GTA5VIEW_EXECUTABLE} fi diff --git a/.travis/wininstall_build.sh b/.ci/wininstall_build.sh similarity index 94% rename from .travis/wininstall_build.sh rename to .ci/wininstall_build.sh index 4b0bb7f..906145d 100755 --- a/.travis/wininstall_build.sh +++ b/.ci/wininstall_build.sh @@ -15,5 +15,5 @@ qmake ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCOD make depend && \ make -j 4 && \ cd ${PROJECT_DIR}/assets && \ -makensis -NOCD ${PROJECT_DIR}/.travis/gta5view.nsi && \ +makensis -NOCD ${PROJECT_DIR}/.ci/gta5view.nsi && \ mv -f gta5view_setup.exe gta5view-${EXECUTABLE_VERSION}_setup.exe diff --git a/.travis/wininstall_travis.sh b/.ci/wininstall_ci.sh similarity index 91% rename from .travis/wininstall_travis.sh rename to .ci/wininstall_ci.sh index fa8ef57..34b5ffc 100755 --- a/.travis/wininstall_travis.sh +++ b/.ci/wininstall_ci.sh @@ -9,4 +9,4 @@ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/wininstall_build.sh" + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/wininstall_build.sh" diff --git a/.travis.yml b/.travis.yml index fa7bd35..ddb2cfc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,37 +9,37 @@ service: matrix: include: - env: - - BUILD_SCRIPT=debian_travis.sh + - BUILD_SCRIPT=debian_ci.sh - RELEASE_LABEL="Debian 32-Bit Package" - DEBIAN_VERSION=stretch - DOCKER_USER=i386 - APT_INSTALL=clang - env: - - BUILD_SCRIPT=debian_travis.sh + - BUILD_SCRIPT=debian_ci.sh - RELEASE_LABEL="Debian 64-Bit Package" - DEBIAN_VERSION=stretch - DOCKER_USER=amd64 - APT_INSTALL=clang - env: - - BUILD_SCRIPT=windows_travis.sh + - BUILD_SCRIPT=windows_ci.sh - QT_SELECT=qt5-i686-w64-mingw32 - RELEASE_LABEL="Windows 32-Bit Portable" - env: - - BUILD_SCRIPT=windows_travis.sh + - BUILD_SCRIPT=windows_ci.sh - QT_SELECT=qt5-x86_64-w64-mingw32 - RELEASE_LABEL="Windows 64-Bit Portable" - EXECUTABLE_ARCH=_x64 - env: - - BUILD_SCRIPT=windows_travis.sh + - BUILD_SCRIPT=windows_ci.sh - QT_SELECT=qt5-x86_64-w64-mingw32 - PACKAGE_CODE=Dropbox - env: - - BUILD_SCRIPT=wininstall_travis.sh + - BUILD_SCRIPT=wininstall_ci.sh - QT_SELECT=qt5-x86_64-w64-mingw32 - RELEASE_LABEL="Windows 64-Bit Installer" - os: osx env: - - BUILD_SCRIPT=osx_travis.sh + - BUILD_SCRIPT=osx_ci.sh - RELEASE_LABEL="Mac OS X 64-Bit Disk Image" before_install: diff --git a/.travis/travis.sh b/.travis/travis.sh index e88bc95..68fef79 100755 --- a/.travis/travis.sh +++ b/.travis/travis.sh @@ -20,11 +20,4 @@ if [ "${PACKAGE_CODE}" == "" ]; then export PACKAGE_CODE=GitHub fi -if [ `git name-rev --tags --name-only $(git rev-parse HEAD)` == "undefined" ]; then export APPLICATION_VERSION=`lua -e 'for line in io.lines("config.h") do local m = string.match(line, "#define GTA5SYNC_APPVER \"(.+)\"$"); if m then print(m); os.exit(0) end end'`; else export APPLICATION_VERSION=`git name-rev --tags --name-only $(git rev-parse HEAD)`; fi -export PACKAGE_VERSION=$(grep -oE '^[^\-]*' <<< $APPLICATION_VERSION) -export PACKAGE_BUILD=$(grep -oP '\-\K.+' <<< $APPLICATION_VERSION) -export EXECUTABLE_VERSION=${PACKAGE_VERSION}${PACKAGE_BUILD}${EXECUTABLE_TAG} -if [[ ! ${PACKAGE_BUILD} ]]; then export PACKAGE_BUILD=1; fi -export PROJECT_DIR=$(pwd) - -.travis/${BUILD_SCRIPT} +.ci/ci.sh diff --git a/.travis/ubuntu_travis.sh b/.travis/ubuntu_travis.sh index 50de7d3..d93bcbd 100755 --- a/.travis/ubuntu_travis.sh +++ b/.travis/ubuntu_travis.sh @@ -1,8 +1,8 @@ #!/bin/bash # Install packages -sudo .travis/debian_install.sh && \ +sudo .ci/debian_install.sh && \ # Build gta5view -sudo .travis/debian_build.sh && \ +sudo .ci/debian_build.sh && \ cd ${PROJECT_DIR} From 0321d79136039cd1aa2c4076d6b66a1189323879 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 22 Jun 2018 17:25:27 +0200 Subject: [PATCH 133/359] rename some CI scripts and add GitLab main script --- .ci/{debian_ci.sh => debian_docker.sh} | 2 +- .ci/{windows_ci.sh => windows_docker.sh} | 0 ...{wininstall_ci.sh => wininstall_docker.sh} | 0 .gitlab/gitlab.sh | 19 +++++++++++++++++++ .travis.yml | 12 ++++++------ .travis/travis.sh | 2 +- 6 files changed, 27 insertions(+), 8 deletions(-) rename .ci/{debian_ci.sh => debian_docker.sh} (95%) rename .ci/{windows_ci.sh => windows_docker.sh} (100%) rename .ci/{wininstall_ci.sh => wininstall_docker.sh} (100%) create mode 100755 .gitlab/gitlab.sh diff --git a/.ci/debian_ci.sh b/.ci/debian_docker.sh similarity index 95% rename from .ci/debian_ci.sh rename to .ci/debian_docker.sh index c8728e7..4bdf15b 100755 --- a/.ci/debian_ci.sh +++ b/.ci/debian_docker.sh @@ -1,6 +1,6 @@ #!/bin/bash -if [[ ${DOCKER_USER} ]]; then +if [ "${DOCKER_USER}" != "" ]; then DOCKER_IMAGE=${DOCKER_USER}/debian:${DEBIAN_VERSION} else DOCKER_IMAGE=debian:${DEBIAN_VERSION} diff --git a/.ci/windows_ci.sh b/.ci/windows_docker.sh similarity index 100% rename from .ci/windows_ci.sh rename to .ci/windows_docker.sh diff --git a/.ci/wininstall_ci.sh b/.ci/wininstall_docker.sh similarity index 100% rename from .ci/wininstall_ci.sh rename to .ci/wininstall_docker.sh diff --git a/.gitlab/gitlab.sh b/.gitlab/gitlab.sh new file mode 100755 index 0000000..3c076ab --- /dev/null +++ b/.gitlab/gitlab.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# Install curl and lua +apt-get update -qq && \ +apt-get install -qq curl git lua5.3 openssl + +# Check if build is not tagged +if [ "${CI_COMMIT_TAG}" == "" ]; then + export EXECUTABLE_TAG=-$(git rev-parse --short HEAD) +else + export EXECUTABLE_TAG= +fi + +# Check if package code is not set +if [ "${PACKAGE_CODE}" == "" ]; then + export PACKAGE_CODE=GitLab +fi + +.ci/ci.sh diff --git a/.travis.yml b/.travis.yml index ddb2cfc..997ce78 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,32 +9,32 @@ service: matrix: include: - env: - - BUILD_SCRIPT=debian_ci.sh + - BUILD_SCRIPT=debian_docker.sh - RELEASE_LABEL="Debian 32-Bit Package" - DEBIAN_VERSION=stretch - DOCKER_USER=i386 - APT_INSTALL=clang - env: - - BUILD_SCRIPT=debian_ci.sh + - BUILD_SCRIPT=debian_docker.sh - RELEASE_LABEL="Debian 64-Bit Package" - DEBIAN_VERSION=stretch - DOCKER_USER=amd64 - APT_INSTALL=clang - env: - - BUILD_SCRIPT=windows_ci.sh + - BUILD_SCRIPT=windows_docker.sh - QT_SELECT=qt5-i686-w64-mingw32 - RELEASE_LABEL="Windows 32-Bit Portable" - env: - - BUILD_SCRIPT=windows_ci.sh + - BUILD_SCRIPT=windows_docker.sh - QT_SELECT=qt5-x86_64-w64-mingw32 - RELEASE_LABEL="Windows 64-Bit Portable" - EXECUTABLE_ARCH=_x64 - env: - - BUILD_SCRIPT=windows_ci.sh + - BUILD_SCRIPT=windows_docker.sh - QT_SELECT=qt5-x86_64-w64-mingw32 - PACKAGE_CODE=Dropbox - env: - - BUILD_SCRIPT=wininstall_ci.sh + - BUILD_SCRIPT=wininstall_docker.sh - QT_SELECT=qt5-x86_64-w64-mingw32 - RELEASE_LABEL="Windows 64-Bit Installer" - os: osx diff --git a/.travis/travis.sh b/.travis/travis.sh index 68fef79..9fd2a91 100755 --- a/.travis/travis.sh +++ b/.travis/travis.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Install lua +# Install curl and lua if [ "${TRAVIS_OS_NAME}" == "linux" ]; then sudo apt-get update -qq && \ sudo apt-get install -qq curl lua5.2 From 69a7ec8dbea47c2fd1296c99ddd709a07c0641b9 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 22 Jun 2018 18:03:22 +0200 Subject: [PATCH 134/359] add .gitlab-ci.yml --- .gitlab-ci.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..3a10e2c --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,9 @@ +image: syping/qt5-x86_64-w64-mingw32:5.9.6 + +job: + variables: + BUILD_SCRIPT: "windows_build.sh" + QT_SELECT: "qt5-x86_64-w64-mingw32" + EXECUTABLE_ARCH: "_x64" + script: + - .gitlab/gitlab.sh From ca8003c2e85f3fa51d23e97cb1879ec8faa62189 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 22 Jun 2018 18:08:09 +0200 Subject: [PATCH 135/359] fix .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3a10e2c..6d7fbe2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: syping/qt5-x86_64-w64-mingw32:5.9.6 +image: syping/qt5-static-mingw:5.9.6 job: variables: From f1cfbbf5732877c6cba46bea398486f65fc9c56f Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 22 Jun 2018 18:11:16 +0200 Subject: [PATCH 136/359] change GitLab Lua to 5.2 --- .gitlab/gitlab.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/gitlab.sh b/.gitlab/gitlab.sh index 3c076ab..821f89b 100755 --- a/.gitlab/gitlab.sh +++ b/.gitlab/gitlab.sh @@ -2,7 +2,7 @@ # Install curl and lua apt-get update -qq && \ -apt-get install -qq curl git lua5.3 openssl +apt-get install -qq curl git lua5.2 openssl # Check if build is not tagged if [ "${CI_COMMIT_TAG}" == "" ]; then From efa88cc46eab3cced71fd69ee69d8f797ef64a00 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 22 Jun 2018 18:23:38 +0200 Subject: [PATCH 137/359] add artifacts in .gitlab-ci.yml --- .gitlab-ci.yml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6d7fbe2..a65ff36 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,9 +1,24 @@ image: syping/qt5-static-mingw:5.9.6 -job: +job 0: + variables: + BUILD_SCRIPT: "windows_build.sh" + QT_SELECT: "qt5-i686-w64-mingw32" + script: + - .gitlab/gitlab.sh + artifacts: + name: "$CI_COMMIT_REF_NAME-win32" + paths: + - assets/ + +job 1: variables: BUILD_SCRIPT: "windows_build.sh" QT_SELECT: "qt5-x86_64-w64-mingw32" EXECUTABLE_ARCH: "_x64" script: - .gitlab/gitlab.sh + artifacts: + name: "$CI_COMMIT_REF_NAME-win64" + paths: + - assets/ From d61cbd4743f090ef1331e301965d5bfd0f5ef5b7 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 22 Jun 2018 19:00:36 +0200 Subject: [PATCH 138/359] add Telemetry to GitLab build --- .gitlab-ci.yml | 8 ++++---- .gitlab/TelemetryClassAuthenticator.cpp.enc | Bin 0 -> 2960 bytes .gitlab/gitlab.sh | 4 ++++ 3 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 .gitlab/TelemetryClassAuthenticator.cpp.enc diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a65ff36..1e45ef4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,17 +1,17 @@ image: syping/qt5-static-mingw:5.9.6 -job 0: +win32: variables: BUILD_SCRIPT: "windows_build.sh" QT_SELECT: "qt5-i686-w64-mingw32" script: - .gitlab/gitlab.sh artifacts: - name: "$CI_COMMIT_REF_NAME-win32" + name: "gta5view-$CI_COMMIT_REF_NAME-win32" paths: - assets/ -job 1: +win64: variables: BUILD_SCRIPT: "windows_build.sh" QT_SELECT: "qt5-x86_64-w64-mingw32" @@ -19,6 +19,6 @@ job 1: script: - .gitlab/gitlab.sh artifacts: - name: "$CI_COMMIT_REF_NAME-win64" + name: "gta5view-$CI_COMMIT_REF_NAME-win64" paths: - assets/ diff --git a/.gitlab/TelemetryClassAuthenticator.cpp.enc b/.gitlab/TelemetryClassAuthenticator.cpp.enc new file mode 100644 index 0000000000000000000000000000000000000000..3c7445bc9e484f5fc41902b59084aabcd05f40af GIT binary patch literal 2960 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 Date: Fri, 22 Jun 2018 20:00:18 +0200 Subject: [PATCH 139/359] add Debian build to GitLab CI --- .ci/debian_ci.sh | 8 ++++++++ .gitlab-ci.yml | 30 +++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) create mode 100755 .ci/debian_ci.sh diff --git a/.ci/debian_ci.sh b/.ci/debian_ci.sh new file mode 100755 index 0000000..89134ac --- /dev/null +++ b/.ci/debian_ci.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# Install packages +.ci/debian_install.sh && \ + +# Build gta5view +.ci/debian_build.sh && \ +cd ${PROJECT_DIR} diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1e45ef4..1b8f2e2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,29 @@ -image: syping/qt5-static-mingw:5.9.6 +debian32: + image: i386/debian:stretch + variables: + BUILD_SCRIPT: "debian_ci.sh" + APT_INSTALL: "clang" + script: + - .gitlab/gitlab.sh + artifacts: + name: "gta5view-$CI_COMMIT_REF_NAME-debian32" + paths: + - assets/*.deb + +debian64: + image: amd64/debian:stretch + variables: + BUILD_SCRIPT: "debian_ci.sh" + APT_INSTALL: "clang" + script: + - .gitlab/gitlab.sh + artifacts: + name: "gta5view-$CI_COMMIT_REF_NAME-debian64" + paths: + - assets/*.deb win32: + image: syping/qt5-static-mingw:5.9.6 variables: BUILD_SCRIPT: "windows_build.sh" QT_SELECT: "qt5-i686-w64-mingw32" @@ -9,9 +32,10 @@ win32: artifacts: name: "gta5view-$CI_COMMIT_REF_NAME-win32" paths: - - assets/ + - assets/*.exe win64: + image: syping/qt5-static-mingw:5.9.6 variables: BUILD_SCRIPT: "windows_build.sh" QT_SELECT: "qt5-x86_64-w64-mingw32" @@ -21,4 +45,4 @@ win64: artifacts: name: "gta5view-$CI_COMMIT_REF_NAME-win64" paths: - - assets/ + - assets/*.exe From 4135b1f588f74b761602a1f7e430c6970579edfb Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 24 Jun 2018 02:25:34 +0200 Subject: [PATCH 140/359] minor changes --- .ci/gta5view.nsi | 9 +++++++-- .gitlab-ci.yml | 35 +++++------------------------------ AppEnv.cpp | 33 ++++++++++++++++++++++++++++++++- TelemetryClass.cpp | 6 ++++++ 4 files changed, 50 insertions(+), 33 deletions(-) diff --git a/.ci/gta5view.nsi b/.ci/gta5view.nsi index 46000cc..0d94825 100644 --- a/.ci/gta5view.nsi +++ b/.ci/gta5view.nsi @@ -89,7 +89,7 @@ InstallDir "$PROGRAMFILES64\Syping\gta5view" Function .onInit !insertmacro MUI_LANGDLL_DISPLAY !ifdef WIN32 - MessageBox MB_OK|MB_ICONSTOP "Can't install the 64bit version on a 32bit system, please download the 32bit version!" + MessageBox MB_OK|MB_ICONSTOP "Windows 32-Bit is not supported anymore!" Quit !endif SetRegView 64 @@ -140,6 +140,9 @@ File "/opt/windev/qt64d-latest/plugins/imageformats/qwbmp.dll" File "/opt/windev/qt64d-latest/plugins/imageformats/qwebp.dll" SetOutPath "$INSTDIR\platforms" File "/opt/windev/qt64d-latest/plugins/platforms/qwindows.dll" +SetOutPath "$INSTDIR\styles" +File "/opt/windev/qt64d-latest/plugins/styles/qcleanlooksstyle.dll" +File "/opt/windev/qt64d-latest/plugins/styles/qplastiquestyle.dll" SectionEnd ###################################################################### @@ -223,11 +226,13 @@ Delete "$INSTDIR\imageformats\qtiff.dll" Delete "$INSTDIR\imageformats\qwbmp.dll" Delete "$INSTDIR\imageformats\qwebp.dll" Delete "$INSTDIR\platforms\qwindows.dll" - +Delete "$INSTDIR\styles\qcleanlooksstyle.dll" +Delete "$INSTDIR\styles\qplastiquestyle.dll" RmDir "$INSTDIR\lang" RmDir "$INSTDIR\audio" RmDir "$INSTDIR\imageformats" RmDir "$INSTDIR\platforms" +RmDir "$INSTDIR\styles" Delete "$INSTDIR\uninstall.exe" !ifdef WEB_SITE diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1b8f2e2..fa9a0b1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,48 +1,23 @@ -debian32: - image: i386/debian:stretch +debian: + image: debian:stretch variables: BUILD_SCRIPT: "debian_ci.sh" APT_INSTALL: "clang" script: - .gitlab/gitlab.sh artifacts: - name: "gta5view-$CI_COMMIT_REF_NAME-debian32" + name: "gta5view-$CI_COMMIT_REF_NAME-debian" paths: - assets/*.deb -debian64: - image: amd64/debian:stretch - variables: - BUILD_SCRIPT: "debian_ci.sh" - APT_INSTALL: "clang" - script: - - .gitlab/gitlab.sh - artifacts: - name: "gta5view-$CI_COMMIT_REF_NAME-debian64" - paths: - - assets/*.deb - -win32: - image: syping/qt5-static-mingw:5.9.6 - variables: - BUILD_SCRIPT: "windows_build.sh" - QT_SELECT: "qt5-i686-w64-mingw32" - script: - - .gitlab/gitlab.sh - artifacts: - name: "gta5view-$CI_COMMIT_REF_NAME-win32" - paths: - - assets/*.exe - -win64: +windows: image: syping/qt5-static-mingw:5.9.6 variables: BUILD_SCRIPT: "windows_build.sh" QT_SELECT: "qt5-x86_64-w64-mingw32" - EXECUTABLE_ARCH: "_x64" script: - .gitlab/gitlab.sh artifacts: - name: "gta5view-$CI_COMMIT_REF_NAME-win64" + name: "gta5view-$CI_COMMIT_REF_NAME-windows" paths: - assets/*.exe diff --git a/AppEnv.cpp b/AppEnv.cpp index 56e0b08..60f4eac 100644 --- a/AppEnv.cpp +++ b/AppEnv.cpp @@ -152,7 +152,38 @@ QString AppEnv::getPluginsFolder() QByteArray AppEnv::getUserAgent() { - return QString("Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0 %1/%2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER).toUtf8(); +#if QT_VERSION >= 0x050400 +#ifdef GTA5SYNC_WIN + QString kernelVersion = QSysInfo::kernelVersion(); + const QStringList &kernelVersionList = kernelVersion.split("."); + if (kernelVersionList.length() > 2) + { + kernelVersion = kernelVersionList.at(0) % "." % kernelVersionList.at(1); + } + QString runArch = QSysInfo::buildCpuArchitecture(); + if (runArch == "x86_64") + { + runArch = "Win64; x64"; + } + else if (runArch == "i686") + { + const QString &curArch = QSysInfo::currentCpuArchitecture(); + if (curArch == "x86_64") + { + runArch = "WOW64"; + } + else if (curArch == "i686") + { + runArch = "Win32; x86"; + } + } + return QString("Mozilla/5.0 (Windows NT %1; %2) %3/%4").arg(kernelVersion, runArch, GTA5SYNC_APPSTR, GTA5SYNC_APPVER).toUtf8(); +#else + return QString("Mozilla/5.0 (%1; %2) %3/%4").arg(QSysInfo::kernelType(), QSysInfo::kernelVersion(), GTA5SYNC_APPSTR, GTA5SYNC_APPVER).toUtf8(); +#endif +#else + return QString("Mozilla/5.0 %1/%2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER).toUtf8(); +#endif } // QUrl AppEnv::getCrewFetchingUrl(QString crewID) diff --git a/TelemetryClass.cpp b/TelemetryClass.cpp index 66eac7f..70621b9 100644 --- a/TelemetryClass.cpp +++ b/TelemetryClass.cpp @@ -198,6 +198,7 @@ void TelemetryClass::push(TelemetryCategory category, QJsonDocument json) QNetworkAccessManager *netManager = new QNetworkAccessManager(); QNetworkRequest netRequest(TelemetryClassAuthenticator::getTrackingPushURL()); + netRequest.setRawHeader("User-Agent", AppEnv::getUserAgent()); QNetworkReply *netReply = netManager->post(netRequest, httpMultiPart); httpMultiPart->setParent(netReply); @@ -209,6 +210,10 @@ QJsonDocument TelemetryClass::getOperatingSystem() QJsonDocument jsonDocument; QJsonObject jsonObject; #if QT_VERSION >= 0x050400 + jsonObject["KernelType"] = QSysInfo::kernelType(); + jsonObject["KernelVersion"] = QSysInfo::kernelVersion(); + jsonObject["ProductType"] = QSysInfo::productType(); + jsonObject["ProductVersion"] = QSysInfo::productVersion(); jsonObject["OSName"] = QSysInfo::prettyProductName(); jsonObject["OSArch"] = QSysInfo::currentCpuArchitecture(); #endif @@ -434,6 +439,7 @@ void TelemetryClass::registerClient() { QNetworkAccessManager *netManager = new QNetworkAccessManager(); QNetworkRequest netRequest(TelemetryClassAuthenticator::getTrackingRegURL()); + netRequest.setRawHeader("User-Agent", AppEnv::getUserAgent()); netManager->get(netRequest); connect(netManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(registerFinished(QNetworkReply*))); From c3d684436b5f184ca80b4399ddcb39aed07e2756 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 28 Jun 2018 03:31:57 +0200 Subject: [PATCH 141/359] GitLab builds Windows Installer and Portable only now --- .gitlab-ci.yml | 30 +++++++++++++++--------------- .gitlab/gitlab.sh | 6 ++++-- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fa9a0b1..3ff5af5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,16 +1,4 @@ -debian: - image: debian:stretch - variables: - BUILD_SCRIPT: "debian_ci.sh" - APT_INSTALL: "clang" - script: - - .gitlab/gitlab.sh - artifacts: - name: "gta5view-$CI_COMMIT_REF_NAME-debian" - paths: - - assets/*.deb - -windows: +Windows Portable: image: syping/qt5-static-mingw:5.9.6 variables: BUILD_SCRIPT: "windows_build.sh" @@ -18,6 +6,18 @@ windows: script: - .gitlab/gitlab.sh artifacts: - name: "gta5view-$CI_COMMIT_REF_NAME-windows" + name: "gta5view-$CI_COMMIT_REF_NAME-wp" paths: - - assets/*.exe + - "gta5view-*.exe" + +Windows Installer: + image: syping/qt5-shared-mingw:5.9.6 + variables: + BUILD_SCRIPT: "wininstall_build.sh" + QT_SELECT: "qt5-x86_64-w64-mingw32" + script: + - .gitlab/gitlab.sh + artifacts: + name: "gta5view-$CI_COMMIT_REF_NAME-wi" + paths: + - "gta5view-*.exe" diff --git a/.gitlab/gitlab.sh b/.gitlab/gitlab.sh index c87d9c3..c7436a2 100755 --- a/.gitlab/gitlab.sh +++ b/.gitlab/gitlab.sh @@ -2,7 +2,7 @@ # Install curl and lua apt-get update -qq && \ -apt-get install -qq curl git lua5.2 openssl +apt-get install -qq curl git lua5.2 nsis openssl # Decrypt Telemetry Authenticator rm -rf tmext/TelemetryClassAuthenticator.cpp && \ @@ -20,4 +20,6 @@ if [ "${PACKAGE_CODE}" == "" ]; then export PACKAGE_CODE=GitLab fi -.ci/ci.sh +# Start CI script and copying assets into base directory +.ci/ci.sh && \ +cp -Rf assets/* ./ From 25c64b7f5d0470d00ffa0e6eccf0e31420447263 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 29 Jun 2018 02:50:00 +0200 Subject: [PATCH 142/359] improving player parser --- AppEnv.cpp | 2 +- DatabaseThread.cpp | 10 ++++++---- ProfileInterface.cpp | 5 +++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/AppEnv.cpp b/AppEnv.cpp index 60f4eac..c935dfc 100644 --- a/AppEnv.cpp +++ b/AppEnv.cpp @@ -198,7 +198,7 @@ QUrl AppEnv::getCrewFetchingUrl(QString crewID) QUrl AppEnv::getPlayerFetchingUrl(QString crewID, QString pageNumber) { - return QUrl(QString("https://socialclub.rockstargames.com/crewsapi/GetMembersList?crewId=%1&pageNumber=%2").arg(crewID, pageNumber)); + return QUrl(QString("https://socialclub.rockstargames.com/crewsapi/GetMembersList?crewId=%1&pageNumber=%2&pageSize=5000").arg(crewID, pageNumber)); } QUrl AppEnv::getPlayerFetchingUrl(QString crewID, int pageNumber) diff --git a/DatabaseThread.cpp b/DatabaseThread.cpp index 8cac13e..47160e0 100644 --- a/DatabaseThread.cpp +++ b/DatabaseThread.cpp @@ -137,8 +137,9 @@ void DatabaseThread::scanCrewReference(const QStringList &crewList, const int &r netRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); #endif netRequest.setRawHeader("User-Agent", AppEnv::getUserAgent()); - netRequest.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); - netRequest.setRawHeader("Accept-Language", "en-US;q=0.5,en;q=0.3"); + netRequest.setRawHeader("Accept", "text/html"); + netRequest.setRawHeader("Accept-Charset", "utf-8"); + netRequest.setRawHeader("Accept-Language", "en-US,en;q=0.9"); netRequest.setRawHeader("Connection", "keep-alive"); QNetworkReply *netReply = netManager->get(netRequest); @@ -209,8 +210,9 @@ void DatabaseThread::scanCrewMembersList(const QStringList &crewList, const int netRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); #endif netRequest.setRawHeader("User-Agent", AppEnv::getUserAgent()); - netRequest.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); - netRequest.setRawHeader("Accept-Language", "en-US;q=0.5,en;q=0.3"); + netRequest.setRawHeader("Accept", "application/json"); + netRequest.setRawHeader("Accept-Charset", "utf-8"); + netRequest.setRawHeader("Accept-Language", "en-US,en;q=0.9"); netRequest.setRawHeader("Connection", "keep-alive"); QNetworkReply *netReply = netManager->get(netRequest); diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index d717010..e8a9cdb 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -1464,8 +1464,9 @@ bool ProfileInterface::eventFilter(QObject *watched, QEvent *event) QNetworkAccessManager *netManager = new QNetworkAccessManager(); QNetworkRequest netRequest(clipboardUrl); netRequest.setRawHeader("User-Agent", AppEnv::getUserAgent()); - netRequest.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); - netRequest.setRawHeader("Accept-Language", "en-US;q=0.5,en;q=0.3"); + netRequest.setRawHeader("Accept", "text/html"); + netRequest.setRawHeader("Accept-Charset", "utf-8"); + netRequest.setRawHeader("Accept-Language", "en-US,en;q=0.9"); netRequest.setRawHeader("Connection", "keep-alive"); QNetworkReply *netReply = netManager->get(netRequest); QEventLoop *downloadLoop = new QEventLoop(); From 0127bc61e6986b0f55ed2e480bc8659f339889cd Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 29 Jun 2018 08:02:28 +0200 Subject: [PATCH 143/359] improve clipboard processing --- ProfileInterface.cpp | 142 ++++++++++++++++++++++++------------------- 1 file changed, 78 insertions(+), 64 deletions(-) diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index e8a9cdb..fbdd5bd 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -1424,81 +1424,95 @@ bool ProfileInterface::eventFilter(QObject *watched, QEvent *event) case Qt::Key_V: if (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) && !QApplication::keyboardModifiers().testFlag(Qt::ShiftModifier)) { - QImage clipboardImage = QApplication::clipboard()->image(); - if (!clipboardImage.isNull()) + const QMimeData *clipboardData = QApplication::clipboard()->mimeData(); + if (clipboardData->hasImage()) { - QImage *snapmaticImage = new QImage(clipboardImage); + QImage *snapmaticImage = new QImage(qvariant_cast(clipboardData->imageData())); importImage(snapmaticImage, QDateTime::currentDateTime()); } - QUrl clipboardUrl = QUrl::fromUserInput(QApplication::clipboard()->text()); - if (clipboardUrl.isValid()) + else if (clipboardData->hasUrls()) { - QDialog urlPasteDialog(this); -#if QT_VERSION >= 0x050000 - urlPasteDialog.setObjectName(QStringLiteral("UrlPasteDialog")); -#else - urlPasteDialog.setObjectName(QString::fromUtf8("UrlPasteDialog")); -#endif - urlPasteDialog.setWindowFlags(urlPasteDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint); - urlPasteDialog.setWindowTitle(tr("Import...")); - urlPasteDialog.setModal(true); - QVBoxLayout urlPasteLayout(&urlPasteDialog); -#if QT_VERSION >= 0x050000 - urlPasteLayout.setObjectName(QStringLiteral("UrlPasteLayout")); -#else - urlPasteLayout.setObjectName(QString::fromUtf8("UrlPasteLayout")); -#endif - urlPasteDialog.setLayout(&urlPasteLayout); - UiModLabel urlPasteLabel(&urlPasteDialog); -#if QT_VERSION >= 0x050000 - urlPasteLabel.setObjectName(QStringLiteral("UrlPasteLabel")); -#else - urlPasteLabel.setObjectName(QString::fromUtf8("UrlPasteLabel")); -#endif - - urlPasteLabel.setText(tr("Prepare Content for Import...")); - urlPasteLayout.addWidget(&urlPasteLabel); - urlPasteDialog.setFixedSize(urlPasteDialog.sizeHint()); - urlPasteDialog.show(); - - QNetworkAccessManager *netManager = new QNetworkAccessManager(); - QNetworkRequest netRequest(clipboardUrl); - netRequest.setRawHeader("User-Agent", AppEnv::getUserAgent()); - netRequest.setRawHeader("Accept", "text/html"); - netRequest.setRawHeader("Accept-Charset", "utf-8"); - netRequest.setRawHeader("Accept-Language", "en-US,en;q=0.9"); - netRequest.setRawHeader("Connection", "keep-alive"); - QNetworkReply *netReply = netManager->get(netRequest); - QEventLoop *downloadLoop = new QEventLoop(); - QObject::connect(netReply, SIGNAL(finished()), downloadLoop, SLOT(quit())); - QTimer::singleShot(30000, downloadLoop, SLOT(quit())); - downloadLoop->exec(); - downloadLoop->disconnect(); - delete downloadLoop; - - urlPasteDialog.close(); - - if (netReply->isFinished()) + if (clipboardData->urls().length() >= 2) { - QImage *snapmaticImage = new QImage(); - QImageReader snapmaticImageReader; - snapmaticImageReader.setDecideFormatFromContent(true); - snapmaticImageReader.setDevice(netReply); - if (snapmaticImageReader.read(snapmaticImage)) + on_saProfileContent_dropped(clipboardData); // replace later with own function importUrls() + } + else if (clipboardData->urls().length() == 1) + { + QUrl clipboardUrl = clipboardData->urls().at(0); + if (clipboardUrl.isLocalFile()) { - importImage(snapmaticImage, QDateTime::currentDateTime()); + importFile(clipboardUrl.toLocalFile(), QDateTime::currentDateTime(), true); } else { - delete snapmaticImage; + QDialog urlPasteDialog(this); +#if QT_VERSION >= 0x050000 + urlPasteDialog.setObjectName(QStringLiteral("UrlPasteDialog")); +#else + urlPasteDialog.setObjectName(QString::fromUtf8("UrlPasteDialog")); +#endif + urlPasteDialog.setWindowFlags(urlPasteDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint); + urlPasteDialog.setWindowTitle(tr("Import...")); + urlPasteDialog.setModal(true); + QVBoxLayout urlPasteLayout(&urlPasteDialog); +#if QT_VERSION >= 0x050000 + urlPasteLayout.setObjectName(QStringLiteral("UrlPasteLayout")); +#else + urlPasteLayout.setObjectName(QString::fromUtf8("UrlPasteLayout")); +#endif + urlPasteDialog.setLayout(&urlPasteLayout); + UiModLabel urlPasteLabel(&urlPasteDialog); +#if QT_VERSION >= 0x050000 + urlPasteLabel.setObjectName(QStringLiteral("UrlPasteLabel")); +#else + urlPasteLabel.setObjectName(QString::fromUtf8("UrlPasteLabel")); +#endif + + urlPasteLabel.setText(tr("Prepare Content for Import...")); + urlPasteLayout.addWidget(&urlPasteLabel); + urlPasteDialog.setFixedSize(urlPasteDialog.sizeHint()); + urlPasteDialog.show(); + + QNetworkAccessManager *netManager = new QNetworkAccessManager(); + QNetworkRequest netRequest(clipboardUrl); + netRequest.setRawHeader("User-Agent", AppEnv::getUserAgent()); + netRequest.setRawHeader("Accept", "text/html"); + netRequest.setRawHeader("Accept-Charset", "utf-8"); + netRequest.setRawHeader("Accept-Language", "en-US,en;q=0.9"); + netRequest.setRawHeader("Connection", "keep-alive"); + QNetworkReply *netReply = netManager->get(netRequest); + QEventLoop *downloadLoop = new QEventLoop(); + QObject::connect(netReply, SIGNAL(finished()), downloadLoop, SLOT(quit())); + QTimer::singleShot(30000, downloadLoop, SLOT(quit())); + downloadLoop->exec(); + downloadLoop->disconnect(); + delete downloadLoop; + + urlPasteDialog.close(); + + if (netReply->isFinished()) + { + QImage *snapmaticImage = new QImage(); + QImageReader snapmaticImageReader; + snapmaticImageReader.setDecideFormatFromContent(true); + snapmaticImageReader.setDevice(netReply); + if (snapmaticImageReader.read(snapmaticImage)) + { + importImage(snapmaticImage, QDateTime::currentDateTime()); + } + else + { + delete snapmaticImage; + } + } + else + { + netReply->abort(); + } + delete netReply; + delete netManager; } } - else - { - netReply->abort(); - } - delete netReply; - delete netManager; } } } From a8db3985a2e5cc29a74a189b51c293615d4d2eff Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 29 Jun 2018 08:20:01 +0200 Subject: [PATCH 144/359] importUrls added --- ProfileInterface.cpp | 50 +++++++++++++++++++++++++------------------- ProfileInterface.h | 3 ++- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index fbdd5bd..f303772 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -528,7 +528,7 @@ fileDialogPreOpen: //Work? settings.endGroup(); } -void ProfileInterface::importFilesProgress(QStringList selectedFiles) +bool ProfileInterface::importFilesProgress(QStringList selectedFiles) { int maximumId = selectedFiles.length(); int overallId = 0; @@ -573,7 +573,9 @@ void ProfileInterface::importFilesProgress(QStringList selectedFiles) { errorStr.remove(0, 2); QMessageBox::warning(this, tr("Import"), tr("Import failed with...\n\n%1").arg(errorStr)); + return false; } + return true; } bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime, bool notMultiple) @@ -811,6 +813,30 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime return false; } +bool ProfileInterface::importUrls(const QMimeData *mimeData) +{ + QStringList pathList; + + for (QUrl currentUrl : mimeData->urls()) + { + if (currentUrl.isLocalFile()) + { + pathList += currentUrl.toLocalFile(); + } + } + + if (pathList.length() == 1) + { + QString selectedFile = pathList.at(0); + return importFile(selectedFile, QDateTime::currentDateTime(), true); + } + else if (pathList.length() > 1) + { + return importFilesProgress(pathList); + } + return false; +} + bool ProfileInterface::importImage(QImage *snapmaticImage, QDateTime importDateTime) { SnapmaticPicture *picture = new SnapmaticPicture(":/template/template.g5e"); @@ -1385,25 +1411,7 @@ void ProfileInterface::contextMenuTriggeredSGD(QContextMenuEvent *ev) void ProfileInterface::on_saProfileContent_dropped(const QMimeData *mimeData) { if (!mimeData) return; - QStringList pathList; - - for (QUrl currentUrl : mimeData->urls()) - { - if (currentUrl.isLocalFile()) - { - pathList += currentUrl.toLocalFile(); - } - } - - if (pathList.length() == 1) - { - QString selectedFile = pathList.at(0); - importFile(selectedFile, QDateTime::currentDateTime(), true); - } - else if (pathList.length() > 1) - { - importFilesProgress(pathList); - } + importUrls(mimeData); } void ProfileInterface::retranslateUi() @@ -1434,7 +1442,7 @@ bool ProfileInterface::eventFilter(QObject *watched, QEvent *event) { if (clipboardData->urls().length() >= 2) { - on_saProfileContent_dropped(clipboardData); // replace later with own function importUrls() + importUrls(clipboardData); } else if (clipboardData->urls().length() == 1) { diff --git a/ProfileInterface.h b/ProfileInterface.h index cfc64e6..3fbc4d0 100644 --- a/ProfileInterface.h +++ b/ProfileInterface.h @@ -116,8 +116,9 @@ private: bool isSupportedImageFile(QString selectedFileName); bool importFile(QString selectedFile, QDateTime importDateTime, bool notMultiple); + bool importUrls(const QMimeData *mimeData); bool importImage(QImage *snapmaticImage, QDateTime importDateTime); - void importFilesProgress(QStringList selectedFiles); + bool importFilesProgress(QStringList selectedFiles); bool importSnapmaticPicture(SnapmaticPicture *picture, bool warn = true); bool importSavegameData(SavegameData *savegame, QString sgdPath, bool warn = true); void pictureLoaded(SnapmaticPicture *picture, bool inserted); From 81ea0490cf345ad25d6278529adddb7bd05fd40f Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 29 Jun 2018 08:52:43 +0200 Subject: [PATCH 145/359] add ability to drop images --- ProfileInterface.cpp | 13 +++++++++++-- uimod/UiModWidget.cpp | 22 ++++++++++++++++------ uimod/UiModWidget.h | 6 ++++-- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index f303772..6de5a01 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -88,7 +88,8 @@ ProfileInterface::ProfileInterface(ProfileDatabase *profileDB, CrewDatabase *cre updatePalette(); ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER)); - ui->saProfileContent->setFilesMode(true); + ui->saProfileContent->setFilesDropEnabled(true); + ui->saProfileContent->setImageDropEnabled(true); // Set Icon for Close Button if (QIcon::hasThemeIcon("dialog-close")) @@ -1411,7 +1412,15 @@ void ProfileInterface::contextMenuTriggeredSGD(QContextMenuEvent *ev) void ProfileInterface::on_saProfileContent_dropped(const QMimeData *mimeData) { if (!mimeData) return; - importUrls(mimeData); + if (mimeData->hasImage()) + { + QImage *snapmaticImage = new QImage(qvariant_cast(mimeData->imageData())); + importImage(snapmaticImage, QDateTime::currentDateTime()); + } + else if (mimeData->hasUrls()) + { + importUrls(mimeData); + } } void ProfileInterface::retranslateUi() diff --git a/uimod/UiModWidget.cpp b/uimod/UiModWidget.cpp index 75cddf7..ff8946c 100644 --- a/uimod/UiModWidget.cpp +++ b/uimod/UiModWidget.cpp @@ -26,26 +26,32 @@ UiModWidget::UiModWidget(QWidget *parent) : QWidget(parent) { - filesMode = false; + filesDropEnabled = false; + imageDropEnabled = false; } UiModWidget::~UiModWidget() { } -void UiModWidget::setFilesMode(bool filesModeEnabled) +void UiModWidget::setFilesDropEnabled(bool enabled) { - filesMode = filesModeEnabled; + filesDropEnabled = enabled; +} + +void UiModWidget::setImageDropEnabled(bool enabled) +{ + imageDropEnabled = enabled; } void UiModWidget::dragEnterEvent(QDragEnterEvent *dragEnterEvent) { - if (filesMode && dragEnterEvent->mimeData()->hasUrls()) + if (filesDropEnabled && dragEnterEvent->mimeData()->hasUrls()) { QStringList pathList; - QList urlList = dragEnterEvent->mimeData()->urls(); + const QList urlList = dragEnterEvent->mimeData()->urls(); - foreach(const QUrl ¤tUrl, urlList) + for (const QUrl ¤tUrl : urlList) { if (currentUrl.isLocalFile()) { @@ -58,6 +64,10 @@ void UiModWidget::dragEnterEvent(QDragEnterEvent *dragEnterEvent) dragEnterEvent->acceptProposedAction(); } } + else if (imageDropEnabled && dragEnterEvent->mimeData()->hasImage()) + { + dragEnterEvent->acceptProposedAction(); + } } void UiModWidget::dropEvent(QDropEvent *dropEvent) diff --git a/uimod/UiModWidget.h b/uimod/UiModWidget.h index db3ae04..469c000 100644 --- a/uimod/UiModWidget.h +++ b/uimod/UiModWidget.h @@ -29,7 +29,8 @@ class UiModWidget : public QWidget Q_OBJECT public: UiModWidget(QWidget *parent = 0); - void setFilesMode(bool enabled); + void setFilesDropEnabled(bool enabled); + void setImageDropEnabled(bool enabled); ~UiModWidget(); protected: @@ -38,7 +39,8 @@ protected: void paintEvent(QPaintEvent *paintEvent); private: - bool filesMode; + bool filesDropEnabled; + bool imageDropEnabled; signals: void dropped(const QMimeData *mimeData); From f932a8d5ee8f188e50e4e9ea1448ea72d9032bb5 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 29 Jun 2018 09:27:54 +0200 Subject: [PATCH 146/359] GitLab artifacts updated --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3ff5af5..39c1db3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,7 +6,7 @@ Windows Portable: script: - .gitlab/gitlab.sh artifacts: - name: "gta5view-$CI_COMMIT_REF_NAME-wp" + name: "gta5view-${CI_COMMIT_SHA:0:8}_portable" paths: - "gta5view-*.exe" @@ -18,6 +18,6 @@ Windows Installer: script: - .gitlab/gitlab.sh artifacts: - name: "gta5view-$CI_COMMIT_REF_NAME-wi" + name: "gta5view-${CI_COMMIT_SHA:0:8}_setup" paths: - "gta5view-*.exe" From 541a7d18bd4667bf7b358efa94253abe72188845 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 29 Jun 2018 09:36:25 +0200 Subject: [PATCH 147/359] improve CPU string + GitLab CI --- .gitlab-ci.yml | 9 +++++++-- TelemetryClass.cpp | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 39c1db3..c157980 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,8 @@ +stages: + - build + Windows Portable: + stage: build image: syping/qt5-static-mingw:5.9.6 variables: BUILD_SCRIPT: "windows_build.sh" @@ -6,11 +10,12 @@ Windows Portable: script: - .gitlab/gitlab.sh artifacts: - name: "gta5view-${CI_COMMIT_SHA:0:8}_portable" + name: "gta5view-{$CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA:0:8}_portable" paths: - "gta5view-*.exe" Windows Installer: + stage: build image: syping/qt5-shared-mingw:5.9.6 variables: BUILD_SCRIPT: "wininstall_build.sh" @@ -18,6 +23,6 @@ Windows Installer: script: - .gitlab/gitlab.sh artifacts: - name: "gta5view-${CI_COMMIT_SHA:0:8}_setup" + name: "gta5view-{$CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA:0:8}_setup" paths: - "gta5view-*.exe" diff --git a/TelemetryClass.cpp b/TelemetryClass.cpp index 70621b9..56f827c 100644 --- a/TelemetryClass.cpp +++ b/TelemetryClass.cpp @@ -239,7 +239,7 @@ QJsonDocument TelemetryClass::getSystemHardware() else if (i == 0x80000003) { memcpy(CPUBrandString + 16, CPUInfo, sizeof(CPUInfo)); } else if (i == 0x80000004) { memcpy(CPUBrandString + 32, CPUInfo, sizeof(CPUInfo)); } } - jsonObject["CPUName"] = QString(CPUBrandString).trimmed(); + jsonObject["CPUName"] = QString::fromLatin1(CPUBrandString).simplified(); SYSTEM_INFO sysInfo; GetSystemInfo(&sysInfo); jsonObject["CPUThreads"] = QString::number(sysInfo.dwNumberOfProcessors); @@ -265,7 +265,7 @@ QJsonDocument TelemetryClass::getSystemHardware() QByteArray cpuData = cpuInfoBuffer.readLine(); if (cpuData.left(toFind.length()) == toFind) { - jsonObject["CPUName"] = QString::fromUtf8(cpuData).split(':').at(1).trimmed(); + jsonObject["CPUName"] = QString::fromUtf8(cpuData).split(':').at(1).simplified(); break; } } From dc101a66dad3bf09336556bfd9fc92bb6f723212 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 29 Jun 2018 09:57:06 +0200 Subject: [PATCH 148/359] fix remote import --- .gitlab-ci.yml | 4 +- ProfileInterface.cpp | 154 ++++++++++++++++++++++++------------------- ProfileInterface.h | 1 + 3 files changed, 91 insertions(+), 68 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c157980..983f135 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -10,7 +10,7 @@ Windows Portable: script: - .gitlab/gitlab.sh artifacts: - name: "gta5view-{$CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA:0:8}_portable" + name: "gta5view-$CI_COMMIT_REF_NAME-${CI_COMMIT_SHA:0:8}_portable" paths: - "gta5view-*.exe" @@ -23,6 +23,6 @@ Windows Installer: script: - .gitlab/gitlab.sh artifacts: - name: "gta5view-{$CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA:0:8}_setup" + name: "gta5view-$CI_COMMIT_REF_NAME-${CI_COMMIT_SHA:0:8}_setup" paths: - "gta5view-*.exe" diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 6de5a01..746b2c9 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -838,6 +838,78 @@ bool ProfileInterface::importUrls(const QMimeData *mimeData) return false; } +bool ProfileInterface::importRemote(QUrl remoteUrl) +{ + bool retValue = false; + QDialog urlPasteDialog(this); +#if QT_VERSION >= 0x050000 + urlPasteDialog.setObjectName(QStringLiteral("UrlPasteDialog")); +#else + urlPasteDialog.setObjectName(QString::fromUtf8("UrlPasteDialog")); +#endif + urlPasteDialog.setWindowFlags(urlPasteDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint); + urlPasteDialog.setWindowTitle(tr("Import...")); + urlPasteDialog.setModal(true); + QVBoxLayout urlPasteLayout(&urlPasteDialog); +#if QT_VERSION >= 0x050000 + urlPasteLayout.setObjectName(QStringLiteral("UrlPasteLayout")); +#else + urlPasteLayout.setObjectName(QString::fromUtf8("UrlPasteLayout")); +#endif + urlPasteDialog.setLayout(&urlPasteLayout); + UiModLabel urlPasteLabel(&urlPasteDialog); +#if QT_VERSION >= 0x050000 + urlPasteLabel.setObjectName(QStringLiteral("UrlPasteLabel")); +#else + urlPasteLabel.setObjectName(QString::fromUtf8("UrlPasteLabel")); +#endif + + urlPasteLabel.setText(tr("Prepare Content for Import...")); + urlPasteLayout.addWidget(&urlPasteLabel); + urlPasteDialog.setFixedSize(urlPasteDialog.sizeHint()); + urlPasteDialog.show(); + + QNetworkAccessManager *netManager = new QNetworkAccessManager(); + QNetworkRequest netRequest(remoteUrl); + netRequest.setRawHeader("User-Agent", AppEnv::getUserAgent()); + netRequest.setRawHeader("Accept", "text/html"); + netRequest.setRawHeader("Accept-Charset", "utf-8"); + netRequest.setRawHeader("Accept-Language", "en-US,en;q=0.9"); + netRequest.setRawHeader("Connection", "keep-alive"); + QNetworkReply *netReply = netManager->get(netRequest); + QEventLoop *downloadLoop = new QEventLoop(); + QObject::connect(netReply, SIGNAL(finished()), downloadLoop, SLOT(quit())); + QTimer::singleShot(30000, downloadLoop, SLOT(quit())); + downloadLoop->exec(); + downloadLoop->disconnect(); + delete downloadLoop; + + urlPasteDialog.close(); + + if (netReply->isFinished()) + { + QImage *snapmaticImage = new QImage(); + QImageReader snapmaticImageReader; + snapmaticImageReader.setDecideFormatFromContent(true); + snapmaticImageReader.setDevice(netReply); + if (snapmaticImageReader.read(snapmaticImage)) + { + retValue = importImage(snapmaticImage, QDateTime::currentDateTime()); + } + else + { + delete snapmaticImage; + } + } + else + { + netReply->abort(); + } + delete netReply; + delete netManager; + return retValue; +} + bool ProfileInterface::importImage(QImage *snapmaticImage, QDateTime importDateTime) { SnapmaticPicture *picture = new SnapmaticPicture(":/template/template.g5e"); @@ -1462,72 +1534,22 @@ bool ProfileInterface::eventFilter(QObject *watched, QEvent *event) } else { - QDialog urlPasteDialog(this); -#if QT_VERSION >= 0x050000 - urlPasteDialog.setObjectName(QStringLiteral("UrlPasteDialog")); -#else - urlPasteDialog.setObjectName(QString::fromUtf8("UrlPasteDialog")); -#endif - urlPasteDialog.setWindowFlags(urlPasteDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint); - urlPasteDialog.setWindowTitle(tr("Import...")); - urlPasteDialog.setModal(true); - QVBoxLayout urlPasteLayout(&urlPasteDialog); -#if QT_VERSION >= 0x050000 - urlPasteLayout.setObjectName(QStringLiteral("UrlPasteLayout")); -#else - urlPasteLayout.setObjectName(QString::fromUtf8("UrlPasteLayout")); -#endif - urlPasteDialog.setLayout(&urlPasteLayout); - UiModLabel urlPasteLabel(&urlPasteDialog); -#if QT_VERSION >= 0x050000 - urlPasteLabel.setObjectName(QStringLiteral("UrlPasteLabel")); -#else - urlPasteLabel.setObjectName(QString::fromUtf8("UrlPasteLabel")); -#endif - - urlPasteLabel.setText(tr("Prepare Content for Import...")); - urlPasteLayout.addWidget(&urlPasteLabel); - urlPasteDialog.setFixedSize(urlPasteDialog.sizeHint()); - urlPasteDialog.show(); - - QNetworkAccessManager *netManager = new QNetworkAccessManager(); - QNetworkRequest netRequest(clipboardUrl); - netRequest.setRawHeader("User-Agent", AppEnv::getUserAgent()); - netRequest.setRawHeader("Accept", "text/html"); - netRequest.setRawHeader("Accept-Charset", "utf-8"); - netRequest.setRawHeader("Accept-Language", "en-US,en;q=0.9"); - netRequest.setRawHeader("Connection", "keep-alive"); - QNetworkReply *netReply = netManager->get(netRequest); - QEventLoop *downloadLoop = new QEventLoop(); - QObject::connect(netReply, SIGNAL(finished()), downloadLoop, SLOT(quit())); - QTimer::singleShot(30000, downloadLoop, SLOT(quit())); - downloadLoop->exec(); - downloadLoop->disconnect(); - delete downloadLoop; - - urlPasteDialog.close(); - - if (netReply->isFinished()) - { - QImage *snapmaticImage = new QImage(); - QImageReader snapmaticImageReader; - snapmaticImageReader.setDecideFormatFromContent(true); - snapmaticImageReader.setDevice(netReply); - if (snapmaticImageReader.read(snapmaticImage)) - { - importImage(snapmaticImage, QDateTime::currentDateTime()); - } - else - { - delete snapmaticImage; - } - } - else - { - netReply->abort(); - } - delete netReply; - delete netManager; + importRemote(clipboardUrl); + } + } + } + else if (clipboardData->hasText()) + { + QUrl clipboardUrl = QUrl::fromUserInput(clipboardData->text()); + if (clipboardUrl.isValid()) + { + if (clipboardUrl.isLocalFile()) + { + importFile(clipboardUrl.toLocalFile(), QDateTime::currentDateTime(), true); + } + else + { + importRemote(clipboardUrl); } } } diff --git a/ProfileInterface.h b/ProfileInterface.h index 3fbc4d0..980c317 100644 --- a/ProfileInterface.h +++ b/ProfileInterface.h @@ -117,6 +117,7 @@ private: bool isSupportedImageFile(QString selectedFileName); bool importFile(QString selectedFile, QDateTime importDateTime, bool notMultiple); bool importUrls(const QMimeData *mimeData); + bool importRemote(QUrl remoteUrl); bool importImage(QImage *snapmaticImage, QDateTime importDateTime); bool importFilesProgress(QStringList selectedFiles); bool importSnapmaticPicture(SnapmaticPicture *picture, bool warn = true); From 00db9ecab29886ff5098a95ee3de6d611fe90ec8 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 6 Jul 2018 00:48:32 +0000 Subject: [PATCH 149/359] Update Crowdin configuration file --- crowdin.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 crowdin.yml diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 0000000..b60f83c --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,19 @@ +files: + - source: '*' + ignore: + - res + - uimod + - lang + - pcg + - anpro + - tmext + - qjson4 + - '*.sh' + - '*.yml' + - '*.md' + - '*.nsi' + - '*.enc' + - LICENSE* + - configure + - .* + translation: /res/gta5sync_%locale_with_underscore%.qm From 06eb2e4277f8898caf5d09414365050e77271e6e Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 6 Jul 2018 02:59:11 +0200 Subject: [PATCH 150/359] update translations for crowdin --- crowdin.yml | 18 +- gta5view.pro | 2 + res/gta5sync.ts | 2199 +++++++++++++++++++++++++++++++++++++++++ res/gta5sync_de.ts | 272 ++--- res/gta5sync_en_US.ts | 272 ++--- res/gta5sync_fr.ts | 272 ++--- res/gta5sync_ru.ts | 272 ++--- res/gta5sync_uk.ts | 272 ++--- res/gta5sync_zh_TW.ts | 272 ++--- 9 files changed, 3018 insertions(+), 833 deletions(-) create mode 100644 res/gta5sync.ts diff --git a/crowdin.yml b/crowdin.yml index b60f83c..d585dbe 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,19 +1,3 @@ files: - - source: '*' - ignore: - - res - - uimod - - lang - - pcg - - anpro - - tmext - - qjson4 - - '*.sh' - - '*.yml' - - '*.md' - - '*.nsi' - - '*.enc' - - LICENSE* - - configure - - .* + - source: '/res/gta5sync.ts' translation: /res/gta5sync_%locale_with_underscore%.qm diff --git a/gta5view.pro b/gta5view.pro index 2a875da..e448ac0 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -128,6 +128,7 @@ FORMS += \ UserInterface.ui TRANSLATIONS += \ + res/gta5sync.ts \ res/gta5sync_en_US.ts \ res/gta5sync_de.ts \ res/gta5sync_fr.ts \ @@ -141,6 +142,7 @@ RESOURCES += \ DISTFILES += res/app.rc \ res/gta5view.desktop \ + res/gta5sync_en_US.ts \ res/gta5sync_de.ts \ res/gta5sync_fr.ts \ res/gta5sync_ru.ts \ diff --git a/res/gta5sync.ts b/res/gta5sync.ts new file mode 100644 index 0000000..6efb796 --- /dev/null +++ b/res/gta5sync.ts @@ -0,0 +1,2199 @@ + + + + + AboutDialog + + + About %1 + + + + + <span style=" font-weight:600;">%1</span><br/> +<br/> +%2<br/> +<br/> +Version %3<br/> +Created on %4<br/> +Built with Qt %5<br/> +Running with Qt %6<br/> +<br/> +%7 + + + + + &Close + + + + + 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> + + + + + Release + + + + + Release Candidate + + + + + Daily Build + + + + + Developer + + + + + Beta + + + + + Alpha + + + + + Custom + + + + + CrewDatabase + + + + No Crew + + + + + ExportDialog + + + Dialog + + + + + Export Format + + + + + &JPEG/PNG format + + + + + GTA &Snapmatic format + + + + + Export Size + + + + + Default &Size + + + + + &Desktop Size + + + + + &Custom Size + + + + + Custom Size: + + + + + x + + + + + &Export + + + + + &Close + + + + + ImageEditorDialog + + + Overwrite Image... + + + + + + Capacity: %1 + + + + + ? + + + + + &Import... + + + + + &Overwrite + + + + + &Close + + + + + + + Snapmatic Image Editor + + + + + Patching of Snapmatic Image failed because of I/O Error + + + + + Patching of Snapmatic Image failed because of Image Error + + + + + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. + + + + + ImportDialog + + + Import... + + + + + Picture + + + + + Avatar + + + + + + Ignore Aspect Ratio + + + + + Background + + + + + + + Background Colour: <span style="color: %1">%1</span> + + + + + + ... + + + + + + + Background Image: + + + + + X + + + + + Force Colour in Avatar Zone + + + + + Import picture + + + + + &OK + + + + + Discard picture + + + + + &Cancel + + + + + + Custom Avatar + Custom Avatar Description in SC, don't use Special Character! + + + + + + Custom Picture + Custom Picture Description in SC, don't use Special Character! + + + + + 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 + + + + + File + Background Image: File + + + + + JsonEditorDialog + + + Snapmatic JSON Editor + + + + + &Save + + + + + &Close + + + + + JSON Error + + + + + MapLocationDialog + + + Snapmatic Map Viewer + + + + + &Close + + + + + &Apply + + + + + &Revert + + + + + &Set + + + + + &Done + + + + + X: %1 +Y: %2 + X and Y position + + + + + OptionsDialog + + + %1 - Settings + + + + + Profiles + + + + + Content Open/Select Mode + + + + + Open with Singleclick + + + + + Open with Doubleclick + + + + + Select with Singleclick + + + + + Default Profile + + + + + Custom GTA V Folder + + + + + Force using Custom Folder + + + + + ... + + + + + Pictures + + + + + Export Size + + + + + Default: %1x%2 + + + + + Screen Resolution: %1x%2 + + + + + + Custom Size: + + + + + x + + + + + Ignore Aspect Ratio + + + + + Export Quality + + + + + Enable Custom Quality + + + + + Quality: + + + + + %1% + + + + + Picture Viewer + + + + + Enable Navigation Bar + + + + + Players + + + + + ID + + + + + Name + + + + + Feedback + + + + + Participation + + + + + + Participate in %1 User Statistics + + + + + Categories + + + + + Hardware, Application and OS Specification + + + + + System Language Configuration + + + + + Application Configuration + + + + + Personal Usage Data + + + + + Other + + + + + + + Participation ID: %1 + + + + + &Copy + + + + + Interface + + + + + Language for Interface + + + + + + + + Current: %1 + + + + + Language for Areas + + + + + Style + + + + + Use Default Style (Restart) + + + + + Style: + + + + + Font + + + + + Always use Message Font (Windows 2003 and earlier) + + + + + Apply changes + + + + + &OK + OK, Cancel, Apply + + + + + Discard changes + + + + + &Cancel + OK, Cancel, Apply + + + + + %1 (Next Closest Language) + First language a person can talk with a different person/application. "Native" or "Not Native". + + + + + System + System in context of System default + + + + + %1 (Closest to Interface) + Next closest language compared to the Interface + + + + + Auto + Automatic language choice. + + + + + %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 + + + + + PictureDialog + + + Snapmatic Picture Viewer - %1 + + + + + <span style=" font-weight:600;">Title: </span>%6<br/> +<span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> +<span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> +<span style=" font-weight:600;">Created: </span>%8 + + + + + Manage picture + + + + + &Manage + + + + + Close viewer + + + + + &Close + + + + + + 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 + + + + + Export as Picture... + + + + + + Export + + + + + JPEG Graphics (*.jpg *.jpeg) + + + + + Portable Network Graphics (*.png) + + + + + + + + + + Export as Picture + + + + + + Overwrite %1 with current Snapmatic picture? + + + + + Failed to export the picture because the system occurred a write failure + + + + + Failed to export the picture because the format detection failures + + + + + Failed to export the picture because the file can't be written + + + + + Failed to export the picture because of an unknown reason + + + + + + No valid file is selected + + + + + Export as Snapmatic... + + + + + GTA V Export (*.g5e) + + + + + GTA V Raw Export (*.auto) + + + + + Snapmatic pictures (PGTA*) + + + + + + + + + Export as Snapmatic + + + + + + Failed to export current Snapmatic picture + + + + + Exported Snapmatic to "%1" because of using the .auto extension. + + + + + PlayerListDialog + + + Edit Players... + + + + + Available Players: + + + + + Selected Players: + + + + + &Apply + + + + + &Cancel + + + + + 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! + + + + + ProfileInterface + + + Profile Interface + + + + + Loading file %1 of %2 files + + + + + %1 %2 + + + + + Import file + + + + + &Import... + + + + + Close profile + + + + + &Close + + + + + + + Export file %1 of %2 files + + + + + + + + + Import... + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + Enabled pictures: %1 of %2 + + + + + Loading... + + + + + Snapmatic Loader + + + + + <h4>Following Snapmatic Pictures got repaired</h4>%1 + + + + + Importable files (%1) + + + + + + GTA V Export (*.g5e) + + + + + + Savegames files (SGTA*) + + + + + + Snapmatic pictures (PGTA*) + + + + + + + No valid file is selected + + + + + + Import file %1 of %2 files + + + + + Import failed with... + +%1 + + + + + + Failed to read Snapmatic picture + + + + + + Failed to read Savegame file + + + + + Can't import %1 because file format can't be detected + + + + + Prepare Content for Import... + + + + + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e + + + + + Failed to import the Snapmatic picture, the picture is already in the game + + + + + Failed to import the Snapmatic picture, can't copy the file into profile + + + + + Failed to import the Savegame, can't copy the file into profile + + + + + Failed to import the Savegame, no Savegame slot is left + + + + + + + + + Export selected... + + + + + + JPG pictures and GTA Snapmatic + + + + + + JPG pictures only + + + + + + GTA Snapmatic only + + + + + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: + + + + + Initialising export... + + + + + Export failed with... + +%1 + + + + + + No Snapmatic pictures or Savegames files are selected + + + + + + + Remove selected + + + + + You really want remove the selected Snapmatic picutres and Savegame files? + + + + + Failed to remove all selected Snapmatic pictures and/or Savegame files + + + + + + + + + + No Snapmatic pictures are selected + + + + + + + + + + %1 failed with... + +%2 + Action failed with... + + + + + + Qualify as Avatar + + + + + + + + Patch selected... + + + + + + + + + + + + Patch file %1 of %2 files + + + + + Qualify + %1 failed with... + + + + + + Change Players... + + + + + Change Players + %1 failed with... + + + + + + + Change Crew... + + + + + Failed to enter a valid Snapmatic Crew ID + + + + + Change Crew + %1 failed with... + + + + + + + Change Title... + + + + + Failed to enter a valid Snapmatic title + + + + + Change Title + %1 failed with... + + + + + All profile files (*.g5e SGTA* PGTA*) + + + + + QApplication + + + Font + + + + + Selected Font: %1 + + + + + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? + + + + + SavegameDialog + + + + Savegame Viewer + + + + + <span style=" font-weight:600;">Savegame</span><br><br>%1 + + + + + &Export + + + + + &Close + + + + + Failed at %1 + + + + + SavegameWidget + + + Savegame Widget + + + + + SAVE %3 - %1<br>%2 + + + + + View savegame + + + + + View + + + + + Copy savegame + + + + + + Export + + + + + Delete savegame + + + + + Delete + + + + + &View + + + + + &Export + + + + + &Remove + + + + + &Select + + + + + &Deselect + + + + + Select &All + + + + + &Deselect All + + + + + Savegame files (SGTA*) + + + + + All files (**) + + + + + + + + Export Savegame + + + + + Overwrite %1 with current Savegame? + + + + + Failed to overwrite %1 with current Savegame + + + + + Failed to export current Savegame + + + + + No valid file is selected + + + + + Export Savegame... + + + + + + AUTOSAVE - %1 +%2 + + + + + + SAVE %3 - %1 +%2 + + + + + + WRONG FORMAT + + + + + UNKNOWN + + + + + + Delete Savegame + + + + + Are you sure to delete %1 from your savegames? + + + + + Failed at deleting %1 from your savegames + + + + + SnapmaticEditor + + + + + + + + + + + Snapmatic Properties + + + + + Snapmatic Type + + + + + Editor + + + + + Selfie + + + + + Regular + + + + + Mugshot + + + + + Meme + + + + + Director + + + + + Snapmatic Values + + + + + Extras + + + + + Qualify as Avatar automatically at apply + + + + + Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture + + + + + &Apply + + + + + &Cancel + + + + + <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) + + + + + 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 + + + + + SnapmaticWidget + + + Snapmatic Widget + + + + + PHOTO - 00/00/00 00:00:00 + + + + + View picture + + + + + View + + + + + Copy picture + + + + + Copy + + + + + Export picture + + + + + Export + + + + + + + Delete picture + + + + + Delete + + + + + Edi&t + + + + + Show &In-game + + + + + Hide &In-game + + + + + &Export + + + + + &View + + + + + &Remove + + + + + &Select + + + + + &Deselect + + + + + Select &All + + + + + &Deselect All + + + + + 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 + + + + + TelemetryDialog + + + You want help %1 to improve in the future by including personal usage data in your submission? + + + + + %1 User Statistics + + + + + Yes, I want include personal usage data. + + + + + &OK + + + + + UserInterface + + + + %2 - %1 + + + + + Select profile + + + + + %1 %2 + + + + + Reload profile overview + + + + + &Reload + + + + + Close %1 + Close %1 <- (gta5view/gta5sync) - %1 will be replaced automatically + + + + + &Close + + + + + &File + + + + + &Help + + + + + &Edit + + + + + &Profile + + + + + &Selection visibility + + + + + Selection &mass tools + + + + + + + &About %1 + + + + + &Exit + + + + + Exit + + + + + Close &Profile + + + + + &Settings + + + + + Select &All + + + + + &Deselect All + + + + + &Export selected... + + + + + &Remove selected + + + + + &Import files... + + + + + &Open File... + + + + + + Select &GTA V Folder... + + + + + + + + Select GTA V Folder... + + + + + Show In-gam&e + + + + + Hi&de In-game + + + + + Change &Title... + + + + + Change &Crew... + + + + + &Qualify as Avatar + + + + + Change &Players... + + + + + + + Show In-game + + + + + + + Hide In-game + + + + + + + Select Profile + + + + + Open File... + + + + + + + + Open File + + + + + Can't open %1 because of not valid file format + + + + diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index 24a367a..62c8814 100644 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -314,14 +314,14 @@ Snapmatic Bilder und Spielständen - + 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 @@ -780,31 +780,31 @@ Y: %2 - + 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... @@ -953,7 +953,7 @@ Drücke 1 für Standardmodus - + Open &JSON Editor... &JSON Editor öffnen... @@ -1051,26 +1051,26 @@ Drücke 1 für Standardmodus S&chließen - + Loading... Lade... - + Snapmatic Loader Snapmatic Lader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>Folgende Snapmatic Bilder wurden repariert</h4>%1 - - - + + + Import... Importieren... @@ -1081,63 +1081,63 @@ Drücke 1 für Standardmodus - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import Importieren - + Savegames files (SGTA*) Spielstanddateien (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) - + Importable files (%1) Importfähige Dateien (%1) - + All image files (%1) Alle Bilddateien (%1) - + All files (**) Alle Dateien (**) - - + + Import file %1 of %2 files Importiere Datei %1 von %2 Dateien - + Import failed with... %1 @@ -1146,13 +1146,13 @@ Drücke 1 für Standardmodus %1 - + Failed to read Snapmatic picture Fehler beim Lesen vom Snapmatic Bild - + Failed to read Savegame file Fehler beim Lesen von Spielstanddatei @@ -1160,135 +1160,135 @@ Drücke 1 für Standardmodus - + 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 - + Can't import %1 because file format can't be detected Kann %1 nicht importieren weil das Dateiformat nicht erkannt werden kann - + Initialising export... Initialisiere Export... - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA oder endet mit .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Fehlgeschlagen beim Importieren vom Snapmatic Bild, dieses Bild ist bereits im Spiel - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exportiere Snapmatic Bilder%2<br><br>JPG Bilder machen es möglich sie mit ein Bildansicht Programm zu öffnen<br>Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren<br><br>Exportieren als: - - + + No valid file is selected Keine gültige Datei wurde ausgewählt - + Enabled pictures: %1 of %2 Aktivierte Bilder: %1 von %2 - + Failed to import the Snapmatic picture, can't copy the file into profile Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren - + Failed to import the Savegame, can't copy the file into profile Fehlgeschlagen beim Importieren vom Spielstand, kann Spielstanddatei nicht ins Profil kopieren - + Failed to import the Savegame, no Savegame slot is left Fehlgeschlagen beim Importieren vom Spielstand, kein Spielstandslot mehr frei - - + + JPG pictures and GTA Snapmatic JPG Bilder und GTA Snapmatic - - + + JPG pictures only Nur JPG Bilder - - + + GTA Snapmatic only Nur GTA Snapmatic - - - - + + + + Patch selected... Auswahl patchen... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Patche Datei %1 von %2 Dateien - - + + Qualify as Avatar Als Avatar qualifizieren - - - - - - + + + + + + No Snapmatic pictures are selected Keine Snapmatic Bilder sind ausgewählt - + Failed to remove all selected Snapmatic pictures and/or Savegame files Fehlgeschlagen beim Entfernen von allen augewählten Snapmatic Bildern und/oder Spielstanddateien - - - - - - + + + + + + %1 failed with... %2 @@ -1298,93 +1298,93 @@ Drücke 1 für Standardmodus %2 - + Prepare Content for Import... Bereite Inhalt für Import vor... - + Qualify %1 failed with... Qualifizieren - - + + Change Players... Spieler ändern... - + Change Players %1 failed with... Spieler ändern - - - + + + Change Crew... Crew ändern... - + Failed to enter a valid Snapmatic Crew ID Fehlgeschlagen beim Eingeben von einer gültigen Crew ID - + Change Crew %1 failed with... Crew ändern - - - + + + Change Title... Titel ändern... - + Failed to enter a valid Snapmatic title Fehlgeschlagen beim Eingeben eines gültigen Snapmatic Titel - + Change Title %1 failed with... Titel ändern - - + + No Snapmatic pictures or Savegames files are selected Keine Snapmatic Bilder oder Spielstände sind ausgewählt - - - + + + Remove selected Auswahl löschen - + You really want remove the selected Snapmatic picutres and Savegame files? Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen? - - - - + + + + Export selected... Auswahl exportieren... - + Export failed with... %1 @@ -1403,7 +1403,7 @@ Drücke 1 für Standardmodus Alle Profildateien (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1538,32 +1538,32 @@ Drücke 1 für Standardmodus Fehlgeschlagen beim Löschen %1 von deinen Spielständen - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All &Alles auswählen - + &Deselect All Alles a&bwählen @@ -1578,7 +1578,7 @@ Drücke 1 für Standardmodus Spielstand kopieren - + &Export &Exportieren @@ -1672,7 +1672,7 @@ Drücke 1 für Standardmodus Meme - + Snapmatic Title Snapmatic Titel @@ -1778,19 +1778,19 @@ Drücke 1 für Standardmodus 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: @@ -1918,52 +1918,52 @@ Drücke 1 für Standardmodus Fehlgeschlagen beim Anzeigen von %1 im Spiel von deinen Snapmatic Bildern - + Edi&t Bearbei&ten - + &Export &Exportieren - + Show &In-game &Im Spiel anzeigen - + Hide &In-game &Im Spiel ausblenden - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All Alles &auswählen - + &Deselect All Alles a&bwählen @@ -2207,15 +2207,15 @@ Drücke 1 für Standardmodus &Neuladen - - + + 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 8b1ce16..44c126f 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -304,14 +304,14 @@ Pictures and Savegames - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! @@ -759,31 +759,31 @@ Y: %2 - + Export as &Picture... - + Export as &Snapmatic... - + &Overwrite Image... - + &Edit Properties... - + Open &Map Viewer... @@ -935,7 +935,7 @@ Press 1 for Default View - + Open &JSON Editor... @@ -1039,31 +1039,31 @@ Press 1 for Default View - + Enabled pictures: %1 of %2 - + Loading... - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - - - + + + Import... @@ -1074,42 +1074,42 @@ Press 1 for Default View - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import - + Importable files (%1) - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) @@ -1117,46 +1117,46 @@ Press 1 for Default View - + All image files (%1) - + All files (**) - - + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - + Failed to read Snapmatic picture - + Failed to read Savegame file @@ -1164,152 +1164,152 @@ Press 1 for Default View - + Can't import %1 because file can't be open - + Can't import %1 because file can't be parsed properly - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - - - - + + + + Export selected... - + Initialising export... Initializing export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - - + + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - - + + Qualify as Avatar - - - - - - + + + + + + No Snapmatic pictures are selected - - - - + + + + Patch selected... - - - - - - - - + + + + + + + + Patch file %1 of %2 files - - - - - - + + + + + + %1 failed with... %2 @@ -1317,65 +1317,65 @@ Press 1 for Default View - + Failed to remove all selected Snapmatic pictures and/or Savegame files - + Prepare Content for Import... - + Qualify %1 failed with... - - + + Change Players... - + Change Players %1 failed with... - - - + + + Change Crew... - + Failed to enter a valid Snapmatic Crew ID - + Change Crew %1 failed with... - - - + + + Change Title... - + Failed to enter a valid Snapmatic title - + Change Title %1 failed with... @@ -1477,37 +1477,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1747,25 +1747,25 @@ Press 1 for Default View - + Snapmatic Title - + New Snapmatic title: - + Snapmatic Crew - + New Snapmatic crew: @@ -1893,52 +1893,52 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -2182,15 +2182,15 @@ Press 1 for Default View - - + + Show In-game - - + + Hide In-game diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index 3807488..61db6be 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -314,14 +314,14 @@ et les fichiers de sauvegarde de Grand Theft Auto V - + 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é @@ -860,31 +860,31 @@ Y : %2 - + 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... @@ -953,7 +953,7 @@ Appuyer sur 1 pour le mode par défaut - + Open &JSON Editor... Ouvrir l'éditeur &JSON... @@ -1057,31 +1057,31 @@ Appuyer sur 1 pour le mode par défaut Copie du fichier %1 sur %2 - + Enabled pictures: %1 of %2 Photos activées : %1 sur %2 - + Loading... Chargement... - + Snapmatic Loader Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>Les Snapmatic suivants ont été répaés</h4>%1 - - - + + + Import... Importer... @@ -1092,31 +1092,31 @@ Appuyer sur 1 pour le mode par défaut - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import Importer - + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) @@ -1124,26 +1124,26 @@ Appuyer sur 1 pour le mode par défaut - + All image files (%1) Toutes les images (%1) - + All files (**) Tous les fichiers (**) - - + + Import file %1 of %2 files Importation du fichier %1 sur %2 - + Import failed with... %1 @@ -1152,25 +1152,25 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No valid file is selected Fichier invalide - + Importable files (%1) Fichiers importables (%1) - + Failed to read Snapmatic picture Impossible d'ouvrir la photo Snapmatic - + Failed to read Savegame file Impossible de lire le fichier de sauvegarde @@ -1178,127 +1178,127 @@ Appuyer sur 1 pour le mode par défaut - + 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 - + Can't import %1 because file format can't be detected Impossible d'importer %1, le format du fichier n'est pas détecté - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*, *.g5e) - + Failed to import the Snapmatic picture, the picture is already in the game Impossible d'importer la photo Snapmatic, un fichier du même nom existe déjà - + Failed to import the Snapmatic picture, can't copy the file into profile Impossible d'importer la photo Snapmatic, impossible de copier le fichier dans le profil - + Failed to import the Savegame, can't copy the file into profile Impossible d'importer la sauvegarde, impossible de copier le fichier dans le profil - + Failed to import the Savegame, no Savegame slot is left Impossible d'importer la sauvegarde, aucun emplacement libre - - + + JPG pictures and GTA Snapmatic Images JPG et GTA Snapmatic - - + + JPG pictures only Images JPG seulement - - + + GTA Snapmatic only GTA Snapmatic seulement - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exporter les photos Snapmatic%2<br><br>Les fichiers JPG permettent d'ouvrir les photos avec une visionneuse d'images<br>Les GTA Snapmatic permettent d'importer les photos dans le jeu<br><br>Exporter comme : - - - - + + + + Export selected... Exporter la sélection... - + Initialising export... Initialisation de l'export... - - + + Qualify as Avatar Qualifier comme Avatar - - - - - - + + + + + + No Snapmatic pictures are selected Aucun Snapmatic sélectionné - - - - + + + + Patch selected... Patcher la sélection... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Patch du fichier %1 sur %2 - - - - - - + + + + + + %1 failed with... %2 @@ -1308,71 +1308,71 @@ Appuyer sur 1 pour le mode par défaut %2 - + Failed to remove all selected Snapmatic pictures and/or Savegame files Échec de la supression des Snapmatic et/ou des fichiers de sauvegarde sélectionnés - + Prepare Content for Import... - + Qualify %1 failed with... Qualifier - - + + Change Players... Modifier les joueurs... - + Change Players %1 failed with... Modifier les joueurs - - - + + + Change Crew... Modifier le Crew... - + Failed to enter a valid Snapmatic Crew ID Snapmatic Crew ID invalide - + Change Crew %1 failed with... Changer le Crew - - - + + + Change Title... Changer le titre... - + Failed to enter a valid Snapmatic title Titre Snapmatic invalide - + Change Title %1 failed with... Changer le titre - + Export failed with... %1 @@ -1381,20 +1381,20 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No Snapmatic pictures or Savegames files are selected Aucun fichier de sauvegarde ou photo Snapmatic sélectionné - - - + + + Remove selected Supprimer la sélection - + You really want remove the selected Snapmatic picutres and Savegame files? Supprimer la sélection ? @@ -1404,7 +1404,7 @@ Appuyer sur 1 pour le mode par défaut Tous les fichiers de profil (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1501,7 +1501,7 @@ Appuyer sur 1 pour le mode par défaut Supprimer - + &Export &Exporter @@ -1592,32 +1592,32 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + &View &Voir - + &Remove &Supprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner to&ut - + &Deselect All &Déselectionner tout @@ -1673,7 +1673,7 @@ Appuyer sur 1 pour le mode par défaut Meme - + Snapmatic Title Titre Snapmatic @@ -1781,19 +1781,19 @@ Appuyer sur 1 pour le mode par défaut 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 : @@ -1941,52 +1941,52 @@ Appuyer sur 1 pour le mode par défaut %1 n'a pas pu être rendu visible en jeu - + Edi&t Édi&ter - + Show &In-game &Visible en jeu - + Hide &In-game &Invisible en jeu - + &Export &Exporter - + &View &Voir - + &Remove S&upprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner &tout - + &Deselect All &Déselectionner tout @@ -2210,15 +2210,15 @@ Appuyer sur 1 pour le mode par défaut Impossible d'ouvrir %1, format invalide - - + + Show In-game Visible en jeu - - + + Hide In-game Invisible en jeu diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index ea29da3..0e4d386 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -318,14 +318,14 @@ Pictures and Savegames - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! Свой Ðватар - + Custom Picture Custom Picture Description in SC, don't use Special Character! Ð¡Ð²Ð¾Ñ ÐšÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ° @@ -785,31 +785,31 @@ Y: %2 - + Export as &Picture... ЭкÑпортировать как &картинку... - + Export as &Snapmatic... ЭкÑпортировать как &Snapmatic... - + &Overwrite Image... &ПерезапиÑать картинку... - + &Edit Properties... &Изменить ÑвойÑтва... - + Open &Map Viewer... Открыть &карту... @@ -958,7 +958,7 @@ Press 1 for Default View - + Open &JSON Editor... Открыть &редактор JSON... @@ -1055,17 +1055,17 @@ Press 1 for Default View &Закрыть - + Loading... Загрузка... - + Snapmatic Loader Загрузчик Snapmatic - + <h4>Following Snapmatic Pictures got repaired</h4>%1 Change wording if the %1 is not a multiline beginning at new line <h4>ÐижеÑледующие картинки Snapmatic были воÑÑтановлены</h4>%1 @@ -1073,9 +1073,9 @@ Press 1 for Default View - - - + + + Import... Импортировать... @@ -1086,31 +1086,31 @@ Press 1 for Default View - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import Импортировать - + Savegames files (SGTA*) Файлы ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ (SGTA*) - + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) @@ -1118,19 +1118,19 @@ Press 1 for Default View - + All files (**) Ð’Ñе файлы (**) - - + + Import file %1 of %2 files ИмпортируютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ %1 из %2 - + Import failed with... %1 @@ -1139,174 +1139,174 @@ Press 1 for Default View %1 - + Failed to read Snapmatic picture Ðе удалоÑÑŒ загрузить картинку Snapmatic - + Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + No valid file is selected Выбранный файл неверен - + Enabled pictures: %1 of %2 Включенные картинки: %1 из %2 - + Importable files (%1) Файлы Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° (%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, файл не может быть правильно обработан - + Can't import %1 because file format can't be detected Ðе получилоÑÑŒ импортировать %1, не удалоÑÑŒ определить формат файла - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе удалоÑÑŒ импортировать картинку Snapmatic, название не начинаетÑÑ Ñ PGTA или не заканчиваетÑÑ Ñ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе удалоÑÑŒ импортировать картинку Snapmatic, картинка уже в игре - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе удалоÑÑŒ импортировать картинку Snapmatic, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, can't copy the file into profile Ðе удалоÑÑŒ импортировать Ñохранение, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, no Savegame slot is left Ðе удалоÑÑŒ импортировать Ñохранение, нет пуÑтых Ñчеек под ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + JPG pictures and GTA Snapmatic Картинки JPG и GTA Snapmatic - - + + JPG pictures only Только картинки JPG - - + + GTA Snapmatic only Только GTA Snapmatic - + Initialising export... Подготовка к ÑкÑпорту... - - + + No Snapmatic pictures or Savegames files are selected Ðе выделены ни один Snapmatic или Ñохранение - - - + + + Remove selected СнÑть выделение - + You really want remove the selected Snapmatic picutres and Savegame files? Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - + Prepare Content for Import... - - + + Qualify as Avatar Пометить как Ðватар - - - - - - + + + + + + No Snapmatic pictures are selected Ðе выделена ни одна картинка Snapmatic - - - - + + + + Patch selected... Пропатчить выделенные... - - - - - - - - + + + + + + + + Patch file %1 of %2 files ИзменÑетÑÑ Ñ„Ð°Ð¹Ð» %1 из %2 - - - - - - + + + + + + %1 failed with... %2 @@ -1316,80 +1316,80 @@ Press 1 for Default View %2 - + Failed to remove all selected Snapmatic pictures and/or Savegame files Ðе удалоÑÑŒ удалить вÑе выделенные картинки Snapmatic и/или ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - + Qualify %1 failed with... Помечание - - + + Change Players... Изменить игроков... - + Change Players %1 failed with... Измение игроков - - - + + + Change Crew... Изменить банду... - + Failed to enter a valid Snapmatic Crew ID Введённый идентификатор банды не верен - + Change Crew %1 failed with... Изменение банды - - - + + + Change Title... Изменить заголовок... - + Failed to enter a valid Snapmatic title Введённый заголовок не верен - + Change Title %1 failed with... Изменение заголовка - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1ЭÑкпортировать картинки Snapmatic%2<br><br>Картинки JPG можно открыть любым проÑмотрщиком<br>Картинки формата GTA Snapmatic можно Ñнова импортировать в игру<br><br>ЭкÑпортировать как: - - - - + + + + Export selected... Экпортировать выделенное... - + Export failed with... %1 @@ -1410,7 +1410,7 @@ Press 1 for Default View Ð’Ñе файлы Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1550,32 +1550,32 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить Ñохранение %1 - + &View &ПроÑмотр - + &Remove &Удалить - + &Select &Выбрать - + &Deselect Сн&Ñть выбор - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1585,7 +1585,7 @@ Press 1 for Default View Копировать Ñохранение - + &Export &ЭкÑпортировать @@ -1689,7 +1689,7 @@ Press 1 for Default View Meme - + Snapmatic Title Заголовок Snapmatic @@ -1785,19 +1785,19 @@ Press 1 for Default View Ðе удалоÑÑŒ измененить ÑвойÑтва Snapmatic из-за проблемы ввода/вывода - + New Snapmatic title: Ðовый заголовок Snapmatic: - + Snapmatic Crew Банда на Snapmatic - + New Snapmatic crew: ÐÐ¾Ð²Ð°Ñ Ð±Ð°Ð½Ð´Ð° на Snapmatic: @@ -1935,52 +1935,52 @@ Press 1 for Default View Ðе удалоÑÑŒ показать %1 в ÑпиÑке картинок Snapmatic в игре - + Edi&t &Правка - + Show &In-game Показывать в &игре - + Hide &In-game Ск&рыть в игре - + &Export &ЭкÑпорт - + &View По&казать - + &Remove У&далить - + &Select &Выделить - + &Deselect Сн&Ñть выделение - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -2214,15 +2214,15 @@ Press 1 for Default View Пере&загрузить - - + + Show In-game Показывать в игре - - + + Hide In-game Скрыть в игре diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts index f5609eb..706673b 100644 --- a/res/gta5sync_uk.ts +++ b/res/gta5sync_uk.ts @@ -309,14 +309,14 @@ Pictures and Savegames - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! КориÑтувацький Ðватар - + Custom Picture Custom Picture Description in SC, don't use Special Character! КориÑтувацьке Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ @@ -774,37 +774,37 @@ Y: %2 - + Export as &Picture... ЕкÑпортувати Ñк &зображеннÑ... - + Export as &Snapmatic... ЕкÑпортувати Ñк &Snapmatic... - + &Edit Properties... &Змінити влаÑтивоÑті... - + &Overwrite Image... &ПерезапиÑати зображеннÑ... - + Open &Map Viewer... Відкрити &карту... - + Open &JSON Editor... Відкрити редактор &JSON... @@ -1059,9 +1059,9 @@ Press 1 for Default View - - - + + + Import... ІмпортуваннÑ... @@ -1072,34 +1072,34 @@ Press 1 for Default View - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import Імпорт - + All image files (%1) Файли зображень (%1) - + All files (**) УÑÑ– файли (**) @@ -1107,75 +1107,75 @@ Press 1 for Default View - + Can't import %1 because file can't be open Ðеможливо імпортувати %1, оÑкільки файл не може бути відкритий - + Can't import %1 because file can't be parsed properly Ðеможливо імпортувати %1, оÑкільки файл неможливо розібрати правильно - + Enabled pictures: %1 of %2 Увімкнено фотографії:%1 з%2 - + Loading... ЗавантаженнÑ... - + Snapmatic Loader Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>ÐаÑтупні Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð±ÑƒÐ»Ð¸ відновлені</h4>%1 - + Importable files (%1) ІмпортуютьÑÑ Ñ„Ð°Ð¹Ð»Ð¸ (%1) - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + Savegames files (SGTA*) Файли Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸ (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ (PGTA*) - - + + No valid file is selected Вибрані недійÑні файли - - + + Import file %1 of %2 files ІмпортуєтьÑÑ Ñ„Ð°Ð¹Ð» %1 з %2 файлів - + Import failed with... %1 @@ -1184,86 +1184,86 @@ Press 1 for Default View %1 - + Failed to read Snapmatic picture Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Snapmatic картинку - + Failed to read Savegame file Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸ - + Can't import %1 because file format can't be detected Ðеможливо імпортувати%1, оÑкільки формат файлу не може бути виÑвлений - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Snapmatic, файл не починаєтьÑÑ Ð· PGTA або закінчуєтьÑÑ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ знімок Snapmatic, картинка вже в грі - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Snapmatic, не можна Ñкопіювати файл у профіль - + Failed to import the Savegame, can't copy the file into profile Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Сейв, не можна Ñкопіювати файл у профіль - + Failed to import the Savegame, no Savegame slot is left Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Сейв, немає вільного Ñлота - - - - + + + + Export selected... ЕкÑпорт обраних... - - + + JPG pictures and GTA Snapmatic JPG картинки Ñ– GTA Snapmatic - - + + JPG pictures only Тільки JPG картинки - - + + GTA Snapmatic only Тільки GTA Snapmatic - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1 ЕкÑпортувати Snapmatic фотографії %2 <br><br> Фотографії JPG дозволÑють відкривати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð° допомогою заÑобу переглÑду зображень<br>GTA Snapmatic дає змогу імпортувати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð² гру<br><br>ЕкÑпортувати Ñк: - + Initialising export... Ð†Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ ÐµÐºÑпорту... - + Export failed with... %1 @@ -1272,45 +1272,45 @@ Press 1 for Default View %1 - - + + No Snapmatic pictures or Savegames files are selected Ðе вибрано жодного Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ файлу Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ - - - + + + Remove selected Видалити вибрані - + You really want remove the selected Snapmatic picutres and Savegame files? Ви дійÑно хочете видалити вибрані Snapmatic фотографії та файли Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸? - + Failed to remove all selected Snapmatic pictures and/or Savegame files Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ вÑÑ– обрані Snapmatic фотографії та/або Сейви - - - - - - + + + + + + No Snapmatic pictures are selected Ðе вибрано жодного Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ - - - - - - + + + + + + %1 failed with... %2 @@ -1320,86 +1320,86 @@ Press 1 for Default View %2 - + Prepare Content for Import... - - + + Qualify as Avatar Позначити Ñк Ðватар - - - - + + + + Patch selected... Вибір патчу... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Патч файлу %1 з %2 файлів - + Qualify %1 failed with... ЯкіÑть - - + + Change Players... Зміна гравців... - + Change Players %1 failed with... Змінити гравців - - - + + + Change Crew... Зміна банди... - + Failed to enter a valid Snapmatic Crew ID Ðе вдалоÑÑ Ð²Ð²ÐµÑти дійÑний ID Банди Snapmatic - + Change Crew %1 failed with... Змінити банду - - - + + + Change Title... Зміна назви... - + Failed to enter a valid Snapmatic title Ðе вдалоÑÑ Ð²Ð²ÐµÑти дійÑний заголовок Snapmatic - + Change Title %1 failed with... Змінити назву @@ -1501,37 +1501,37 @@ Press 1 for Default View Видалити - + &View &ПереглÑд - + &Export &ЕкÑпорт - + &Remove &Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ - + &Select &Ð’Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ - + &Deselect &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ - + Select &All Вибрати &уÑÑ– - + &Deselect All &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ ÑƒÑÑ–Ñ… @@ -1726,25 +1726,25 @@ Press 1 for Default View Змінити влаÑтивоÑті Snapmatic не вдалоÑÑ Ñ‡ÐµÑ€ÐµÐ· JSON Помилку - + Snapmatic Crew Snapmatic банда - + New Snapmatic crew: Ðова Snapmatic банда: - + Snapmatic Title Snapmatic назва - + New Snapmatic title: Ðовий Snapmatic заголовок: @@ -1919,52 +1919,52 @@ Press 1 for Default View Видалити - + Edi&t Редагува&ти - + Show &In-game Показати &у грі - + Hide &In-game Сховати &у грі - + &Export &ЕкÑпортувати - + &View &ПереглÑнути - + &Remove &Видалити - + &Select &Ð’Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ - + &Deselect &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ - + Select &All Вибрати &уÑÑ– - + &Deselect All &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ ÑƒÑÑ–Ñ… @@ -2183,15 +2183,15 @@ Press 1 for Default View Змінити &гравців... - - + + Show In-game Показати у грі - - + + Hide In-game Сховати у грі diff --git a/res/gta5sync_zh_TW.ts b/res/gta5sync_zh_TW.ts index 60763cd..bbd099c 100644 --- a/res/gta5sync_zh_TW.ts +++ b/res/gta5sync_zh_TW.ts @@ -308,14 +308,14 @@ Pictures and Savegames - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! 自訂大頭貼 - + Custom Picture Custom Picture Description in SC, don't use Special Character! 自訂圖片 @@ -772,37 +772,37 @@ Y: %2 - + Export as &Picture... 匯出æˆåœ–片(&P)... - + Export as &Snapmatic... åŒ¯å‡ºæˆ Snapmatic(&S)... - + &Edit Properties... 編輯屬性(&E) ... - + &Overwrite Image... 修改圖片(&O)... - + Open &Map Viewer... 開啟地圖檢視器(&M)... - + Open &JSON Editor... 開啟 JSON 編輯器(&J)... @@ -1057,9 +1057,9 @@ Press 1 for Default View - - - + + + Import... 匯入... @@ -1070,34 +1070,34 @@ Press 1 for Default View - - - - - - - - - - - - - - + + + + + + + + + + + + + + Import 匯入 - + All image files (%1) 所有圖片 (%1) - + All files (**) 所有檔案 (**) @@ -1105,206 +1105,206 @@ Press 1 for Default View - + Can't import %1 because file can't be open 無法匯入 %1,因為檔案無法開啟 - + Can't import %1 because file can't be parsed properly 無法匯入 %1ï¼Œå› ç‚ºæª”æ¡ˆç„¡æ³•æ­£ç¢ºè§£æž - + Enabled pictures: %1 of %2 開啟圖片 %1 å…± %2 - + Loading... 載入中... - + Snapmatic Loader Snapmatic 載入器 - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>下列的 Snapmatic 圖片已被更新</h4>%1 - + Importable files (%1) å¯åŒ¯å…¥çš„æª”案 (%1) - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + Savegames files (SGTA*) éŠæˆ²å­˜æª” (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic 圖片 (PGTA*) - - + + No valid file is selected æ²’æœ‰é¸æ“‡æœ‰æ•ˆçš„æª”案 - - + + Import file %1 of %2 files 匯入檔案 %1 å…± %2 個 - + Import failed with... %1 %1 匯入失敗 - + Failed to read Snapmatic picture ç„¡æ³•è®€å– Snapmatic 圖片 - + Failed to read Savegame file 無法讀å–éŠæˆ²å­˜æª” - + Can't import %1 because file format can't be detected 無法匯入 %1ï¼Œå› ç‚ºç„¡æ³•æª¢æ¸¬è©²æª”æ¡ˆæ ¼å¼ - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e 匯入 Snapmatic åœ–ç‰‡å¤±æ•—ï¼Œæª”æ¡ˆä¸æ˜¯ PGTA 開頭或附檔å䏿˜¯ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game 匯入 Snapmatic åœ–ç‰‡å¤±æ•—ï¼Œåœ–ç‰‡å·²ç¶“åœ¨éŠæˆ²ä¸­ - + Failed to import the Snapmatic picture, can't copy the file into profile 匯入 Snapmatic 圖片失敗,無法將該檔案複製到設定檔中 - + Failed to import the Savegame, can't copy the file into profile åŒ¯å…¥éŠæˆ²å­˜æª”失敗,無法將該檔案複製到設定檔中 - + Failed to import the Savegame, no Savegame slot is left åŒ¯å…¥éŠæˆ²å­˜æª”å¤±æ•—ï¼Œæ²’æœ‰éŠæˆ²å­˜æª”æ¬„ä½ - - - - + + + + Export selected... 匯出所é¸... - - + + JPG pictures and GTA Snapmatic JPG 圖片和 GTA Snapmatic - - + + JPG pictures only åªæœ‰ JPG 圖片 - - + + GTA Snapmatic only åªæœ‰ GTA Snapmatic - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1 匯出 Snapmatic 圖片 %2<br><br>JPG 圖片å¯ä½¿ç”¨åœ–片檢視器開啟<br>GTA Snapmatic å¯ä»¥åŒ¯å…¥åˆ°éŠæˆ²ä¸­<br><br>匯出æˆ: - + Initialising export... åˆå§‹åŒ–... - + Export failed with... %1 %1 匯出失敗 - - + + No Snapmatic pictures or Savegames files are selected æœªé¸æ“‡ Snapmatic åœ–ç‰‡æˆ–éŠæˆ²å­˜æª” - - - + + + Remove selected ç§»é™¤æ‰€é¸ - + You really want remove the selected Snapmatic picutres and Savegame files? 你想移除所é¸çš„ Snapmatic 圖片/存檔嗎? - + Failed to remove all selected Snapmatic pictures and/or Savegame files ç„¡æ³•ç§»é™¤æ‰€é¸æ“‡çš„ Snapmatic 圖片/éŠæˆ²å­˜æª” - - - - - - + + + + + + No Snapmatic pictures are selected æœªé¸æ“‡ Snapmatic 圖片 - - - - - - + + + + + + %1 failed with... %2 @@ -1314,86 +1314,86 @@ Press 1 for Default View %2 - + Prepare Content for Import... - - + + Qualify as Avatar åˆæ ¼å¤§é ­è²¼ - - - - + + + + Patch selected... 修改所é¸... - - - - - - - - + + + + + + + + Patch file %1 of %2 files 修改檔案 %1 å…± %2 個檔案 - + Qualify %1 failed with... åˆæ ¼ - - + + Change Players... 更改玩家... - + Change Players %1 failed with... 更改玩家 - - - + + + Change Crew... 更改幫會... - + Failed to enter a valid Snapmatic Crew ID 輸入了無效的幫會 ID - + Change Crew %1 failed with... 更改幫會 - - - + + + Change Title... 更改標題... - + Failed to enter a valid Snapmatic title 輸入了無效的標題 - + Change Title %1 failed with... 更改標題 @@ -1495,37 +1495,37 @@ Press 1 for Default View 刪除 - + &View 檢視(&V) - + &Export 匯出(&E) - + &Remove 移除(&R) - + &Select 鏿“‡(&S) - + &Deselect å–æ¶ˆé¸æ“‡(&D) - + Select &All 鏿“‡å…¨éƒ¨(&A) - + &Deselect All å–æ¶ˆé¸æ“‡å…¨éƒ¨(&D) @@ -1720,25 +1720,25 @@ Press 1 for Default View JSON 錯誤,未能更新 Snapmatic 屬性 - + Snapmatic Crew 幫會 - + New Snapmatic crew: 輸入新的幫會: - + Snapmatic Title 標題 - + New Snapmatic title: 輸入新的標題: @@ -1913,52 +1913,52 @@ Press 1 for Default View 刪除 - + Edi&t 編輯(&E) - + Show &In-game åœ¨éŠæˆ²ä¸­é¡¯ç¤º(&I) - + Hide &In-game åœ¨éŠæˆ²ä¸­éš±è—(&I) - + &Export 匯出(&E) - + &View 檢視(&V) - + &Remove 移除(&R) - + &Select 鏿“‡(&S) - + &Deselect å–æ¶ˆé¸æ“‡(&D) - + Select &All 鏿“‡å…¨éƒ¨(&A) - + &Deselect All å–æ¶ˆé¸æ“‡å…¨éƒ¨(&D) @@ -2177,15 +2177,15 @@ Press 1 for Default View 更改玩家(&P)... - - + + Show In-game åœ¨éŠæˆ²ä¸­é¡¯ç¤º - - + + Hide In-game åœ¨éŠæˆ²ä¸­éš±è— From 1165c3b536d02aee3e833401b855c4ee5a0df1d6 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 6 Jul 2018 01:00:08 +0000 Subject: [PATCH 151/359] Update Crowdin configuration file --- crowdin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crowdin.yml b/crowdin.yml index d585dbe..1ff6d34 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,3 +1,3 @@ files: - - source: '/res/gta5sync.ts' + - source: /res/gta5sync.ts translation: /res/gta5sync_%locale_with_underscore%.qm From 714be43280b719a4a32d4b2435e30aa5d11f9e2f Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 6 Jul 2018 03:12:31 +0200 Subject: [PATCH 152/359] fix crowdin file name --- crowdin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crowdin.yml b/crowdin.yml index 1ff6d34..7872de1 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,3 +1,3 @@ files: - source: /res/gta5sync.ts - translation: /res/gta5sync_%locale_with_underscore%.qm + translation: /res/gta5sync_%locale_with_underscore%.ts From 5f35428cd0c8836f3e39bd56db3c456b8135fcd9 Mon Sep 17 00:00:00 2001 From: Syping Date: Mon, 9 Jul 2018 20:39:27 +0200 Subject: [PATCH 153/359] add watermark --- ImportDialog.cpp | 71 +++++++++++++++++++++++++++++++++++++++ ImportDialog.h | 5 +++ ImportDialog.ui | 23 +++++++++++-- res/5sync-128.png | Bin 3706 -> 3226 bytes res/5sync-16.png | Bin 415 -> 357 bytes res/5sync-24.png | Bin 649 -> 585 bytes res/5sync-256.png | Bin 7189 -> 6302 bytes res/5sync-32.png | Bin 822 -> 776 bytes res/5sync-40.png | Bin 1163 -> 1102 bytes res/5sync-48.png | Bin 1326 -> 1233 bytes res/5sync-64.png | Bin 1768 -> 1611 bytes res/5sync-96.png | Bin 3014 -> 2737 bytes res/app.qrc | 5 +-- res/avatararea.png | Bin 2958 -> 2877 bytes res/avatarareaimport.png | Bin 2393 -> 2353 bytes res/back.png | Bin 363 -> 317 bytes res/empty1x16.png | Bin 157 -> 87 bytes res/gta5sync.ts | 67 +++++++++++++++++++----------------- res/gta5sync_de.qm | Bin 44621 -> 44697 bytes res/gta5sync_de.ts | 67 +++++++++++++++++++----------------- res/gta5sync_en_US.ts | 67 +++++++++++++++++++----------------- res/gta5sync_fr.ts | 67 +++++++++++++++++++----------------- res/gta5sync_ru.ts | 67 +++++++++++++++++++----------------- res/gta5sync_uk.ts | 67 +++++++++++++++++++----------------- res/gta5sync_zh_TW.ts | 67 +++++++++++++++++++----------------- res/gta5view.png | Bin 7189 -> 13479 bytes res/next.png | Bin 362 -> 316 bytes res/pointmaker-16.png | Bin 352 -> 278 bytes res/pointmaker-24.png | Bin 444 -> 353 bytes res/pointmaker-32.png | Bin 611 -> 475 bytes res/pointmaker-8.png | Bin 244 -> 175 bytes res/savegame.png | Bin 1403 -> 1363 bytes res/watermark.png | Bin 13806 -> 0 bytes res/watermark_1b.png | Bin 0 -> 11496 bytes res/watermark_2b.png | Bin 0 -> 5765 bytes res/watermark_2r.png | Bin 0 -> 5713 bytes res/watermarkbright.png | Bin 15891 -> 0 bytes res/watermarkdark.png | Bin 13323 -> 0 bytes 38 files changed, 351 insertions(+), 222 deletions(-) delete mode 100644 res/watermark.png create mode 100644 res/watermark_1b.png create mode 100644 res/watermark_2b.png create mode 100644 res/watermark_2r.png delete mode 100644 res/watermarkbright.png delete mode 100644 res/watermarkdark.png diff --git a/ImportDialog.cpp b/ImportDialog.cpp index 59ea61d..afc2373 100644 --- a/ImportDialog.cpp +++ b/ImportDialog.cpp @@ -52,6 +52,8 @@ ImportDialog::ImportDialog(QWidget *parent) : ui->setupUi(this); importAgreed = false; + watermarkAvatar = true; + watermarkPicture = false; insideAvatarZone = false; avatarAreaImage = QImage(":/img/avatarareaimport.png"); selectedColour = QColor::fromRgb(0, 0, 0, 255); @@ -169,6 +171,7 @@ void ImportDialog::processImage() snapmaticImage = snapmaticImage.scaled(snapmaticAvatarResolution, snapmaticAvatarResolution, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); } snapmaticPainter.drawImage(snapmaticAvatarPlacementW + diffWidth, snapmaticAvatarPlacementH + diffHeight, snapmaticImage); + if (ui->cbWatermark->isChecked()) { processWatermark(&snapmaticPainter); } imageTitle = tr("Custom Avatar", "Custom Avatar Description in SC, don't use Special Character!"); } else @@ -195,6 +198,7 @@ void ImportDialog::processImage() snapmaticImage = snapmaticImage.scaled(snapmaticResolutionW, snapmaticResolutionH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); } snapmaticPainter.drawImage(0 + diffWidth, 0 + diffHeight, snapmaticImage); + if (ui->cbWatermark->isChecked()) { processWatermark(&snapmaticPainter); } imageTitle = tr("Custom Picture", "Custom Picture Description in SC, don't use Special Character!"); } snapmaticPainter.end(); @@ -202,6 +206,47 @@ void ImportDialog::processImage() ui->labPicture->setPixmap(snapmaticPixmap.scaled(snapmaticResolutionLW, snapmaticResolutionLH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); } +void ImportDialog::processWatermark(QPainter *snapmaticPainter) +{ + bool blackWatermark = false; + bool redWatermark = false; + if (selectedColour.red() > 127) + { + if (selectedColour.green() > 127 || selectedColour.blue() > 127) + { + redWatermark = true; + } + } + else + { + redWatermark = true; + } + if (selectedColour.lightness() > 127) + { + blackWatermark = true; + } + // draw watermark + if (redWatermark) + { + snapmaticPainter->drawImage(0, 0, QImage(":/img/watermark_2r.png")); + } + else + { + QImage viewWatermark = QImage(":/img/watermark_2b.png"); + if (!blackWatermark) + { + viewWatermark.invertPixels(QImage::InvertRgb); + } + snapmaticPainter->drawImage(0, 0, viewWatermark); + } + QImage textWatermark = QImage(":/img/watermark_1b.png"); + if (!blackWatermark) + { + textWatermark.invertPixels(QImage::InvertRgb); + } + snapmaticPainter->drawImage(0, 0, textWatermark); +} + QImage ImportDialog::image() { return newImage; @@ -271,6 +316,16 @@ void ImportDialog::on_cbAvatar_toggled(bool checked) } } insideAvatarZone = ui->cbAvatar->isChecked(); + watermarkBlock = true; + if (insideAvatarZone) + { + ui->cbWatermark->setChecked(watermarkAvatar); + } + else + { + ui->cbWatermark->setChecked(watermarkPicture); + } + watermarkBlock = false; processImage(); } @@ -402,3 +457,19 @@ void ImportDialog::on_cbForceAvatarColour_toggled(bool checked) Q_UNUSED(checked) processImage(); } + +void ImportDialog::on_cbWatermark_toggled(bool checked) +{ + if (!watermarkBlock) + { + if (insideAvatarZone) + { + watermarkAvatar = checked; + } + else + { + watermarkPicture = checked; + } + processImage(); + } +} diff --git a/ImportDialog.h b/ImportDialog.h index 70e0648..c58b9f5 100644 --- a/ImportDialog.h +++ b/ImportDialog.h @@ -49,6 +49,7 @@ private slots: void on_cmdBackgroundWipe_clicked(); void on_cbStretch_toggled(bool checked); void on_cbForceAvatarColour_toggled(bool checked); + void on_cbWatermark_toggled(bool checked); private: Ui::ImportDialog *ui; @@ -60,9 +61,13 @@ private: QImage newImage; QColor selectedColour; bool insideAvatarZone; + bool watermarkPicture; + bool watermarkAvatar; + bool watermarkBlock; bool importAgreed; int snapmaticResolutionLW; int snapmaticResolutionLH; + void processWatermark(QPainter *snapmaticPainter); }; #endif // IMPORTDIALOG_H diff --git a/ImportDialog.ui b/ImportDialog.ui index 61c15fe..a4e76a8 100644 --- a/ImportDialog.ui +++ b/ImportDialog.ui @@ -7,13 +7,13 @@ 0 0 516 - 425 + 512 516 - 425 + 512 @@ -85,7 +85,7 @@ - + @@ -114,6 +114,23 @@ + + + + + + + 0 + 0 + + + + Watermark + + + + + diff --git a/res/5sync-128.png b/res/5sync-128.png index 4b4bf5a387833bf73fedb53e855a88fa406725c3..fc3d97addf7debf9952de2a1c6c33ac282816d29 100644 GIT binary patch delta 3222 zcmV;H3~BTF9GV%BB!32COGiWi{{a60|De66lK=n=Pf0{URCwC$oqMbwMHR`K|p+un6 zAQX9*(t=RiB2fCGkK4zko%N5|o2+xs?#|9{fA{zM?Qg!x=6~M1cjnC5nX~7dIdf(f z0s;a80s;a80s;a80s;a80y+Y!!q0XLFu9`7_9*aT5Z`S44TvgweK}}={O4K;46ER? zZ3l(|U1bofRa5}>tLWeZEGTR6t1JMASJ+e`SP+2DbprbX>wrNO ze6~%o1Gp_{fPZw1ujt?dyj14kS5*Ll{qJxA2=>1Kb_f~(fJcBgbIL?5;6KeJAQL;s zHnM1F_0Z6D)xZ>w!QT|m96AzJ^8tL+|I5H9K>#|}0h~_Ch9MS0=SCzGZ!zmuCUxG;- z?PyfR2M7V64i|vn0Cq6?1DgSDU46E>BA~gL=;8cr19l2sR}B;3WB*ItToD8y*#95^ zZ6*L=22c?U!EBZ+>H|y&T~`fE^%(pvs+kPiktSf0N1f6)R|ElQuNgqF{}mE|-~e_o zK84>3;D5fM>#CsveC+>9%qn0&1q8sy{)Yfig#;kj{}Rxy^I_$w0lI;sfx(!?ph5BP zJwJQOYzEe2(#%!@?*q%J;0~g8Jt1Tqu&9sQ)W9;#F5*{#e*w<|9|S$p_c)E#IkfRj z;1=L0s(a>A%i&kF<_Vt5fvbSM!VonU&(YdPxqog2?gB=Kp(-Cc0$XU0Gkv!Jzofc{ zRy74*p#2VaUKH~k;s8yW|F^=d2zoEU4dcQIZVSQLg`=9s!voMT)*ag27 zuvWZI3z5L$_&jhOCar5dura8$dNp)w z`(YyR8ZG!0uz}R0G%!9|3<28le5L9luk^ zntH@c&;aFOfM>mKI{fRUErSU9MSn0f>LATnSOaL-Us)R)BUn^}2Yi{(aI}IWEt*Se zCdIy9aPO@Dzr(+lvki-t7n4H5-%C{)8b%0>EUtsz6#~8IBSAZ9 z_@+?y&Vm9rRl{8yYrSjdXd^8Kz;a z@ZeKZ%3mWq;MoP*`<{laK7WHBx3xYpr4nbW)0Id91%N!Lp4m%a8FA4O9k3vgmS-k)JWgY z5xPAbpKqy9_q0X{z!O4a;|i+ceFROiU7JH7r1Hwv78*82vD22r?|Nm|Q*uPa!UGe>?;aKs{^+$NvEkb+CBTQh}XyXExdWCfEg z23IM#yO9F0Ot@EMXUny!ciXd+Ot%Ms3BJl9zTSE4r0$y0VTSd;%L+QFxAaBK ze6Y~)Qx1bK1%Gmu>YPkk4U>yHSsG3f>dbTCafpT+HEb8^-K`mql4b%TIDb>c8BvLQch?H;FQ{kLYZ(Ou z060TgNs|%0uFN?*cnCn=4B#l?-T~SO;Xurw?+tt!7^gD&B7&EJ<5hOjsgnQz7pX)B zaAdNX-p&w!p(!uZ1p@8s=__b>L{LA2GwiVxsXETFt$$nfbR=|4qWpN@aIe+Q77aIO zhs_=uo`16Hev}gWUY8X=(Qs9ssnc+>!0SUk<5;Ux1K0z-cZvY~NEwecdGG0(Ln@Sp z5emjww-@KUjpOSP?#QeX&H%>L;F4OtiE`Bd=c?G*i`#i#_09-hpQizUp9uGE@OjpH zOhDRH@GZevxy-s33Dcl7NS}wxOT8)@mfnW>qJQYqz@xyEwc-n0nF65AXX-An{GaOt zpJ+pt0BD$?;7b<&^J?(Vz7_x});vn++zXWza#ir4a{q{+y(9U5wbsiMzoYLU_m@fDcJN7tj8s4$^IWvXM@oBjhapK52>;DVu;k#5H0Bh+o zf}h%vIN(mp>&;Tl3TrVWf~^W($*H=FpjsQf|9*qOe@}YZi7IgpU}S<=_c_u@u6BM$ z^?tVNn<4-TK8S5+62p_WAG3Ws*&!Q&tA7jF=CKNPw{E}e5a;faf>(_kePx{s5P?qQ z;n_~x^qM(&+(iI(NVIXb)y8|u?2>AV0BoaoICfZqx%2FRih`SKu%bXSJ`NzrZ~LAN zj*i*~Lu^$>MUPjBm_)qpaYqKJ^^yjN&7Pe!dXw@$kfLrAAen(-F|&h!A6p%?0)M!v zApI|TIDlymYNJo&?n?RFPFcG>X9}C90ZzC2bB%ILJ8Pul^MK`$JQv@;AkRT`r2m{i zXRJfLDMGysQO3$z34L*n)!q^fgEXv8X8G#GOdv&*3>Gqydo66~0;aT)0&u;ZEfYaM z!Q*`^>OGywqdh>w7K_emM|C_f*?;kg`ZGPAag;XU;=FRF+TOc{)2(~69Qpshh@!o) z6${dcRuF*m1*xCrlH>0{dy+7KMK)SolM>#&+_CLW;fApj@XYxElCyX5#g(3Z@|)dlL0)bL@75X{$briO7EMt{WDI1R^Y zxKc1Z6CK+7n!S$TlP?j|T4m)RXp7e9RuOIm6(;x1(-K>uH!Or4^{zJ3BtF&R{RjC zJAfyJ=XjWaQloeMwExMT0RaI40RaI40RaI40RaI4ZH4~<=>6A5mJds&3;+NC07*qo IM6N<$g7W7OA^-pY literal 3706 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 diff --git a/res/5sync-16.png b/res/5sync-16.png index 9db49fdd7ce6ba022576f67aead0339e173f38fb..662b09d7c38527a595848c258ceb7d38f5534858 100644 GIT binary patch delta 330 zcmV-Q0k!_01LXpcB!32COGiWi{{a60|De66lK=n#8c9S!R5;76(#tEvQ5*&E&(*L% zDUoPcSlEbWWsX{$VnuN zi@<9tiE$Z=t3%7s(Rn*LeUaG$t#}T_|8RxV cz`g&#JBK?&(?Pij#sB~S07*qoM6N<$f`-JEw*UYD delta 388 zcmV-~0ek-C0-pnrB!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000id z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF)~90YwQ330S`$; zK~y+TwbM;2L}3&M@LS$$Y`kR3f(0w(3lK@lMo|{T7qGOTB!6XMl16!1Q6kyT-pA@5|<4bEPa=i%#b6SR$t@r0^?-ar(j6Ny3HZ$oai-EqDg&bZLJKLV2J{KTry0N z9IKN%8@7_G_wUj8G^50000IVH5}O&-)w9 z$X&^;WH2;p)VNJHXi`LK$ik&86g$d>(TIg1D}RD08>Lvt!bTP@4I3%4GZ&I#p~+?8 zJQkkv((wEJhH>iYJQ-l2Gg`(44zL|4jS z2F;1?;9z3hFk2t9026}FV0HFe8g%}epf_+QkAL?w6?GzP7~(_m+CE7%iUNo))z z2G4_YIsRI({ii1?7{I)|J&zNaIfp8I3C^M$FEVxa<9~Ca5eIM`(}QNT6x{p?g*%B3^d*Yo`}r}PMo)$Nc{V0tH?CkR4&y?Rr@IXD0A>}ON*pP%XdfC9QP5fN zwG{I)Q^^gy%L&>Fj*kTL)ZlG!xpa0fXvq~`3a$n{L2tI73b2 delta 624 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 A?*IS* diff --git a/res/5sync-32.png b/res/5sync-32.png index 6a768fd980fcd8c23e80d7d122bf0c73b52bf288..b0f64cde5303ad437dd9a55f24fe69847460f67a 100644 GIT binary patch delta 752 zcmVz#EsqA>}5#u(mWdI`2CU#G;>{i`)u$4N{nOHi-nw9vi7@wMnC)qzN5kggO zxI0VsxShve(@pWw#Or0?$ni)|;-1L4$fJ2~Zsb7XkAKK$6s0*Lx@5d8o(2Mhd)1m5!a4pc0*nv}_s`qu(?b#W4WwL8HfMto-Le)~g%Gr2G zMVh{Rbw(0{HNKpH%Ok1Mf}VV0_!C>^h7o# z_Cz-1xfdgsW7WFH*Png9m delta 799 zcmV+)1K|9K2DS!}B!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000id z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF)~90YwQ330;Wks zK~z{r?bb_3R8btq@#&#G2+I~qDOrMxj0%Ga0%_5Mq6Z-&S%0)l2($+jWKdK}i5z0AZW zlVLWaH3KUVN}7?(z+!}wXGnE{|M`eeG6%olPrMh!<4}N5vL628e~^nva}0h1uQU*K zZozM$T?0|)Er0w5>NF5#^5HKoYY}O7z+ZeAGZ1Oc!f)UUE};ci(11NyhzZL*_zk4< z8{JrnP%{Myq`GJ--?0gyWg7IU3Na7UF%w15vvC!AE`poThUX))EW-eTn~3~X-HG4^ z+7M~>=UulPNje08WDKxng5b6f#2h4@K3~#W& zhDO6+7e>Bf>M9H&2OIE>i|8I}t{G2Jgi^+nv@6hvF0ElKm--zN)cPl-fGV3i0^PP*c+a|GTHU%*oWldHOBp6B@REaO(+;BArZlI1 zrPZByq*>lUR8i}Il-x}U`(JEdQVLF=l&9lGbW*vi_|wB=~Vv>_M9cQJO{Yz8tMs;}#O?L%7U&+#58R d(HO*He*uPRWy$gS3CJJQ6#RwXMY7LgM2#AR&FgA$nm+jD7%=*l+uy1 zy~O?4UX&w~+1bwNiCeI>RvCe`0{C;P0K{WCO*draa|`AdeA2kbid6P}S0x@+K3j(S z3R1mnCOVX-IR|U;Tq--FnK{|k73GX((}|`yk3{L3X^F+bv1*(oF3+*ED(`$nzV8lp zCx1QO94IEwBHP4}a-SZ0jsza(LI1>sX^5&;48ets%sO0kSt_YwdO=^o@urPU$uc}w z!@*i*AepIY2I{pkqyIXLL|4H;@h^P!{Ws)KxCgKG1Nrwu00000NkvXXu0mjfcaaWK delta 1142 zcmV-+1d0332#X1jB!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000id z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF)~90YwQ331N%ut zK~z{r?U;RNPEj1kugzvAi(+1l{E_|~U$e!ufO=lq^?&pr3v$NR4kC<(ei z*Jjch0#O!JL2WaLKn4V&$?&b2JcU*eh_*mOlQxAD5Qy}vuYx<-VOY>ahC?7~3-7>9 zFtEw~M18?cu74U*AvBr|Zi2TURN4jg;3v2TLZxDGS1=DkqZIfIZh|_rL!)8fCie#P z*b9voft%n(2$ggoy9r*0b+8rmbXf(nU?8MHi>nme1QVglzZ-f%i>Nb1p`m0FQ33NI zaE%77$}_kRI-sw?ZP3crKtl-%{jhupRC-C!9jh|_HGfIAp3#%w47dlmj~(u0W>MD% zcTD)YLw`POg4v++P#?b8b)Gkqczq6-vy-+g$b)RfNVF$mPlXBA^`i(#=9sS`;DB`* zVYi1eI7y5KUr70lvX2c>j0UcPmv9H_;FN7!#<-RA>1cux^&@tS&DNzKG8j7w1=jVm zXnX=^t!ae40cv=D^|SV2c&}uwoekBXACM|P^?&^&RY5(O`T~eh?_}e((p9vVQ0gVZ zi26Zz4~_rJK;wA^x@%3@-9Rg2R#lTT@N>oaHuZDx3d|){30L8N4*lvJdKLYyp|wcnsn$-y%u8o1m76Y-Z2}Qa;&v=X?!S*58apaBsxoH3(}RX|;mrD`8vo44?$<8R(>pOrOkZhQEIE`*m(iVO-Dq+OR=>zzQ73UPAnxv0&nGX z_y{`vW5Uj&O#?2rE+gz5Cf`0Au;9+ygY8V%nKbh`J7H`3wEn-x3`%M0_V~ zooVvNR@E22RN8dD=|(X7)0f6kKZqqKX&m_}|H@b2zaY>14)6&)V@S&(#{d8T07*qo IM6N<$f}R`(lmGw# diff --git a/res/5sync-48.png b/res/5sync-48.png index ff8390c71506f60b2c6f741d56e8695f4f2cd47d..3f32f7e18460e15024b2298136771db6c44f2f42 100644 GIT binary patch delta 1213 zcmV;u1Va0+3egFWB!32COGiWi{{a60|De66lK=n&hDk(0RA}DqnQLfVMHI(>vm28( zwWdZ|)L@a;Xj_Z;YKkCLu^<+qQUs~gH){Q$D2NIzf+$A&$p@rj1mhR=i^fM$C@mH- z71PFou@S|Fs1dBKtxelJHr;dlFlS-Bxx3kGb~jnbfy?fkIe+)e{AbQ<=E5w^(v--R zLFZavWeN3-18sm-YEimuuu?sJg$7HNc=B_AYf7wheACwo5A}F_%YyjOD-J*>9%hQ6!!f)J{xYj_00cfzI4aPT@YQo-cmtLg zE0YHloWd=3oE%U1`clgoA?>YbB6FZ(r?HeT){;1J4->BrKS>&s%T5Yu=bbiczH?*5 zho^LoP=8n^a6sUdJof&)_1|jkC#=0DqGyi4R)Ky25g1bFP+xi=uukB6@kuSz-(vg& zF=M}FeX9#Oe-=zkAfxt$16wc52hr(Jj(?NkF>d)7c=K+P^Z0{E<3@W^2 zwfZxW7~GP*3X5d{1e~KkHvw+(iG%393 ze26WoGI7?DDy`${hkv31k$On4VR^_`3y$Lx(QL z2Y$ET^MEbt?e)2c%vH{p5Bq{0ISrfuE>Lf?g#cvLo7X7t2+-;LbqmgR!1-?rH-7-{ zq~J)B;%tSjz=vkTFUQC{X)>E5{O!4wwa}SXXb`wlV0{3fUSLF^S3H<2gTBS4yH8+D z;o_v#<$O~h0!I}V98pF8FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF)~90YwQ331fEGm zK~!i%?U`GMRaG3u$6MZ-G$9FxB)pC#7+on%G<`5lCPawD!hbADNyNm;2a_DFDIXNY zR2r)xD96AIUu>d_2!kM&kU1rlB-lfgTBCWHoUz}x_|E2>?U~LQXV}h$`QXQ1|8M=* z?aW$x?{lW4OI_-GnhHxhkQbmEB&K?}(t$KUV(J4IA>Tx-39q3(H<57LbpKnjSb<>lOZ(?m_3v`FX zwGirH7u3LJsDiby0X~F-a1QcKJe${{)2cVjg8h(h^5QZi`u=|{(!=c;Xzi=#CP;mIOmwWu5dEey2JRwTS()LnuG%75WgrTjJJD_o-kOu0YQ%U3^?tKgvX zwmPT6@ygK1BHj%eUu|!&Eq^3j294eNUx|d?&;-Y9MZ){Y9Y3yE1K>5n$&g?XS1XTe zRc0`*1MGd{oGFgiD3&N|lFhK&b^5LyM0umVr){+^l1{)G8btSF;=4gxL7!}x6y-7Q z^na6(geZ>%P2xZ%Pa=NMxt}_o=y+X7K$NTDH<;_XQSvDdq>IMLt^b-;BOXb->Xsz~@RI!E7$BN1=) z;NhVKJ#@u?0xF!QN%kYY07syiSbzUt3!*#})OQ1Di{9?4;zXlTcc6p&C*^^ziiBV5 zoSgklto{7G>vY#S4Vr}FMNZQs!!yMG=eC202ZI)+x*fLLCK@gVy(Ubtl_UJQ%3+YJ zz6apxHR3tYqyJra6;HR#=((UW{zA|gV{Hc!>tU)}uj+=|?oyXJUL_^}0Tc&e0Q-%C RMv4Fc002ovPDHLkV1gh0dX)eG diff --git a/res/5sync-64.png b/res/5sync-64.png index 123db7edbeb584f9e858e27dd7099ba39556554c..e48fb58d0a86efa56a875d13dd06940ac1297ba6 100644 GIT binary patch delta 1594 zcmV-A2F3a44a*FWB!32COGiWi{{a60|De66lK=n)07*naRCwC$nrmzoRS?I2XSwBR zp@4`45s(0}@qr*kj0EBElS zs2^yQG6@Z+128H^whCC(%>5lmoAE30j^8K;97bK z^aid2|fC}P^E}Po|0Hf3F0F$84W7hv)X&GQ9fh7<{yMUoUSG_uET3iDh*2}i` zuRoZk*Yi&49^oxuGEmkU0eFz+D{$5UD}n1<699{7{(nmEd7ug?Z4Cgdr{zlCyMRGy ze)$YgOUu^%_t6Yx_Le#s>IPJ5zF!-0KMi!$seG9_%)`rIDeBxekzp!2wWjhY5g5vp>#frtU7g{OrVdzF$-1-Km5ETivtu2_}fiO)&s6F z4cpkd0&SJ6GmN6&w2qK201RxjupBT378hu)Kd?4SI-I(_Ky%Y5{0egv?Ent7Y5=T1 zj*RikVo}r~%UJ7M%8AVuSSRp)BYKspw@&mB)PF)pfi=pT81vE@fhPnu3Dl{xtQM#e z=;PQQAn=V|6%lqi2z;vYwJ~EXcWg||6@d9Vs1sSfT#3N1s<+;0d!q%b*Mx|6my7Qs zY}6&N%lg}81o}Jt%7}436l(89=q%IrwF13z1>kX~jnpqGV91r|E??p0ge9p0n}Ft@7gsOt5I2*<$;dp(~eaF^5Zun2iKfrBdl zI3#;V`8y-pEmc`vcy?Im>hw7?nBop^O32o&%Kutmll~qUviXYg&q_Xf27&Ty(^%jo zHGEEBcu2NeWy?bR;W{gwB|!3lw526_VhLgE*J9u`g-m=^+|!Zd`e@cG{))%g(^YoW~gr^ge3+kXvY ztY0&n;`w#MfNHhQ=++8n>wT$#dT9uU-Gk6-VV3^>#Pci3d56Ls;auLrm5x(+HKNVj zz`guts&J>hm3r?VFpL3h&oyZ9fNq zc?LRJ_#0Rl(I$x1+suVY$}q>qc7Ncoff@_H{t$zw7G0F-EwG|j?U;0;G7 z7)wTA0C0~!FKBW-z`!3a0KgnYey{P5sKPOMkn!vMQS1M#^Sfi7tMQy;V}FM6D?smg zexc-l02r9A{^Td)AJI1r0NVgSPet_+eV%JBe4#*pj00X60Qc|f#%=$He zg`tlX08nCKTJZHvA;;_jChx7e7CiKBBU0vykAW(UFvi|ULJcsPRpp|<-> z?;l0<{j$ow)cbx5C57(N27jrsGvYfeD{xyDz%~Q}jgdd#c;*^`cLf#*yzNAss)%;W zRd!zQ6%jhmt1L*GW;Mq)wIt{?K(`Uyld3m23rN$0Bq|~l?hhwj+U8A1XH5=!m!siC ztI72M3%5AY;%5_6fE4ItV63*;?PV!aXaaO6Fx2>KwpzpHR^zYluruu;#`i&3*y}a; sCReAgfvZ*Li03C;?bJ@~)J|FHKk6WxT{hUU8UO$Q07*qoM6N<$f)4Qfvj6}9 delta 1752 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 delta 3008 zcmV;x3qSO+6~-5kB!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000id z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF)~90YwQ333pPna zK~#8N?VSnC9aR~ITWD!%%Tkddi!3cFYM}*#f?|q@7Llk(MSmrVRX`1kU_@~NO9O%% zOAr@8tb!mYixpx(F|?*J8rcG3Xfd=UrKMCVU|YK5^G?1q`DX5!dvE`Lrv1G=Z}Q~K zobNkl?wmVwwmEa}proXvq@<*zq@<*zm=1*%1DyFV40=*$!Yc!uzrbMVN!<#ulO9O? z5PDME!V-v`^nXC&Wavrl4Qn8F(gTS%LQm>Fun}S>Jy3W7wt=41*CBS&1Bv^fXLTpU zPI@3Q9eP&JK<2xm*Fvno%lr*`whrEs`Y^-_yv#L_)PSyp zSb>*01(Ir(s+5NyR^Vk0gru4^8kRw(`Y%VW`DgIx*34YhNK2G6=DTm<`PJ1 zK-WU7z{_Z=BB^F+UVR>@3Tjskss7&!l4{m&uo^mj0SjO#B-N~Uzy|2_1>6Nm4d^V0 z6?mC%KvDzxCBzE6%-bQU0nLS2fqPcMNJy$#8UeSf_XCeY8UZ(;_d=||%cz=4YCw9r z6f5vDXMaOd&C&o&b33sDFLO8~)vO(0F~kbovlfO!Qq39*>mgR?o(CbR0i6J`0xxql zBsHMRAXeaI9*0?=J3(Uxt(wGvFxL6H?XHMk>%)f!Bp5`1Iwd z3;TZ94w6he!77LqTvPl9u7dHv0BtVrg%Pk-NL@qK!?A+clH3ei#fDGx*1V-LY)Gws7~5M4S_x2TzCZ5 zL4T}(yFr6H<(1S&>C4cg%Q+A$;BL?&;iP^_b@}H(gRfX2w?i|uX$qqz>21cRAy&}s zm<&lZ=^)tDX%9_VB-JQYN3nvgLTyM=jnYW>Ul1$o7z-h-!l+pnK&-H1JPV^BsYV?F zvBHj_w{Zgs`##+)0uxI?qwl1erGJ;aV+CGj5%m5OG|qG|jE2qC;OQB1DCBnN zIdpG}x?mhU0x!eEob{{C)RgopY`617dcfb?qR{W-OkWAGuNlrJrAf9>z@4}hdRLs` z5DI(+q5lGoHFHx6zeUsyO@EdxFV6C>uJE6Lrh6S<0Zp`ZLcfUE`#m5E{xuZ(MSn02 z^rBvqQvLre&}xWI=wVU%HI|yCCu{mOmJ_=`Pvnwnmge{Mh_f5gtFYaODr_6*&6Nz) z$&+D*<8@~0D13K-Yh2nZD5(4ilM0TwYn{ETw_ixNExzv}{5j!Mu#Rmt;A`PwP~G`TUrbn8 zbz#@lzdrao^uRwV{P%?a24A+HA?$lwLI!Vw>=w5SwU)o5@Vhvqv2YSo&rymd``72GO>TXvn_?nem=IJINvpHdlz$Q5w`P#pZV%n z9s4da7z3+ahUy=;6@Gi;mwy))+Y6v@s}rvg@Dt8Q56q*&_A1B=mhJU$5!)^GH}QuC zKl9bv(_HLd?rgf7b~aN%*mi@L%};mlOqXt)xfMkGj_|zmTSVBuhdE@Rg7UZ2{bs5Z zK36;c4KT$_xroyj>%XKs%+w-mYP>T)^Hm{68&Bf5!@kk^YQb$T_J5~4+w%~;nu-6O z^ZPQ~5%xh#>RW`*r<{+{X~kauMMjUiOy?3-w&>X30BfE9-w9jh(}_PU_?X`p%v2EZ z`+&a#A0(`-gRxBvzUE(O_}QQ4>@Tpd{(eEk>FN(xa^?g63pmeJ^3O zs=(%ZBg>(sD!?|H_`KJ{_LGFs2R7JthkJsr`TvQqaJLe7rhl`qfWj|t5kHE!=gh9Q zMz1j`-K{R277^znPUDjMgWY`gF?0V#W_f>}?NzbNv8k=d=k?jvRsA+I7ld6Oc&YP! zl(3~*BmUUnV}6$s4gp>1d%y&?rxM-*tAd|ke<8#^=TzsT2S5cM_Vaq2?KyW-5sI{LVAK z)vywD5v+lhK00ywd~+cBn{vcYalXnU@6iyai|C)u{&6!YU0$`qg%+I&oA27{OYM5L zpevE#A@1NhNZ}y`ar)rC0eXpWUo*Ez>4UHNf5uD&5r3}+JooDa{*MuUh_G^Wi|rWa zzYbn+CfSa6Hg$XR0TlawOrUp=GqJ6KSAO@gt&wxR@0yY6Uf{1-z0j76{S&}<{o1al z#Gdy=EM3c6io^}YRv35*;xyl*#&Zd1-e)G952}tjo;W^7xV&_?WPd?II1C;N@r3&Q z(p<#(ZhvV$AH?<-UA(H@!^~8l$W#NNf4c+aT|4%5_3O$DHZ@>vyI=U^^DAs?Iw00f z-39XQCp-We@s5Du*oF~q@(K#l>5B?^>iF63PZO#N%`PIsg@lCx6mb{0G`~uk2mlXc%TQ&jk9vVY2dnX?sV=3K<o$>NR*aTeb);H*Vtu0qRhPdm^|#S?B1evqbWq3ttN?E43Q zOLMuI3L?Hd1yalZwUF1oE>BfKn(G=5VM@DY0#73D6qoK6LQSRL?c(MU)?4>`ae&{r zgMaDY;}rJ+7pIfy_@7$%d?KW=bRRWSLB#9J%~wmXU1${hD)P`gRn}W0%o<_%jyulx z&9xxnPjo)Ff$q?iwy$&ln7KA14)ksJ0scX#E5P@B9)phmsff>YA&pV_GXeOjdJ6fg z%cvJD`X%zv_#sTPWnD(drp*b}z*lu&-+$*m%bnoIM)L`qeImy}PIU*=AZHSUD@j+t zapqbneAQt4D(g8jMTPzJ;A`kXOxrivWe44vRU>9qZR#fL_!?838}euSI&*6g_9LC& zUEs$HT|Fb|mpD*9*TDfbkM1X@WNM{-F9eI$?)Rd1e!Bgc{gAZQB~$RsJgyHa!dqy(FD~xcIbPIX70DI9UGp zPzMhm!1gDZTU+7x){w^1ooA*>;d7i%W9c+UqsNI)!hBG}=|7KVY^%Ni&Dk#rzAnvg z2`d{>Y!mT`jl92WF3pMqjVvGBK7T;gBkD%@p5fA|+KSEYcxOKoiX+Dtt7}oBK#syZmdpointmaker-24.png pointmaker-32.png savegame.png - watermark.png - watermarkdark.png + watermark_1b.png + watermark_2b.png + watermark_2r.png global.rcc diff --git a/res/avatararea.png b/res/avatararea.png index 63056641c24f257cc7b9c64c378a7157f062ae2d..463d8469b51ae783901647f982585b395846c485 100644 GIT binary patch delta 10 RcmeAZ-zzr3bYmL_HvkpE1Bd_s delta 90 zcmdlh)+au})SrQ~z$3Dlfq`2Xgc%uT&5>YWU|=ut^mS!_$SBICt@YYG_A^jOHZvrm p#5q4VH#M&W$Yo$~E=o--Nlj5G&n(GMaQE~LNYP7W-)PLm4FKQN7aITo diff --git a/res/avatarareaimport.png b/res/avatarareaimport.png index 97c53cfa828232a241848e7adde7c63ab7da4961..cddc1d81025c45aa7c849d4c2129243e29ff5049 100644 GIT binary patch delta 33 ocmca9v{7h+CY!MEe<0Xs_=Aa!fnn=8CL03-!~g&PHyZw60y5Lf-Xu@fWtLH6;4JWnEM{Qf76M_$OLy!302Q*A Yc>21sKV)WPXD~SH7Ad{io%t0j06x1u;H0jb1iCP{6IhqoRi%mgDfz{N| z+~Ob&4hD)riHqojJN9`uS&)3{XoDT;uo8G)E>JX@8XBgw_FW+Z0;JyrN@` ze3Y06pxhz%W+B-I4mK%7N%#P6S`^!sD`G%T0W^D@KH0n4*(0w5PPUOW^?iIUOClvA z6H6Q0;3~}d4#0DtN*Ddxth7@_|M=ZxBV={~dPC|TRNog8jk(_AE)JkQ(EqV9Bc%?i p!R5=Mfi!Ucxg4Ak8z`sV(FpV;M(`<2r&a&}002ovPDHLkV1lmOff)b* delta 337 zcmV-X0j~bN0_y^hBYyw^b5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi z!vFvd!vV){sAK>D02y>eSaefwW^{L9a%BK;VQFr3E^cLXAT%y8E-^Ag1Z(U7007%b zL_t(IPh*yrVG5;a)F8rWfDCfq`2Ws_|C002#es-egMU0X{lEDhr26+?at-p{ z{Qu%>kUAh}KJ}jwLjeQ<0ZxN_Hvd2Q0;B>6+RvcNq9Gu_Vvx&*|A(G}J4|GRELSAdLw z0H;9^Bt8HCgh~q_bwF_U!~ep==n5bR2nZMiM^(o`s)0am0lE|r0RgcFK~U;GDj9?e jjT%H4K@Fk;`2QaODv>)VWNW4}00000NkvXXu0mjfG7E)o diff --git a/res/empty1x16.png b/res/empty1x16.png index 6ab4481f5b1e8f5e90688a296e75a1b7763b6cc9..b5abfe627ca4031776c4f0dfb19aecd4f6a95f24 100644 GIT binary patch delta 57 zcmbQs7(PM8m@UcM-G$*l2rk&Wd@=(A1COVRV+hCf*8o|0J>k`J4qFk;M!Qe1}1p@p%4< z6riAFiEBhjaDG}zd16s2LqTF@UWr~_YKel0o`IgBkuyv78=xXyPZ!4!iSXnFS_uh2 XZU6)0W%rI`AdA7%)z4*}Q$iB}4i_VO diff --git a/res/gta5sync.ts b/res/gta5sync.ts index 6efb796..768e44b 100644 --- a/res/gta5sync.ts +++ b/res/gta5sync.ts @@ -238,102 +238,107 @@ Pictures and Savegames - + Ignore Aspect Ratio - + + Watermark + + + + Background - - - + + + Background Colour: <span style="color: %1">%1</span> - - + + ... - - - + + + Background Image: - + X - + Force Colour in Avatar Zone - + Import picture - + &OK - + Discard picture - + &Cancel - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! - + 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 - + File Background Image: File @@ -1040,7 +1045,7 @@ Press 1 for Default View - + @@ -1051,9 +1056,9 @@ Press 1 for Default View - - - + + + @@ -1073,14 +1078,14 @@ Press 1 for Default View - + All image files (%1) - + All files (**) @@ -1088,14 +1093,14 @@ Press 1 for Default View - + Can't import %1 because file can't be open - + Can't import %1 because file can't be parsed properly diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index 796c47a599b68b028963bd0457884a00f164cb99..704e02b91af2c6806324db46fe7c260013c9ec7a 100644 GIT binary patch delta 3084 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 delta 3025 zcmXArc|c8h8^^!*+;i@|=bXEYL`bq^riGYMlC3N)mKvID*~&ITQ3x}*C`)NlnkGvW zvNswMVbrU{7(@1Xhhg3j8n3ZUGs76(Z}0i*Q|EVo=lMS0=lMOqv+=fY;b+0#yKG8} z@1N%7Txi$2B6{1&+x-FcF8~4LLvl3W^om>vDD@h>{{V#LfO986yau@a2uL3TOZeQ~ z7ihf(@ahG;SFX{;L*tijz=u{of27eR60lFK0#@#VaO^bDDhOiwHoo*BSq!)uA?{iP zd?7(RAp(n=L#!dUWJA2v5ok6C;tjr}LyE?kdm#0ufW_sILdo}MLaI4S?cZq34uxr3 z1b<%!_m5Tpp|4^8{~uqChi7A;*3aO1BnW6(4bR4axvB7M448Wco{a%FM8osHUCC^C zZKwuXjDy$7K|r4m;nf&ucCyBF9s2a(d&YYsXeu4r6poOUcJCO}Ub@vd4 zb*iU@+l6sw8(8Z;!t{t0Y>c0TxRsH>=AlC3*1f>TJB9QvTyJg{3Zg%xkl!`Nr3rf$ z__JgKG!C?AT(m0ty5MSe5%zV@;p$3_U7R%z?WS>-zs6h$MKN_iLTjP4)EAg{QaDoC z0hl{nC>K5G?>gbsxAZH|B%J%o2J{;s)FkkCTh0oXo~#F~Ny0DZhOl0_!rfht!1~{X z`bQ&}#mdVx-zM2zri0R3p{CH&pBDO=v4mv>zUveNX;zk3V#JLp@^<9cVS-gkZj zkiAqtqKN0H>m+?_Qac9H>1P$vUmrog@*V49xT{|`N@gQm*B|kvu)xLosugnd@uBN9;~~kSYFksjDKCY>R#i#cUPp4Uc}RuJ$M9?xN<~5%JG8S@zx zm<_~kFdW@O|2pn9oW4i8yBjV9yKySrGSuqmqkFO8^|#k4)X}Ik%;Us;rEzKxjq@{% zj^b`0UuSf_6V6u98QtGhaR&4;cK(_SD9L^zx!QXhXV!964bwO@(K!3ZyFmXr#w7=K z0P7AIGxO&&>PBPE#T;Pcd}HCMc=CPY!6Cl^T}By8_P+!&w;D^Y(4HxCjFpw_`1VJQ z{|Sp=gLxb4j@f}32aUh&?*?r1G`>B;MqA#@Bn4N~@Adg6muhcdguAKV>q0>O$JGA? zhxk_+rlEUkfb^cGxNQ^?eatlb)KnfV+4OlW{SOvQOXBH!Xr5_VyPtR>Mw@m|<@3q6 zO=VqDflp_c$}6w1ZaqwuWejA9GF6|R1bni~^z;N1aZNV8Y+DXH!Y`TLji0~;L3XM* z#STf6oo)y6Xx)?BB-Jr=L6Se}%7O>pk-Mh`QDCgx{n9aB zYmstDZU%?^896NL97otHdAzZNzL(0Aa_P{5newdA=S;9#o;B?`tr1tqiGO|s#NCru zS5R?_U*xplJ8b<-Io;crf!D}|r^11)rE*ahHbR7hd@hjt=ETV7@4o{+ljKX|2J`;x zCg1S(1GH(W>Xa;Q-Ly^qec?XBED#L`T=%W*3!K zyS_5JeA|jmw%+XJ{*n&4n@68L#o7j&qdQQbVV!yI5OQp~dGXN+oc^QCsRMFYnsMgb z&U`K}HRtI>ekk~BOgm)G3#LE^b+ft9MhB)(Hy?k>Qf!v8w6F;Q=8UV?8Vjudy(zd@Naen4W!Vxutj{E1i1La`faF zp!Zdc69X(&W14YVL|R3)8W<&8m78~XD~_`|e|MK3GE1yJHlFVO*Q~(->+GfU z*L#ljaC9s$*cBS*Sgj}Hxj(?u)@laRpYXue_XU0aJkS>99*^l5m|>fg(7=yWH(UIb zL%`CPwmBJ8ZhBzbaFz!9KeTOsHv&jZx9z_`Cp?X|qR;yB%c{^;RYqgS?XX?CSV{+H o*zUGJ$o+1%=WUpA=a;sI&2%vFSE||WQ_{-(k5kE5x4vor127tK3;+NC diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index 62c8814..a1ee2c3 100644 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -238,7 +238,7 @@ Snapmatic Bilder und Spielständen - + Ignore Aspect Ratio Seitenverhältnis ignorieren @@ -253,98 +253,103 @@ Snapmatic Bilder und Spielständen Bild - + + Watermark + Wasserzeichen + + + Background Hintergrund - - - + + + Background Colour: <span style="color: %1">%1</span> Hintergrundfarbe: <span style="color: %1">%1</span> - - + + ... ... - + Background Image: %1 Hintergrundbild: %1 - + X X - + Force Colour in Avatar Zone Erzwinge Farbe in Avatar Zone - + Import picture Bild importieren - + &OK &OK - + Discard picture Bild verwerfen - + &Cancel Abbre&chen - - - + + + Background Image: Hintergrundbild: - + 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 - + 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 @@ -1067,7 +1072,7 @@ Drücke 1 für Standardmodus - + @@ -1078,9 +1083,9 @@ Drücke 1 für Standardmodus - - - + + + @@ -1117,14 +1122,14 @@ Drücke 1 für Standardmodus - + All image files (%1) Alle Bilddateien (%1) - + All files (**) @@ -1159,14 +1164,14 @@ Drücke 1 für Standardmodus - + 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 diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index 44c126f..3e5d5a4 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -227,15 +227,15 @@ Pictures and Savegames - - - + + + Background Colour: <span style="color: %1">%1</span> Background Color: <span style="color: %1">%1</span> - - + + ... @@ -251,89 +251,94 @@ Pictures and Savegames - + Ignore Aspect Ratio - + + Watermark + + + + Background - + Background Image: %1 - + X - + Force Colour in Avatar Zone Force Color in Avatar Zone - + Import picture - + &OK - + Discard picture - + &Cancel - - - + + + Background Image: - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! - + 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 @@ -1060,7 +1065,7 @@ Press 1 for Default View - + @@ -1071,9 +1076,9 @@ Press 1 for Default View - - - + + + @@ -1116,14 +1121,14 @@ Press 1 for Default View - + All image files (%1) - + All files (**) @@ -1163,14 +1168,14 @@ Press 1 for Default View - + Can't import %1 because file can't be open - + Can't import %1 because file can't be parsed properly diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index 61db6be..03c8751 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -238,7 +238,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V - + Ignore Aspect Ratio Déverrouiller le ratio d'aspect @@ -253,98 +253,103 @@ et les fichiers de sauvegarde de Grand Theft Auto V Image - + + Watermark + + + + Background Fond - - - + + + Background Colour: <span style="color: %1">%1</span> Couleur de fond : <span style="color: %1">%1</span> - - + + ... ... - + Background Image: %1 Image de fond : %1 - + X X - + Force Colour in Avatar Zone Forcer la couleur dans la Zone d'Avatar - + Import picture Importer l'image - + &OK &OK - + Discard picture Supprimer l'image - + &Cancel A&nnuler - - - + + + Background Image: Image de fond : - + 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é - + 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 @@ -1078,7 +1083,7 @@ Appuyer sur 1 pour le mode par défaut - + @@ -1089,9 +1094,9 @@ Appuyer sur 1 pour le mode par défaut - - - + + + @@ -1123,14 +1128,14 @@ Appuyer sur 1 pour le mode par défaut - + All image files (%1) Toutes les images (%1) - + All files (**) @@ -1177,14 +1182,14 @@ Appuyer sur 1 pour le mode par défaut - + 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 diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index 0e4d386..f1b3b96 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -240,7 +240,7 @@ Pictures and Savegames - + Ignore Aspect Ratio Игнорировать Ñоотн. Ñторон @@ -255,99 +255,104 @@ Pictures and Savegames Картинка - + + Watermark + + + + Background Фон - - - + + + Background Colour: <span style="color: %1">%1</span> Цвет фона: <span style="color: %1">%1</span> - - + + ... ... - + Background Image: %1 Ð¤Ð¾Ð½Ð¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ°: %1 - + X latin X X - + Force Colour in Avatar Zone Задать цвет в зоне аватарки - + Import picture Импортировать картинку - + &OK &ОК - + Discard picture Отклонить картинку - + &Cancel Я не уверен наÑчет горÑчих клавиш... От&мена - - - + + + Background Image: Ð¤Ð¾Ð½Ð¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ°: - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! Свой Ðватар - + Custom Picture Custom Picture Description in SC, don't use Special Character! Ð¡Ð²Ð¾Ñ ÐšÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ° - + 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 Файл @@ -1072,7 +1077,7 @@ Press 1 for Default View - + @@ -1083,9 +1088,9 @@ Press 1 for Default View - - - + + + @@ -1117,7 +1122,7 @@ Press 1 for Default View - + All files (**) @@ -1169,21 +1174,21 @@ Press 1 for Default View - + 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, файл не может быть правильно обработан diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts index 706673b..8309401 100644 --- a/res/gta5sync_uk.ts +++ b/res/gta5sync_uk.ts @@ -248,103 +248,108 @@ Pictures and Savegames - + Ignore Aspect Ratio Ігнорувати ÑÐ¿Ñ–Ð²Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ Ñторін - + + Watermark + + + + Background Фон - - - + + + Background Colour: <span style="color: %1">%1</span> Фоновий колір: <span style="color: %1">%1</span> - - + + ... ... - - - + + + Background Image: Фонове зображеннÑ: - + X Ð¥ - + Force Colour in Avatar Zone ПримуÑовий колір в зоні Ðватару - + Import picture Імпортувати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ - + &OK &OK - + Discard picture Відхилити Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ - + &Cancel &СкаÑувати - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! КориÑтувацький Ðватар - + Custom Picture Custom Picture Description in SC, don't use Special Character! КориÑтувацьке Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ - + 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 - + File Background Image: File Файл @@ -1058,7 +1063,7 @@ Press 1 for Default View - + @@ -1069,9 +1074,9 @@ Press 1 for Default View - - - + + + @@ -1091,14 +1096,14 @@ Press 1 for Default View - + All image files (%1) Файли зображень (%1) - + All files (**) @@ -1106,14 +1111,14 @@ Press 1 for Default View - + Can't import %1 because file can't be open Ðеможливо імпортувати %1, оÑкільки файл не може бути відкритий - + Can't import %1 because file can't be parsed properly Ðеможливо імпортувати %1, оÑкільки файл неможливо розібрати правильно diff --git a/res/gta5sync_zh_TW.ts b/res/gta5sync_zh_TW.ts index bbd099c..e7af4e8 100644 --- a/res/gta5sync_zh_TW.ts +++ b/res/gta5sync_zh_TW.ts @@ -247,102 +247,107 @@ Pictures and Savegames - + Ignore Aspect Ratio 忽略長寬比 - + + Watermark + + + + Background 背景 - - - + + + Background Colour: <span style="color: %1">%1</span> 背景é¡è‰²: <span style="color: %1">%1</span> - - + + ... ... - - - + + + Background Image: 背景圖片: - + X X - + Force Colour in Avatar Zone 強制在大頭貼å€åŸŸä½¿ç”¨é¡è‰² - + Import picture 匯入圖片 - + &OK 確定(&O) - + Discard picture æ¨æ£„圖片 - + &Cancel å–æ¶ˆ(&C) - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! 自訂大頭貼 - + Custom Picture Custom Picture Description in SC, don't use Special Character! 自訂圖片 - + 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 - + File Background Image: File 文件 @@ -1056,7 +1061,7 @@ Press 1 for Default View - + @@ -1067,9 +1072,9 @@ Press 1 for Default View - - - + + + @@ -1089,14 +1094,14 @@ Press 1 for Default View - + All image files (%1) 所有圖片 (%1) - + All files (**) @@ -1104,14 +1109,14 @@ Press 1 for Default View - + Can't import %1 because file can't be open 無法匯入 %1,因為檔案無法開啟 - + Can't import %1 because file can't be parsed properly 無法匯入 %1ï¼Œå› ç‚ºæª”æ¡ˆç„¡æ³•æ­£ç¢ºè§£æž diff --git a/res/gta5view.png b/res/gta5view.png index bf41d479af7bb427e459e294b9b3f99f84de21a8..3e955a6af6337f1cc6e121f34518f90be1c60542 100644 GIT binary patch literal 13479 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 literal 7189 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 A?*IS* diff --git a/res/next.png b/res/next.png index 4a36bc2695b454d5050c6b0aa8aea02c52feeac7..d87fd54879af54dbdc30ec4082a5001c1fe9aca5 100644 GIT binary patch delta 290 zcmV+-0p0%U0=xo{BYyz{NklTkU=G97%MAJ=468jD zB)PEVHG+Vbm7&{;Azg=ofq~)H2Zru*49~xjXppN6Ly-Z4hdcuV1H*|I4Bh7$*4@LM z`>}##O@=~!25n&m1_p+04;boCF`Ri#s2ITt<~T7hFfh!y#!z{j;mr@?$|J0x<^)6Q oS!$$gl1v#bj~j>rjMS=*00+20!Za*Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi z!vFvd!vV){sAK>D02y>eSaefwW^{L9a%BK;VQFr3E^cLXAT%y8E-^Ag1Z(U7007!a zL_t(IPh*yrVG5;a)F8r$E(U%4`9FLIx*#ru&!87yL4VTEzx?;#iY|qT@EHU| zsr&vv`vOvQ@8kbKyv7kQ2!f(^{(t=qr1a|B|H0ePWg&@? zmIQ+!Xv(Gk|NeorNzOwNC)Oa|ng3^82B`*uoA3Xp>_t}q1OyCn-SB_=1CTl(IR5;9 z5E)^Vy!Zc=H%TBBK(O`xf0LEy3Xl;H;4}yVW?%g;G6!7>69EBEgQ}0Ci{L@{3?d1Q i8blaD4Wa`0{~rL{`8zq#-?mr)0000-d#KoG_8pN$F~ z!3R*0e~>mE%Sd8Fuw(*pRc({rOqFYguO3-GM*+hA{g zu(HCSR1dq!&23sSHo0#7ar_U1D}1his^04sNBCG_Q1u>RK)k*9l_h)g;|6Fk%_i@} zc>z3Ut%4`Cb(p3VVVdq?s^Z+{k$#KwfOh7-08UEiQ!{1?ZvX%Q07*qoM6N<$g5cYC AZvX%Q delta 325 zcmV-L0lNN{0^kCWB!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000id z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF*h@ApJM<30MJQ9 zK~y+T-IKcw!Y~v?U8L{`8GwTEDA#6>&>!xm;}c&2wQ!n3%FHn0WWIkNs|hj-#69zxOw%+T=QjSN{Y$--T31I}h5%wYa8qXn)fHw+!jYl5# zV&p3E;Ee*ZDL#uE0|eT8+hK;*gvn&7{PxS_l0op+mx-?^VI?eyefeO&V1|Y#*IY?2 XOiG2AVvnDA00000NkvXXu0mjf{49nl diff --git a/res/pointmaker-24.png b/res/pointmaker-24.png index d3373572cd99c4f7552b25915299ef3d427c0a12..87e96693463aa672131460b3073bc3907c38899c 100644 GIT binary patch delta 326 zcmV-M0lEIX1K|RYB!32COGiWi{{a60|De66lK=n#7D+@wR7l6|mNAaPFc3vwBIr0k z4v;cOprlN>5-mN)NV&)065EF^W#}m24&E+EL$Nd9L=GE)sdh*DiVOQa%d$K{L>LAr zfgNxJYL(Pm=qB+TikHJV~u=N;?)8LE!qwRi?liU<)jGy%x&ST4PtSjj(%5>s{eQ z2Xw%UICTN$I=%^nxRvNP<<0dk_#=Wdz#$^kW1UlA5AYRH;IZ~^f9&kJZUEUt5Nz)7 z#_tD30^cTiwm;z*Tv^4iWv)z;fqYJUVOyP>_2H|rreD}`J(pF8FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF*h@ApJM<30W3*G zK~zXf?Up-o0x=LomKu7fIhsrnXiN%n#sLTLoFWeWi!zz?XoNgtZM=xWbNLzp*F=aZ+;3MVY%?O z6JYBYg;T)G1Ap)?N0H5nqAB3z0eF|jt<&--cvasPz`!$k2MqEK7$gSld3ezm4exSQ z{P^HAz{>;ds(9^X=U3{6jxSM#W5L7CH}UtN`$*|nL&nU6nriM|T?_D#MGaw!tm8c! zj|OdB7WY^*-}>Moov`H^3AOg-%`-MyXW4j8fF0oh&>Nt=@V6zWfBt#w(%kZt%K!iX M07*qoM6N<$g8JsTwEzGB diff --git a/res/pointmaker-32.png b/res/pointmaker-32.png index 610efd47adb3d48e6bd0ce240fb6e8c377148a95..de591b16cb6ea7e143d2271f8ce8d891eaf51df3 100644 GIT binary patch delta 449 zcmV;y0Y3iY1lt3UB!32COGiWi{{a60|De66lK=n#kV!;AR9M69mpyL6KoCaXS}rJ3 zkUQiM9KfYJC@5TT018U(zyT;II6;btHc|?T(78xDxPv1(5_FS-bu?bv2qZ5w9%&@o z+THio?k3Z rYYNpESOH(a@dn`0_F366!Y0liiHpF8FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF*h@ApJM<30nJ?gNbbM^DiA#c2S6Z@6@N$$fj}Ua{|iap+wJa5 zJ0zhqU#9Q%<$Yn3-C4pg42$Tq5qohIUxMU0P|Fly_i ztOTp}lWRin)yO%KKZ`QqO5BMT@hM{Y8Bog{=F-FW6gbKv;*b_F`pd7yCDJA6K`-B1 z>_-dGhdnO^_kW}-Lr?Dz@l5DfzT1IgwK3g*$(1-Jcf8eNlKrZ2*_WXA{xnUj7V@>`QJ-Xy}4>3JWxJ!8?To8oJ<}!U7Fl@J?ZY zhAw!gus}l>yi-`9p$pzAEYQ#e?-Ukj=z@0&3p8}WJAXy^&VinbvlD89Bm0s&yywK5 zpr|D{vM;&AQ%*bxidupr`;yyU$Nu4k1b2KJ{z!@8Mo`=WdS_2^uJjAv!!9Kwk3wIn zLQn4yyYf<+7IAPt4!5GlcF==fzPC6OuUo)cyrzN(`^BN*QwO7izil!I9Tdc{3Iam^(`AMOrr6YfGZx^prw85kH?(j9#r85lP9bN@+X1@buyJR*x382Ao@Fyrz3 z6)8YL$r9IylHmNblJdl&REC1Y%)Ao4ywnl}6FmbxLv!Q2`N=>vj7%Wjh<-;lb#*6`rAL#BF}=XGSZ2Iz_Wsm$~jGM|^3FxPOY(@vm; N44$rjF6*2UngDHTN_qeQ diff --git a/res/savegame.png b/res/savegame.png index a2c61b0ff0c90b768c3100c43965857ee7b6a8b7..90988fae81550605cc4995c80bafe9f3c037ef72 100644 GIT binary patch delta 10 Rcmey(b(w2|>Bd+&Rsb251K9uo delta 49 zcmcc2^_y#gsTu=kfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=fLWT&lw*^>Zq!C&1y%qa C7z-5u diff --git a/res/watermark.png b/res/watermark.png deleted file mode 100644 index 82de99890a4de98e9b84bb0ac1a2882fc511ba39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13806 zcmeHt`B##8`#&w_WTj0F)#O$a<};#cSt>42IgOI*Ozs<*nI*ZB8;Z24HH}M{TP|d| zGvxuGUXh=3xBfZ_+Azu|k%_m}79a5(2a{BYmb`&wShb>Gw7X_wYP zEdT(p3-0{ep8&v?*8srg13zq2-+B5WBTD_V?UIYrZ-DiU&l5^*zWUDgSZ99}0C4Qc z#&=V4H7rqmQ}YJg?VRQ}4c+bAfB505lcoCB&o|Eb-EfSFiVBau0dR~D54{n7`B2ie z8&?lG!QDK4Z)xub01g4*zn$?)9u|(J7|x6fD=^!XXD=C@zJ2IS?08+qFXui# z`i-#9><^q#Rvg`jPPA#lc|q#V{~2eJ*#7OSQPK6@((8~{g}Ad1_ndq9lk;D{yuoNX zoBl(Mv3w0^PV~U9#&PLgN z|MPWTiGDiC8S5Dzo(14;|3SING{^aGmD^8*_&2)`CY25TPHF=tw-ftOA7%0AvXfob(CJC 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 diff --git a/res/watermark_1b.png b/res/watermark_1b.png new file mode 100644 index 0000000000000000000000000000000000000000..eddab1727cbf22d40f9dd0df0bcc3e603863f24d GIT binary patch literal 11496 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 literal 0 HcmV?d00001 diff --git a/res/watermark_2b.png b/res/watermark_2b.png new file mode 100644 index 0000000000000000000000000000000000000000..4a4cb5726442ee36af09cc1eedecd054541f13d8 GIT binary patch literal 5765 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 literal 0 HcmV?d00001 diff --git a/res/watermark_2r.png b/res/watermark_2r.png new file mode 100644 index 0000000000000000000000000000000000000000..2747605a7f08ae827404919738cd93e525a8bfb4 GIT binary patch literal 5713 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 diff --git a/res/watermarkdark.png b/res/watermarkdark.png deleted file mode 100644 index 07b3ef6049508293ccef8bc6588d3afcd8dd3e11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13323 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 From 08ecd5ca610e65a59c7e653e937e07bf29712c02 Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 10 Jul 2018 04:40:57 +0200 Subject: [PATCH 154/359] delete crowdin because i can't afford it --- crowdin.yml | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 crowdin.yml diff --git a/crowdin.yml b/crowdin.yml deleted file mode 100644 index 7872de1..0000000 --- a/crowdin.yml +++ /dev/null @@ -1,3 +0,0 @@ -files: - - source: /res/gta5sync.ts - translation: /res/gta5sync_%locale_with_underscore%.ts From 4c6962ab23c99697cb666fd49d251bd356755764 Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 12 Jul 2018 10:52:33 +0200 Subject: [PATCH 155/359] increase Snapmatic Max Capacity to 512 KB, support for pre May 2015 Snapmatic added --- .gitignore | 4 ++++ SnapmaticPicture.cpp | 49 +++++++++++++++++++++++--------------------- main.cpp | 4 ++-- 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/.gitignore b/.gitignore index 023ea2a..fcd678b 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,7 @@ # Qt project user file *.pro.user + +# Gettext translation files +*.po +*.pot diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp index cda5287..75655a6 100644 --- a/SnapmaticPicture.cpp +++ b/SnapmaticPicture.cpp @@ -44,6 +44,7 @@ #define snapmaticUsefulLength 260 #define snapmaticFileMaxSize 528192 #define jpegHeaderLineDifStr 2 +#define jpegHeaderLineDifLim 8 #define jpegPreHeaderLength 14 #define jpegPicStreamLength 524288 #define jsonStreamLength 3076 @@ -57,6 +58,9 @@ #define titlStreamEditorLength 256 #define titlStreamCharacterMax 39 +// LIMIT ALLOCATIONS +#define jpegStreamLimitBegin 288 + // IMAGES VALUES #define snapmaticResolutionW 960 #define snapmaticResolutionH 536 @@ -305,6 +309,12 @@ bool SnapmaticPicture::readingPicture(bool writeEnabled_, bool cacheEnabled_, bo return false; } + // Get JPEG Size Limit + jpegHeaderLine.remove(0, jpegHeaderLineDifLim); + QString jpegHeaderLineStr = QString::fromUtf8(jpegHeaderLine.toHex().remove(8 - 2, 2)); + QString hexadecimalStr = jpegHeaderLineStr.mid(4, 2) % jpegHeaderLineStr.mid(2, 2) % jpegHeaderLineStr.mid(0, 2); + jpegRawContentSize = hexadecimalStr.toInt(0, 16); + // Read JPEG Stream if (!picStream->isReadable()) { @@ -314,18 +324,6 @@ bool SnapmaticPicture::readingPicture(bool writeEnabled_, bool cacheEnabled_, bo return false; } QByteArray jpegRawContent = picStream->read(jpegPicStreamLength); - if (jpegRawContent.contains("\xFF\xD9")) - { - int jpegRawContentSizeT = jpegRawContent.indexOf("\xFF\xD9") + 2; - jpegRawContentSizeE = jpegRawContentSizeT; - jpegRawContentSize = jpegRawContentSizeT; - if (jpegRawContent.contains("\xFF\x45\x4F\x49")) - { - jpegRawContentSizeT = jpegRawContent.indexOf("\xFF\x45\x4F\x49"); - } - jpegRawContent = jpegRawContent.left(jpegRawContentSize); - jpegRawContentSize = jpegRawContentSizeT; - } if (cacheEnabled) picOk = cachePicture.loadFromData(jpegRawContent, "JPEG"); if (!cacheEnabled) { @@ -507,7 +505,7 @@ bool SnapmaticPicture::setImage(const QImage &picture) picStreamT.close(); if (saveSuccess) { - if (picByteArrayT.length() > jpegRawContentSize) + if (picByteArrayT.length() > jpegPicStreamLength) { comLvl--; saveSuccess = false; @@ -527,29 +525,34 @@ bool SnapmaticPicture::setPictureStream(const QByteArray &streamArray) // clean { if (writeEnabled) { - bool customEOI = false; QByteArray picByteArray = streamArray; if (lowRamMode) { rawPicContent = qUncompress(rawPicContent); } QBuffer snapmaticStream(&rawPicContent); snapmaticStream.open(QIODevice::ReadWrite); if (!snapmaticStream.seek(jpegStreamEditorBegin)) return false; if (picByteArray.length() > jpegPicStreamLength) return false; - if (picByteArray.length() < jpegRawContentSize && jpegRawContentSize + 4 < jpegPicStreamLength) - { - customEOI = true; - } while (picByteArray.length() != jpegPicStreamLength) { picByteArray += '\x00'; } - if (customEOI) - { - picByteArray.replace(jpegRawContentSize, 4, "\xFF\x45\x4F\x49"); - } int result = snapmaticStream.write(picByteArray); + QString hexadecimalStr; + hexadecimalStr.setNum(streamArray.length(), 16); + while (hexadecimalStr.length() != 6) + { + hexadecimalStr.prepend('0'); + } + hexadecimalStr = hexadecimalStr.mid(4, 2) % hexadecimalStr.mid(2, 2) % hexadecimalStr.mid(0, 2); + bool updatedRawContentSize = false; + if (snapmaticStream.seek(jpegStreamLimitBegin)) + { + snapmaticStream.write(QByteArray::fromHex(hexadecimalStr.toUtf8())); + updatedRawContentSize = true; + } snapmaticStream.close(); if (result != 0) { + if (updatedRawContentSize) { jpegRawContentSize = streamArray.length(); } if (cacheEnabled) { QImage replacedPicture; @@ -1031,7 +1034,7 @@ void SnapmaticPicture::parseJsonContent() if (jsonObject["rsedtr"].isBool()) { localProperties.isFromRSEditor = jsonObject["rsedtr"].toBool(); } else { jsonError = true; } } - else { jsonIncomplete = true; } + // else { jsonIncomplete = true; } // Game release Snapmatic pictures prior May 2015 left out rsedtr, so don't force exists on that one if (!jsonIncomplete && !jsonError) { diff --git a/main.cpp b/main.cpp index 5b58da3..b9c67b7 100644 --- a/main.cpp +++ b/main.cpp @@ -70,6 +70,8 @@ int main(int argc, char *argv[]) a.setApplicationVersion(GTA5SYNC_APPVER); a.setQuitOnLastWindowClosed(false); + QResource::registerResource(":/global/global.rcc"); + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); settings.beginGroup("Startup"); @@ -292,8 +294,6 @@ int main(int argc, char *argv[]) QObject::connect(&threadDB, SIGNAL(finished()), &a, SLOT(quit())); threadDB.start(); - QResource::registerResource(":/global/global.rcc"); - UserInterface uiWindow(&profileDB, &crewDB, &threadDB); uiWindow.setWindowIcon(IconLoader::loadingAppIcon()); uiWindow.setupDirEnv(); From afeab6120d233eb80d9594bb21a06f9e0d0c75fa Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 13 Jul 2018 09:06:53 +0200 Subject: [PATCH 156/359] added GPUs to telemetry data --- TelemetryClass.cpp | 28 ++++++++++++++++++++++------ gta5view.pro | 2 +- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/TelemetryClass.cpp b/TelemetryClass.cpp index 56f827c..6bf2448 100644 --- a/TelemetryClass.cpp +++ b/TelemetryClass.cpp @@ -44,6 +44,7 @@ #ifdef GTA5SYNC_WIN #include "windows.h" #include "intrin.h" +#include "d3d9.h" #endif TelemetryClass TelemetryClass::telemetryClassInstance; @@ -228,16 +229,16 @@ QJsonDocument TelemetryClass::getSystemHardware() #ifdef GTA5SYNC_WIN { int CPUInfo[4] = {-1}; - unsigned nExIds, i = 0; + unsigned nExIds, ic = 0; char CPUBrandString[0x40]; __cpuid(CPUInfo, 0x80000000); nExIds = CPUInfo[0]; - for (i = 0x80000000; i <= nExIds; ++i) + for (ic = 0x80000000; ic <= nExIds; ic++) { - __cpuid(CPUInfo, i); - if (i == 0x80000002) { memcpy(CPUBrandString, CPUInfo, sizeof(CPUInfo)); } - else if (i == 0x80000003) { memcpy(CPUBrandString + 16, CPUInfo, sizeof(CPUInfo)); } - else if (i == 0x80000004) { memcpy(CPUBrandString + 32, CPUInfo, sizeof(CPUInfo)); } + __cpuid(CPUInfo, ic); + if (ic == 0x80000002) { memcpy(CPUBrandString, CPUInfo, sizeof(CPUInfo)); } + else if (ic == 0x80000003) { memcpy(CPUBrandString + 16, CPUInfo, sizeof(CPUInfo)); } + else if (ic == 0x80000004) { memcpy(CPUBrandString + 32, CPUInfo, sizeof(CPUInfo)); } } jsonObject["CPUName"] = QString::fromLatin1(CPUBrandString).simplified(); SYSTEM_INFO sysInfo; @@ -247,6 +248,21 @@ QJsonDocument TelemetryClass::getSystemHardware() statex.dwLength = sizeof(statex); GlobalMemoryStatusEx(&statex); jsonObject["SystemRAM"] = QString(QString::number((statex.ullTotalPhys / 1024) / 1024) % "MB"); + QStringList gpusList; + IDirect3D9 *pD3D = Direct3DCreate9(D3D_SDK_VERSION); + int adapters = pD3D->GetAdapterCount(); + for (int ia = 0; ia < adapters; ia++) + { + D3DADAPTER_IDENTIFIER9 d3dIdent; + HRESULT result = pD3D->GetAdapterIdentifier(ia, 0, &d3dIdent); + if (result == D3D_OK) + { + QString gpuAdapter = QString::fromLatin1(d3dIdent.Description); + if (!gpusList.contains(gpuAdapter)) { gpusList << gpuAdapter; } + } + } + pD3D->Release(); + jsonObject["GPUs"] = QJsonValue::fromVariant(gpusList); } #else QDir procDir("/proc"); diff --git a/gta5view.pro b/gta5view.pro index e448ac0..6412937 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -163,7 +163,7 @@ DEFINES += GTA5SYNC_NOASSIST # Not assisting at proper usage of SnapmaticPicture win32: DEFINES += GTA5SYNC_WIN win32: RC_FILE += res/app.rc -win32: LIBS += -luser32 +win32: LIBS += -luser32 -ld3d9 win32: CONFIG -= embed_manifest_exe contains(DEFINES, GTA5SYNC_APV): greaterThan(QT_MAJOR_VERSION, 4): greaterThan(QT_MINOR_VERSION, 1): win32: LIBS += -ldwmapi From c34d3331fb55c450ab87cbe37b76679d00c1fa7e Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 13 Jul 2018 12:07:13 +0200 Subject: [PATCH 157/359] remove unneccessary Capacity view, add Commit tag on version --- .ci/debian_build.sh | 2 +- .ci/debian_docker.sh | 2 +- .ci/osx_build.sh | 2 +- .ci/windows_build.sh | 2 +- .ci/windows_docker.sh | 2 +- .ci/wininstall_build.sh | 2 +- .ci/wininstall_docker.sh | 2 +- .gitlab/gitlab.sh | 5 ++++- .travis.yml | 4 ++++ .travis/travis.sh | 4 ++++ AboutDialog.cpp | 5 +++++ ImageEditorDialog.cpp | 7 ------- ImageEditorDialog.h | 1 - ImageEditorDialog.ui | 33 +-------------------------------- ProfileInterface.cpp | 16 ++++++++++++++-- TelemetryClass.cpp | 3 +++ UserInterface.cpp | 16 ++++++++++++++-- 17 files changed, 56 insertions(+), 52 deletions(-) diff --git a/.ci/debian_build.sh b/.ci/debian_build.sh index d9d88b2..86b2555 100755 --- a/.ci/debian_build.sh +++ b/.ci/debian_build.sh @@ -21,7 +21,7 @@ mkdir -p /usr/share/gta5view && \ # Starting build cd qt5 && \ -qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \ +qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" "DEFINES+=GTA5SYNC_COMMIT=\\\\\\\"${APPLICATION_COMMIT}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \ make depend && \ make -j 4 && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=${PROJECT_DIR}/assets && \ diff --git a/.ci/debian_docker.sh b/.ci/debian_docker.sh index 4bdf15b..f891944 100755 --- a/.ci/debian_docker.sh +++ b/.ci/debian_docker.sh @@ -12,4 +12,4 @@ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/debian_install.sh && .ci/debian_build.sh" + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/debian_install.sh && .ci/debian_build.sh" diff --git a/.ci/osx_build.sh b/.ci/osx_build.sh index 1fae647..cb968f7 100755 --- a/.ci/osx_build.sh +++ b/.ci/osx_build.sh @@ -8,7 +8,7 @@ mkdir -p build && \ mkdir -p assets && \ cd build && \ -/usr/local/opt/qt/bin/qmake ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ +/usr/local/opt/qt/bin/qmake ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" "DEFINES+=GTA5SYNC_COMMIT=\\\\\\\"${APPLICATION_COMMIT}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ make depend && \ make -j 4 && \ /usr/local/opt/qt/bin/macdeployqt gta5view.app -dmg && \ diff --git a/.ci/windows_build.sh b/.ci/windows_build.sh index 8b03d2d..91f369a 100755 --- a/.ci/windows_build.sh +++ b/.ci/windows_build.sh @@ -12,7 +12,7 @@ mkdir -p assets && \ # Starting build cd build && \ -qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ +qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" "DEFINES+=GTA5SYNC_COMMIT=\\\\\\\"${APPLICATION_COMMIT}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ make depend && \ make -j 4 && \ cp -Rf release/*.exe ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} && \ diff --git a/.ci/windows_docker.sh b/.ci/windows_docker.sh index dd2a293..ced9e51 100755 --- a/.ci/windows_docker.sh +++ b/.ci/windows_docker.sh @@ -9,7 +9,7 @@ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/windows_build.sh" && \ + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/windows_build.sh" && \ # Prepare environment variable export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe && \ diff --git a/.ci/wininstall_build.sh b/.ci/wininstall_build.sh index 906145d..17836af 100755 --- a/.ci/wininstall_build.sh +++ b/.ci/wininstall_build.sh @@ -11,7 +11,7 @@ mkdir -p assets && \ # Starting build cd build && \ -qmake ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_INLANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_LANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_PLUG='\\\"RUNDIR:SEPARATOR:plugins\\\"' ../gta5view.pro && \ +qmake ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" "DEFINES+=GTA5SYNC_COMMIT=\\\\\\\"${APPLICATION_COMMIT}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_INLANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_LANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_PLUG='\\\"RUNDIR:SEPARATOR:plugins\\\"' ../gta5view.pro && \ make depend && \ make -j 4 && \ cd ${PROJECT_DIR}/assets && \ diff --git a/.ci/wininstall_docker.sh b/.ci/wininstall_docker.sh index 34b5ffc..c5ff9ca 100755 --- a/.ci/wininstall_docker.sh +++ b/.ci/wininstall_docker.sh @@ -9,4 +9,4 @@ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/wininstall_build.sh" + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/wininstall_build.sh" diff --git a/.gitlab/gitlab.sh b/.gitlab/gitlab.sh index c7436a2..76a070f 100755 --- a/.gitlab/gitlab.sh +++ b/.gitlab/gitlab.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Install curl and lua +# Install curl, git, lua, nsis and openssl apt-get update -qq && \ apt-get install -qq curl git lua5.2 nsis openssl @@ -20,6 +20,9 @@ if [ "${PACKAGE_CODE}" == "" ]; then export PACKAGE_CODE=GitLab fi +# Init Application Commit Hash +export APPLICATION_COMMIT=$(git rev-parse --short HEAD) + # Start CI script and copying assets into base directory .ci/ci.sh && \ cp -Rf assets/* ./ diff --git a/.travis.yml b/.travis.yml index 997ce78..55de114 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,6 +33,10 @@ matrix: - BUILD_SCRIPT=windows_docker.sh - QT_SELECT=qt5-x86_64-w64-mingw32 - PACKAGE_CODE=Dropbox + - env: + - BUILD_SCRIPT=windows_docker.sh + - QT_SELECT=qt5-x86_64-w64-mingw32 + - PACKAGE_CODE=gta5-mods - env: - BUILD_SCRIPT=wininstall_docker.sh - QT_SELECT=qt5-x86_64-w64-mingw32 diff --git a/.travis/travis.sh b/.travis/travis.sh index 9fd2a91..3938c0a 100755 --- a/.travis/travis.sh +++ b/.travis/travis.sh @@ -20,4 +20,8 @@ if [ "${PACKAGE_CODE}" == "" ]; then export PACKAGE_CODE=GitHub fi +# Init Application Commit Hash +export APPLICATION_COMMIT=$(git rev-parse --short HEAD) + +# Start CI script .ci/ci.sh diff --git a/AboutDialog.cpp b/AboutDialog.cpp index 31ef78d..326b20d 100644 --- a/AboutDialog.cpp +++ b/AboutDialog.cpp @@ -37,6 +37,11 @@ AboutDialog::AboutDialog(QWidget *parent) : buildType.replace("_", " "); QString projectBuild = AppEnv::getBuildDateTime(); QString buildStr = GTA5SYNC_BUILDSTRING; +#ifndef GTA5SYNC_BUILDTYPE_REL +#ifdef GTA5SYNC_COMMIT + appVersion = appVersion % "-" % GTA5SYNC_COMMIT; +#endif +#endif // Translator Comments //: Translated by translator, example Translated by Syping diff --git a/ImageEditorDialog.cpp b/ImageEditorDialog.cpp index 6ce6d84..fa86959 100644 --- a/ImageEditorDialog.cpp +++ b/ImageEditorDialog.cpp @@ -72,7 +72,6 @@ ImageEditorDialog::ImageEditorDialog(SnapmaticPicture *picture, QString profileN snapmaticResolutionLW = 516 * screenRatio; // 430 snapmaticResolutionLH = 288 * screenRatio; // 240 ui->labPicture->setMinimumSize(snapmaticResolutionLW, snapmaticResolutionLH); - ui->labCapacity->setText(tr("Capacity: %1").arg(QString::number(qRound((double)picture->getContentMaxLength() / 1024)) % " KB")); imageIsChanged = false; pictureCache = picture->getImage(); @@ -204,9 +203,3 @@ void ImageEditorDialog::on_cmdSave_clicked() } close(); } - -void ImageEditorDialog::on_cmdQuestion_clicked() -{ - QMessageBox::information(this, tr("Snapmatic Image Editor"), tr("Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality.")); - -} diff --git a/ImageEditorDialog.h b/ImageEditorDialog.h index 06a3c02..856af3e 100644 --- a/ImageEditorDialog.h +++ b/ImageEditorDialog.h @@ -38,7 +38,6 @@ private slots: void on_cmdClose_clicked(); void on_cmdReplace_clicked(); void on_cmdSave_clicked(); - void on_cmdQuestion_clicked(); private: SnapmaticPicture *smpic; diff --git a/ImageEditorDialog.ui b/ImageEditorDialog.ui index 090941c..13dd575 100644 --- a/ImageEditorDialog.ui +++ b/ImageEditorDialog.ui @@ -7,7 +7,7 @@ 0 0 516 - 335 + 337 @@ -51,37 +51,6 @@ 0 - - - - - - Capacity: %1 - - - - - - - ? - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - - diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 746b2c9..2dda46e 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -87,7 +87,13 @@ ProfileInterface::ProfileInterface(ProfileDatabase *profileDB, CrewDatabase *cre saSpacerItem = nullptr; updatePalette(); - ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER)); + QString appVersion = GTA5SYNC_APPVER; +#ifndef GTA5SYNC_BUILDTYPE_REL +#ifdef GTA5SYNC_COMMIT + appVersion = appVersion % "-" % GTA5SYNC_COMMIT; +#endif +#endif + ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, appVersion)); ui->saProfileContent->setFilesDropEnabled(true); ui->saProfileContent->setImageDropEnabled(true); @@ -1498,7 +1504,13 @@ void ProfileInterface::on_saProfileContent_dropped(const QMimeData *mimeData) void ProfileInterface::retranslateUi() { ui->retranslateUi(this); - ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER)); + QString appVersion = GTA5SYNC_APPVER; +#ifndef GTA5SYNC_BUILDTYPE_REL +#ifdef GTA5SYNC_COMMIT + appVersion = appVersion % "-" % GTA5SYNC_COMMIT; +#endif +#endif + ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, appVersion)); } bool ProfileInterface::eventFilter(QObject *watched, QEvent *event) diff --git a/TelemetryClass.cpp b/TelemetryClass.cpp index 6bf2448..0d9bd5a 100644 --- a/TelemetryClass.cpp +++ b/TelemetryClass.cpp @@ -336,6 +336,9 @@ QJsonDocument TelemetryClass::getApplicationSpec() jsonObject["Arch"] = QSysInfo::buildCpuArchitecture(); #endif jsonObject["Name"] = GTA5SYNC_APPSTR; +#ifdef GTA5SYNC_COMMIT + jsonObject["Commit"] = GTA5SYNC_COMMIT; +#endif jsonObject["Version"] = GTA5SYNC_APPVER; jsonObject["BuildDateTime"] = AppEnv::getBuildDateTime(); jsonObject["BuildType"] = GTA5SYNC_BUILDTYPE; diff --git a/UserInterface.cpp b/UserInterface.cpp index 03b5a7c..b45b213 100644 --- a/UserInterface.cpp +++ b/UserInterface.cpp @@ -61,7 +61,13 @@ UserInterface::UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, D defaultWindowTitle = tr("%2 - %1").arg("%1", GTA5SYNC_APPSTR); this->setWindowTitle(defaultWindowTitle.arg(tr("Select Profile"))); - ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER)); + QString appVersion = GTA5SYNC_APPVER; +#ifndef GTA5SYNC_BUILDTYPE_REL +#ifdef GTA5SYNC_COMMIT + appVersion = appVersion % "-" % GTA5SYNC_COMMIT; +#endif +#endif + ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, appVersion)); // Set Icon for Close Button if (QIcon::hasThemeIcon("dialog-close")) @@ -633,7 +639,13 @@ void UserInterface::retranslateUi() { ui->retranslateUi(this); ui->actionAbout_gta5sync->setText(tr("&About %1").arg(GTA5SYNC_APPSTR)); - ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER)); + QString appVersion = GTA5SYNC_APPVER; +#ifndef GTA5SYNC_BUILDTYPE_REL +#ifdef GTA5SYNC_COMMIT + appVersion = appVersion % "-" % GTA5SYNC_COMMIT; +#endif +#endif + ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, appVersion)); if (profileOpen) { this->setWindowTitle(defaultWindowTitle.arg(profileName)); From 2487a188d5cfef0ab142572a8669fe54694a9a7a Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 13 Jul 2018 12:08:57 +0200 Subject: [PATCH 158/359] [ci skip] translation updated --- res/gta5sync.ts | 401 ++++++++++++++++++++---------------------- res/gta5sync_de.qm | Bin 44697 -> 44116 bytes res/gta5sync_de.ts | 401 ++++++++++++++++++++---------------------- res/gta5sync_en_US.qm | Bin 24869 -> 24596 bytes res/gta5sync_en_US.ts | 401 ++++++++++++++++++++---------------------- res/gta5sync_fr.qm | Bin 42446 -> 41887 bytes res/gta5sync_fr.ts | 401 ++++++++++++++++++++---------------------- res/gta5sync_ru.qm | Bin 42861 -> 42300 bytes res/gta5sync_ru.ts | 401 ++++++++++++++++++++---------------------- res/gta5sync_uk.qm | Bin 43763 -> 43238 bytes res/gta5sync_uk.ts | 401 ++++++++++++++++++++---------------------- res/gta5sync_zh_TW.qm | Bin 32837 -> 32466 bytes res/gta5sync_zh_TW.ts | 401 ++++++++++++++++++++---------------------- 13 files changed, 1344 insertions(+), 1463 deletions(-) diff --git a/res/gta5sync.ts b/res/gta5sync.ts index 768e44b..284f821 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> @@ -172,52 +172,35 @@ Pictures and Savegames - - Capacity: %1 - - - - - ? - - - - &Import... - + &Overwrite - + &Close - - - + + Snapmatic Image Editor - + Patching of Snapmatic Image failed because of I/O Error - + Patching of Snapmatic Image failed because of Image Error - - - Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. - - ImportDialog @@ -304,14 +287,14 @@ Pictures and Savegames - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! @@ -764,37 +747,37 @@ Y: %2 - + Export as &Picture... - + Export as &Snapmatic... - + &Edit Properties... - + &Overwrite Image... - + Open &Map Viewer... - + Open &JSON Editor... @@ -1044,64 +1027,64 @@ Press 1 for Default View - + - - - + + + Import... - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + + + 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 @@ -1111,194 +1094,194 @@ Press 1 for Default View - + Loading... - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - + Importable files (%1) - - + + GTA V Export (*.g5e) - - + + Savegames files (SGTA*) - - + + Snapmatic pictures (PGTA*) - - - + + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - - + + Failed to read Snapmatic picture - - + + Failed to read Savegame file - + Can't import %1 because file format can't be detected - + Prepare Content for Import... - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - - - - + + + + + Export selected... - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - + Initialising export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - + Failed to remove all selected Snapmatic pictures and/or Savegame files - - - - - - + + + + + + No Snapmatic pictures are selected - - - - - - + + + + + + %1 failed with... %2 @@ -1306,87 +1289,87 @@ Press 1 for Default View - - + + Qualify as Avatar - - - - + + + + Patch selected... - - - - - - - - + + + + + + + + Patch file %1 of %2 files - + Qualify %1 failed with... - - + + Change Players... - + Change Players %1 failed with... - - - + + + Change Crew... - + Failed to enter a valid Snapmatic Crew ID - + Change Crew %1 failed with... - - - + + + Change Title... - + Failed to enter a valid Snapmatic title - + Change Title %1 failed with... - + All profile files (*.g5e SGTA* PGTA*) @@ -1394,17 +1377,17 @@ Press 1 for Default View QApplication - + Font - + Selected Font: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? @@ -1482,37 +1465,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1705,25 +1688,25 @@ Press 1 for Default View - + Snapmatic Crew - + New Snapmatic crew: - + Snapmatic Title - + New Snapmatic title: @@ -1780,64 +1763,64 @@ 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 @@ -1898,52 +1881,52 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1971,22 +1954,22 @@ Press 1 for Default View TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? - + %1 User Statistics - + Yes, I want include personal usage data. - + &OK @@ -2063,7 +2046,7 @@ Press 1 for Default View - + &About %1 @@ -2119,15 +2102,15 @@ Press 1 for Default View - + Select &GTA V Folder... - - + + Select GTA V Folder... @@ -2162,41 +2145,41 @@ 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 diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index 704e02b91af2c6806324db46fe7c260013c9ec7a..2019e56886f740b789c26ef1b3d8a0058f8086d5 100644 GIT binary patch delta 3115 zcmX9=XFwF^7Ck#VTV`gLwSY7smS||AQHn+pP_cjo5iCSh6s(lkuq3*G`VhrJlwd&- z8;U$Tq9Pg#!GfYhd5P^kNr?K08cc}B7|kK`>+F6r-*@jl=iKkk<_E&-9Qy;}ZJ@(*KsN&Tg6nR+fKxu; z*&DFQR?#^~#V@(`u?^SDRCJyNOuPszD~Dh`bqR174>7BNhdw4A0$f}n?p*||ZVRzY z1QvIJSWVno1o37kpml$UwUI#ktt!qq2VEZ~u=oyigNYxeLswl1q*SVyJrTx&2)16YbqL(h6BM@HS&EgAi=s; z{gG)@F=v#(y02w}&hj{!eL#aRWyz6HG~S+t7% zK2&kRHlfHb2haqmXt=AQVpg$@kBatr|DY9Jx~mJJp(@S{S24$4D2}ZMl6wdxCBDF% z+ro(p9f8@?g|nhNsoyJ{KSL_Fd>~x;$^ryN3)Qpv-qwf0&1YW%rXj+AuY>{a2Zg%5 zwm`NbJbe;H*FO=O?%e>w7Ycv$PqLDlcfz0DTJwR6R@!?9SXZEJbNLOSFS$o2liS^x}y%9}4jTeoP4}lSPMYq|l=+)hQcU$qW@gi&HUcqF8-$8DGp7 zpTzL;=u{}auDM1WAih2AO9sa3#O8f5r8?VvxvXrviUDhMK07x9E9!L7H!d*o^SZTb(^l&8mNT*CcXb7CB7xCC zy4`8x*w1CUVqq0sJwR9NPl@_#bcc(|`9DQhHSQQCdZ7DOU^@=T)$9EEUprH8_lq~X zWxU>T@E^d+PxUSpHoQk{^${_YU~IfqKSf9erXA9k?jxlgzt&&+f!H}ve|_MGyvbhb zA8AN!=Wq0H&fH-aJT}Np^QdhL6{n0)aqb?2tylDT=<;u3 zz*WPhN&2uX-NK09T1dZSaNU|u%^PW zK7T$FI&8?fkptvr8FrsfA_f?aggpnkBpHq!_!U@NVkoI0bCWX+7cQ_%+TAexZ&(CP z8DgkEMYB)8Yf&uC}ny3GH|}M`}}YquSzQJN{@uQOIL!pKWU+K?Z@|=)NQ4k<3rg^p;E24 zKSyn%^dkBtCAuVQo-*O&uVqaG@v~O4*{%Z$vofH2klZPC2(=dEZa&Z1@9X5= zQ}c+yDz2ZV;`0)MA`g4Yee-MOk&o$(R)^&=FKmGAf%4eL^hmEd zIrhX-pofhd2Nv|vC3({jo@*1OqSIA*leKxFU%a}o;DLOytsOP{UC}nr&hLpS44_jN69}PrACvU$@R)y;9uX!Pp^^UNploUa|N-biZ;lW zH`sl}(oAW5rQ&#;3Aw&je3p<(vy;+uP!qf0o)UeFj3(A7%WNoxyQnNrxXtt8lq}y! z-X9)H*1&o`cU3WSi&e?0V#W@3O7`0{Qd6(w*!Kcbk12Vc%lYDX6*IqAb{{1Z8E#7P zx#r6MR8B2({8e;4Y!bJG&}5k=seu)Z@iVnNcnb)vHQ8pgCIhWa zE()o3ZDDdb<3zLVH+j1KN`?YWV=K>7sub=**q}M*X(p)IPm3kv-3l5p7Yr3{FL`ax|7+>pZ9{}eY3|s zCXk+L_Rr*v+xp2rXhp|1=769KPQQ)jATuk7@G*}%ORYxjG)LOf-N6%7oEBtWc$-o! z4>M=)W5rYMm=BGn_8Il&((-Y@C;wM5X0-X@I6K}Wvus4A0*Gp7<9xY}5^uEev9Qg9 z8f*pz(j%>=+9WRxVgGt%*c_iUgL8Vbib#`@3I`YP6pguEyauba#)pF zE}kUA(WfmpZ&xWu;!SrD-dvo2_9sJHn1RnHrR1-JPaw{2SW; Bi6H<0 delta 3544 zcmZ`*d3;Rg8h+-?ndO`_ld&X1A~BYOcoJK#e_r&DI!9U zBE-@Pu6?JrYfm&%daK-0TdJz4D%HBrIKSKbM}L>!$usAi_j|wRect6e)n5xMZV1j! z`^VNl|G1>+QsailMwcGB(H$^>|H1*~K5-aOzcX7JaXZi` z8sf%jz$Z}<4~f8xIEa<4(HLcBT%XnIz~i9bTui3G9)=z0_1*$!Rh8FK$c z#ln0TOJiyO8vd7N2{d!UIdlLJupimk>w(5!Ah&%m zFm47GY_Fm+zSuCfHjvZ^`(8~3x{Sd2-EBzV4Jy`?;4D4vR&yUY4-eMqc)t}-9Q}YE z&KDZ_+aSPkNW}%ADlX5~_#NJZBKFYO#>M`ZM7D8X><0-`8^rYe%;N+O<;U&S>S>Gmn-nNLZ&#BmAl!|?)sF;+c;_{wCx$Q2HHd@%T zClr{h5%!*F3QQ^zj*88JkFE&E4^yy`zQVa>7NFZ)p)!qjs}S{CWityFqx_gM!oz6n<}6mo?u-&IyTi3{nP3I ziC$vp@62q}9WksM9ZYL3_HVZa$Q&Zhy4r=2KNIKG9?0&VCg#s)g6ixOKZ#q&i2!kZ z1WU4GQ?Wc~0~Oq>;wKlx@-5Dh91WYr?KwjM>AZMI8N*s#CLUcA!Y*wsR%R|`M9Wl6 zFHmt|zF4_Ghjtgm2O|#w?^cVyRb3#aiLVcaQi(Y_(Y0>W9i98;{;3oISdd zToRjW(3QR##L<_mE1NZ(-TOdSF3e{Qr|HVWn5u|i-9J7*!u$2Qi^F#TOJ&^^fz20r zO0Ns!y>^1$Uy-Q0L4KaW9CudHK10RHRR(u)6R;-2;C-_nYbCoQ6>o_W(u@gFTCq)M{u*>_)?S6)M`Y4HIwiUWrk$?_NX7wc9}V z-G;1f>w!g24U5-I<{-UcD5@v|Rva*t9d{5X74v)pScDUv8-Ci-1}JqH{@lwdoi*I3i)1k_`QGSrIv5z7WbF2; zj5YFyvHMe=0L!Y3eK%JE`7@2lr6e-?4`a%4JCG4${OA@_6B%jDaxf*mzcXex{ujHc z#JI`M=VKci_qWIc#&0toJyFHuC1-~5#C~q1k29V=#o`_@O;e<+!C^p~mD1z5rzG%1*3{T(nD$84JS6kdBA2$qVkSkYiVop4J%2yi=rleZ=>(42XHCw*3^BfTGCEryhad147Yc5dY zF>4f!D}wktingme2iUiY#U<(ZUz7&BNvN@(5|TwFExnX>y`Hn}j7r>>R5ay{lHjKyl`W4&neAs^mxBr9rfc3(hF{7fH;kyHfCa7Ers6QsmhlnEjnn5|~T7 zJQefxO4&{-kvCW=KgP({`6~xQciqV5U-; z!2s48oJ!TFb|Cjp{%o{d1LH4}HUS3scd0!z8YZV3F-LNe>y(@OV@0 zZC?U0T9fTU9$w#5o*3KrM!(J@5tENEzXH+Q3H0;cArfR-vbW;-4FEUMvCVp_) zG-Ka~JTsiDOnE(un41x%$|C>g*d7r(_TpxD}v9RBJ)OU*vXR){!x~0sdn5D;xCpWcP1)&tAQ{gisdeaq#FJ?zhImfKBs@T)z+^2C=B2ZvdnucCyL zg2`sx)LnwHL*Wi@&e4Vj_2Q@V~l;3%hfD5;@eMgBmzp z%v?;9$koLw_^+_1M`YU5r&%*>6YUP`K!+_g*_M$QZ%wde+O0P0*u-(;?CEw#hV{Sd z1o7$r%%&t}Bv=y?$0yj+|FW>g+Z@(O87b*52dRni8I#lN*{yFa$JjG6Xqh(ImPDb0 NUAfuy$aDPC{{XM>^3DJN diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index a1ee2c3..6a5efca 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,https://github.com/Syping/ - + 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> @@ -176,9 +176,8 @@ Snapmatic Bilder und Spielständen ImageEditorDialog - - - + + Snapmatic Image Editor Snapmatic Bild Editor @@ -189,45 +188,29 @@ Snapmatic Bilder und Spielständen - - Capacity: %1 - Kapazität: %1 - - - - ? - ? - - - &Import... &Importieren... - + &Overwrite &Überschreiben - + &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 - - - Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. - Jedes geschossene Snapmatic hat seine eigene Kapazität, ein Snapmatic mit besserer Kapazität kann ein Bild mit besserer Qualität beinhalten. - ImportDialog @@ -319,14 +302,14 @@ Snapmatic Bilder und Spielständen - + 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 @@ -785,31 +768,31 @@ Y: %2 - + 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... @@ -958,7 +941,7 @@ Drücke 1 für Standardmodus - + Open &JSON Editor... &JSON Editor öffnen... @@ -1056,93 +1039,93 @@ Drücke 1 für Standardmodus S&chließen - + Loading... Lade... - + Snapmatic Loader Snapmatic Lader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>Folgende Snapmatic Bilder wurden repariert</h4>%1 - + - - - + + + Import... Importieren... - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + + + Import Importieren - - + + Savegames files (SGTA*) Spielstanddateien (SGTA*) - - + + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) - + Importable files (%1) Importfähige Dateien (%1) - + - + All image files (%1) Alle Bilddateien (%1) - + - - + + All files (**) Alle Dateien (**) - - + + Import file %1 of %2 files Importiere Datei %1 von %2 Dateien - + Import failed with... %1 @@ -1151,60 +1134,60 @@ Drücke 1 für Standardmodus %1 - - + + 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 - + Can't import %1 because file format can't be detected Kann %1 nicht importieren weil das Dateiformat nicht erkannt werden kann - + Initialising export... Initialisiere Export... - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA oder endet mit .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Fehlgeschlagen beim Importieren vom Snapmatic Bild, dieses Bild ist bereits im Spiel - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exportiere Snapmatic Bilder%2<br><br>JPG Bilder machen es möglich sie mit ein Bildansicht Programm zu öffnen<br>Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren<br><br>Exportieren als: - - - + + + No valid file is selected Keine gültige Datei wurde ausgewählt @@ -1214,86 +1197,86 @@ Drücke 1 für Standardmodus Aktivierte Bilder: %1 von %2 - + Failed to import the Snapmatic picture, can't copy the file into profile Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren - + Failed to import the Savegame, can't copy the file into profile Fehlgeschlagen beim Importieren vom Spielstand, kann Spielstanddatei nicht ins Profil kopieren - + Failed to import the Savegame, no Savegame slot is left Fehlgeschlagen beim Importieren vom Spielstand, kein Spielstandslot mehr frei - - + + JPG pictures and GTA Snapmatic JPG Bilder und GTA Snapmatic - - + + JPG pictures only Nur JPG Bilder - - + + GTA Snapmatic only Nur GTA Snapmatic - - - - + + + + Patch selected... Auswahl patchen... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Patche Datei %1 von %2 Dateien - - + + Qualify as Avatar Als Avatar qualifizieren - - - - - - + + + + + + No Snapmatic pictures are selected Keine Snapmatic Bilder sind ausgewählt - + Failed to remove all selected Snapmatic pictures and/or Savegame files Fehlgeschlagen beim Entfernen von allen augewählten Snapmatic Bildern und/oder Spielstanddateien - - - - - - + + + + + + %1 failed with... %2 @@ -1303,93 +1286,93 @@ Drücke 1 für Standardmodus %2 - + Prepare Content for Import... Bereite Inhalt für Import vor... - + Qualify %1 failed with... Qualifizieren - - + + Change Players... Spieler ändern... - + Change Players %1 failed with... Spieler ändern - - - + + + Change Crew... Crew ändern... - + Failed to enter a valid Snapmatic Crew ID Fehlgeschlagen beim Eingeben von einer gültigen Crew ID - + Change Crew %1 failed with... Crew ändern - - - + + + Change Title... Titel ändern... - + Failed to enter a valid Snapmatic title Fehlgeschlagen beim Eingeben eines gültigen Snapmatic Titel - + Change Title %1 failed with... Titel ändern - - + + No Snapmatic pictures or Savegames files are selected Keine Snapmatic Bilder oder Spielstände sind ausgewählt - - + + Remove selected Auswahl löschen - + You really want remove the selected Snapmatic picutres and Savegame files? Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen? - - - - - + + + + + Export selected... Auswahl exportieren... - + Export failed with... %1 @@ -1403,13 +1386,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) @@ -1417,17 +1400,17 @@ Drücke 1 für Standardmodus QApplication - + Font Schrift - + Selected Font: %1 Ausgewähle Schrift: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>Willkommen zu %1!</h4>Möchtest du %1 einstellen bevor du es nutzt? @@ -1543,32 +1526,32 @@ Drücke 1 für Standardmodus Fehlgeschlagen beim Löschen %1 von deinen Spielständen - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All &Alles auswählen - + &Deselect All Alles a&bwählen @@ -1583,7 +1566,7 @@ Drücke 1 für Standardmodus Spielstand kopieren - + &Export &Exportieren @@ -1677,7 +1660,7 @@ Drücke 1 für Standardmodus Meme - + Snapmatic Title Snapmatic Titel @@ -1783,19 +1766,19 @@ Drücke 1 für Standardmodus 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: @@ -1804,66 +1787,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 @@ -1923,52 +1906,52 @@ Drücke 1 für Standardmodus Fehlgeschlagen beim Anzeigen von %1 im Spiel von deinen Snapmatic Bildern - + Edi&t Bearbei&ten - + &Export &Exportieren - + Show &In-game &Im Spiel anzeigen - + Hide &In-game &Im Spiel ausblenden - + &View A&nsehen - + &Remove Entfe&rnen - + &Select Au&swählen - + &Deselect A&bwählen - + Select &All Alles &auswählen - + &Deselect All Alles a&bwählen @@ -1996,22 +1979,22 @@ Drücke 1 für Standardmodus TelemetryDialog - + %1 User Statistics %1 Benutzerstatistik - + You want help %1 to improve in the future by including personal usage data in your submission? Sollen bei Einreichungen Persönliche Nutzungsdaten einbezogen werden um %1 in der Zukunft zu unterstützen? - + Yes, I want include personal usage data. Ja, ich möchte Persönliche Nutzungsdaten einbeziehen. - + &OK &OK @@ -2111,7 +2094,7 @@ Drücke 1 für Standardmodus - + Select &GTA V Folder... Wähle &GTA V Ordner... @@ -2162,21 +2145,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... @@ -2189,20 +2172,20 @@ 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 @@ -2212,15 +2195,15 @@ Drücke 1 für Standardmodus &Neuladen - - + + Show In-game Im Spiel anzeigen - - + + Hide In-game Im Spiel ausblenden diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm index 0892020679b609521f5f2b5feb9cf84fd44da84f..f16e2cd1f37c7e00c0efe9e303adb28eaeade4a2 100644 GIT binary patch delta 3021 zcmX9=dt6QF8h+Q>YwfkyW$!JOs0oFnQmJ+qQHgH4NEeqz2>A_@+%I#E?2vJ5T+WQk zn2u|NBDqG1N`pZqGzKT*5;~5_EtkfR^YmN&^R(CczVChC=Xu`uTYIaRpUyKItjtG< zXbh2Z0l0`rE2?N)M8qy7GPDqJH;JsWiTDvjLuL^qPvp`OFU~+Nh-aoa6S;H*jN3>q|MLWvlIzwQEVLlkvr$A24&>SqDBu?rqwHv~ zKMwL_DJ&h#jJQYoYM+mUw$X3L zL9=HB)$T!pp+~6sCIay{=-F8xe@ulP%(0vim~?@`vXYO(wdp; zZGH<13z)3D@kHIfXEqKRNYrOCvvI*AXv8oD#6r7L=0wav|P!>r`}3RMD?Q#n@A9QCc(6z(wqd6DFcT$?VChUPOU4Yz5bkDEJmzSq{SD3)#z? z;pbi+Y~5_E8(GEHzxWq=qLsaWIU0)1U?1+YB8oY}wmeIQb;8!NZFg(Y0Lkpfp&&#I zXaDxJBpUWvBksFJ6#Y=s<2E07H-qyVf{j57xp@B_VBk+~X=4xqcj8uAB%+&h zxZE{RM)#KcA!QvV0C9W5V8x#HT#?&eFt=aDsP|k^VJf=#d#-r7c{Dtiz?I39;L#MW zVuuf~k*izq6Onya6$4Ew4qwdGl`hBo9PU|a8JeLV_o3kmy7)Es>5K`9Wbj7(0iOAiO&tEzgUHXwPV%I>!YkZL(BPr-7Wt7VlGWPR7%&yaX%kYxwEI2nWOgQ)&DNSv?FV(%oc6*aV3(EJYvH}| zyGr|j0fk+D)3%r2LSi<8)HV+qu2#_}LB&D&f)!Ull(0y!Yl?#xk_G2a)tCaSh5m+l|!&t2HC zV?GkvENrUX1O`Hc{K`zAg-{ax7m@9I;aK4ttXn0VXaHm0AB3tZbc1D#@MmlS%$FrJ zpN7YLTZO+0y@?Wwh0iBp!q7)LJ{(?)F`ISvHSW-&NjIcDA71!Q7y23_K6bJ$W`7;p zeVA^>E+jIbOgFPK9j3F;{qq4N=~JuA%7he74Z3WHKX65O=?c>E+`B|q>aiMwbfB)H zssVHCj;^W{fi$G6xd4y3IqF)=P>97c-J6~jxH|fk>%OFpM>~{@Hs>m#`2x}AKOxA> zQtZB<8I}8sP9J(<0^b(@Su*CpmTFi<1utsRlT7^!D0;&t_w`eaAppk7&$rw_CYa*_h4=3&7H6=UL6 zOem2C?`g+n%1FU!BZ1yhY)cf@os&jBg*T+l(&$zLw6&4OJO#Bqmr7|Tm!N=!(iB2L zHXhQ}D4Z)iRnd4`#oi4-GhPIfRQi=QG~=X-MxLnuWa;8vT!LLbN|(0O;BNavy7C-> z5}!y{)8}C@rAyaB88F64bqkKe-P=|4yQ5-&y^4|Bq`Cq~p#)2fJ(9tsgLL~Kn6YS) z9v_7?-ip+0mgnLwvX@$}fLgE1GSiW{_cB=%VucA+BpW-ZG)hDOM{j!9cKLFN11}a>c&f7AEsoT%F&5p-^RFFC?bv ztIUlCdL$@|PmRazcTZV8bQ1#1QnvKRbH2Bd$8eCUQpLzYN?te;)2>wVjVRn?u2;^q zLV|ctrP_@}z~7at(Kfg{@|C+EP*JBj%Jc0om;EE<(`+0#@|E7M$sGrr(%ZFQE(}Z4 zJNu#kjgfkny9hk&XT9HQj8=J#idOmh!67T*nREIOeI@!oO`li+Y5H61ldNE3bMFB4 zAKxMRMK_^MSe1U`epKkQL0>!yT1TAMpE^4hu70kfXN$gitTo#3rGe|XE&CT6>@Gco zrb`SyM)Y;Bc0+hDJRyB!n7IVZ+GZGzPn-s6v?>O?Gn~!DK1a@IJ3RpX?|IZ1^coZg z?>445XX1Oi+l>NZ#Qq-+4>ULc delta 3221 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 - + 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,https://github.com/Syping/ - + 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> @@ -166,9 +166,8 @@ Pictures and Savegames ImageEditorDialog - - - + + Snapmatic Image Editor @@ -179,45 +178,29 @@ Pictures and Savegames - - Capacity: %1 - - - - - ? - - - - &Import... - + &Overwrite - + &Close - + Patching of Snapmatic Image failed because of I/O Error - + Patching of Snapmatic Image failed because of Image Error - - - Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. - - ImportDialog @@ -309,14 +292,14 @@ Pictures and Savegames - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! @@ -764,31 +747,31 @@ Y: %2 - + Export as &Picture... - + Export as &Snapmatic... - + &Overwrite Image... - + &Edit Properties... - + Open &Map Viewer... @@ -940,7 +923,7 @@ Press 1 for Default View - + Open &JSON Editor... @@ -1049,272 +1032,272 @@ Press 1 for Default View - + Loading... - + Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 - + - - - + + + Import... - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + + + Import - + Importable files (%1) - - + + GTA V Export (*.g5e) - - + + Savegames files (SGTA*) - - + + Snapmatic pictures (PGTA*) - + - + All image files (%1) - + - - + + All files (**) - - - + + + No valid file is selected - - + + Import file %1 of %2 files - + Import failed with... %1 - - + + 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 - + Can't import %1 because file format can't be detected - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e - + Failed to import the Snapmatic picture, the picture is already in the game - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - - - - - + + + + + Export selected... - + Initialising export... Initializing export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - - + + Qualify as Avatar - - - - - - + + + + + + No Snapmatic pictures are selected - - - - + + + + Patch selected... - - - - - - - - + + + + + + + + Patch file %1 of %2 files - - - - - - + + + + + + %1 failed with... %2 @@ -1322,71 +1305,71 @@ Press 1 for Default View - + Failed to remove all selected Snapmatic pictures and/or Savegame files - + Prepare Content for Import... - + Qualify %1 failed with... - - + + Change Players... - + Change Players %1 failed with... - - - + + + Change Crew... - + Failed to enter a valid Snapmatic Crew ID - + Change Crew %1 failed with... - - - + + + Change Title... - + Failed to enter a valid Snapmatic title - + Change Title %1 failed with... - + All profile files (*.g5e SGTA* PGTA*) @@ -1394,17 +1377,17 @@ Press 1 for Default View QApplication - + Font - + Selected Font: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? @@ -1482,37 +1465,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1752,25 +1735,25 @@ Press 1 for Default View - + Snapmatic Title - + New Snapmatic title: - + Snapmatic Crew - + New Snapmatic crew: @@ -1779,66 +1762,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 @@ -1898,52 +1881,52 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1971,22 +1954,22 @@ Press 1 for Default View TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? - + %1 User Statistics - + Yes, I want include personal usage data. - + &OK @@ -2058,7 +2041,7 @@ Press 1 for Default View - + &About %1 @@ -2114,15 +2097,15 @@ Press 1 for Default View - + Select &GTA V Folder... - - + + Select GTA V Folder... @@ -2163,39 +2146,39 @@ Press 1 for Default View - - + + Select Profile - + Open File... - - - - + + + + Open File - + Can't open %1 because of not valid file format - - + + Show In-game - - + + Hide In-game diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index 3cd7d13d9f76f12152e8d061974916405929c33f..db3608b5b0cbb2d7a5c229cee47a460a3ba880a9 100644 GIT binary patch delta 3048 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 - + 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/ - + 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> @@ -176,9 +176,8 @@ et les fichiers de sauvegarde de Grand Theft Auto V ImageEditorDialog - - - + + Snapmatic Image Editor Éditeur d'images Snapmatic @@ -189,45 +188,29 @@ et les fichiers de sauvegarde de Grand Theft Auto V - - Capacity: %1 - Capacité : %1 - - - - ? - ? - - - &Import... &Importer... - + &Overwrite &Remplacer - + &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 - - - Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. - Tous les Snapmatic ont une Capacité différente, un Snapmatic avec une haute Capacité peut stocker une image de meilleure qualité. - ImportDialog @@ -319,14 +302,14 @@ et les fichiers de sauvegarde de Grand Theft Auto V - + 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é @@ -865,31 +848,31 @@ Y : %2 - + 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... @@ -958,7 +941,7 @@ Appuyer sur 1 pour le mode par défaut - + Open &JSON Editor... Ouvrir l'éditeur &JSON... @@ -1067,88 +1050,88 @@ Appuyer sur 1 pour le mode par défaut Photos activées : %1 sur %2 - + Loading... Chargement... - + Snapmatic Loader Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>Les Snapmatic suivants ont été répaés</h4>%1 - + - - - + + + Import... 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 (**) - - + + Import file %1 of %2 files Importation du fichier %1 sur %2 - + Import failed with... %1 @@ -1157,153 +1140,153 @@ Appuyer sur 1 pour le mode par défaut %1 - - - + + + No valid file is selected Fichier invalide - + Importable files (%1) Fichiers importables (%1) - - + + 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 - + Can't import %1 because file format can't be detected Impossible d'importer %1, le format du fichier n'est pas détecté - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*, *.g5e) - + Failed to import the Snapmatic picture, the picture is already in the game Impossible d'importer la photo Snapmatic, un fichier du même nom existe déjà - + Failed to import the Snapmatic picture, can't copy the file into profile Impossible d'importer la photo Snapmatic, impossible de copier le fichier dans le profil - + Failed to import the Savegame, can't copy the file into profile Impossible d'importer la sauvegarde, impossible de copier le fichier dans le profil - + Failed to import the Savegame, no Savegame slot is left Impossible d'importer la sauvegarde, aucun emplacement libre - - + + JPG pictures and GTA Snapmatic Images JPG et GTA Snapmatic - - + + JPG pictures only Images JPG seulement - - + + GTA Snapmatic only GTA Snapmatic seulement - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1Exporter les photos Snapmatic%2<br><br>Les fichiers JPG permettent d'ouvrir les photos avec une visionneuse d'images<br>Les GTA Snapmatic permettent d'importer les photos dans le jeu<br><br>Exporter comme : - - - - - + + + + + Export selected... Exporter la sélection... - + Initialising export... Initialisation de l'export... - - + + Qualify as Avatar Qualifier comme Avatar - - - - - - + + + + + + No Snapmatic pictures are selected Aucun Snapmatic sélectionné - - - - + + + + Patch selected... Patcher la sélection... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Patch du fichier %1 sur %2 - - - - - - + + + + + + %1 failed with... %2 @@ -1313,71 +1296,71 @@ Appuyer sur 1 pour le mode par défaut %2 - + Failed to remove all selected Snapmatic pictures and/or Savegame files Échec de la supression des Snapmatic et/ou des fichiers de sauvegarde sélectionnés - + Prepare Content for Import... - + Qualify %1 failed with... Qualifier - - + + Change Players... Modifier les joueurs... - + Change Players %1 failed with... Modifier les joueurs - - - + + + Change Crew... Modifier le Crew... - + Failed to enter a valid Snapmatic Crew ID Snapmatic Crew ID invalide - + Change Crew %1 failed with... Changer le Crew - - - + + + Change Title... Changer le titre... - + Failed to enter a valid Snapmatic title Titre Snapmatic invalide - + Change Title %1 failed with... Changer le titre - + Export failed with... %1 @@ -1386,31 +1369,31 @@ Appuyer sur 1 pour le mode par défaut %1 - - + + No Snapmatic pictures or Savegames files are selected Aucun fichier de sauvegarde ou photo Snapmatic sélectionné - - + + Remove selected Supprimer la sélection - + You really want remove the selected Snapmatic picutres and Savegame files? 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) @@ -1418,17 +1401,17 @@ Appuyer sur 1 pour le mode par défaut QApplication - + Font Police - + Selected Font: %1 Police sélectionnée : %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>Bienvenue sur %1!</h4>Voulez-vous configurer %1 avant de l'utiliser t? @@ -1506,7 +1489,7 @@ Appuyer sur 1 pour le mode par défaut Supprimer - + &Export &Exporter @@ -1597,32 +1580,32 @@ Appuyer sur 1 pour le mode par défaut Impossible de supprimer %1 - + &View &Voir - + &Remove &Supprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner to&ut - + &Deselect All &Déselectionner tout @@ -1678,7 +1661,7 @@ Appuyer sur 1 pour le mode par défaut Meme - + Snapmatic Title Titre Snapmatic @@ -1786,19 +1769,19 @@ Appuyer sur 1 pour le mode par défaut 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 : @@ -1807,66 +1790,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 @@ -1946,52 +1929,52 @@ Appuyer sur 1 pour le mode par défaut %1 n'a pas pu être rendu visible en jeu - + Edi&t Édi&ter - + Show &In-game &Visible en jeu - + Hide &In-game &Invisible en jeu - + &Export &Exporter - + &View &Voir - + &Remove S&upprimer - + &Select &Sélectionner - + &Deselect &Déselectionner - + Select &All Sélectionner &tout - + &Deselect All &Déselectionner tout @@ -1999,22 +1982,22 @@ Appuyer sur 1 pour le mode par défaut TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? - + %1 User Statistics - + Yes, I want include personal usage data. - + &OK &OK @@ -2124,15 +2107,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... @@ -2185,45 +2168,45 @@ 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 - - + + Show In-game Visible en jeu - - + + Hide In-game Invisible en jeu diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index 16d302ce5d6fa986926de20ae51ea03df57eae87..ac02bb3fe5e556c32b4d5fa6544593beeea75e37 100644 GIT binary patch delta 3048 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Закрыть - + 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> @@ -178,9 +178,8 @@ Pictures and Savegames ImageEditorDialog - - - + + Snapmatic Image Editor Редактор картинок Snapmatic @@ -191,45 +190,29 @@ Pictures and Savegames - - Capacity: %1 - Величина: %1 - - - - ? - ? - - - &Import... &Импортировать... - + &Overwrite &ПерезапиÑать - + &Close &Закрыть - + Patching of Snapmatic Image failed because of I/O Error Ðе удалоÑÑŒ изменить картинку Snapmatic из-за ошибки ввода-вывода - + Patching of Snapmatic Image failed because of Image Error Ðе удалоÑÑŒ изменить картинку Snapmatic из-за ошибки Image Error - - - Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. - У каждого отÑнÑтого Snapmatic фото еÑть ÑÐ²Ð¾Ñ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°, в завиÑимоÑти от которой можно Ñохранить картинку Ñ Ð±Ð¾Ð»ÐµÐµ выÑоким качеÑтвом. - ImportDialog @@ -323,14 +306,14 @@ Pictures and Savegames - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! Свой Ðватар - + Custom Picture Custom Picture Description in SC, don't use Special Character! Ð¡Ð²Ð¾Ñ ÐšÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ° @@ -790,31 +773,31 @@ Y: %2 - + Export as &Picture... ЭкÑпортировать как &картинку... - + Export as &Snapmatic... ЭкÑпортировать как &Snapmatic... - + &Overwrite Image... &ПерезапиÑать картинку... - + &Edit Properties... &Изменить ÑвойÑтва... - + Open &Map Viewer... Открыть &карту... @@ -963,7 +946,7 @@ Press 1 for Default View - + Open &JSON Editor... Открыть &редактор JSON... @@ -1060,82 +1043,82 @@ Press 1 for Default View &Закрыть - + Loading... Загрузка... - + Snapmatic Loader Загрузчик Snapmatic - + <h4>Following Snapmatic Pictures got repaired</h4>%1 Change wording if the %1 is not a multiline beginning at new line <h4>ÐижеÑледующие картинки Snapmatic были воÑÑтановлены</h4>%1 - + - - - + + + Import... Импортировать... - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + + + Import Импортировать - - + + Savegames files (SGTA*) Файлы ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ (SGTA*) - - + + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) - + - - + + All files (**) Ð’Ñе файлы (**) - - + + Import file %1 of %2 files ИмпортируютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ %1 из %2 - + Import failed with... %1 @@ -1144,21 +1127,21 @@ Press 1 for Default View %1 - - + + Failed to read Snapmatic picture Ðе удалоÑÑŒ загрузить картинку Snapmatic - - + + Failed to read Savegame file Ðе удалоÑÑŒ загрузить файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - - + + + No valid file is selected Выбранный файл неверен @@ -1168,150 +1151,150 @@ Press 1 for Default View Включенные картинки: %1 из %2 - + Importable files (%1) Файлы Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° (%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, файл не может быть правильно обработан - + Can't import %1 because file format can't be detected Ðе получилоÑÑŒ импортировать %1, не удалоÑÑŒ определить формат файла - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе удалоÑÑŒ импортировать картинку Snapmatic, название не начинаетÑÑ Ñ PGTA или не заканчиваетÑÑ Ñ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе удалоÑÑŒ импортировать картинку Snapmatic, картинка уже в игре - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе удалоÑÑŒ импортировать картинку Snapmatic, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, can't copy the file into profile Ðе удалоÑÑŒ импортировать Ñохранение, не получилоÑÑŒ Ñкопировать файл в профиль - + Failed to import the Savegame, no Savegame slot is left Ðе удалоÑÑŒ импортировать Ñохранение, нет пуÑтых Ñчеек под ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - - + + JPG pictures and GTA Snapmatic Картинки JPG и GTA Snapmatic - - + + JPG pictures only Только картинки JPG - - + + GTA Snapmatic only Только GTA Snapmatic - + Initialising export... Подготовка к ÑкÑпорту... - - + + No Snapmatic pictures or Savegames files are selected Ðе выделены ни один Snapmatic или Ñохранение - - + + Remove selected СнÑть выделение - + You really want remove the selected Snapmatic picutres and Savegame files? Точно ли хочешь удалить выбранные картинки Snapmatic и файлы Ñохранений? - + Prepare Content for Import... - - + + Qualify as Avatar Пометить как Ðватар - - - - - - + + + + + + No Snapmatic pictures are selected Ðе выделена ни одна картинка Snapmatic - - - - + + + + Patch selected... Пропатчить выделенные... - - - - - - - - + + + + + + + + Patch file %1 of %2 files ИзменÑетÑÑ Ñ„Ð°Ð¹Ð» %1 из %2 - - - - - - + + + + + + %1 failed with... %2 @@ -1321,80 +1304,80 @@ Press 1 for Default View %2 - + Failed to remove all selected Snapmatic pictures and/or Savegame files Ðе удалоÑÑŒ удалить вÑе выделенные картинки Snapmatic и/или ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ - + Qualify %1 failed with... Помечание - - + + Change Players... Изменить игроков... - + Change Players %1 failed with... Измение игроков - - - + + + Change Crew... Изменить банду... - + Failed to enter a valid Snapmatic Crew ID Введённый идентификатор банды не верен - + Change Crew %1 failed with... Изменение банды - - - + + + Change Title... Изменить заголовок... - + Failed to enter a valid Snapmatic title Введённый заголовок не верен - + Change Title %1 failed with... Изменение заголовка - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1ЭÑкпортировать картинки Snapmatic%2<br><br>Картинки JPG можно открыть любым проÑмотрщиком<br>Картинки формата GTA Snapmatic можно Ñнова импортировать в игру<br><br>ЭкÑпортировать как: - - - - - + + + + + Export selected... Экпортировать выделенное... - + Export failed with... %1 @@ -1410,13 +1393,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) @@ -1424,17 +1407,17 @@ Press 1 for Default View QApplication - + Font Шрифт - + Selected Font: %1 Выбранный шрифт: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>Добро пожаловать в %1!</h4>Хочешь изменить наÑтройки %1 перед иÑпользованием? @@ -1555,32 +1538,32 @@ Press 1 for Default View Ðе удалоÑÑŒ удалить Ñохранение %1 - + &View &ПроÑмотр - + &Remove &Удалить - + &Select &Выбрать - + &Deselect Сн&Ñть выбор - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -1590,7 +1573,7 @@ Press 1 for Default View Копировать Ñохранение - + &Export &ЭкÑпортировать @@ -1694,7 +1677,7 @@ Press 1 for Default View Meme - + Snapmatic Title Заголовок Snapmatic @@ -1790,19 +1773,19 @@ Press 1 for Default View Ðе удалоÑÑŒ измененить ÑвойÑтва Snapmatic из-за проблемы ввода/вывода - + New Snapmatic title: Ðовый заголовок Snapmatic: - + Snapmatic Crew Банда на Snapmatic - + New Snapmatic crew: ÐÐ¾Ð²Ð°Ñ Ð±Ð°Ð½Ð´Ð° на Snapmatic: @@ -1811,66 +1794,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 повреждён @@ -1940,52 +1923,52 @@ Press 1 for Default View Ðе удалоÑÑŒ показать %1 в ÑпиÑке картинок Snapmatic в игре - + Edi&t &Правка - + Show &In-game Показывать в &игре - + Hide &In-game Ск&рыть в игре - + &Export &ЭкÑпорт - + &View По&казать - + &Remove У&далить - + &Select &Выделить - + &Deselect Сн&Ñть выделение - + Select &All Ð’&ыбрать вÑе - + &Deselect All СнÑть выбо&Ñ€ Ñо вÑех @@ -2003,22 +1986,22 @@ Press 1 for Default View TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? - + %1 User Statistics - + Yes, I want include personal usage data. - + &OK &ОК @@ -2093,7 +2076,7 @@ Press 1 for Default View - + Select &GTA V Folder... Выбрать &папку GTA V... @@ -2169,16 +2152,16 @@ Press 1 for Default View - - + + Select Profile Выбор Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ - - + + Select GTA V Folder... Выбрать папку GTA V... @@ -2191,25 +2174,25 @@ Press 1 for Default View - + &About %1 &О программе %1 - + Open File... Открыть файл... - - - - + + + + Open File Открыть файл - + Can't open %1 because of not valid file format Ðе удалоÑÑŒ открыть %1 из-за неверного формата файла @@ -2219,15 +2202,15 @@ Press 1 for Default View Пере&загрузить - - + + Show In-game Показывать в игре - - + + Hide In-game Скрыть в игре diff --git a/res/gta5sync_uk.qm b/res/gta5sync_uk.qm index 6285e03b6b33fb4de2b671de2d838a4485ec6e2b..6afd7db8d35122a2568e4e4fa2e6d585ea07dc60 100644 GIT binary patch delta 3048 zcmXArd0bWX7RA>+_uS!}bBB0BC<-ZxAs|j5j))qA0}cp*AS4Qy3K$9IkX}VdAygm{ zMbcCpQqmkioG?%vQbEbIqGxGZlFy-dJbKF0x9I%!z4w03`R%>e+I#H-vn9 zTNQvPpi2O`7%+dYvVVU-SOs)j0Ejn%-u{4YGVoyu;O+}J-v&H~19n?fx-3;$Fa#K2 z;qT{Ey6gtt;pZ$7!in=h*DQ#6J9y?r@(^I_9tCmF65!*05KoD~(qj-C$j#Xhue$-S zZ-;m*9O%`ma-I)#BbdOlIOsyiH@}0f;Ue(C7?t^DFzyHg+}z+kFcTQJLS;cBJUZgI zjDkmHAQO?{!FV?>VBuAGbOih)4j%tv^`C5j=jJ*pvmKsi#sU7*;n@)=)mde( zGe!>KK{Hk$Fp&xsjYn`cnUs%^!FO5VW`xAM^8F@EIKbcYhU4vnwLqU_L?5~Vgv>+q zS8g_-uYilV z`BL+!#D#_I)jWQDAL!Jod1gKg#I*=LPJIIS6$?|mnyKI=VaCN)T0K{IH!Kra5h0}5 zvcrK*!-V&@eGW|NB;@tu1CA$!&t?t)hDNDOmW6#E31ezkjpL}q$~HMB|+VEU+zD{?{jqD z2pqfM&-6OKqkwjn-r<=y@WxJkmyrJgYbWZR>nz+Kuk>NDlzRGi`q=`v=DWT0$M;dW zH#_Uk|3dcJs=pT0iv9aIU|pplf4eP%8R-p0^+mwO`G&HZRMN?Cc)}B)|2o6b11-S%XhTIK zC7Zp+P+QAs=w&hd92&+2m1B5tf(6VSV0dz15U{n~@UoIkXtNo0L2R~sjnTQzn^t^e z9R0kEy>Qz&=1=baf=$MW`x=1UIAe-!2Qzu+ig7_rBFC-4xa@8?rS5H9o=Pjmc^Fsr z_@3iZY22I0-)GwytNP_|Beol>Ya8ihiLthdf%GB9y7O$ZaJ}*ADHhVb(b&?x8kihn zd=(qVX-JYB&(_fMO3Cq`0UWzf$z{<4T9YZ+djHjvySZKJvzQ5(d#db}APwx#9vJ;n z8k`fz1eZyJub>VjgWk~SpyC|!;*6W3vi&vHumnqC zqI^@tKO~uoa?f!#yMCkcpHn|ju{M=Gem03Ef$Xh`Cg~9iin?a9J9q;K^)uP8>BQ!2 zF*z$XO5J0G$@#Ps|J!++Jl$I;(HPUrp0q^2#I$e%8Dlhkcs!1G!Dv&?*dhk7Hx>8g z@1`lHQjN&&u2H%6n5i^~iCLDL%B-wB>AvaYQ(92eYC7j7@I15W>I6q#*U6@)zgUpV zb<-o;Ha3^vo2K?O9=Js`cfI4y11_4oHghjz#+cpxIRDPF*`tYpGtZd)a=2O@gH-lT zGLH;c159l)2bgO(|I5tNs%cHcU30iSoA|A4m2C&oJ(td(pq^P2U}Acj{wV8 zMOfck&y1Bl*3B0w@$fgSJ6}ZrX%npnu2BI`$y&bDpO?`k>$xgQ8}rzDy}p9u_m%aY l>tR}U-uj0NEA@V1ZQV-c(hf44PlcnuD_1N>_jen&{{J5LaSi|g delta 3439 zcmY*bcUV+c9zFBsO?%U#Vu&C*iW)>jKoJX|U?_GJ)QAm43`9DJqQSAC1SMFIpawN6 zR*0?z8;SuX#p5c9){q~Rf&Yk=2ubp4H_vfoZ^G#umowXjo z5WsYv_&(t1O`H!Hzmw6cJ0L6pI?V#a8-Pn+Ks6Rvw3=(4?R*L7H5h1DAfqK&#=_o! zr-}Q=WwdMpW}F3<{{i8|Ilw6kV*WP3DxT-!0MKkY#slv{$B2^=J^R==cV%HiPT);c7Fuz8bDJgGJ$Ree6NZL9Y$9WM(~jogNMh9fMvrLn&=# z%x??70YSj@bOgncq2eJ3Sx$^wj?n&h$=U{lMt7xrJw}#szrX_%_t%i6Xha^kY6V8j zK;)M+=>8muKQE%kt6`lq4(OeV#fx_U-RhAu&>i?71gj2QBQwd^Ijaqj@IH>coC^f> z#ov!GEi=@(vV#sT>4L@^G-S-e{p~9L{|Ze>V}Rg?3h5tiK(Zj?%4b9?H`e!6IPIl} z-PbA7`~FS}zg1+HOa}(VDAxK80zzji)@J?$ba}1V4S}`bq^KBmh?MSD)IF!cylIN- zBa(ob&5B2xIstu36u!dF6hbR&>@MyROp2IhV!9IbH%G8}{|u_p=cDpa2$ zVHwq>c!jBh5GGPTm!!A2uU6AnL{sflNiXKAC?JGdU zN#T!SB;;*J;gv@_7X4VIZr4p@;6M3`YYw?NjfH|v+}4n9UGRXJR40S!`@TYuBQBix0F{FA7m*> zqVoAxmeM=bqFP@|;tEA=#2q^1Aa>hH#ipmCOKMvnezfTQikTf{6nz4yAS+1>8?Y6~ z%oUg1@}~o9#E;vAv%43H`74>A_Q%9eA`3VXAnpiaN&1Uox!X=4%~{4z_KD?X)@d9K z>%{}hCIN<0u~I*iRQ@1VZSBV{T_VobC9g^V&)LdoV(mG z4U}=rkDBCf8i1f|P4@mB!0Iy1nyqu`;44khl_KENC{1Z~649(VIPzbB*HX>lvSt?R zSWU$>G8X%prly8n(L<^E=jibqM~gI#Cs=E9dT9Pt))&~^r1|qGi*boHL#qmA(XD-^ zb*gm-CN0zkyewrce4`EgjibJBm3GvgIv_t>o4AdRM1QGGu8w8fozpJ7%ajav)Mh6! z6(c)q7kBxNT~nsr9n1Y#wf1sAKeVfEMP^4+~@c(<;!dJJ>CLRa30H4+i8 zyD*fLrfPK;@4W#Q?AO l@@s(cNV1t^uz>|G)eFOLTddVOVLLc0RsZ1SzthJyQB@nskhyD89P5GTDcKo zl{Xe7OUFC5XU;ZCRku`pS$rg&zkQd2Vba&dwR}3%OBWx}(3U9aQfvk%{$uHKpaMwj zEY)Qm0rW{SCN#>JJXOY3mlYQ=C;(RPX|6e zB0acBYGb1G3Y+J%PUw|G?Kq&m(wl8m#`V;9I6_Cd_0jjsCWUQY=?8?gu=*SIkypKV zyN}W@Gcg6dAM0}xZctyCKHocnDR`#O4{qco`l*boh?nTF(*V77?dv6^q(NU~KM+{j zs4wZ2!-F?uTy|JVKe4P6FU4m4$z@a6Ugi3#L^`y28<7S!hwIPz zKj4htsjtgm044eQYnx-)6-xc}B0fKIpl`5`;kzkM|E%(RGWOgmFPv{0#7#jgt^kAX z5hIGMF|^r#6&UMgu*+@7;%qiJ=}EP-r@`rz17C8^hF&hsWXQ)5dq9z3xc!0=S!xZBwy?Mcb~L6ICz1K@!O5_ zZ!kA2<{8)SVT7~4F&>!6T<2Xd9y>jm&)%mpMui#APHxY6QDzctx8~%oCh7Y-fO(L~ z@#_ZW_OPj+nQa}^VhSF@+OS`4N?t^UJ@ZUQqTbN!VHwqb?2q3c1W?u5Ci69e{mYHs<=T}QzkbZ5)+!`Ji| zO(p?Dw6-f-&7WdOVYQ=UpLfKzqPI9$93Y19=O=n#5G?2p&%X{DhDE1D$HZr34YG9i zw8?a65FJE+u|MVfU=e*NHC7Cy^uWSx$@X)6MGrB8`$NTvt>1=m?e%{)hQZCY*DC8l z+uqdWM~wm0GO_jaM6n-ntT>3fleqG2wP*9rX3vunHtl^2#|3w`dU7>b93_UfN)DhF z|G(s94YFSMzam-?lo^|rWyy%16PsiSPl`@SjLwLUvBX7Z##*8+v*KsZj!lbA%CP)5 za5wJ$@7TQfj5teN{0DKdX|@yYt=w2*qLVD?8Odoj4Jq+48FRU6JvlQrBZDVX=SC-x OLw6g2hc`P6FZd53e$To9 diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts index 8309401..6df5750 100644 --- a/res/gta5sync_uk.ts +++ b/res/gta5sync_uk.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 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> @@ -182,52 +182,35 @@ Pictures and Savegames - - Capacity: %1 - Величина: %1 - - - - ? - ? - - - &Import... &Імпорт... - + &Overwrite &ПерезапиÑати - + &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 Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ Ñ‡ÐµÑ€ÐµÐ· помилку картинки - - - Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. - Кожен знÑтий Snapmatic має різну величину, в залежноÑті від Ñкої можна зберігати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð±Ñ–Ð»ÑŒÑˆ виÑокої ÑкоÑті. - ImportDialog @@ -314,14 +297,14 @@ Pictures and Savegames - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! КориÑтувацький Ðватар - + Custom Picture Custom Picture Description in SC, don't use Special Character! КориÑтувацьке Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ @@ -779,37 +762,37 @@ Y: %2 - + Export as &Picture... ЕкÑпортувати Ñк &зображеннÑ... - + Export as &Snapmatic... ЕкÑпортувати Ñк &Snapmatic... - + &Edit Properties... &Змінити влаÑтивоÑті... - + &Overwrite Image... &ПерезапиÑати зображеннÑ... - + Open &Map Viewer... Відкрити &карту... - + Open &JSON Editor... Відкрити редактор &JSON... @@ -1062,64 +1045,64 @@ Press 1 for Default View ЕкÑпортуєтьÑÑ Ñ„Ð°Ð¹Ð» %1 з %2 файлів - + - - - + + + Import... ІмпортуваннÑ... - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + + + 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, оÑкільки файл неможливо розібрати правильно @@ -1129,58 +1112,58 @@ Press 1 for Default View Увімкнено фотографії:%1 з%2 - + Loading... ЗавантаженнÑ... - + Snapmatic Loader Snapmatic Loader - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>ÐаÑтупні Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð±ÑƒÐ»Ð¸ відновлені</h4>%1 - + Importable files (%1) ІмпортуютьÑÑ Ñ„Ð°Ð¹Ð»Ð¸ (%1) - - + + GTA V Export (*.g5e) GTA V Export (*.g5e) - - + + Savegames files (SGTA*) Файли Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸ (SGTA*) - - + + Snapmatic pictures (PGTA*) Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ (PGTA*) - - - + + + No valid file is selected Вибрані недійÑні файли - - + + Import file %1 of %2 files ІмпортуєтьÑÑ Ñ„Ð°Ð¹Ð» %1 з %2 файлів - + Import failed with... %1 @@ -1189,86 +1172,86 @@ Press 1 for Default View %1 - - + + Failed to read Snapmatic picture Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Snapmatic картинку - - + + Failed to read Savegame file Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸ - + Can't import %1 because file format can't be detected Ðеможливо імпортувати%1, оÑкільки формат файлу не може бути виÑвлений - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Snapmatic, файл не починаєтьÑÑ Ð· PGTA або закінчуєтьÑÑ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ знімок Snapmatic, картинка вже в грі - + Failed to import the Snapmatic picture, can't copy the file into profile Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Snapmatic, не можна Ñкопіювати файл у профіль - + Failed to import the Savegame, can't copy the file into profile Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Сейв, не можна Ñкопіювати файл у профіль - + Failed to import the Savegame, no Savegame slot is left Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Сейв, немає вільного Ñлота - - - - - + + + + + Export selected... ЕкÑпорт обраних... - - + + JPG pictures and GTA Snapmatic JPG картинки Ñ– GTA Snapmatic - - + + JPG pictures only Тільки JPG картинки - - + + GTA Snapmatic only Тільки GTA Snapmatic - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1 ЕкÑпортувати Snapmatic фотографії %2 <br><br> Фотографії JPG дозволÑють відкривати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð° допомогою заÑобу переглÑду зображень<br>GTA Snapmatic дає змогу імпортувати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð² гру<br><br>ЕкÑпортувати Ñк: - + Initialising export... Ð†Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ ÐµÐºÑпорту... - + Export failed with... %1 @@ -1277,45 +1260,45 @@ Press 1 for Default View %1 - - + + No Snapmatic pictures or Savegames files are selected Ðе вибрано жодного Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ файлу Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ - - + + Remove selected Видалити вибрані - + You really want remove the selected Snapmatic picutres and Savegame files? Ви дійÑно хочете видалити вибрані Snapmatic фотографії та файли Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸? - + Failed to remove all selected Snapmatic pictures and/or Savegame files Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ вÑÑ– обрані Snapmatic фотографії та/або Сейви - - - - - - + + + + + + No Snapmatic pictures are selected Ðе вибрано жодного Snapmatic Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ - - - - - - + + + + + + %1 failed with... %2 @@ -1325,92 +1308,92 @@ Press 1 for Default View %2 - + Prepare Content for Import... - - + + Qualify as Avatar Позначити Ñк Ðватар - - - - + + + + Patch selected... Вибір патчу... - - - - - - - - + + + + + + + + Patch file %1 of %2 files Патч файлу %1 з %2 файлів - + Qualify %1 failed with... ЯкіÑть - - + + Change Players... Зміна гравців... - + Change Players %1 failed with... Змінити гравців - - - + + + Change Crew... Зміна банди... - + Failed to enter a valid Snapmatic Crew ID Ðе вдалоÑÑ Ð²Ð²ÐµÑти дійÑний ID Банди Snapmatic - + Change Crew %1 failed with... Змінити банду - - - + + + Change Title... Зміна назви... - + Failed to enter a valid Snapmatic title Ðе вдалоÑÑ Ð²Ð²ÐµÑти дійÑний заголовок Snapmatic - + Change Title %1 failed with... Змінити назву - + All profile files (*.g5e SGTA* PGTA*) УÑÑ– файли зображень (*.g5e SGTA* PGTA*) @@ -1418,17 +1401,17 @@ Press 1 for Default View QApplication - + Font Шрифт - + Selected Font: %1 Вибраний шрифт:%1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>ЛаÑкаво проÑимо до %1!</h4>Ви хочете налаштувати %1 перед викориÑтаннÑм? @@ -1506,37 +1489,37 @@ Press 1 for Default View Видалити - + &View &ПереглÑд - + &Export &ЕкÑпорт - + &Remove &Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ - + &Select &Ð’Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ - + &Deselect &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ - + Select &All Вибрати &уÑÑ– - + &Deselect All &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ ÑƒÑÑ–Ñ… @@ -1731,25 +1714,25 @@ Press 1 for Default View Змінити влаÑтивоÑті Snapmatic не вдалоÑÑ Ñ‡ÐµÑ€ÐµÐ· JSON Помилку - + Snapmatic Crew Snapmatic банда - + New Snapmatic crew: Ðова Snapmatic банда: - + Snapmatic Title Snapmatic назва - + New Snapmatic title: Ðовий Snapmatic заголовок: @@ -1806,64 +1789,64 @@ 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 @@ -1924,52 +1907,52 @@ Press 1 for Default View Видалити - + Edi&t Редагува&ти - + Show &In-game Показати &у грі - + Hide &In-game Сховати &у грі - + &Export &ЕкÑпортувати - + &View &ПереглÑнути - + &Remove &Видалити - + &Select &Ð’Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ - + &Deselect &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ - + Select &All Вибрати &уÑÑ– - + &Deselect All &ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ ÑƒÑÑ–Ñ… @@ -1997,22 +1980,22 @@ Press 1 for Default View TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? - + %1 User Statistics - + Yes, I want include personal usage data. - + &OK &OK @@ -2089,7 +2072,7 @@ Press 1 for Default View - + &About %1 &Про %1 @@ -2145,15 +2128,15 @@ Press 1 for Default View - + Select &GTA V Folder... Вибрати &GTA V теку... - - + + Select GTA V Folder... Вибрати GTA V теку... @@ -2188,41 +2171,41 @@ 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 через невідомий формат файлу diff --git a/res/gta5sync_zh_TW.qm b/res/gta5sync_zh_TW.qm index 46c5e09bf33dcd9e4a35f7f260835fb0418726b4..662cd22e0e61732138176e73e51a7fbecb6e308c 100644 GIT binary patch delta 3048 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 delta 3289 zcmYLLd0bTG8h+=@ndO`_OUNc5I)Doz0V0Siiw3d?3W5j-I=~PJvJRxV45n5Zxx^(j zF*PtZ((8(dVt}Nif}(LNixQ3ybiZ}$&=&+yIneed%=@AJOjbp9!6EoC-X znJy7g01>|gIETnm04^fpc8KWmkce49Wc@o4dzHvhLL{3(l-Nh)>Puwvm}t~QB6XvP zwrfOO@CDIm4c707XnTTaUJKFucw*|$;67Vo%MioFM&QE%qJj5`{d_Tz;SsS7EKx!p zu^qtttHfR!Mr1LZ*sfTjLI1_btt6WS0twGa7783}NwSW!M6>UUxFC#_J7TbZCb@dQ zLo~KU#05W-n>mi{Y;rpmOeV70MQ-MR*)Pb=95Ba|+{^)Uz96^Xy?{T{s7VrhVOBttza-xwBn3?W< zP;d`3_iR6u&@q`IG4Fu!P-fxkSfV^frts4}L=)4QGEZ!fbJ0re#ZjkyG z_Y*BBmd4e-Pc+Ovu-1u?HZ(iT00oZu#H zU61pV6Q%8?2Vo`ocIlICu#&|LRxY$6&=OV|+f6j-6L#oMT+G+7t_1_&&CRUub5zzZ zjP(n`1@VK}nd7!WiHGcpE`JcPVc)lyh3>9r%hsYmnpfnSuunVB19!47PWXbzM>5uYE;v$VwYw4t_K4^ullgqMnMnUwme}4*6gNw@ z(6l{`$p46JIR~lq88VYc9MOO}S(Q67Oj#$ZS_L9{XW5Qtu|$D;Wi=}j(5+i#wai+S z!bVo>htl{2$^Nc>N2YmzQE*_E925fWoj0nXA1NSwYx0 zV4z9-5R#4cm%AXtJWBy@F`rc12B7E-*=P zFyamZPFEb>_Yh{Cr8wFN#X@f=nw!xT4j(9fj*P)LDpT~MJdLvP?kD|(zU3u-ARLpyOKzKSJFm8O z27zt7F47wpIL+pVm4+dMtGt&FYB{@wpO{evTrFbOTOt4x*0!f>y8t%$ZxKob_m zw22GxP5kje)~Hzm-`FLC7aIAq*RI3;-Tb-AR+J!C=R0& zH7J48aA8%>RooXYl=;SDUN{S7A-#D07l@etl~8s8gsr*-)5aGoFe(QM6}IEi4$p75hmr%(Xh>nEQx`>1tI~2#E2f09B0^nMVYxPTWNaa(_{^xHGuW zpt=xYOC*`Ay7m+q+4ib#e+qMrtW~`zz=Z`tYKLwQBB4v|(1*E@@<8qChyJ(8QoCJ4 z;CWNjerqsUEviLy9I2ih_#V0@RUN2qLjPx~XEmZUrhr6stQB1B{Yb=!Tk1tuQJeW^ z)f;ys!>~H_f!U~aTC%$CR03SxE#e!$t6LJRF)zN+u;y1Y&|brT-;IoVG!Ex_@Ovjx z>+S<4M zajsR{avTy*_19i%KMLjYv^~xTao$3Ee=rhu3Dov)@!)VU2y~1|hdTumuVE-aX@0Wh z_>%;bZ?JW6Q6-F+tECB~qhU1q?=MwT_4)d=EaTz{x?!Wu`(&}%9rJw4owPPq<^v_~ zMyX>}uT&fCQ^u{ACX6UAjT&T%Z7Tb1y>v#A7xVW$ZwHqc3K#2)`fNk4ZdR^7f1%!( zm8Q$oml$+&;9<;om!SY5H7Ukuk5(d_jIz fnz0z4{@SQbH5iT9Sx~Ic0do&C?ZeSFD>DBB`)!+Q diff --git a/res/gta5sync_zh_TW.ts b/res/gta5sync_zh_TW.ts index e7af4e8..3fd9d73 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> æŽˆæ¬Šæ¢æ¬¾ç™¼å¸ƒ @@ -181,52 +181,35 @@ Pictures and Savegames - - Capacity: %1 - 大å°: %1 - - - - ? - ? - - - &Import... 匯入(&I)... - + &Overwrite 修改(&O) - + &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 圖片更新失敗 - - - Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. - æ¯å¼µ Snapmatic 大å°çš†ä¸åŒï¼Œé€šå¸¸è¼ƒå¤§çš„ Snapmatic 圖片å“質較佳。 - ImportDialog @@ -313,14 +296,14 @@ Pictures and Savegames - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! 自訂大頭貼 - + Custom Picture Custom Picture Description in SC, don't use Special Character! 自訂圖片 @@ -777,37 +760,37 @@ Y: %2 - + Export as &Picture... 匯出æˆåœ–片(&P)... - + Export as &Snapmatic... åŒ¯å‡ºæˆ Snapmatic(&S)... - + &Edit Properties... 編輯屬性(&E) ... - + &Overwrite Image... 修改圖片(&O)... - + Open &Map Viewer... 開啟地圖檢視器(&M)... - + Open &JSON Editor... 開啟 JSON 編輯器(&J)... @@ -1060,64 +1043,64 @@ Press 1 for Default View 匯出檔案中 %1 å…± %2 個檔案 - + - - - + + + Import... 匯入... - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + + + 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ï¼Œå› ç‚ºæª”æ¡ˆç„¡æ³•æ­£ç¢ºè§£æž @@ -1127,189 +1110,189 @@ Press 1 for Default View 開啟圖片 %1 å…± %2 - + Loading... 載入中... - + Snapmatic Loader Snapmatic 載入器 - + <h4>Following Snapmatic Pictures got repaired</h4>%1 <h4>下列的 Snapmatic 圖片已被更新</h4>%1 - + Importable files (%1) å¯åŒ¯å…¥çš„æª”案 (%1) - - + + GTA V Export (*.g5e) GTA V Export (*.g5e) - - + + Savegames files (SGTA*) éŠæˆ²å­˜æª” (SGTA*) - - + + Snapmatic pictures (PGTA*) Snapmatic 圖片 (PGTA*) - - - + + + No valid file is selected æ²’æœ‰é¸æ“‡æœ‰æ•ˆçš„æª”案 - - + + Import file %1 of %2 files 匯入檔案 %1 å…± %2 個 - + Import failed with... %1 %1 匯入失敗 - - + + Failed to read Snapmatic picture ç„¡æ³•è®€å– Snapmatic 圖片 - - + + Failed to read Savegame file 無法讀å–éŠæˆ²å­˜æª” - + Can't import %1 because file format can't be detected 無法匯入 %1ï¼Œå› ç‚ºç„¡æ³•æª¢æ¸¬è©²æª”æ¡ˆæ ¼å¼ - + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e 匯入 Snapmatic åœ–ç‰‡å¤±æ•—ï¼Œæª”æ¡ˆä¸æ˜¯ PGTA 開頭或附檔å䏿˜¯ .g5e - + Failed to import the Snapmatic picture, the picture is already in the game 匯入 Snapmatic åœ–ç‰‡å¤±æ•—ï¼Œåœ–ç‰‡å·²ç¶“åœ¨éŠæˆ²ä¸­ - + Failed to import the Snapmatic picture, can't copy the file into profile 匯入 Snapmatic 圖片失敗,無法將該檔案複製到設定檔中 - + Failed to import the Savegame, can't copy the file into profile åŒ¯å…¥éŠæˆ²å­˜æª”失敗,無法將該檔案複製到設定檔中 - + Failed to import the Savegame, no Savegame slot is left åŒ¯å…¥éŠæˆ²å­˜æª”å¤±æ•—ï¼Œæ²’æœ‰éŠæˆ²å­˜æª”æ¬„ä½ - - - - - + + + + + Export selected... 匯出所é¸... - - + + JPG pictures and GTA Snapmatic JPG 圖片和 GTA Snapmatic - - + + JPG pictures only åªæœ‰ JPG 圖片 - - + + GTA Snapmatic only åªæœ‰ GTA Snapmatic - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: %1 匯出 Snapmatic 圖片 %2<br><br>JPG 圖片å¯ä½¿ç”¨åœ–片檢視器開啟<br>GTA Snapmatic å¯ä»¥åŒ¯å…¥åˆ°éŠæˆ²ä¸­<br><br>匯出æˆ: - + Initialising export... åˆå§‹åŒ–... - + Export failed with... %1 %1 匯出失敗 - - + + No Snapmatic pictures or Savegames files are selected æœªé¸æ“‡ Snapmatic åœ–ç‰‡æˆ–éŠæˆ²å­˜æª” - - + + Remove selected ç§»é™¤æ‰€é¸ - + You really want remove the selected Snapmatic picutres and Savegame files? 你想移除所é¸çš„ Snapmatic 圖片/存檔嗎? - + Failed to remove all selected Snapmatic pictures and/or Savegame files ç„¡æ³•ç§»é™¤æ‰€é¸æ“‡çš„ Snapmatic 圖片/éŠæˆ²å­˜æª” - - - - - - + + + + + + No Snapmatic pictures are selected æœªé¸æ“‡ Snapmatic 圖片 - - - - - - + + + + + + %1 failed with... %2 @@ -1319,92 +1302,92 @@ Press 1 for Default View %2 - + Prepare Content for Import... - - + + Qualify as Avatar åˆæ ¼å¤§é ­è²¼ - - - - + + + + Patch selected... 修改所é¸... - - - - - - - - + + + + + + + + Patch file %1 of %2 files 修改檔案 %1 å…± %2 個檔案 - + Qualify %1 failed with... åˆæ ¼ - - + + Change Players... 更改玩家... - + Change Players %1 failed with... 更改玩家 - - - + + + Change Crew... 更改幫會... - + Failed to enter a valid Snapmatic Crew ID 輸入了無效的幫會 ID - + Change Crew %1 failed with... 更改幫會 - - - + + + Change Title... 更改標題... - + Failed to enter a valid Snapmatic title 輸入了無效的標題 - + Change Title %1 failed with... 更改標題 - + All profile files (*.g5e SGTA* PGTA*) 所有設定檔檔案 (*.g5e SGTA* PGTA*) @@ -1412,17 +1395,17 @@ Press 1 for Default View QApplication - + Font å­—é«” - + Selected Font: %1 鏿“‡çš„å­—é«”: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>歡迎使用 %1!</h4> 你想在開始å‰å…ˆè¨­å®š %1 å—Ž? @@ -1500,37 +1483,37 @@ Press 1 for Default View 刪除 - + &View 檢視(&V) - + &Export 匯出(&E) - + &Remove 移除(&R) - + &Select 鏿“‡(&S) - + &Deselect å–æ¶ˆé¸æ“‡(&D) - + Select &All 鏿“‡å…¨éƒ¨(&A) - + &Deselect All å–æ¶ˆé¸æ“‡å…¨éƒ¨(&D) @@ -1725,25 +1708,25 @@ Press 1 for Default View JSON 錯誤,未能更新 Snapmatic 屬性 - + Snapmatic Crew 幫會 - + New Snapmatic crew: 輸入新的幫會: - + Snapmatic Title 標題 - + New Snapmatic title: 輸入新的標題: @@ -1800,64 +1783,64 @@ 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 @@ -1918,52 +1901,52 @@ Press 1 for Default View 刪除 - + Edi&t 編輯(&E) - + Show &In-game åœ¨éŠæˆ²ä¸­é¡¯ç¤º(&I) - + Hide &In-game åœ¨éŠæˆ²ä¸­éš±è—(&I) - + &Export 匯出(&E) - + &View 檢視(&V) - + &Remove 移除(&R) - + &Select 鏿“‡(&S) - + &Deselect å–æ¶ˆé¸æ“‡(&D) - + Select &All 鏿“‡å…¨éƒ¨(&A) - + &Deselect All å–æ¶ˆé¸æ“‡å…¨éƒ¨(&D) @@ -1991,22 +1974,22 @@ Press 1 for Default View TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? - + %1 User Statistics - + Yes, I want include personal usage data. - + &OK 確定(&O) @@ -2083,7 +2066,7 @@ Press 1 for Default View - + &About %1 關於 %1(&A) @@ -2139,15 +2122,15 @@ Press 1 for Default View - + Select &GTA V Folder... 鏿“‡ GTA V 資料夾(&G)... - - + + Select GTA V Folder... 鏿“‡ GTA V 資料夾... @@ -2182,41 +2165,41 @@ Press 1 for Default View 更改玩家(&P)... - - + + Show In-game åœ¨éŠæˆ²ä¸­é¡¯ç¤º - - + + Hide In-game åœ¨éŠæˆ²ä¸­éš±è— - - + + Select Profile 鏿“‡è¨­å®šæª” - + Open File... 開啟檔案... - - - - + + + + Open File 開啟檔案 - + Can't open %1 because of not valid file format æ ¼å¼ç„¡æ•ˆï¼Œç„¡æ³•開啟 %1 From 7b68bb10b518977cd747f0af8b1cf48dc5034f76 Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 17 Jul 2018 16:41:38 +0200 Subject: [PATCH 159/359] add ability to change picture while import process --- ImageEditorDialog.cpp | 2 +- ImageEditorDialog.ui | 9 +++ ImportDialog.cpp | 89 +++++++++++++++++++++- ImportDialog.h | 6 +- ImportDialog.ui | 21 +++++- JsonEditorDialog.ui | 6 ++ MapLocationDialog.ui | 17 ++++- ProfileInterface.cpp | 4 +- res/gta5sync.ts | 170 ++++++++++++++++++++++++++++++++---------- res/gta5sync_de.qm | Bin 44116 -> 45791 bytes res/gta5sync_de.ts | 162 +++++++++++++++++++++++++++++++--------- res/gta5sync_en_US.qm | Bin 24596 -> 24546 bytes res/gta5sync_en_US.ts | 162 +++++++++++++++++++++++++++++++--------- res/gta5sync_fr.qm | Bin 41887 -> 42522 bytes res/gta5sync_fr.ts | 162 +++++++++++++++++++++++++++++++--------- res/gta5sync_ru.qm | Bin 42300 -> 42826 bytes res/gta5sync_ru.ts | 162 +++++++++++++++++++++++++++++++--------- res/gta5sync_uk.qm | Bin 43238 -> 43809 bytes res/gta5sync_uk.ts | 162 +++++++++++++++++++++++++++++++--------- res/gta5sync_zh_TW.qm | Bin 32466 -> 32875 bytes res/gta5sync_zh_TW.ts | 162 +++++++++++++++++++++++++++++++--------- 21 files changed, 1024 insertions(+), 272 deletions(-) diff --git a/ImageEditorDialog.cpp b/ImageEditorDialog.cpp index fa86959..e634476 100644 --- a/ImageEditorDialog.cpp +++ b/ImageEditorDialog.cpp @@ -151,7 +151,7 @@ fileDialogPreOpen: //Work? delete importImage; goto fileDialogPreOpen; } - ImportDialog *importDialog = new ImportDialog(this); + ImportDialog *importDialog = new ImportDialog(profileName, this); importDialog->setImage(importImage); importDialog->setModal(true); importDialog->show(); diff --git a/ImageEditorDialog.ui b/ImageEditorDialog.ui index 13dd575..8278072 100644 --- a/ImageEditorDialog.ui +++ b/ImageEditorDialog.ui @@ -55,6 +55,9 @@ + + Import picture + &Import... @@ -75,6 +78,9 @@ + + Apply changes + &Overwrite @@ -82,6 +88,9 @@ + + Discard changes + &Close diff --git a/ImportDialog.cpp b/ImportDialog.cpp index afc2373..9b876d0 100644 --- a/ImportDialog.cpp +++ b/ImportDialog.cpp @@ -43,14 +43,16 @@ #define snapmaticAvatarPlacementW 145 #define snapmaticAvatarPlacementH 66 -ImportDialog::ImportDialog(QWidget *parent) : - QDialog(parent), +ImportDialog::ImportDialog(QString profileName, QWidget *parent) : + QDialog(parent), profileName(profileName), ui(new Ui::ImportDialog) { // Set Window Flags setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); ui->setupUi(this); + ui->cmdOK->setDefault(true); + ui->cmdOK->setFocus(); importAgreed = false; watermarkAvatar = true; watermarkPicture = false; @@ -103,6 +105,11 @@ ImportDialog::ImportDialog(QWidget *parent) : } #endif + // Options menu + optionsMenu = new QMenu(this); + optionsMenu->addAction(tr("&Import new Picture..."), this, SLOT(importNewPicture())); + ui->cmdOptions->setMenu(optionsMenu); + setMaximumSize(sizeHint()); setMinimumSize(sizeHint()); setFixedSize(sizeHint()); @@ -110,6 +117,7 @@ ImportDialog::ImportDialog(QWidget *parent) : ImportDialog::~ImportDialog() { + delete optionsMenu; delete ui; } @@ -247,6 +255,75 @@ void ImportDialog::processWatermark(QPainter *snapmaticPainter) snapmaticPainter->drawImage(0, 0, textWatermark); } +void ImportDialog::importNewPicture() +{ + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("FileDialogs"); + bool dontUseNativeDialog = settings.value("DontUseNativeDialog", false).toBool(); + settings.beginGroup("ImportCopy"); + +fileDialogPreOpen: //Work? + QFileDialog fileDialog(this); + fileDialog.setFileMode(QFileDialog::ExistingFile); + fileDialog.setViewMode(QFileDialog::Detail); + fileDialog.setAcceptMode(QFileDialog::AcceptOpen); + fileDialog.setOption(QFileDialog::DontUseNativeDialog, dontUseNativeDialog); + fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); + fileDialog.setWindowTitle(QApplication::translate("ProfileInterface", "Import...")); + fileDialog.setLabelText(QFileDialog::Accept, QApplication::translate("ProfileInterface", "Import")); + + // Getting readable Image formats + QString imageFormatsStr = " "; + for (QByteArray imageFormat : QImageReader::supportedImageFormats()) + { + imageFormatsStr += QString("*.") % QString::fromUtf8(imageFormat).toLower() % " "; + } + + QStringList filters; + filters << QApplication::translate("ProfileInterface", "All image files (%1)").arg(imageFormatsStr.trimmed()); + filters << QApplication::translate("ProfileInterface", "All files (**)"); + fileDialog.setNameFilters(filters); + + QList sidebarUrls = SidebarGenerator::generateSidebarUrls(fileDialog.sidebarUrls()); + + fileDialog.setSidebarUrls(sidebarUrls); + fileDialog.setDirectory(settings.value(profileName % "+Directory", StandardPaths::documentsLocation()).toString()); + fileDialog.restoreGeometry(settings.value(profileName % "+Geometry", "").toByteArray()); + + if (fileDialog.exec()) + { + QStringList selectedFiles = fileDialog.selectedFiles(); + if (selectedFiles.length() == 1) + { + QString selectedFile = selectedFiles.at(0); + QString selectedFileName = QFileInfo(selectedFile).fileName(); + + QFile snapmaticFile(selectedFile); + if (!snapmaticFile.open(QFile::ReadOnly)) + { + QMessageBox::warning(this, QApplication::translate("ProfileInterface", "Import"), QApplication::translate("ProfileInterface", "Can't import %1 because file can't be open").arg("\""+selectedFileName+"\"")); + goto fileDialogPreOpen; + } + QImage *importImage = new QImage(); + QImageReader snapmaticImageReader; + snapmaticImageReader.setDecideFormatFromContent(true); + snapmaticImageReader.setDevice(&snapmaticFile); + if (!snapmaticImageReader.read(importImage)) + { + QMessageBox::warning(this, QApplication::translate("ProfileInterface", "Import"), QApplication::translate("ProfileInterface", "Can't import %1 because file can't be parsed properly").arg("\""+selectedFileName+"\"")); + delete importImage; + goto fileDialogPreOpen; + } + setImage(importImage); + } + } + + settings.setValue(profileName % "+Geometry", fileDialog.saveGeometry()); + settings.setValue(profileName % "+Directory", fileDialog.directory().absolutePath()); + settings.endGroup(); + settings.endGroup(); +} + QImage ImportDialog::image() { return newImage; @@ -272,16 +349,22 @@ void ImportDialog::setImage(QImage *image_) } else if (image_->width() > snapmaticResolutionW && image_->width() > image_->height()) { + insideAvatarZone = false; + ui->cbAvatar->setChecked(false); workImage = image_->scaledToWidth(snapmaticResolutionW, Qt::SmoothTransformation); delete image_; } else if (image_->height() > snapmaticResolutionH && image_->height() > image_->width()) { + insideAvatarZone = false; + ui->cbAvatar->setChecked(false); workImage = image_->scaledToHeight(snapmaticResolutionH, Qt::SmoothTransformation); delete image_; } else { + insideAvatarZone = false; + ui->cbAvatar->setChecked(false); workImage = *image_; delete image_; } @@ -306,7 +389,7 @@ void ImportDialog::on_cbIgnore_toggled(bool checked) void ImportDialog::on_cbAvatar_toggled(bool checked) { - if (workImage.width() == workImage.height() && !checked) + if (!workImage.isNull() && workImage.width() == workImage.height() && !checked) { if (QMessageBox::No == QMessageBox::warning(this, tr("Snapmatic Avatar Zone"), tr("Are you sure to use a square image outside of the Avatar Zone?\nWhen you want to use it as Avatar the image will be detached!"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No)) { diff --git a/ImportDialog.h b/ImportDialog.h index c58b9f5..a0f4568 100644 --- a/ImportDialog.h +++ b/ImportDialog.h @@ -20,6 +20,7 @@ #define IMPORTDIALOG_H #include +#include namespace Ui { class ImportDialog; @@ -30,7 +31,7 @@ class ImportDialog : public QDialog Q_OBJECT public: - explicit ImportDialog(QWidget *parent = 0); + explicit ImportDialog(QString profileName, QWidget *parent = 0); ~ImportDialog(); QImage image(); QString getImageTitle(); @@ -39,6 +40,7 @@ public: private slots: void processImage(); + void importNewPicture(); void on_cbIgnore_toggled(bool checked); void on_cbAvatar_toggled(bool checked); void on_cmdCancel_clicked(); @@ -52,6 +54,7 @@ private slots: void on_cbWatermark_toggled(bool checked); private: + QString profileName; Ui::ImportDialog *ui; QImage avatarAreaImage; QString backgroundPath; @@ -60,6 +63,7 @@ private: QImage workImage; QImage newImage; QColor selectedColour; + QMenu *optionsMenu; bool insideAvatarZone; bool watermarkPicture; bool watermarkAvatar; diff --git a/ImportDialog.ui b/ImportDialog.ui index a4e76a8..a6c31c4 100644 --- a/ImportDialog.ui +++ b/ImportDialog.ui @@ -141,7 +141,7 @@ - + @@ -170,6 +170,9 @@ + + Select background colour + ... @@ -220,6 +223,9 @@ + + Select background image + ... @@ -227,6 +233,9 @@ + + Remove background image + X @@ -290,6 +299,16 @@ + + + + Import options + + + &Options + + + diff --git a/JsonEditorDialog.ui b/JsonEditorDialog.ui index 333c2d0..a52f087 100644 --- a/JsonEditorDialog.ui +++ b/JsonEditorDialog.ui @@ -112,6 +112,9 @@ 0 + + Apply changes + &Save @@ -125,6 +128,9 @@ 0 + + Discard changes + &Close diff --git a/MapLocationDialog.ui b/MapLocationDialog.ui index d62edf0..cd46742 100644 --- a/MapLocationDialog.ui +++ b/MapLocationDialog.ui @@ -134,6 +134,9 @@ color: rgb(255, 255, 255); Qt::NoFocus + + Close viewer + &Close @@ -160,6 +163,9 @@ color: rgb(255, 255, 255); Qt::NoFocus + + Apply new position + &Apply @@ -173,6 +179,9 @@ color: rgb(255, 255, 255); Qt::NoFocus + + Revert old position + &Revert @@ -186,8 +195,11 @@ color: rgb(255, 255, 255); Qt::NoFocus + + Select new position + - &Set + &Select false @@ -199,6 +211,9 @@ color: rgb(255, 255, 255); Qt::NoFocus + + Quit select position + &Done diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 2dda46e..737c475 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -737,7 +737,7 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime delete picture; return false; } - ImportDialog *importDialog = new ImportDialog(this); + ImportDialog *importDialog = new ImportDialog(profileName, this); importDialog->setImage(snapmaticImage); importDialog->setModal(true); importDialog->show(); @@ -922,7 +922,7 @@ bool ProfileInterface::importImage(QImage *snapmaticImage, QDateTime importDateT if (picture->readingPicture(true, false, true, false)) { bool success = false; - ImportDialog *importDialog = new ImportDialog(this); + ImportDialog *importDialog = new ImportDialog(profileName, this); importDialog->setImage(snapmaticImage); importDialog->setModal(true); importDialog->show(); diff --git a/res/gta5sync.ts b/res/gta5sync.ts index 284f821..f522acb 100644 --- a/res/gta5sync.ts +++ b/res/gta5sync.ts @@ -172,16 +172,31 @@ Pictures and Savegames + Import picture + + + + &Import... - + + Apply changes + + + + &Overwrite - + + Discard changes + + + + &Close @@ -221,7 +236,7 @@ Pictures and Savegames - + Ignore Aspect Ratio @@ -237,91 +252,121 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> - + Select background colour + + + + + ... - - - + + + Background Image: - + + Select background image + + + + + Remove background image + + + + X - + Force Colour in Avatar Zone - - Import picture + + Import options - - &OK - - - - - Discard picture + + &Options + Import picture + + + + + &OK + + + + + Discard picture + + + + &Cancel - + + &Import new Picture... + + + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! - + 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 - + File Background Image: File @@ -336,11 +381,21 @@ When you want to use it as Avatar the image will be detached! + Apply changes + + + + &Save - + + Discard changes + + + + &Close @@ -359,26 +414,51 @@ When you want to use it as Avatar the image will be detached! + Close viewer + + + + &Close - + + Apply new position + + + + &Apply - + + Revert old position + + + + &Revert - - &Set + + Select new position - + + &Select + + + + + Quit select position + + + + &Done @@ -1028,7 +1108,8 @@ Press 1 for Default View - + + @@ -1039,9 +1120,12 @@ Press 1 for Default View - - - + + + + + + @@ -1061,14 +1145,16 @@ Press 1 for Default View - + + All image files (%1) - + + All files (**) @@ -1076,14 +1162,16 @@ Press 1 for Default View - + + Can't import %1 because file can't be open - + + Can't import %1 because file can't be parsed properly diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index 2019e56886f740b789c26ef1b3d8a0058f8086d5..b56d18eaa80b8f1dc7f36432d0c204b9f7be91dd 100644 GIT binary patch delta 3921 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 F{{wDum#P2& diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index 6a5efca..b376283 100644 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -188,16 +188,31 @@ Snapmatic Bilder und Spielständen + Import picture + Bild importieren + + + &Import... &Importieren... - + + Apply changes + Änderungen übernehmen + + + &Overwrite &Überschreiben - + + Discard changes + Änderungen verwerfen + + + &Close S&chließen @@ -221,7 +236,7 @@ Snapmatic Bilder und Spielständen - + Ignore Aspect Ratio Seitenverhältnis ignorieren @@ -247,92 +262,122 @@ Snapmatic Bilder und Spielständen - - + + Background Colour: <span style="color: %1">%1</span> Hintergrundfarbe: <span style="color: %1">%1</span> - + Select background colour + Hintergrundfarbe auswählen + + + + ... ... - + + Select background image + Hintergrundbild auswählen + + + + Remove background image + Hintergrundbild entfernen + + + Background Image: %1 Hintergrundbild: %1 - + X X - + Force Colour in Avatar Zone Erzwinge Farbe in Avatar Zone - + + Import options + Import Optionen + + + + &Options + &Optionen + + + Import picture Bild importieren - + &OK &OK - + Discard picture Bild verwerfen - + &Cancel Abbre&chen - - - + + + Background Image: Hintergrundbild: - + + &Import new Picture... + Neues Bild &importieren... + + + 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 - + 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 @@ -347,11 +392,21 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! + Apply changes + Änderungen übernehmen + + + &Save &Speichern - + + Discard changes + Änderungen verwerfen + + + &Close S&chließen @@ -370,26 +425,51 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! + Close viewer + Ansicht schließen + + + &Close S&chließen - + + Apply new position + Neue Position festlegen + + + &Apply &Übernehmen - + + Revert old position + Alte Position wiederherstellen + + + &Revert &Zurücksetzen - - &Set - &Ändern + + Select new position + Neue Position auswählen - + + &Select + Au&swählen + + + + Quit select position + Position auswählen verlassen + + + &Done &Fertig @@ -1055,7 +1135,8 @@ Drücke 1 für Standardmodus - + + @@ -1066,9 +1147,12 @@ Drücke 1 für Standardmodus - - - + + + + + + @@ -1105,14 +1189,16 @@ Drücke 1 für Standardmodus - + + All image files (%1) Alle Bilddateien (%1) - + + All files (**) @@ -1147,14 +1233,16 @@ Drücke 1 für Standardmodus - + + 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 diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm index f16e2cd1f37c7e00c0efe9e303adb28eaeade4a2..1db696b2ad427b3f2a5e2ab80037b9a039b6a2cf 100644 GIT binary patch delta 2910 zcmXX|dt6QF8h+Q>Ywf)*d+#M;Q&ULMO{Lo|mn6ENnsgBzA-6L#huj@wusI=|#!Q;j zkb4w5E?wNB6x(Ic&SfwdbA+K^gCQNpG-IBA>-_bs%lEDKeV^xf-*0_$hH0v0zP7iN z645v!{W;)bBCV*R!@r2wl|;r`BJL)U{a7OYW1?YEMD9UE$~q#iK}3S0qVgxv03+@L zRP5A;Xwq4t$brP=?8LVmfrp6fw8ZWGoM_}i;;K0!OSnLs4HskP5!dKOB()KDE19Uv zJ{8S=#1BTm@Kwae0J}yJZ@WMg)>p;YlO*g+#CjXK`y=VT4^)inOr9Nql-uNaG?K{B zPM#eB;~tY|N4$8MJP~g=#s8f=fAPbE4dhj5#X>vsIz5u8*IV-H2oyS3#h6z#Bm^Jw zy+e`H!N|v3DS9<9XkK1AW3qVA*n{;%-GV9Y&^4qng3`{QobF3$*3ZkqpG20_F+`@d zv|`0>qRv^gD%6K4u$caR=sMBR`?P189g#VOj=f(<)O!wnR|zitoTyh&tV7N{EHf8$H|&c7xhM@WF-U>s-KXYsCl3@HaE@wS-5Z-WKrfoo16Sq4O&g>g~JlLYIzD8&X23v9%#Wu8E0Gc4Jvt|;viYYQHh-GcoyEL zanI7L(U~8(ch@fiFLLcCgTO!p&voqcd&k?C7ND{>D!NE~;I40pqQ2nM8tRdFJ3nj3 zR3h(%{BjWtMRnmVJ}DSU8~7q`3o0Cbk1tvk2yK4kcfL<1>fg*4uN;pKwDD!^dT6+t zFEc|DH!Xj7|7qM`=5Mg*CAY^~-dsV%OxAY&)dyBD()Nh?4c5M+b+Q`K@&4MxbWrV6 zuAR!xCJG*_Jyr_l?C)yNJpy)1*Itc}az#aj+J_7%?6yPu{?zx#%%qdr7C^&EDh9f% zICzQ9o+}|rjMq6nh=&)vbnfkE(e#sa{r>}W3CKIm_p~(X{_zlRwW%t)C+lY4Zh}QO z>6RVb4To{MueUEm)S0^chJ2LSO;=o(iFBXpj*NamU41<) z-^E4u-?&6LEJ^p|1au3w>RucOAWB-T`|~KA7I8x0qpYxWY>MDy^#S3P!m#(nQ2cWt z;x%S;T&NIRYC{J*2(xw~kpa2F?7Hdbsi(ph55c=zv9K%?eD^ICR`mV>dI&F%sZQRP2%{`ujm>mqsyoT_h6B5Q7^}V0Jwc zqYE~Gp(-&h_Y$7}DW>Zxz;PZKn>F%&U@=m6f#}Ru0_U% z&&2gn4=~KSi8($&2)tA*u8W6|y~HwKIKlIscqttFLjMpiKmLH}!ibF%M#1{G#aljR zw8lK~W!h^<6)rK&NO)k0#I$ta50as)3li{=dc`4LcTsX%;WiRlCrN&R&~iw-G-yT< zutCMxzA7eW=l!8GS@NYZPvHbh;*Jyj8 zQx%niD!P`c70;%O=r%aTk(JY~ zfw<6bne{jHl0~kWWrgBNDY!s@Bsck7 zSTn|TjBHzg3KA>j>szPeSlA`s$j4v82wrY7O-1G2^8c#ug0Z(M+P%?pnO^-iZ8@PB30d%3rQq3-(0ed3Urrk{TPXrQmV ze(AA^81Lo!b;I)!V2-|^Kc4fh`XYvdl?zmi>8vk`LSou%eX)YdgZAoAzJvq`+Prkh zWQozYY=e`WPUzd`V)vK}2FC|JSbfak*o>ARVK%s%(b|f$!Sf!XjF@dOufu4R*Q;p1 z#4sd08xF}ggd6HGLd=Gw8tCBNVo0`!uU!=tgH49TH=#php&_>vPI@FUOzmFsm|W z12X2$D}@)pXU{xk*M}4gxj^N>RWM)*Qp%QuVc5-4&K?Jkz6DBSLlqcXqcpi3fj~2r iSI(%^fmhnLfVn|4kWF%ritpqp#=Ou3xgx`%BJwX+@EWrK delta 2935 zcmX9=X;>6j7QIzn)!nspw+Pq*K?M~N5Re^_#f431L>3pKMnwFg1GuA^Q5qG;jkpYP ziD5J3dOUk8 z*v&-rRV7jQG-A)ki<$s>QQgYo|g@qR6dNG>F!GT=60tNn{V6+_t z2jC!2mcrA)%;;*0Tmkegq$t0~M9e#iN_E8kAc{GN_oEVN?BNQc9#bgg$SoqLEK0eI zcs=)0=I=RXQ0qhHabt*#$0;{=H&ORPlo#kuV_#fkq5dOf0l3WlqH&2c=$2Z3hBI<}tTNWf6Hz zWm>oOBC@e(Uc7ipB-k-8b;qE;iFG(%fb(qFcsKaRVIn)Rx}7Mxn*BOq84@1NX0Avg zivN$iPBk&DFUdtiZ7#{M{EFg89{FklM1Z($&)EK;yvv4SBD1s7Qlb1i$oZxig8 zsG$Eb1x;tzlGJ9RA&b~kr+kTqCbOq2`Vs|Iv1QyqqR_i+`33M3e~`Vl8TRe#!Pd^f zx-k`O-HU&r1=`q0*J2=0Cfl^viYWFd+wwdaR$j}tKd6D-li3d=P`+7+VE^>ABpUfi zCG5RR6w{>YarF~X@2M)A`B-2xQRTa!oya7sl1o+**{xB{$aX-W;i`-x@cG4mRVzM2 z2-SGi`f&n;Z&aQ3MPiOuRF$dVZD63PYCZP5u2t3Kf>+fQRmToEN3!MAQWd39?;e~s zsS*6Oan5tP6Zy%U@1GEGKnCYO3>!lha`6E>z`$?Z(uNQO?#8XMNJR7IartW?g!V1> zZOS?{JaN0j;k-WfT#4HrFt<;^=#BytXEdj9WjlP}!v?N4`#U20o(cx}DmZE}S6jLq z-}AWVlg`8F1G)G0*U_P`xsT_35jBJ7y7morBosUQk= z;xm6tBXZlp=Ln!9BA7S3Cxd5s9bf2%az^reVIC5R(C|AulZf0c`J$y0(19QL5_Sy) zyUCaMga7`X{Lup!@!ZbeX3;oKdNuEV0-ZTUZT-?6qu?jCP1FaXC{}G>rANn4R3}UV zukH`kY3wY}n5#as4>VbG>MKtYDUo`tRNsu~hZhy<#|-%D@w2+~!d(naqeg6>55ZO| z=#!w}&?1c$S4@#gsdyKE@aSA%;XlDJ= z1V3KZEIGUzc5>Hj*s%anH)}T4Y(kk~nxgV7poQjG%pXLy9hwsd-(cM;&8d3O;{9Gz zQ2~Ej#%g{uCBRNgG|gu*U;NrMe;o8CN<5krrE&9)M}leNH4G?cVUh;I8y^W%w}7GGZ-tDgS12%F$e8{L)G#%|+zu~{ z$o0a?OUPI^Q&%4etKv=t7|_4O&tUD7ELYK7ko(^^9+wOnx}^%2)34(7Rs>4?UA&P#AEPE+yg8f!W1Luvc_Hx-$1(CaJ=#@JFFUGIUYt zJ6*CliA1``NWRqwH;`GGP(v^@FjOw{k?R;dP&?wdaI~}9yhID%q{xppAkeZBX zD0{5*?)-hw)uCYbUNW~W9JD0#mW5W7<33BaID8A2*&*3#r6tM_mF*?)Y;i%hzhDc8 z1<0<>Z$Qs*c}ia-rWzp6ivfBh$cxWR#%1=fz+N<(%jH6b!(1L%-3}YsKaoGq!Kq_j>FgTavHy(Dt_2fd zWU9{DADwQ9(z!g?gy-*d{;M%5r8Np#73qS*R$`>MT+)T<%F*hny2LW5Fvwb$WCg$W z3slf=m~PP>s1RPE+qe(q_-xP}84Fb-FYC@+oB;o}D(KmwtDInshI^^!aMjVEBYL~5 zO;9gK?_)p*_wCe2ghGAsYyGSo@MxQ%KRIPa*GN(S^@9T6=`Utsqa$aqoe2g!j~hZ> zgU`@ih7{*4B=pHJbxu1Ds4`^L9|yl}hS}?oF!z&TYc=@nebKP%b22)2vf%)V`g%2F`vQEsTKIR(a!8k!uBVgF{st6tF-$i&0Y{sX8B+Ast58F8XQnyTkG Nr^NIVpKP9n{~t?w9xng@ diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index d6099af..349ee1e 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -178,16 +178,31 @@ Pictures and Savegames + Import picture + + + + &Import... - + + Apply changes + + + + &Overwrite - + + Discard changes + + + + &Close @@ -211,14 +226,19 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> Background Color: <span style="color: %1">%1</span> - + Select background colour + + + + + ... @@ -234,7 +254,7 @@ Pictures and Savegames - + Ignore Aspect Ratio @@ -249,79 +269,104 @@ Pictures and Savegames - + Background Image: %1 - + + Select background image + + + + + Remove background image + + + + X - + Force Colour in Avatar Zone Force Color in Avatar Zone - + + Import options + + + + + &Options + + + + Import picture - + &OK - + Discard picture - + &Cancel - - - + + + Background Image: - + + &Import new Picture... + + + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! - + 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 @@ -336,11 +381,21 @@ When you want to use it as Avatar the image will be detached! + Apply changes + + + + &Save - + + Discard changes + + + + &Close @@ -359,26 +414,51 @@ When you want to use it as Avatar the image will be detached! + Close viewer + + + + &Close - + + Apply new position + + + + &Apply - + + Revert old position + + + + &Revert - - &Set - + + Select new position + - + + &Select + + + + + Quit select position + + + + &Done @@ -1048,7 +1128,8 @@ Press 1 for Default View - + + @@ -1059,9 +1140,12 @@ Press 1 for Default View - - - + + + + + + @@ -1104,14 +1188,16 @@ Press 1 for Default View - + + All image files (%1) - + + All files (**) @@ -1151,14 +1237,16 @@ Press 1 for Default View - + + Can't import %1 because file can't be open - + + Can't import %1 because file can't be parsed properly diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index db3608b5b0cbb2d7a5c229cee47a460a3ba880a9..ca934720260141465a527a7df5b4c91227739357 100644 GIT binary patch delta 3133 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 delta 3075 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 ar5ZaAay@@y-)XUFTW$L}9Zl$4X8i|#u5+pY diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index 6f83e0b..b562fc0 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -188,16 +188,31 @@ et les fichiers de sauvegarde de Grand Theft Auto V + Import picture + Importer l'image + + + &Import... &Importer... - + + Apply changes + Appliquer les changements + + + &Overwrite &Remplacer - + + Discard changes + Annuler les changements + + + &Close &Fermer @@ -221,7 +236,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V - + Ignore Aspect Ratio Déverrouiller le ratio d'aspect @@ -247,92 +262,122 @@ 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> - + Select background colour + + + + + ... ... - + + Select background image + + + + + Remove background image + + + + Background Image: %1 Image de fond : %1 - + X X - + Force Colour in Avatar Zone Forcer la couleur dans la Zone d'Avatar - + + Import options + + + + + &Options + + + + Import picture Importer l'image - + &OK &OK - + Discard picture Supprimer l'image - + &Cancel A&nnuler - - - + + + Background Image: Image de fond : - + + &Import new Picture... + + + + 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é - + 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 @@ -347,11 +392,21 @@ Si vous l'utilisez comme Avatar, l'image sera détachée ! + Apply changes + Appliquer les changements + + + &Save &Sauvegarder - + + Discard changes + Annuler les changements + + + &Close &Fermer @@ -370,26 +425,51 @@ Si vous l'utilisez comme Avatar, l'image sera détachée ! + Close viewer + Fermer la visionneuse + + + &Close &Fermer - + + Apply new position + + + + &Apply &Appliquer - + + Revert old position + + + + &Revert &Revenir - - &Set - &Définir + + Select new position + - + + &Select + &Sélectionner + + + + Quit select position + + + + &Done &Terminer @@ -1066,7 +1146,8 @@ Appuyer sur 1 pour le mode par défaut - + + @@ -1077,9 +1158,12 @@ Appuyer sur 1 pour le mode par défaut - - - + + + + + + @@ -1111,14 +1195,16 @@ Appuyer sur 1 pour le mode par défaut - + + All image files (%1) Toutes les images (%1) - + + All files (**) @@ -1165,14 +1251,16 @@ Appuyer sur 1 pour le mode par défaut - + + 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 diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index ac02bb3fe5e556c32b4d5fa6544593beeea75e37..c45bd06c1e02c92a4ff8cb9a33a56039a64d53e9 100644 GIT binary patch delta 3121 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 delta 3060 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 MYui%a&aKk^2U9O@nE(I) diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index fb077b2..0b761a2 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -190,16 +190,31 @@ Pictures and Savegames + Import picture + Импортировать картинку + + + &Import... &Импортировать... - + + Apply changes + Применить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ + + + &Overwrite &ПерезапиÑать - + + Discard changes + Отвергнуть Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ + + + &Close &Закрыть @@ -223,7 +238,7 @@ Pictures and Savegames - + Ignore Aspect Ratio Игнорировать Ñоотн. Ñторон @@ -249,93 +264,123 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> Цвет фона: <span style="color: %1">%1</span> - + Select background colour + + + + + ... ... - + + Select background image + + + + + Remove background image + + + + Background Image: %1 Ð¤Ð¾Ð½Ð¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ°: %1 - + X latin X X - + Force Colour in Avatar Zone Задать цвет в зоне аватарки - + + Import options + + + + + &Options + + + + Import picture Импортировать картинку - + &OK &ОК - + Discard picture Отклонить картинку - + &Cancel Я не уверен наÑчет горÑчих клавиш... От&мена - - - + + + Background Image: Ð¤Ð¾Ð½Ð¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ°: - + + &Import new Picture... + + + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! Свой Ðватар - + Custom Picture Custom Picture Description in SC, don't use Special Character! Ð¡Ð²Ð¾Ñ ÐšÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ° - + 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 Файл @@ -350,11 +395,21 @@ When you want to use it as Avatar the image will be detached! + Apply changes + Применить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ + + + &Save &Сохранить - + + Discard changes + Отвергнуть Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ + + + &Close &Закрыть @@ -373,26 +428,51 @@ When you want to use it as Avatar the image will be detached! + Close viewer + Закрыть проÑмотрщик + + + &Close &Закрыть - + + Apply new position + + + + &Apply &Применить - + + Revert old position + + + + &Revert &Откатить - - &Set - &Изменить + + Select new position + - + + &Select + + + + + Quit select position + + + + &Done &Готово @@ -1060,7 +1140,8 @@ Press 1 for Default View - + + @@ -1071,9 +1152,12 @@ Press 1 for Default View - - - + + + + + + @@ -1105,7 +1189,8 @@ Press 1 for Default View - + + All files (**) @@ -1157,21 +1242,24 @@ Press 1 for Default View - + + 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, файл не может быть правильно обработан diff --git a/res/gta5sync_uk.qm b/res/gta5sync_uk.qm index 6afd7db8d35122a2568e4e4fa2e6d585ea07dc60..d271641aab8230bfee70588f6f889d89a0032b7c 100644 GIT binary patch delta 3145 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 Z(Ad7n_56tL6O%S2^y*UH&?{>7{{c>Va>M`t diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts index 6df5750..4c095c1 100644 --- a/res/gta5sync_uk.ts +++ b/res/gta5sync_uk.ts @@ -182,16 +182,31 @@ Pictures and Savegames + Import picture + Імпортувати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ + + + &Import... &Імпорт... - + + Apply changes + ЗаÑтоÑувати зміни + + + &Overwrite &ПерезапиÑати - + + Discard changes + СкаÑувати зміни + + + &Close &Закрити @@ -231,7 +246,7 @@ Pictures and Savegames - + Ignore Aspect Ratio Ігнорувати ÑÐ¿Ñ–Ð²Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ Ñторін @@ -247,92 +262,122 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> Фоновий колір: <span style="color: %1">%1</span> - + Select background colour + + + + + ... ... - - - + + + Background Image: Фонове зображеннÑ: - + + Select background image + + + + + Remove background image + + + + X Ð¥ - + Force Colour in Avatar Zone ПримуÑовий колір в зоні Ðватару - + + Import options + + + + + &Options + + + + Import picture Імпортувати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ - + &OK &OK - + Discard picture Відхилити Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ - + &Cancel &СкаÑувати - + + &Import new Picture... + + + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! КориÑтувацький Ðватар - + Custom Picture Custom Picture Description in SC, don't use Special Character! КориÑтувацьке Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ - + 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 - + File Background Image: File Файл @@ -347,11 +392,21 @@ When you want to use it as Avatar the image will be detached! + Apply changes + ЗаÑтоÑувати зміни + + + &Save &Зберегти - + + Discard changes + СкаÑувати зміни + + + &Close &Закрити @@ -370,26 +425,51 @@ When you want to use it as Avatar the image will be detached! + Close viewer + Закрити переглÑдач + + + &Close &Закрити - + + Apply new position + + + + &Apply &ЗаÑтоÑувати - + + Revert old position + + + + &Revert &Повернути - - &Set - &Змінити + + Select new position + - + + &Select + &Ð’Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ + + + + Quit select position + + + + &Done &Готово @@ -1046,7 +1126,8 @@ Press 1 for Default View - + + @@ -1057,9 +1138,12 @@ Press 1 for Default View - - - + + + + + + @@ -1079,14 +1163,16 @@ Press 1 for Default View - + + All image files (%1) Файли зображень (%1) - + + All files (**) @@ -1094,14 +1180,16 @@ Press 1 for Default View - + + Can't import %1 because file can't be open Ðеможливо імпортувати %1, оÑкільки файл не може бути відкритий - + + Can't import %1 because file can't be parsed properly Ðеможливо імпортувати %1, оÑкільки файл неможливо розібрати правильно diff --git a/res/gta5sync_zh_TW.qm b/res/gta5sync_zh_TW.qm index 662cd22e0e61732138176e73e51a7fbecb6e308c..14d54eb7a92500cf8a1b090e039c06757bd3ade6 100644 GIT binary patch delta 3137 zcmXArdt4RO7RT4jnK^T2<~&4!qarVXLLfk%T7oF?5&=a7L_t6xk(UUP-NJ*RAH&PF z>||O|N}^y8UPbYN;uYnhsUT=r*|jTb$;C&eq?zgc;r#W5J!ke>`?r2;?dkiA8LD7E zur%EwqGY1cS>P%nu~wloL&UBjvU)Dc z4I{EFBe#)w`4YJyo{92<$ZaHGejB;n_6F~g`_@hr0*}HJR=g#uEAFFw&16L~+j)W+j6rEaY`D zw!4wBO)^vB`;aIplPRxBBXX-}Hcfk#$nOJYQ`vPS_O`;&!wScqX6lKBM_QNzv-c4N z@=VVoB(TJWxj3tkDEvM%^r;=u#MR85J2!~*>zH44dx^p}u#RnJ>`&~RG><_@e2`t# zH4Ldd*`@LC;sicy!MX&ZB6oJh7rTjGTftU);koocp~b80_VmdxT%5wVD7N9vsi>`5 zq3?EuNuQX{vv#J@@3CJ6Y{uhYh0ZT2oN_~9>{x|)X0|EgCQ-bBJ#fIEC}B3++Tlbr z?_;)|n*`z2?1`fgvdGMy`565$Ig{-v#_x)??1eiY63HvspUy<1vaRgEE=!_iB0G3% zJ}j2LksZF$O%&wJ{t*gc^!wRAy~m(2dR5}CZ;6&(R#~5ZhV%TT8dr+v6VIspR}N!? zO4a(L6i&^m-cJ%yKr2U@6~77JRc>aKwD>g}pW+u*%X4V+r;M8GOelW>)2S_9`=JQ^OZ=luUf#RHSLz!^v& z$&H&cWgF3ahFjAgj0Bvy_blcSS$A>O8&D{HGWU;^jhGn3?FfT)J^sfvdF+IO5ejp1 zxTZ!^Dnul_c;#!*J6KqpcYsKkE@YSEg5l zQUtuOsc`%rSBb5rJ{#+i8#IT!sxTMpHSHaJC}n}B;}GKTA8R^K!DGSpntN?Hh-usc z%>##aj1iUQd1@NEp;j~=KY^NeiN^ngAh8LeUD-{P=9>7@V<#w)Cr(<01Vn>En_kh! z8y=W!AqG^1!F2s%z=gx;f{9|pmW@!zQHQ_(@x%u&?&ILZcUG!h-K*Wg)3YIyAuw zHG4y9@8{u#b5hq8T$=W`rPEtFQGzn*><|K#+?LK|m!f39O6O-XM6s1pPuYIB`-sBW z7=?3YD$M#^>ZwO5EPADW`}w#@K9aus3d)T8LAqhuhuTE!ly1r;7z|sb!LyJyVv5X+ zWF8qOt3oVc8c*3UBIT^h^0@s-Wc*^;uN)F;NuClh4ENW|DZM@@#aOvgj}kcg$!qg3 zVZUU#+CKsF!dtEmzlpDeRSL5%$<^nOu;tgXY17j+_#i5lHyfwIrJ`Kpz7`LDRye0w zVYV#S?Sm4T-^oqKp+KpZe7MpMmt>rLq;es?64Y{g0TL@I0uiXhUp^H)h#6lg_mtuw zD=Or^&$Dr-td}ot#^*}fH}ZgS2^5%Ql7Dae0qqu~aQw?!?$a=stV$~m;bb!cv=+_1 zL{k@OE!U61Brn(6%8-0qt=9JFc$jUk*4_016uYBMcS2%(r?w;-oVi>3&cQU?hCgVl zLN}u{?`XHYf^|))wua$g@(zVrCL3){I5Lx_YwHY9AbOtm$UT&z@S*mk2a64}wde5h zM9d=XmB%=d@qu>e3z%%u5$)4rY*-wpv$^Vt>(xtVGl==Hm~^gzm;=^t>fEj%@ZveT zz$#4GQBM`x2I_)B)}wot>q2xV(Eq_@x_RxW(e$Od1WUNtmsJ@3yKdDb)F}O1-KGYd zFsf6xClNJYlBYX(YysSTTjA?ZbSD>BVQyU4b0fEAh^yY_^Z>5mg?c{&+S=zcefV^E z!|2|s@LyN&xN87UeH8ym*|fb;zh43hVjdw!0S5R9k!$F;54a1*#ig+;&>6GTS^vNd4?C<1k{>W%FN4dQ8f{P}& wjId>{^}mG|4;ee_k%uje-G_{M!a_&$MLVOp-^ax)IvCB3M(dWV_7Btk4=6EflK=n! delta 3074 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 + Import picture + 匯入圖片 + + + &Import... 匯入(&I)... - + + Apply changes + 套用變更 + + + &Overwrite 修改(&O) - + + Discard changes + æ¨æ£„變更 + + + &Close 關閉(&C) @@ -230,7 +245,7 @@ Pictures and Savegames - + Ignore Aspect Ratio 忽略長寬比 @@ -246,91 +261,121 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> 背景é¡è‰²: <span style="color: %1">%1</span> - + Select background colour + + + + + ... ... - - - + + + Background Image: 背景圖片: - + + Select background image + + + + + Remove background image + + + + X X - + Force Colour in Avatar Zone 強制在大頭貼å€åŸŸä½¿ç”¨é¡è‰² - + + Import options + + + + + &Options + + + + Import picture 匯入圖片 - + &OK 確定(&O) - + Discard picture æ¨æ£„圖片 - + &Cancel å–æ¶ˆ(&C) - + + &Import new Picture... + + + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! 自訂大頭貼 - + Custom Picture Custom Picture Description in SC, don't use Special Character! 自訂圖片 - + 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 - + File Background Image: File 文件 @@ -345,11 +390,21 @@ When you want to use it as Avatar the image will be detached! + Apply changes + 套用變更 + + + &Save ä¿å­˜(&S) - + + Discard changes + æ¨æ£„變更 + + + &Close 關閉(&C) @@ -368,26 +423,51 @@ When you want to use it as Avatar the image will be detached! + Close viewer + 關閉檢視器 + + + &Close 關閉(&C) - + + Apply new position + + + + &Apply 套用(&A) - + + Revert old position + + + + &Revert 還原(&R) - - &Set - 設置(&S) + + Select new position + - + + &Select + 鏿“‡(&S) + + + + Quit select position + + + + &Done 完æˆ(&D) @@ -1044,7 +1124,8 @@ Press 1 for Default View - + + @@ -1055,9 +1136,12 @@ Press 1 for Default View - - - + + + + + + @@ -1077,14 +1161,16 @@ Press 1 for Default View - + + All image files (%1) 所有圖片 (%1) - + + All files (**) @@ -1092,14 +1178,16 @@ Press 1 for Default View - + + Can't import %1 because file can't be open 無法匯入 %1,因為檔案無法開啟 - + + Can't import %1 because file can't be parsed properly 無法匯入 %1ï¼Œå› ç‚ºæª”æ¡ˆç„¡æ³•æ­£ç¢ºè§£æž From 414867f13e129075d65987d7c6972baf2e6a05f8 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 20 Jul 2018 15:58:51 +0200 Subject: [PATCH 160/359] imge cropping added --- ImportDialog.cpp | 44 +++ ImportDialog.h | 1 + ImportDialog.ui | 3 + anpro/imagecropper.cpp | 519 +++++++++++++++++++++++++++++ anpro/imagecropper.h | 103 ++++++ anpro/imagecropper_e.h | 36 ++ anpro/imagecropper_p.h | 76 +++++ gta5view.pro | 8 +- res/gta5sync.ts | 84 +++-- res/gta5sync_de.qm | Bin 45791 -> 46137 bytes res/gta5sync_de.ts | 84 +++-- res/gta5sync_en_US.ts | 84 +++-- res/gta5sync_fr.ts | 84 +++-- res/gta5sync_ru.ts | 84 +++-- res/gta5sync_uk.ts | 84 +++-- res/gta5sync_zh_TW.ts | 84 +++-- {anpro => uimod}/JSHighlighter.cpp | 0 {anpro => uimod}/JSHighlighter.h | 0 18 files changed, 1152 insertions(+), 226 deletions(-) create mode 100644 anpro/imagecropper.cpp create mode 100644 anpro/imagecropper.h create mode 100644 anpro/imagecropper_e.h create mode 100644 anpro/imagecropper_p.h rename {anpro => uimod}/JSHighlighter.cpp (100%) rename {anpro => uimod}/JSHighlighter.h (100%) diff --git a/ImportDialog.cpp b/ImportDialog.cpp index 9b876d0..ea8bf25 100644 --- a/ImportDialog.cpp +++ b/ImportDialog.cpp @@ -20,6 +20,7 @@ #include "ui_ImportDialog.h" #include "SidebarGenerator.h" #include "StandardPaths.h" +#include "imagecropper.h" #include "AppEnv.h" #include "config.h" #include @@ -108,6 +109,7 @@ ImportDialog::ImportDialog(QString profileName, QWidget *parent) : // Options menu optionsMenu = new QMenu(this); optionsMenu->addAction(tr("&Import new Picture..."), this, SLOT(importNewPicture())); + optionsMenu->addAction(tr("&Crop Picture..."), this, SLOT(cropPicture())); ui->cmdOptions->setMenu(optionsMenu); setMaximumSize(sizeHint()); @@ -255,6 +257,48 @@ void ImportDialog::processWatermark(QPainter *snapmaticPainter) snapmaticPainter->drawImage(0, 0, textWatermark); } +void ImportDialog::cropPicture() +{ + qreal screenRatio = AppEnv::screenRatio(); + + QDialog cropDialog(this); + cropDialog.setWindowTitle(tr("Crop Picture...")); + cropDialog.setWindowFlags(cropDialog.windowFlags()^Qt::WindowContextHelpButtonHint); + cropDialog.setModal(true); + + QVBoxLayout cropLayout; + cropLayout.setContentsMargins(0, 0, 0, 0); + cropLayout.setSpacing(0); + cropDialog.setLayout(&cropLayout); + + ImageCropper imageCropper(&cropDialog); + imageCropper.setBackgroundColor(Qt::black); + imageCropper.setCroppingRectBorderColor(QColor(255, 255, 255, 127)); + imageCropper.setImage(QPixmap::fromImage(workImage, Qt::AutoColor)); + imageCropper.setProportion(QSize(1, 1)); + imageCropper.setFixedSize(workImage.size()); + cropLayout.addWidget(&imageCropper); + + QHBoxLayout buttonLayout; + cropLayout.addLayout(&buttonLayout); + + QPushButton cropButton(&cropDialog); + cropButton.setMinimumSize(0, 40 * screenRatio); + cropButton.setText(tr("&Crop")); + cropButton.setToolTip(tr("Crop Picture")); + QObject::connect(&cropButton, SIGNAL(clicked(bool)), &cropDialog, SLOT(accept())); + + buttonLayout.addWidget(&cropButton); + + cropDialog.show(); + cropDialog.setFixedSize(cropDialog.sizeHint()); + if (cropDialog.exec() == true) + { + QImage *croppedImage = new QImage(imageCropper.cropImage().toImage()); + setImage(croppedImage); + } +} + void ImportDialog::importNewPicture() { QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); diff --git a/ImportDialog.h b/ImportDialog.h index a0f4568..7d35d49 100644 --- a/ImportDialog.h +++ b/ImportDialog.h @@ -40,6 +40,7 @@ public: private slots: void processImage(); + void cropPicture(); void importNewPicture(); void on_cbIgnore_toggled(bool checked); void on_cbAvatar_toggled(bool checked); diff --git a/ImportDialog.ui b/ImportDialog.ui index a6c31c4..c62dcd7 100644 --- a/ImportDialog.ui +++ b/ImportDialog.ui @@ -307,6 +307,9 @@ &Options + + false + diff --git a/anpro/imagecropper.cpp b/anpro/imagecropper.cpp new file mode 100644 index 0000000..f311116 --- /dev/null +++ b/anpro/imagecropper.cpp @@ -0,0 +1,519 @@ +/***************************************************************************** +* ImageCropper Qt Widget for cropping images +* Copyright (C) 2013 Dimka Novikov, to@dimkanovikov.pro +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "imagecropper.h" + +#include +#include + +namespace { + static const QSize WIDGET_MINIMUM_SIZE(470, 470); +} + +ImageCropper::ImageCropper(QWidget* parent) : + QWidget(parent), + pimpl(new ImageCropperPrivate) +{ + setMinimumSize(WIDGET_MINIMUM_SIZE); + setMouseTracking(true); +} + +ImageCropper::~ImageCropper() +{ + delete pimpl; +} + +void ImageCropper::setImage(const QPixmap& _image) +{ + pimpl->imageForCropping = _image; + update(); +} + +void ImageCropper::setBackgroundColor(const QColor& _backgroundColor) +{ + pimpl->backgroundColor = _backgroundColor; + update(); +} + +void ImageCropper::setCroppingRectBorderColor(const QColor& _borderColor) +{ + pimpl->croppingRectBorderColor = _borderColor; + update(); +} + +void ImageCropper::setProportion(const QSizeF& _proportion) +{ + // Пропорции хранÑÑ‚ÑÑ Ð² коÑффициентах Ð¿Ñ€Ð¸Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ñторон + // Таким образом, при изменении размера облаÑти выделениÑ, + // размеры Ñторон изменÑÑŽÑ‚ÑÑ Ð½Ð° размер завиÑÑщий от + // коÑффициентов приращениÑ. + + // Сохраним пропорциональную завиÑимоÑть облаÑти Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð² коÑффициентах Ð¿Ñ€Ð¸Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ñторон + if (pimpl->proportion != _proportion) { + pimpl->proportion = _proportion; + // ... раÑчитаем коÑффициенты + float heightDelta = (float)_proportion.height() / _proportion.width(); + float widthDelta = (float)_proportion.width() / _proportion.height(); + // ... Ñохраним коÑффициенты + pimpl->deltas.setHeight(heightDelta); + pimpl->deltas.setWidth(widthDelta); + } + + // Обновим пропорции облаÑти Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ + if ( pimpl->isProportionFixed ) { + float croppintRectSideRelation = + (float)pimpl->croppingRect.width() / pimpl->croppingRect.height(); + float proportionSideRelation = + (float)pimpl->proportion.width() / pimpl->proportion.height(); + // ЕÑли облаÑть Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ðµ ÑоответÑтвует необходимым пропорциÑм обновим её + if (croppintRectSideRelation != proportionSideRelation) { + bool widthShotrerThenHeight = + pimpl->croppingRect.width() < pimpl->croppingRect.height(); + // ... уÑтановим размер той Ñтороны, что длиннее + if (widthShotrerThenHeight) { + pimpl->croppingRect.setHeight( + pimpl->croppingRect.width() * pimpl->deltas.height()); + } else { + pimpl->croppingRect.setWidth( + pimpl->croppingRect.height() * pimpl->deltas.width()); + } + // ... перериÑуем виджет + update(); + } + } + +} + +void ImageCropper::setProportionFixed(const bool _isFixed) +{ + if (pimpl->isProportionFixed != _isFixed) { + pimpl->isProportionFixed = _isFixed; + setProportion(pimpl->proportion); + } +} + +const QPixmap ImageCropper::cropImage() +{ + // Получим размер отображаемого Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ + QSize scaledImageSize = + pimpl->imageForCropping.scaled( + this->size(), Qt::KeepAspectRatio, Qt::FastTransformation + ).size(); + // Определим раÑÑтоÑние от левого и верхнего краёв + float leftDelta = 0; + float topDelta = 0; + const float HALF_COUNT = 2; + if (this->size().height() == scaledImageSize.height()) { + leftDelta = (this->width() - scaledImageSize.width()) / HALF_COUNT; + } else { + topDelta = (this->height() - scaledImageSize.height()) / HALF_COUNT; + } + // Определим пропорцию облаÑти обрезки по отношению к иÑходному изображению + float xScale = (float)pimpl->imageForCropping.width() / scaledImageSize.width(); + float yScale = (float)pimpl->imageForCropping.height() / scaledImageSize.height(); + // РаÑчитаем облаÑть обрезки Ñ ÑƒÑ‡Ñ‘Ñ‚Ð¾Ð¼ коррекции размеров иÑходного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ + QRectF realSizeRect( + QPointF(pimpl->croppingRect.left() - leftDelta, pimpl->croppingRect.top() - topDelta), + pimpl->croppingRect.size()); + // ... корректируем левый и верхний ÐºÑ€Ð°Ñ + realSizeRect.setLeft((pimpl->croppingRect.left() - leftDelta) * xScale); + realSizeRect.setTop ((pimpl->croppingRect.top() - topDelta) * yScale); + // ... корректируем размер + realSizeRect.setWidth(pimpl->croppingRect.width() * xScale); + realSizeRect.setHeight(pimpl->croppingRect.height() * yScale); + // Получаем обрезанное изображение + return pimpl->imageForCropping.copy(realSizeRect.toRect()); +} + +// ******** +// Protected section + +void ImageCropper::paintEvent(QPaintEvent* _event) +{ + QWidget::paintEvent( _event ); + // + QPainter widgetPainter(this); + // РиÑуем изображение по центру виджета + { + // ... подгоним изображение Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ размеру виджета + QPixmap scaledImage = + pimpl->imageForCropping.scaled(this->size(), Qt::KeepAspectRatio, Qt::FastTransformation); + // ... заливаем фон + widgetPainter.fillRect( this->rect(), pimpl->backgroundColor ); + // ... риÑуем изображение по центру виджета + if ( this->size().height() == scaledImage.height() ) { + widgetPainter.drawPixmap( ( this->width() - scaledImage.width() ) / 2, 0, scaledImage ); + } else { + widgetPainter.drawPixmap( 0, ( this->height() - scaledImage.height() ) / 2, scaledImage ); + } + } + // РиÑуем облаÑть обрезки + { + // ... еÑли Ñто первое отображение поÑле инициилизации, то центруем облаÑто обрезки + if (pimpl->croppingRect.isNull()) { + const int width = WIDGET_MINIMUM_SIZE.width()/2; + const int height = WIDGET_MINIMUM_SIZE.height()/2; + pimpl->croppingRect.setSize(QSize(width, height)); + float x = (this->width() - pimpl->croppingRect.width())/2; + float y = (this->height() - pimpl->croppingRect.height())/2; + pimpl->croppingRect.moveTo(x, y); + } + + // ... риÑуем затемненную облаÑть + QPainterPath p; + p.addRect(pimpl->croppingRect); + p.addRect(this->rect()); + widgetPainter.setBrush(QBrush(QColor(0,0,0,120))); + widgetPainter.setPen(Qt::transparent); + widgetPainter.drawPath(p); + // Рамка и контрольные точки + widgetPainter.setPen(pimpl->croppingRectBorderColor); + // ... риÑуем прÑмоугольник облаÑти обрезки + { + widgetPainter.setBrush(QBrush(Qt::transparent)); + widgetPainter.drawRect(pimpl->croppingRect); + } + // ... риÑуем контрольные точки + { + widgetPainter.setBrush(QBrush(pimpl->croppingRectBorderColor)); + // Ð’Ñпомогательные X координаты + int leftXCoord = pimpl->croppingRect.left() - 2; + int centerXCoord = pimpl->croppingRect.center().x() - 3; + int rightXCoord = pimpl->croppingRect.right() - 2; + // Ð’Ñпомогательные Y координаты + int topYCoord = pimpl->croppingRect.top() - 2; + int middleYCoord = pimpl->croppingRect.center().y() - 3; + int bottomYCoord = pimpl->croppingRect.bottom() - 2; + // + const QSize pointSize(6, 6); + // + QVector points; + points + // Ð»ÐµÐ²Ð°Ñ Ñторона + << QRect( QPoint(leftXCoord, topYCoord), pointSize ) + << QRect( QPoint(leftXCoord, middleYCoord), pointSize ) + << QRect( QPoint(leftXCoord, bottomYCoord), pointSize ) + // центр + << QRect( QPoint(centerXCoord, topYCoord), pointSize ) + << QRect( QPoint(centerXCoord, middleYCoord), pointSize ) + << QRect( QPoint(centerXCoord, bottomYCoord), pointSize ) + // Ð¿Ñ€Ð°Ð²Ð°Ñ Ñторона + << QRect( QPoint(rightXCoord, topYCoord), pointSize ) + << QRect( QPoint(rightXCoord, middleYCoord), pointSize ) + << QRect( QPoint(rightXCoord, bottomYCoord), pointSize ); + // + widgetPainter.drawRects( points ); + } + // ... риÑуем пунктирные линии + { + QPen dashPen(pimpl->croppingRectBorderColor); + dashPen.setStyle(Qt::DashLine); + widgetPainter.setPen(dashPen); + // ... Ð²ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ + widgetPainter.drawLine( + QPoint(pimpl->croppingRect.center().x(), pimpl->croppingRect.top()), + QPoint(pimpl->croppingRect.center().x(), pimpl->croppingRect.bottom()) ); + // ... Ð³Ð¾Ñ€Ð¸Ð·Ð¾Ð½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ + widgetPainter.drawLine( + QPoint(pimpl->croppingRect.left(), pimpl->croppingRect.center().y()), + QPoint(pimpl->croppingRect.right(), pimpl->croppingRect.center().y()) ); + } + } + // + widgetPainter.end(); +} + +void ImageCropper::mousePressEvent(QMouseEvent* _event) +{ + if (_event->button() == Qt::LeftButton) { + pimpl->isMousePressed = true; + pimpl->startMousePos = _event->pos(); + pimpl->lastStaticCroppingRect = pimpl->croppingRect; + } + // + updateCursorIcon(_event->pos()); +} + +void ImageCropper::mouseMoveEvent(QMouseEvent* _event) +{ + QPointF mousePos = _event->pos(); // отноÑительно ÑÐµÐ±Ñ (виджета) + // + if (!pimpl->isMousePressed) { + // Обработка обычного ÑоÑтоÑниÑ, Ñ‚.е. не изменÑетÑÑ Ñ€Ð°Ð·Ð¼ÐµÑ€ + // облаÑти обрезки, и она не перемещаетÑÑ Ð¿Ð¾ виджету + pimpl->cursorPosition = cursorPosition(pimpl->croppingRect, mousePos); + updateCursorIcon(mousePos); + } else if (pimpl->cursorPosition != CursorPositionUndefined) { + // Обработка дейÑтвий над облаÑтью обрезки + // ... определим Ñмещение курÑора мышки + QPointF mouseDelta; + mouseDelta.setX( mousePos.x() - pimpl->startMousePos.x() ); + mouseDelta.setY( mousePos.y() - pimpl->startMousePos.y() ); + // + if (pimpl->cursorPosition != CursorPositionMiddle) { + // ... изменÑем размер облаÑти обрезки + QRectF newGeometry = + calculateGeometry( + pimpl->lastStaticCroppingRect, + pimpl->cursorPosition, + mouseDelta); + // ... пользователь пытаетÑÑ Ð²Ñ‹Ð²ÐµÑ€Ð½ÑƒÑ‚ÑŒ облаÑть обрезки наизнанку + if (!newGeometry.isNull()) { + pimpl->croppingRect = newGeometry; + } + } else { + // ... перемещаем облаÑть обрезки + pimpl->croppingRect.moveTo( pimpl->lastStaticCroppingRect.topLeft() + mouseDelta ); + } + // ПерериÑуем виджет + update(); + } +} + +void ImageCropper::mouseReleaseEvent(QMouseEvent* _event) +{ + pimpl->isMousePressed = false; + updateCursorIcon(_event->pos()); +} + +// ******** +// Private section + +namespace { + // ÐаходитÑÑ Ð»Ð¸ точка Ñ€Ñдом Ñ ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚Ð¾Ð¹ Ñтороны + static bool isPointNearSide (const int _sideCoordinate, const int _pointCoordinate) + { + static const int indent = 10; + return (_sideCoordinate - indent) < _pointCoordinate && _pointCoordinate < (_sideCoordinate + indent); + } +} + +CursorPosition ImageCropper::cursorPosition(const QRectF& _cropRect, const QPointF& _mousePosition) +{ + CursorPosition cursorPosition = CursorPositionUndefined; + // + if ( _cropRect.contains( _mousePosition ) ) { + // ДвухÑтороннее направление + if (isPointNearSide(_cropRect.top(), _mousePosition.y()) && + isPointNearSide(_cropRect.left(), _mousePosition.x())) { + cursorPosition = CursorPositionTopLeft; + } else if (isPointNearSide(_cropRect.bottom(), _mousePosition.y()) && + isPointNearSide(_cropRect.left(), _mousePosition.x())) { + cursorPosition = CursorPositionBottomLeft; + } else if (isPointNearSide(_cropRect.top(), _mousePosition.y()) && + isPointNearSide(_cropRect.right(), _mousePosition.x())) { + cursorPosition = CursorPositionTopRight; + } else if (isPointNearSide(_cropRect.bottom(), _mousePosition.y()) && + isPointNearSide(_cropRect.right(), _mousePosition.x())) { + cursorPosition = CursorPositionBottomRight; + // ОдноÑтороннее направление + } else if (isPointNearSide(_cropRect.left(), _mousePosition.x())) { + cursorPosition = CursorPositionLeft; + } else if (isPointNearSide(_cropRect.right(), _mousePosition.x())) { + cursorPosition = CursorPositionRight; + } else if (isPointNearSide(_cropRect.top(), _mousePosition.y())) { + cursorPosition = CursorPositionTop; + } else if (isPointNearSide(_cropRect.bottom(), _mousePosition.y())) { + cursorPosition = CursorPositionBottom; + // Без Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + } else { + cursorPosition = CursorPositionMiddle; + } + } + // + return cursorPosition; +} + +void ImageCropper::updateCursorIcon(const QPointF& _mousePosition) +{ + QCursor cursorIcon; + // + switch (cursorPosition(pimpl->croppingRect, _mousePosition)) + { + case CursorPositionTopRight: + case CursorPositionBottomLeft: + cursorIcon = QCursor(Qt::SizeBDiagCursor); + break; + case CursorPositionTopLeft: + case CursorPositionBottomRight: + cursorIcon = QCursor(Qt::SizeFDiagCursor); + break; + case CursorPositionTop: + case CursorPositionBottom: + cursorIcon = QCursor(Qt::SizeVerCursor); + break; + case CursorPositionLeft: + case CursorPositionRight: + cursorIcon = QCursor(Qt::SizeHorCursor); + break; + case CursorPositionMiddle: + cursorIcon = pimpl->isMousePressed ? + QCursor(Qt::ClosedHandCursor) : + QCursor(Qt::OpenHandCursor); + break; + case CursorPositionUndefined: + default: + cursorIcon = QCursor(Qt::ArrowCursor); + break; + } + // + this->setCursor(cursorIcon); +} + +const QRectF ImageCropper::calculateGeometry( + const QRectF& _sourceGeometry, + const CursorPosition _cursorPosition, + const QPointF& _mouseDelta + ) +{ + QRectF resultGeometry; + // + if ( pimpl->isProportionFixed ) { + resultGeometry = + calculateGeometryWithFixedProportions( + _sourceGeometry, _cursorPosition, _mouseDelta, pimpl->deltas); + } else { + resultGeometry = + calculateGeometryWithCustomProportions( + _sourceGeometry, _cursorPosition, _mouseDelta); + } + // ЕÑли пользователь пытаетÑÑ Ð²Ñ‹Ð²ÐµÑ€Ð½ÑƒÑ‚ÑŒ облаÑть обрезки наизнанку, + // возвращаем null-прÑмоугольник + if ((resultGeometry.left() >= resultGeometry.right()) || + (resultGeometry.top() >= resultGeometry.bottom())) { + resultGeometry = QRect(); + } + // + return resultGeometry; +} + +const QRectF ImageCropper::calculateGeometryWithCustomProportions( + const QRectF& _sourceGeometry, + const CursorPosition _cursorPosition, + const QPointF& _mouseDelta + ) +{ + QRectF resultGeometry = _sourceGeometry; + // + switch ( _cursorPosition ) + { + case CursorPositionTopLeft: + resultGeometry.setLeft( _sourceGeometry.left() + _mouseDelta.x() ); + resultGeometry.setTop ( _sourceGeometry.top() + _mouseDelta.y() ); + break; + case CursorPositionTopRight: + resultGeometry.setTop ( _sourceGeometry.top() + _mouseDelta.y() ); + resultGeometry.setRight( _sourceGeometry.right() + _mouseDelta.x() ); + break; + case CursorPositionBottomLeft: + resultGeometry.setBottom( _sourceGeometry.bottom() + _mouseDelta.y() ); + resultGeometry.setLeft ( _sourceGeometry.left() + _mouseDelta.x() ); + break; + case CursorPositionBottomRight: + resultGeometry.setBottom( _sourceGeometry.bottom() + _mouseDelta.y() ); + resultGeometry.setRight ( _sourceGeometry.right() + _mouseDelta.x() ); + break; + case CursorPositionTop: + resultGeometry.setTop( _sourceGeometry.top() + _mouseDelta.y() ); + break; + case CursorPositionBottom: + resultGeometry.setBottom( _sourceGeometry.bottom() + _mouseDelta.y() ); + break; + case CursorPositionLeft: + resultGeometry.setLeft( _sourceGeometry.left() + _mouseDelta.x() ); + break; + case CursorPositionRight: + resultGeometry.setRight( _sourceGeometry.right() + _mouseDelta.x() ); + break; + default: + break; + } + // + return resultGeometry; +} + +const QRectF ImageCropper::calculateGeometryWithFixedProportions( + const QRectF& _sourceGeometry, + const CursorPosition _cursorPosition, + const QPointF& _mouseDelta, + const QSizeF& _deltas + ) +{ + QRectF resultGeometry = _sourceGeometry; + // + switch (_cursorPosition) + { + case CursorPositionLeft: + resultGeometry.setTop(_sourceGeometry.top() + _mouseDelta.x() * _deltas.height()); + resultGeometry.setLeft(_sourceGeometry.left() + _mouseDelta.x()); + break; + case CursorPositionRight: + resultGeometry.setTop(_sourceGeometry.top() - _mouseDelta.x() * _deltas.height()); + resultGeometry.setRight(_sourceGeometry.right() + _mouseDelta.x()); + break; + case CursorPositionTop: + resultGeometry.setTop(_sourceGeometry.top() + _mouseDelta.y()); + resultGeometry.setRight(_sourceGeometry.right() - _mouseDelta.y() * _deltas.width()); + break; + case CursorPositionBottom: + resultGeometry.setBottom(_sourceGeometry.bottom() + _mouseDelta.y()); + resultGeometry.setRight(_sourceGeometry.right() + _mouseDelta.y() * _deltas.width()); + break; + case CursorPositionTopLeft: + if ((_mouseDelta.x() * _deltas.height()) < (_mouseDelta.y())) { + resultGeometry.setTop(_sourceGeometry.top() + _mouseDelta.x() * _deltas.height()); + resultGeometry.setLeft(_sourceGeometry.left() + _mouseDelta.x()); + } else { + resultGeometry.setTop(_sourceGeometry.top() + _mouseDelta.y()); + resultGeometry.setLeft(_sourceGeometry.left() + _mouseDelta.y() * _deltas.width()); + } + break; + case CursorPositionTopRight: + if ((_mouseDelta.x() * _deltas.height() * -1) < (_mouseDelta.y())) { + resultGeometry.setTop(_sourceGeometry.top() - _mouseDelta.x() * _deltas.height()); + resultGeometry.setRight(_sourceGeometry.right() + _mouseDelta.x() ); + } else { + resultGeometry.setTop(_sourceGeometry.top() + _mouseDelta.y()); + resultGeometry.setRight(_sourceGeometry.right() - _mouseDelta.y() * _deltas.width()); + } + break; + case CursorPositionBottomLeft: + if ((_mouseDelta.x() * _deltas.height()) < (_mouseDelta.y() * -1)) { + resultGeometry.setBottom(_sourceGeometry.bottom() - _mouseDelta.x() * _deltas.height()); + resultGeometry.setLeft(_sourceGeometry.left() + _mouseDelta.x()); + } else { + resultGeometry.setBottom(_sourceGeometry.bottom() + _mouseDelta.y()); + resultGeometry.setLeft(_sourceGeometry.left() - _mouseDelta.y() * _deltas.width()); + } + break; + case CursorPositionBottomRight: + if ((_mouseDelta.x() * _deltas.height()) > (_mouseDelta.y())) { + resultGeometry.setBottom(_sourceGeometry.bottom() + _mouseDelta.x() * _deltas.height()); + resultGeometry.setRight(_sourceGeometry.right() + _mouseDelta.x()); + } else { + resultGeometry.setBottom(_sourceGeometry.bottom() + _mouseDelta.y()); + resultGeometry.setRight(_sourceGeometry.right() + _mouseDelta.y() * _deltas.width()); + } + break; + default: + break; + } + // + return resultGeometry; +} + diff --git a/anpro/imagecropper.h b/anpro/imagecropper.h new file mode 100644 index 0000000..a5a19a0 --- /dev/null +++ b/anpro/imagecropper.h @@ -0,0 +1,103 @@ +/***************************************************************************** +* ImageCropper Qt Widget for cropping images +* Copyright (C) 2013 Dimka Novikov, to@dimkanovikov.pro +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef IMAGECROPPER_H +#define IMAGECROPPER_H + +#include "imagecropper_p.h" +#include "imagecropper_e.h" + +#include + +class ImageCropper : public QWidget +{ + Q_OBJECT + +public: + ImageCropper(QWidget *parent = 0); + ~ImageCropper(); + +public slots: + // УÑтановить изображение Ð´Ð»Ñ Ð¾Ð±Ñ€ÐµÐ·ÐºÐ¸ + void setImage(const QPixmap& _image); + // УÑтановить цвет фона виджета обрезки + void setBackgroundColor(const QColor& _backgroundColor); + // УÑтановить цвет рамки облаÑти обрезки + void setCroppingRectBorderColor(const QColor& _borderColor); + // УÑтановить пропорции облаÑти Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ + void setProportion(const QSizeF& _proportion); + // ИÑпользовать фикÑированные пропорции облаÑти Ð²Ð¸Ð´ÐµÐ»ÐµÐ½Ð¸Ñ + void setProportionFixed(const bool _isFixed); + +public: + // Обрезать изображение + const QPixmap cropImage(); + +protected: + virtual void paintEvent(QPaintEvent* _event); + virtual void mousePressEvent(QMouseEvent* _event); + virtual void mouseMoveEvent(QMouseEvent* _event); + virtual void mouseReleaseEvent(QMouseEvent* _event); + +private: + // Определение меÑÑ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐºÑƒÑ€Ñора над виджетом + CursorPosition cursorPosition(const QRectF& _cropRect, const QPointF& _mousePosition); + // Обновить иконку курÑора ÑоответÑтвующую меÑтоположению мыши + void updateCursorIcon(const QPointF& _mousePosition); + + // Получить размер виджета поÑле его Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ñ‹ÑˆÑŒÑŽ + // -------- + // Контракты: + // 1. Метод должен вызыватьÑÑ, только при зажатой кнопке мыши + // (Ñ‚.е. при перемещении или изменении размера виджета) + // -------- + // Ð’ Ñлучае неудачи возвращает null-прÑмоугольник + const QRectF calculateGeometry( + const QRectF& _sourceGeometry, + const CursorPosition _cursorPosition, + const QPointF& _mouseDelta + ); + // Получить размер виджета поÑле его Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ñ‹ÑˆÑŒÑŽ + // Метод изменÑет виджет не ÑохранÑÑ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ñ… пропорций Ñторон + // ------ + // Контракты: + // 1. Метод должен вызыватьÑÑ, только при зажатой кнопке мыши + // (Ñ‚.е. при перемещении или изменении размера виджета) + const QRectF calculateGeometryWithCustomProportions( + const QRectF& _sourceGeometry, + const CursorPosition _cursorPosition, + const QPointF& _mouseDelta + ); + // Получить размер виджета поÑле его Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ñ‹ÑˆÑŒÑŽ + // Метод изменÑет виджет ÑохранÑÑ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ðµ пропорции Ñторон + // ------ + // Контракты: + // 1. Метод должен вызыватьÑÑ, только при зажатой кнопке мыши + // (Ñ‚.е. при перемещении или изменении размера виджета) + const QRectF calculateGeometryWithFixedProportions(const QRectF &_sourceGeometry, + const CursorPosition _cursorPosition, + const QPointF &_mouseDelta, + const QSizeF &_deltas + ); + +private: + // Private data implementation + ImageCropperPrivate* pimpl; +}; + +#endif // IMAGECROPPER_H diff --git a/anpro/imagecropper_e.h b/anpro/imagecropper_e.h new file mode 100644 index 0000000..a9ced6a --- /dev/null +++ b/anpro/imagecropper_e.h @@ -0,0 +1,36 @@ +/***************************************************************************** +* ImageCropper Qt Widget for cropping images +* Copyright (C) 2013 Dimka Novikov, to@dimkanovikov.pro +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef IMAGECROPPER_E_H +#define IMAGECROPPER_E_H + +enum CursorPosition +{ + CursorPositionUndefined, + CursorPositionMiddle, + CursorPositionTop, + CursorPositionBottom, + CursorPositionLeft, + CursorPositionRight, + CursorPositionTopLeft, + CursorPositionTopRight, + CursorPositionBottomLeft, + CursorPositionBottomRight +}; + +#endif // IMAGECROPPER_E_H diff --git a/anpro/imagecropper_p.h b/anpro/imagecropper_p.h new file mode 100644 index 0000000..bd09dbb --- /dev/null +++ b/anpro/imagecropper_p.h @@ -0,0 +1,76 @@ +/***************************************************************************** +* ImageCropper Qt Widget for cropping images +* Copyright (C) 2013 Dimka Novikov, to@dimkanovikov.pro +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef IMAGECROPPER_P_H +#define IMAGECROPPER_P_H + +#include "imagecropper_e.h" + +#include +#include +#include + +namespace { + const QRect INIT_CROPPING_RECT = QRect(); + const QSizeF INIT_PROPORTION = QSizeF(1.0, 1.0); +} + +class ImageCropperPrivate { +public: + ImageCropperPrivate() : + imageForCropping(QPixmap()), + croppingRect(INIT_CROPPING_RECT), + lastStaticCroppingRect(QRect()), + cursorPosition(CursorPositionUndefined), + isMousePressed(false), + isProportionFixed(false), + startMousePos(QPoint()), + proportion(INIT_PROPORTION), + deltas(INIT_PROPORTION), + backgroundColor(Qt::black), + croppingRectBorderColor(Qt::white) + {} + +public: + // Изображение Ð´Ð»Ñ Ð¾Ð±Ñ€ÐµÐ·ÐºÐ¸ + QPixmap imageForCropping; + // ОблаÑть обрезки + QRectF croppingRect; + // ПоÑледнÑÑ Ñ„Ð¸ÐºÑÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¾Ð±Ð»Ð°Ñть обрезки + QRectF lastStaticCroppingRect; + // ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ ÐºÑƒÑ€Ñора отноÑительно облаÑти обрезки + CursorPosition cursorPosition; + // Зажата ли Ð»ÐµÐ²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° мыши + bool isMousePressed; + // ФикÑировать пропорции облаÑти обрезки + bool isProportionFixed; + // ÐÐ°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ ÐºÑƒÑ€Ñора при изменении размера облаÑти обрезки + QPointF startMousePos; + // Пропорции + QSizeF proportion; + // ÐŸÑ€Ð¸Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ + // width - приращение по x + // height - приращение по y + QSizeF deltas; + // Цвет заливки фона под изображением + QColor backgroundColor; + // Цвет рамки облаÑти обрезки + QColor croppingRectBorderColor; +}; + +#endif // IMAGECROPPER_P_H diff --git a/gta5view.pro b/gta5view.pro index 6412937..d6a9cad 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -63,9 +63,10 @@ SOURCES += main.cpp \ TelemetryClass.cpp \ TranslationClass.cpp \ UserInterface.cpp \ - anpro/JSHighlighter.cpp \ + anpro/imagecropper.cpp \ pcg/pcg_basic.c \ tmext/TelemetryClassAuthenticator.cpp \ + uimod/JSHighlighter.cpp \ uimod/UiModLabel.cpp \ uimod/UiModWidget.cpp @@ -104,9 +105,12 @@ HEADERS += \ TelemetryClass.h \ TranslationClass.h \ UserInterface.h \ - anpro/JSHighlighter.h \ + anpro/imagecropper.h \ + anpro/imagecropper_e.h \ + anpro/imagecropper_p.h \ pcg/pcg_basic.h \ tmext/TelemetryClassAuthenticator.h \ + uimod/JSHighlighter.h \ uimod/UiModLabel.h \ uimod/UiModWidget.h diff --git a/res/gta5sync.ts b/res/gta5sync.ts index f522acb..4a8768a 100644 --- a/res/gta5sync.ts +++ b/res/gta5sync.ts @@ -252,8 +252,8 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> @@ -270,8 +270,8 @@ Pictures and Savegames - - + + Background Image: @@ -306,67 +306,87 @@ Pictures and Savegames - + Import picture - + &OK - + Discard picture - + &Cancel - + &Import new Picture... - + + &Crop Picture... + + + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! - + + Crop Picture... + + + + + &Crop + + + + + Crop Picture + + + + 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 - + File Background Image: File @@ -1108,8 +1128,8 @@ Press 1 for Default View - - + + @@ -1120,12 +1140,12 @@ Press 1 for Default View - - - - - - + + + + + + @@ -1145,16 +1165,16 @@ Press 1 for Default View - - + + All image files (%1) - - + + All files (**) @@ -1162,16 +1182,16 @@ Press 1 for Default View - - + + Can't import %1 because file can't be open - - + + Can't import %1 because file can't be parsed properly diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index b56d18eaa80b8f1dc7f36432d0c204b9f7be91dd..f97f7350aa240cbb22702f9e6dbcab627ff21f4b 100644 GIT binary patch delta 3433 zcmZ{nd0bBU9>+h=dCs$(bDpPX8YQGC%QT@v3u6mYN@^@+X@n#r6eY_rdO|S~N>WB7 zC0k=(2hFv_7!+CV7={s9#?s7~?igdZpXZ*}>;5sXdtbd?y*tbAe81n%clrIgQ!gBO zB;+_)KL;=pXpv3M0p!OjeTM?V0-!aYi&p{9u7K_%U=i0=f{g!&&HR&H`yBm4#(6me9HP9pKSrArLWK<+>yAv>9?A1kY{b z0824E4+a4)@4%CGtthI8r_JzscX-+iuRjLQr#@r@Iuuq>8S;22&~G_9*bJuLQJEV9 z{~J50fIoV5;|IqtMNmAID&CF(nPg%LLj3PC;=>4ubqAd55w?T(^Wrgl=SiSb7@~Jw zwgQ8mBKjXR+&LPF57HPx0jwj20N$67o?Z%=K2+(PrLz5Z$ms3`Oj(U(yK1SNKQ>RW z2a*GD=+#W1e=5G+&veB(p}LfgFLp)!RT`GF@Mx2c*H!o>DFO(!XyjYgj=+p7{DaI1 zS6Ni3aoI+X-z(S5==vKa&ezN@8Uyqkt;y~A0Wh#slRN7kpgdIR+(~6yS+fNKYo@Q} zz@WWM!BS1l?{r|rG0l~MNx&x&nkQelGSCLivuCWICPvNAR`VVpzL#K{-3D+96x@#H z0X;H>!5vwM{oV+}ZeIf&_6VcTHUg{G3X_H|1Ty`E#LP%w<5nSM!!{sFBV>E?xv4~@ z({f?sxXwVY!75W82wP`&2U@OB8JeIntxm{$Be+;w>=w5B=kxg`mAuZnA==9c#?k4`BJD9-v`p42q%tF*^&vuxiuCbxLBx3=6j`WgiFs> z0p=0HopWJ;&kLch+yN*YEIfV`#Ts1JNoc%T4U9N0{L!CEH3=2|^l1Vt9j}$juK{Zw zXq$fX2I!rnZJx^KT_$V&W;XHz-)o~P*r9%v+JsqdY@QhH)G{jX8lbZK7;WZTW>R0L zT{%KxMmuW{`q9Cl@3g04De$na+Nza}tih3v+Uj&>!VsbTy_mJwbeyPHs;J<0(HMD~ zj_)r{c@n^JJFz`YTGlX}wOgt()*#=diVafo)Lv zVXe-0(^_Epd%EcAlfY+s-4yGfO3s7Jy2OofK(t1eoJ)zPJlCa3lq`Fm&gvBfG=HSa zN%RK3h|?8yWaOV;)D>mW!R%JLl2?&HOs1}E!6?=wbQQu<7I~JgB7i9y7_8g9{W!0W z>Mo4h2ds71T@l!=VYl?U0A6b+>#dGIdjV}q^vy&509J0)yHwe6{*2OlEutf>QuIS( zn3A#E^>M;9rr($1ShiOnBZLB)Y;v6Ly8;&xfws(v#TC;W{I~w1{jA0jzk(|Ch!J2p=IsFhw2m45_ zv+AipoYekh8(_7+^!^+=AP1@Rh?TndykY+be<1m11#u8oN&c6PaDwiZ1{AEIRPIuE z?m2p1Cq)Ro8R1`2jA0)Kh`ltvfQo%~R+<{}3sB@HO`S-J3#F9byKtiSk(PW-$6I@4uxKvC^f{1KD;frR!b+ zK)1b8L-eoQ)FfH+n4Ztp$(koNj*!ic?sQ7mU10NKa)IWYgK++$)9 zxmaaEh03y8xmW2cPIOW36FY<)E{8w1a^ZYudB{T+i{l1)M1vi$IYS=#kP`QOPmVp9 z27E9~o&ZMVEy;zU{IDfXrMpFC=ysJ>clmHjN2YGNTzOpwd|WD@y~$nJYmod+K^4z2 zXXJD73U~Do`TP^wD}N?mu*Roy4{4Au_R|0<4sy+`{jBXpc2i+~jVpBBH zq%_}8huZg2tR8pY<$$qQeCJbAI}fGXfJU}sYbE+}7pBHZS!BnQ_=GAMQ?GJzZBw%S zBAJqDN_KEP&m(avbM7eF7wEW4sFM470Z(8)O1@KfV986Rs6z(t=cr6AQJL$il?rExA$>#wn%U-E-ieq;aEB`wBJ=-xrWxGa`_(c$R!)lZCgaMA3XR_aU z85nAHHaRS5LTQ?qTok6DU6je?SPK^6b5jS87nCl;H1g~T=5Ui~TpK#5Uul{VMvi-A z`s~mcZnyhPS^e{wveBl3PP{LrnTj+byC7d>j-9C}m<}rIOl1}-l6czmRRdGBG1hdd zqrjrqyO=J7IRTovrkgJrnfp!ClMO7w9&V=B$^2mHTyu*Z5uDv$nw@WZ@to0Uc7Du( zk~P-s5x}|O=4ST1Ne8m3%mG;((M_+b^!(V|D{u)g{DwKu%m7AxY93a})I~ouM>??R zLrVWcE0QwJbFMOX%W}-QTN&|`7Uo^USqm#Y&4-SU;z7t;<%D(S!_79cR?^I;Mmcie z>^47}*qd$i#@uj*wESQv+P3Y{@pjJN)N${)Vdrb%TnO>83+}^Oa*VW_mc|rxy1u{Oe zOkcrBj1Me@XPJUN{Vki`MsY4Yvh27>WxV4o6?5rO7%Zm_#{;o%Etjefu#L}H>fHD6 z--vX}FRoOe>qnNxbuuNL6HIru`{fHl1<#4-_B<_ock%q@j@!x^xB4e@Rm&~=~6gdd>m z%Z-=)3SAKCwgI}TOTbsvDl=!nn9C%(-iJ%i6~NGTDtB7p*0hmhbGV%d0POF=t!ckq zMR4POR_v;WThoTwE8zB@9%L!pvnr_wd3G=`U=-Y&HkwzUaRrQ3Pa$YZC!lQ+LW+2Qi#s9?RRG9vu<) z`%=m}0oKtY0FUihwk!`YeW|kTaFx!xv9gZ`Fe?)44_8yV_b8aw3`qEZlkesOUwnoi zj`w0fKjV5H17GX}vNl*R_Q0i2+d8M+`4b6TC^ol`KI;4cshia-` zGk^^%G`E7|f$6rIr#ss-(NfK`XHS6Ub2Kl^M}cWt!DLZ1>;{ZPbe2%S&^f{`ERN49yj62b_?hWp=u7_%WV*DJlg`8M+?7PVWW7S z79Q`j1u|O-4fWyl;M!M01-r&YEA6`jWE5*#Uj7H@=cR3v z#OI&((0b2rasI1=@X3>DyVm>LV+vf2`d!S^}J3YfpGH zz%O@eFHE7(Bi?E&H#O3O5f8N2m$4*qENDah|{qS6y~DX1;o> zE_)>dTvw~heHR9d57Ff>AImZDy{=eTN3##t75lJcgH5_42hZ|)x$fH7V=P&{?v}u= z4c@EQ`S4mhOK-J%;Q@4-p>GrP7T7pl?@(#OIn+V#k;*{Y`|3wdU`Zw>>Z1fs)wnbI zCC1-4VZHPx3n{hhRsF@^$Zo;<9|JpcFn-Y2Xg2ctrvBZxci3F@2DvebHMdt86RC31 z5reI`AINjE8tfkpqlughF7GdJ{!B7-|AriR$1rJjDPXiSM5jIcusLTw11d9QT+aZ$&NSqok0*l+M??MqdMz>> zD|!WNvwmkNt)`SSw-_oa*hXD`GWXY#win%Vj{*9vBnON3(6+ zjZ11+vf$3flz5hk^*1ha{E6+h*tkEM4`zHcp7LA^%uX|wS5&jsk;aNs+)y8Bth`8b zj=pSsUdD`^3XHEh(mNwx8b3~$$ork8R_D&sGsRM?pZyu2PHLZAO9fn|E^nN81iY7A z7cu}jKxNmiQqLa$u>S)f^li~_#?(3c$?K)}oIR@VLg|sg45xb{EO7rk$00*V~ z^TU9>_oQM^dM3h4y5eu8#7U{r)h8c;rCp^PSWqRNzd`BXbQmaey4epd%X#>kf*@HFn;T)v!H$!#;tCEk?_4`yNW~rQ8r*hL&xoSU4(`to$w?jD3s2cg-2dPl! ziSm;YmTLMNxmKA6q}`Mou2SOZDT<~kff*Hw*58(c?xA97Qgn8;(&jh=a@HzVmzw5W z@Sft8LP>306yHIOY>(fS$eTU+-SM-MYQvIvT9lQsx4CeFlI9)8LF28Y1=jMptIACU zO4>CB-p-<=zhBPzutUjc)d%=jxsvU^lJ_H2&YPif(-S4XgvxB_WmOIsG8jN>rT82r z*{4@dr?%&5T%w#w9mg-KSfxCUk>a?!7Wt{<;dB{8$STBZ8yXkg7l(0toW(o-flVSuUGp_@RcwZ>$-x&@_aVRBGd zg3k6Phi}``gvU+pF0UwEuxZSt^Q_@a(_|+GsNZCo7eY=tWcuplL>@YeOlt>buw>&+ zncaC`T58JHi0p!KDmUIXWd|}qWtS=6LPcWNna(_CiE_G{E_4&v|9S`0wUAc)E?8`O z@P?T==9-@FrV0DhncmOgf_weVZHtBhS@X>Hk39I@(P*}B;6Pd9Y?Xzu5~nx|)u+270r#`HIjDrf1&eq#=^rRfL7{GV3Dg_sxKX6@ER zn9~cHam=sg!x8kth8O0OXU78mjVhz2m`}AX;9>No`NCK`4xD5gvFVr|=Wb(v`7zIm z92+kS=Rn|JHi7-=9ox1x2}=Wjo?C2=PmbYvpRY2hht1h|{%+t9OWRp}*#A*Ri{DF1 zZ=Gt1bcqLoj##G7Y2*S$miX!teu3Fp5;rn( - - + + Background Colour: <span style="color: %1">%1</span> Hintergrundfarbe: <span style="color: %1">%1</span> @@ -289,7 +289,7 @@ Snapmatic Bilder und Spielständen Hintergrundbild entfernen - + Background Image: %1 Hintergrundbild: %1 @@ -314,70 +314,90 @@ Snapmatic Bilder und Spielständen &Optionen - + Import picture Bild importieren - + &OK &OK - + Discard picture Bild verwerfen - + &Cancel Abbre&chen - - + + Background Image: Hintergrundbild: - + &Import new Picture... Neues Bild &importieren... - + + &Crop Picture... + Bild zu&schneiden... + + + 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 - + + Crop Picture... + Bild zuschneiden... + + + + &Crop + Zu&schneiden + + + + Crop Picture + Bild zuschneiden + + + 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 @@ -1135,8 +1155,8 @@ Drücke 1 für Standardmodus - - + + @@ -1147,12 +1167,12 @@ Drücke 1 für Standardmodus - - - - - - + + + + + + @@ -1189,16 +1209,16 @@ Drücke 1 für Standardmodus - - + + All image files (%1) Alle Bilddateien (%1) - - + + All files (**) @@ -1233,16 +1253,16 @@ Drücke 1 für Standardmodus - - + + 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 diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index 349ee1e..d7c7694 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -226,8 +226,8 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> Background Color: <span style="color: %1">%1</span> @@ -269,7 +269,7 @@ Pictures and Savegames - + Background Image: %1 @@ -304,69 +304,89 @@ Pictures and Savegames - + Import picture - + &OK - + Discard picture - + &Cancel - - + + Background Image: - + &Import new Picture... - + + &Crop Picture... + + + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! - + + Crop Picture... + + + + + &Crop + + + + + Crop Picture + + + + 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 @@ -1128,8 +1148,8 @@ Press 1 for Default View - - + + @@ -1140,12 +1160,12 @@ Press 1 for Default View - - - - - - + + + + + + @@ -1188,16 +1208,16 @@ Press 1 for Default View - - + + All image files (%1) - - + + All files (**) @@ -1237,16 +1257,16 @@ Press 1 for Default View - - + + Can't import %1 because file can't be open - - + + Can't import %1 because file can't be parsed properly diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index b562fc0..abf9beb 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -262,8 +262,8 @@ 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,7 +289,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V - + Background Image: %1 Image de fond : %1 @@ -314,70 +314,90 @@ et les fichiers de sauvegarde de Grand Theft Auto V - + Import picture Importer l'image - + &OK &OK - + Discard picture Supprimer l'image - + &Cancel A&nnuler - - + + Background Image: Image de fond : - + &Import new Picture... - + + &Crop Picture... + + + + 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é - + + Crop Picture... + + + + + &Crop + + + + + Crop Picture + + + + 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 @@ -1146,8 +1166,8 @@ Appuyer sur 1 pour le mode par défaut - - + + @@ -1158,12 +1178,12 @@ Appuyer sur 1 pour le mode par défaut - - - - - - + + + + + + @@ -1195,16 +1215,16 @@ Appuyer sur 1 pour le mode par défaut - - + + All image files (%1) Toutes les images (%1) - - + + All files (**) @@ -1251,16 +1271,16 @@ Appuyer sur 1 pour le mode par défaut - - + + 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 diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index 0b761a2..48d7957 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -264,8 +264,8 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> Цвет фона: <span style="color: %1">%1</span> @@ -291,7 +291,7 @@ Pictures and Savegames - + Background Image: %1 Ð¤Ð¾Ð½Ð¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ°: %1 @@ -317,70 +317,90 @@ Pictures and Savegames - + Import picture Импортировать картинку - + &OK &ОК - + Discard picture Отклонить картинку - + &Cancel Я не уверен наÑчет горÑчих клавиш... От&мена - - + + Background Image: Ð¤Ð¾Ð½Ð¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ°: - + &Import new Picture... - + + &Crop Picture... + + + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! Свой Ðватар - + Custom Picture Custom Picture Description in SC, don't use Special Character! Ð¡Ð²Ð¾Ñ ÐšÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ° - + + Crop Picture... + + + + + &Crop + + + + + Crop Picture + + + + 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 Файл @@ -1140,8 +1160,8 @@ Press 1 for Default View - - + + @@ -1152,12 +1172,12 @@ Press 1 for Default View - - - - - - + + + + + + @@ -1189,8 +1209,8 @@ Press 1 for Default View - - + + All files (**) @@ -1242,24 +1262,24 @@ Press 1 for Default View - - + + 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, файл не может быть правильно обработан diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts index 4c095c1..7b18b5f 100644 --- a/res/gta5sync_uk.ts +++ b/res/gta5sync_uk.ts @@ -262,8 +262,8 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> Фоновий колір: <span style="color: %1">%1</span> @@ -280,8 +280,8 @@ Pictures and Savegames - - + + Background Image: Фонове зображеннÑ: @@ -316,68 +316,88 @@ Pictures and Savegames - + Import picture Імпортувати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ - + &OK &OK - + Discard picture Відхилити Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ - + &Cancel &СкаÑувати - + &Import new Picture... - + + &Crop Picture... + + + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! КориÑтувацький Ðватар - + Custom Picture Custom Picture Description in SC, don't use Special Character! КориÑтувацьке Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ - + + Crop Picture... + + + + + &Crop + + + + + Crop Picture + + + + 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 - + File Background Image: File Файл @@ -1126,8 +1146,8 @@ Press 1 for Default View - - + + @@ -1138,12 +1158,12 @@ Press 1 for Default View - - - - - - + + + + + + @@ -1163,16 +1183,16 @@ Press 1 for Default View - - + + All image files (%1) Файли зображень (%1) - - + + All files (**) @@ -1180,16 +1200,16 @@ Press 1 for Default View - - + + Can't import %1 because file can't be open Ðеможливо імпортувати %1, оÑкільки файл не може бути відкритий - - + + Can't import %1 because file can't be parsed properly Ðеможливо імпортувати %1, оÑкільки файл неможливо розібрати правильно diff --git a/res/gta5sync_zh_TW.ts b/res/gta5sync_zh_TW.ts index 3cccf8c..4dbd674 100644 --- a/res/gta5sync_zh_TW.ts +++ b/res/gta5sync_zh_TW.ts @@ -261,8 +261,8 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> 背景é¡è‰²: <span style="color: %1">%1</span> @@ -279,8 +279,8 @@ Pictures and Savegames - - + + Background Image: 背景圖片: @@ -315,67 +315,87 @@ Pictures and Savegames - + Import picture 匯入圖片 - + &OK 確定(&O) - + Discard picture æ¨æ£„圖片 - + &Cancel å–æ¶ˆ(&C) - + &Import new Picture... - + + &Crop Picture... + + + + Custom Avatar Custom Avatar Description in SC, don't use Special Character! 自訂大頭貼 - + Custom Picture Custom Picture Description in SC, don't use Special Character! 自訂圖片 - + + Crop Picture... + + + + + &Crop + + + + + Crop Picture + + + + 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 - + File Background Image: File 文件 @@ -1124,8 +1144,8 @@ Press 1 for Default View - - + + @@ -1136,12 +1156,12 @@ Press 1 for Default View - - - - - - + + + + + + @@ -1161,16 +1181,16 @@ Press 1 for Default View - - + + All image files (%1) 所有圖片 (%1) - - + + All files (**) @@ -1178,16 +1198,16 @@ Press 1 for Default View - - + + Can't import %1 because file can't be open 無法匯入 %1,因為檔案無法開啟 - - + + Can't import %1 because file can't be parsed properly 無法匯入 %1ï¼Œå› ç‚ºæª”æ¡ˆç„¡æ³•æ­£ç¢ºè§£æž diff --git a/anpro/JSHighlighter.cpp b/uimod/JSHighlighter.cpp similarity index 100% rename from anpro/JSHighlighter.cpp rename to uimod/JSHighlighter.cpp diff --git a/anpro/JSHighlighter.h b/uimod/JSHighlighter.h similarity index 100% rename from anpro/JSHighlighter.h rename to uimod/JSHighlighter.h From 193bb60caa89a46458f321b00f7c839c2274bff4 Mon Sep 17 00:00:00 2001 From: Syping Date: Sat, 21 Jul 2018 18:33:08 +0200 Subject: [PATCH 161/359] image overwriter improved --- .travis.yml | 10 ---- ImportDialog.cpp | 64 +++++++++++++++++++- ImportDialog.h | 4 ++ PictureDialog.cpp | 51 ++++++++++++---- SnapmaticWidget.cpp | 40 +++++++++++-- res/gta5sync.ts | 135 +++++++++++++++++++++++------------------- res/gta5sync_de.ts | 135 +++++++++++++++++++++++------------------- res/gta5sync_en_US.ts | 135 +++++++++++++++++++++++------------------- res/gta5sync_fr.ts | 135 +++++++++++++++++++++++------------------- res/gta5sync_ru.ts | 135 +++++++++++++++++++++++------------------- res/gta5sync_uk.ts | 135 +++++++++++++++++++++++------------------- res/gta5sync_zh_TW.ts | 135 +++++++++++++++++++++++------------------- 12 files changed, 658 insertions(+), 456 deletions(-) diff --git a/.travis.yml b/.travis.yml index 55de114..ec1af1f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,22 +8,12 @@ service: matrix: include: - - env: - - BUILD_SCRIPT=debian_docker.sh - - RELEASE_LABEL="Debian 32-Bit Package" - - DEBIAN_VERSION=stretch - - DOCKER_USER=i386 - - APT_INSTALL=clang - env: - BUILD_SCRIPT=debian_docker.sh - RELEASE_LABEL="Debian 64-Bit Package" - DEBIAN_VERSION=stretch - DOCKER_USER=amd64 - APT_INSTALL=clang - - env: - - BUILD_SCRIPT=windows_docker.sh - - QT_SELECT=qt5-i686-w64-mingw32 - - RELEASE_LABEL="Windows 32-Bit Portable" - env: - BUILD_SCRIPT=windows_docker.sh - QT_SELECT=qt5-x86_64-w64-mingw32 diff --git a/ImportDialog.cpp b/ImportDialog.cpp index ea8bf25..bb9ebda 100644 --- a/ImportDialog.cpp +++ b/ImportDialog.cpp @@ -55,6 +55,7 @@ ImportDialog::ImportDialog(QString profileName, QWidget *parent) : ui->cmdOK->setDefault(true); ui->cmdOK->setFocus(); importAgreed = false; + settingsLocked = false; watermarkAvatar = true; watermarkPicture = false; insideAvatarZone = false; @@ -262,16 +263,31 @@ void ImportDialog::cropPicture() qreal screenRatio = AppEnv::screenRatio(); QDialog cropDialog(this); +#if QT_VERSION >= 0x050000 + cropDialog.setObjectName(QStringLiteral("CropDialog")); +#else + cropDialog.setObjectName(QString::fromUtf8("CropDialog")); +#endif cropDialog.setWindowTitle(tr("Crop Picture...")); cropDialog.setWindowFlags(cropDialog.windowFlags()^Qt::WindowContextHelpButtonHint); cropDialog.setModal(true); QVBoxLayout cropLayout; +#if QT_VERSION >= 0x050000 + cropLayout.setObjectName(QStringLiteral("CropLayout")); +#else + cropLayout.setObjectName(QString::fromUtf8("CropLayout")); +#endif cropLayout.setContentsMargins(0, 0, 0, 0); cropLayout.setSpacing(0); cropDialog.setLayout(&cropLayout); ImageCropper imageCropper(&cropDialog); +#if QT_VERSION >= 0x050000 + imageCropper.setObjectName(QStringLiteral("ImageCropper")); +#else + imageCropper.setObjectName(QString::fromUtf8("ImageCropper")); +#endif imageCropper.setBackgroundColor(Qt::black); imageCropper.setCroppingRectBorderColor(QColor(255, 255, 255, 127)); imageCropper.setImage(QPixmap::fromImage(workImage, Qt::AutoColor)); @@ -280,9 +296,19 @@ void ImportDialog::cropPicture() cropLayout.addWidget(&imageCropper); QHBoxLayout buttonLayout; +#if QT_VERSION >= 0x050000 + cropLayout.setObjectName(QStringLiteral("ButtonLayout")); +#else + cropLayout.setObjectName(QString::fromUtf8("ButtonLayout")); +#endif cropLayout.addLayout(&buttonLayout); QPushButton cropButton(&cropDialog); +#if QT_VERSION >= 0x050000 + cropButton.setObjectName(QStringLiteral("CropButton")); +#else + cropButton.setObjectName(QString::fromUtf8("CropButton")); +#endif cropButton.setMinimumSize(0, 40 * screenRatio); cropButton.setText(tr("&Crop")); cropButton.setToolTip(tr("Crop Picture")); @@ -292,7 +318,7 @@ void ImportDialog::cropPicture() cropDialog.show(); cropDialog.setFixedSize(cropDialog.sizeHint()); - if (cropDialog.exec() == true) + if (cropDialog.exec() == QDialog::Accepted) { QImage *croppedImage = new QImage(imageCropper.cropImage().toImage()); setImage(croppedImage); @@ -413,6 +439,37 @@ void ImportDialog::setImage(QImage *image_) delete image_; } processImage(); + lockSettings(false); +} + +void ImportDialog::lockSettings(bool lock) +{ + ui->cbAvatar->setDisabled(lock); + ui->cbForceAvatarColour->setDisabled(lock); + ui->cbIgnore->setDisabled(lock); + ui->cbStretch->setDisabled(lock); + ui->cbWatermark->setDisabled(lock); + ui->cmdBackgroundChange->setDisabled(lock); + ui->cmdBackgroundWipe->setDisabled(lock); + ui->cmdColourChange->setDisabled(lock); + ui->labBackgroundImage->setDisabled(lock); + ui->labColour->setDisabled(lock); + ui->gbSettings->setDisabled(lock); + ui->gbBackground->setDisabled(lock); + ui->cmdOK->setDisabled(lock); + settingsLocked = lock; +} + +void ImportDialog::enableOverwriteMode() +{ + setWindowTitle(QApplication::translate("ImageEditorDialog", "Overwrite Image...")); + ui->cmdOK->setText(QApplication::translate("ImageEditorDialog", "&Overwrite")); + ui->cmdOK->setToolTip(QApplication::translate("ImageEditorDialog", "Apply changes")); + ui->cmdCancel->setText(QApplication::translate("ImageEditorDialog", "&Close")); + ui->cmdCancel->setToolTip(QApplication::translate("ImageEditorDialog", "Discard changes")); + ui->cmdCancel->setDefault(true); + ui->cmdCancel->setFocus(); + lockSettings(true); } bool ImportDialog::isImportAgreed() @@ -420,6 +477,11 @@ bool ImportDialog::isImportAgreed() return importAgreed; } +bool ImportDialog::areSettingsLocked() +{ + return settingsLocked; +} + QString ImportDialog::getImageTitle() { return imageTitle; diff --git a/ImportDialog.h b/ImportDialog.h index 7d35d49..839632f 100644 --- a/ImportDialog.h +++ b/ImportDialog.h @@ -36,7 +36,10 @@ public: QImage image(); QString getImageTitle(); void setImage(QImage *image); + void lockSettings(bool lock); + void enableOverwriteMode(); bool isImportAgreed(); + bool areSettingsLocked(); private slots: void processImage(); @@ -69,6 +72,7 @@ private: bool watermarkPicture; bool watermarkAvatar; bool watermarkBlock; + bool settingsLocked; bool importAgreed; int snapmaticResolutionLW; int snapmaticResolutionLH; diff --git a/PictureDialog.cpp b/PictureDialog.cpp index cc2cf07..5c29b60 100644 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -27,6 +27,7 @@ #include "SnapmaticEditor.h" #include "StandardPaths.h" #include "PictureExport.h" +#include "ImportDialog.h" #include "StringParser.h" #include "GlobalString.h" #include "UiModLabel.h" @@ -940,25 +941,49 @@ void PictureDialog::editSnapmaticProperties() void PictureDialog::editSnapmaticImage() { - SnapmaticPicture *picture = smpic; - ImageEditorDialog *imageEditor; + QImage *currentImage = new QImage(smpic->getImage()); + ImportDialog *importDialog; if (rqFullscreen && fullscreenWidget != nullptr) { - imageEditor = new ImageEditorDialog(picture, profileName, fullscreenWidget); + importDialog = new ImportDialog(profileName, fullscreenWidget); } else { - imageEditor = new ImageEditorDialog(picture, profileName, this); + importDialog = new ImportDialog(profileName, this); } - imageEditor->setWindowIcon(windowIcon()); - imageEditor->setModal(true); -#ifndef Q_OS_ANDROID - imageEditor->show(); -#else - imageEditor->showMaximized(); -#endif - imageEditor->exec(); - delete imageEditor; + importDialog->setWindowIcon(windowIcon()); + importDialog->setImage(currentImage); + importDialog->enableOverwriteMode(); + importDialog->setModal(true); + importDialog->exec(); + if (importDialog->isImportAgreed()) + { + const QByteArray previousPicture = smpic->getPictureStream(); + bool success = smpic->setImage(importDialog->image()); + if (success) + { + QString currentFilePath = smpic->getPictureFilePath(); + QString originalFilePath = smpic->getOriginalPictureFilePath(); + QString backupFileName = originalFilePath % ".bak"; + if (!QFile::exists(backupFileName)) + { + QFile::copy(currentFilePath, backupFileName); + } + 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; + } + smpic->emitCustomSignal("PictureUpdated"); + } + else + { + QMessageBox::warning(this, QApplication::translate("ImageEditorDialog", "Snapmatic Image Editor"), QApplication::translate("ImageEditorDialog", "Patching of Snapmatic Image failed because of Image Error")); + return; + } + } + delete importDialog; } void PictureDialog::editSnapmaticRawJson() diff --git a/SnapmaticWidget.cpp b/SnapmaticWidget.cpp index d18c006..5785219 100644 --- a/SnapmaticWidget.cpp +++ b/SnapmaticWidget.cpp @@ -27,6 +27,7 @@ #include "PictureDialog.h" #include "PictureExport.h" #include "StringParser.h" +#include "ImportDialog.h" #include "AppEnv.h" #include "config.h" #include @@ -320,11 +321,40 @@ void SnapmaticWidget::editSnapmaticRawJson() void SnapmaticWidget::editSnapmaticImage() { - ImageEditorDialog *imageEditor = new ImageEditorDialog(smpic, profileName, this); - imageEditor->setModal(true); - imageEditor->show(); - imageEditor->exec(); - delete imageEditor; + QImage *currentImage = new QImage(smpic->getImage()); + ImportDialog *importDialog = new ImportDialog(profileName, this); + importDialog->setImage(currentImage); + importDialog->enableOverwriteMode(); + importDialog->setModal(true); + importDialog->exec(); + if (importDialog->isImportAgreed()) + { + const QByteArray previousPicture = smpic->getPictureStream(); + bool success = smpic->setImage(importDialog->image()); + if (success) + { + QString currentFilePath = smpic->getPictureFilePath(); + QString originalFilePath = smpic->getOriginalPictureFilePath(); + QString backupFileName = originalFilePath % ".bak"; + if (!QFile::exists(backupFileName)) + { + QFile::copy(currentFilePath, backupFileName); + } + 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; + } + smpic->emitCustomSignal("PictureUpdated"); + } + else + { + QMessageBox::warning(this, QApplication::translate("ImageEditorDialog", "Snapmatic Image Editor"), QApplication::translate("ImageEditorDialog", "Patching of Snapmatic Image failed because of Image Error")); + return; + } + } + delete importDialog; } void SnapmaticWidget::openMapViewer() diff --git a/res/gta5sync.ts b/res/gta5sync.ts index 4a8768a..4f2b2d6 100644 --- a/res/gta5sync.ts +++ b/res/gta5sync.ts @@ -167,6 +167,7 @@ Pictures and Savegames ImageEditorDialog + Overwrite Image... @@ -182,37 +183,49 @@ Pictures and Savegames + 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,8 +265,8 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> @@ -270,8 +283,8 @@ Pictures and Savegames - - + + Background Image: @@ -326,67 +339,67 @@ Pictures and Savegames - + &Import new Picture... - + &Crop Picture... - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! - + Crop Picture... - + &Crop - + Crop Picture - + 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 - + File Background Image: File @@ -846,80 +859,80 @@ 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 @@ -1128,8 +1141,8 @@ Press 1 for Default View - - + + @@ -1140,12 +1153,12 @@ Press 1 for Default View - - - - - - + + + + + + @@ -1165,16 +1178,16 @@ Press 1 for Default View - - + + All image files (%1) - - + + All files (**) @@ -1182,16 +1195,16 @@ Press 1 for Default View - - + + Can't import %1 because file can't be open - - + + Can't import %1 because file can't be parsed properly @@ -1701,9 +1714,9 @@ Press 1 for Default View - + - + Snapmatic Properties @@ -1784,9 +1797,9 @@ Press 1 for Default View - + - + Patching of Snapmatic Properties failed because of I/O Error @@ -1978,8 +1991,8 @@ Press 1 for Default View - - + + Delete picture @@ -2039,22 +2052,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 @@ -2255,14 +2268,14 @@ Press 1 for Default View - + Show In-game - + Hide In-game diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index 3360bb0..1a8ec1d 100644 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -178,11 +178,16 @@ Snapmatic Bilder und Spielständen + + + + Snapmatic Image Editor Snapmatic Bild Editor + Overwrite Image... Bild überschreiben... @@ -198,31 +203,39 @@ Snapmatic Bilder und Spielständen + 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,8 +275,8 @@ Snapmatic Bilder und Spielständen - - + + Background Colour: <span style="color: %1">%1</span> Hintergrundfarbe: <span style="color: %1">%1</span> @@ -289,7 +302,7 @@ Snapmatic Bilder und Spielständen Hintergrundbild entfernen - + Background Image: %1 Hintergrundbild: %1 @@ -335,69 +348,69 @@ Snapmatic Bilder und Spielständen - - + + Background Image: Hintergrundbild: - + &Import new Picture... Neues Bild &importieren... - + &Crop Picture... Bild zu&schneiden... - + 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 - + Crop Picture... Bild zuschneiden... - + &Crop Zu&schneiden - + Crop Picture Bild zuschneiden - + 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 @@ -867,37 +880,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 @@ -906,39 +919,39 @@ 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 @@ -1040,7 +1053,7 @@ Drücke 1 für Standardmodus Keine gültige Datei wurde ausgewählt - + Open &JSON Editor... &JSON Editor öffnen... @@ -1155,8 +1168,8 @@ Drücke 1 für Standardmodus - - + + @@ -1167,12 +1180,12 @@ Drücke 1 für Standardmodus - - - - - - + + + + + + @@ -1209,16 +1222,16 @@ Drücke 1 für Standardmodus - - + + All image files (%1) Alle Bilddateien (%1) - - + + All files (**) @@ -1253,16 +1266,16 @@ Drücke 1 für Standardmodus - - + + 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 @@ -1726,9 +1739,9 @@ Drücke 1 für Standardmodus - + - + Snapmatic Properties Snapmatic Eigenschaften @@ -1867,9 +1880,9 @@ Drücke 1 für Standardmodus - + - + Patching of Snapmatic Properties failed because of I/O Error Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen I/O Fehler @@ -1993,23 +2006,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 @@ -2079,7 +2092,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 @@ -2305,14 +2318,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 d7c7694..fa39d1b 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -168,11 +168,16 @@ Pictures and Savegames + + + + Snapmatic Image Editor + Overwrite Image... @@ -188,31 +193,39 @@ Pictures and Savegames + 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 @@ -226,8 +239,8 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> Background Color: <span style="color: %1">%1</span> @@ -269,7 +282,7 @@ Pictures and Savegames - + Background Image: %1 @@ -325,68 +338,68 @@ Pictures and Savegames - - + + Background Image: - + &Import new Picture... - + &Crop Picture... - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - + Custom Picture Custom Picture Description in SC, don't use Special Character! - + Crop Picture... - + &Crop - + Crop Picture - + 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 @@ -846,74 +859,74 @@ 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 @@ -1022,7 +1035,7 @@ Press 1 for Default View - + Open &JSON Editor... @@ -1148,8 +1161,8 @@ Press 1 for Default View - - + + @@ -1160,12 +1173,12 @@ Press 1 for Default View - - - - - - + + + + + + @@ -1208,16 +1221,16 @@ Press 1 for Default View - - + + All image files (%1) - - + + All files (**) @@ -1257,16 +1270,16 @@ Press 1 for Default View - - + + Can't import %1 because file can't be open - - + + Can't import %1 because file can't be parsed properly @@ -1701,9 +1714,9 @@ Press 1 for Default View - + - + Snapmatic Properties @@ -1836,9 +1849,9 @@ Press 1 for Default View - + - + Patching of Snapmatic Properties failed because of I/O Error @@ -1978,8 +1991,8 @@ Press 1 for Default View - - + + Delete picture @@ -2039,22 +2052,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 @@ -2280,14 +2293,14 @@ Press 1 for Default View - + Show In-game - + Hide In-game diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index abf9beb..c2ff2fe 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -178,11 +178,16 @@ et les fichiers de sauvegarde de Grand Theft Auto V + + + + Snapmatic Image Editor Éditeur d'images Snapmatic + Overwrite Image... Remplacer l'image... @@ -198,31 +203,39 @@ et les fichiers de sauvegarde de Grand Theft Auto V + Apply changes Appliquer les changements + &Overwrite &Remplacer + Discard changes Annuler les changements + &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 @@ -262,8 +275,8 @@ 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,7 +302,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V - + Background Image: %1 Image de fond : %1 @@ -335,69 +348,69 @@ et les fichiers de sauvegarde de Grand Theft Auto V - - + + Background Image: Image de fond : - + &Import new Picture... - + &Crop Picture... - + 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é - + Crop Picture... - + &Crop - + Crop Picture - + 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 @@ -947,37 +960,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 @@ -986,39 +999,39 @@ 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 @@ -1040,7 +1053,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... @@ -1166,8 +1179,8 @@ Appuyer sur 1 pour le mode par défaut - - + + @@ -1178,12 +1191,12 @@ Appuyer sur 1 pour le mode par défaut - - - - - - + + + + + + @@ -1215,16 +1228,16 @@ Appuyer sur 1 pour le mode par défaut - - + + All image files (%1) Toutes les images (%1) - - + + All files (**) @@ -1271,16 +1284,16 @@ Appuyer sur 1 pour le mode par défaut - - + + 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 @@ -1727,9 +1740,9 @@ Appuyer sur 1 pour le mode par défaut - + - + Snapmatic Properties Propriétés Snapmatic @@ -1870,9 +1883,9 @@ Appuyer sur 1 pour le mode par défaut - + - + Patching of Snapmatic Properties failed because of I/O Error La modification des propriétés Snapmatic a échoué : erreur d'entrée/sortie @@ -2006,8 +2019,8 @@ Appuyer sur 1 pour le mode par défaut - - + + Delete picture Supprimer la photo @@ -2017,22 +2030,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 @@ -2308,14 +2321,14 @@ Appuyer sur 1 pour le mode par défaut - + Show In-game Visible en jeu - + Hide In-game Invisible en jeu diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index 48d7957..97e3e63 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -180,11 +180,16 @@ Pictures and Savegames + + + + Snapmatic Image Editor Редактор картинок Snapmatic + Overwrite Image... ПерезапиÑать картинку... @@ -200,31 +205,39 @@ Pictures and Savegames + 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 @@ -264,8 +277,8 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> Цвет фона: <span style="color: %1">%1</span> @@ -291,7 +304,7 @@ Pictures and Savegames - + Background Image: %1 Ð¤Ð¾Ð½Ð¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ°: %1 @@ -339,68 +352,68 @@ Pictures and Savegames - - + + Background Image: Ð¤Ð¾Ð½Ð¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ°: - + &Import new Picture... - + &Crop Picture... - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! Свой Ðватар - + Custom Picture Custom Picture Description in SC, don't use Special Character! Ð¡Ð²Ð¾Ñ ÐšÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ° - + Crop Picture... - + &Crop - + Crop Picture - + 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 Файл @@ -872,37 +885,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 @@ -911,39 +924,39 @@ 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 ÐеизвеÑтное меÑто @@ -1045,7 +1058,7 @@ Press 1 for Default View Картинки Snapmatic (PGTA*) - + Open &JSON Editor... Открыть &редактор JSON... @@ -1160,8 +1173,8 @@ Press 1 for Default View - - + + @@ -1172,12 +1185,12 @@ Press 1 for Default View - - - - - - + + + + + + @@ -1209,8 +1222,8 @@ Press 1 for Default View - - + + All files (**) @@ -1262,24 +1275,24 @@ Press 1 for Default View - - + + 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, файл не может быть правильно обработан @@ -1733,9 +1746,9 @@ Press 1 for Default View - + - + Snapmatic Properties СвойÑтва Snapmatic @@ -1874,9 +1887,9 @@ Press 1 for Default View - + - + Patching of Snapmatic Properties failed because of I/O Error Ðе удалоÑÑŒ измененить ÑвойÑтва Snapmatic из-за проблемы ввода/вывода @@ -2005,28 +2018,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 в игре @@ -2312,14 +2325,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 7b18b5f..25beeea 100644 --- a/res/gta5sync_uk.ts +++ b/res/gta5sync_uk.ts @@ -177,6 +177,7 @@ Pictures and Savegames ImageEditorDialog + Overwrite Image... ПерезапиÑати зображеннÑ... @@ -192,37 +193,49 @@ Pictures and Savegames + 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 Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ Ñ‡ÐµÑ€ÐµÐ· помилку картинки @@ -262,8 +275,8 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> Фоновий колір: <span style="color: %1">%1</span> @@ -280,8 +293,8 @@ Pictures and Savegames - - + + Background Image: Фонове зображеннÑ: @@ -336,68 +349,68 @@ Pictures and Savegames &СкаÑувати - + &Import new Picture... - + &Crop Picture... - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! КориÑтувацький Ðватар - + Custom Picture Custom Picture Description in SC, don't use Special Character! КориÑтувацьке Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ - + Crop Picture... - + &Crop - + Crop Picture - + 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 - + File Background Image: File Файл @@ -861,43 +874,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 @@ -906,37 +919,37 @@ 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 Режим Ð´Ð»Ñ Ð°Ð²Ð°Ñ‚Ð°Ñ€Ð¾Ðº @@ -1146,8 +1159,8 @@ Press 1 for Default View - - + + @@ -1158,12 +1171,12 @@ Press 1 for Default View - - - - - - + + + + + + @@ -1183,16 +1196,16 @@ Press 1 for Default View - - + + All image files (%1) Файли зображень (%1) - - + + All files (**) @@ -1200,16 +1213,16 @@ Press 1 for Default View - - + + Can't import %1 because file can't be open Ðеможливо імпортувати %1, оÑкільки файл не може бути відкритий - - + + Can't import %1 because file can't be parsed properly Ðеможливо імпортувати %1, оÑкільки файл неможливо розібрати правильно @@ -1727,9 +1740,9 @@ Press 1 for Default View - + - + Snapmatic Properties ВлаÑтивоÑті Snapmatic @@ -1810,9 +1823,9 @@ Press 1 for Default View - + - + Patching of Snapmatic Properties failed because of I/O Error Змінити влаÑтивоÑті Snapmatic не вдалоÑÑ Ñ‡ÐµÑ€ÐµÐ· I/O Помилку @@ -2004,8 +2017,8 @@ Press 1 for Default View - - + + Delete picture Видалити фото @@ -2065,22 +2078,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 у грі @@ -2281,14 +2294,14 @@ Press 1 for Default View - + Show In-game Показати у грі - + Hide In-game Сховати у грі diff --git a/res/gta5sync_zh_TW.ts b/res/gta5sync_zh_TW.ts index 4dbd674..9b1f39e 100644 --- a/res/gta5sync_zh_TW.ts +++ b/res/gta5sync_zh_TW.ts @@ -176,6 +176,7 @@ Pictures and Savegames ImageEditorDialog + Overwrite Image... 修改圖片... @@ -191,37 +192,49 @@ Pictures and Savegames + 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,8 +274,8 @@ Pictures and Savegames - - + + Background Colour: <span style="color: %1">%1</span> 背景é¡è‰²: <span style="color: %1">%1</span> @@ -279,8 +292,8 @@ Pictures and Savegames - - + + Background Image: 背景圖片: @@ -335,67 +348,67 @@ Pictures and Savegames å–æ¶ˆ(&C) - + &Import new Picture... - + &Crop Picture... - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! 自訂大頭貼 - + Custom Picture Custom Picture Description in SC, don't use Special Character! 自訂圖片 - + Crop Picture... - + &Crop - + Crop Picture - + 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 - + File Background Image: File 文件 @@ -859,43 +872,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 @@ -904,37 +917,37 @@ 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 大頭貼é è¦½æ¨¡å¼ @@ -1144,8 +1157,8 @@ Press 1 for Default View - - + + @@ -1156,12 +1169,12 @@ Press 1 for Default View - - - - - - + + + + + + @@ -1181,16 +1194,16 @@ Press 1 for Default View - - + + All image files (%1) 所有圖片 (%1) - - + + All files (**) @@ -1198,16 +1211,16 @@ Press 1 for Default View - - + + Can't import %1 because file can't be open 無法匯入 %1,因為檔案無法開啟 - - + + Can't import %1 because file can't be parsed properly 無法匯入 %1ï¼Œå› ç‚ºæª”æ¡ˆç„¡æ³•æ­£ç¢ºè§£æž @@ -1721,9 +1734,9 @@ Press 1 for Default View - + - + Snapmatic Properties Snapmatic 屬性 @@ -1804,9 +1817,9 @@ Press 1 for Default View - + - + Patching of Snapmatic Properties failed because of I/O Error 讀寫錯誤,未能更新 Snapmatic 屬性 @@ -1998,8 +2011,8 @@ Press 1 for Default View - - + + Delete picture 刪除圖片 @@ -2059,22 +2072,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 失敗 @@ -2275,14 +2288,14 @@ Press 1 for Default View - + Show In-game åœ¨éŠæˆ²ä¸­é¡¯ç¤º - + Hide In-game åœ¨éŠæˆ²ä¸­éš±è— From b02f06ae9706e0509c64e2c0764055b3157a3833 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 25 Jul 2018 20:52:30 +0200 Subject: [PATCH 162/359] ImportDialog improved --- ImportDialog.cpp | 170 +++++++++++++++++++++++++++++++++++ ImportDialog.h | 4 + SnapmaticEditor.ui | 6 ++ config.h | 2 +- res/gta5sync.ts | 159 +++++++++++++++++++++++++-------- res/gta5sync_de.qm | Bin 46137 -> 47820 bytes res/gta5sync_de.ts | 161 ++++++++++++++++++++++++++-------- res/gta5sync_en_US.ts | 159 +++++++++++++++++++++++++-------- res/gta5sync_fr.qm | Bin 42522 -> 42734 bytes res/gta5sync_fr.ts | 159 +++++++++++++++++++++++++-------- res/gta5sync_ru.qm | Bin 42826 -> 43064 bytes res/gta5sync_ru.ts | 200 ++++++++++++++++++++++++++++++------------ res/gta5sync_uk.qm | Bin 43809 -> 43989 bytes res/gta5sync_uk.ts | 159 +++++++++++++++++++++++++-------- res/gta5sync_zh_TW.qm | Bin 32875 -> 33007 bytes res/gta5sync_zh_TW.ts | 159 +++++++++++++++++++++++++-------- 16 files changed, 1060 insertions(+), 278 deletions(-) diff --git a/ImportDialog.cpp b/ImportDialog.cpp index bb9ebda..880db7d 100644 --- a/ImportDialog.cpp +++ b/ImportDialog.cpp @@ -24,6 +24,7 @@ #include "AppEnv.h" #include "config.h" #include +#include #include #include #include @@ -62,6 +63,13 @@ ImportDialog::ImportDialog(QString profileName, QWidget *parent) : avatarAreaImage = QImage(":/img/avatarareaimport.png"); selectedColour = QColor::fromRgb(0, 0, 0, 255); + // Set Import Settings + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("Import"); + QString currentProfile = settings.value("Profile", "Default").toString(); + settings.endGroup(); + processSettings(currentProfile); + // Set Icon for OK Button if (QIcon::hasThemeIcon("dialog-ok")) { @@ -111,6 +119,9 @@ ImportDialog::ImportDialog(QString profileName, QWidget *parent) : optionsMenu = new QMenu(this); optionsMenu->addAction(tr("&Import new Picture..."), this, SLOT(importNewPicture())); optionsMenu->addAction(tr("&Crop Picture..."), this, SLOT(cropPicture())); + optionsMenu->addSeparator(); + optionsMenu->addAction(tr("&Load Settings..."), this, SLOT(loadImportSettings())); + optionsMenu->addAction(tr("&Save Settings..."), this, SLOT(saveImportSettings())); ui->cmdOptions->setMenu(optionsMenu); setMaximumSize(sizeHint()); @@ -258,6 +269,75 @@ void ImportDialog::processWatermark(QPainter *snapmaticPainter) snapmaticPainter->drawImage(0, 0, textWatermark); } +void ImportDialog::processSettings(QString settingsProfile, bool setDefault) +{ + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("Import"); + if (setDefault) + { + settings.setValue("Profile", settingsProfile); + } + if (settingsProfile == "Default") + { + watermarkAvatar = true; + watermarkPicture = false; + selectedColour = QColor::fromRgb(0, 0, 0, 255); + backImage = QImage(); + ui->cbStretch->setChecked(false); + ui->cbForceAvatarColour->setChecked(false); + } + else + { + settings.beginGroup(settingsProfile); + watermarkAvatar = settings.value("WatermarkAvatar", true).toBool(); + watermarkPicture = settings.value("WatermarkPicture", false).toBool(); + backImage = qvariant_cast(settings.value("BackgroundImage", QImage())); + selectedColour = qvariant_cast(settings.value("SelectedColour", QColor::fromRgb(0, 0, 0, 255))); + ui->cbStretch->setChecked(settings.value("BackgroundStretch", false).toBool()); + ui->cbForceAvatarColour->setChecked(settings.value("ForceAvatarColour", false).toBool()); + settings.endGroup(); + } + if (!workImage.isNull()) + { + if (ui->cbAvatar->isChecked()) + { + ui->cbWatermark->setChecked(watermarkAvatar); + } + else + { + ui->cbWatermark->setChecked(watermarkPicture); + } + } + ui->labColour->setText(tr("Background Colour: %1").arg(selectedColour.name())); + if (!backImage.isNull()) + { + ui->labBackgroundImage->setText(tr("Background Image: %1").arg(tr("Storage", "Background Image: Storage"))); + ui->cmdBackgroundWipe->setVisible(true); + } + else + { + ui->labBackgroundImage->setText(tr("Background Image:")); + ui->cmdBackgroundWipe->setVisible(false); + } + settings.endGroup(); +} + +void ImportDialog::saveSettings(QString settingsProfile) +{ + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("Import"); + settings.beginGroup(settingsProfile); + settings.setValue("WatermarkAvatar", watermarkAvatar); + settings.setValue("WatermarkPicture", watermarkPicture); + settings.setValue("BackgroundImage", backImage); + settings.setValue("SelectedColour", selectedColour); + settings.setValue("BackgroundStretch", ui->cbStretch->isChecked()); + settings.setValue("ForceAvatarColour", ui->cbForceAvatarColour->isChecked()); + settings.endGroup(); + settings.setValue("Profile", settingsProfile); + settings.endGroup(); +} + void ImportDialog::cropPicture() { qreal screenRatio = AppEnv::screenRatio(); @@ -394,6 +474,96 @@ fileDialogPreOpen: //Work? settings.endGroup(); } +void ImportDialog::loadImportSettings() +{ + if (settingsLocked) + { + QMessageBox::information(this, tr("Load Settings..."), tr("Please import a new picture first")); + return; + } + bool ok; + QStringList profileList; + profileList << tr("Default", "Default as Default Profile") + << tr("Profile %1", "Profile %1 as Profile 1").arg("1") + << tr("Profile %1", "Profile %1 as Profile 1").arg("2") + << tr("Profile %1", "Profile %1 as Profile 1").arg("3") + << tr("Profile %1", "Profile %1 as Profile 1").arg("4") + << tr("Profile %1", "Profile %1 as Profile 1").arg("5"); + QString sProfile = QInputDialog::getItem(this, tr("Load Settings..."), tr("Please select your settings profile"), profileList, 0, false, &ok, windowFlags()); + if (ok) + { + QString pProfile; + if (sProfile == tr("Default", "Default as Default Profile")) + { + pProfile = "Default"; + } + else if (sProfile == tr("Profile %1", "Profile %1 as Profile 1").arg("1")) + { + pProfile = "Profile 1"; + } + else if (sProfile == tr("Profile %1", "Profile %1 as Profile 1").arg("2")) + { + pProfile = "Profile 2"; + } + else if (sProfile == tr("Profile %1", "Profile %1 as Profile 1").arg("3")) + { + pProfile = "Profile 3"; + } + else if (sProfile == tr("Profile %1", "Profile %1 as Profile 1").arg("4")) + { + pProfile = "Profile 4"; + } + else if (sProfile == tr("Profile %1", "Profile %1 as Profile 1").arg("5")) + { + pProfile = "Profile 5"; + } + processSettings(pProfile, true); + processImage(); + } +} + +void ImportDialog::saveImportSettings() +{ + if (settingsLocked) + { + QMessageBox::information(this, tr("Save Settings..."), tr("Please import a new picture first")); + return; + } + bool ok; + QStringList profileList; + profileList << tr("Profile %1", "Profile %1 as Profile 1").arg("1") + << tr("Profile %1", "Profile %1 as Profile 1").arg("2") + << tr("Profile %1", "Profile %1 as Profile 1").arg("3") + << tr("Profile %1", "Profile %1 as Profile 1").arg("4") + << tr("Profile %1", "Profile %1 as Profile 1").arg("5"); + QString sProfile = QInputDialog::getItem(this, tr("Save Settings..."), tr("Please select your settings profile"), profileList, 0, false, &ok, windowFlags()); + if (ok) + { + QString pProfile; + if (sProfile == tr("Profile %1", "Profile %1 as Profile 1").arg("1")) + { + pProfile = "Profile 1"; + } + else if (sProfile == tr("Profile %1", "Profile %1 as Profile 1").arg("2")) + { + pProfile = "Profile 2"; + } + else if (sProfile == tr("Profile %1", "Profile %1 as Profile 1").arg("3")) + { + pProfile = "Profile 3"; + } + else if (sProfile == tr("Profile %1", "Profile %1 as Profile 1").arg("4")) + { + pProfile = "Profile 4"; + } + else if (sProfile == tr("Profile %1", "Profile %1 as Profile 1").arg("5")) + { + pProfile = "Profile 5"; + } + saveSettings(pProfile); + } +} + QImage ImportDialog::image() { return newImage; diff --git a/ImportDialog.h b/ImportDialog.h index 839632f..dda74b3 100644 --- a/ImportDialog.h +++ b/ImportDialog.h @@ -45,6 +45,8 @@ private slots: void processImage(); void cropPicture(); void importNewPicture(); + void loadImportSettings(); + void saveImportSettings(); void on_cbIgnore_toggled(bool checked); void on_cbAvatar_toggled(bool checked); void on_cmdCancel_clicked(); @@ -77,6 +79,8 @@ private: int snapmaticResolutionLW; int snapmaticResolutionLH; void processWatermark(QPainter *snapmaticPainter); + void processSettings(QString settingsProfile, bool setDefault = false); + void saveSettings(QString settingsProfile); }; #endif // IMPORTDIALOG_H diff --git a/SnapmaticEditor.ui b/SnapmaticEditor.ui index e591fcc..fc9ede9 100644 --- a/SnapmaticEditor.ui +++ b/SnapmaticEditor.ui @@ -236,6 +236,9 @@ 0 + + Apply changes + &Apply @@ -249,6 +252,9 @@ 0 + + Discard changes + &Cancel diff --git a/config.h b/config.h index 2381763..ca74c4b 100644 --- a/config.h +++ b/config.h @@ -28,7 +28,7 @@ #endif #ifndef GTA5SYNC_APPVENDORLINK -#define GTA5SYNC_APPVENDORLINK "https://github.com/Syping/" +#define GTA5SYNC_APPVENDORLINK "g5e://about?U3lwaW5n:R2l0TGFiOiA8YSBocmVmPSJodHRwczovL2dpdGxhYi5jb20vU3lwaW5nIj5TeXBpbmc8L2E+PGJyLz5HaXRIdWI6IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9TeXBpbmciPlN5cGluZzwvYT48YnIvPlNvY2lhbCBDbHViOiA8YSBocmVmPSJodHRwczovL3NvY2lhbGNsdWIucm9ja3N0YXJnYW1lcy5jb20vbWVtYmVyL1N5cGluZy80NjMwMzA1NiI+U3lwaW5nPC9hPg==" #endif #ifndef GTA5SYNC_APPSTR diff --git a/res/gta5sync.ts b/res/gta5sync.ts index 4f2b2d6..40d457f 100644 --- a/res/gta5sync.ts +++ b/res/gta5sync.ts @@ -167,7 +167,7 @@ Pictures and Savegames ImageEditorDialog - + Overwrite Image... @@ -183,25 +183,25 @@ Pictures and Savegames - + Apply changes - + &Overwrite - + Discard changes - + &Close @@ -265,8 +265,9 @@ Pictures and Savegames - - + + + Background Colour: <span style="color: %1">%1</span> @@ -283,8 +284,9 @@ Pictures and Savegames - - + + + Background Image: @@ -339,67 +341,140 @@ 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 @@ -1141,8 +1216,8 @@ Press 1 for Default View - - + + @@ -1153,12 +1228,12 @@ Press 1 for Default View - - - - - - + + + + + + @@ -1178,16 +1253,16 @@ Press 1 for Default View - - + + All image files (%1) - - + + All files (**) @@ -1195,16 +1270,16 @@ Press 1 for Default View - - + + Can't import %1 because file can't be open - - + + Can't import %1 because file can't be parsed properly @@ -1777,11 +1852,21 @@ Press 1 for Default View + Apply changes + + + + &Apply - + + Discard changes + + + + &Cancel diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index f97f7350aa240cbb22702f9e6dbcab627ff21f4b..4a7499aa1f6dd3efbe9dd70672d595bddcecb03b 100644 GIT binary patch delta 4582 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 MT`PN9EcW&LCtV298UO$Q delta 3380 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 diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index 1a8ec1d..e988307 100644 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -46,7 +46,7 @@ Läuft auf Qt %6<br/> TRANSLATOR Insert your name here and profile here in following scheme, First Translator,First Profile\nSecond Translator\nThird Translator,Second Profile - Syping,https://github.com/Syping/ + Syping,g5e://about?U3lwaW5n:R2l0TGFiOiA8YSBocmVmPSJodHRwczovL2dpdGxhYi5jb20vU3lwaW5nIj5TeXBpbmc8L2E+PGJyLz5HaXRIdWI6IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9TeXBpbmciPlN5cGluZzwvYT48YnIvPlNvY2lhbCBDbHViOiA8YSBocmVmPSJodHRwczovL3NvY2lhbGNsdWIucm9ja3N0YXJnYW1lcy5jb20vbWVtYmVyL1N5cGluZy80NjMwMzA1NiI+U3lwaW5nPC9hPg== @@ -187,7 +187,7 @@ Snapmatic Bilder und Spielständen - + Overwrite Image... Bild überschreiben... @@ -203,25 +203,25 @@ Snapmatic Bilder und Spielständen - + Apply changes Änderungen übernehmen - + &Overwrite &Überschreiben - + Discard changes Änderungen verwerfen - + &Close S&chließen @@ -275,8 +275,9 @@ Snapmatic Bilder und Spielständen - - + + + Background Colour: <span style="color: %1">%1</span> Hintergrundfarbe: <span style="color: %1">%1</span> @@ -302,7 +303,8 @@ Snapmatic Bilder und Spielständen Hintergrundbild entfernen - + + Background Image: %1 Hintergrundbild: %1 @@ -348,69 +350,142 @@ 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 @@ -1168,8 +1243,8 @@ Drücke 1 für Standardmodus - - + + @@ -1180,12 +1255,12 @@ Drücke 1 für Standardmodus - - - - - - + + + + + + @@ -1222,16 +1297,16 @@ Drücke 1 für Standardmodus - - + + All image files (%1) Alle Bilddateien (%1) - - + + All files (**) @@ -1266,16 +1341,16 @@ Drücke 1 für Standardmodus - - + + 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 @@ -1836,11 +1911,21 @@ Drücke 1 für Standardmodus + Apply changes + Änderungen übernehmen + + + &Apply &Übernehmen - + + Discard changes + Änderungen verwerfen + + + &Cancel Abbre&chen diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index fa39d1b..a6e3121 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -177,7 +177,7 @@ Pictures and Savegames - + Overwrite Image... @@ -193,25 +193,25 @@ Pictures and Savegames - + Apply changes - + &Overwrite - + Discard changes - + &Close @@ -239,8 +239,9 @@ Pictures and Savegames - - + + + Background Colour: <span style="color: %1">%1</span> Background Color: <span style="color: %1">%1</span> @@ -282,7 +283,8 @@ Pictures and Savegames - + + Background Image: %1 @@ -338,68 +340,141 @@ 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 @@ -1161,8 +1236,8 @@ Press 1 for Default View - - + + @@ -1173,12 +1248,12 @@ Press 1 for Default View - - - - - - + + + + + + @@ -1221,16 +1296,16 @@ Press 1 for Default View - - + + All image files (%1) - - + + All files (**) @@ -1270,16 +1345,16 @@ Press 1 for Default View - - + + Can't import %1 because file can't be open - - + + Can't import %1 because file can't be parsed properly @@ -1805,11 +1880,21 @@ Press 1 for Default View + Apply changes + + + + &Apply - + + Discard changes + + + + &Cancel diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index ca934720260141465a527a7df5b4c91227739357..b15e8f1861e3a25d2ec3a9cdb33c445dcc9e0a02 100644 GIT binary patch delta 1383 zcmX9;dr(w$7(ILUUUu)jyYBeFOA2>QZ%t2NqmB;c@ z9W1Ac<(#B5+pEKDBu8V)88drc%v9`>4En0}7{>>7mZIS=Ul5%TFg zVEST&ct|rdy;wd1QB#N~bvS0HUk7#_WJwBx;wsBk%+MDU93CO*Z$bviFK;`aLju=NP;XD0wNH45pwP#`1Oi={(e+(7Ao7sX+4 zfZq+p@whf1HeBKQo3xdrvUDzT_#fPwMMc1tDO^?w`NCRRGgr#(%w-m(VGQHWbkZ}m z3%KsxIv~c%xz>|cyNxVMsZacx8@x^JD(vIjH?9DQ3%P%0W&^`Ns4;!91=_7%_-ZX`KDuO z)Zm+Zi|q|S{FCpHSCB!ieAoU-z~%+K%UTOeO7r5n059%P@vf6LIycDQPU`?(XyS)@ zE)ve*ADtrYj`vtUAH><5>@lyO@RyKprV>V{2o0emDZf@|C?@hEr*Pn3aw9oYa275h zSClMDm@JjP;uCm&7_~c_Z55Kay7{bENH$d%R5kl^X@Xi+jw=otf(t6=8LHD>rfPld zE)YIT)qdvK2(frP4%|1rI!X@g% z=_FwJS@p^A?ZB!=b=O%Mhx{~l$H(kvTQ2JRW60Xi#USedJv~-54vhnLIG9Cc4z@>$ z@%C;C%1kj$)ee}7#T9i_R*q53jJ*%+3}q!MBA}f!t2<>eBgSb-mbUjs#wsE8a_aKvT=H0adhAWs#<>ZlLQQvoN)h+f&Ap)NgY2 z5$w3yY${8XT!*Ux-^Ws)fgIkRCw=n)-F-Gry46O~-r6S($T>jqE~XU|UMzl2uC!3S zyH?4SbEu$vUu+@LSo&kl+Q(z_3{3)Yr{5Rk6P~8mktzk%hwzf)BFp} zEgBTpn6G5y@)Rse3gT)Hu{0^jue4dyFo%xH`!r4+2}p0$oVrK)+1tz^8H0D1X#Kx8 z1DeNL|3Qjz!86+Nk>3LTm$jxFG!q4zSiclKqG*EFe&ivgJ44%&984MPW?}Mbzm4;C zDdV##&Ohi@tak$=J9ODS6xDZTv1U11pI4{5A2bgLJE?QOOOLE;UrV+2wsV@_tZe1D X1Xfz<%kC8Qu(q%`&v*N2TWawCcigQ) delta 1333 zcmX9-ZA?>V7(Kncx9z=`+5l<;2pt$YR#-tNfkV$?RvTwKr&1cU-}b^?JBfNqTwz4cD49t7sipzp;_^nMTcv=7)d0>0`9AQ%Wc z0fQd=(E?!iOYq%1@WpxX4nn&b{B3_=rWX9rYGCd~CuZ!1us9T6*p><*jszIXAvmrA zxj9a(UTb@x-vF4VS?4^4>1+((5eL&W`@SfcrrG!9z%k88!A%t-VZ0ra0UI^@2 z2`pZXz-iLVOegM6L}WPeq`D%;au={YWNQ=#g$v75EYp=OG6SDIz~0UQ(qG7KDh#d> z7`aR5q&AFxB>+2z*_1*rE>KAKgMgYR%$r-JZwCi>-cy{3KLx}ED;zKA<+28r$A!5D zaTy<$0y}cKta6%u|2XU6D!7`HEJkVY2;q7!CIW0PcdcFrEY0T}+2n*hofRteN$%X( zC@rJJjhno83rJeU{T;mpaQ&A1H^iM5utX^y{Sl;AIs5z9K=>J@M=t#jx}yxun*^#W zm1{co03j=soAP~uy2ETlS;W=FG7E1`*|VMRIFUx{d&GBIKL*6V_-;9!#vbP{9a;cv z+sixh>wpDmPTV@jiIvg37f5^EeKyYfaHWr!R?xpS zUnn-y2(wd!<{*+(bX#aHBl40*!jXT-jpR(BwPY>1vVsf#Bupt`igFgPK`XMz_Wn>epw- zXj3&BA(oO*b%nL4^x`~C{4ocmvxN1ijGnvfnsy5b*l<~MF1Ql-yiIfIGA+HRiA|}@ zo~13K{=rhZ%ZWbuBlNVdXnZ*rsJz2s)Mmfh0x`jMjcO1rrm4Fqp=Dxv1C5nq6f@(V zQ!Fx=U2S}~vQTX8O$6#=#g5>QfK`*?wWZXetaak`;s1cVi{kBd?~|27;*dEEcxQ$9 zEagucFp5p8qok^ADPm(YU7ui)8Y9=x$1IvpxTZ|juQ8h{swGEz4KQm;8ZwZ>d(KKf z9jCi*#7o1cNZR@qX++KethboAm^k0MUaktId2NT~s#qFm^KVY9_(86^ahhsXF56y} zP|3fM?fOOJgD)csl0>=n)UOofaJl0<+CbA)`MlK!SZI?kSW~IWrShdLvbgaeA+a_t zk*`FN^$A|GBew`>SS}B=SSYE2JZPs97OR*b85BC^FB!RlNR}Y^aO^S5l6*YN$6T6Y z>8RY|(yAi?mNu6Q&q)9N4%Q|a{p`J3uV2i7%aqn@>}z6LtqlnK8SuKPHQl336rX0} zQj}YXMQb}YK^@+#?M(Iq$^{lFZ}iN6qDu+b0z^O5rDsn9?%ldA160-RyI7ALr7sxN kJ@;7&ynRkLd5|92+O-Kd;M(Qp@_Rm8Zyo4jWvPDu1OLXHh5!Hn diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index c2ff2fe..0058fb3 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -187,7 +187,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V - + Overwrite Image... Remplacer l'image... @@ -203,25 +203,25 @@ et les fichiers de sauvegarde de Grand Theft Auto V - + Apply changes Appliquer les changements - + &Overwrite &Remplacer - + Discard changes Annuler les changements - + &Close &Fermer @@ -275,8 +275,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> @@ -302,7 +303,8 @@ et les fichiers de sauvegarde de Grand Theft Auto V - + + Background Image: %1 Image de fond : %1 @@ -348,69 +350,142 @@ et les fichiers de sauvegarde de Grand Theft Auto V - - + + + Background Image: Image de fond : - + &Import new Picture... - + &Crop Picture... - + + &Load Settings... + + + + + &Save Settings... + + + + 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 + + + + 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... + + + + 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 @@ -1179,8 +1254,8 @@ Appuyer sur 1 pour le mode par défaut - - + + @@ -1191,12 +1266,12 @@ Appuyer sur 1 pour le mode par défaut - - - - - - + + + + + + @@ -1228,16 +1303,16 @@ Appuyer sur 1 pour le mode par défaut - - + + All image files (%1) Toutes les images (%1) - - + + All files (**) @@ -1284,16 +1359,16 @@ Appuyer sur 1 pour le mode par défaut - - + + 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 @@ -1837,11 +1912,21 @@ Appuyer sur 1 pour le mode par défaut + Apply changes + Appliquer les changements + + + &Apply A&ppliquer - + + Discard changes + Annuler les changements + + + &Cancel A&nnuler diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index c45bd06c1e02c92a4ff8cb9a33a56039a64d53e9..e5de3ece17dd86076213a3b22fbc654f2d827e92 100644 GIT binary patch delta 3268 zcmZXWdt6QF8pnTo?X@p!t-af*rcf$Eib~`zi7w<8g(4#f(Z!`2jO<8q$)!mX=?slV zs2MYo%S29$gE54R8RHyB2BUFehH2d9jPq;O`ONv_{L$yTd)Ip3=Xrk5L0x%VDs34aD@)MQb)qt=H==dohUI*M80Nr?C`E9_%A8>jf@EQzQE~s?oTI>H? zy8*pzxc*F~^Gx9FGr;N?h&*=oq?1w4-g z108z6v(;XH0X%8Xiv08NY&H1aJb3=gm)rrb?Pmc;8D1wx0YiR-SF53duZdRn*5CK0i{``W0=ZLM^wI3qbY~LT1nJYk2yr? zb2RnO=}6A6nugIS%zv}yQE?}r=QvGs^F5&LP0df{&w$w91-Cgh1vKO+Oz7FfND_qU z=URaE&xLstR|6~d3&}Z=K;Z;o@dx{XafgLGA3itjQfWUy*gdm1(7!?D{8PfdcLoCO zKUO*7p~{TG1XoxJ*ike_-UcT8P4rmQ4w%zk^ncC7hrJg252pj^ z?}-xz>;e{F6j$8{VC2=}y0(+pQ{iIX2Ii^lUU5^*W)2RBdxBZPgVu?aJwKv?`&Dij zFIHB>veb23#e>;X0O_z;qs(G6cMxlL^(D`X^%>iMzTH)(=BeD+Myx-U&F7Kg!`K@3 z(01{~wTq;W_}l0HR3btrw(g5PuCv=$#K6|795!6n_ro2)nmAp|<bd~*? znvq9!pB^~L)Hv!I1omJ^v|iW03eZm0+yCSZbc)iq4|@r$y`y(NYs1!ht)Cc6rKcX% z$6JL|O8bNU=srr#lSq52vXo3+ev`ZT+ubDiPN*oiE@L5BOsnd-R@438`N06UF_-;b~eGcQ?< zx)2uI=4VFdv)({tALH;>Wvqpl#-OLAygAkw$Ly;I*4;HGm(r0Lr;Vv~32Z-C|QdfWr!F`xAuk9Ee{)7RK$-x^OJqaFQ7amm# z$iXVR*h+rBtbxEyQor@VbTCEgcjY+8-nUX{(Pmy8SERA|7dY;6rC381=lMcuRuL6S z>mVhC{Y=NU)<{Wn_(Pm7Eq?CDL2Q(APtoJ{L!}KNw^{uQq&#nb8V-}n>c%n0DrBhui z8NtZz>O#gc`IwVEbCxLA-p~P2gXD9!8o5!H&ljC#ccjP{AJNdxW%5@EX~6hm`BIRE zS6;JRpK%y47OPCGQkf*E%>6~KFJ~&=>LuTBiQ?UxD}Q@{%D4u|_YPT^o0$#rePs!+ zrlE4vMM^t!s-kK2Jg!vH2HJ5z)hd=&DQCY?+8?GPu8oREV>=$WLg|}HDQ!k7143Ka z1&frJtA6|_c%fw5FcqHrlr>4$SxXH{o_{3ghP{#(a-Yvft6b-!=N)D#`M<3K z+BhqP4g*;f{ge`~HGFZ6%60RVvO`oNr(CH#)vCZ(%JJ+@ydray&$FlT^Ja!pn@q=w zYe^a?PE)=JXyS}tq|~P|kRAJ#Ykx`Loibf%DCAd5R)libA)eJAu2_Gq`Ht<@Tls^o zMJBO0m_;_*Bt2q8Q+Au$esUEEzhkn?wPlgMHaRPl+~waU=Mx=RY>Q1^9?z(hk7;HX zI;KxIEeR*1Uz%1NoxwX{nrZ!rLZ&9rRMd;>Qj)1eBeKZnsLUPbXetSzXUZN^nT3%j zd~Evs2~$znwqTR&VBKhX^Z`rC|FG$|MclsK$=va_H?R6P=8jFA23h51&s#ixmDb#U zJ?E(1LzV8Y%|iood37x{2b$|R;6u!lYMFq@-R4MsLSlrw$~kG~rPrzd>c{5%eGDVM z(0p(*6S{Vu`RK`L=3z*l`XhF#`IzHJ%=k_7nP_`XiA)=@^^T0Hwdr{NE))3Drmuxf z9JJFWWEd;JcAib@O6ursZ*zENA~2>}W%3l8lPTO6&}`{2pW#k_X$g2rJ(sq##CW8z z72+(j7PWAHizVgSA%23tTW49gnVuW(Shk;|paV-RAHIoV7oV|IT%rO!YAuz^12_j0 zEoY7;05K0OS1wmmv1rTP&YuDA%9fuyG2&jUEiF5#+`{hkro^f0l``6-a~C^_K?Q5O z^eB+r?FxE1IuuNF8&&nA<2EVOU2G?Yi@imEF;E;J28sS~6+=Wn{vX6&BgFu5sOW2K zz1;QubDWfrln|fhIx8-I!Q92E=_#{a<5QDT(-#*sy1dn~-+#{v6n%Npm_PRih<*k0 zot#|%JjUVwk4a39n_Cd)>QJ?^bF}7v4p&L;%e7Ufx-Xel5I5eoAkfpNpgP;W$}ii| F{Xa1?u+9Jg delta 3114 zcmXAr3tWx&AICrEInTK~&vQ!_d8K9T&flF>}|II z%mUiqAy)wMBb8oWfRGM!d}-XG7k7xVHw(-vIYN`jHjz*m@pt90QNj?*PN+!=p7&w2#VlH5f6N9}2w>|41sc zaTUg`Ar~|vaL{d5ScJfc?m!1CCLHATte2Q^s0w&H8KH--0s(~x{f6;8JhAMzR2wt? z2DX_~fZltMmR1ay0#rKwsIr@c%pq*Y{8jkqa09UXTYSEtEwE@ij=x9(Mg-&1(E-4F zDX1-G!mEmKw~>M6T>So-4oDe=$1#(DF=mbYvnQ~$hsw35NgFTZg=?JmGvjVoH31|@3phYtnDW@+-1e+86>Djm~RcIm6x3xOWlqbUzMLdjoi>Yg!yH61kH zjgMj9qcjf+yRgy=nuibRueLWdf0@4m!j=o&DmDVvd|`69XEPn!JniD- zZVY7AMwd`$r<*DV1Zmg2Vc+x(+T58E`!`Q}%*q5u?$lOCP}ZOn?fKjmT71eVZEYHb zH;mRk+ePcyuN3vldFr=GGzQ;fVk1SjxVM1FPekiWHasv<^clqjk`!_B;9WrcSTX&Y zFDw5+T;FyY(CM6*y@7pddqDg+G>0n!#A1Iscc?}z_52)&>8>&>PAokbMvLq6#KRdg z0qLk%q0HkD4;L$U4J7Z2b;+B60Yxffbt*S_i*+Y5ct2VEJ*FdEhkv&ewe> zaQ6Hg^g5q1Ks!V4@Rt|hT&s5qd=9J?^v>t)xQICGr-o7KS^f0$Z9*&%HCKOpAEk5c zsXzBC`SyPOm4KeCC|G}6LkZo+>R+7t9&mVWkXsVjLm!p%N>s-EY_J#i0$Uvnoo-H| zCwd#)UR86^h%@y0g7j@M%voAaC7u}~Q&_ph)v$OJpK~~Du>JcZ{D@)cZC+5OsGMLl z#Qx9(j4Cvw94ZDrN;Tx|N@7B988+8$20qzsC^;KLPBnZr;ZMNpBSYE2r$Ba~p}c{L zMLaQ7RdFi14>jDHI2CXyGu-`}tzJ0C@aMq+K%u+g^)Z@o)gzlx7eKS+I2fJJd$ARz z#!)Xy=!NIT(NDM|Tj@>rnhqu`h|KY}z7`9?uyfLlY zkK9Rm8TUr=dc+*#iN0A}cZV7)s~UjR7sjd+jH4fGJb#WJn;KwzRKY^J+63cMmr7t_ zs_{)&I51_aF!B`>c8d`I7s6Pa@gx9(!~54E_aZ^3}tLdvox=O3MFimq5~h(W4Sk^=qUaW zXG`(Vyn!X@(z-LuxWh_mL%>bC|BjUHWo6(cQpwp#KtYXE+Ls=gyh*C@qom86rOS8T z0LdOw{p|6;2OiQjFCV}=Q+gEoge|%*YnqvGOo*&`(8|NI*`YfV@RD67dUO8W!(`XA zci3yK+;1RznYcwB7PW(%tn%Ypm0Q=!BZ^;efvS*4Moa%b$d@tdiJmns}(e6um z<|8{`o3}jc9;F@TC`TMi1qO!53&4Whev!An!|z%ORCXTPN>(tYNWGBsL_X2kfm>OV zTzO3g1eeJduHWX18S=$~^E_qTlP^DDpu+9)w~>j!yY1vFqcyhEm#=l5&W&Wh{GS6gen75D4|`TGI(4I-G5&Rz3RGEQ!=9) z>7f=S+ZxRE!biytxXZn@TIISaO7^!**lCxNZ+n#vwCSd7b{s;N&Qf-GWb(oPsa%(> zlpLV~nKer3nbykxRKCvW!oBgeax&vRj@J)L6(4VoOk(9Ov_Vbx!%a;wMg7f5rCi50^G3vCyC9T5FOXu%ekxrnZN! z0uw?^_UqcwoG(qz3Z?FvY;r!;ktW+@@^E`f<@TB8_F!WABvZl!G9=!#>UcQ!f)rEM zn9Xd7pQ)e^uS?OU9U775{zc{5_f0zjn3z)B##CZq<&nKiCm*o|n+9zBRCct9rUyG| zC2Jqkt2n-1;A`%5(~Fy^*4(L?tAMS>?B>I1@3h|Rew|^`T+KdNTu1HyP}wulJi>1s z9rD=hXFkhmKVzO&$wmY_nSjC^Qb(a1)uZez~h$8zS|nGerkV{L0Tn2(56N8l&Ryto#=|J)MOaD+$hmA_iv z&tb;KTb8XCDCiIe%V%$<1F^#`2d_|p-aeMnmA>41nk>~PC}e1arM|YD!`5JF>i!i^ z;+~erU0A8-OH0dkDi>SCY_|KB$)@q9jXV1UY#h9%ZJwi0CSIYkC8Kv#@ xhX0JMd$ykcJG%CFahnvmBGF|`bZkOoLZVAhM9jjZh=pZ-Zdvb@xny?e`G0=$hBN>G diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index 97e3e63..cc6c41a 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -98,7 +98,8 @@ Pictures and Savegames Custom - Ðе извеÑтен контекÑÑ‚ + Ðе извеÑтен контекÑÑ‚ + Ð¡Ð²Ð¾Ñ @@ -116,7 +117,8 @@ Pictures and Savegames Dialog - Возможно не Ñто имелоÑÑŒ ввиду, немецкого перевода нету + Возможно не Ñто имелоÑÑŒ ввиду, немецкого перевода нету + Диалоговое окно @@ -189,14 +191,14 @@ Pictures and Savegames - + Overwrite Image... ПерезапиÑать картинку... Import picture - Импортировать картинку + Импортировать картинку @@ -205,25 +207,25 @@ Pictures and Savegames - + Apply changes - Применить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ + Применить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ - + &Overwrite &ПерезапиÑать - + Discard changes - Отвергнуть Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ + Отменить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ - + &Close &Закрыть @@ -277,15 +279,16 @@ Pictures and Savegames - - + + + Background Colour: <span style="color: %1">%1</span> Цвет фона: <span style="color: %1">%1</span> Select background colour - + Выберите цвет фона @@ -296,7 +299,7 @@ Pictures and Savegames Select background image - + Выбрать фоновое изображение @@ -304,14 +307,16 @@ Pictures and Savegames - + + Background Image: %1 Ð¤Ð¾Ð½Ð¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ°: %1 X - latin X + latin X + X @@ -347,73 +352,147 @@ Pictures and Savegames &Cancel - Я не уверен наÑчет горÑчих клавиш... + Я не уверен наÑчет горÑчих клавиш... + От&мена - - + + + 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... + + + + 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 Файл @@ -429,7 +508,7 @@ When you want to use it as Avatar the image will be detached! Apply changes - Применить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ + Применить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ @@ -439,7 +518,7 @@ When you want to use it as Avatar the image will be detached! Discard changes - Отвергнуть Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ + Отменить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ @@ -462,7 +541,7 @@ When you want to use it as Avatar the image will be detached! Close viewer - Закрыть проÑмотрщик + Закрыть проÑмотрщик @@ -675,7 +754,8 @@ Y: %2 Hardware, Application and OS Specification - Application = gta5view + Application = gta5view + Железо, выпуÑк программы, тип ОС @@ -708,7 +788,8 @@ Y: %2 Language for Areas - Язык Ð´Ð»Ñ Ð¼ÐµÑтоположений? + Язык Ð´Ð»Ñ Ð¼ÐµÑтоположений? + Язык перевода меÑтоположений @@ -785,7 +866,7 @@ Y: %2 %1 (Next Closest Language) First language a person can talk with a different person/application. "Native" or "Not Native". - + @@ -1168,13 +1249,14 @@ Press 1 for Default View <h4>Following Snapmatic Pictures got repaired</h4>%1 - Change wording if the %1 is not a multiline beginning at new line + Change wording if the %1 is not a multiline beginning at new line + <h4>ÐижеÑледующие картинки Snapmatic были воÑÑтановлены</h4>%1 - - + + @@ -1185,12 +1267,12 @@ Press 1 for Default View - - - - - - + + + + + + @@ -1222,8 +1304,8 @@ Press 1 for Default View - - + + All files (**) @@ -1275,24 +1357,24 @@ Press 1 for Default View - - + + 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, файл не может быть правильно обработан @@ -1843,11 +1925,21 @@ Press 1 for Default View + Apply changes + Применить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ + + + &Apply &Применить - + + Discard changes + + + + &Cancel &Отмена @@ -2124,7 +2216,7 @@ Press 1 for Default View &OK - &ОК + &ОК diff --git a/res/gta5sync_uk.qm b/res/gta5sync_uk.qm index d271641aab8230bfee70588f6f889d89a0032b7c..7d21baae0edd9e341938dd6d071b06861bb9a949 100644 GIT binary patch delta 1365 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 P9W1`=YDZ4_TEG7R)U=o| diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts index 25beeea..b1c29f6 100644 --- a/res/gta5sync_uk.ts +++ b/res/gta5sync_uk.ts @@ -177,7 +177,7 @@ Pictures and Savegames ImageEditorDialog - + Overwrite Image... ПерезапиÑати зображеннÑ... @@ -193,25 +193,25 @@ Pictures and Savegames - + Apply changes ЗаÑтоÑувати зміни - + &Overwrite &ПерезапиÑати - + Discard changes СкаÑувати зміни - + &Close &Закрити @@ -275,8 +275,9 @@ Pictures and Savegames - - + + + Background Colour: <span style="color: %1">%1</span> Фоновий колір: <span style="color: %1">%1</span> @@ -293,8 +294,9 @@ Pictures and Savegames - - + + + Background Image: Фонове зображеннÑ: @@ -349,68 +351,141 @@ 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 Зона 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 Файл @@ -1159,8 +1234,8 @@ Press 1 for Default View - - + + @@ -1171,12 +1246,12 @@ Press 1 for Default View - - - - - - + + + + + + @@ -1196,16 +1271,16 @@ Press 1 for Default View - - + + All image files (%1) Файли зображень (%1) - - + + All files (**) @@ -1213,16 +1288,16 @@ Press 1 for Default View - - + + Can't import %1 because file can't be open Ðеможливо імпортувати %1, оÑкільки файл не може бути відкритий - - + + Can't import %1 because file can't be parsed properly Ðеможливо імпортувати %1, оÑкільки файл неможливо розібрати правильно @@ -1803,11 +1878,21 @@ Press 1 for Default View + Apply changes + ЗаÑтоÑувати зміни + + + &Apply &ЗаÑтоÑувати - + + Discard changes + СкаÑувати зміни + + + &Cancel &СкаÑувати diff --git a/res/gta5sync_zh_TW.qm b/res/gta5sync_zh_TW.qm index 14d54eb7a92500cf8a1b090e039c06757bd3ade6..e1a9e6299392cf008bd2d67c5e30988f1d9151a0 100644 GIT binary patch delta 1309 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 diff --git a/res/gta5sync_zh_TW.ts b/res/gta5sync_zh_TW.ts index 9b1f39e..09df532 100644 --- a/res/gta5sync_zh_TW.ts +++ b/res/gta5sync_zh_TW.ts @@ -176,7 +176,7 @@ Pictures and Savegames ImageEditorDialog - + Overwrite Image... 修改圖片... @@ -192,25 +192,25 @@ Pictures and Savegames - + Apply changes 套用變更 - + &Overwrite 修改(&O) - + Discard changes æ¨æ£„變更 - + &Close 關閉(&C) @@ -274,8 +274,9 @@ Pictures and Savegames - - + + + Background Colour: <span style="color: %1">%1</span> 背景é¡è‰²: <span style="color: %1">%1</span> @@ -292,8 +293,9 @@ Pictures and Savegames - - + + + Background Image: 背景圖片: @@ -348,67 +350,140 @@ Pictures and Savegames å–æ¶ˆ(&C) - + &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 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 文件 @@ -1157,8 +1232,8 @@ Press 1 for Default View - - + + @@ -1169,12 +1244,12 @@ Press 1 for Default View - - - - - - + + + + + + @@ -1194,16 +1269,16 @@ Press 1 for Default View - - + + All image files (%1) 所有圖片 (%1) - - + + All files (**) @@ -1211,16 +1286,16 @@ Press 1 for Default View - - + + Can't import %1 because file can't be open 無法匯入 %1,因為檔案無法開啟 - - + + Can't import %1 because file can't be parsed properly 無法匯入 %1ï¼Œå› ç‚ºæª”æ¡ˆç„¡æ³•æ­£ç¢ºè§£æž @@ -1797,11 +1872,21 @@ Press 1 for Default View + Apply changes + 套用變更 + + + &Apply 套用(&A) - + + Discard changes + æ¨æ£„變更 + + + &Cancel å–æ¶ˆ(&C) From 30a6b55c9e600b82866c78f2bf39476b26820a55 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 27 Jul 2018 02:56:22 +0200 Subject: [PATCH 163/359] ci update --- .ci/ci.sh | 38 ++++++++++++++++++++++++++++++++++++-- .ci/debian_build.sh | 4 ++-- .ci/debian_docker.sh | 2 +- .ci/osx_build.sh | 2 +- .ci/windows_build.sh | 2 +- .ci/windows_docker.sh | 2 +- .ci/wininstall_build.sh | 3 ++- .ci/wininstall_docker.sh | 2 +- .gitlab-ci.yml | 29 ++++++++++++++++------------- .travis.yml | 3 +++ 10 files changed, 64 insertions(+), 23 deletions(-) diff --git a/.ci/ci.sh b/.ci/ci.sh index 6f7ebbf..faf7e78 100755 --- a/.ci/ci.sh +++ b/.ci/ci.sh @@ -1,10 +1,44 @@ #!/bin/bash -if [ $(git name-rev --tags --name-only $(git rev-parse HEAD)) == "undefined" ]; then export APPLICATION_VERSION=$(lua -e 'for line in io.lines("config.h") do local m = string.match(line, "#define GTA5SYNC_APPVER \"(.+)\"$"); if m then print(m); os.exit(0) end end'); else export APPLICATION_VERSION=$(git name-rev --tags --name-only $(git rev-parse HEAD)); fi +if [ $(git name-rev --tags --name-only $(git rev-parse HEAD)) == "undefined" ]; then + export APPLICATION_VERSION=$(lua -e 'for line in io.lines("config.h") do local m = string.match(line, "#define GTA5SYNC_APPVER \"(.+)\"$"); if m then print(m); os.exit(0) end end') +else + export APPLICATION_VERSION=$(git name-rev --tags --name-only $(git rev-parse HEAD)) +fi export PACKAGE_VERSION=$(grep -oE '^[^\-]*' <<< $APPLICATION_VERSION) export PACKAGE_BUILD=$(grep -oP '\-\K.+' <<< $APPLICATION_VERSION) export EXECUTABLE_VERSION=${PACKAGE_VERSION}${PACKAGE_BUILD}${EXECUTABLE_TAG} -if [[ ! ${PACKAGE_BUILD} ]]; then export PACKAGE_BUILD=1; fi + +if [ "${PACKAGE_BUILD}" == "" ]; then + export PACKAGE_BUILD=1; +fi + +if [ "${BUILD_TYPE}" == "ALPHA" ]; then + export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE_ALPHA" +elif [ "${BUILD_TYPE}" == "Alpha" ]; then + export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE_ALPHA" +elif [ "${BUILD_TYPE}" == "BETA" ]; then + export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE_BETA" +elif [ "${BUILD_TYPE}" == "Beta" ]; then + export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE_BETA" +elif [ "${BUILD_TYPE}" == "DEV" ]; then + export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE_DEV" +elif [ "${BUILD_TYPE}" == "Development" ]; then + export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE_DEV" +elif [ "${BUILD_TYPE}" == "DAILY" ]; then + export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE_DAILY" +elif [ "${BUILD_TYPE}" == "Daily" ]; then + export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE_DAILY" +elif [ "${BUILD_TYPE}" == "RC" ]; then + export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE_RC" +elif [ "${BUILD_TYPE}" == "Release Candidate" ]; then + export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE_RC" +elif [ "${BUILD_TYPE}" == "REL" ]; then + export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE_REL" +elif [ "${BUILD_TYPE}" == "Release" ]; then + export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE_REL" +fi + export PROJECT_DIR=$(pwd) .ci/${BUILD_SCRIPT} diff --git a/.ci/debian_build.sh b/.ci/debian_build.sh index 86b2555..c8baf3c 100755 --- a/.ci/debian_build.sh +++ b/.ci/debian_build.sh @@ -21,13 +21,13 @@ mkdir -p /usr/share/gta5view && \ # Starting build cd qt5 && \ -qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" "DEFINES+=GTA5SYNC_COMMIT=\\\\\\\"${APPLICATION_COMMIT}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \ +qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} ${QMAKE_BUILD_TYPE} "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" "DEFINES+=GTA5SYNC_COMMIT=\\\\\\\"${APPLICATION_COMMIT}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \ make depend && \ make -j 4 && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=${PROJECT_DIR}/assets && \ cd .. && \ cd qt4 && \ -qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT4} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ +qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT4} ${QMAKE_BUILD_TYPE} "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ make depend && \ make -j 4 && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=${PROJECT_DIR}/assets diff --git a/.ci/debian_docker.sh b/.ci/debian_docker.sh index f891944..83b1282 100755 --- a/.ci/debian_docker.sh +++ b/.ci/debian_docker.sh @@ -12,4 +12,4 @@ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/debian_install.sh && .ci/debian_build.sh" + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export BUILD_TYPE=${BUILD_TYPE} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/debian_install.sh && .ci/debian_build.sh" diff --git a/.ci/osx_build.sh b/.ci/osx_build.sh index cb968f7..368164c 100755 --- a/.ci/osx_build.sh +++ b/.ci/osx_build.sh @@ -8,7 +8,7 @@ mkdir -p build && \ mkdir -p assets && \ cd build && \ -/usr/local/opt/qt/bin/qmake ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" "DEFINES+=GTA5SYNC_COMMIT=\\\\\\\"${APPLICATION_COMMIT}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ +/usr/local/opt/qt/bin/qmake ${QMAKE_FLAGS_QT5} ${QMAKE_BUILD_TYPE} "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" "DEFINES+=GTA5SYNC_COMMIT=\\\\\\\"${APPLICATION_COMMIT}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ make depend && \ make -j 4 && \ /usr/local/opt/qt/bin/macdeployqt gta5view.app -dmg && \ diff --git a/.ci/windows_build.sh b/.ci/windows_build.sh index 91f369a..ca92438 100755 --- a/.ci/windows_build.sh +++ b/.ci/windows_build.sh @@ -12,7 +12,7 @@ mkdir -p assets && \ # Starting build cd build && \ -qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" "DEFINES+=GTA5SYNC_COMMIT=\\\\\\\"${APPLICATION_COMMIT}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ +qmake-static ${QMAKE_FLAGS_QT5} ${QMAKE_BUILD_TYPE} "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" "DEFINES+=GTA5SYNC_COMMIT=\\\\\\\"${APPLICATION_COMMIT}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \ make depend && \ make -j 4 && \ cp -Rf release/*.exe ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} && \ diff --git a/.ci/windows_docker.sh b/.ci/windows_docker.sh index ced9e51..a385780 100755 --- a/.ci/windows_docker.sh +++ b/.ci/windows_docker.sh @@ -9,7 +9,7 @@ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/windows_build.sh" && \ + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export BUILD_TYPE=${BUILD_TYPE} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/windows_build.sh" && \ # Prepare environment variable export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe && \ diff --git a/.ci/wininstall_build.sh b/.ci/wininstall_build.sh index 17836af..a90ef6a 100755 --- a/.ci/wininstall_build.sh +++ b/.ci/wininstall_build.sh @@ -1,5 +1,6 @@ #!/bin/bash +# Install nsis apt-get update -qq && \ apt-get install -qq nsis && \ @@ -11,7 +12,7 @@ mkdir -p assets && \ # Starting build cd build && \ -qmake ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" "DEFINES+=GTA5SYNC_COMMIT=\\\\\\\"${APPLICATION_COMMIT}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_INLANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_LANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_PLUG='\\\"RUNDIR:SEPARATOR:plugins\\\"' ../gta5view.pro && \ +qmake ${QMAKE_FLAGS_QT5} ${QMAKE_BUILD_TYPE} "DEFINES+=GTA5SYNC_BUILDCODE=\\\\\\\"${PACKAGE_CODE}\\\\\\\"" "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" "DEFINES+=GTA5SYNC_COMMIT=\\\\\\\"${APPLICATION_COMMIT}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_INLANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_LANG='\\\"RUNDIR:SEPARATOR:lang\\\"' DEFINES+=GTA5SYNC_PLUG='\\\"RUNDIR:SEPARATOR:plugins\\\"' ../gta5view.pro && \ make depend && \ make -j 4 && \ cd ${PROJECT_DIR}/assets && \ diff --git a/.ci/wininstall_docker.sh b/.ci/wininstall_docker.sh index c5ff9ca..0702a75 100755 --- a/.ci/wininstall_docker.sh +++ b/.ci/wininstall_docker.sh @@ -9,4 +9,4 @@ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/wininstall_build.sh" + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export BUILD_TYPE=${BUILD_TYPE} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/wininstall_build.sh" diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 983f135..809e365 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,21 @@ stages: - build + +variables: + BUILD_TYPE: "Development" + +Windows Installer: + stage: build + image: syping/qt5-shared-mingw:5.9.6 + variables: + BUILD_SCRIPT: "wininstall_build.sh" + QT_SELECT: "qt5-x86_64-w64-mingw32" + script: + - .gitlab/gitlab.sh + artifacts: + name: "gta5view-$CI_COMMIT_REF_NAME-${CI_COMMIT_SHA:0:8}_setup" + paths: + - "gta5view-*.exe" Windows Portable: stage: build @@ -13,16 +29,3 @@ Windows Portable: name: "gta5view-$CI_COMMIT_REF_NAME-${CI_COMMIT_SHA:0:8}_portable" paths: - "gta5view-*.exe" - -Windows Installer: - stage: build - image: syping/qt5-shared-mingw:5.9.6 - variables: - BUILD_SCRIPT: "wininstall_build.sh" - QT_SELECT: "qt5-x86_64-w64-mingw32" - script: - - .gitlab/gitlab.sh - artifacts: - name: "gta5view-$CI_COMMIT_REF_NAME-${CI_COMMIT_SHA:0:8}_setup" - paths: - - "gta5view-*.exe" diff --git a/.travis.yml b/.travis.yml index ec1af1f..52ce2cc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,9 @@ language: cpp service: - docker + +env: + - BUILD_TYPE=Development matrix: include: From 778abdd36a3d7b28c529061f5a59f5e759923302 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 27 Jul 2018 03:00:18 +0200 Subject: [PATCH 164/359] update for travis ci --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 52ce2cc..3853aa3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,8 @@ service: - docker env: - - BUILD_TYPE=Development + global: + - BUILD_TYPE=Development matrix: include: From 9ced2253fc9a7c455e169bdc707c190643a685b4 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 27 Jul 2018 03:09:40 +0200 Subject: [PATCH 165/359] update for travis ci --- .ci/debian_docker.sh | 2 +- .ci/windows_docker.sh | 2 +- .ci/wininstall_docker.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.ci/debian_docker.sh b/.ci/debian_docker.sh index 83b1282..150001c 100755 --- a/.ci/debian_docker.sh +++ b/.ci/debian_docker.sh @@ -12,4 +12,4 @@ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export BUILD_TYPE=${BUILD_TYPE} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/debian_install.sh && .ci/debian_build.sh" + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export BUILD_TYPE=${BUILD_TYPE} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export QMAKE_BUILD_TYPE=${QMAKE_BUILD_TYPE} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/debian_install.sh && .ci/debian_build.sh" diff --git a/.ci/windows_docker.sh b/.ci/windows_docker.sh index a385780..b125fc5 100755 --- a/.ci/windows_docker.sh +++ b/.ci/windows_docker.sh @@ -9,7 +9,7 @@ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export BUILD_TYPE=${BUILD_TYPE} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/windows_build.sh" && \ + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export BUILD_TYPE=${BUILD_TYPE} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export QMAKE_BUILD_TYPE=${QMAKE_BUILD_TYPE} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/windows_build.sh" && \ # Prepare environment variable export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe && \ diff --git a/.ci/wininstall_docker.sh b/.ci/wininstall_docker.sh index 0702a75..88726f1 100755 --- a/.ci/wininstall_docker.sh +++ b/.ci/wininstall_docker.sh @@ -9,4 +9,4 @@ docker pull ${DOCKER_IMAGE} && \ docker run --rm \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export BUILD_TYPE=${BUILD_TYPE} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/wininstall_build.sh" + /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export BUILD_TYPE=${BUILD_TYPE} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export QMAKE_BUILD_TYPE=${QMAKE_BUILD_TYPE} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/wininstall_build.sh" From c29cc44717a83493d06241b0bf163d5564dfadbb Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 27 Jul 2018 04:26:10 +0200 Subject: [PATCH 166/359] added the ability to import duplicates --- JsonEditorDialog.cpp | 1 + ProfileInterface.cpp | 103 +++++++++++++++--- SnapmaticEditor.cpp | 1 + gta5view.pro | 3 +- res/gta5sync.ts | 234 ++++++++++++++++++++-------------------- res/gta5sync_de.qm | Bin 47820 -> 47914 bytes res/gta5sync_de.ts | 240 +++++++++++++++++++++--------------------- res/gta5sync_en_US.qm | Bin 24546 -> 24427 bytes res/gta5sync_en_US.ts | 240 +++++++++++++++++++++--------------------- res/gta5sync_fr.qm | Bin 42734 -> 42463 bytes res/gta5sync_fr.ts | 240 +++++++++++++++++++++--------------------- res/gta5sync_ru.qm | Bin 43064 -> 42817 bytes res/gta5sync_ru.ts | 240 +++++++++++++++++++++--------------------- res/gta5sync_uk.qm | Bin 43989 -> 43752 bytes res/gta5sync_uk.ts | 240 +++++++++++++++++++++--------------------- res/gta5sync_zh_TW.qm | Bin 33007 -> 32836 bytes res/gta5sync_zh_TW.ts | 240 +++++++++++++++++++++--------------------- 17 files changed, 928 insertions(+), 854 deletions(-) diff --git a/JsonEditorDialog.cpp b/JsonEditorDialog.cpp index ed89dd3..ecfbfae 100644 --- a/JsonEditorDialog.cpp +++ b/JsonEditorDialog.cpp @@ -183,6 +183,7 @@ bool JsonEditorDialog::saveJsonContent() return false; } jsonCode = newCode; + smpic->updateStrings(); smpic->emitUpdate(); return true; } diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 737c475..1401f3d 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -480,7 +480,7 @@ fileDialogPreOpen: //Work? fileDialog.setOption(QFileDialog::DontUseNativeDialog, dontUseNativeDialog); fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); fileDialog.setWindowTitle(tr("Import...")); - fileDialog.setLabelText(QFileDialog::Accept, tr("Import")); + fileDialog.setLabelText(QFileDialog::Accept, tr("Import...")); // Getting readable Image formats QString imageFormatsStr = " "; @@ -524,7 +524,7 @@ fileDialogPreOpen: //Work? } else { - QMessageBox::warning(this, tr("Import"), tr("No valid file is selected")); + QMessageBox::warning(this, tr("Import..."), tr("No valid file is selected")); goto fileDialogPreOpen; //Work? } } @@ -579,7 +579,7 @@ bool ProfileInterface::importFilesProgress(QStringList selectedFiles) if (errorStr != "") { errorStr.remove(0, 2); - QMessageBox::warning(this, tr("Import"), tr("Import failed with...\n\n%1").arg(errorStr)); + QMessageBox::warning(this, tr("Import..."), tr("Import failed with...\n\n%1").arg(errorStr)); return false; } return true; @@ -601,7 +601,7 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime } else { - if (notMultiple) QMessageBox::warning(this, tr("Import"), tr("Failed to read Snapmatic picture")); + if (notMultiple) QMessageBox::warning(this, tr("Import..."), tr("Failed to read Snapmatic picture")); delete picture; return false; } @@ -617,7 +617,7 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime } else { - if (notMultiple) QMessageBox::warning(this, tr("Import"), tr("Failed to read Savegame file")); + if (notMultiple) QMessageBox::warning(this, tr("Import..."), tr("Failed to read Savegame file")); delete savegame; return false; } @@ -722,7 +722,7 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime QFile snapmaticFile(selectedFile); if (!snapmaticFile.open(QFile::ReadOnly)) { - QMessageBox::warning(this, tr("Import"), tr("Can't import %1 because file can't be open").arg("\""+selectedFileName+"\"")); + QMessageBox::warning(this, tr("Import..."), tr("Can't import %1 because file can't be open").arg("\""+selectedFileName+"\"")); delete picture; return false; } @@ -732,7 +732,7 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime snapmaticImageReader.setDevice(&snapmaticFile); if (!snapmaticImageReader.read(snapmaticImage)) { - QMessageBox::warning(this, tr("Import"), tr("Can't import %1 because file can't be parsed properly").arg("\""+selectedFileName+"\"")); + QMessageBox::warning(this, tr("Import..."), tr("Can't import %1 because file can't be parsed properly").arg("\""+selectedFileName+"\"")); delete snapmaticImage; delete picture; return false; @@ -811,12 +811,12 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime #endif delete picture; delete savegame; - if (notMultiple) QMessageBox::warning(this, tr("Import"), tr("Can't import %1 because file format can't be detected").arg("\""+selectedFileName+"\"")); + if (notMultiple) QMessageBox::warning(this, tr("Import..."), tr("Can't import %1 because file format can't be detected").arg("\""+selectedFileName+"\"")); return false; } } } - if (notMultiple) QMessageBox::warning(this, tr("Import"), tr("No valid file is selected")); + if (notMultiple) QMessageBox::warning(this, tr("Import..."), tr("No valid file is selected")); return false; } @@ -976,15 +976,86 @@ bool ProfileInterface::importSnapmaticPicture(SnapmaticPicture *picture, bool wa QString adjustedFileName = picture->getOriginalPictureFileName(); if (picFileName.left(4) != "PGTA") { - if (warn) QMessageBox::warning(this, tr("Import"), tr("Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e")); + if (warn) QMessageBox::warning(this, tr("Import..."), tr("Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e")); return false; } else if (QFile::exists(profileFolder % "/" % adjustedFileName) || QFile::exists(profileFolder % "/" % adjustedFileName % ".hidden")) { - if (warn) QMessageBox::warning(this, tr("Import"), tr("Failed to import the Snapmatic picture, the picture is already in the game")); - return false; + SnapmaticProperties snapmaticProperties = picture->getSnapmaticProperties(); + if (warn) + { + int uchoice = QMessageBox::question(this, tr("Import..."), tr("A Snapmatic picture already exists with the uid %1, you want assign your import a new uid and timestamp?").arg(QString::number(snapmaticProperties.uid)), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); + if (uchoice == QMessageBox::Yes) + { + // Update Snapmatic uid + snapmaticProperties.uid = getRandomUid(); + snapmaticProperties.createdDateTime = QDateTime::currentDateTime(); + snapmaticProperties.createdTimestamp = snapmaticProperties.createdDateTime.toTime_t(); + bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(snapmaticProperties.uid)); + bool fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(snapmaticProperties.uid) % ".bak"); + bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(snapmaticProperties.uid) % ".hidden"); + int cEnough = 0; + while ((fExists || fExistsBackup || fExistsHidden) && cEnough < findRetryLimit) + { + snapmaticProperties.uid = getRandomUid(); + fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(snapmaticProperties.uid)); + fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(snapmaticProperties.uid) % ".bak"); + fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(snapmaticProperties.uid) % ".hidden"); + cEnough++; + } + if (fExists || fExistsBackup || fExistsHidden) + { + // That should never happen + return false; + } + if (!picture->setSnapmaticProperties(snapmaticProperties)) + { + // That should never happen + return false; + } + picture->updateStrings(); + picFileName = picture->getPictureFileName(); + adjustedFileName = picture->getOriginalPictureFileName(); + } + else + { + return false; + } + } + else + { + // Update Snapmatic uid + snapmaticProperties.uid = getRandomUid(); + snapmaticProperties.createdDateTime = QDateTime::currentDateTime(); + snapmaticProperties.createdTimestamp = snapmaticProperties.createdDateTime.toTime_t(); + bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(snapmaticProperties.uid)); + bool fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(snapmaticProperties.uid) % ".bak"); + bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(snapmaticProperties.uid) % ".hidden"); + int cEnough = 0; + while ((fExists || fExistsBackup || fExistsHidden) && cEnough < findRetryLimit) + { + snapmaticProperties.uid = getRandomUid(); + fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(snapmaticProperties.uid)); + fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(snapmaticProperties.uid) % ".bak"); + fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(snapmaticProperties.uid) % ".hidden"); + cEnough++; + } + if (fExists || fExistsBackup || fExistsHidden) + { + // That should never happen + return false; + } + if (!picture->setSnapmaticProperties(snapmaticProperties)) + { + // That should never happen + return false; + } + picture->updateStrings(); + picFileName = picture->getPictureFileName(); + adjustedFileName = picture->getOriginalPictureFileName(); + } } - else if (picture->exportPicture(profileFolder % "/" % adjustedFileName, SnapmaticFormat::PGTA_Format)) + if (picture->exportPicture(profileFolder % "/" % adjustedFileName, SnapmaticFormat::PGTA_Format)) { picture->setSnapmaticFormat(SnapmaticFormat::PGTA_Format); picture->setPicFilePath(profileFolder % "/" % adjustedFileName); @@ -993,7 +1064,7 @@ bool ProfileInterface::importSnapmaticPicture(SnapmaticPicture *picture, bool wa } else { - if (warn) QMessageBox::warning(this, tr("Import"), tr("Failed to import the Snapmatic picture, can't copy the file into profile")); + if (warn) QMessageBox::warning(this, tr("Import..."), tr("Failed to import the Snapmatic picture, can't copy the file into profile")); return false; } } @@ -1030,13 +1101,13 @@ bool ProfileInterface::importSavegameData(SavegameData *savegame, QString sgdPat } else { - if (warn) QMessageBox::warning(this, tr("Import"), tr("Failed to import the Savegame, can't copy the file into profile")); + if (warn) QMessageBox::warning(this, tr("Import..."), tr("Failed to import the Savegame, can't copy the file into profile")); return false; } } else { - if (warn) QMessageBox::warning(this, tr("Import"), tr("Failed to import the Savegame, no Savegame slot is left")); + if (warn) QMessageBox::warning(this, tr("Import..."), tr("Failed to import the Savegame, no Savegame slot is left")); return false; } } diff --git a/SnapmaticEditor.cpp b/SnapmaticEditor.cpp index adef8e7..45f229a 100644 --- a/SnapmaticEditor.cpp +++ b/SnapmaticEditor.cpp @@ -330,6 +330,7 @@ void SnapmaticEditor::on_cmdApply_clicked() } else { + smpic->updateStrings(); smpic->emitUpdate(); } } diff --git a/gta5view.pro b/gta5view.pro index d6a9cad..631abfb 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -167,9 +167,10 @@ DEFINES += GTA5SYNC_NOASSIST # Not assisting at proper usage of SnapmaticPicture win32: DEFINES += GTA5SYNC_WIN win32: RC_FILE += res/app.rc -win32: LIBS += -luser32 -ld3d9 +win32: LIBS += -luser32 win32: CONFIG -= embed_manifest_exe contains(DEFINES, GTA5SYNC_APV): greaterThan(QT_MAJOR_VERSION, 4): greaterThan(QT_MINOR_VERSION, 1): win32: LIBS += -ldwmapi +contains(DEFINES, GTA5SYNC_TELEMETRY): win32: LIBS += -ld3d9 # Required for getting information about GPU # MAC OS X ONLY macx: ICON = res/5sync.icns diff --git a/res/gta5sync.ts b/res/gta5sync.ts index 40d457f..a22bb0f 100644 --- a/res/gta5sync.ts +++ b/res/gta5sync.ts @@ -935,37 +935,37 @@ Y: %2 - + Export as &Picture... - + Export as &Snapmatic... - + &Edit Properties... - + &Overwrite Image... - + Open &Map Viewer... - + Open &JSON Editor... @@ -1219,8 +1219,22 @@ Press 1 for Default View + + + + + + + + + + + + + + Import... @@ -1234,20 +1248,6 @@ Press 1 for Default View - - - - - - - - - - - - - - Import @@ -1375,109 +1375,109 @@ Press 1 for Default View - - Failed to import the Snapmatic picture, the picture is already in the game + + A Snapmatic picture already exists with the uid %1, you want assign your import a new uid and timestamp? - + Failed to import the Snapmatic picture, can't copy the file into profile - + Failed to import the Savegame, can't copy the file into profile - + Failed to import the Savegame, no Savegame slot is left - - - - - + + + + + Export selected... - - + + JPG pictures and GTA Snapmatic - - + + JPG pictures only - - + + GTA Snapmatic only - + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: - + Initialising export... - + Export failed with... %1 - - + + No Snapmatic pictures or Savegames files are selected - - - + + + Remove selected - + You really want remove the selected Snapmatic picutres and Savegame files? - + Failed to remove all selected Snapmatic pictures and/or Savegame files - - - - - - + + + + + + No Snapmatic pictures are selected - - - - - - + + + + + + %1 failed with... %2 @@ -1485,81 +1485,81 @@ Press 1 for Default View - - + + Qualify as Avatar - - - - + + + + Patch selected... - - - - - - - - + + + + + + + + Patch file %1 of %2 files - + Qualify %1 failed with... - - + + Change Players... - + Change Players %1 failed with... - - - + + + Change Crew... - + Failed to enter a valid Snapmatic Crew ID - + Change Crew %1 failed with... - - - + + + Change Title... - + Failed to enter a valid Snapmatic title - + Change Title %1 failed with... @@ -1661,37 +1661,37 @@ Press 1 for Default View - + &View - + &Export - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -1788,7 +1788,7 @@ Press 1 for Default View - + @@ -1889,31 +1889,31 @@ Press 1 for Default View - + Patching of Snapmatic Properties failed because of JSON Error - - + + Snapmatic Crew - - + + New Snapmatic crew: - - + + Snapmatic Title - - + + New Snapmatic title: @@ -2087,52 +2087,52 @@ Press 1 for Default View - + Edi&t - + Show &In-game - + Hide &In-game - + &Export - + &View - + &Remove - + &Select - + &Deselect - + Select &All - + &Deselect All @@ -2351,15 +2351,15 @@ Press 1 for Default View - - + + Show In-game - - + + Hide In-game diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index 4a7499aa1f6dd3efbe9dd70672d595bddcecb03b..288b66515c50504873df59d5f58bdc3a30860607 100644 GIT binary patch delta 2528 zcmXw42~<*2>$-dH0@s&c1u!d$CPX z_Ck?6X2?SzARPF>3<4(x1$#XP2s6pJ>;brsXyUqK;Kmd7j|S&F2V}L%xH}T6z0+v?b_5Jq15Cdq zW6`v{Hoa#if;y7#t3^;p^5R$o{jVS4Iw_RV1=b_DBUQl*47&Lp&@~>BgQI{13!+Td zfCHm3E{D(-D_IyF^G?cP#yS3u>>*)5avHumd<9r*$Nu;(K$;h-+f#w@f8w8&11U#4 z8uv{AHddqQ8s$(|qq&F!HqF6P>l9$h7Do6r1XzAt#;yOAabJJN`=Bon8qC-R{sCmC zGZ}?*fKhjtypM(g(j-N%Ar7Vl3c&9yQx$y_h|x06m$X)XEOT|D6|nSY9`5h~BJ9kg zNB04bcgz#b5nzcy+OP2U+CD&$FpZe{s!?Idi2+JRDN=SF1ZKUKniP7^^NP~6A%Jf; z8K*p!F}p$Xb{R1$T~RhDA1G>5R2Z9pRkIXTRkSOPH;Uu+y@AYJMI9SRv;-G98HD)ZG_@=zivS8YZv~& zzkr<%>9&imi_ImrVjVDSw2OIJFQD{=#Ia#QT&PRK<~CB4R*Gc(gXVa$0m)qfy9XQo znuv;7%|?u(*V%p8PX_M>R!?PDUms4hi=|C$FGtw}2QXs+TM@FKx;P@^_El^}`D}nI zWe;b428gfNT5&#UZyZ~<`$NKetaI5GV8lQfGd9Y&Ba(I2WYPN!wt03fFd&(Ib>#w~ z8~f%&ICVXUV>{+8{*7}lEdcn7k{_p?`6CzCSWlI;a7&`=fZm^SmOTrAd9S(TJYpmH zXD*ZHY0KR?M_4SN59e|%WU)POxWW+XZ1X~{Fq^9SriR3_Nw(XiO`M*o zl@4(}zFUX5dN;U{1D?5tWl_>TFI}h2_5&6cyDm^95?%k69&sbOq$!0qJMhINr8`>! zl)aE5T_c#4QmU)oyib|CJC%&LLYd!~5A0v8EIv({_V-X8ne-SKI#_wE{5eo4DXXqf zIf;jr_4Ooy&~3`!CzCNlw92OMiR{!T%E#s8j6-_myW=h71VP1(Z2)#{QF%9n0me+} zt*g$FrHU?f0^9nkEPMBnW?!iiPn$?!<5er~P?MkBQ)O5;kj*nxU-Y_35}K?kF;P6R zr>ds!dLZSXs;-`Vxj9r-Uqjhl<5Uel(H72qqiU_C>Vx7{&kaQOEPvJe*>fm9gYW82 z-FO%Cx*tvhUXp{?-5yEWyTSV`YXbT;^Zu_$**l!lA*G%vl`biDd@VmY?>w-yL3*Ur zd6w}@$3G=coZy!(BxKj{DK7_*wS6UTm2PSVUwnEBQCh}V^qo#xPvFmwBsx~^;V;~O z59EyDFMmD}SRcS&4~qbXNARt2&xqb4foY+}S2YXFL&A)qg2uxaSQ91XsPvxI!mx#f zbPAef+!ZBb`4Z`rO5f$3F!cd#S@$i%XRU5Pg}3xbHOM!I6OOOVAtB`pH9b9utLehY zjkN3CZwYnRIbi-yDT>!Sz7#H+DEfJeaOq=)PPUhVb6F)IT$3@aO2!qej0NF>v*c^Q zhZnBvV}b3J!i_R&AlO^Df0RhFdI(LT4cJmFv|JzpEIUNzcqYYv6J18Sli7Y1wH*zo zw2GdU4J7w_e6PTEG0Tle32zj$mtLc}AB!8qV@TR6apTw~V8vJ&3(}=fLFdR53xl)C zKprx#$d<97S}Z<#ht5S;@t~6S-g~H6@dMFv=%)C6mJgk&$>NEuS#)&-i**)Sxxz_E z*()64Ps2%}ak-+?PL-C|h*x%+=vX=|Ud^ZbVsn{zS4Tz->Lb3W{e>z%BXr>xsriR( zfGJhFE$C;iRR;$=rydunXPhHdefWWTUT<32b+dX^HL0#NTD^WWRU~Xs7lcw=tWXy+ zbWbf$mvL)}x^OJ5s5!4L*3w~YD^Z_lB@Pd?OS46PM_D(GQv4a{`BvjqPTJZtR@37@ zVSu)`rbi2zX7ejeKm?h?|9~dw7A=!IM-#E0%2X* zROURJW_lgbY`mk1ai2h!RDg{31Wo$2N;+u*HF>4aF&as4HHSYXG3KAqRG*?FXI!O> zi!(Jf-S?9gE@;lo^dNVYX&x;c4(R^Sw4NpGD!Q>^1F&GO6s7j}oq5Bpa-NyIFxl;t zmBJH6t=D2|cd?&#_%o8;m%m7x)H=^*ZPM3NmFTYBc8fuIZ1ohmoB*tp4z8ARQup-+O}_rlgvO`;Jd(M?dnA{xMoDbEd98;m$v~Hm|=$j z@h~BUFqZzu6Z)aQ^rT4FZGLCm)H%wA5PD;ghJDk+VTP4{PoVipNTit^IXXsJ>1pVE zrgr}ND_<(bI`YPKj

X-wD@J7)6{*>fOc`6>PQ2gexJitG6KPzXjbR5|jiv6VU4FNHrKVi6^%} z7j=dcKjoEUqY!D8lLY@Uza_FOBG@hPTaa2tOED7RqfV8$SjzP16nM4}&@dO|&TIsM zAeiYMw96aB5V&*$=#pN}%N?IyPRkveuUFTOzQ(~4N2Qqz_U6vKE;pxhE;i;)rZ2ZF zS=-LDoCAQ>ZoS!KICq2_bJ4*c$W_0ZDTx8DvzF_nQzy?;*;>5M^>Bz>r0}e=iY^Ml zHW!jPRZ!=D`e*dOw{hC3yK30uXLQMj2QUR{y_fFHMbk58s6S?=6n(%PrfV=wo}mDg za6WZ@YGX96wSYPLo!>KfcHn&W7Ow{RQC~NTqdNC=#`&K9Dc070#&FytccC{b$aFv% zMlc>5+dVFwKztO`oDtj|_gj?$tKTvva)mX25_gz(OONom|1K0SN=_1!6!Jg3E@xJj z0>B-gX$916o3;1{dRDi7`eY~?t3fZ0pli2h?HO`fH^D3C#_&IpIw@PU?B-&C;%Q{@ zPf`5kj7f~dTKAt$&W`iF-~y{1rGf&bx4i5BO3ja-*k%xfA*%r3tkSF{eOd4tQzjF8 z0pqB3l-h&Qc#P>CZY_PLj$v6h6ue6w2~yP_;WS?F=>WFF)y$jz;;hT|iP7wX2Dw5$ z`K~P=ZZB1TpZs2(=x#*xXD%Uh>gm(B9 zsKFuH^mq`PY%8#@n>*bx0`g{5YPE*tY;w(PXJ@|;9!ND3iSr+Wj&@+6fW3@4QRQ1V zPkRNGwV5Fb5Y%rMaYh?RCd1C;y=c>>5*raz(+5Eo_VQP$1Y$UWs^Lyyns~g-+(|PH(aw<|rbD8)ujE$Z+l;Ff1 zr`fG4*hsC7G_bN~57=>oo_Av5VNg{1&!U8-W)M_y@Mhw4M(Iy!uakXyy)|@3#d@^x zfP8=%f>bfE?-}?EE6gNjqws3+$W}NoGuRH7Sa{EwXP$#DMWhk`e533s89@)jk}BMf z5cFBV9n`bQa>K0&6@J~Qlr-Z6gm;;=ItNQ_^iqJC_K>L7^w6xt;e5xHau4kViEicy z{KWL2`0V3vGbL(t5m!(NS|;xzhmz-ySDqPgCj-tu?W-g8<)V^7K&WRpxL~{IaMrJq z51=c*#7(^x1B4RBOdh7K2a5^+1-dugjc9z8GC<7YX`0$pN7<65chV%dDXkqBe|?mC za~G~Wz1Z#W(@DyfZvb6Nu=%70fxA+}yROsS7hegtoCGG%OAPd!PA7&T9L!Xq_(N%2wy)7WTnjTNfv%jPNbWeKQGvd4g zb4LNiE~2#+bi{Val&i6lCpIQJga&JO{7{D~$vK3z9Ubdj_CLCGnAJiIR+?=^BcB(J zbYr3SWqiMTVT@9yc6bUic~=5{Zqfz=AarSJUF32MzYfC|9&jyh35rpuK8$dWlUV%w zzAlA|VB_}IiAl>6#Q=uH{}+o2W`{2c#b#OoZKV{XMj>Fr3GcK`4J!6A zONuvWXlR%+^hMtuxo&&kt`y7LUM&#IV7$&%0Hs8PwIkPjvWo+ewaR*5dXH0LMs5nR zKS~+0nzC+k#m#EEI!4FD!~kddY9SSyT;So^Lr}#jrdgr3WrD`zlR%b!UV*;Z=r!7V z?%)xp!;Ba|JB^ocSA#pwP3J>POtP0Zy3Ra$m~hI)6R!08d|1^nv7-TQ9KCt?N8r{e@ptm=^}zn zuK3a7jAh#uHG&Wi4q|1c#)&3`glTq!#+MbOphX6rSJFjepK8Mkspy5RssmO0^~tI4 z8R`UYlspz09KYu-sV{9MzMbzL`MHA?^F#akN~YNU{IBDaf`Grjcb0`zBcYURGV|H+ zLrZp5KqEbeeYjFL&772)4E@|0aR|WmPsS<($Fw_t#><^`c(oq%1pV%&_?^+8%19rq z3$m=ZrSzF9TLK}Ev{qVPkO_5$iZD=eY5tv@(c0HfK)HN{B+-T`xY(C7n?0R%|Z0>*Ro^$%slDX}GY0h%F z@?5U%bT>cVJ!z`yakvclTcN+l!Dj*B(s7YdTAl3VugG1@U!jE!S0cet zLRgCe25+tkGFcF?MgcQ@12fHJbXsDWhSK*we6VYM&E8=1oR=V0H9lMDx;i#3Wiy1T zb#JkpRR&h5GXLo8TdI(qF@?u@n){0mT@L}5C_zK}0uUpCK*Ll#(3Mx`Nos7Y_l#>- ziZ0lPSfSWj{gqRn6ZuX%+gbaU`U3x*(wUc~4#d>lpnNkb5Gg)VpOI$7C`-SF>cT=P z)Nl)6I6uR}VrkJcuE zu*n@Mvu#{wJ3Bi52~mpFgb)ZLe%yJKRO*wx}JJv}Gr z3KsK9oSsaRHw%Twjn}huiLZWiNLofuJZX5+kine)U*^iG*cV{!)5_R9J^KnK!(;G_ z&D^Zj*JH}hIZT;DC6lwM7v_o^iLk&?&l;~|a5k2~`DnLQI#kIoq3oQBn-M@4(Es9Z zwPTLl>FR4Ehll3ormdt_7M>T+v?y0e70{Ek*ZE50tjj*{*&zvX-j|9{G|TAbA?&Rn zVI}RMZ^xLYK~Q<9_LmfT<&KmENE@(&5a3DH>5JM>uxV&2QTy`Nu}<623+|6xl3 zy}TJSCNpEjM?izKw%-bevw)7I39DL*uMms+qA1@{BuD=geWI1@pjF+44`7b4to}zH zNwycp3-bK!j{ywbav+7XkxpQTUR}9{KO{S0##LZ2fh^8=0(0b9DiTt8=508 zt0sSN`_K>e1z0$SK><;c*W?qeByO_S=u-oroj+SG5>93ph%t!%yqKEwyk089VqDq! zy#Tg10_xys_Cut9zbB^xp!rE_i#e+p=~M%PBbzr99yMMD2Hfpz7dtJyIVUt$RWqLN z0^?X~CJlfzed1?i>HKE?b-MDqD?XWWGY zri>lvW(30~3AgC^3|!5s^!Le2AE+M|)k`6beE~(RooVwmd8Vp%A%Fb>0=`NX{{b?|3_73C1fH+u?1auK|^6kL%S~SDX zlZ$2Z%faHg`n}+i*pWwT-F`8d-4#s8NsCe9j2yE#&p7u>*;t&W+ zL6)>lf>#3s{jL|}y{=&ke%DhqEW6NUmJnqyf>f>nw~2IZ zm@#i{C9YMA-LlWsrRIEKn%)ok$RJ!Os)?D4_jxZe>^|W!l?JdOJByr7Tjw^sj=?wH ze9xub!+W6$pW^&`7MG?U&E=^KoTYWAk;;guFetQYdUNkh(bsA|>ijpT1U?EC5F^sI zcCl#6I407-020LwN2@7$)O;xWyH_yo(H}kOlc*v}vY?`H`+L;7vKrDL=&c=N&?NJw zX|wg~l2si(THCd-Q2fnlMn)-+%`3!8GM9UlFoOPTiXByPI6t~*qY>nHvVz`d6;FubYV}-aWMFro){@i<( zS||?z4btum>6z)i$);yaK%-ve{a(e_0UzIy;&JYChrkwnza!KSKq3x@zl_W5VLKLu zW3>}tkY1&O45|zPawJ?+-&(B=xDK4C0&n|ES0bR@feU3VEv;uYa;F&OKVt*&|C(MX zuTqTOQ#dV3Jw5W4Q#Pv;w)U^twVj4=EH;#ibq- z9vzZThJiZ_e{=|ehJ4xAc9sfMJT4we#X+t{9Qn1K9ysBC{8ZEfLMQv}_$;=mTPz_u z!BYg*NsVxU@X;c9C1*uk8R1jo%d@f@?V~9sj?YUj2!_^U&bh`#PpDsoHLVTCu_7tavmoJS}?n5{|v*YHFly0m05G^VEO z)vwIc)%^I1%17lnvE$>zO2P?hNTtO{{)U|V@8_&PH&$FFah7hAPYd;kqT!07L%=it znyoE*D`LClfA{~KOp*jLI*k>SHpOpa%araZLB`Y=W}2E{)zRA)~g& zfR;ID{e2G@V^~bm=ykgX3UAS1CoWrU={JH(Db*jM`NO#IAvSDA4u6n8y{`A@v20>8 zH#Q`M`&|L5AEJu#O+?`IL2&KVw!Z~T3AfRrBd#p(z{@=;$;%IqaeD(uX#%sY?ceB4 z&KFO`dj88~rhqEwMn?q*q17MWHNYoG3SxCQX;{A;Gv9kJhOa|PB%$Ox{7 zggV(D@7O8i?KSmY=11G7)0&zqx?gsL2Fw{r*_X4)GzWPc6ThN0qTpZxZ_LTXl==)~ z>6lg997?_6f7WgmL#C@D@q5ZE&|J=o>^nTL?;dehUZ;|3KfT+pP!00uAS>k#J^z#|RybyjY zK&3AnF%htWj?silt^jn$xG=#1pa3VpsD}!BvuIUaC6EeVK1=#pm7M%VHCS(gop1D= zmm6dGRr;ZEozd^WZLr?xjo!qj&>PQH8?iuOqn^)equ1u|aZ~X(m~ZE$T>BTe8x6%M zZ~~v1HGWbtF_6b6HZ5D|?dFykI!o=CUIf?BPg$}W`NGWdv0{zY?}?VaZGV=#fdNe? z2)@L;(fJGCx7*Ly_=acra<78WVYR$1a?26d*A`9W-xdGNjH&H+WkdGOV>m4BcFmbv#Q=3T5)jTLWO-jbWqtC~6Imgf=~+-;cz z^kO~<&iN;wmgC7h%IEplBo;-bLFAIaUN2VWGa}s>Y(u=G0A;-*>9)IXst`bHIEZvl z9bFX0U1Nk@6mUIbFJMNaJen+MJ7154G8j{>HNjPaNM<&Ez?=Y8GD1EcsR1gYZ#?`C zfO*Asz^Lfqmidv3XqRw}`>$0!HF)TZRJl&~MWlHA@zb~6%!Vr$PjU+kv$DOV{I)Sj z+xl4;kCLTk?qlHy&2otqactzrX-9VzN*^u`A`#iwRn5%~;NhhHe%-#>1&sLQX=|_r z1pZ_|nVB4pFSg87WYA7W-yM5);5G(O)m{;{P6M-70_D_7GKxw{jj8|ZwPd9fcKc@h z+-4{YcnG`Ysh&(!;uocK*aDVCa*lU^h~LF(==${eXv3^6yBY;ZeB@8HJ+;X2o@d*H z@l6-MYRxF1eV>*3$ZWEN4!=G1C5_7pOg$Z7dgh!7Ngt4WFTStlH0f(4LYI=s0HLt`zLF=KqnVEX4z)9JhVxxSN6;f(Y|R*$Id92-Qu;k z+V=to3&11c2LMQW0%bdHhI)teKRfCJwriw{1t@`E zFPwQnd^4O=oSuh48Sb#HRzd<39~^NLwV-2Zu~>57Ub_<`9vm#*26Hf$;ijdT@Fq zyIPo7#5vhGwK8Y$t9+b6v41iewbAJv;NCd3fz$+SXu)4p3hIUHctMJ@u>GrJK2>Om0)PFe=!ePC7Y8Nb63QxzE8#*Fv$* zv;X~fWY?Q$L4sQ{yAVO=dR7Vs$Xf=3?B8%0mBQ##V-2;lwS#rbJ4Blr6M>Uo?BLqZ z=+QiW@Tc!<)+5=1sg9;&29|{8W`FKmEhLh3w{syQWlm=H4H&09t}Hqa9sN$#0oENQ zFDJ23?dQH<zohag4+A6M60LbNPb7qXw(=T0}~ZX-U8U0kk+ z;-+=A5v1SR#Z%PwsnD=HS^vrx{|~*xuonz_^c;$p{=)Rg%$yvc7Vlw7{vLw>c%L&r zO%!(WvnF_%ikWQdWMQVj;9%qigk4htAtj;+#ptDb%>_(c2SBM%{RxkVP6ePaH=gs`_5@4k><5VCXN}zh5Vf$o=0J2JpsDctj4eW_! zx8e}j;*Odj#PcB1mA#bpRN_S-P3smBfwiE;1@`L}yHIHeCE}nmfL@ zUi7kA1C4Z%#h$;?8y;;Rv4;Rhnca+_Q|EjCGCoH_o5dLNdih34aEJa_c+{e}mgz)J zcIM5I+;tpc;GmzmX2uDFbDVxv?(AGiUnQyxWLKm(ka2^}O)Y)K0)<^I|NOI8aIM0! z*Z6?!-X#n(q?x&7pGc^N--WrP7hzItOo3by>+z#-9q0>=f%7P^9?y1^BG@(kOgzqO zs$)SspD~h8&E^4-3bZ2LJ>Qa3^s>Biy}G>g+iL58)&!Ju*p&-T?Wk$VWB15e5cYZ3 zda7Onrj$LKYV$5%ro2u`_5pXcjNi3LWF(QeP7>4r>a=j2mO;c5RGG9+pQLU6o4|7r z{viq7UsO)TKy3u30LiLE>wy_V#Fdp8kl=)@v|Vr_)#6=6Fn!+Lp4peNX(xfJq+EMq zQ3W4zj9^T(zu%mt2v#;=DvAc2xo#u;!Q>x!i=at#$fsSKTz%_-`tL=$k^~qxA(5*3 zJ*XXoqf+`Zvf>L9*rT%2Y`LE>jv|$}xQ$CRpdfYe?P6-0eyx=KHHq2I6WE>}`nl9IIn(z(a zS&WLBP9&3Frz@K!?$XQkxU;TD1`FTUX*`#N$@d?6?ufZ4E!vB}yo&f8=+!c}UHQm7 z_S`9(WGQ_Hc!sp%aC5^Pi3my4syE%Prqlw-~xAM2r{r5?mc z${89o2!=Pz`j&1-Oc|9dt}X8G?w(Wz9uE`=tkol?i2?(v@%Nv^{5v`Mp$!bm$FJjm zvz^&p`ZSqHZP%iK9bAs@y5o_-QE27mh3as2Pg=ougs|W0i9*619y?8#?nQ^(CDSAG z){5xcNiKVn;$ueRXykoZ347f&uSEw=o3ru`@sU(VEDT@T zp_4t>qZUZ>R%I|=DvA`NKAyG<$yaop4B@p+kztm z$|-WATwb1XW7#!LMcWX_Dv<$UNQo^|(Uj*xFjp9;@CFU6n+m>kb|-|2HG}9>n*Pq6 z7B2Fju-NCHZ1}uB@}W&4hfbk>ULKJkY-42mc)stI3@$5U`P&CB<=?s~OM7-~1_q7O z_dO%Xt=kOH_inQMHp@QYAji>{CA8x*-e)dA|I5rw)_W(IWvw0{daR#Xu7$g%w|plG zhpnhl@+s3M(Blxr#l@Yuet&;og?M<9oce$7j`aWsOrUSp_YLe?{W3Pij<>YuaO=?z zF<-mlKHrs=oB-oWogVu;yblPOO}TvQzE#Y$5v|*?Pkl)DkcI-r3O!$+z;vVYv(h6s zMDJh<@_znH{YxdH0o$b^*{8Ekr}vfR@d29F36Fre%4fVvfcj~=eqoX=R6m*0TmLNq zT_M#cVTA~nQmGLwT9;Jw_Vg5^(f1^_06sht(3AAZ?snZE(IRZFdWIJ?x^-y_D&|zI z*Lz}cMzs$)Wc@BVZ3EAa{^r?lQ;S!pc>sEL=BBc(AyE??g08m52LsTAI8otZF{AQ zS3)^D()e6QMH@0Q^1j;G1NaAl+dvk8fM!6guoj5YD9*7F7>xVlb7UT@j~|Qc=oeW; zs@?DbM1;B9H3^cPJ!7wuJ)};R3~sp#Q&^!<6flvw+1X{WB_HsA41><9u2A9!qmPIF@qF=K{Rb=ofd_p3K=Q$>vbu;)*mWs4 zYBY*N4PYqrh|-Np|AhR`DC%1{X*ycTwBB`xnKHi?KMIA0fY(SodC-9Sy6haepE6(~ zyelSZWdz^RUzA4uIT3d~Ojm@(hu@{*oQuXm#VbsRaQpP|s+a_f=E6pgCGa;Qu3TGQ zm5~~zp|MYw2HEGA-#BG@)Z@xGu(q+m7#vBJC(o$G>5e|}Y#M@G*%STY6aALry}WQK~ZqHxgDL^yN8qXdC-A;&VZ0iJTSWJbgv3)75pQ<;>e+Emi63;<#sYc@gw0efK(hNSKJAko5%_GpTzi~JD`4`l zQ}mR8(z08(O*5&U)wQmL^s;*nsrVB`n41}SEYt{T-iwYmjrq^FOO0cNMCPKkoF*!?@3RUL-@ zie>2Jls8QsSVFU&=R-gMFg1)PjIc&%vRmrwoBHR;8TKvjlh-yyLUSlt2}EG1rc*#A z|C#VFbVn)S*_T?{N>F!yULLnyvb7y&T$;@t21~!0Io%HOp8Sb=|L9_uDJN*>wO3PL za!_!Z_{wv33rY~O9s5UXonB;x<;At{J$@S%tz3_|y>LF)z!+ec!+KW`c>y3Fzp8ny$E$n+|;J$^kz!ddA{69J`ivIRIyI@Ei`0f`nc5N ziPq)5SJ0t``N=mcy$PEe(5d6Li}lN8^V7%w6Dk3i!XzeIHlJ)e?)k4XT|3AN%V!SCm8 z^RV%#1}|pb%I3SA$zH3f__f@!?_fw*Ew3h8~3)=x1hwhRxi&q46DB(=)jxTAEYCOztKQn((VC zMPJ(C2qA_pJTjO$&&~n&&6v|tZW?N0Pj#xBj{fs|adA+RO&$yFZj4}lSNNUssyf`n zCG%U$o=Az3X&TV4e!Eu#rzuE757xwBL(rcINDKCUjg}Q=NU-=Y@9w0W2=E>S>h+Tv z77S;{qPyRW`mY`ePIeKwt(WIBHQG@z#&;jS#po7tXv%&XiH0Jb?K-$sU!vet>|D$2 zPdN(mzM^9Yi8t=!H>3dqr)xE&&#&p#ZTYldT75YhMd~VJQTD~xG6{GNl@)qj2prmS z+}G^Hf_#inV*n z2>zIhk}5L$-Fi_O?iuBce5-vxNz5247NeZ|l;Hz8HO4-jrh`~6I2-swaP1o-9P5*f zpr8(eXJyWKbpRywx&NO9cy8dqA6D~gdhX(1YTH?9epaZ5v6}Md7c1Wdu0rroMHE5Y zI=Af*#w0s;Knk0R>%<#PO8?lRHQmzb>udD^o1}E7ajbLHjxS8Eyh=U~%t+dHqwgO1 z%78>c)UoaFl0=F=-F2O`Hxb=@Jp**2AvHzEu^pvsoBKS?EH&+K+UDjY8iYoGz1aT8 z#ND$q6ZJnWa#B(QZ@p}cmZRPQlI2H>-S5g6nl)~;I$+hwb&gHaMl1N(E~|uz%)#Ec z1-^nodnY4_^1A!Q>dnXAoEItMKdR)2v6n%gXG_)VH<}qvTQ}ne28jah0e403v_f=f zz$6xGt}Z0Si3kt(Uc>>nFQsYsWFg&`^9CcD;}IZ`u*103QE9e7d!i z3Fvpl<6xxU=FuGz4sci)bSA=EH_me7oBoPwxj&Te(DJ~zrz@F zrfq8!HsHKyRDTRk7L7^}MydBx&;#+w$iPPF`Ai4Lmcym846m9lf6I+pKuS=Bc5`s- zr+}%lxoK+YKQS$>yB~g`QeNdODDc1*(yzkRb;qytFW-+_UzFhGPiMqxKe@$lmi|;` z$p=AL{_D7*m0fPfxw&LtD@MlEiAi`$F1l7(wBth3Hz8_k}(`E9kh$HUZ@CtzeMpZ}yLTi#6 z?Y~VAdDa;-iTwHX%W|U5=F!X80eL4*doT>m52_tkVZ%gA6yn~|e-`KE78c-cr_xn9 z{Ty^?aVpze=M#pyJI042 z_1iXuAmO*tIdyc~vyEPd+7n_Se`lQRvJfgS96&cyaqcMacY`brEYx33_6weUaiduW zG`(rdtjfiQ?S+4VGXMT^U&+WvHw8M@Efc=HtS?<3UFh_g2wWSQD5rZ= z*&v$;&8O=-U9?hzP^jbB#Y+pUaZAt;_gTYI$C+9p5uQ8yg2`X=ErT_V8U}LLhGL>& zzS~xV@az373`!xv@M6ZqVR#QSVEXxb3ytK;)PNN*@^`HUyvN3OPS))aiCH)PXXKkb zY<-V2Sy7N%!U0p{)JJ(#$-qCnC>!k-m2+twsc^9Zv4U_bCmqjA@+boH3PfyUa*kr_*GrB1Xm)1ZNGOvi`z2;gE8SA;DrwK z_n()pJ0Wx=&ezV(<>dTw(@C$0maI^rC0wsnzpd~yhrT~n>rV|_Ie2a+AtAXz zO5xOkF-{oMTM6^L2AlNGIK3oIiLPGmJ_)*OB`GUmh2@7`WeTY=Rx`qROQ2EyG#w;H zD{>W;;h2YMbs5kFUl}X+trfTC5l&XszYZyoy6?q}J%h-GV{^$saE~|BYvh zYu{XHjuidpRiBB$^)VG7n=15){6EN6t{FwHX+;FZcekz-K+h`JZqz5CIV^nYNfm|o z)YMdA7+!2YI&%~pVdXOlaTY}t_+vx zjDR2wgqs(P_=?=Si!1<&(M7SwPk{=7+e7`tY=wtJ;2n zQ~|UZ641+OfF8P#phv9JE;Rg-CfxEIrPn{eVqlPr{{}Q39y-Qw`!-fMbWi!VM7$uA z7>4?oF(EeqiL;3TP6HD_^)D&s{I{K4km?Ina86lU<3Sh7Rb-3y_NMvSR8I3jm=4Ab zC%@0*{aj2Wvyb3r+JHuJ$%B9TtH2BSlJA7KblZNHBIcn+c zyC{ARW9D&;>3nWLgJuZP?Z<>bt*RcgC*pT&rz&=}!92{5QYPyimK|4G4rGhCs(9dq zBZlP%qIc{z#GLlU^{V0-OP-F#-&8Q(y3yn+M5agj19om?jyR`5A*ucuN?nDe@Tz9!l6%iNj^8egL!ni z$~N1bd^P`Nk-akHI=dEk{H%WxRCvn1&e+k5Gb0kpaWh3DU2cKiVmdxa%um133t3G- zfBJ;{Qbc6AxirR+FA=uX@!7b|@Xct!qenAkrEdSge+SG@KEEE<8r|RcbA5d*no}LI zL=%FbgaY*$49CDynL*;sL>$DnKti4TK)H_XEs&5S@@rQG3&GxvT|*Bdx}j=+i@@?c zZe&?&s`<=5B4sc$ayQPkgF_dD;|}QXOTBUcvq3#|X?azF#N#M3*9ok4x-$+DxLXUUZ}g^y4Sz6-Gd49%Y!DJldPKbZ<3SxeGW!aQFb5zLtOO>m>};Uh6Z-%W2RFX3mJ&R;hsM2EK(}J}A=F znQtrLK$D!tuE+xlraycK;})ZO|2_KR1u79~7R0wa=|w#sv6iq~r>W}@;O+nX^aIiM zoAFbkegu&?8+f{@TG{M*ID4hvD4`@^XAy!~+}WBLh!KHN*|O6>Zq6NzZ?_$n41*0E z9E1XETUX(jux}=gg9|}629vE;a+HrChe(?r?8Fzlw z**mrbBDOhutsfX*H`A|T>I%;PNfyr6anf+wvRzT;xZ5G2)t6+Q{1kChZVgM&YiDJT zmj3eiW7BhiT(yYqKpkWnMq3d_Eo6 z^K_KF*7wJ;O?~v!%V|=(JJI03|c1v^^a)zP58Bf>MMM9yb zksXrV*oKq`Q)B;q!MEfzcub28o0}bd>iK#f-S6X8!C1+F1jbU_kN66iZ(2%|=1t@a z2p>%dA?V&pKVppLsb0S%4`9wd4^j`kQ979Za9^cC<*v%XtIb zVb579xtBF2&mvS+yBif89Hcpl)#zb%P~2gF+{QCU{g#s*g-A0U&itd*U#4pH&-V3m z&dy$oJt(j!*%9hqq|q9sY#;MI*zHOJ;ve#EWWbPn=DXKXImZ_MM{4eP#o2%1?(7fy zbao{b2o;;6HB}=+Mxb5Rjnl#Z)S>#o2es=4#e0TCN@E9oTxOLqKiLNIiO=*QJb9O? zux{L!i>hF8RMgu!qo~#L;3Zl2$5)iH1gxNh#4xsD^2vU(UScI0P|Jql7sTWA_2LJK z#2=fUSA)^lBvzPP4#)lGJhGa6T==OAJjsxL2|ymhk-c>~%dDUG6%1QH0MNs3tUZYg z0nDlrz&Pe-%Le$q@zy z`IA}Y#Q!bx$t&)HtFOgM?^3|^QFNpVoJ-yK>)||$oxqw_S{R>T^C1DxAy`R#RdXNp zs@Aps<=2?yUv3_z2DgMsf4m4*5XBh8eKxi^e#@WYXcUH$i36$-cGMGe1{g=X9!+n_ zKXdFSxFR8l1$OZ|{h;lwzo|hhHL5Z727?rJwzyd~RsjqSFN9PnC~TefGspgLeD2<* zPYL8U^lqV_)@j0xN`c}81QsA?yuQ3w0gQryJKMPZ3TqKF($LgYXH*Fe{~RAU>EyYN z?*5Z$RH=%=5e)t|Q-TW1UJp_yq`Q-y;;H^w-ouJ&0jj?~4}}7>Fbv>kV1=}<=rW*p z^o_c#P!QoQQ*Jl~6f@|Q)*Gv0^Jp#2V@N#Cm-R=zV|p|i1q%3Bc%tlZBNBxwd0KJ; z7?AHm`al-tUgTst_z4Irgwzkw%Mjn64lEXnwg5bi6)#{^`O<}p6#g_1mjK{9CbmY+ z4f2$U)vm_q)vmv+`F6dId2=)TPt?GYuNC9j?*toN!GTtS;L zfpQrtL)phgIXTqdrR%nkQNa?fAf@5v)=k^VXcZkS3u1`IokG`C)C~;Kg{&bS5J$*dRM{_Pd5$~Y>FwLI)Zjs{c8R)c67ca)*D;)UxhAgEV41o^(qnyg?c3D?d zt`=(cXNvHu!5!C^Uy5-`OuByb4Vl;1Mhh`H(!4{X&|xv{Gz+?)=BZ_DtK}LXO49W3jY6 znrw6&yyu&H%<0w^6)3S(PX{$l*q!m*5tO}{|MT%4@D|;{vTnOKBdS0~@@dq$-xuzC z^2?P=v0I5+aK?+^&w4ZU-rhsVUp;@#-8Kcao1dNT-2UY$R?Rdy(+iT7{LA;m3fZf= ze(lB<&sEK0sx&B!mr4^4u{im!EQf-Efimm`*SRb8S^e<8+tGFw#CN<(22bdB4+D=v z(-;c(0S(geg51SIz2i+rjfzx2Lo~s(@+e#SV(C#}Ze2n&03q)r8=vm~*&{iw5lsbw zKT;-ecaV8+{6&sbOT!=(P0Oh467G6o7xZ@p_5}znt8O=+JITe3d&3AG>3WNqQl$?% z-tqN|;OO175ow)9oY=Ios_sm50|F)i*ZwXpa`o(AT-OO)i7{^_&9+L*4Yz}NHHC~yOlXA_ z`t51@yy@h@VaN|lnhcan!kk0&DmVF-Kz-cXCGoO0?D+gS^DCm;T1BU^|8Xog&t-=( zx_8g#iRq)FI9`=I7#sxTU?e3a-C(FbiAB}~#4F65eL^UkM}7}PJ-fkFAHI&{##+2? znL)#XIY0%308QAZ5XNLQ%g8%0L{S_2HIscwO%Hkv-mRcBJB^lBXK86}MWxvkV)+Ns zM7qV9UX8i%tJzj8I_3CIecI$>DniQlUy73*| z{*5#C3rMx`qW}w5%pu#1^E!!09I9B!oL&t*TquY=h%8FpU3HNyeW2hnQip5r8l#3! zZFw5nrcq(QFaTSRXW$a(ei@)9ODT_nB7+A_T$*x+5l=Jg9$z81c*PvQb=P)S$25Cw zXIG^NNy>>IeJ_@E4+wzYs>IUFj-dosYCasKw(fIda52Ap>lD7&f19zArIF+WM&X%o z_7BBXns4E@b`1G^5-N5Q`Kan<>6Z>wtEA(+Boi!@xr-TTIst^58N^Zngx0$a5z$yg z<^Ym-5OBFT<<7IXeSWe1g6;ia*@Hfa)`;qgs)J&i(e}wVk%@YMoM96A`F*ONw&f|% z$3elx<&5tqPj_AXi-CrW{@~!a<)2<8PNV!v8D8!Xs3HHe$dU28!OM{l_>H|G=8VUi zzkdB%J6T&>>zDBQB;ER77(Q{Ljv7|xl@Zt!hkwu^kviKLa_LmOcJ;PSQuYZ2eFiBG zG45fCtr>6P*lB5P73(HERLH%5!`ul6KlVbw*^d_clBPPW=td>32Y*X9<9pFR3Cywn zS|w**XHo>`V#Nr~N$5e_8phnGZdfRpOm05(n31#t`(kjfmQ{Or2_gdQ&CgXeJrNv)kiIQ<}3 zR|N{Dm?<}(W)q(B$MVaW@e3ag#{JluSCHV`HIe}e;LK!(`6Z3TB0z85$Q#xzhbH|M z>tH+JcIwG#bG2~JFO%JApo|Bmv<R zSh9nuIP-DP_aH)z5@b0V)<^XK2C=`wIc#minp z*~{5WXlCv)=JM5PIBSrn?$pd|p0sX9SWX;9et0UA!^VXLT8WptzX9hGs;a^Pl`(ek zo**tQ&JG@rg?DYfk8vTI#5x*GcnlRrBDTgIkdX|+eyVUSaGLOnefaT!v#ch3aK+sY zsNi?|Pu6F;+s$;XHNO~?$n7@l8vB%$$PgY&o=#AeSYp@HLl`9rvC*EDS}0Sl`g<+ zzj(eK)Xx0kjY#2_eARf_<0+k>KVGed6VV17cTXD|WPu?dFpk*t0;)C!Aa-VEj8VS< zcS3O8GnZW67vKy(ukFeCoHl>GQd?%P?TeF{=jH*Al_s7px{Pa%#_3fKEw-qJQ|NQS zxkJ=qQnF{UGhLZZ4#6Pyo0`EaQ96Ia*}F0io!SgFqd@o@I-0W9SvTR5OCf~ln2#1l z;cV$(=gw>iVFA4{HT-OUdcq>3J4C$k?ErQ$6QGN?Sf^7W!!ssnaaXI8G!MVBK;3E0 z#yv)UCd2G|A$;y?KaMR2-?^3$eVMNbeqUNTcBl;ao&4NPBN$9zWG}Q0=|A%CM zGnO(+F}4iCAWVeDK3OtCWFKqxJ$u<>M2szi!jNSsYxX2#A4w6iWXUp?>^r~L=X=i2 z|BiEv~>~hx-!{bu@JX>2l**9-A0D=vp(Sx&^?xD6lqUZV8#gb?H9$kd`!dg@b7g-A>1g=o1y0(Y`p2}1` zTU%RC>n3)uBYm;@40HJT1SXv*0|}bV7v37s#S~v!Kh2m0k;YC=n@Ki2Bu)dER@o~BAQZICLuB4^_90|+;fS8L?aPfaZlBRnDH zsxgH)DuGNGbo+QCj;8I$eHjvUEO-RK+3t8NZ(0TYOJS#n{y?E=1_ak{EPeoJ&6P%a zw+W#~+l|R=^o*#dgy(!kkNv0YJ}#ehJds%`EiYgEGq?$fvi?rz?$xDN!!*+UO`E4ggjiuLYBPT808gx@`Bt|K0iqiHh-s7| zV7Js@;P3j#(om(GYbL*jr~@I8!`81zPKHg&i2P|6{!H_^%~kAI8<8Hml5T2tfrWF| zDjptj>`fTEYZ#RT4%rdWKi^5sS+O-7w;nu5kGQLZv+%Qw;tV_!we^98ZN{nO-MBe$ zO&>&GwAk@_&%61?vF(jQ$^N6zk6A-Y=9KVeTW!#5CPJN@GWg3x{Z*_C370bRmH~>? z5&mQl{>HE8CA!IqNUUSlF&e|Z#1HFcfELk3oC!@p2&Tz{DeEc{NA1oi^69O+X>l76 z%K&{)P!O5>(PV<|mc6{tSRK5eNhKI3&J%|BhqrO)ez$j4PMY9Mul`vtX4cJsd$4v}TOri~VS)gxv3mOWi* z9RhTw2U6GU9!va9?4o8fEjJ!_0LBanaz*Syo3Xz7PhWllYExyB^!Sm;l6?M9dD+u9 z*Fb2A<`3y&F(fVdlv zkR5Ak5`8;9u~(E5z-TWXEmdvU5}^FFy>@4*`Mcfms#sMFxHdbWIk%zmEeT8weMi*3 z?L?W(>`0KZ*jzrVChc@+(gMRvU4$m#(O7NWER>1^ZS0?Yf2{;D;!FfE zo|>g^5n7vW@INSh-l==~uzNwL%u*)Qz5`lX-Sh8(d{jTZ9{KJPlH9BK>fzXbUI6Cr zZ>W!-x$_AiP^lVi5Of~%UuveLZe;t2OipnsEm<(=gHUCQ!^1jcvnK{VO%_$GuMFDG z{yP2dxF$DMss}*|)7edu%}($;ZqtB_3xJ93MBL^fc{Fh7PJf`MMzh>k+eXIEmVbBc z|NmJ4ixF8M9@!nJ&y@285&{ItqO@2syQqiS$_ndvmX2;n=q_w2I)zOdblGPl$0x_= zz>_{#rH^Aqnep|r{-ccxa#6JF?@!=}OPaph?;0|H$2TV)&NZmX^?3?%fA>5MJnork z-$J|mDQDp4pE}|54dO=WU;xD2n&vLdn1Csp(EpKCSMQM%alE0z3-nDILsXVRLqq!@ zJ5U{1XkVo7CWbMaukE5E1W28Qp01Vp>Wdt4MI0}+ho4eG)qnoH?%DDRr@$qbqgQoH z_}OImCGIVV6=@_LzRISaL(Y}`%3N4j{a?| z>;XRkPsY~sF95oFbNfm2#jeUl6|YjzU6#90b_t}m`&5tlepp0ZlZCsSLyVZtV^k@a zM-5Fo2qR>{9oRY4DG&ZB2=u_DQxE*N5QcqfG?aVxsT_LTm_8b~f+VC%oa#AS0w=u< z^?SlLS#wi?P|Z${2<8I5V|VtOhaVdocVV7}s_RCMK)$~ZQ_;hNkuS50&x7km?p2}8 z08UQkKg+&%D?c1V2I+YuGcAp{I_n-O{l?yp#*u-3>FZZ#_J|T729Uj%=L=wTeaIM< z3JFO>M{}V5Q=wNGJM;6MiT(YQ!GPA4#)|Z^AY&(043AE@_Xm+5u)?BRXBXap&f4{o zUM&jJ%ZRy{?R5GqO|e8P-Htov!O?2)NbP$6o+E@7`n4q^EA4IVT#+$a`VHnoFi(9> z(AcLz7BmpC@TLN#-GOU*T8L{}@FC)OWb8ldR@C(``aohKUs~r!z|^Xa*xj>w_a{hg z6*ucV%a;9#TRGSZmC-xpHi>P z|3=crr;Vmyx)4sk?5dRYGEjD>3L#n1k`fY~00mUnfVxOFoad=~o^+bR^p# z;4-&-`R4Yu<@z$FGdaDq;ihOBUvf^Fgkc{>MW{#O5QMm2+u?a)sUtdz@5aebx)XkM zxLHB`FuKOZ1kuI{tp>PP3}|{%MP$kdU~;;JHNWLV)Qy^>db!h(zwiuTat!(khub$b zs)|L+=oI!ZvU(a@N|2gKH+pDIK!9H;{cCC3hBNk^qu&UzXb~P?7hcW;E@OF&ZfVn} zjlOb##8!K2qR&;VRu%{{njIFhvzdIh9=80{QMY5Z;^a*x&f=d_F8 zIz4US;YPW@d($u5y(y;d1jDC)TpGOUd;JpO$K_0h0L#E~M+PWoeYpJY$a{`dTS)Cq zV%|iM81DBTCQr%8U&SM0YojWOh1*&GvqCcTZXrTwcm>#IO_H~c*h?R?Zft7i>Ycr=9p{)ED z|Kwi!n{+e?y{%JL#*V}7^SBZd{{)mh93!HChQ3SKeV;NSJ*cDHqMuK)x%fZLb&K;j_-jZ3Nmd&J#Tf9wZ z30#3AeRbusQu%=vCXPGuJ?h~H(Q7y#hhm-*m+fgEeFAvVxi<%-IOM^cPUFMayxuh9 zoK&h zDovq#PH&3)Yj%oVGWr*{|2gw?+d@!R@*nXRJ4bP$?qXCfMwg_aTc!rP5_u< zE5jq6F(R95ohwjK@gp=SK06xxKbKY;@ORSp&C3(U>gIIO*y)pDTHU5f*SBm&C`6{W z2Hh-h^ETl4sWiD=MepPcKJCDeQnp*`Z^ZS6RMo}ehlV7|%*|X03oVteKR|rxCAz@A zZ;_#M=dA{9+W-LbbYxIUv`=El>JYM98-+ta=`5R-EP9H2VSwzD9{Un9FPqKJ-r8oB z*=amSiL(`5$%2!PT5<->VL^;->KFRvmjnqvhKJwbeCiciE>>OP>O~7(J2Ip!xF(7P z2+8Kcr$c&P!|Sbx`UVDUzNP&Dc}G`H>%*vUJnU;(S%n-9ExHI~@pXSW4Yi#vN+t&b z@huECX?_`x0clb`>fW>zzi-MLlg9wvyrllGK76sTFX>642jXCV?}dD?!gJogS{qk- z7fdoOiube8^+UA+(Ggj!VTDyahm(u2hW6GLrJjE?VWFI_Ike-W`2dBsHaHFw+%y-n;Y4?n&|H(^vl@%i; zMMVQdrcjzMB8hfbl7&@YpM_En_=JJ6i0Lr22yDUNb(`8UGRqE_Ez$P&Z~!cVJ$6fa^!q#3qA4`$9*+kY{5(KWI>_XEa`W~ zQxaF1A`#Ik@Ou$Q)vgn`=Y~Ob6P0olfPgIqK*A%AcUMYO_8NK54!J`9{6{D8!9^7H z@@7Te@1KjJNX{~3AG%NI>8ljM7;*m^d2ZwAZxA&;9I%Fd!$$P(bwP~|13tBF?NYuT zDv@IBOIj6UVjm3}l~u^zB}(?)7Rh4w|Chn`i2761Oj>$ybHAPe3@&XYFYJ%}1Qof-Pr9hk)vX*BQvR3eX$pDLcgjuF9!My<$Z zyQ_ep4DmyPzh-@C|8%`qT8c z(Ju4!P<#zoim>2&vtqs5>WPf5u!B90{C7P!s%vEh`p&O)%B}t$o2X;x`L-L67U9w4 z;ECjzt=csoMt2JAvWGaFOSqov+I{3bHx#+vLiOQayibA*v1Q%96Pf zy$1C7Wc6B8K+BsdpM1l^&l7pi=91)9&H#4L+5eWZwt8E+B=h`pqh}rUi1Z&vD($cF z)D6~Tsu;jZ%lf$SOxoP4_vZDbl_}=>FBcwxWrN+CkItG)0u2mM35F;`*iYH? zy6}eUK9N)PlIBCjL?e_&gZXxi9Ts>%sn3p?a%C=YP1=S9A4H2C#Yl$!xj4_cSncdL z2wUY)R`{vyw069Djo(cCZ(Ll>Q2|>|bNwBX?tBkoD4y_5B38BDmUF=dNWn1yD!$EBNy>O9VKtKi>iF#Aq3%$vk9}TXR1I_@qVL-B1kBmPE zKk9f|C(57ERO(BPiEbl8)=sQw4f%V~sOj#4D=Na{?Via@K0UQkv@G^Zt`a1Nq(Tc9?t~pT1Bt4l_oUY34|&C|SD4UL53ybIRPA zpayY0I#3k4%%#m8x+P{EM3M2N*Y7j=b9nd|)r)dr5;!kjF8a~Z;9g#L6+g7J6XqRg zOKWQ#zyVcsLZebJ`czP;jaRIlFbE5hM#5reD}G)!U=+fjj8xJssrXq=X1U%lIB0`m z4h7D)>bxfuNRYHh#%wer+^5f%Ovn&HN*MPcY~xwjFtI5{EW>m;=sCETurCSeGsEXY z2XdeMi#PICDR~6Zfh{%(`dcU+u7)ZDlWQ=NlinH?1u2Yw%oyI6p-um;h%+({Qeyji zuQl5*o(-*!xFNwZVKxGg#MLJsxlf{?^aLCqY@8Yg{)|g&AS*^(UwpD5J|asT%SlYE z!Kcl-eSGW(1d;}u%*u=2;`xe>TFM0{D@>-d<5)Lm+54PuyoM= zl!xh<|4M1Z$$CS#HyBxK$%V1UC(UQc@XR3YXees9jL2erfZ*JhU@r7P%8;bwiFZ6K zW|sR_iV=w?)Z1QI8^nDXxYM6JJA@E-CRRBg(CE!#)8Bwm@K}ZYPR9oBSY?HLD&)Us zMo|ZA<2APo^3a;{IqLz&C2F124$Ey*l*a$`oJ|!0%#u zsw(VEto@?<;(R3kY%Q0L^%V2o=sDv1D}?sxk>b;mAcHE0N?r_L@V%o zMKQ7KbahpfFd!n9<41xB;ow(WN^r#xZVXZs^i4D3SSCLlm}^T^Rkocsw=4b^l_PwQ zrFn{s;QDeC2(ISV0E%Lc`z^h9Md()Mxo`0H;UdI}=Y=8j@)69QzH&Y*=(l z27%gaSoS{$JUT&pwJ8G~wAmjZPmq-#Gti$YL!y(v(Q?>tT5Z!xe4819wIp&9#!u+c0l@t zr+QrkW_wpAihN8vi#J4Ozs1X-1cb6}Y_edz_U#;Md;>??DR6!e1GP|ml6_6(3p}4j zhciG@H~v{y9Z)8iKlH{7pqKrd7GvGym2`q@5~n=mA0l&oN1J@Ee8u5wj0rR)!PhEs zA-AFn?xf+qWO*+KqW)D9Sy@>H3nMu;f7{7U zG9J_8lIA1Ct3Tn5bi#4;lxWc<$V47(@{7PD^a3!uoN?Q9RCJ06$z@>O^FZWCNsRI(0XSmzJDJ$K^j)XJ`M-&229~ z%Z|*91dyz>f{%YDd2eiul(6|siD)+F`NhAK-Vk`a+4&z;k~WxKgA>OH^P%0Gt8izq zkAG$3_H;a8+eX<41w^j-zw(4KvQ?TsDIW|i&Y+Xg2LM^wNCjo(Ic%<_<-M?dpULFs zoFY-tNP3bpHhioqN7EZ6wS@ACY|NPZ2@DJ_#tmkgeedQBu4+Qd$a3EP(fR0@n z`f8440t25xaMRCiQRB^kX4dJ5>S?#vpWQ~!`wb#?$&xdJJtS{CtRZ#0p-vvY8w)gp zfDO(5PVT~JwrdzHnL`yVRl5T$rx+8~h&Xy`q3G}H-$I_R|7uqNbXwbsi$5JycFDj< z#d0hz4ruB{an4EYjy4wD6)U|Q^WSX~BHHQk!(n$*^OyYEFg6qpt!J5OKNoq`Lk7H` z`zNt0RC%V5x5u2K<4Srw=8yO8K`e&)`Tcn0|0nhD)c^WYh=cPgUTeIy{s_R)jRE@` z0h^7%o6%sxLe+bP46Qiq$KVTRMoQ=j%ASC_9q_UE%J<`aP4`@}lw$!+E)+drd5f&{ zyaZRHcYIUv6ZyzL@LBNYpPicigM6g}vYIgYi1}F!uA9?OV5Pk3x5{HbWc4JON;})v zu*n7`O9zUceV~Q?*~AQcaM^}xkf6i%ecIts0tO}7EyX+)Y63B%SYTab$;Ul3);tmn z9n25M_O=hbrtj2Ln%%rj=|Y+i!FLu{om4`W6lc!D|HU&vY$Jyk)Qr8g_m{o4HZT4i zOrI{4a}F<;x;;PGdr^8Awj~$e1erW;bHXm-m_WBTMM(7YLg`8|+WU>}A>&)JdMW$! zi3Q}_j6-2}&IV(Nl|O)}Q^vRN6PD!9xKw{z2&s)Xf#WE2x_u&2ewv88s_xg>(PeUc){x(GhZe7tNW#(7{mN>JKmB8I~F@~Qg@iDEscHOLGE9F#hc)=!`KaAW@Wat7_i1nlGQ`)HJ}`sQD73grVs7*8Wc zPVecuL^CJidWrWN;d|Umc!ThfO%OfCOOcHuDeFwHb{A43rs1w$gzQ9qLYSv~Q+ zo@}k(!Nc)R6*M0=_}ad~tQ!Jb)M)o#BIh23wvD@)l&AYv=F|Z_&Yhq!|6KO(dWGOf zj>kXx6jV&uVVQbek1HL24&Q$O@?}JH+gM`Xm1Q4bWVI87>NE$ z%K`M+K%)y~D0HJHV$U?f*wGZRG<%7iC-!6NcgVWv{T;naJan~2}A^d`^?I; z)TP-sSei5y?A+(l*j$Q!1xt@_=t`WTY8w zk~XR>k|HQ#gff&+qYqOFc2zkdi2=K)01zs7aH78)Xs$f~`2;hAk}_ zd!cJ@7qXhlD$B^H+fSws5JN%aolpQ+3<#Rq5&M^E@!5_F#lC1E0czW@h6@xX>mRUcT2PS`C?_R7ISh7v4(LIO!9!em0+^h{_(W zUpVmdTkla+Qfz$7r^@oN!cW0h0=fij52hz2cZ}O;4H?O1ldF-aJW$aiYL}9^ED*Jq zddzE?Xt8E*Sdx7x_GJwXoI9I=B~7$nrb~)JT_R?I52CrmaA`eK%SU zrVEvgzxve!Fl!4G%xMIOog;9@@9OkZvQi>H+7s*AcxfqNG-L>42c#1cwHNMZ!q8Ja z!0Hjyc(Y=r_N=4h{>;JIH|o!Bav_HuA?1s6MpbQ3tLGL@0a*`^MMVk6tlOFr#!Wew zf8JmyWB3FNhEoZX8%^H8W8pN4q|cX^m<^?Rm;eFj3pj1)l)w#L3-uaQX&2A_? z6!=$cj9m!(58S(_z2fpCo`Dro2LU{htUTNa<` zOfr(5plgW38Pzap2y@@$HeL^SVOdNIg5=74{5kARX0y$S=1K(>;*d0?6kkS(vxkyM&o3eqjo-0x}$At zn*8Q%Y6t4RCmfJz^Ii-@ZO#N!$R`K+3qga~5Zas;W0W&h{Y>azAOYOhe#|X2?pS9Z z5BL{Ne;9zs0ZV^+({AlVg%S6B8W-?6{HEyFecAQqX->#^+!qCNbw3H|{vwen)?jT4 zbYMV0rQX4G!Wl%pLh})^1faG`lz^ZvH^cq+%F8EhmcWf?Y|N=~70K9rcjq zQV*{2n^RWwZ*+S%T73To_cHl;2f8wqR{wb6m zr(!(;!YQyZzI6;7)0>JB7g`a!T5w^azjhurJ*SwvX&ND)D>r=t8D7ZttrSU!Dijcf zMy5V0Jo)$T;gGe4CX`<=mYD;jrpu$?@ECqtVv!&5{rjtn=!+ZNVHRdb(qt8+iZ4k; z-{n$7?9REiK2(V7yt^L(dVZ-?=Q&*P$vyH5@0(OHsh^+OqaCt)5__&J^$BqzD@@7( zX=Oj~?ywvie!aOlG+9p=y|wZ^p#T!Q!4&uINfw{Iulx0>RS3E7?AyW!#F1^ zX{T&T|I2ha>Y(EVX$CJOCnw)Z>+MY|xpgbqDA?kve;ya`GRJ;=w^{pIxZnABNzD4F z&){O$0Pu%i5P>cB{f2gTqI>a9K?P#z$I45X4#^^cDx1!pKGM6F>h;Mik;!tbxARh& z)@rqA8Tx^L==^a*`^j1U@k)gE(tZeB7*o9$?C+((6$#{M`WL^2z^*JQ(O8=RJ-m+2 z5`%A~jtPY(8fLci6wT~e%?Tygb}sc@HB>DlEEXxk5Lwg1U#hJBgTavrGi(O^;q%LQ? zWjKLo!ql6Fd+7^l`Y+ft^QXNutPId`d(`N|a1Nz3HKY6Ms)siH?{&D-N-|=7C4^_u z-tX+}J#vyiCz;SgS}ymlmf>ahN|cWn)LYKZPbif?&0dMKoGCo6D*8Q{^V18~2j=?MiFFV!wEP$g%cNd}v@&C15dq5Asz(&>(RVU#Ye0{?@}h?LAa z6En*(30uWiQ1wa;q_iVTSO}stfnVn2Wr*jOU!)x{*4`&yhW?Ve_|(@JUtMesAJV zOkKUm*FD#6`B#-c9SXDlq<{?>{vi2QWeE$!`Q0#p9?u*wu){+GRBNxM8)qda2OQr|7?( z^s|>ticj^f1_?AJiMUf&)G|GBjlpRcg3*%wXjG$x#O6#$GV&_nhvir<0Kz-T+Yqu7 znXJF3pz!_;(fD6*tFX6}cbej>Y}s*j-PCjYTY)B;Bf5fn*(+JC2V{gfE}#!1${?Z} zy{mRwxcUFH0E-f_fHXcle7aIn#{HonQAT=wQPoA)4p1RLZ0_n|YGUy&1$Ow)MIj1`DTibNn1iwxK@9y8!t5 zEq!1|`mC{~b7^0bVI+o8#NIyD;pcS6pl1YSGFhKoUGd@Utv#(Wd3E)4Ze{q-=}h>% zDJ#phrC6nYcRKVN-17?1q6xlG^>g#{MR#PBCxjVG;^QnfK;bdMQxr9PD(2&37ff8+#+7xvIeA}#EiD5t4uadW-iV-6HGd}w)2&Yz)UebSEKm^9K>?b#JcfN95;!-V2gvTbl7*0{z|0c6MX~iuEMN+R^ z%N>|<6~61X&*m?CK7vCyS%Bt0*S~!0$A^!D)U+ggj*(7ly_B6E7N0$bE(3q*7{0?U zU}CHha%HL@-Vjw;w}1zfT2Fu~xY>JN)9TU4%e+nAXOyfIhR5pKI6x$ZM#;R0w+D8p zK9Y0u@_bm*Tx7C!J?WL2MzXJ4YTgwy`|v`(Gy<|&<( zO17SNoSi6tzNNfX3jA`R+?8!u`Y z2XU!=nKfd5@ij6Vu8~o~Y3|h804LFe^4xP`R-o@qr6F<8Xm%7HT>9WFjmY8p1fiHi zgcN+$W}GyrmND4O%%!_Bl)X3iuaQRgraI1Rzg4?jyPf^8Ebyba-dAuT@Nd0D0;lEZ zi+XlDt5pUWUzz`QY*WYSfFQ`t2DbtaCX1>uBn3kO zCcdDOVo?spvawyZ5!OHrD3&;cpLuOAa^++2?K}IEg{*`2n`?7lf~$0kjbq~*4fTvg zNvGc`J5>u8I+rKfo_I|7k7>=K#A2PRnYk4dgYz}Jp_gf2`YNj^-L)1sb_|Wz$dk+v z(}rMvSByDixTJN_l>0ZY#tv{wkL19`uZj(-15WAhwFAjZH9I>yf{#ry-uo$j+R<~h zOfj?K{IA=-`OesPNSB#-!k2NcfPky`K)KK@ChOpx?oAK5>r3kj`!E#r)Lu@;Y&faj z+WmOgIO%bv30xBvof=8V;x4`XfXBy@W^&UY=YKQw^Yb=PF$g#7v4&U*;DJe-JD8z3 zO+M4};PLo{phk1|K55=u4P9VBe0DIi^rn43+hE9v4p<#BJp;C1tuK~|4eh7@w&v5~ zV$k+Qr)M#q)?b0fZlgzq| z=OK9x)W8SoQqwFhB>*DdX$~{Ka|fOU#OxbZXv|$pIgP2wCugqR{}(zt1UlRX7_7e~ zSEDW7Nz+ARVgt)Lkft+eJgjlXd%o&9(|%y}p+h^viThCG&Xe1K^nCR}e(;_H)yCQi zM%`1(XsoWL)Lou)R8RY^SmKJGC_$Y}A6RK3h8Y;Hb1gB*C*J}JYc=|wdJHHiW3bq0 zA`j`+I>Ud@j>6u|$i(<6MZ#gibM*F-5*(1lrITeg@9AB4GIOj=fU|f&&a@A{&vz%E zv;}qmp%#9_tI4=*fIWmvfN83e6l8?OP&$ku5|5~9$n3?lVW^j?H;iF^U))vr_~*41 z^59qD3_?t1(j@VYWn3yclKK5h2_Y%1GQJ7D(%9uD^2B`$7gS|&RWy!T)tQ)kJrMH& z1(SgA({fD=I<}6d*m8iri38o(LTx9X!b#dcB0~4+p`i)%y%3H$;mUU0KHTF&C$K(% zAQ^3OxE3LrE4$@C`xeada>AEAet&}J>KmcTe`>DYgE zK$5PwX(qftZhX#X#qE7b+KOKp&RcCW?01gA!2#gm81qy*I8Ds|g={JZ86%%hBZ$7o z4;M%p2A4AjUI}2{$Lvl&(N+iX75s2)wK58n6x$AWR{QtpkKw}r6fD*&9X@FwoCYki z#aW-NnqI68ov)1&p8$HQu#?;7#Z=ojl{mpoWA)gVLJW44Yhmf_J~8j|jYT)3`?aBbd+Ut{jEl31j9B@+O^QVwv*K*i{+C@Nkgu^R#UFA!$tR5GAN4@a=X2_w7&n zP!Rz>A(+rl3c0abT#bGhSY1DE6Eb~tjc{CNeNxBUes*=~G$vE|zMeeD`3+$8mR?#y z8?LSdi1?nsqQQ*MCAl&ayZDX%0(ELxiG!K`-xJCr;7?BGRk5fv4GEzOGI7)}G_Bh) z0VHE}ocTw)PRctgLxLa*fSWFFKi+y0cvCriVG>RSuzS8nLp9_1KJkqg09kDxDv-uc zpg!I_KVxm%ud8a^A|=zt>3YS|r@SdH7<>j<`?Uwm*euI&hrgGU1)>i-Si`-x4_}Hf zYx>E30@sR47shhNddNm5{$9}RqQ9ZJ8La-J7>k1P8vyz$xU_zPmg?8#78`M~fsXL` zwc^Sm!zS2v7yn-kvgSW1VY#R$+6Mj>o;{qMO3O#}uijm&;px8T2JfJ;Fbppu-)P9g z2K^;%qow`;=rG9qy@O0s?$kFqgN>L-){^`f|h_|7e~bD zKHh9)9oEd?HoXtm_8MGaq5-D01y(uI&t@UMzqm4g*Yy&O>^1ad+5X)l!kT`Y{f zj~S|-z(c)!@==rmVSApRpYLQ=|F|jo&!0|KptQDE4qHsim%6L| z_en(xW_j&dqm^Yqj^5-kjXCAJy+#I?`5g!2bcag4f1~@CRQq-;Ty(-9sYkD;Js)7$ z%*1GJH>x+Y_xxgM($SO~`1+ddm?su$^akQ=C!t)dtq;3>l?jR)y(`b%I}~uvzQBAh zS07kMy!5W&=hH5lTg$p}>P&9N#!!vE<6T9CF`27(Kzja~+82^fmKBLG$TgFJ}ZCeMG? z-&av|YFAr#uL|z(O&4kl#zKYI7m4Jho#4Ar*qRix1-&RS#w2hWsG*w!fxVbit{@L= zPZF#j4ZGvw$oC8z|2eUGbVBJ_(_zHLc?i&osv9UP_35;Uv+~Vw*k;NPJ3HQbaj?J8 zi=>yE$r*LHf^U%fb|`H8FeuNr?q_1!nv-0Pnd|?e>85dGXr?6( z{r1qClrd3)&tu=B*n z&ekIY*ex2#- z&8mFJ7cG@D2vOC3i`y+6)GNlBix2Ho$HRr<7*s{3fIiHX-0m!hK~Z;g03;4NG#Dzq zXz|(&UM%}6BhP@hQ_2td4>)@ZA%Lf7#cx!X0)ZFTj{Akp2vkQKI%9Hcs1!as%$&pr zRoWp_Y%p`WC;_LMR@bpgmv`-_Lv1uYFH{813BT+>WJruMwHy4tpFq(<)a2jiAHFJd zN1MAAP=W0d7+$`*^lzG>gTRUE1xFh8LG-de!%3V1&DHiJ8$3_ku#vugsEVt6?;BXsAfw#Ion zh=#HtMpb>67-ofe=K7I%{7x?9ZrG!n+wV^3oajxTA7@i(h5pS~aY+iiq8pF(mbkoR zKiAE{g>&I<@dg*Au`EW^-7Z6lSaETEf<)u5A$<=VH z-mS-s`S&j_K5bQ^dxw4ZnwR(=7eCb{Flzf^Ei?R&b;LTC#|$th$qi}sjo2G(f48b8 z#*GA9Fo#+HCB=Ofnw(K#fwunp(x2wI84_`!Mkc_6KVV*GniV7BfNwssf`2IN!-$Ko zpWpkU!!(tnG)}muD9Og_o?sqQ^^azz;0IlJug&rk`WoHDFCw&NGY8^#dmWf{#0;+n zL7ph?JG}NLhsI-Vjnh%99yNJ#d#eCvAv^CNr)^VyieLa27C}wbmmj&+kJnbUoR(3V zTaVnl!>i2$6T1*zqfidf_JebGlDg4PwRQmDuo?1Mgunpe;ZJ^e?Mh+yZ1=D^WsI^H zTtfviT7VbqNksECstQ-ILe+%?G2r_7t3R%&s}Eq=BL$)?#8f>62Y^%mlRVM-Q#hxc z5+W?YLJ&yj>53@6>Xfpd-~p-u-Wx&k1-t|k%`%83&^hv{*@&%dU<T0$=valVTJ>5%Rw8uiPFSn z^=xk{aK=(XZqO~@WPiQjeVn&!W82XwG4580=D#-A+#4*cRnWOwpdCaxX#)YHJ!T`i zxD$C#E5)XO9%^Y?Ag02fiKjAm^-bGry@KU9&`s?F&)ZAuJU2E^$3i9g(38R<5- z`6?WTnhrg0Y{~{`yE7Mj{LKojvuMTZH}8d_^|niZKet3aTJ!<51Rd6m2&|>qbPBpy zb>lI>(ZEZVqeK@gZnScIel8O?9MD<3DQBq&uv(Vam({eN*EovC^wgGa7r?g5M3Oj% zUj=29wy4LG5%PC!uuOkRKuNy@&|0P{{=AwK8s%mique39_%*y?B8QerZ8rPxiW5t- zqV4()$1m`hr9~nKB0y6AH2P$zB3FOOsWbaPd1xmsjbpp`H=}#faJI{2hSDYj5`33S z7p-kObKqcQKjC(REdfuu+na6AmAZ)IcYcqX)7=j<;CjsoV`%6D_7G;=>v2VO@y>n{ z>3?^-?acmq%C^$2jm_cSw8X`^t(9?`Zt)>$p^~(x$}Z1< z>7#H>DH&xWS`aVdVDh{9qC>uYZz^0BwhhMX6|#k5>+^o7?2K5yktN)?TWG7S_?Dr^ z#z_7b%`e#`T{H6nDnHl|W?NP5iN*@Dy+hv~@~ytc ziAq&=lHXWCCcs}=av|f{>PCYAvrf#M#A7nyAj7v80lu`3cP-xYlVck8pK`1V2r?P< zzn44o-YOOCF_E`#hOGaA`flDmYlnpv6_-L(vBD&x*CTpExjX!Cob9lM>nj1(qZ=O- zPBtR;dgUWl<=>O}-sI}evk73nG`_AExywR^fw^F@xn+z^T?8CWl#bc6Ju&;}OAxQ< zufPz;rQCab-=yHyAI{d8)Vux4;#)?j&nY^>Lh`~FDO$SX(X*Do^M4kMLCucr3xEWK zyuX)6p?GXUe-*=r z@e-z?%SeF{R)gp8Il98KfzR3=i(h4Gy0cSVTX+DwhOr7+uUqju?~)9EeLR8Pu_6AT z1%F1^Fmr>LhPL0WtR~)MZn{+;YmFD+H+@q)2WDGg7c3LLJ^b;}9k!c`cr9JoL*O-K zs+NYN@A_%?@$HKr0}JgtitSNs;Tucg%ZYqPB9vj9r^ zyqopj%5zg=2ka3^G9oN2n7u*>N@E<{^Zc4Fa9Q44vPjL3wNHh^qCvl1`t#0ao1ePV zIR&a*WMQUi{!BMlc&1LMC_aooHIo6ig^cH3n%2+Tt8my;5lSv@NQoSHeAyID-w^|X zf}fe)3A)#NOU70jd@V-5$8NhL=&N?WeA2Nk77NF4@*}>^lV_6w=XAQ1W5YVo6zVnz zyxjO+R0wBdoXyL##>+$gtEVSHZ5k&ILhwriXVKHmYXn^1^N;T+K-MP_20TFCCsre$ zXQg;w2C?xS3SQBAt_Yl|C&bB!^Q8#=1Hs(=Osi+!o}05t^3%^&2${#>e&qYQ7CNr$ z(;aO#7BKHSI)k+tDQH9cs@DC9pQ8|i#K#)2XHYaT7c`2v_KycBICL) zwVx-Pq3{6vU#o+KRx-Z#<0e<)&QXO+85XY2(%Nu$sD)K+tc0fH2#mCqhC%F7d1^Cu z!yF&|{E^wuLN!VWn5sk4&ps)II05WI&6D50LvVF6g7g)UY5v%in9Rzn@`@^{HyzEK zYX30Zta7}zuY`bTlN-b5-_Fcod$NSVGJkah?zc_Scu|{o=x@$q*D>>LUDwh>g;&b6 zg*$@|iu+-bMRFPv>5S0m<;WW5LR^7pKQ8h$Af)gg%geJol~(R9 zAXN`AUD9}cFJi|8`)qr;myTDdqHOhej{@|VuUCX^b#X~%B$nLbGBaduy^|e$wkIjU zwKS|KAHe<(=&0Wr)AFhANjxhv1bQ3< zwEN_%!bJW;HQTo_FOloA}%)1H#W}~P0uwH zYXPQNqlLfxD^Htvwf4q(>+^~BGtFYX%IXChp6&wN%NMw7RLcy6o17ir^k$OCv5-r} zdSen}<={d%>3zjOUzs>lp^W>R0&yR}onU+e>LDKp1&jwL%0hg9q_=z*L>jEBO8IUv z$=T(;e4n?W_fnUzA}me$FxvEjbpAtPDSh<25`fmP?bObp=VlJsjM^bL7Q7G83^5J= z%nct2n^6fpr3bxAPOh?U*YD>lbsk-hCCTq7#YH#M3QPZrmDfQ4Ps1;E@2(L4%qvU` zZ|WAW7|FExll{qNiWOt7(u!4ODEd2}aHb=j*Cj8O_fKYyPI$WjV-q9CEIy6~K5j8v zk*abcW6fOez?{q5OD>S&&J{zGzio|-zjdsF7niPrk=n1zaMj{^d2o_n-hZ9XL8ww- ztTEdWmDn#Ny&NXGiuA2l$Nj1ILk6aV&zH3t;W5Riv?E=^?#9i%o z_-6$wJc)MnsU1a1&6TVm`3hz&xM7VbnA=Z<=jyxP?XO{Uv+*9x?5rcRao;1wceLLa zv_&U&MV@{M)V~s~4clVl5bJ-VKhZlQ4o&yVub3FIkrEcDwoo6I>&wSp9Skj>xcJ7~ zz3_$Rn$5WMBH^lb!F!uu(=E^cE#0Wuw}%5My0;~hcpeR4ul|?O`89wmsB7J9vrJ@z zgio4ma+~`h-UE?^@ZK0%4w+;yKTem;9UJ~sgC|V{*E}TNrYQeI<`jF!}me=N-=_JK+ams+jUG<|tmcrn;@GE=7*9OiS_5%}K=`$7f?5RE(p!UFd8_I@o< zcO8aa&iVKsKR-K(JRbEt-;AMV^fMcAlytS3RENIajc0eTd3t3rF6$=KZQUsLI;tV} zYfn^a7lQcX9Ef*^TEni+mL=!TBTG4asD10$%Vs2*oyN3F&y6N_4Q_Uv>YhD@UT0TP zzW5k^4OZdE{z4PfT?)$4F&$ZzuR}@DK7paZprB7BSm;mXc7hGM3XK9qQ?sG*P8exg z`#cYm%9212#XTh}1gteP?S3g&X;!x!(fzN;mVCqDBf%GfFVLx4N5w$MiAdw!9mVls z#kzQFKx;%AT}e-W1kWxK7_OI+XU)^$TWbva-Abza8FIn){1OkOP+y#%GG4R*$EBy^ zDlLcySL{^wSMZ!lAuLuS*o}1KXbw)!FW_{;;VFJpH@R$b^k?9uXjnekbsX7wyf(q3 zn&~hz(bQ2i6l0i0(bwI|UNdR2ZFq1%3^goN#OCdj9B67??v$D~E{XYB0cO70U5mlD zO1SeSP6v1?jsD~jC{bKrNz=YZ{uThd)pJdap}F-$^(rj8OxUX1c}DicRyp$Q$Qybq z6~Z4SmDF*~3+_bH)wFC%3)9B#h*w0;HPz>i6(+4 z#W5WnGkVs4i&?>>`Y}lkainzaWP-m8YQKylPZZ{Yq7n30S7FFkLI!;Oe=Wc=eet;D zjXyMGpX|kdA0K~`GuO`nLHO3F+n!j`@kbj%s4D!ul3x61L`voZgV_(BgkeqN<*CMh z(j&E2loj)xp`2txWd^{BXOurNg`I0~c~!p_5T-h`bt)=Ym3=8o2T0Vdr(5Uku2wL2gWQrd~)gVJG7H7#`u-qne|`5cDqVc#(z+b#i79A4p;DY_+Fl_ zwJ^#nBIK5xqP#pEM34Ulgo;WfTMs+UKRnx9x}>P2q@?l`kQagftsTuKvh`cIS+Ac1 zvzUv+u1GIGKmbaT@i^nWBzA=!XBe((0=GWBdIWr9$=Nu1<+sGgE#1OMO*bSqUYxEL zC?4jdYw^+J3AV3U1R5!N@T4(nL!G7E&TE3x{`y=;*0|@a4yh|J7`dL8wlYQp>o6$i zq&F$CVflVKS^3ZSDiwAx8M9_zu3|3LX^8nKawg>bhntCN|z@M2&BvwsT3dHBic*0X;$z?xv20vr& zzYQH4n0kVKaGMxIsVxZXl()FQs7E@yc6?y|R4(sZ#-ItT0w7X>(-;w%qxU9tOpW=i zG98p{KKq+(Lzb%iNzp_-N*^)<9~LSUONzRY6oiVv7;KZqC|Js656X)V7z)}vRrBiX z>JokVti~*NG=D9f~jS+W!6qx^DI6ljLOwK%w z=ZCepcm*b9$U-40)ACOCBwbGqJNA>#xg+#jfgNC7^+Xu-qR+JBFa_7S zO{7BHf0}(69g^G$QDv?09J573MdWEWZS5XEg*~fgf{`K1z-T4om z*a|cby&+>)r-`zx(sNV#lP3=njL%;LoFo`=))V33c!}a=^&u@rh~Iha^*?lIcL#hM z^&iBJC~7f`szS@D!{0KVdsx3L1({$j*z$I0PdMG!AGXZRs^bPsmMnxEeoHgOlw#pu zs_5XUatG7o*HfO0S6jmRz|3$P_x>qU{W*V*GJjLk$(e$0(RZT;?cv}=^w@0k_8@F^ zaDCFS>tv%b8;dZ)`@_1gfJ@aI(~sT3{V8e5-i;r&+akO$AI@hQuLJQ|EE&EGSt&5_ zK1?PCSj?%TDN@AkqfgP0-bGtI!654q!O~sDmg(CK903u>E3bDIPXUmA97eK?>7$_< z?R7FZIa%YTkUS^!U3@)B9tJ29_%l^C;5>hpsjxk-;oN8Us9xx*g_Z2`a5ay8F%L}= zSBf`8-)u@qbjPQ!kqRQNh7q?a6|dCutqqXGV#JS`m}yWTjbQjwGuH-R3toz-f}S~Y zm8HU=mmsgwi_+-FSQY2AP){#~|S6ldr*uC~om7)oi7__LeH|j#0!=`Vwjj+ zPr{~UXa;c-b-buCq(&Sx@7`l$HV{a6EPTh z*#}Ou*UIC%e5x>)`o7b#f!}|veO}+|OYsKBs%fuuJgvh|pS<04mUj00?CMV*ongw5 z0!hRB?pZy#07uru6YN9Wl>L zOJMVA+l-|I*UOo5I!%* zaLmLFukn&)=uItRc3GL>0#f_YupDRGtyGU#+Xjn;)?E?Gk=<{}(zBfdI})PPuM<2P z%-H)`z&pU&j9XMRbGW^-?JYH=|Lx6~EUBq5I3In$H`DaK@1>7|w&zYii)p(I)oa+d zY4zOj$n#2L7Cbaff#{q$+&HBp=HwQ%G9=2xH;9&)laQC!PWwmY*= zk|FNO+5KQRpKA*=%iV7~+=^KBEhOssRK!jIDRu&U9|I3NL@ydd+1c5>K7{Ab*cT8T zFdv#W!*KoSyd}0Z59l;+!GjB^^#FiRaRZQ>PRjEgK$x1AsGGt$**RRwFea_vf(z~s zLdvXea=;sl`5X=I<6B2p%yPB6?G~{-(O~a}GIsyNUX6hyfhtb*4{QNTtz^l1;OXCKp z$M3PsXR&It`#A2ld$#xT-cP4xW$e}Mt?wu<5D0`l4%$u^1W(Hn2lfrYl|lJr zGqSBVcZ{(=3Sp)w_q4E}fVwaq%B`Cx4*4DsuLUN5TkXU5MA@xzS~Hc&)X>a=H=e8K zF!MdDt8!ub&)|lc6eB5aq2h`fePP;t>k9wKpdf)#dpH%U$Kt_9wi>Y<-S7x+xy->U zzbJlw4A=wK$DH{O%*3I;2VUH~-7@EBLA)F^zX<-@(Qxi7QzuEk^g~Ec(pU_Vmnc%Q zDOH?masLxU;aCCLK0O=t%C~cP=2sqZ_VEJ^J|H(6Yt#Nj_+wfyAkw3)@a4NrQxViM zuhqpQU3yL9^xCGZ$>!t8?oeVeTR#M~82-k*tT)AvA83FOsl-;0EjZSjeGq5e*jYA<7qb-|Qd4n_s7w7Wv!Y z7mTY|z(>Px?3+r1r7yX)F=l+VEr|KS#HdieFC$559U!)LQz&H zPxLNtCItYhUkkUldn+MLA1y<+6TfK=QY)mj9Q&E+J4xOdxPNcdJ#svB+cs;&iA;4E zkSyj5f6 zB_|}UC5Gj0aQ_fXDjxja^Q(zX#$!47qGCL(k0C~oE{cYXo{B;uYO&f-9q*6+AaGBWGDJEv#6P78ulq;jSD_Zh|~tMutbev!L# zyVt)V@()S+zGXiA zZJM!<_QJGenamWtNl!HuC>(4COrNu0_99yLK2p+lMhCa95v)Q5XlsM262h{5Ycxesqt zShL4!#SMGRBR$S0Rhw}NgHF)td_{iN}l1%tr421u{C9+N2E zjO?;_F5pmt6+s0AX9LksOgCCzIwGW#>}=>KwP+Zkq9xHOMXb>}J#y;1mrMtaDrpXb z*@fBpn;xD0nW+fffX(XKXBytx(t-?PYj>3rsa{d7sxgL4s_2fKlkKV>n=6p&`-U4#kDn8s8Lxi62bq3E9@^a=3|BI?9>XK8K2&>_DApDT^2}b!2~Z)jj9!=E-94`+4V~MhSk_ zD5SaJy>!seofB8-{PztOm5-92{pYeOo@a1C(7l4kH_s$i`6vp})vOGD(s~wn{(4;0 zqt>&^m4(9G^r3z)cYexjBrX}K_g%jp&oK*H)IsEv~`Zcf3soi^wck|lMrm;bnYp7O%Go(1WU6!Y7Nq8y(r-@XOD0_y`fwFYfBL=W%Kl^e<;F>i z>SR$pr^y$e$E!I|@N&j6Aaf`=$-s;->QorMv$F%G@%9O^NaUYx-4D4*UY=0g*)X{t zrd-I_;VYeYw{WU0VCQ7*UsdvaFfp%nCeR~u1$6jK_JwPy`jwDa|=J&A+ zA(AaOcN%At5=FdMKDpjFu=CCS3s>Veiw}&*h0txa$CFK5+IMOa*o{yiTqkEN2NbJa z;S)yI&7sW^m+2Vt@ok|&zjGWY8YA@T(|0|?$@q#l(+X}i*Qd!jH}*x^eZR3*Y0FJ;=#a$CSGkVF4jDK$`}WntUe@P&<&#AMBF_MWVgJGH(X=j5yFDGEJwRkd<|$fQlOC#Qyrp zb0$|cZ#t!~+eU=>`Zie9cz6P2YU-$;f3A1Hhnfvb9*&O;q%h<$9$3Qw$4`BX)XNTx zLF2G}^haZU?1?b-#~*Y1-7d=qQIdM*y0gw@T84nTAG3bma^4-2fD&|mvt6CyUkmK{ zQoP4^XU*&F&=8cc%*ap1e2xR1L!G$N5|JLidzKWG?-%gplbSav*?sbWEFp^5XKgxW_?e0kJ8lnNf-JQ88`+<{k-qwBwru@W*;q)_ zR|_M4pl{b0ywqe)Og~<@`2Cq^*ctZsFTlL4mT7Yue>Spu4ZE@G_)24G!dba6DIu+x z+8V*syGTh4woyWX_|w-3o*k#Fxt?Q=l0ampDh*8!Z`%`$>hei}4j`!XMj)l#YMM-D zXA9)YHm&VhXZjakN~xaC-}*_(76;0^=JN0?_8)7MogaKisvpqr!S34I{tYE`hb#E= zU;BhjJ#O0Z+Q^3#nG2o2Z<+>A`p?}f4D$h~MS$n(?6~mqxCH=D{?{aPMjQd2{)_F% zQ-uY>W&q@`YZGi)!EG}k;q|=)BNuumdEzG}-`#VGzdids8Y5m^cg_PDcEf8VMyUq= zW-PE?bZUQkZvN}=;obtmvu`=B_vrF^;zge)27`jGXgE4`^DS?bi3LSDts zHtXMyn!d9#&zV+9L(6Qa0dsNi!zr$Cyt&GhIM^U8Ib$!M`=b^(6ped$VBrX(vIGt; zZY?T#3q1pa2)DJG!9Bx>9hv80|CV1r536Wu9&`OPIoSZfy|`m+A)e!$S1W!LVEB!oye1MvyYbXC#NwfHiy=AKyMvKqq zF{FOi0TJY>U!Wwfa5uRh=+wJTc60~_ZH~@uok*lTa~ijflLB{+KL3g{7X6-DSwur5 zo}!2v)J-l%=g4q3o2tLpp4TW#&lm0Af(#%mCQs&%OMXY*EA^wFKmBQMh1c(2T0>?h zTAIhb-HxlR_Q}YA>ac!ndfU*WNhKKdqahGNQEWm1N<$l4#ez5ka*!C zBTx!V^o;!{LtbwkzS`AJ)&JD|H3o<~-Voam2c_1JCoZ=JSR>CBZ0S_sS7uOC9uD&%5cogoq zIzQ8loUPUE79~ix&U?l%ilcO*%66XNaEH8{t1CXYUmP|n{4ke+Z{OE{`$}O-lRmg0 zm)kIHK(0Tqtfx`H0b!;sPOm;Y{>Zvw%3dBO(G8Y-QW*cc0^WJ~0etwDm+Vw)4=)G` zRmn{oGzX+@#%}VZzh6XAz104kP_dgCdwSzqE0RzzJZVyTErqQH8=uOgO_Sm3Tfu;A z{FfTG2(7|D3oXTxLtnqL;7X zw2^*90b5O5NO{xUtE`lM)7M4xR?B1d@l|t$7lh0Gm6dOr1$tWeVYbI_hxS7~JHjKR z=W9jy(^CtupT&4BXehMEG%6nIR2(`7YzGpWuoAC6n@E~kaKg`-mF|ZR6i)~=aUJYp z`*@X~;^wFTMG@+~C+sIVotlvET4Y%p{C9h)-j|N2=LSah(O9^=TS@5PUW)#$|cdDoxS)Fh6vL^Fn6oV0DXpI%J-M!(4SwOH>UM+}@7cGqrae-3E7Nuh2n=;a?8 zGY~*iMF^1+k;&E1bfAeEfYI{*DoP&dx$=>9Ht;zGcM+Q698bkA$wNz#L^dKWJ3hkB zr1r&`Nu0YxRFz6CnhMH2A+9Rq{QH+lz?je9KJaP^g#_7ez{!yB>wvfbrd+@NrzzYH zT{t}(e9ekC*Po+>0Nzr7D)sN|c(-LfL{~8U_;)XGtq*z^-27+29;vRynRhQupif&n z%y8$zYK7=2u-=ii+996PIhL3i3X_UVPwXFw+RI4mjGI~tukANqiaok4FW6SXK8CND zir-mrC~YMF#w7NJmsf+C;)?oEHziv2U2muH?P$XmnVO8Itc~B(d;>Co=oh4cb@BZx zd-W=;jKP*!6-6(=LJm}$X?cbhJh9!=z=*kKG-d`5tW?6411D*WXly#}aSLh``9tYZ z%r9YhYd`Ua*ftT~z!cwK%fQt`N$?+91~5xY$v^;re1uoT-S(Ss3%q0Y!Q0DZ0D&CX zwTmP!0qyd|F|n`(*_L(pvf=WeP)BosJlmbqS8}kywuKPv*<@5+{>WW{CnNbqK1cOb zt6YwumMQtf>tGMP=_Uf}c%4X{XEjl~h=hE0i?rW7;IsI4D50lKstYPkKlXAB#dXz? z!pG&?AD;pu6y==HjAp;0_E()hBTv7isD31%Mstu^n__GjkXH@bOK_7FiaPsS#3Wt14ITpVqzHgBI6<++QPL*9cb1uDPf zSdElTPS|&JURm`<^n#uTpRJB7UpRn6(4F5l?3FoQUxEL@^<8}qsARafw?A)&1O|7U z{62m;Bt*56w~4FWCe+p$8XD>fJPR(xS)I#L0VrC)t=AU7rdUvzcd>eS2`R1{`U4c8 zU)GTq35I9ZH(wda0VxiGiP~^iaS06;o+qTqjA#t>-MV{f0QT#L&N8aT^~Qb ztK68vKbvbBO)np>t$RJ+uVHJdb@|6h#W?$RSeC(~@P)3RVE@oIAV@H<>*!CyvW|kh z{FvVU#p(9K&!1<6$lY@GfXgYB^I}|W#@BwQa(}DcMc$#QlV)LEvXAZUKiyl}nghll zMw3!N4BXyw$$$^7Ha$1Ap=#H?(8h+Eq;4GzUaCb_H$io%CJxU7+BP@29^ZLj%t}(V zG?4ft7Z@CzO^4GV<7@gZrB7qv#J|rrNnhCVs*8=mSYUk#TJn7@xf>EhvZ~av`@P`^ zUxU&qW$T5}Lr@d;dK$R|2fROkasNAidB)1A&z}yc2mqoU*lwtv1u91@F{@zO?uY|- z+KA|TcBMGrSWEDQ%Rv@#ll8ZwojAE0beV-TnKhEc87%IXq8>Yx8PO0wg){-@+V?El zFxZ2YuTArzoZ+~9uwCq`^hr|a{nC-0@LMByP40bxJk@7QAEDLoki95QZ<@5}(^}2HG&yOE1Qywz9v(nkTX03=x2zB*O@xq+OG~Ww?D7bEm{+r583$os z9p7rBeI=(|Xt>@_nY*qy34&_gB!4GB_ex@u-VVc5gteftsoAzFgb%_)!tf7AvWUk) zilZ2Ew8b#iC$sEI2r2DiZ~oEt!9vM(h@g}D!l638WVav8lZIiqu+G+`deI$~XTSE# zR(p%66w9IQf=NA5z#P22s|SC>MO3FFx)GGQ91xj97J#JfWsRomDh*K4KQS2%H>!=a zx2S#*;HKuMQacqzPq!^9@?6XIQBcQ#0OB1tG)deiWZY#f1O2T{7uqA&&)#teW7FhC zfloYeS?b#T#bZ_9fZ)IDBK_qMr&#c_k=dT$#{@Y%+F&-QZz1P8fb z5))Zktbv~s%?GxVlmWB<+7K7LXn~-w(YBb}{W5{wT9Q`rL=Wzc9hRnPlSz}poU{4X zdVM?3GU@Yy5>m=|17Nk4ykU}klDPf`V+?zf8c&-(Y5-#AdbqG?RI)JrP(O3soDRx1v==xw%2d0`eP&52t=}=3=VdRKBASj;e6rfdn8f>b~%G0ZOa#(vZ_ub$7xYNSyZc0na~54 z?VOvSC_4=K!T8_^H0moXMV7YL_vQa<0fIoib4y%xJiHA`?ACcMOPhJdFa*gC6TSfG zCI%v;L{y%HmAf>H7N|&OLqV{FwGKGlkMa*ofb(Ptm?L~9i~KLhZQiqe_t>dW;;osj zBBI(HIL#wf#I&H!HZt(<(^Xc+uN{KJaDY`n^Y8zHmDBb+8EEz*1$o31&e;euwq||vLv^$)m0m%-jhCtEm+t96-UCnxWkdlP ztpoIJFNo>|TRXf+XotG|9>qc4qZ)_v`CQMg(`na+XLz>laD<8eq&0?Y!dYFTxZax6 zmcB=>m=8o@vmJ!LzPYHt3M91CcRv#v@=+Ivv-ultx8p8;*CAdr$8ArUB0UZ1XI{juUBN6+!)@yg8c{p83U&WIQ2#qf;mbwA6M zY$FYg>^n6wEyYGgiTpyta-XKA^d*1L>;NL-aGB?Ng({JEqVq+|V6N382v)<<=o{-;f1rAQ55LYS9fXuhWw;HSD}PzU{u9AE^077PO@Tye&s*x=?wa3 z%c&Kil_=140lXIPs+CXwq_0d#h?-2w0Q;#&2@UD#4UCru#DUMDo+{Hq>2Qg-l^qMW z^_b1LPIl8cVft+)iIVjePhd72FrX!5%`hE&fPNw~Hy11C=wNi~<#lfYfRWqAhtEkP z=YqDIQcR7Q9hWMbw1q7WX6H9 zTom@)n%tG)<$vBV$dIfa-sO`k=o3Jy zFX?o+5Z{i3nDjY_N1z5I;NyNe?|h?(2+lw)o;J^aZ^37mf!~5}iVt;eBk}x)0TMct zDTn`7R|BN(Kxj)%WcJ`NIIodJ1MiC{&9jM~fH-}i28~Z{$)oFND z-K@-7Il?BlPR6*svjNaVNrNUC`f@ciVR(1@Ww&xHsF*R8JQbB9aimeL`}xU)9I0bz zQ7%Yuz}W#~2IsQbDU&Ep{t(#QQ0qG;8Iz(dRS7F*p%w*8(ek{Upp#wJyj#=|KqF2@ z;oCUYY{g2hK+FZU3_Y>nbQ>0N2@q{fA~u@mM^ErLJs4bb7~?-8tfM1H#Y`dO!u;gp z_9<>N1?7J+*gy;}u!9v+YL8%PsvFJvwBMpqphMlx9lj7)4S5DA7m6F;pSnGIlVuNtzX^9h&aOum({{^iCI~D(a~Uq-#V%FZf;O_LpsHc&CJh|zo0#YWRLt&-|NvW1*d3#8JMT$ z?qRY;2fQcKMn|J5Z=`WSUb0|i2L!agfMOWCRkh&*dxs++D2AT8T%QKg7uBsHK=YDI zBNm*^Lrw$LP-|ZZ6Su~&L;9pF;udct^GT$UC5dZkq`;3rH0uEk=YNY04aV<|B^zL+ z$loJpdj|)PW8zjm&Q{}@W?C=yJ(aFf@$Suwi*eJdCu4wJkujE@iB^L`gThh67MHNE zg^r4PmGh$8i}=26vS~d-!Zt)fTN_)lH)p_o^K~i+B->}wGf!PYCh2n`N0xM2qHev2 zt8uSrk~t1bv=t+d0!}~nVOe#xV2}g8TfC5x zZ?hoU(nfK_$;H-vZ%uB9Yw5Spx62q-;IrBg4L2(qCNhVO2n`mEG!|Nj5d|}oU~%Gv zmM&87*|I}w?g$r?P8y8g(_@iL52{UdOM?c~emLf9&&^9g6)@HZrh@n`gQ?zfQGEd^ zk{yQ2>{UGBj7HZYb&JgCMW|2?~;H%RgRj(3@Z zJ^7E8j%z(Enoe_|qxIq802ge&IT76#ibC-}*M6?`hMAc;7}>*ziL9ck@x!@KhojY=;0sk` z<&+RVMe6dJJk|*F4?Ja%q>_;^8g&&=&pYPL)fHP;Tp5GMfL?Rf1IJ0Ae>SyvJ*BPf z@9k|v{n|;6mW5ZMc!--7Wl_O>zd3g_fz|Luu(@Z0UZDEnjHpUYZW(~e8*lONAZ%%) zCqBaVzceFr%OWp+^S#G?#BrR+-W@05XnO)ir%xl43xS}js;W}6W54F3qtAvk>l+(8 zDwpFIuhPB+w-IWvMWY9|fWAb|DEnXnZ?zO-tYvO0mup~p@{5VSZBiuxM}?hCC{+$0PR+ z_iC__{mV4Etd89%VX7CZ=}wxdl5aU;QL5f!K;jIw;7v*Tm`#BG78;eKMkezST*M5c z>t#CWIXDMFHJFuAD?T&+`Cnb%H_vZT(GnH8_CJ4>+O+lFJ0NVg?+jIG8r9-+SA1y6 z)E9JtWD0)CX$FF$Tii2kNXg%xmuot2;PnDKy|%T0glaiBlZc>Ew9Z! zXspMqG!+Pbb7de71l?n=tY_zTTAFbsMC?rvMfjq;RiRvDECWp9pdUc%^<-G!ioO<4 zjYG%WkIt6x$k5OPG~_)NMm)Bc=S;lEYfspZ*%yC*y|zi;=oULgzu2A?I2PwY25(Kt z+ok%V>dkRI9TesV6&s65x!kSG9WGiD~!z+&O$q9(q>H> zZs5MggnvHBRWX-N6N$HfDUoer!Fxj@4jmQk>@_VP+Gdf8T>@H#+=2qdzf5|WlxZfo zJIM(}JCH`?wmKIoH+N-p!_1|oer^Ti&WVV| z4+0B|(JI&F@U>G&qKcX6)FBezr17rN7Hzfga?Orj-#Biulm!yo>xR>v5jb_p-a{lBwCl-Id8ir0wfO9F*mV&hE@`ho34g}=KZ_f6gwX>ew#MBt zi|uwp8Yf5l)iDMwIx7Az1IqF#+EHJdAJ7R@e!!y8ke3M-gw~YW7OCkJVk`eBsuq~} zh#;TV%&|UZqJ%5#!QR|Xz7csZHbu)1sPZVO+1{Q|(MBMmPUlOe5-(ssY6EC&juP2^ zfz3vs<*W0X0s508WxMsl8H4=%#?j~j&F$){9b2zX(p88nx6tlLFl&*hgyh|1LPQo; zbAOB=@&)v36#x9guU|{}g{;wgo}I_5L5f#j5H>}O<%2?_>NvE77)yJSg8UXc zQn*&n^;>;mNRAVFR*B0lvBXpyGjy$@KQ26w2Tobaf2ved6{2l6H2;v=La*BFTv+>E zC~F+25L&iXyy&~x4^q}ceeYR^XN}!T_n$jZCmftF?kKVjwTF4rf(xIwpT(#gQQAMh z(>nJPu-c@-D}e;7k*4+2U$sIQYQ0CxCOKNFWS#d_7Vg_c#*}{$WmH$?>PD;n-T(Co z`z!ELWhehS?@goMbyK<9JliSho8(}yIJ2ECN|Mh-gt_*L4y-1=C`D5f@q+)6OO${^ zV|k|>8CTrEUGCCvo|Vj{#lB)!?t(eigE*2LT@7dfskZvH-x1V2nqjG`P&JK;aZT-N zDkk1a4sKdOrk9MuG?VK&)_sR@vXi1p-Mt-$;J+76K{8BiuZ zX6zL?WZJAIrOeF%LRoe7hNHsm@n}x6$FP~e{LGCwm9t-f4Xk)vciK z?LURP%ccIEH>j)^y0#FQZ6;uCT4$L<=l`=A33j*fbJ^(@0*$Qhigq1YQWWOr3#tt{ zs~R1C-gotHn4hvLY@UJ_F_}1i3qUqJORfaQh^*|yr8L_gxdFD{HGff3_f-)HNW5ky z;@KB4A)u`uIRwr(D2E*35U+##dOA)I6o`xl&y_FRD_Z&|jSAcztjtUlAv|d-wnN1v zv^=>a9Uzjs35F4^NStV4IHZB@v4`~Vzjw}rX0gUBeJIWFN}3vyt=xVBpqtT;9fOxb z{PR0H9>XwIIy43_x!OL`{w&z82Dx!<``ljsrhswOb58{%3sWhVj%O&hyqw%%yq=)H z_x{fDZuzG5Zc&<+0x91&ea1wPuk=Z+hfLe%*S1{3W*le4*#Uvmt0b3XN*@;Bb2dw2 zR5{)w3br?saw_jU>I12|Hq8EsAO=Q?N;=Fn_iWjMJv?6n->rPI!asal-M9r>;hibI z>nv3n&;9bswEyPS1a$8^i9UK{i(8>L=G2nv(W zHI=8_Hj}}-#FD?N7p8=~1o84Q{kN|Sqd0fWh7^hIL5>KcW1-i`OR#7b=&V7)en`HE zub@K#@W=|5qI<4iboVLIKjgT2I|IIZ9QIeF#u0$jjO!Nro%~?Lr0$2D1Nj~{U^qnB z=52#8;UU4kPrr0jole6iku${>*o}+uqr60%^ZAsmcZjF~O(PokNSt)r2rom#6Hj?b zrMV`n-1jq3F31f#4et6(%|-+t=99#Ddy_t12j=T(>N9@tXZH)ZxUaPb!V{wF8#!zb=I`?* ze#;$oY_oWTnrG;JC;X^*(7wpO3_F1k=XW_*J{G0g!p(-(VWi9G=lP#MCN#r*-#?fjN4 z=H+0$umXyI>!~&*sGG)J{Yf3(?6w_-YyDjL8I_TJHp2^QH*&FYU$y#*!w-4X21D=e zD3H`?V8^_&Aa9ez-D+ptt=C|0+r2!4OOFcsdY}5qkj;Ro5>dG# zX^jn=8PhFqPZe<`flRw&vCFe@%k6-UJkA8^m;|yzQ&$;6Yt-~k3dmKrm;8T*bQs9H zH(4+ZVyiEv6+E9?Spn`_x59`M@5$zDmgy7L@n?z=XR;?CyXEdwJ8cstd#$S|s>QKH-wG-T0x*C8OaS>@l#Z6NMHZ#~x&@BWYuwUoMxnebyY zPpf55QqE{JcGdAgi&3P}M`@>(N^54{)O=n zFm!X1Z~FH9?n%gz+tb(JC1RC>FOl)C2cAuJWa#&>Xjjx{9PK3CM^jX0JsVj zu~yANR(z|3X16^>aFs?3X={fWf%HATg;;#jGWu~KcP^m8B8J)9)5n2I`;;39>M^+W zh)_1~E=_d02fU;JDvkquC^t8Ezt-UJo|?Uq28{(B0Z15GpZMe4DVt-^4)_9@I;vXQ zKvwX3;yxR!ZV*b^0Su#(&(CTzX46y$D|5h*=<92|Ashm@qE0%)ga0X-bN6SxU~|g$ zB&GM-cRah#7jA9La`zSG#m188)m!7Wfj)kX&o*&5j~xCZkF|h0C3#aA;P>hMeRSd| znLBzS;#_m@hK>LUchRwM+VP0Um%{s2ub>wkN(#^q4-TL5x3a=7Ty7l#&?Y~5eaZUI zVt+P}5APt&a;0vWnFQm`?|oNCBn^olcjt4In5?|pzblqFg%c5+5lbcKrT zF6JkvK9zkVcIE*!5;zz6Yg#3!9tOP?&a}bu6eolUFrV#qwDv>W6;ipr7J5E$PwP zz-ej~73KeSj=-soMD12{XfzxiRoE1;sLIq|?6S~eE`z7CWO>;X;br!CNa|nfAePyQ zNaO{MFx$e*{HMu)douEH;gV5Zau50W+gSOEN880kpi0nbV*jp7sQ^ps&U9Ijb}0)T z9QI?ejRCACm<0IgOs=;J)B{+MbYMVc&5sp{@7zw0JQtfSkbWRO+exzg z=~QsZB{YotoTTkL?zFR(mfwsh`h=3fIN>w3Uj#q{E_1akM@<*fwnMb%(eNGciPOax(k#V&`=tU`5HjTGjKt+U^_LqBx;Ue{69t zSYAc|a#Cw}8b?X(H13N2NA~zER#y4Ufd--#$$2A{e@LC?6*0U#BTmWofMmP!ruJx_ zr^Yt!WFB!9$Znk+Qxl-|ySj%mA(okvm{8S2|$zgk6dz{{n@YrERDCkyH~ z3eag_;pNx1CyoKF2gl9gvKeo5A6T#ARZpbV?|w2Diz{%pWjCXj>koE21^}^&%r}mi zV8->MS&)s7?N7-k)F-ecyX7ulAMp=c2k8la(v8_%I8%C1G|{P9R5}hrl{q3il`QZp z-PnO}PSoqhop3}L*j(GmKz^EEqvqWp}@e z(TiO5m-%>o;b%tJgSpiUxyRHjjmoxB7fCr)O8xO5OLVia=C1H!E0PU;J@Ip>v}L)UKjy@6rehe?l=*y z3Pn~JMN~^c_7%8Cedi`Bja`$jSf>r)xC#czF|pxENSe0-LcFp$<26mBecX2LTY_LI zINH}kJQvuAfr1+5Z)$3?TqPAMhyL60Y)=<*6)yrf5`h2bZDO@n@!DKWL;7azhiO6P z&tCy}&pW-qkORo1g^qR#IRyko#=otkPS!`mPC@KzM7n9+lmygp(xW0|{fjsdMFU7^ zeAnG%h5vr(9(zro=<`k%m{59g3U4@p5kR_%(T6($nEh{kG=DTPT4-C#M7r>RkgdG* z=xbKr_iH^}1vLo%Lc_Ubui&+2xo=xExN%}aJ|x*$+1jJkkbS_T(L6Ej;fvhiR>urBc94VFDtnW}5H`B8s=@%jkm*=QVRpmfB=iloWR*L|ihi*xo8 zcTTR71?cato#~NAPJ(=Vc8=3o`PsVKahcFK(0>+-VE?IV+;-UC=Ug!lEU|4eA2~YC8sQV zoJf1?%Siel3cZ0dXiw5mmewi_S$1s5=1lkHu877yh#8prLq!Jf>+iJwkbKEaj_MZI zU13m#yWO2XZOitl>hWr_UhI;KgF zikZIN6?(nJV=?S^6x(T786uI5c{C|iR+#oZ%|uq9b^wALUEOW<-RezX%}oRXb9EoL z17S=+*qh%q)#ZOcK^qNdn|s804iz-UKa}j+8M+UUeD#p=-veZ^*#|~wSjl8vEva7E z7_K&CI8YCC)EzZ8G z)@-T0ii%oMRg~1Gs%r23dp^J8`2GPo9K`e7_jR4;`8szN*T%|vB!HH24`MT5-+U=# z{5_LaY_omjK&ew|X6w7|wnTny`Y5~%u~Ge<>=}95XKLeRpC;DA6wXvb3Agp2CWR2z zYd#=)JkK&`IQ^&q;4>VM!ghT`YGaYt{OJu{EL`DQg|BBr^c35_y4mbj2a6;T>(K~} z)#tNQPkxdeHCzKfG9I75jS?ArjULFU56qYGAvQyiI^BW<=(7i)e^y#IJYf()1>t^s zD47<>7!o=#Bym^l-<`i`6!U8g{Xf|8@GxNMstTB?M-cYSL%r(>!-uCpzsbo(peX<6^8*W}HH;`L zQ#|+oKQBPxqUs7~1MY~Ni3ajVweU7q+~0W__ssXM7wbAQfkG}!2-W+=5CkuiAP-6P zaW81-qh~7+0Wm_|yHF9X*b%1wpo9gz@|9Meek=`ZDN0?^S33D81E?fpsWb=fbu(T@ zzNu_y)k(Ih=}WhT`7ZvGV0mDtHtSNbrTaDT5OjLay|0V!Mxb&+O65%dh;O9)cCNdl zGi8fR!&kDXR~?6KP$mGZz^IAdi@K(zAy^<~lvc{wU(0O%5*eN77Iw&^&4_R5aU3at zga_Hj)r*Elnw2v|AAhJU&LtBtlcrg{xIk=wlABk6+$+iVUiJnXB0;&B4`Nh&LSv?= zJ#A8X&${9d7=v)(*<2ZOQ~&bCsyF^u>CJ3ZK-+x*>#rje5Oh^zLX;a$kNPCV)=UG~3r3p6Y5 z$YXa0=p|)KZGQQ>{`tp^GhgE*p}Llh=cP={lrLJ=ZuMza-F{o@@phc&&D#|94-+=l zR>eATLi(Nm&LX7qIPd6L&0G7E^QTM&kGy)rU-Ib9nzmS&*gpdz z$wTJm2QeG>S@K6MMCt-8RedGdfiu2Ww54m#%2uqV#y0%o?zo3@o!i(y2ORuV!XL&`rcCiW6QvJ2YGf>t!*u{KNK+Zujvto#L`(oruuN; zU5_Ku0#~p9c6ZE*fl!$+{(E1UrnZuejZNq2G~cj+4B%`&>AY3kmNd9B?C|m3`e6=W zSG|haBBON!mH^dm^=Yi8GHToN$Hm^QD^FROoa@w$jn{HNdRoAp$R4-Cy1EHVz9w%v zLrz!x>N;jB&*sfiAR=AGE-S8%IO=ZbrESBk=tQmPeHM#7i%|Kc`!ZfbuU@gqHB*~5 zZ-|(_neiI%`ekAn@h2@d*foW0j}8i(1v4{8n^NBS;cnwfK68yvMe(PZ7seK7t5>Aumj=`)8RJ(vmyK6mLL*UXACZ}?+<=EoLP1r z=$j5E@`^W*{_`HI%1X?;itX%$BW9di<=@Qf6e^_Pu^(;$b7a+#^<;fG&FSZu7z+5x zW9ei>Zk}~1zH}**5k4|F`?f=-OGsdkx8|u$fWn&F_H0~K&YU)y)Id!SFe-K{fy7n{ z80qvX4lvGQ!RtdxEQ;(&w-VLO)57Q60YQ>{j$U>RikbNPEW0E0Xw&uXwc7wW811)e zg;Szz%u?x|^m~{MDwuG`@;UtsuB)1Su$Un|)4%rL*1y&*KudLZ1^vjXdc(Xz4qN^N zB$Tw$SDWje&i|8yU9Ydh{pyZi5L#+{j!E8dz^Zb-z{KZA%_REtNN_vn_;^RD^uSYD3KmXef^Y!@Xs40iy5D3&M#T}RVaJ5g5iY?R4s_kScFta)!I`9y$NtC0 z$YC4o984`a*Rge0y?$oH;n|*w3f^MUz+Hzql8&s)!s%^~cf>D;^G>FKB72Up6HYo- zkK05-ssxYr|N4BTz(LxaNSI?pjt-!r9LwOVZR!#BMWn= zTG1)SN5y=hgqLj2Hm|q!z)&Th>SbXbw=s7G)g-QU-z@<}SVD!OM-S#knv^2TZ+!+` z-CUQ$Nz5yMOYPKXTpDq%5QWN{*Q#o+_^mWB%3`4wrmuQ z_;-h2_EwjN-dB2KYw_Ppy~61gNA^a8 zBo(yqX6xW?bsLDfjbpGO1dqVrCT_vLG`Dq3zd+n7OdgHV=KbT8G&;eK($00k@`(L; zEX}d&)>rf%9ZWh5cM%h>k!2+YuhN(B_u^endQV~})u9`eHxQD9 z=~7lSE!<`7{qiHa-%0lL4+)6p`zP^C&oig6_DY;FiFGNWBR>H9ZPw|$&!|VcMb)Q| zPHC&bdT2Fa<^iSiW6Z!$#>it;+?t2&nLO~Kov{(EsSF@$(v-F#&`2K?v=`-<{XL}q zkZ6QV8eMtkfd3J2J6aQZ{e6S(Du!OkA-eM3`ndaDc5N}`;B$U~yKK6~g0oGLlQfzL zIeGa6B?;7<*Qq;NKBI@vB@7#_wc!6HWCeQHG-maU+!SUwJaQm^_qIACw}@4Y z5yvr#gCM=gJ(o!5I`jJ>XH|i-5vCq_U~5nIb(W&tVNLIvNe_*+cLRog0I=$OEApg^ zG4gL&#NScUmS}qV1dux7vh>(fRFH2Y=b5L8JPF5rNUk2O^7jG)fn6{4lhe~pX<>p* z0YvJp0wHMh0a1QEn?lM6=ZliH{}uRqaS_%3ZwWXI!%v^I+wftr^O~BP#>Sj^*^k}t z=W)BPC;8GcabIvSa-DaNTye~u?I~|fZ%lUX7(?1O_kja^+S&I5i1@a8q_*-MYE>~m zv&Ew-pyJ@vz3%DkAn!!Gnnqy@z{&ax^Y|{jp)=tV0*!*WZNB zU}in9NX0DOF2GB$v+TmY031?Miy)p(04xCXs8=xp#rFfkMT#~;%1}>I!$vC+8uPSF zJK8q~&s^dVG}IpWEtqD4zC2X+x5}d%QIy|=@^2A-0?T;-RY-y5eJq%ALNoh4d&{aI z$^`naBCt5w-;Pv?k4|!eiaxtNBzL{O`p5>f*;cVmEiB^UY4Y+@AGdOFL1;R-tF_>j zibQujwKvXd7uSAt_yFgy4-=@-EvtW?!8kunt}TUBy&Ailga`>tD{(yYQUtbybOPC| zMQcxN(u@;SeZ(k}grBxg5G(xtf$w+zx;$x&{9rSVa~KN*kT<7O-eCt7wig`6L`iM9 zde?($e#2lfwX~aTWj}g9R002K#*H_S!T|QTeBN=bh09ray1}|e8qr%Z9MbBB`-mP; z94U~RIJ!Uc;*_@_-r!fj@c4Lbb)z*Ysc&f~2nlk_ssPpLeqrP)xIp$<+}=qe_0bK6;i_fOc0>{&N=5Y=wNjGS5XZ35-?FGqMk5`=0FN@@le5h+2$%tnQWLw$w(j}jviP>k6kGh|)V)0?0GYlcG zCkP5X(1*w`QC9TWl$?S)f+;}&C~$2WeJXEK>h=~`3!Q{96va`zyWKPkyD=WhD7J%o z55;u%_dzO+5?+?oi380Wk-#@$kClYCe;jt^;6qIs-orZ}rhZl`CCP#~m7bULjvt;2c%vEo%kuv960nP>j`w z14(?=M5>ZcGhVO)9)cEC5BwOsITyM#cg7fTVSC=yc)6Y2@#cN@e=s~fWsYrC7-&{b zAV}lgo{eRn#0yylsd|b2Mt=uwT6+K|2}YIy4fTX_&X|c3(TB+R0Cwqp{C6OXF89{T z>dqOF7Pi-hH*fH4DKAHA>CWht?UlM^C)b^*8XE(T-N(`r$};G#j)p2|$(r=Q2d;4! zYj^h2aJfA_nh7r}fG7sleW6r`IOu?2TNHw?{F>WZ{$>HmH|NAD=Q?{N>ecN>083Z} z{#dN0f#ewvunAXdUNU-d&U6G`h0a}dmA>cx)gIW<=8ys1%I_pszh9E=V*(j>4yd2; z(oEfPl>Zx0R`p)S5*HYeh^8fKiQVi9BmK}!>{;${uOFymDhZQ(Pgq*(XVky^r!aRv zLsw{Nad)?NfDT5fp~OF(1%4rK4TP4l`TdWd`uXnsn=)c;!`E(2D`@Vu2F@CYh*$Jq z9bBDvMx#AjEM*vNJ3?}`cjD$wF_|lKXOqgfS949idsB&H7J>R)%GZ@nAdw5+SBn=U zOh1|gl%F42Ud?&WH3zJp?+4u_&V>UNVQhSVfI48?tNGC2YO4<@-S7mUbh3d|y*}^O z(qu-1FZZK-%(Q~LzL4Wa62q!Uc*@_wzRpY_XF`U9!so^VYU+u#ZR_$Lx`r!4Wvl-? zZ?61pEovIF0yaM5X-Zs1axazu-{fUar%dg!JV;uR} zu}OkBXdxVyakM~mo6Q0DQO#8ip8rUfuy^vw?d@0{FunNbK#TgrZWV3e8YTp}X<^xP zsP|IR=?SaNc;-GZGU~;(btYE;Sqj0Rpid6WnfcAT`3&~ z6#_S-%HsS1T4dF|{J$L=^G~>bpGXK0pd}E>rfBc352{@zOIF*nhVh&jHPj1XK>Y)p z^0RS;oQ8yHJq7N^yWuVprQ5r9djM3Q^?GleL&)lH*VY+PahtUUmTaLm1>@C30Bse6 ze?2}8O+`CqJ8Ll`p#nJOA>l=SQyikaUN4^ZUQ5d_*O`@A&?q_~t6EG`sszRIwevi6 zD`HFh^0fwmsUTa-i~Dj&CZc6XZnv~i!|!*yfUqBdWCKtkye96g@CR`iV$lo4Bn4w* zPtx!6^EMGp&zh1UgYJV6(otzS!QAAXqW4>`W~=H+OOHFN=RmzGkUfyp+wxOKqu}>+ zDe7X1`ZH*~vNae=qJ(>(LaR7@(F`SnhF$Ir?Y?mDg(t3WsUP_hn=2|RfZt}_H9F@d z+3P5z545aYB%ix!s#0YHsL0bOk}N6QIs=ZJ3_*S@uI~*(KK5th4OMLrQ})AX7Hq(z zB@nP$%`St)f}PCe@1qdNLDvi=I@ptd9ywDh9<4)Ywx#M1a+F~9H^mDzUG(7Q6&qHc%?!t7Z+E=631N7_B^@c?E+|P z%S(hID*UJ0`}zr=3F+Z9#P9Z)QR}Vym@tEZEsy+~BNk@eh3AG87sK}HpeA45`;l{Ts>Mj(DY;c6?h~!XI9$B8@e8^cxP2-&uI*D+}T%GAsRgfVylWIJIt1$FnGa%iA);8y+k>k@8jb)?{XGYQ%C=@Agu$D zjUhFn3=nE%ML#zsfC3f#QL>Sy{||7Y9Wy4~*t`hOci}2sN+iGg`Cvnl1uMz?IKe z!qP^p{^?jR6Vi3&Q@d9Vq8TV<%I1A%O$%$Op?yOdKHdKmd9{}pxqCdd({GMC*5r=d z#ca6%jm+YJF>NuuL&xA9N$FIgd_dAjm((e*P=aGV}=LY2o+lyTNdir9dhS2T#t~!^I z%l@m=&htf?&dc4Y za`-nI%*!^6UyL{NtPCW#KJ$|tkkgD0V)mZx=q+jcRS5)$Oe%mTp>#TJE|Y;kOb`lp@$o~5Y|ce4i7N%o9<^T=RYyv|?iOf)x{=>HymJ~B zFUgSrg(l7&c$#r(PMPSpI)W0fR;tuNhB!d2DWkvJWC5rq;L5F2$0upYaKX}bxq|V> zxdwmEq?sk(-qt{x23(y*Zi_2N_*ogh*^*DVxS;V4TiDxLaIE@hN~#}dD#7{#>pb`R zwNItlF0s7XNfoi+JiU(;v7Kh32Hj{BhR2@=dDm_%pr~I5WNSRWuuy;oYH7$!#eUWf zJpk!i23q?AO`Dje&?B)DN81;y7(5-)r54IZ{~QGaFb08e0p!nmJ3)OofOX%xcp?v2 zF{3=&jsPl)&kO41)c@sZXICs0T&n)}lz!XeJRd}8Pf&T>xT`}0r67n)l$lKeWzkR! zoKL;!>)wUWB5aD4u+eq|-j_0{Q1E<0uSG{|A`Y^LJAt}RpW9QuA4U0IvlA9jlUNnO z+GPtpGZ-itg6fI|z4pP4h9sj4LETgBM=%HQd+_?*m)a6UxV?i*n^)V<_n|e~W8iP| zPid&QI|LVmorr9!oX8A+ZMKKATaR$=M?a6rnEtaF7z*VsTmm`C9nCJ`1yf%feVl9% z5z#7sa*1@Jsw}G&wSV(j?moM|!c4jo?R4_m6FSo>&$EV&ssr!#gNd5+ff@i+t_r9P zZ+VTZNshPMHFFCmIFP{H7>T0Xs{+E=nOhb2rvU<3T)}8i3&O z6Sm*)!tCD~{DQ5;8+6C>L>nP9zC$RG@sbPefe6qmbv5ijc_BWt5UUBSg|U*|Yz3S~ zyx`?d%C5|>kM?2KG$B2^QE$k4(qkN;5}fg`$c#$y^E=PG_&(>HB``Dl zMSEwb-e!5Nhph4cb$c;$E_|ix^ThJt|)DI^VDMppk{*mzT&m6vr2>Pz3OqITsPom zskczYJZW{4C=8zqoF+ieW@S0Dx0U#HXn8Xb&PlA;r#X5VyxrJ=s&U;h?Jf)sf`QA@ zAw~vEHxQ-4HVuTeYVl$fXmTHh*&637&DQgkL4zL+VJgKkBy+(W>!u*hcDOqXE=W*S zYr_Ul>`SzK)@`#HzSmaUR^{Wr)x9fyHy0g(&o*ZoJQ*1o&pPUfBJf(#9<&Z&DJEu0 zC{K~eit39Asah%=1shy$VrPo3)%hKqTTux-4ltua;lAE?r$it^wY=u9t;2+{g$@v z9{r|CeU-1{=NAwH;6f_IJI)SI$^}udtzE0%v5VRMrD7)BSuOYPN1jX+aqq2l2OTXQ z8{?P+_FFrT&Wfzgy|4E3W@N3hb91luO*=yNTt^?*JmDrR{ePT7n=l<}XJ_Z3$3>9z z*6HQ){+kJQruYi{V1@D6VTLck4B0e!Tegb{r7-3Xm*B;{5FONiIZ|1_)p527aQqve z@%a#M7X58MnroZ@yzM#47ev4MOdV&&xgaBtv%lksmNG9v8n(yh$@fo=i#pFQ1Lq>Q zMlV{AikHm|>0qGlBxwt8iQ~AC)(y+`+spbW|iu})o@Tjge0E16zOL;S#MDLH4%^Y8GUlmmBjbzy@O(lMNO_!3r3X}3TJOFtP%IZBrVAVhUAWJ1)1|=-+8cf z6Nkv%l~==X?E{ips>ujv^IJ#&LV;cTTq_#qCarbc8oVc{`UA>`-=8%iB0)UGG5lH> zdQ(Y4kZ=9J7BQ^P-tXZSkEEw54r%c>gaMXW$5z9Eyx=d6EM|flsDF~=6oStA%P?ghzPtg zcwvvyZep;YA`x+*Sohzr>`xQ0-qFGHf+mI0ukgxa;ao>I4{?2fi36_78%0YtR$*y!!0`V2i5|9SnIM^QlfD&0bk zg)tqF?a#&)N$SG|xV4bk1_U#~SoEUQV|GV+ImROp`1d@Do~DEvdZY5DmhmAr7oy1h zdEkcMYdjk7w+CpY6?L#$9!N7Q(LH~l<>n+==|*7Uf~ zl?=m!emwFd86lr8wG-_j3&!@ixO<5GxtjmVB*;oHh-Y?oG*$;(yPqGla%%7%-Y=^u z`KZ98J{b^f^DmU15pL8I4{Lk$t%Cm1zQ^~M&)P467xK)Fgm`fD6vL6qZEcV$D3rT? zLYEX+H8CxyR)U|uN5l^7{W>$7y!Y!>_?A5mETHI%qwt^jGl5r^RyO<0`h-*!pz)rw z1pH}uPg3AtrBH_8TTm(9`sl91^r|Ke_Y>ipD)4&!!!pPxp#7J7r}{}TClk)WPt1p5 zh72oF>S($ai?ssbYq9bAh~g;O5hwE`Li+>U^=in9B2TH_|s ztdJYmGeT=>nW^H0J44S7z0WnTb^<%ESUdMZJH@e|88|QoI$~-|-C>eWkV#+^)B#bf zo~>)XmegP_rId1ssh8#v1*T+FrrS)tXCAt#1yFI99Oz)O9L{xe1!48m1_OPVsd{!y z*pnw2=*yXMX22N`Gcrynv#O2-;1vP#*K1Py$j7OD)a!k*z^zB10nk|n?-v((8kLUcV`{=y{w$OWcmuGMQG>$J10v#d@A>UP1#O}}$ZY>EsKyVu z^kl-T#dLAoi1U44@6h)UR=k9u!~sH>Kvjft%HCVXfK(+ioy@CikxmQKb&v0|JDCIh zsh*R@a@2iU5MiB5z{+Qv41FCA6Hq+nAw)fJm-Qu!XRPM2o`jbGcjCsbP)4oW(rg}g z7XB^nL!MGMy+#m5UHRXjKx`PK&eD$Th<{Z;m1WfdAYPqGJ211nE(F)gnsN4GO|q)| zxnQr*2{2}TBRV(}baJ#*83-*#^k_dqG9!OzVmL#=#>hOKI^!d<@jI>-G=c3VgW-iQ+iAO6S zhTC?`WuE3SI;>Y$;r~FQ;U}NoY_S5ug&`Dd1EmHbtRU9e)B?5CPK>hCx^o zXamITbYxxZjJg5F`5CzD=cEN=?)Hah+7i&h?7k-n)DJTm4mHKgA+<$D13b-d;taVt zVNGst`yJ_LDB&x^9E}ktTbH}y!1M0Edg$2|oB+rXVLVW&0pX0>^6$8#>!pJlXDVao z@tZnQ`7spwe$%?M?WL$WV@Xd^_w(90PknfAh7CvdS!FUnM|$LP{B}>{fi0H>RKiLN zKJ)55RQ0wxTwS>Rx%DB<=w&&G!+z*pyf8ENkDlX0VL_avogn6m#rklAxp!8BXDEiL zTXOKt05YB!iqryicyb(1DcpXl^ZBb_bSOrm00|ms-kXr+D^_gr{Slbsuk?IA#|0O< z+G4}aDfV4&oPGtBfKa7`JBg~+E(O>>cj&fD;Of~#gUyU^lD8amusm3698sQ?uM6wX z7N!L+Py-W~mf}FM8TfHW^h*uofR=jUYmj>8XFMO4CEDJUP~w>VU{jzczHr%igvBZXxdorc9& za~C~Wc-7#&uBO{OSgiy~SmWf}&$^e|6yx{zji1J|ElvK~e9lTOrBRcV5WD|(J3|%;B1r_1~i|~_HZVJ4*;dL4lqVy1LZ^=iBW! zX0O9?Vhkp&8t6cSqBXj8Z7HpW1j-Ie%*|2JeV*K#e9rM@N+XTvf{sw|E9xO;m21>OOY=Hr3TCl z(~Qj(LyiT@9s!8L;Og3O=Z)~TfV0EA%c;h_T6(Chn2hy$)7Q79z(ND)X0QP*4979D z74-Fq2Xuz7=E$@6SZLkqI5{kmp@k95FdKgLa<aN1S|U^elrtUS z>p6{cHZ`W|xw?YmqoW1O|A;x3E$jMvFJtFX^ADcxMKc#?-indFk8xFv z_e$=H4kXQn%$F=_YsG`-_z4k zO=XL!>Q4wziOxW8Sj5@yVM|R-Mc7H@qNoXjhc`Cg22o zZUE_Zl!t2?CyZKTxyWhIB7@1dt_}M8`T}^{1mWk7N&Z9{ZUiq;p_`4x$~nQ0Kq;xzO!vX8!aBnG~z6wt% zb`m7-Pws!O{N8EaRll-=T>ID9?ylMPfa4SH&vEZyO&pIo^J>V2Tn@$!Qo)3U3y zMKD6gBtjkKro*qniKJ8dk^$Dh?Usu?(;KKQEY}bj3@?lqD7%&4OW290ychm<68boAEMEHo|(YmDEygbX*{{;w+HaBW3KS`tB zD~~V6|lkWoJ(B~F;A8rcMf|0X7 z8$7jx5?lS|avK#<3xMiZJ z7SF>;TZ)ySQdRGd`<%%O<%>2#iIrwB7iJhROAzs|&Glp-g4D4ROSp&L4r=@`<}oqX zY&1&v4Q~;>)Ik2@0>`qjZP*Rt8y_TNNIX6xF;};@UsCABPLpvNn*}_eA5fydt@9;r z(S7^$XCUr!Uu?_uU(Wb{C~)LkVO0n>BJZ_jRWiK;!PqIO8`+Hf857u@Vw z3E%jpl$nE0AnyXhK0qW=$XM+q_5~+tanJ(Ak*v~Ee6K6zh&k%bK*#as>Se{%V&{3% z)w%L@V!@wDQ$1}PlNDjpRiP29c$F4u1Q0q)}V?CNqU>At08v+Yj*76Tb!D_{eC4iXYLHcv!1+0G=(EetQ zr0u2;TFM8?2ZWk_Otj0(bu^n*HURND&uxT;j)eN%d@PFtmN|P@Q9Qw+bq0-VvIGA> zRU7+*Q*M5gQ@VcyJCL`svMK)KJ=+Fs$`TJ+pr*Y^9M@OxAU_K4PCY(cT#@>g->E3a z@QOLjfzD#xx%Kjec;rVBe{EU@2DOh%wRBto)4$pyx5Oj&M=iI)HpeUaP`IQz0IhrP zR%T066VTUngLu;Ft$Yf6j`*ZP3oLZJ5jgvO1vQg!q*lz`F$Ce*kHmb`-ob3LjM!nP2iV+$4dwDqA zv$t0kd9`(6-Su@xjywawpLbV9!y;T$4(>Gz&!0)uOI6D>|?&B`d|+9?pFmD5CQ$wJ^K~b2gxLm zb*-4u2&>+WcfjcQ*ciNeqrO`(H8GN>%qT06Y*H~Egf0OauC0!}2X~YHSYz?#?>^Fy zP?@XQ{#({_N3uxPAG8H+N1s*GoM`XN0S;ud5|{^&qGH^m#-{p!UQLCHca-% zZMs;16A&bsnGaoXjJr-%tRMfva1H%O-ug{u;=2t?PmV9;b*w^Hi^-RjZb|vOe+Y|0 z!0t2b^-ZernFJ7#_90Ul76c16w9{!%p0-&3v^T1dht`6YV9%6ntbw^~V*OyjK`C#< zzEeD5KrW{G#NrPDXo<|XW?*pUVWaU?2azA9s*1BC7p;hr<7*N1Ghl2pq{s0Qh`iw2 zU0rXT+|{KuN9im%7o^YF8f2e?kO2(`EyMs7k^lidIr)DxR!I9r}@JG&kdmQ z2~$ii{Hct4MTOCsTm$pAQDc2TOt)?f-QvNM6*%A!MFtrJd^95z^WlF~2hT}bm~rXn z4o9DO3Tt9iIU9zwam(QAFo#U!lJbdu=i!(wH&Wp>BMRjaf-f8mPk6?I^Yp5hY zV{yPo=RJJG`kB%JD~v&-G6A!9*JBy$;2W>v{JmU_>8HFOa3q3Hr+n7+gF93uD1Jxv z1l}N{YLK&&C)bYIy$O+>RH17xwGY3;x>O&DCUk``sG@=>In%(r8YE8=AbU2fg?a+R zBzY{YKbwka%pQfrpZI(%^UqYxZ06DoM3?XbH~}ih8eHmt(ls(7040G6T>1b;fR{Ib z^i>gX@WK(W_-|db?3id;^$ZCOS^?OX6yBeHU+`f#5X%6xfW8Uv1=;I(XbL~XV)0gA zq`yRgQ_Vkr!G2>S$#KJ3)aBlC;aq5nb~vS&z5iL?PY)1)`Q=9DoW@_Cc$p02Cl|Pr*Pkj1d0}>-@wvv(CG;nOjqNNS5%4 zh3`i3y|(%b?pp66B4F!d$4ssdkGq>2-~8wMO>+9aCKF@u8!I0Vddx35A#8%dr!onV z!J4pxvWTm^D}Nk|Hjv3dBuI5ltiRd3mo6!=t%41D_(eF8wg8I&pvz0)WBb!TA*m_6 zBmZ%Sk^au^&z220+_G}70{+OkMo1%^?1Ij~&N~RQveDX`z8lMIvZ9WJ$v@N<+56S} zlavA;m8MbyE!0g7{fP(&=$FkL)-W~>aS=}+EOiSb3ue5Ia8P68n_wSnG#5151y<`G z(MQJSe`klB_ZrsOFtjCmiT+EKA_J*o6(@_oS9$?kt8BsOyCErcL>lh)kn<7%iQ7r6 zODq}K^#n2_*HG4DCQfYGN-ZCuE9S7^PXxh*RUM{fI{4PN zezr2(U#P~$8qiGcn68iSE^q{vs4Su6XWFkeLm@)AU+t}pv%n;E5|+Rs4}j&w(x)>9 z2P-_sY&;t>`U5=EvVQOEEj2U-dd+QwhCf--7^`1$hd9(uw5oifB?_(cI`Lv%tJsW< z+h=}tMz)IXw#)*I)oiKrD&^yL8LnRn5hr1-GZ2*6Z{9wF)FeLQAD01l`O&uF7$Tz4* z-Zn{abNlc!>%5^GpSv3QWQ~5QZ$ez*@>#gj*jAA_2z;lw#1A~+C`jsKh zkWfom*U%<5_YLvCY8&lb|A{IqQc-HO@8pqpMK5YIvxYM;bLGtd5 z?6A5Yd@8AiWdgR~NU$EP; z?!bC--9~}c0Y?fL`;_$PyDTf>AVW=*OF4L_FLHO|z+H;%O%eKHS3G>r74h*xP`#{p zpO`gkzFK)eY=)%jcZIN`zfB)b5Hdh36UV7bd#vJmxJ2u@$n6D9i*@Lj>s?6=7hpOA zYa^(1z?dIEw$RgXdD4))U+((Z&eK+P__Ox>y4lvxa;!*R+(g#+%Iu9$U%To%kO?_Yd$xO8R z)de|!{f)6zp37$#COr+*`y)M%v7>3ZWWEHLyC)FlntsY-D~u8*KqyeJzUBBz1l8VD zC%3@Qe9o8;HpBxm*>#wJ{in0kIZ|&8*&_7`7D25hgnVy*jTR!}^XR|&L7TW5EL$Y; zdIb?AR1~)0+8N=8MHiNr=Xn0IQ3~G8>(^RueTg848S{8hlOudWC4OF~%c21y z3%^D#egR)`jyBaD>JmtCOJG2ql^DDS34*W`P_p3K8oL-I9PGXVv*NCISp>mVC`7wo z6OXR7R`^CZi^!ySc=UFBGor26Q)ASo?ske$YRL&pM7%u z`ugT0Evr`xAm5(Y+q3QqH;x)sO4?I66F%IwpZbn`&BqCd1qKk6c(oYHXBv#-GxtoL zesgRE{a)$~4n8Y*RZ%{aF22>i#V~hr=}qPv`Ps-jt^R4koFQ44a ztWIY=+MHEns1o#_Zr8jylbIky5EyneRVUS5V%R<$#y?&w>>)XYUj_n)U2wpn`@ z<52*o*)KvcF~ImC-23L(#%_V}G->;Eoso=w;$4F~m5}mDBKPXtxgWf2Z_U-pIoelD zk8B^6xdJrZ{Pb$n9V5p&+NjWdqN)fmz87A0%^}-h?7yX)$g2xRq14f{3P#ql|FIZ* z;{XuG`7$rJe*La4DM^zLJql2j8(@1d@eIU$JPCV=5Zh}L9n{f6f}X)I8yY4g<9mZ@s{_f&AlImK zOOJD)Q3r`jOJ9s0;A$0%&}tyhnokWjS-2NVQ(*{8GO~=X32Q&2w-`Q!ZV4(u)U zSK>1pO#;H@284>>m?8Gbqi|#6{!K-$WKE~c1VbDG0!&0Yv|Nf~v^&L>xQ;D`Q0yF;5S76Cme2Hty!ga*UFA%GLo~Ocu+bg|jw9p2LHR%r7Cr3ZVT7WhsU5?# zRd9$dxCE*RN;MLQO{H%$%XOg%7!w^0MrcI;13BeL778nDaPma%q;{UJ>Cdq!T3%ie z|IZ7Me(hJM|Lz3qoUl}zh0>&_ROZW1F9XKQmR`{MB2+-+(ecOSYuD(_(@wx|ON|Eh z2dbr8Ib?tXVA_7)PHNDz1IQuPJ$rp^xRzqbHo^q^EFQc8X7FR z=>${z0TbwK$a>ZC)WcB*{31V{7Q?5LFeR?!F)3aqVR)T@ll<-12Jbh8s4U6Jcy}H| z{oF2&0izm}>x=QaHPjlC?GM;P1-}cq!D+zttm{`@lfSw3XLXL@?SL5rLrD|Bg+u7j z0!IiiOMv@8*?ZdPYh+&_7-UOFGMQa8P*=(XdRAXLDgU2Fh6GtYBkcIg-EK0~nFcam zoHiMPnhfEXeVw?+%aYBEj5ATx2u^d#PJ|XsXn5qf)2gb$PK&!F2<(`oM)EL|m&4G( zL1u^L9DTC8gZ>`3Sse@%_!rzj3;+J#U-V&2n6kcTib^9|p0{%b_$C|kJ5lO8gs-*mYSq<{%JY5VQhEwqc z%HEj@Zk_WZ2(I{DPnngo5WKC`A@A&*q7MFa&sZWA8Oqc|GV&~y;e}GhbjXLV0I~Ix z7l&%_`2d|~pS`DDtu=r(c}2T^G6RO3<&(lUIHDfjS;j3mpv|)&cic=z9k-6zWxz!tb zghQceBhOD?ACMIC{t)mcSl_BkDHO2~+_ngax*I3~+DCc)2kJIAAq5S6o`;Rg`)=Y0_@$;x5JEO0$3`^q#f$TDi>hUL3@Publ3tP4j%L zTrquqW2!g&2)(C*gulDXd@0$ZaR#Xcj0iATWb9K(qt_<0fX+@#JV)HVN0RVETZb*! z=$_XcgumWkOfkW71#^7 zi@tUFt?VA+&DeQ8j_WoQlTEYr`VQsCeMF4}!ziM1xyH(uCK6g6zUZJ`xcxLuhcE7} zjG&))zLfs!4`oZrq2s`UJ=m@iZ!`|r?-f`{vvuZJlc(3vZjh`NFLS9JW^2I!9Bnd` zj}rN7b^)GO;j(aP3ynh@w%LkxAK;}7ZuN)d-JcHJ1l0e|ILT2ouHL>oe0w<|!%33u zAgcFuaHrj~eEJ-#96-+&}g9QBQ2u<3upLqcFj4$?nguEg#5=ZD;@VVF0y~*pq?*xa6*t~Ij;>LRMI|cF465*5v(b0zYPvDq>9gjnRqicKbu2I;0@a< zIs?MaKFx*rd3^mC&sfg~c~)HfhL%d4U)8_kn%m<^ecCw)QLJCRbR||whwTPHXoq(* zqMVaafKD0^{=4Se(h0+`P)bI1NDpV))i*0>e`I9x!Z8SqE8Ys43^tr=wp+ZhfdNBd z{Srv58P+d(0;oRTK?E|;ipL^^kc%&^b>`iumaPb=hRuuzrl~n-lK(LWE3XAO$MyO0 zKuXEsf9w%}v{zwe$)W!jX(#utz~wiWqB-?j-KxxXLbH>42i3lzr(gV2FZHP; zN#IqsaV*bI+9i52H{{&6m71hVSEwoFsFDVO2wyjr6$9W7^9NO1LGyv#Bm(tT_m#dR zkeME~RRp3y_!naBI7|Pt-px|Nk7f9BP?!#X()p=-!@9agi7g054+Bq}WklG!@1T0fbhTH~08X8;Wjbr~G&otF=8V{Ua!K7ehVAbtf!}0FP`U zIAigq5Y6&qC{^-;(u(E>$s?tUB_8GDRVIUBAP?_X$5Y9H+)zd|2vpkrlLuLTXZir7 zj)o^o+?0pL*-ckyA%+u}flxaazd#@y9cCF66x5zVaqB5nvW}};?G!BWGEj)MJdBv)K!;9WC)-*~qpuQQTc$xpv%b+7izI*&y6M&S0{S7E^o0`6I5!+# z+b=p=^Mh>=kfqeJQHBTUXzd^K)Q*MEe+jxNu+_Q0(A_DSwXxUWxzQku27*{ErikoW zSHGt!-;i`li$gfWD@(VBw@bX{c*Su+z**;P=3;GcAT(~@h0RqBKmGb57S$U;Zr*IU zin~Z!JXuI(9WU7_ZFsfO%vf+Rf6#M~hdfM8b)DR2t*)-H5>rpstG`KT+B{ynKZsq8 z^TKE*Z+NdoJ^0l#YhhfZd~rOz=tp!m2=2V;)b-HDAha5gc`?>y=WU1LkPkbJe5t!8 zE4F6qJ~SpVs&xQb#n1CAx;%6`zdAB)U9@$C8Bl?CA?*tiV&0%9&fbO{kA@($C0Xms z!;`GlhCzN|l}(VA%^R ztb|;`9h3^W*Dw}uC{5iUpPG2TSl$#aN8dtXLt3m<=-(-(f*|i`ykLSgwVeE%yv3@66rroPXU@T~)AC zwRI1~8y6~BaM^U^LFC1G9>vR|?t>l@wG%s^7K9I6&^kc_r9wYhK3rP3Nolv6g1Ezc zX;5_3pI9bCvKfMl|8uUlW$a6ca=nU{pW35Ht_c7&ICq5Zq&gh?Ty)0xhlLFbE2t?P z|CsI-y;~#8Dxv6g=PB!)ck?_6iXdV?x`IC`ra}^-(%#h(&uok^I0;_tW10PB|Msf9 z3X40wBJXF8j_P}Mf}niZw{_Kf;Zs50!0v1KJ$&bICd-%`P-YIVBr)<-Jl4RyLF4ViQJ&l!N+t#XDLiZ7{eR zQZ6FSH`~4aV;fX&{;f?d0*f>C^0u%5Hruc7VNDe4uU>f(`#w++V0TV#-*saflz*R$ z#KQg2BA9%W+&cmg=CHyJw@U)VuyOzpB$y1-XB&X>fx3f6evj3|G07&lr;>u@cx@uq zpx-UlrYSp<^bStlX&hjoFMDK1EGEQvz zSx+on9bPj{koN{oHfnmlz9(0;*aX3RAU?2;mw^QOgEiUvCH69sR2uQI1Z`-EMz0S&RMs1;I-%@fdmpf%a3p zgMb9VNae$rG)r(PJkqxihGr{<&>8`byDWY&qd#m0(3PeSjq5JTc?PLy=VSx~LWx_7 zMI;3eBL~Db&%g5u=^Zi7htj%Kwv)e0I4!+NYWVZ$SVfeJb0jJ=#i)G3ArGBW5CAIIG7=Xuuh6S7=@j|9aqM z^)0$rp2=?7(xTZ`jJ(5#bSm6xMuU*Ae7AsKYEASP(mGIKq#$SuR%dT zBJY9ta3G}BZ9ru4&wa0W=E0UI>0IqK(hg45#Z!Lt{{CNInPBh2NAEYtzQUGez z$;F!Qr+hv2=a=E-WG8;9r=yXw&tKaoK|z$TIEXWj8g`Xxm&oA-O~f@;c=M=){}GKm zU+!nWhx=#Q+&KmezFHsV&$kD;hqXV*`*G-zPHW@S0%0oO+nzv?^RIqxxj87GMX8BU zC`ccIKWPx|nz9y@UjfctOU?d`mW%E2Xp&cXLAJGQp+V1u&&9m6-~K=6W}B@-l^9j_ zXT*e+(v{7QYVIZ#lzMhSGy1Y8mw5HJG=ly`H$4n zmg>$r0eH3jASgk&cX!{a{DZiIoxG1#wEzf-_6-jwU9V0HfLR!l0ebqq6~UF)A>3LL zg?MNzquQ~SNOScxVzzZLynt3#YzR^cDU}U3_o=RPZvff;IsP+K&FVerF-5acS-QS` z>LPm&Y7_bI=lW>%wehuyZAySkwoil^$c@UxnMnNUnzNV#h!xfxVmWg&yP@4xR@Ik5 z%*dLm`81A7d~tYd$@|5Q_FTiY;o+ae+DpiDj;+Y%%_ZV|GLB=B~YdqicH8>LlhLk=szl8CgeAQ!BH3W5{e-XY> zGh7x6O@sg$oLMeol+Yk=AX?DW4U3>xuRop$#X@F)kI1g_iuG9`$;`+d(pyCm2Lmmjt6_ySHIFK_wM|KLlIz6B-X^8+!0V-xK{b)8kW4QBx~IpBF^ zW#Q+J&HWCp4X$KV`8WN(_z)no%lSjO?}9T3H&wm%4E4e^9hQ!agT!UvB!^$i%(8RE z%h^1FONu~r%zSmso4ER+&h(SQ*@)lyD4W40kv^O=b7?Dy-Mc9Tx%!+lO`rIx6%dM- zAK$SiNC9VAa~GP4nJ=h8|xraIMj+Gk2Nmdsb^wwhKQ2 z2!wJ6*OU>OH4GzOm8(9u!Pyiwpv0-;OMmof{R&Od-n(!H#Yd0Cjg>;LOfjWnZc*oqRyI=yElFM|(gy`^ENi zR%PV5olO|!+&{GfvVXiy#C+qL`9C#K2Vy?ZD7Mv?`i*Jj8%3SFU64uu{9^E|$(r~n~?3j9`>XpC8 zQR)j$KNJlF?{CF-rVrmv8Wc#tec;#nN#5#ZL}p3~9N_WxnlOi zU1+Gv2a9O*Wa~1HVw^IrIRs)1xW(g}aJ6iDg}#nG}RY=2)H9Gr5qOCKFvUk6&vbe5rzt*+qa zZ=_mw;~zj-Hq!WeZFF=fqsY>N5BsS@MWJA!C#uBz;&5W6W!exkYtO?Yj?kibxmoux zqVaWbDWE|a%>k64;-rl$uKulFF{giwqtADepv7_vq0mw_H8mAgYvr)h(DvCchGdX> zvdCKb$3Kg`z1H<ThuLxEJ$;I2js^X4ilxEBqu zH!(UOSo?U-HMK*5m0!_VdfJY-{mq#DJ{s=Wg;z(Bvh1vO_tHkpLau{jf`Ux5+XGs* z6#E4F9{5GhwuDEbH=Q1iogG9l;NJCdiL{%L-fYp$$lLX`EnH#JWxoo@CCzX~tV3bh=K4~|(T04ZN>_W2sg1fMq?@gY{*JN` zmRTE?&vA`U|JJ{J7*2sqmLrb(;~%b=>FZlx4~8IJT>IKz;>vxotIM|r=kaDxjb(OJ zKZ)Jz8UCuqrxpOUYF%fwkn~=s*0Q?ATZ3Nvxf4AwfXcV&xJ z_bO0?0a7qJio?}OpsLIR$vMm4T2) zesAYw3@bre(A28E&WaO<^P>ySF1CzAtA+3#7nFj+i;r$haegV>VnUM>9`vx!6-9=E zIvWt@LU%lBLs_FuGj6nQ#9Q?&u_EAdhF`x^YE z|3ija`y+)h*Z{&;d$Ix0QSri^-;g*kCp@Q%U=S1(h&+BnLxZH;Dn(VS=RqlrD9qqj z(Fn+65lpU$K2>r0Cof;714jmRvTdwmOd;}Te*DB_w+Ix5{o4#1p)P`gv|xijyBYyX z`fi1>2i3r*Ag&a3eb4YgxF*~gN2^Wy61zm(kN;e-0GRb^-jMjP9rjX$V_-9W)PA_ zu|CQAdTicF3BQw~<|V?;>UGJQYqgT>gUh*Hnr)o|Yi`X7+_}h?C^^hd?!8C1^1x7TFQoPJg`9 z6F?@0cmL`5BSEJiFiO9ufam15m+h+`e~w^e{P6M$eD);K7|B&Wu4nn#*gSl#=U3K~ z-BKj4?-PS7LqeOkDf)DGJtPt@eSTA*NnHAVU3lhn@`O?2iKa>) zIh?3QHc;6GDguZ`63b`JOZz5{VLy4(CK#$~98^CHEbc9w1S%-yh_^$R>hvF5o54JQFoqg-^s!c`}ze=ES zRDubLS9G#m>R#g2<6_7m(PW3y)RXYfC9n+rIIb-1)&NW}yF&*-GfmJiVN#0u`IRsD47XT}v ztjg_)ffgqIgb z#*y+31zMgvW1~ujfFtnX-ZCyttu;IZl2KQ(hDTG^TK-57fMKn}e->HQ9NVtw3wv{K zDWmZW*8J}+vp_}DEoDPn=+ip)^Yno#jF*nW#rmzyCY-5ys$w(mXnQ%Wb>Vzz!1&G< zvKaU?XG;S~;$rsl9K493)YAKnoqj8pI4;5c?*qmzIwPVqpeot)p%wRW`#`%DN+@q< zo2`vkcaWtQ*wOreq}y2Q(B1K3>_@%Ww3StT(`>U{zyZk+yK{1|<#zOQcru4aIa0YW zJQsA-l|lK*`O1uU%coC5^j8o z4p>`#l;vOKTTEpmQh0}+T*oD-EC3XCiBk<1hn!yXy{<MMX_EB99q1*pJM_ONWh z0G0xDGCgf=x4x?M1BxzfqCyDaOHhGcw6x0o7m357w{G1nTx$;ij7GK`$xf#Ru$;Sb z$*|n9iU}HcX%Is!zG=&qpzz=K%oO}iVfx0iStmG?w(9F&mV0i}&m{(xV1~d<(9;wZfZ?_*&zhKf%4leuVZ>Q1Va`r2p`}roQ=k&-~wi z?TpK5!s@#LygE1yMN)(m@5!1jPg8p3XV(&yLYLy$xl@KG7LY%;SI>~;5 zuGxCSY?|79!*dh#+)Wp%PgbgOh}O3RJy4TMwj2Zu-QWgv1<#0Fjr>{Wct$x5Q3by!$kE z=MWI?PZ`||!`z=6%yaers$Qe?tfie%Qeuwu=jRwkO*nO65J+%2c9j|&kle^PDO=|S8y45Cw3~L1rTFGm4!qGo(8*j-)ZAV- z2?g{aI$%J^e>IMw;Y@Q`DrzL2nSvV}OJBD4#7I82Ydk2GexXx?HN7774FpbVHVI#Q zvZ`|DQ{~HTr{{UO^Z1vU*-X9icfV@>(&{ct<7BX+{IrfW@R5n+jOPgqtqx?lBC|9g zB>9{8=F=?Mk0AdM#W3wzL^lE|qSM7WB`>o5fO`r^d|F6K)P|^y5;dWYIJQcFMj;|7 zObgytwR&I1Pi$f>LN0lIifP+zAYCtiW(F_qo6k+xN$KJFl@$G&aH;IQHO|kJS)>`0 z`+(Ce)3z1cF>dA4FaN%o+bs&aRLV%0?cHlVF9k3P#+Xj8 zywFav5GCfb&^|9c*4neT3ET?NXB&%OYvih@s=Pzy=2MpB^9;+NcGc>L(dso9Wm$sn zQy7{!?o(q4U>w%AhuL&K&c3m&bBNj5B#VoYQ!xg)J8qqJXgFN6dac2e1I>o{eEh0O zAXfuY?JbjM#6JY4z?_7)Mjr1DN2o>d=pf*`b-f`6wyiO!4JOMx z!^=_cL91rmJU1JZJMY%1p8hSq0z*VzG}GXhjCrD(?CpAjw}PM2ikOuMKbSkO74NyJ z)nnsr-)*zsU0p?hC&4^l?C)>RZH(z32(GM!cb^?asBN4WRdX`|WiC(jVINI~>d~(F z;@LLMR_{T`1u-TvIPyU=8fFqV*qk@WAJE-w^W1(9p|g=6A|@k10TFSEql3q-qRosD zydc^Uf02Oa&#YT=dB%h$4L&H3riha9ebCe{1YGD}+v|;vy2-(3BS7C_H*FCV6;=AK z$||g|{6@F%Wnx%3GlP@>`5QM!8J(I!ZW>$NL7-^`JB@n*>c>>Im0q86A?|Y|BPNp^ zmd%Rxtqru8YCNKk{d7=EQfwBa*{a=vFyV#)JjC@rfYaaj#r&)En18cDhs;*@lEJOV z$Od5Cm7?qp53#e#7SPG1V*@gII};=>4zq@;_gMOvTf4{q>Y46Kz^i8)SB}=VIs0N! zW|pnq8~HmVk9h@mC?#YQ!&~;z=UY!20*MQFu8D1jV&8-SkIMMsmyiw+m$=~btv7`1 zp*qG-hx~vhK%Su%sI)}-!B;6^)JR9jj%b#(Tdkc>%YRrvycsAI;xt0FheU&#K3h!M z+tfAp)cVffwJYQAfx_ z9H^jwL|VVNY_rYLP`rNvjRVm$hqEJ7AXl|~ukUF?E&;3hzBVXjGJpq#YQdMf4XMj| zp2IO%L^w}(l1Gsp3l#)**Q?vOQ2#&Vf}aLkG0CPpE%w#sH6}>`r=Ss>PJ$#Yl0tAb zOUM|&rN`4SzOd7#Z3lwL{s17egXoi1l$O~@#cajx@YcCUz>w+nkdo8nqXmw`+bh3| zR}sZGh+%@6D{UJmg=VsU)02p`1N8%e3AD16(>SVp^J5TME#?VA;3nN7iQcj= z-#Q)l7Af0uFwsD>?bTw5ni;djwyUh!#>C2L4%eUry&=%lC+_edT>$RC_lqe(YL$5>hAfJt zysaQBWVhyy^pQ8!3F)_NK!HiLvLx9bQuL+V(H*?fp(AHMO7xdH1{uU>G^( zcIQ^@Y?*vDUu$#nZftzL?{pGxEhD&xM>EuwI`EtjHN;!mvAjJSX>F@G=LlL6O+td#qs#X8t{EP z|2GuF@U&ojWHVSvOkm}ffAq@lh35ZYG!Mqcj+z|HC`?HY zQ-@zlhVsLot;s9Q7X(1mMFfPHky^Ch^M`&G1c;OcjSIE`nitGR&n%sU_4DVhGZLFx zkee)Y*iU7gS0<}8&4HkW>xQ_bSYp$+u?Erk`p;uhuX&%DZvPR%A>1htEC_iFM8wds%y1@-83zM|1k2VAWrxYSW@~&OD8}cwBEzu zue`p_5C@ePz`?NUiwF9i07vBS+SCgatYnb>K8ENs52T8(tKF-uCytND>=if+r{bW} z+&QXWUw&`#EVzRGD|#b8z$$M{Rh-iq`5MCRM^6B@6|8oVQXsL;aH^4x}_{stngBvMe8XcS3N zL<)mD5V3ux0on0)sSP4w;uKb@$4G45cSS$jy@2L_hJYX-Ei^P1Ajo%z*Z{uGt^@bV z%B*4jga0cP&LQV-j=Y@ zr$w-r6d|x!sYL5o3TTN?Ok~FL(bAgR5L>-vfB0C_(L$G)dRhv=vUy*B)*IM5Fq@tWg zHhTu$P7bQrIQhxPbka1aV!`%^@pUm?QVf7p65pmsWtC+DMx;X_+kxT0&I$ZyB|;5Y~at7 z|Gpfc`^+vkJTiIc_=cY64yNtV%^&&PmQ)N7w^(zkYjQP@7&Pet{?PwFj@bf5%c8swRgg*}<8$PWqp2n56bChsocCM?Ok2Pj*^N z%7{4ZVql#39*%)_a~29E-OLp^cD|c#Zh%mSPZaL}am>hO9asb7@-5K-tmB6tN~?pD zI^1sKjBBev!eN^V_`T=+tN)0|3nzf6zre^`?DLxz<<*r5_w)sM-|tW~wy*f9Bi!S+ zJKZCjm7bk~tLjg~1>$_<#wMIeAw>A3^n9o^-zS$N56Qwq$7i1x zhM?bL#s7Sf|yu!x)RA~6# zuV+x48L_cOE>U8g>)W5%TaHt^3rcb7^oi)ujlguM&BqMk@*q2=xU!G1zRoJo7bM-^ z`K6pr`oVL*wj0TiTgl0Erq5qCZ#H!VknN{8)(>~LCv&RDe*AYGY&x7($D9@TTsM%eT7&ZIjehXxfz z9_Q1ZlX80Ye-2l=lgVqsbnoc;>MX6$E_#~RC;;wd|49|y!kTuAjh!j|2yX2X$1__I z0S_aQn4^CsUd95h# z`y?Cp2Pt1mupa_>+6w(lv5y#`=oP*`d5rRF8Sn~J9b}r#n!i)ARpOV6`r!LZ@U~pO z*7Xp(9Qpp9t;uIV`H^W4xt^IFZ}vsnu;a;G%gs?qyFk5RlC+^B$K1#}as*)2>RN|MIr}F-S4T067DRI_-WP;%G_Uiph2bAAwto~>4ksQz`MNA0tkRFk!h_aF~)P)3yC3vCV z7=Hy$6$sjV>*~}Mb(5;w+p42$BWxA`or(;(3WAp7P%ysV&lW5SQejO0x);wQE(X<( zbuFfVwl!*nV=KRaTh7q6yS*)ZuaxHuapT4&mzG+KlX9!V(X*ZOZI%`!_Wd_M zVuIsDL|bnW4g66vAvg4cn80I==^(Tl8gfgR%qf))8^o*Q4!%p~+7!{JNq}ahCg5kN;}syCpiW?&p;32nPC6O3c^x zJJXcr5M|I)b*SU+@EN5#JwqG_1A;>O{QeTDe?JKzmg&%wC1M-b;nZI}uW5?z(1Xfq zXC7AZTeRyq@`K&aV_Ft|Tc>XTX?_uZtb?k5Jp_rVgZR}cZPiVo0+}VNEpwO*AdjfW(2+IJ&5R) z%NxrN2x_!MFSPGeFCG;v4mZ$iEWMo6zw6~bHG6*mZf+ySlFF}_$-lkpq@GQ&2*<>3 z{E*Wu>iM0M`;rMl3F^I%wU)xxnI}1QWc`eVXbj~}aorD@nfaSnDD%5QNv+iL&yVyl zJ@utprR#UcVIvO@oE%?ve(`Con^B-c?xGPik7NmXm*V4C(2&Tuq=Zk3O(L{8^Y1V* z<_T9ygmlk@X6a9w&VzivT}w{d39bMMeg`LB?sms=s-E-yt=C}SHYu3y!QjrQ2F45H zWIO1RJ1>5l_1o?3OYsDh;uWR5RCmg0R@udnTS6PZ?kV@hL*G~`kr@{b#V=!$yA&v1 z5<}c6-q=N%hMcr|g3ctJev2$H;P!W*Wlt07goZ3GI@Dbv4y^eS zWT7m%Qc~3!Z@0xXH;oGp7>@I1XU76YV|rB=7IN|q-E8V*ek+Qf-B8=n>-;5n@yF@Q zkNU5MwedetX$w&&1sA&xJ$V(cr^4-~O$~hJ!}pH&SkLEsj{*`W%)Uf)4oqgPG<_}P z=CYezyaf8zdl2@Vz|(awFzwLm`bZ@6Rn8zpGue*0arlAV{_%#ZHpH1?m%@-@v;@xbP*dUKK@aoAoY-tJCdm-VO(3oqvX;#H+IGjL7_F(pMH5y_p zZ>VlIW7qH&etfe549HTR3(->H(R57>wl!Abw(Ze@p<9a=y)oM~F@I|#+tzBb2UM*t8dH258G359)?2%RkdsN_Lrdv-bCw6vS%aRL@SO&~|u&t9baI z_WA8~rn*(}=%Z2~1XnC<^Z#~V7xHmL^e(KUC!lv0tM}490Er!)$(+b- z^-8wQ7af%lAk7wZ+wq8`qKMW%d|ZfO zbC=2aeo%~Ub~(Adi+)y9M+A^cXer%>{Id`1Wj7XNA|7pTzg={x>M$w^jfluYRR|n> zOg2k_vAAC%-1XBgepu^q@7{w!`ybWKQ-pADg}=dIaQ<76jk{rCrD3zZIN_5BR-Lm^ z-l)m)T?O7*2Sd1vFN38q4 zOLb7TK#;lDO$v}+S6CY#Hj?gH3sKI(k4Q_<%RHockf{|-kz+iDvUd`d z(Q`w%^(1Ig`!b5j!L(U>^`x-r_ms&8o_P;NFG9#h>+@*wA@GX2QWj*&Re3O{>$Q8_eLIPh2G zmIiTR%~l1vW%H*{#G3vdzEO*rpl~o+xA^!HVP5>$N&LHY)*Gg;_|1ZZTcOS}kW?zy z<)Rz*Op9Y~v~suPzf{6lh(}xr)BX=u&D={~h^=w%8}*nVJl+Ejee`AYc1C$DvB-}i zSU__;uo*mP`nBie_HBqMv$pQk&KHJaEZ)paAOGuF*vQu(^nfYI5D;#8_ws`xsJ}Qf zJ3Z)P?#nYS3TApmmkcI z8A>(P@kQLoRecN$BOMdhzzeOo1l*R+m~?x z00r+i+j#rUc*o$pqbPQ~(C?mzt9|G#<(KP2u z2Twc9?h{?@raL=NY)1PW5&Qwf)v&_% h4QwWc%j+(uu8M45XH|LtEUakFWPd$MR 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

Oh>@VA-)i`&hoLB+*I)@2#+SBiSsKf@!OW2+ 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≥Yb4xO{ogF}O^G$~&iL>7^bBQ$0W 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 From add51460a3304104bb677518268f673c46435842 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 24 Jan 2018 16:22:44 +0100 Subject: [PATCH 049/359] Button size fix --- JsonEditorDialog.ui | 12 ++++++++++++ PlayerListDialog.ui | 12 ++++++++++++ res/gta5sync_de.qm | Bin 45230 -> 45242 bytes res/gta5sync_de.ts | 2 +- 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/JsonEditorDialog.ui b/JsonEditorDialog.ui index ad5736e..333c2d0 100644 --- a/JsonEditorDialog.ui +++ b/JsonEditorDialog.ui @@ -106,6 +106,12 @@ + + + 0 + 0 + + &Save @@ -113,6 +119,12 @@ + + + 0 + 0 + + &Close diff --git a/PlayerListDialog.ui b/PlayerListDialog.ui index 7db340b..b4b8ee1 100644 --- a/PlayerListDialog.ui +++ b/PlayerListDialog.ui @@ -134,6 +134,12 @@ + + + 0 + 0 + + &Apply @@ -141,6 +147,12 @@ + + + 0 + 0 + + &Cancel diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index 9df7e133496e2e6533c112910cf6d9ddf2ca34c0..89f216f7f5ed0fa0334791f78ae117fe3e3f73a1 100644 GIT binary patch delta 3141 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 Dialog - + Dialog From e9511cd3ebddc714c3e433ea917aebb9508bcc38 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 24 Jan 2018 16:26:54 +0100 Subject: [PATCH 050/359] Icon fix --- ProfileInterface.cpp | 4 ++++ SavegameDialog.cpp | 4 ++++ UserInterface.cpp | 8 ++++++++ 3 files changed, 16 insertions(+) diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index cdbb667..4f39530 100644 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -94,6 +94,10 @@ ProfileInterface::ProfileInterface(ProfileDatabase *profileDB, CrewDatabase *cre { ui->cmdImport->setIcon(QIcon::fromTheme("document-import")); } + else if (QIcon::hasThemeIcon("document-open")) + { + ui->cmdImport->setIcon(QIcon::fromTheme("document-open")); + } // DPI calculation qreal screenRatio = AppEnv::screenRatio(); diff --git a/SavegameDialog.cpp b/SavegameDialog.cpp index 302b92d..5182e3f 100644 --- a/SavegameDialog.cpp +++ b/SavegameDialog.cpp @@ -50,6 +50,10 @@ SavegameDialog::SavegameDialog(QWidget *parent) : { ui->cmdCopy->setIcon(QIcon::fromTheme("document-export")); } + else if (QIcon::hasThemeIcon("document-save")) + { + ui->cmdCopy->setIcon(QIcon::fromTheme("document-save")); + } refreshWindowSize(); } diff --git a/UserInterface.cpp b/UserInterface.cpp index 7c30b99..5c49842 100644 --- a/UserInterface.cpp +++ b/UserInterface.cpp @@ -136,12 +136,20 @@ UserInterface::UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, D { ui->action_Import->setIcon(QIcon::fromTheme("document-import")); } + 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")) { ui->actionExport_selected->setIcon(QIcon::fromTheme("document-export")); } + 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")) From f7382db6aba586723dbca4137dbb970cd415f926 Mon Sep 17 00:00:00 2001 From: Syping Date: Wed, 24 Jan 2018 16:27:52 +0100 Subject: [PATCH 051/359] Update version to rc2 --- config.h | 2 +- res/app.rc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config.h b/config.h index f406379..3f954e8 100644 --- a/config.h +++ b/config.h @@ -49,7 +49,7 @@ #endif #ifndef GTA5SYNC_APPVER -#define GTA5SYNC_APPVER "1.5.0-rc1" +#define GTA5SYNC_APPVER "1.5.0-rc2" #endif #ifdef GTA5SYNC_BUILDTYPE_REL diff --git a/res/app.rc b/res/app.rc index 69fbd76..08762d7 100644 --- a/res/app.rc +++ b/res/app.rc @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Syping" VALUE "FileDescription", "gta5view" - VALUE "FileVersion", "1.5.0-rc1" + VALUE "FileVersion", "1.5.0-rc2" VALUE "InternalName", "gta5view" VALUE "LegalCopyright", "Copyright © 2016-2018 Syping" VALUE "OriginalFilename", "gta5view.exe" VALUE "ProductName", "gta5view" - VALUE "ProductVersion", "1.5.0-rc1" + VALUE "ProductVersion", "1.5.0-rc2" END END END From 508da61af8535a0dd6e21e834b012b362d259a2c Mon Sep 17 00:00:00 2001 From: Syping Date: Thu, 25 Jan 2018 12:46:43 +0100 Subject: [PATCH 052/359] added Traditional Chinese translation --- gta5view.pro | 2 + res/gta5sync_zh_TW.qm | Bin 0 -> 34019 bytes res/gta5sync_zh_TW.ts | 2243 +++++++++++++++++++++++++++++++++++++++++ res/qt_zh_TW.qm | Bin 0 -> 117253 bytes res/qtbase_zh_TW.qm | Bin 0 -> 119182 bytes res/tr_g5p.qrc | 1 + res/tr_qt4.qrc | 1 + res/tr_qt5.qrc | 1 + 8 files changed, 2248 insertions(+) create mode 100644 res/gta5sync_zh_TW.qm create mode 100644 res/gta5sync_zh_TW.ts create mode 100644 res/qt_zh_TW.qm create mode 100644 res/qtbase_zh_TW.qm diff --git a/gta5view.pro b/gta5view.pro index b40de8e..da23a19 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -130,6 +130,7 @@ TRANSLATIONS += \ res/gta5sync_de.ts \ res/gta5sync_fr.ts \ res/gta5sync_ru.ts \ + res/gta5sync_zh_TW.ts \ lang/gta5sync_no.ts RESOURCES += \ @@ -141,6 +142,7 @@ DISTFILES += res/app.rc \ res/gta5sync_de.ts \ res/gta5sync_fr.ts \ res/gta5sync_ru.ts \ + res/gta5sync_zh_TW.ts \ res/gta5view.exe.manifest \ res/gta5view.png \ lang/gta5sync_no.ts \ diff --git a/res/gta5sync_zh_TW.qm b/res/gta5sync_zh_TW.qm new file mode 100644 index 0000000000000000000000000000000000000000..846f2168e3d8f9e452701578b8013a6109766ad2 GIT binary patch literal 34019 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 literal 0 HcmV?d00001 diff --git a/res/gta5sync_zh_TW.ts b/res/gta5sync_zh_TW.ts new file mode 100644 index 0000000..a76affb --- /dev/null +++ b/res/gta5sync_zh_TW.ts @@ -0,0 +1,2243 @@ + + + + + AboutDialog + + + About %1 + 關於 %1 + + + + <span style=" font-weight:600;">%1</span><br/> +<br/> +%2<br/> +<br/> +Version %3<br/> +Created on %4<br/> +Built with Qt %5<br/> +Running with Qt %6<br/> +<br/> +%7 + <span style=" font-weight:600;">%1</span><br/> +<br/> +%2<br/> +<br/> +版本:%3<br/> +建置於 %4<br/> +使用 Qt %5 建置<br/> +使用 Qt %6 執行<br/> +<br/> +%7 + + + + &Close + 關閉 (&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,http://steamcommunity.com/profiles/76561198282701714 + + + + A project for viewing and sync Grand Theft Auto V Snapmatic<br/> +Pictures and Savegames + 一個 Grand Theft Auto V Snapmatic 圖片ã€éŠæˆ²å­˜æª”æª¢è¦–å’ŒåŒæ­¥å°ˆæ¡ˆ + + + + 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> æŽˆæ¬Šæ¢æ¬¾ç™¼å¸ƒ + + + + Release + æ­£å¼ç‰ˆæœ¬ + + + + Release Candidate + 最終發布版本 + + + + Daily Build + æ¯æ—¥å»ºç½®ç‰ˆæœ¬ + + + + Developer + 開發版本 + + + + Beta + Beta 版本 + + + + Alpha + Alpha 版本 + + + + Custom + 自訂 + + + + CrewDatabase + + + + No Crew + ç„¡ + + + + ExportDialog + + + Dialog + å°è©± + + + + Export Format + åŒ¯å‡ºæ ¼å¼ + + + + &JPEG/PNG format + JPEG/PNG æ ¼å¼ (&J) + + + + GTA &Snapmatic format + GTA Snapmatic æ ¼å¼ (&S) + + + + Export Size + 匯出尺寸 + + + + Default &Size + é è¨­ (&S) + + + + &Desktop Size + 桌é¢å°ºå¯¸ (&D) + + + + &Custom Size + 自訂尺寸 (&C) + + + + Custom Size: + 自訂尺寸: + + + + x + x + + + + &Export + 匯出 (&E) + + + + &Close + 關閉 (&C) + + + + ImageEditorDialog + + + Overwrite Image... + 修改圖片... + + + + + Capacity: %1 + 大å°:%1 + + + + ? + ? + + + + &Import... + 匯入 (&I)... + + + + &Overwrite + 修改 (&O) + + + + &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 圖片更新失敗 + + + + Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality. + æ¯å¼µ Snapmatic 大å°çš†ä¸åŒï¼Œé€šå¸¸è¼ƒå¤§çš„ Snapmatic 圖片å“質較佳。 + + + + ImportDialog + + + Import... + 匯入... + + + + Picture + 圖片 + + + + Avatar + 大頭貼 + + + + + Ignore Aspect Ratio + 忽略長寬比 + + + + Background + 背景 + + + + + + Background Colour: <span style="color: %1">%1</span> + 背景é¡è‰²: <span style="color: %1">%1</span> + + + + + ... + ... + + + + + + Background Image: + 背景圖片: + + + + X + X + + + + Force Colour in Avatar Zone + 強制在大頭貼å€åŸŸä½¿ç”¨é¡è‰² + + + + Import picture + 匯入圖片 + + + + &OK + OK (&O) + + + + Discard picture + æ¨æ£„圖片 + + + + &Cancel + å–æ¶ˆ (&C) + + + + + Custom Avatar + Custom Avatar Description in SC, don't use Special Character! + 自訂大頭貼 + + + + + Custom Picture + Custom Picture Description in SC, don't use Special Character! + 自訂圖片 + + + + 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 + + + + File + Background Image: File + 文件 + + + + JsonEditorDialog + + + Snapmatic JSON Editor + Snapmatic JSON 編輯器 + + + + &Save + ä¿å­˜ (&S) + + + + &Close + 關閉 (&C) + + + + JSON Error + JSON 錯誤 + + + + MapLocationDialog + + + Snapmatic Map Viewer + Snapmatic 地圖檢視器 + + + + &Close + 關閉 (&C) + + + + &Apply + 套用 (&A) + + + + &Revert + 還原 (&R) + + + + &Set + 設置 (&S) + + + + &Done + å®Œæˆ (&D) + + + + X: %1 +Y: %2 + X and Y position + X: %1 +Y: %2 + + + + OptionsDialog + + + %1 - Settings + %1 - 設定 + + + + Profiles + 設定檔 + + + + Content Open/Select Mode + 開啟/鏿“‡æ¨¡å¼ + + + + Open with Singleclick + 點一次開啟 + + + + Open with Doubleclick + 點兩次開啟 + + + + Select with Singleclick + 點一次é¸å– + + + + Default Profile + é è¨­è¨­å®šæª” + + + + Custom GTA V Folder + 自訂 GTA V 資料夾 + + + + Force using Custom Folder + 強制使用自訂資料夾 + + + + ... + ... + + + + Pictures + 圖片 + + + + Export Size + 匯出尺寸 + + + + Default: %1x%2 + é è¨­: %1x%2 + + + + Screen Resolution: %1x%2 + 螢幕解æžåº¦: %1x%2 + + + + + Custom Size: + 自訂尺寸: + + + + x + x + + + + Ignore Aspect Ratio + 忽略長寬比 + + + + Export Quality + 匯出å“質 + + + + Enable Custom Quality + 啟用自訂å“質 + + + + Quality: + å“質: + + + + %1% + %1% + + + + Picture Viewer + 圖片檢視器 + + + + Enable Navigation Bar + 啟用導航欄 + + + + Players + 玩家 + + + + ID + ID + + + + Name + å稱 + + + + Feedback + å饋 + + + + Participation + åƒèˆ‡ + + + + + Participate in %1 User Statistics + åƒèˆ‡ %1 使用者統計 + + + + Categories + 分類 + + + + Hardware, Application and OS Specification + 硬體ã€è»Ÿé«”å’Œ OS è¦æ ¼ + + + + System Language Configuration + 系統語言設定 + + + + Application Configuration + 應用程å¼è¨­å®š + + + + Other + å…¶ä»– + + + + + + Participation ID: %1 + åƒèˆ‡ ID: %1 + + + + &Copy + 複製 (&C) + + + + + User Feedback + 使用者å饋 + + + + Limit: 1 message/day + 一天åªèƒ½ä¸€å‰‡è¨Šæ¯ + + + + &Send + é€å‡º (&S) + + + + Interface + ä»‹é¢ + + + + Language for Interface + 介é¢èªžè¨€ + + + + + + + Current: %1 + ç›®å‰: %1 + + + + Language for Areas + å€åŸŸèªžè¨€ + + + + Style + 風格 + + + + Use Default Style (Restart) + 使用é è¨­é¢¨æ ¼ (éœ€é‡æ–°å•Ÿå‹•) + + + + Style: + 風格: + + + + Font + å­—é«” + + + + Always use Message Font (Windows 2003 and earlier) + 總是使用訊æ¯å­—é«” (Windows 2003 和更早版本) + + + + Sync + åŒæ­¥ + + + + Sync is not implemented at current time + ç›®å‰ä¸¦æœªåŒæ­¥ + + + + Apply changes + 套用變更 + + + + &OK + OK, Cancel, Apply + OK (&O) + + + + Discard changes + æ¨æ£„變更 + + + + &Cancel + OK, Cancel, Apply + å–æ¶ˆ (&C) + + + + %1 (Next Closest Language) + First language a person can talk with a different person/application. "Native" or "Not Native". + %1 (接近的語言) + + + + System + System in context of System default + 系統 + + + + %1 (Closest to Interface) + Next closest language compared to the Interface + %1 (èˆ‡ä»‹é¢æŽ¥è¿‘çš„èªžè¨€) + + + + Auto + Automatic language choice. + 自動 + + + + %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 + 未註冊åƒèˆ‡ + + + + A feedback message have to between 3-1024 characters long + å饋訊æ¯å¿…須在 3 到 1024 個字之間 + + + + PictureDialog + + + %1 - Snapmatic Picture Viewer + %1 - Snapmatic 圖片檢視器 + + + + <span style=" font-weight:600;">Title: </span>%6<br/> +<span style=" font-weight:600;">Location: </span>%7 (%1, %2, %3)<br/> +<span style=" font-weight:600;">Players: </span>%4 (Crew %5)<br/> +<span style=" font-weight:600;">Created: </span>%8 + <span style=" font-weight:600;">標題: </span>%6<br/> +<span style=" font-weight:600;">地點: </span>%7 (%1, %2, %3)<br/> +<span style=" font-weight:600;">玩家: </span>%4 (Crew %5)<br/> +<span style=" font-weight:600;">建立於: </span>%8 + + + + Manage picture + 管ç†åœ–片 + + + + &Manage + ç®¡ç† (&M) + + + + Close viewer + 關閉檢視器 + + + + &Close + 關閉 (&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 + æ•¸å­—éµ 1 - 大頭接é è¦½æ¨¡å¼ +æ•¸å­—éµ 2 -é–‹é—œé‡ç–Šå±¤ +æ–¹å‘éµ - 導覽 + + + + + Snapmatic Picture Viewer + Snapmatic 圖片檢視器 + + + + + Failed at %1 + 失敗: %1 + + + + + + No Players + ç„¡ + + + + + No Crew + ç„¡ + + + + Unknown Location + 未知地點 + + + + Avatar Preview Mode +Press 1 for Default View + 大頭貼é è¦½æ¨¡å¼ +按 1 åˆ‡æ›æ ¼é è¨­æª¢è¦– + + + + Export as Picture... + 匯出æˆåœ–片... + + + + + Export + 匯出 + + + + JPEG Graphics (*.jpg *.jpeg) + JPEG åœ–å½¢æ ¼å¼ (*.jpg *.jpeg) + + + + Portable Network Graphics (*.png) + 坿”œå¼ç¶²è·¯åœ–å½¢ (*.png) + + + + + + + + + Export as Picture + 匯出æˆåœ–片 + + + + + Overwrite %1 with current Snapmatic picture? + 確定修改目å‰çš„ Snapmatic 圖片 %1 ? + + + + Failed to export the picture because the system occurred a write failure + 系統寫入失敗,無法匯出圖片 + + + + Failed to export the picture because the format detection failures + æ ¼å¼æª¢æ¸¬å¤±æ•—,無法匯出圖片 + + + + Failed to export the picture because the file can't be written + 文件無法寫入,匯出圖片失敗 + + + + Failed to export the picture because of an unknown reason + 未知的錯誤,無法匯出圖片 + + + + + No valid file is selected + æœªé¸æ“‡æœ‰æ•ˆçš„æª”案 + + + + Export as Snapmatic... + åŒ¯å‡ºæˆ Snapmatic... + + + + GTA V Export (*.g5e) + GTA V Export (*.g5e) + + + + GTA V Raw Export (*.auto) + GTA V Raw Export (*.auto) + + + + Snapmatic pictures (PGTA*) + Snapmatic 圖片 (PGTA*) + + + + + + + + Export as Snapmatic + åŒ¯å‡ºæˆ Snapmatic + + + + + Failed to export current Snapmatic picture + 匯出目å‰çš„ Snapmatic 圖片失敗 + + + + Exported Snapmatic to "%1" because of using the .auto extension. + 因為使用 .auto æ ¼å¼ï¼Œå°‡ Snapmatic 匯出到 "%1". + + + + PlayerListDialog + + + Edit Players... + 編輯玩家... + + + + Available Players: + å¯ç”¨çš„玩家: + + + + Selected Players: + 已鏿“‡çީ家: + + + + &Apply + 套用 (&A) + + + + &Cancel + å–æ¶ˆ (&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 已被新增! + + + + ProfileInterface + + + Profile Interface + è¨­å®šæª”ç•Œé¢ + + + + Loading file %1 of %2 files + 載入檔案中 %1 å…± %2 個檔案 + + + + %1 %2 + %1 %2 + + + + Import file + 匯入檔案 + + + + &Import... + 匯入 (&I)... + + + + Close profile + 關閉設定檔 + + + + &Close + 關閉 (&C) + + + + + + Export file %1 of %2 files + 匯出檔案中 %1 å…± %2 個檔案 + + + + + + + Import... + 匯入... + + + + + + + + + + + + + + + + + + + + + + + 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ï¼Œå› ç‚ºæª”æ¡ˆç„¡æ³•æ­£ç¢ºè§£æž + + + + Enabled pictures: %1 of %2 + 開啟圖片 %1 å…± %2 + + + + Loading... + 載入中... + + + + Snapmatic Loader + Snapmatic 載入器 + + + + <h4>Following Snapmatic Pictures got repaired</h4>%1 + <h4>下列的 Snapmatic 圖片已被更新</h4>%1 + + + + Importable files (%1) + å¯åŒ¯å…¥çš„æª”案 (%1) + + + + + GTA V Export (*.g5e) + GTA V Export (*.g5e) + + + + + Savegames files (SGTA*) + éŠæˆ²å­˜æª” (SGTA*) + + + + + Snapmatic pictures (PGTA*) + Snapmatic 圖片 (PGTA*) + + + + + + No valid file is selected + æ²’æœ‰é¸æ“‡æœ‰æ•ˆçš„æª”案 + + + + + Import file %1 of %2 files + 匯入檔案 %1 å…± %2 個 + + + + Import failed with... + +%1 + %1 匯入失敗 + + + + + Failed to read Snapmatic picture + ç„¡æ³•è®€å– Snapmatic 圖片 + + + + + Failed to read Savegame file + 無法讀å–éŠæˆ²å­˜æª” + + + + Can't import %1 because file format can't be detected + 無法匯入 %1ï¼Œå› ç‚ºç„¡æ³•æª¢æ¸¬è©²æª”æ¡ˆæ ¼å¼ + + + + Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e + 匯入 Snapmatic åœ–ç‰‡å¤±æ•—ï¼Œæª”æ¡ˆä¸æ˜¯ PGTA 開頭或附檔å䏿˜¯ .g5e + + + + Failed to import the Snapmatic picture, the picture is already in the game + 匯入 Snapmatic åœ–ç‰‡å¤±æ•—ï¼Œåœ–ç‰‡å·²ç¶“åœ¨éŠæˆ²ä¸­ + + + + Failed to import the Snapmatic picture, can't copy the file into profile + 匯入 Snapmatic 圖片失敗,無法將該檔案複製到設定檔中 + + + + Failed to import the Savegame, can't copy the file into profile + åŒ¯å…¥éŠæˆ²å­˜æª”失敗,無法將該檔案複製到設定檔中 + + + + Failed to import the Savegame, no Savegame slot is left + åŒ¯å…¥éŠæˆ²å­˜æª”å¤±æ•—ï¼Œæ²’æœ‰éŠæˆ²å­˜æª”æ¬„ä½ + + + + + + + + Export selected... + 匯出所é¸... + + + + + JPG pictures and GTA Snapmatic + JPG 圖片和 GTA Snapmatic + + + + + JPG pictures only + åªæœ‰ JPG 圖片 + + + + + GTA Snapmatic only + åªæœ‰ GTA Snapmatic + + + + %1Export Snapmatic pictures%2<br><br>JPG pictures make it possible to open the picture with a Image Viewer<br>GTA Snapmatic make it possible to import the picture into the game<br><br>Export as: + %1 匯出 Snapmatic 圖片 %2<br><br>JPG 圖片å¯ä½¿ç”¨åœ–片檢視器開啟<br>GTA Snapmatic å¯ä»¥åŒ¯å…¥åˆ°éŠæˆ²ä¸­<br><br>匯出æˆ: + + + + Initialising export... + åˆå§‹åŒ–... + + + + Export failed with... + +%1 + %1 匯出失敗 + + + + + No Snapmatic pictures or Savegames files are selected + æœªé¸æ“‡ Snapmatic åœ–ç‰‡æˆ–éŠæˆ²å­˜æª” + + + + + + Remove selected + ç§»é™¤æ‰€é¸ + + + + You really want remove the selected Snapmatic picutres and Savegame files? + 你想移除所é¸çš„ Snapmatic 圖片/存檔嗎? + + + + Failed to remove all selected Snapmatic pictures and/or Savegame files + ç„¡æ³•ç§»é™¤æ‰€é¸æ“‡çš„ Snapmatic 圖片/éŠæˆ²å­˜æª” + + + + + + + + + No Snapmatic pictures are selected + æœªé¸æ“‡ Snapmatic 圖片 + + + + + + + + + %1 failed with... + +%2 + Action failed with... + %1 失敗... + +%2 + + + + + Qualify as Avatar + åˆæ ¼å¤§é ­è²¼ + + + + + + + Patch selected... + 修改所é¸... + + + + + + + + + + + Patch file %1 of %2 files + 修改檔案 %1 å…± %2 個檔案 + + + + Qualify + %1 failed with... + åˆæ ¼ + + + + + Change Players... + 更改玩家... + + + + Change Players + %1 failed with... + 更改玩家 + + + + + + Change Crew... + 更改幫會... + + + + Failed to enter a valid Snapmatic Crew ID + 輸入了無效的幫會 ID + + + + Change Crew + %1 failed with... + 更改幫會 + + + + + + Change Title... + 更改標題... + + + + Failed to enter a valid Snapmatic title + 輸入了無效的標題 + + + + Change Title + %1 failed with... + 更改標題 + + + + All profile files (*.g5e SGTA* PGTA*) + 所有設定檔檔案 (*.g5e SGTA* PGTA*) + + + + QApplication + + + Font + å­—é«” + + + + Selected Font: %1 + 鏿“‡çš„å­—é«”: %1 + + + + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? + <h4>歡迎使用 %1!</h4> 你想在開始å‰å…ˆè¨­å®š %1 å—Ž? + + + + SavegameDialog + + + + Savegame Viewer + éŠæˆ²å­˜æª”檢視器 + + + + <span style=" font-weight:600;">Savegame</span><br><br>%1 + <span style=" font-weight:600;">éŠæˆ²å­˜æª”</span><br><br>%1 + + + + &Export + 匯出 (&E) + + + + &Close + 關閉 (&C) + + + + Failed at %1 + 失敗 %1 + + + + SavegameWidget + + + Savegame Widget + éŠæˆ²å­˜æª”å°å·¥å…· + + + + SAVE %3 - %1<br>%2 + 存檔 %3 - %1 <br>%2 + + + + View savegame + 檢視存檔 + + + + View + 檢視 + + + + Copy savegame + 複製存檔 + + + + + Export + 匯出 + + + + Delete savegame + 刪除存檔 + + + + Delete + 刪除 + + + + &View + 檢視 (&V) + + + + &Export + 匯出 (&E) + + + + &Remove + 移除 (&R) + + + + &Select + 鏿“‡ (&S) + + + + &Deselect + å–æ¶ˆé¸æ“‡ (&D) + + + + Select &All + 鏿“‡å…¨éƒ¨ (&A) + + + + &Deselect All + å–æ¶ˆé¸æ“‡å…¨éƒ¨ (&D) + + + + Savegame files (SGTA*) + éŠæˆ²å­˜æª” (SGTA*) + + + + All files (**) + 所有檔案 (**) + + + + + + + Export Savegame + 匯出存檔 + + + + Overwrite %1 with current Savegame? + 是å¦ä¿®æ”¹ç›®å‰çš„存檔 %1? + + + + Failed to overwrite %1 with current Savegame + éŠæˆ²å­˜æª” %1 修改失敗 + + + + Failed to export current Savegame + 匯出目å‰çš„存檔失敗 + + + + No valid file is selected + æ²’æœ‰é¸æ“‡æœ‰æ•ˆçš„æª”案 + + + + Export Savegame... + åŒ¯å‡ºéŠæˆ²å­˜æª”... + + + + + AUTOSAVE - %1 +%2 + 自動存檔 - %1 %2 + + + + + SAVE %3 - %1 +%2 + 存檔 %3 - %1 %2 + + + + + WRONG FORMAT + æ ¼å¼éŒ¯èª¤ + + + + UNKNOWN + 未知 + + + + + Delete Savegame + 刪除存檔 + + + + Are you sure to delete %1 from your savegames? + 你確定è¦åˆªé™¤å­˜æª” %1? + + + + Failed at deleting %1 from your savegames + 刪除存檔 %1 失敗 + + + + SnapmaticEditor + + + + + + + + + + + Snapmatic Properties + Snapmatic 屬性 + + + + Snapmatic Type + Snapmatic 類型 + + + + Editor + 編輯 + + + + Selfie + è‡ªæ‹ + + + + Regular + 正常 + + + + Mugshot + 犯罪照片 + + + + Meme + Meme + + + + Director + å°Žæ¼” + + + + Snapmatic Values + Snapmatic ä¿¡æ¯ + + + + Extras + 附加功能 + + + + Qualify as Avatar automatically at apply + 自動設定æˆç¬¦åˆè³‡æ ¼çš„圖片 + + + + Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture + 符åˆè³‡æ ¼çš„圖片將å¯ä»¥è¨­å®šç‚º Social Club 大頭貼 + + + + &Apply + 套用 (&A) + + + + &Cancel + å–æ¶ˆ (&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) + + + + 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 + + + + SnapmaticWidget + + + Snapmatic Widget + Snapmatic å°å·¥å…· + + + + PHOTO - 00/00/00 00:00:00 + 照片 - 00/00/00 00:00:00 + + + + View picture + 檢視圖片 + + + + View + 檢視 + + + + Copy picture + 複製圖片 + + + + Copy + 複製 + + + + Export picture + 匯出圖片 + + + + Export + 匯出 + + + + + + Delete picture + 刪除圖片 + + + + Delete + 刪除 + + + + Edi&t + 編輯 (&E) + + + + Show &In-game + åœ¨éŠæˆ²ä¸­é¡¯ç¤º (&I) + + + + Hide &In-game + åœ¨éŠæˆ²ä¸­éš±è— (&I) + + + + &Export + 匯出 (&E) + + + + &View + 檢視 (&V) + + + + &Remove + 移除 (&R) + + + + &Select + 鏿“‡ (&S) + + + + &Deselect + å–æ¶ˆé¸æ“‡ (&D) + + + + Select &All + 鏿“‡å…¨éƒ¨ (&A) + + + + &Deselect All + å–æ¶ˆé¸æ“‡å…¨éƒ¨ (&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 失敗 + + + + TelemetryDialog + + + You want help %1 to improve in the future by collection of data? + ä½ å¸Œæœ›é€šéŽæ”¶é›†è³‡æ–™ä¾†å¹«åŠ©æ”¹å–„ %1 å—Ž? + + + + %1 User Statistics + %1 使用者統計 + + + + Yes, I would like to take part. + 是的,我想幫忙. + + + + &OK + OK (&O) + + + + UserInterface + + + + %2 - %1 + %2 - %1 + + + + Select profile + 鏿“‡è¨­å®šæª” + + + + %1 %2 + %1 %2 + + + + Reload profile overview + 釿–°è¼‰å…¥è¨­å®šæª”概述 + + + + &Reload + 釿–°è¼‰å…¥ (&R) + + + + Close %1 + Close %1 <- (gta5view/gta5sync) - %1 will be replaced automatically + 關閉 %1 + + + + &Close + 關閉 (&C) + + + + &File + 檔案 (&F) + + + + &Help + 幫助 (&H) + + + + &Edit + 編輯 (&E) + + + + &Profile + 設定檔 (&P) + + + + &Selection visibility + 鏿“‡å¯è¦‹åº¦ (&S) + + + + Selection &mass tools + 工具 (&M) + + + + + + &About %1 + 關於 %1 (&A) + + + + &Exit + 離開 (&E) + + + + Exit + 離開 + + + + Close &Profile + 關閉設定檔 (&P) + + + + &Settings + 設定 (&S) + + + + Select &All + 鏿“‡å…¨éƒ¨ (&A) + + + + &Deselect All + å–æ¶ˆé¸æ“‡å…¨éƒ¨ (&D) + + + + &Export selected... + åŒ¯å‡ºæ‰€é¸ (&E)... + + + + &Remove selected + ç§»é™¤æ‰€é¸ (&R) + + + + &Import files... + 匯入檔案 (&I)... + + + + &Open File... + 開啟檔案 (&O)... + + + + + Select &GTA V Folder... + 鏿“‡ GTA V 資料夾 (&G)... + + + + + + + Select GTA V Folder... + 鏿“‡ GTA V 資料夾... + + + + Show In-gam&e + åœ¨éŠæˆ²ä¸­é¡¯ç¤º (&E) + + + + Hi&de In-game + åœ¨éŠæˆ²ä¸­éš±è— (&D) + + + + Change &Title... + 更改標題 (&T)... + + + + Change &Crew... + 更改幫會 (&C)... + + + + &Qualify as Avatar + 符åˆå¤§é ­è²¼è³‡æ ¼ (&Q) + + + + Change &Players... + 更改玩家 (&P)... + + + + + + Show In-game + åœ¨éŠæˆ²ä¸­é¡¯ç¤º + + + + + + Hide In-game + åœ¨éŠæˆ²ä¸­éš±è— + + + + + + Select Profile + 鏿“‡è¨­å®šæª” + + + + Open File... + 開啟檔案... + + + + + + + Open File + 開啟檔案 + + + + Can't open %1 because of not valid file format + æ ¼å¼ç„¡æ•ˆï¼Œç„¡æ³•開啟 %1 + + + diff --git a/res/qt_zh_TW.qm b/res/qt_zh_TW.qm new file mode 100644 index 0000000000000000000000000000000000000000..a9a25b2048a132c19fba9b5a275db64c18dca756 GIT binary patch literal 117253 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 <^ilqiYg}HZ74Yk+RCEd${ciu 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