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 \<travisci@syping.de\>" --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 \<travisci@syping.de\>" --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 \<travisci@syping.de\>" --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 \<travisci@syping.de\>" --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 <http://www.gnu.org/licenses/>. +*****************************************************************************/ + +#include "JsonEditorDialog.h" +#include "ui_JsonEditorDialog.h" +#include "SnapmaticEditor.h" +#include "AppEnv.h" +#include <QStringBuilder> +#include <QJsonDocument> +#include <QMessageBox> + +#if QT_VERSION >= 0x050200 +#include <QFontDatabase> +#include <QDebug> +#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("<h4>Unsaved changes detected</h4>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 <http://www.gnu.org/licenses/>. +*****************************************************************************/ + +#ifndef JSONEDITORDIALOG_H +#define JSONEDITORDIALOG_H + +#include "SnapmaticPicture.h" +#include "JSHighlighter.h" +#include <QDialog> + +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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>JsonEditorDialog</class> + <widget class="QDialog" name="JsonEditorDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>550</width> + <height>450</height> + </rect> + </property> + <property name="windowTitle"> + <string>Snapmatic JSON Editor</string> + </property> + <layout class="QVBoxLayout" name="vlInterface"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <item> + <layout class="QVBoxLayout" name="vlJSON"> + <property name="spacing"> + <number>0</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QPlainTextEdit" name="txtJSON"> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Plain</enum> + </property> + <property name="lineWidth"> + <number>0</number> + </property> + </widget> + </item> + <item> + <widget class="Line" name="lineJSON"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>1</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>1</height> + </size> + </property> + <property name="styleSheet"> + <string notr="true">QFrame[frameShape="4"] +{ + color: black; +}</string> + </property> + <property name="frameShadow"> + <enum>QFrame::Plain</enum> + </property> + <property name="lineWidth"> + <number>1</number> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="hlButtons"> + <item> + <spacer name="hsButtons"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="cmdSave"> + <property name="text"> + <string>&Save</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="cmdClose"> + <property name="text"> + <string>&Close</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> 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 <QStringBuilder> #include <QDesktopWidget> +#include <QStyleFactory> #include <QApplication> #include <QFileDialog> #include <QMessageBox> @@ -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 @@ </widget> </item> <item> - <spacer name="vsTabPictures"> + <spacer name="vsPictures"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> @@ -382,15 +382,15 @@ </item> </layout> </widget> - <widget class="QWidget" name="tabLocalization"> + <widget class="QWidget" name="tabInterface"> <attribute name="title"> - <string>Language</string> + <string>Interface</string> </attribute> - <layout class="QVBoxLayout" name="vlLocalization"> + <layout class="QVBoxLayout" name="vlInterface"> <item> <widget class="QGroupBox" name="gbLanguage"> <property name="title"> - <string>Interface</string> + <string>Language for Interface</string> </property> <layout class="QVBoxLayout" name="vlLanguage"> <item> @@ -409,9 +409,9 @@ <item> <widget class="QGroupBox" name="gbAreas"> <property name="title"> - <string>Areas</string> + <string>Language for Areas</string> </property> - <layout class="QVBoxLayout" name="verticalLayout"> + <layout class="QVBoxLayout" name="vlAreas"> <item> <widget class="QComboBox" name="cbAreaLanguage"/> </item> @@ -425,6 +425,65 @@ </layout> </widget> </item> + <item> + <widget class="QGroupBox" name="gbStyle"> + <property name="title"> + <string>Style</string> + </property> + <layout class="QVBoxLayout" name="vlStyle"> + <item> + <widget class="QCheckBox" name="cbDefaultStyle"> + <property name="text"> + <string>Use Default Style (Restart)</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="hlStyle"> + <item> + <widget class="QLabel" name="labStyle"> + <property name="text"> + <string>Style:</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="cbStyleList"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="gbFont"> + <property name="title"> + <string>Font</string> + </property> + <layout class="QVBoxLayout" name="vlFont"> + <item> + <widget class="QCheckBox" name="cbAlwaysUseMessageFont"> + <property name="text"> + <string>Always use Message Font (Windows 2003 and earlier)</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> <item> <spacer name="vsInterface"> <property name="orientation"> 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 <QUrl> #include <QDir> +// 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("<a href=\"https://socialclub.rockstargames.com/crew/" % QString(crewStr).replace(" ", "_") % "/" % crewID % "\">" % crewStr % "</a>"); + return QString("<a href=\"https://socialclub.rockstargames.com/crew/" % QString(crewStr).replace(" ", "_") % "/" % crewIDStr % "\">" % crewStr % "</a>"); } 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 <QUrl> #include <QDir> +#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 <QProgressDialog> #include <QSpacerItem> +#include <QDateTime> #include <QWidget> #include <QList> #include <QMap> @@ -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 <http://www.gnu.org/licenses/>. +*****************************************************************************/ + +#include "JSHighlighter.h" +#include <QRegExp> + +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 <http://www.gnu.org/licenses/>. +*****************************************************************************/ + +#ifndef JSHIGHLIGHTER_H +#define JSHIGHLIGHTER_H + +#include <QSyntaxHighlighter> +#include <QTextCharFormat> +#include <QTextDocument> +#include <QTextFormat> +#include <QStringList> +#include <QRegExp> +#include <QVector> +#include <QHash> + +class QTextDocument; + +class JSHighlighter : public QSyntaxHighlighter +{ + Q_OBJECT + +public: + struct HighlightingRule + { + QRegExp pattern; + QTextCharFormat format; + }; + QVector<HighlightingRule> 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</source> <name>CrewDatabase</name> <message> <location filename="../CrewDatabase.cpp" line="102"/> + <location filename="../CrewDatabase.cpp" line="113"/> <source>No Crew</source> <translation type="unfinished"></translation> </message> @@ -196,7 +197,7 @@ Pictures and Savegames</source> <message> <location filename="../ImportDialog.ui" line="98"/> <location filename="../ImportDialog.cpp" line="57"/> - <location filename="../ImportDialog.cpp" line="216"/> + <location filename="../ImportDialog.cpp" line="242"/> <source>Background Colour: <span style="color: %1">%1</span></source> <translation type="unfinished"></translation> </message> @@ -236,29 +237,93 @@ Pictures and Savegames</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ImportDialog.cpp" line="173"/> + <location filename="../ImportDialog.cpp" line="105"/> + <location filename="../ProfileInterface.cpp" line="599"/> + <source>Custom Avatar</source> + <comment>Custom Avatar Description in SC, don't use Special Character!</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../ImportDialog.cpp" line="131"/> + <location filename="../ProfileInterface.cpp" line="618"/> + <source>Custom Picture</source> + <comment>Custom Picture Description in SC, don't use Special Character!</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../ImportDialog.cpp" line="199"/> <source>Are you sure to use a square image outside of the Avatar Zone? When you want to use it as Avatar the image will be detached!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ImportDialog.cpp" line="173"/> + <location filename="../ImportDialog.cpp" line="199"/> <source>Snapmatic Avatar Zone</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ImportDialog.cpp" line="212"/> + <location filename="../ImportDialog.cpp" line="238"/> <source>Select Colour...</source> <translation type="unfinished"></translation> </message> </context> <context> - <name>MapPreviewDialog</name> + <name>JsonEditorDialog</name> <message> - <location filename="../MapPreviewDialog.ui" line="26"/> + <location filename="../JsonEditorDialog.ui" line="14"/> + <source>Snapmatic JSON Editor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../JsonEditorDialog.ui" line="107"/> + <source>&Save</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../JsonEditorDialog.ui" line="114"/> + <source>&Close</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MapLocationDialog</name> + <message> + <location filename="../MapLocationDialog.ui" line="26"/> <source>Snapmatic Map Viewer</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="../MapLocationDialog.ui" line="138"/> + <source>&Close</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../MapLocationDialog.ui" line="164"/> + <source>&Apply</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../MapLocationDialog.ui" line="177"/> + <source>&Revert</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../MapLocationDialog.ui" line="190"/> + <source>&Set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../MapLocationDialog.ui" line="203"/> + <source>&Done</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../MapLocationDialog.cpp" line="90"/> + <source>X: %1 +Y: %2</source> + <comment>X and Y position</comment> + <translation type="unfinished"></translation> + </message> </context> <context> <name>OptionsDialog</name> @@ -395,75 +460,129 @@ When you want to use it as Avatar the image will be detached!</source> </message> <message> <location filename="../OptionsDialog.ui" line="387"/> - <location filename="../OptionsDialog.ui" line="393"/> - <source>Language</source> + <source>Interface</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="419"/> + <location filename="../OptionsDialog.ui" line="393"/> + <source>Language for Interface</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="402"/> + <location filename="../OptionsDialog.ui" line="421"/> + <location filename="../OptionsDialog.cpp" line="169"/> + <location filename="../OptionsDialog.cpp" line="217"/> + <source>Current: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="412"/> + <source>Language for Areas</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="431"/> + <source>Style</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="437"/> + <source>Use Default Style (Restart)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="449"/> + <source>Style:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="474"/> + <source>Font</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="480"/> + <source>Always use Message Font (Windows 2003 and earlier)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="504"/> <source>Sync</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="425"/> + <location filename="../OptionsDialog.ui" line="510"/> <source>Sync is not implemented at current time</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="463"/> + <location filename="../OptionsDialog.ui" line="548"/> <source>Apply changes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="466"/> + <location filename="../OptionsDialog.ui" line="551"/> <source>&OK</source> <extracomment>OK, Cancel, Apply</extracomment> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="479"/> + <location filename="../OptionsDialog.ui" line="564"/> <source>Discard changes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="482"/> + <location filename="../OptionsDialog.ui" line="567"/> <source>&Cancel</source> <extracomment>OK, Cancel, Apply</extracomment> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="132"/> + <location filename="../OptionsDialog.cpp" line="133"/> <source>%1 (Next Closest Language)</source> <comment>First language a person can talk with a different person/application. "Native" or "Not Native".</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="132"/> + <location filename="../OptionsDialog.cpp" line="133"/> <source>System</source> <comment>System in context of System default</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="274"/> + <location filename="../OptionsDialog.cpp" line="135"/> + <source>%1 (Closest to Interface)</source> + <comment>Next closest language compared to the Interface</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.cpp" line="135"/> + <source>Auto</source> + <comment>Automatic language choice.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.cpp" line="408"/> <source>%1</source> <comment>%1</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="274"/> + <location filename="../OptionsDialog.cpp" line="408"/> <source>The new Custom Folder will initialise after you restart %1.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="284"/> + <location filename="../OptionsDialog.cpp" line="418"/> <source>No Profile</source> <comment>No Profile, as default</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="292"/> - <location filename="../OptionsDialog.cpp" line="296"/> - <location filename="../OptionsDialog.cpp" line="298"/> + <location filename="../OptionsDialog.cpp" line="426"/> + <location filename="../OptionsDialog.cpp" line="430"/> + <location filename="../OptionsDialog.cpp" line="432"/> <source>Profile: %1</source> <translation type="unfinished"></translation> </message> @@ -504,66 +623,73 @@ When you want to use it as Avatar the image will be detached!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="145"/> - <location filename="../ProfileInterface.cpp" line="1160"/> + <location filename="../PictureDialog.cpp" line="148"/> + <location filename="../ProfileInterface.cpp" line="1169"/> <source>Export as &Picture...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="146"/> - <location filename="../ProfileInterface.cpp" line="1161"/> + <location filename="../PictureDialog.cpp" line="149"/> + <location filename="../ProfileInterface.cpp" line="1170"/> <source>Export as &Snapmatic...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="148"/> - <source>Open &Map View...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../PictureDialog.cpp" line="150"/> - <location filename="../ProfileInterface.cpp" line="1158"/> + <location filename="../PictureDialog.cpp" line="151"/> + <location filename="../ProfileInterface.cpp" line="1164"/> <source>&Edit Properties...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="373"/> + <location filename="../PictureDialog.cpp" line="153"/> + <location filename="../ProfileInterface.cpp" line="1166"/> + <source>Open &Map Viewer...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../PictureDialog.cpp" line="155"/> + <location filename="../ProfileInterface.cpp" line="1167"/> + <source>Open &JSON Editor...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../PictureDialog.cpp" line="380"/> <source>Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="433"/> - <location filename="../PictureDialog.cpp" line="476"/> + <location filename="../PictureDialog.cpp" line="439"/> + <location filename="../PictureDialog.cpp" line="473"/> <source>Snapmatic Picture Viewer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="433"/> - <location filename="../PictureDialog.cpp" line="476"/> + <location filename="../PictureDialog.cpp" line="439"/> + <location filename="../PictureDialog.cpp" line="473"/> <source>Failed at %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="475"/> - <location filename="../PictureDialog.cpp" line="589"/> + <location filename="../PictureDialog.cpp" line="472"/> + <location filename="../PictureDialog.cpp" line="591"/> <source>No Crew</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="475"/> + <location filename="../PictureDialog.cpp" line="472"/> <source>Unknown Location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="475"/> - <location filename="../PictureDialog.cpp" line="614"/> + <location filename="../PictureDialog.cpp" line="472"/> + <location filename="../PictureDialog.cpp" line="618"/> <source>No Players</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="560"/> + <location filename="../PictureDialog.cpp" line="557"/> <source>Avatar Preview Mode Press 1 for Default View</source> <translation type="unfinished"></translation> @@ -717,212 +843,212 @@ Press 1 for Default View</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="65"/> + <location filename="../ProfileInterface.cpp" line="68"/> <source>Enabled pictures: %1 of %2</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="129"/> + <location filename="../ProfileInterface.cpp" line="134"/> <source>Loading...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="411"/> - <location filename="../ProfileInterface.cpp" line="476"/> + <location filename="../ProfileInterface.cpp" line="416"/> + <location filename="../ProfileInterface.cpp" line="483"/> <source>Import...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="412"/> - <location filename="../ProfileInterface.cpp" line="455"/> - <location filename="../ProfileInterface.cpp" line="507"/> - <location filename="../ProfileInterface.cpp" line="527"/> - <location filename="../ProfileInterface.cpp" line="543"/> - <location filename="../ProfileInterface.cpp" line="659"/> - <location filename="../ProfileInterface.cpp" line="740"/> - <location filename="../ProfileInterface.cpp" line="745"/> - <location filename="../ProfileInterface.cpp" line="755"/> - <location filename="../ProfileInterface.cpp" line="760"/> - <location filename="../ProfileInterface.cpp" line="771"/> - <location filename="../ProfileInterface.cpp" line="808"/> + <location filename="../ProfileInterface.cpp" line="417"/> + <location filename="../ProfileInterface.cpp" line="462"/> + <location filename="../ProfileInterface.cpp" line="515"/> + <location filename="../ProfileInterface.cpp" line="535"/> + <location filename="../ProfileInterface.cpp" line="551"/> + <location filename="../ProfileInterface.cpp" line="666"/> + <location filename="../ProfileInterface.cpp" line="746"/> + <location filename="../ProfileInterface.cpp" line="751"/> + <location filename="../ProfileInterface.cpp" line="761"/> + <location filename="../ProfileInterface.cpp" line="766"/> + <location filename="../ProfileInterface.cpp" line="777"/> <location filename="../ProfileInterface.cpp" line="814"/> + <location filename="../ProfileInterface.cpp" line="820"/> <source>Import</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="428"/> - <location filename="../UserInterface.cpp" line="364"/> + <location filename="../ProfileInterface.cpp" line="433"/> + <location filename="../UserInterface.cpp" line="375"/> <source>GTA V Export (*.g5e)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="429"/> - <location filename="../UserInterface.cpp" line="365"/> + <location filename="../ProfileInterface.cpp" line="434"/> + <location filename="../UserInterface.cpp" line="376"/> <source>Savegames files (SGTA*)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="430"/> - <location filename="../UserInterface.cpp" line="366"/> + <location filename="../ProfileInterface.cpp" line="435"/> + <location filename="../UserInterface.cpp" line="377"/> <source>Snapmatic pictures (PGTA*)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="427"/> + <location filename="../ProfileInterface.cpp" line="432"/> <source>Importable files (%1)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="431"/> + <location filename="../ProfileInterface.cpp" line="436"/> <source>All image files (%1)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="432"/> - <location filename="../UserInterface.cpp" line="367"/> + <location filename="../ProfileInterface.cpp" line="437"/> + <location filename="../UserInterface.cpp" line="378"/> <source>All files (**)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="455"/> - <location filename="../ProfileInterface.cpp" line="745"/> - <location filename="../UserInterface.cpp" line="455"/> + <location filename="../ProfileInterface.cpp" line="462"/> + <location filename="../ProfileInterface.cpp" line="751"/> + <location filename="../UserInterface.cpp" line="466"/> <source>No valid file is selected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="477"/> - <location filename="../ProfileInterface.cpp" line="492"/> + <location filename="../ProfileInterface.cpp" line="484"/> + <location filename="../ProfileInterface.cpp" line="499"/> <source>Import file %1 of %2 files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="507"/> + <location filename="../ProfileInterface.cpp" line="515"/> <source>Import failed with... %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="527"/> - <location filename="../UserInterface.cpp" line="407"/> + <location filename="../ProfileInterface.cpp" line="535"/> + <location filename="../UserInterface.cpp" line="418"/> <source>Failed to read Snapmatic picture</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="543"/> - <location filename="../UserInterface.cpp" line="423"/> + <location filename="../ProfileInterface.cpp" line="551"/> + <location filename="../UserInterface.cpp" line="434"/> <source>Failed to read Savegame file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="659"/> + <location filename="../ProfileInterface.cpp" line="666"/> <source>Can't import %1 because file can't be parsed properly</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="740"/> + <location filename="../ProfileInterface.cpp" line="746"/> <source>Can't import %1 because file format can't be detected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="755"/> + <location filename="../ProfileInterface.cpp" line="761"/> <source>Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="760"/> + <location filename="../ProfileInterface.cpp" line="766"/> <source>Failed to import the Snapmatic picture, the picture is already in the game</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="771"/> + <location filename="../ProfileInterface.cpp" line="777"/> <source>Failed to import the Snapmatic picture, can't copy the file into profile</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="808"/> + <location filename="../ProfileInterface.cpp" line="814"/> <source>Failed to import the Savegame, can't copy the file into profile</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="814"/> + <location filename="../ProfileInterface.cpp" line="820"/> <source>Failed to import the Savegame, no Savegame slot is left</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="878"/> - <location filename="../ProfileInterface.cpp" line="916"/> - <location filename="../ProfileInterface.cpp" line="995"/> - <location filename="../ProfileInterface.cpp" line="1015"/> + <location filename="../ProfileInterface.cpp" line="884"/> + <location filename="../ProfileInterface.cpp" line="922"/> + <location filename="../ProfileInterface.cpp" line="1001"/> + <location filename="../ProfileInterface.cpp" line="1021"/> <source>Export selected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="901"/> - <location filename="../ProfileInterface.cpp" line="919"/> + <location filename="../ProfileInterface.cpp" line="907"/> + <location filename="../ProfileInterface.cpp" line="925"/> <source>JPG pictures and GTA Snapmatic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="902"/> - <location filename="../ProfileInterface.cpp" line="924"/> + <location filename="../ProfileInterface.cpp" line="908"/> + <location filename="../ProfileInterface.cpp" line="930"/> <source>JPG pictures only</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="903"/> - <location filename="../ProfileInterface.cpp" line="928"/> + <location filename="../ProfileInterface.cpp" line="909"/> + <location filename="../ProfileInterface.cpp" line="934"/> <source>GTA Snapmatic only</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="916"/> + <location filename="../ProfileInterface.cpp" line="922"/> <source>%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:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="961"/> + <location filename="../ProfileInterface.cpp" line="967"/> <source>Export selected...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="962"/> + <location filename="../ProfileInterface.cpp" line="968"/> <source>Initialising export...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="995"/> + <location filename="../ProfileInterface.cpp" line="1001"/> <source>Export failed with... %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1015"/> - <location filename="../ProfileInterface.cpp" line="1057"/> + <location filename="../ProfileInterface.cpp" line="1021"/> + <location filename="../ProfileInterface.cpp" line="1063"/> <source>No Snapmatic pictures or Savegames files are selected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1023"/> - <location filename="../ProfileInterface.cpp" line="1051"/> + <location filename="../ProfileInterface.cpp" line="1029"/> <location filename="../ProfileInterface.cpp" line="1057"/> + <location filename="../ProfileInterface.cpp" line="1063"/> <source>Remove selected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1023"/> + <location filename="../ProfileInterface.cpp" line="1029"/> <source>You really want remove the selected Snapmatic picutres and Savegame files?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1051"/> + <location filename="../ProfileInterface.cpp" line="1057"/> <source>Failed at remove the complete selected Snapmatic pictures and/or Savegame files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../UserInterface.cpp" line="363"/> + <location filename="../UserInterface.cpp" line="374"/> <source>All profile files (*.g5e SGTA* PGTA*)</source> <translation type="unfinished"></translation> </message> @@ -930,15 +1056,20 @@ Press 1 for Default View</source> <context> <name>QApplication</name> <message> - <location filename="../main.cpp" line="66"/> + <location filename="../main.cpp" line="87"/> <source>Font</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../main.cpp" line="66"/> + <location filename="../main.cpp" line="87"/> <source>Selected Font: %1</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="../main.cpp" line="108"/> + <source><h4>Welcome to %1!</h4>You want to configure %1 before you start using it?</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>SavegameDialog</name> @@ -1013,37 +1144,37 @@ Press 1 for Default View</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1196"/> + <location filename="../ProfileInterface.cpp" line="1205"/> <source>&View</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1197"/> + <location filename="../ProfileInterface.cpp" line="1206"/> <source>&Export</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1198"/> + <location filename="../ProfileInterface.cpp" line="1207"/> <source>&Remove</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1200"/> + <location filename="../ProfileInterface.cpp" line="1209"/> <source>&Select</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1201"/> + <location filename="../ProfileInterface.cpp" line="1210"/> <source>&Deselect</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1204"/> + <location filename="../ProfileInterface.cpp" line="1213"/> <source>Select &All</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1208"/> + <location filename="../ProfileInterface.cpp" line="1217"/> <source>&Deselect All</source> <translation type="unfinished"></translation> </message> @@ -1137,7 +1268,13 @@ Press 1 for Default View</source> <message> <location filename="../SnapmaticEditor.ui" line="14"/> <location filename="../SnapmaticEditor.ui" line="81"/> - <location filename="../SnapmaticEditor.cpp" line="241"/> + <location filename="../JsonEditorDialog.cpp" line="83"/> + <location filename="../JsonEditorDialog.cpp" line="130"/> + <location filename="../JsonEditorDialog.cpp" line="136"/> + <location filename="../JsonEditorDialog.cpp" line="148"/> + <location filename="../PictureDialog.cpp" line="732"/> + <location filename="../SnapmaticEditor.cpp" line="252"/> + <location filename="../SnapmaticWidget.cpp" line="332"/> <source>Snapmatic Properties</source> <translation type="unfinished"></translation> </message> @@ -1183,20 +1320,20 @@ Press 1 for Default View</source> </message> <message> <location filename="../SnapmaticEditor.ui" line="113"/> - <location filename="../SnapmaticEditor.cpp" line="200"/> + <location filename="../SnapmaticEditor.cpp" line="211"/> <source>Crew: %1 (%2)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../SnapmaticEditor.ui" line="126"/> - <location filename="../SnapmaticEditor.cpp" line="185"/> + <location filename="../SnapmaticEditor.cpp" line="196"/> <source>Title: %1 (%2)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../SnapmaticEditor.ui" line="136"/> - <location filename="../SnapmaticEditor.cpp" line="189"/> - <location filename="../SnapmaticEditor.cpp" line="193"/> + <location filename="../SnapmaticEditor.cpp" line="200"/> + <location filename="../SnapmaticEditor.cpp" line="204"/> <source>Appropriate: %1</source> <translation type="unfinished"></translation> </message> @@ -1226,45 +1363,59 @@ Press 1 for Default View</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="184"/> - <location filename="../SnapmaticEditor.cpp" line="199"/> + <location filename="../SnapmaticEditor.cpp" line="195"/> + <location filename="../SnapmaticEditor.cpp" line="210"/> <source>Edit</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="189"/> + <location filename="../SnapmaticEditor.cpp" line="200"/> <source>Yes</source> <comment>Yes, should work fine</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="193"/> + <location filename="../SnapmaticEditor.cpp" line="204"/> <source>No</source> <comment>No, could lead to issues</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="241"/> + <location filename="../JsonEditorDialog.cpp" line="83"/> + <source><h4>Unsaved changes detected</h4>You want to save the JSON content before you quit?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../JsonEditorDialog.cpp" line="130"/> + <location filename="../JsonEditorDialog.cpp" line="148"/> + <source>Patching of Snapmatic Properties failed because of JSON Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../JsonEditorDialog.cpp" line="136"/> + <location filename="../PictureDialog.cpp" line="732"/> + <location filename="../SnapmaticEditor.cpp" line="252"/> + <location filename="../SnapmaticWidget.cpp" line="332"/> <source>Patching of Snapmatic Properties failed because of I/O Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="291"/> + <location filename="../SnapmaticEditor.cpp" line="302"/> <source>Snapmatic Title</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="291"/> + <location filename="../SnapmaticEditor.cpp" line="302"/> <source>New Snapmatic title:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="320"/> + <location filename="../SnapmaticEditor.cpp" line="331"/> <source>Snapmatic Crew</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="320"/> + <location filename="../SnapmaticEditor.cpp" line="331"/> <source>New Snapmatic crew:</source> <translation type="unfinished"></translation> </message> @@ -1321,8 +1472,8 @@ Press 1 for Default View</source> </message> <message> <location filename="../SnapmaticWidget.ui" line="152"/> - <location filename="../SnapmaticWidget.cpp" line="144"/> - <location filename="../SnapmaticWidget.cpp" line="153"/> + <location filename="../SnapmaticWidget.cpp" line="146"/> + <location filename="../SnapmaticWidget.cpp" line="155"/> <source>Delete picture</source> <translation type="unfinished"></translation> </message> @@ -1332,62 +1483,62 @@ Press 1 for Default View</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1149"/> + <location filename="../ProfileInterface.cpp" line="1155"/> <source>Edi&t</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1152"/> + <location filename="../ProfileInterface.cpp" line="1158"/> <source>Show &In-game</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1156"/> + <location filename="../ProfileInterface.cpp" line="1162"/> <source>Hide &In-game</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1159"/> + <location filename="../ProfileInterface.cpp" line="1168"/> <source>&Export</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1162"/> + <location filename="../ProfileInterface.cpp" line="1171"/> <source>&View</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1165"/> + <location filename="../ProfileInterface.cpp" line="1174"/> <source>&Remove</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1167"/> + <location filename="../ProfileInterface.cpp" line="1176"/> <source>&Select</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1168"/> + <location filename="../ProfileInterface.cpp" line="1177"/> <source>&Deselect</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1171"/> + <location filename="../ProfileInterface.cpp" line="1180"/> <source>Select &All</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1175"/> + <location filename="../ProfileInterface.cpp" line="1184"/> <source>&Deselect All</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../SnapmaticWidget.cpp" line="144"/> + <location filename="../SnapmaticWidget.cpp" line="146"/> <source>Are you sure to delete %1 from your Snapmatic pictures?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../SnapmaticWidget.cpp" line="153"/> + <location filename="../SnapmaticWidget.cpp" line="155"/> <source>Failed at deleting %1 from your Snapmatic pictures</source> <translation type="unfinished"></translation> </message> @@ -1396,7 +1547,7 @@ Press 1 for Default View</source> <name>UserInterface</name> <message> <location filename="../UserInterface.ui" line="20"/> - <location filename="../UserInterface.cpp" line="62"/> + <location filename="../UserInterface.cpp" line="61"/> <source>%2 - %1</source> <translation type="unfinished"></translation> </message> @@ -1458,8 +1609,8 @@ Press 1 for Default View</source> </message> <message> <location filename="../UserInterface.ui" line="226"/> - <location filename="../UserInterface.cpp" line="60"/> - <location filename="../UserInterface.cpp" line="541"/> + <location filename="../UserInterface.cpp" line="59"/> + <location filename="../UserInterface.cpp" line="552"/> <source>&About %1</source> <translation type="unfinished"></translation> </message> @@ -1565,15 +1716,15 @@ Press 1 for Default View</source> </message> <message> <location filename="../UserInterface.ui" line="309"/> - <location filename="../UserInterface.cpp" line="163"/> + <location filename="../UserInterface.cpp" line="162"/> <source>Select &GTA V Folder...</source> <translation type="unfinished"></translation> </message> <message> <location filename="../UserInterface.ui" line="312"/> - <location filename="../OptionsDialog.cpp" line="430"/> - <location filename="../UserInterface.cpp" line="104"/> - <location filename="../UserInterface.cpp" line="512"/> + <location filename="../OptionsDialog.cpp" line="564"/> + <location filename="../UserInterface.cpp" line="103"/> + <location filename="../UserInterface.cpp" line="523"/> <source>Select GTA V Folder...</source> <translation type="unfinished"></translation> </message> @@ -1603,27 +1754,27 @@ Press 1 for Default View</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../UserInterface.cpp" line="64"/> - <location filename="../UserInterface.cpp" line="234"/> - <location filename="../UserInterface.cpp" line="549"/> + <location filename="../UserInterface.cpp" line="63"/> + <location filename="../UserInterface.cpp" line="228"/> + <location filename="../UserInterface.cpp" line="560"/> <source>Select Profile</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../UserInterface.cpp" line="360"/> + <location filename="../UserInterface.cpp" line="371"/> <source>Open File...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../UserInterface.cpp" line="407"/> - <location filename="../UserInterface.cpp" line="423"/> - <location filename="../UserInterface.cpp" line="450"/> - <location filename="../UserInterface.cpp" line="455"/> + <location filename="../UserInterface.cpp" line="418"/> + <location filename="../UserInterface.cpp" line="434"/> + <location filename="../UserInterface.cpp" line="461"/> + <location filename="../UserInterface.cpp" line="466"/> <source>Open File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../UserInterface.cpp" line="450"/> + <location filename="../UserInterface.cpp" line="461"/> <source>Can't open %1 because of not valid file format</source> <translation type="unfinished"></translation> </message> 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 <QDesktopWidget> #include <QStringBuilder> +#include <QStyleFactory> #include <QApplication> +#include <QMessageBox> #include <QStringList> #include <QTranslator> #include <QFileInfo> @@ -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("<h4>Welcome to %1!</h4>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 c934152..dcb336b 100755 Binary files a/res/gta5sync_de.qm and b/res/gta5sync_de.qm differ diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index 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</translation> <name>CrewDatabase</name> <message> <location filename="../CrewDatabase.cpp" line="102"/> + <location filename="../CrewDatabase.cpp" line="113"/> <source>No Crew</source> <translation>Keine Crew</translation> </message> @@ -426,12 +427,14 @@ Wenn du planst es als Avatar zu verwenden das Bild wird abgetrennt!</translation </message> <message> <location filename="../ImportDialog.cpp" line="105"/> + <location filename="../ProfileInterface.cpp" line="599"/> <source>Custom Avatar</source> <comment>Custom Avatar Description in SC, don't use Special Character!</comment> <translation>Eigener Avatar</translation> </message> <message> <location filename="../ImportDialog.cpp" line="131"/> + <location filename="../ProfileInterface.cpp" line="618"/> <source>Custom Picture</source> <comment>Custom Picture Description in SC, don't use Special Character!</comment> <translation>Eigenes Bild</translation> @@ -454,6 +457,28 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt!</translation> <translation>Farbe auswählen...</translation> </message> </context> +<context> + <name>JsonEditorDialog</name> + <message> + <location filename="../JsonEditorDialog.ui" line="14"/> + <source>Snapmatic JSON Editor</source> + <translation>Snapmatic JSON Editor</translation> + </message> + <message> + <location filename="../JsonEditorDialog.ui" line="107"/> + <source>&Save</source> + <translation>&Speichern</translation> + </message> + <message> + <location filename="../JsonEditorDialog.ui" line="114"/> + <source>&Close</source> + <translation>S&chließen</translation> + </message> + <message> + <source>Patching of Snapmatic Properties failed because of JSON Error</source> + <translation type="vanished">Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen JSON Fehler</translation> + </message> +</context> <context> <name>MapLocationDialog</name> <message> @@ -502,7 +527,7 @@ Y: %2</translation> <translation>&Fertig</translation> </message> <message> - <location filename="../MapLocationDialog.cpp" line="89"/> + <location filename="../MapLocationDialog.cpp" line="90"/> <source>X: %1 Y: %2</source> <comment>X and Y position</comment> @@ -672,56 +697,93 @@ Y: %2</translation> <translation>Name</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="387"/> - <source>Language</source> - <translation>Sprache</translation> + <location filename="../OptionsDialog.ui" line="412"/> + <source>Language for Areas</source> + <translation>Sprache für Standorte</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="393"/> + <location filename="../OptionsDialog.ui" line="431"/> + <source>Style</source> + <translation>Stil</translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="437"/> + <source>Use Default Style (Restart)</source> + <translation>Benutze Standard Stil (Neustart)</translation> + </message> + <message> + <source>Use Default Style</source> + <translation type="vanished">Benutze Standard Stil</translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="449"/> + <source>Style:</source> + <translation>Stil:</translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="474"/> + <source>Font</source> + <translation>Schrift</translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="480"/> + <source>Always use Message Font (Windows 2003 and earlier)</source> + <translation>Immer Nachrichtenschrift nutzen (Windows 2003 und früher)</translation> + </message> + <message> + <source>Language</source> + <translation type="vanished">Sprache</translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="387"/> <source>Interface</source> <translation>Oberfläche</translation> </message> + <message> + <location filename="../OptionsDialog.ui" line="393"/> + <source>Language for Interface</source> + <translation>Sprache für Oberfläche</translation> + </message> <message> <location filename="../OptionsDialog.ui" line="402"/> <location filename="../OptionsDialog.ui" line="421"/> - <location filename="../OptionsDialog.cpp" line="167"/> - <location filename="../OptionsDialog.cpp" line="215"/> + <location filename="../OptionsDialog.cpp" line="169"/> + <location filename="../OptionsDialog.cpp" line="217"/> <source>Current: %1</source> <translation>Aktuell: %1</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="412"/> <source>Areas</source> - <translation>Standorte</translation> + <translation type="vanished">Standorte</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="445"/> + <location filename="../OptionsDialog.ui" line="504"/> <source>Sync</source> <translation>Sync</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="451"/> + <location filename="../OptionsDialog.ui" line="510"/> <source>Sync is not implemented at current time</source> <translation>Sync wurde bisher nicht implementiert</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="489"/> + <location filename="../OptionsDialog.ui" line="548"/> <source>Apply changes</source> <translation>Änderungen übernehmen</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="492"/> + <location filename="../OptionsDialog.ui" line="551"/> <source>&OK</source> <extracomment>OK, Cancel, Apply</extracomment> <translation>&OK</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="505"/> + <location filename="../OptionsDialog.ui" line="564"/> <source>Discard changes</source> <translation>Änderungen verwerfen</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="508"/> + <location filename="../OptionsDialog.ui" line="567"/> <source>&Cancel</source> <extracomment>OK, Cancel, Apply</extracomment> <translation>Abbre&chen</translation> @@ -742,7 +804,7 @@ Y: %2</translation> <translation type="vanished">%1 (%2 wenn verfügbar)</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="335"/> + <location filename="../OptionsDialog.cpp" line="408"/> <source>%1</source> <comment>%1</comment> <translation>%1</translation> @@ -756,31 +818,31 @@ Y: %2</translation> <translation type="vanished">Der eigene Ordner initialisiert sobald du %1 neugestartet hast.</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="131"/> + <location filename="../OptionsDialog.cpp" line="133"/> <source>%1 (Next Closest Language)</source> <comment>First language a person can talk with a different person/application. "Native" or "Not Native".</comment> <translation>%1 (Erste näheste Sprache)</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="131"/> + <location filename="../OptionsDialog.cpp" line="133"/> <source>System</source> <comment>System in context of System default</comment> <translation>System</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="133"/> + <location filename="../OptionsDialog.cpp" line="135"/> <source>%1 (Closest to Interface)</source> <comment>Next closest language compared to the Interface</comment> <translation>%1 (Näheste zur Oberfläche)</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="133"/> + <location filename="../OptionsDialog.cpp" line="135"/> <source>Auto</source> <comment>Automatic language choice.</comment> <translation>Automatisch</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="335"/> + <location filename="../OptionsDialog.cpp" line="408"/> <source>The new Custom Folder will initialise after you restart %1.</source> <translation>Der eigene Ordner wird initialisiert sobald du %1 neugestartet hast.</translation> </message> @@ -789,15 +851,15 @@ Y: %2</translation> <translation type="vanished">Die Änderung der Sprache nimmt Effekt sobald du %1 neugestartet hast.</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="345"/> + <location filename="../OptionsDialog.cpp" line="418"/> <source>No Profile</source> <comment>No Profile, as default</comment> <translation>Kein Profil</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="353"/> - <location filename="../OptionsDialog.cpp" line="357"/> - <location filename="../OptionsDialog.cpp" line="359"/> + <location filename="../OptionsDialog.cpp" line="426"/> + <location filename="../OptionsDialog.cpp" line="430"/> + <location filename="../OptionsDialog.cpp" line="432"/> <source>Profile: %1</source> <translation>Profil: %1</translation> </message> @@ -911,8 +973,8 @@ Y: %2</translation> <translation type="vanished">Exportiere als &JPG Bild...</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="145"/> - <location filename="../ProfileInterface.cpp" line="1162"/> + <location filename="../PictureDialog.cpp" line="148"/> + <location filename="../ProfileInterface.cpp" line="1169"/> <source>Export as &Picture...</source> <translation>Als &Bild exportieren...</translation> </message> @@ -921,8 +983,8 @@ Y: %2</translation> <translation type="vanished">Exportiere als &GTA Snapmatic...</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="146"/> - <location filename="../ProfileInterface.cpp" line="1163"/> + <location filename="../PictureDialog.cpp" line="149"/> + <location filename="../ProfileInterface.cpp" line="1170"/> <source>Export as &Snapmatic...</source> <translation>Als &Snapmatic exportieren...</translation> </message> @@ -931,13 +993,12 @@ Y: %2</translation> <translation type="vanished">Bearbei&ten</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="148"/> <source>Open &Map View...</source> - <translation>&Kartenansicht öffnen...</translation> + <translation type="vanished">&Kartenansicht öffnen...</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="150"/> - <location filename="../ProfileInterface.cpp" line="1160"/> + <location filename="../PictureDialog.cpp" line="151"/> + <location filename="../ProfileInterface.cpp" line="1164"/> <source>&Edit Properties...</source> <translation>Eigenschaften bearb&eiten...</translation> </message> @@ -951,7 +1012,13 @@ Y: %2</translation> <translation type="vanished">Erweitert (&A)</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="373"/> + <location filename="../PictureDialog.cpp" line="153"/> + <location filename="../ProfileInterface.cpp" line="1166"/> + <source>Open &Map Viewer...</source> + <translation>&Kartenansicht öffnen...</translation> + </message> + <message> + <location filename="../PictureDialog.cpp" line="380"/> <source>Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate</source> @@ -960,31 +1027,31 @@ Taste 2 - Overlay umschalten Pfeiltasten - Navigieren</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="433"/> - <location filename="../PictureDialog.cpp" line="476"/> + <location filename="../PictureDialog.cpp" line="439"/> + <location filename="../PictureDialog.cpp" line="473"/> <source>Snapmatic Picture Viewer</source> <translation>Snapmatic Bildansicht</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="433"/> - <location filename="../PictureDialog.cpp" line="476"/> + <location filename="../PictureDialog.cpp" line="439"/> + <location filename="../PictureDialog.cpp" line="473"/> <source>Failed at %1</source> <translation>Fehlgeschlagen bei %1</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="475"/> - <location filename="../PictureDialog.cpp" line="589"/> + <location filename="../PictureDialog.cpp" line="472"/> + <location filename="../PictureDialog.cpp" line="591"/> <source>No Crew</source> <translation>Keine Crew</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="475"/> - <location filename="../PictureDialog.cpp" line="614"/> + <location filename="../PictureDialog.cpp" line="472"/> + <location filename="../PictureDialog.cpp" line="618"/> <source>No Players</source> <translation>Keine Spieler</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="560"/> + <location filename="../PictureDialog.cpp" line="557"/> <source>Avatar Preview Mode Press 1 for Default View</source> <translation>Avatar Vorschaumodus @@ -1029,7 +1096,7 @@ Drücke A für Standardansicht</translation> <translation type="vanished">Keine Crew</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="475"/> + <location filename="../PictureDialog.cpp" line="472"/> <source>Unknown Location</source> <translation>Unbekannter Standort</translation> </message> @@ -1198,6 +1265,12 @@ Drücke A für Standardansicht</translation> <source>No valid file is selected</source> <translation>Keine gültige Datei wurde ausgewählt</translation> </message> + <message> + <location filename="../PictureDialog.cpp" line="155"/> + <location filename="../ProfileInterface.cpp" line="1167"/> + <source>Open &JSON Editor...</source> + <translation>&JSON Editor öffnen...</translation> + </message> </context> <context> <name>ProfileInterface</name> @@ -1258,30 +1331,30 @@ Drücke A für Standardansicht</translation> <translation type="obsolete">Profil schließen</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="131"/> + <location filename="../ProfileInterface.cpp" line="134"/> <source>Loading...</source> <translation>Lade...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="413"/> - <location filename="../ProfileInterface.cpp" line="478"/> + <location filename="../ProfileInterface.cpp" line="416"/> + <location filename="../ProfileInterface.cpp" line="483"/> <source>Import...</source> <translation>Importieren...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="414"/> - <location filename="../ProfileInterface.cpp" line="457"/> - <location filename="../ProfileInterface.cpp" line="509"/> - <location filename="../ProfileInterface.cpp" line="529"/> - <location filename="../ProfileInterface.cpp" line="545"/> - <location filename="../ProfileInterface.cpp" line="661"/> - <location filename="../ProfileInterface.cpp" line="742"/> - <location filename="../ProfileInterface.cpp" line="747"/> - <location filename="../ProfileInterface.cpp" line="757"/> - <location filename="../ProfileInterface.cpp" line="762"/> - <location filename="../ProfileInterface.cpp" line="773"/> - <location filename="../ProfileInterface.cpp" line="810"/> - <location filename="../ProfileInterface.cpp" line="816"/> + <location filename="../ProfileInterface.cpp" line="417"/> + <location filename="../ProfileInterface.cpp" line="462"/> + <location filename="../ProfileInterface.cpp" line="515"/> + <location filename="../ProfileInterface.cpp" line="535"/> + <location filename="../ProfileInterface.cpp" line="551"/> + <location filename="../ProfileInterface.cpp" line="666"/> + <location filename="../ProfileInterface.cpp" line="746"/> + <location filename="../ProfileInterface.cpp" line="751"/> + <location filename="../ProfileInterface.cpp" line="761"/> + <location filename="../ProfileInterface.cpp" line="766"/> + <location filename="../ProfileInterface.cpp" line="777"/> + <location filename="../ProfileInterface.cpp" line="814"/> + <location filename="../ProfileInterface.cpp" line="820"/> <source>Import</source> <translation>Importieren</translation> </message> @@ -1294,13 +1367,13 @@ Drücke A für Standardansicht</translation> <translation type="vanished">Importfähige Dateien (*.g5e *.jpg *.png SGTA* PGTA*)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="431"/> + <location filename="../ProfileInterface.cpp" line="434"/> <location filename="../UserInterface.cpp" line="376"/> <source>Savegames files (SGTA*)</source> <translation>Spielstanddateien (SGTA*)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="432"/> + <location filename="../ProfileInterface.cpp" line="435"/> <location filename="../UserInterface.cpp" line="377"/> <source>Snapmatic pictures (PGTA*)</source> <translation>Snapmatic Bilder (PGTA*)</translation> @@ -1310,29 +1383,29 @@ Drücke A für Standardansicht</translation> <translation type="vanished">Alle Bilddateien (*.jpg *.png)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="429"/> + <location filename="../ProfileInterface.cpp" line="432"/> <source>Importable files (%1)</source> <translation>Importfähige Dateien (%1)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="433"/> + <location filename="../ProfileInterface.cpp" line="436"/> <source>All image files (%1)</source> <translation>Alle Bilddateien (%1)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="434"/> + <location filename="../ProfileInterface.cpp" line="437"/> <location filename="../UserInterface.cpp" line="378"/> <source>All files (**)</source> <translation>Alle Dateien (**)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="479"/> - <location filename="../ProfileInterface.cpp" line="494"/> + <location filename="../ProfileInterface.cpp" line="484"/> + <location filename="../ProfileInterface.cpp" line="499"/> <source>Import file %1 of %2 files</source> <translation>Importiere Datei %1 von %2 Dateien</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="509"/> + <location filename="../ProfileInterface.cpp" line="515"/> <source>Import failed with... %1</source> @@ -1341,29 +1414,29 @@ Drücke A für Standardansicht</translation> %1</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="529"/> + <location filename="../ProfileInterface.cpp" line="535"/> <location filename="../UserInterface.cpp" line="418"/> <source>Failed to read Snapmatic picture</source> <translation>Fehler beim Lesen vom Snapmatic Bild</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="545"/> + <location filename="../ProfileInterface.cpp" line="551"/> <location filename="../UserInterface.cpp" line="434"/> <source>Failed to read Savegame file</source> <translation>Fehler beim Lesen von Spielstanddatei</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="661"/> + <location filename="../ProfileInterface.cpp" line="666"/> <source>Can't import %1 because file can't be parsed properly</source> <translation>Kann %1 nicht importieren weil die Datei nicht richtig gelesen werden kann</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="742"/> + <location filename="../ProfileInterface.cpp" line="746"/> <source>Can't import %1 because file format can't be detected</source> <translation>Kann %1 nicht importieren weil das Dateiformat nicht erkannt werden kann</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="964"/> + <location filename="../ProfileInterface.cpp" line="968"/> <source>Initialising export...</source> <translation>Initialisiere Export...</translation> </message> @@ -1372,29 +1445,29 @@ Drücke A für Standardansicht</translation> <translation type="vanished">Kann %1 nicht importieren weil das Dateiformat nicht gültig ist</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="757"/> + <location filename="../ProfileInterface.cpp" line="761"/> <source>Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e</source> <translation>Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA oder endet mit .g5e</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="762"/> + <location filename="../ProfileInterface.cpp" line="766"/> <source>Failed to import the Snapmatic picture, the picture is already in the game</source> <translation>Fehlgeschlagen beim Importieren vom Snapmatic Bild, dieses Bild ist bereits im Spiel</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="918"/> + <location filename="../ProfileInterface.cpp" line="922"/> <source>%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:</source> <translation>%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:</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="457"/> - <location filename="../ProfileInterface.cpp" line="747"/> + <location filename="../ProfileInterface.cpp" line="462"/> + <location filename="../ProfileInterface.cpp" line="751"/> <location filename="../UserInterface.cpp" line="466"/> <source>No valid file is selected</source> <translation>Keine gültige Datei wurde ausgewählt</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="65"/> + <location filename="../ProfileInterface.cpp" line="68"/> <source>Enabled pictures: %1 of %2</source> <translation>Aktivierte Bilder: %1 von %2</translation> </message> @@ -1403,35 +1476,35 @@ Drücke A für Standardansicht</translation> <translation type="vanished">Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PGTA</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="773"/> + <location filename="../ProfileInterface.cpp" line="777"/> <source>Failed to import the Snapmatic picture, can't copy the file into profile</source> <translation>Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="810"/> + <location filename="../ProfileInterface.cpp" line="814"/> <source>Failed to import the Savegame, can't copy the file into profile</source> <translation>Fehlgeschlagen beim Importieren vom Spielstand, kann Spielstanddatei nicht ins Profil kopieren</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="816"/> + <location filename="../ProfileInterface.cpp" line="820"/> <source>Failed to import the Savegame, no Savegame slot is left</source> <translation>Fehlgeschlagen beim Importieren vom Spielstand, kein Spielstandslot mehr frei</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="903"/> - <location filename="../ProfileInterface.cpp" line="921"/> + <location filename="../ProfileInterface.cpp" line="907"/> + <location filename="../ProfileInterface.cpp" line="925"/> <source>JPG pictures and GTA Snapmatic</source> <translation>JPG Bilder und GTA Snapmatic</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="904"/> - <location filename="../ProfileInterface.cpp" line="926"/> + <location filename="../ProfileInterface.cpp" line="908"/> + <location filename="../ProfileInterface.cpp" line="930"/> <source>JPG pictures only</source> <translation>Nur JPG Bilder</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="905"/> - <location filename="../ProfileInterface.cpp" line="930"/> + <location filename="../ProfileInterface.cpp" line="909"/> + <location filename="../ProfileInterface.cpp" line="934"/> <source>GTA Snapmatic only</source> <translation>Nur GTA Snapmatic</translation> </message> @@ -1450,25 +1523,25 @@ Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren Exportieren als:</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1017"/> - <location filename="../ProfileInterface.cpp" line="1059"/> + <location filename="../ProfileInterface.cpp" line="1021"/> + <location filename="../ProfileInterface.cpp" line="1063"/> <source>No Snapmatic pictures or Savegames files are selected</source> <translation>Keine Snapmatic Bilder oder Spielstände ausgewählt</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1025"/> - <location filename="../ProfileInterface.cpp" line="1053"/> - <location filename="../ProfileInterface.cpp" line="1059"/> + <location filename="../ProfileInterface.cpp" line="1029"/> + <location filename="../ProfileInterface.cpp" line="1057"/> + <location filename="../ProfileInterface.cpp" line="1063"/> <source>Remove selected</source> <translation>Auswahl löschen</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1025"/> + <location filename="../ProfileInterface.cpp" line="1029"/> <source>You really want remove the selected Snapmatic picutres and Savegame files?</source> <translation>Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen?</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1053"/> + <location filename="../ProfileInterface.cpp" line="1057"/> <source>Failed at remove the complete selected Snapmatic pictures and/or Savegame files</source> <translation>Fehlgeschlagen beim kompletten entfernen der ausgewählten Snapmatic Bilder und/oder der Spielstanddateien</translation> </message> @@ -1489,10 +1562,10 @@ Exportieren als:</translation> <translation type="obsolete">Fehlgeschlagenen beim Import vom Spielstand weil kein Spielstandslot mehr übrig ist</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="880"/> - <location filename="../ProfileInterface.cpp" line="918"/> - <location filename="../ProfileInterface.cpp" line="997"/> - <location filename="../ProfileInterface.cpp" line="1017"/> + <location filename="../ProfileInterface.cpp" line="884"/> + <location filename="../ProfileInterface.cpp" line="922"/> + <location filename="../ProfileInterface.cpp" line="1001"/> + <location filename="../ProfileInterface.cpp" line="1021"/> <source>Export selected</source> <translation>Auswahl exportieren</translation> </message> @@ -1513,7 +1586,7 @@ Exportieren als:</translation> <translation type="obsolete">Wie sollen wir mit den Snapmatic Bilder umgehen?</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="963"/> + <location filename="../ProfileInterface.cpp" line="967"/> <source>Export selected...</source> <translation>Auswahl exportieren...</translation> </message> @@ -1526,7 +1599,7 @@ Exportieren als:</translation> <translation type="obsolete">Initialisierung...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="997"/> + <location filename="../ProfileInterface.cpp" line="1001"/> <source>Export failed with... %1</source> @@ -1561,7 +1634,7 @@ Exportieren als:</translation> <translation>Alle Profildateien (*.g5e SGTA* PGTA*)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="430"/> + <location filename="../ProfileInterface.cpp" line="433"/> <location filename="../UserInterface.cpp" line="375"/> <source>GTA V Export (*.g5e)</source> <translation>GTA V Export (*.g5e)</translation> @@ -1570,15 +1643,20 @@ Exportieren als:</translation> <context> <name>QApplication</name> <message> - <location filename="../main.cpp" line="67"/> + <location filename="../main.cpp" line="87"/> <source>Font</source> <translation>Schrift</translation> </message> <message> - <location filename="../main.cpp" line="67"/> + <location filename="../main.cpp" line="87"/> <source>Selected Font: %1</source> <translation>Ausgewähle Schrift: %1</translation> </message> + <message> + <location filename="../main.cpp" line="108"/> + <source><h4>Welcome to %1!</h4>You want to configure %1 before you start using it?</source> + <translation><h4>Willkommen zu %1!</h4>Möchtest du %1 einstellen bevor du es nutzt?</translation> + </message> </context> <context> <name>SavegameDialog</name> @@ -1725,32 +1803,32 @@ Exportieren als:</translation> <translation>Fehlgeschlagen beim Löschen %1 von deinen Spielständen</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1198"/> + <location filename="../ProfileInterface.cpp" line="1205"/> <source>&View</source> <translation>A&nsehen</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1200"/> + <location filename="../ProfileInterface.cpp" line="1207"/> <source>&Remove</source> <translation>Entfe&rnen</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1202"/> + <location filename="../ProfileInterface.cpp" line="1209"/> <source>&Select</source> <translation>Au&swählen</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1203"/> + <location filename="../ProfileInterface.cpp" line="1210"/> <source>&Deselect</source> <translation>A&bwählen</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1206"/> + <location filename="../ProfileInterface.cpp" line="1213"/> <source>Select &All</source> <translation>&Alles auswählen</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1210"/> + <location filename="../ProfileInterface.cpp" line="1217"/> <source>&Deselect All</source> <translation>Alles a&bwählen</translation> </message> @@ -1789,7 +1867,7 @@ Exportieren als:</translation> <translation>Spielstand kopieren</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1199"/> + <location filename="../ProfileInterface.cpp" line="1206"/> <source>&Export</source> <translation>&Exportieren</translation> </message> @@ -1865,8 +1943,13 @@ Exportieren als:</translation> <message> <location filename="../SnapmaticEditor.ui" line="14"/> <location filename="../SnapmaticEditor.ui" line="81"/> - <location filename="../PictureDialog.cpp" line="727"/> - <location filename="../SnapmaticEditor.cpp" line="241"/> + <location filename="../JsonEditorDialog.cpp" line="83"/> + <location filename="../JsonEditorDialog.cpp" line="130"/> + <location filename="../JsonEditorDialog.cpp" line="136"/> + <location filename="../JsonEditorDialog.cpp" line="148"/> + <location filename="../PictureDialog.cpp" line="732"/> + <location filename="../SnapmaticEditor.cpp" line="252"/> + <location filename="../SnapmaticWidget.cpp" line="332"/> <source>Snapmatic Properties</source> <translation>Snapmatic Eigenschaften</translation> </message> @@ -1910,7 +1993,7 @@ Exportieren als:</translation> <translation>Meme</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="291"/> + <location filename="../SnapmaticEditor.cpp" line="302"/> <source>Snapmatic Title</source> <translation>Snapmatic Titel</translation> </message> @@ -1921,20 +2004,20 @@ Exportieren als:</translation> </message> <message> <location filename="../SnapmaticEditor.ui" line="113"/> - <location filename="../SnapmaticEditor.cpp" line="200"/> + <location filename="../SnapmaticEditor.cpp" line="211"/> <source>Crew: %1 (%2)</source> <translation>Crew: %1 (%2)</translation> </message> <message> <location filename="../SnapmaticEditor.ui" line="126"/> - <location filename="../SnapmaticEditor.cpp" line="185"/> + <location filename="../SnapmaticEditor.cpp" line="196"/> <source>Title: %1 (%2)</source> <translation>Titel: %1 (%2)</translation> </message> <message> <location filename="../SnapmaticEditor.ui" line="136"/> - <location filename="../SnapmaticEditor.cpp" line="189"/> - <location filename="../SnapmaticEditor.cpp" line="193"/> + <location filename="../SnapmaticEditor.cpp" line="200"/> + <location filename="../SnapmaticEditor.cpp" line="204"/> <source>Appropriate: %1</source> <translation>Angemessen: %1</translation> </message> @@ -1972,41 +2055,54 @@ Exportieren als:</translation> <translation type="vanished">Cancel</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="184"/> - <location filename="../SnapmaticEditor.cpp" line="199"/> + <location filename="../SnapmaticEditor.cpp" line="195"/> + <location filename="../SnapmaticEditor.cpp" line="210"/> <source>Edit</source> <translation>Bearbeiten</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="189"/> + <location filename="../SnapmaticEditor.cpp" line="200"/> <source>Yes</source> <comment>Yes, should work fine</comment> <translation>Ja</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="193"/> + <location filename="../SnapmaticEditor.cpp" line="204"/> <source>No</source> <comment>No, could lead to issues</comment> <translation>Nein</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="727"/> - <location filename="../SnapmaticEditor.cpp" line="241"/> + <location filename="../JsonEditorDialog.cpp" line="83"/> + <source><h4>Unsaved changes detected</h4>You want to save the JSON content before you quit?</source> + <translation><h4>Ungespeicherte Änderungen erkannt</h4>Möchtest du den JSON Inhalt speichern bevor du verlässt?</translation> + </message> + <message> + <location filename="../JsonEditorDialog.cpp" line="130"/> + <location filename="../JsonEditorDialog.cpp" line="148"/> + <source>Patching of Snapmatic Properties failed because of JSON Error</source> + <translation>Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen JSON Fehler</translation> + </message> + <message> + <location filename="../JsonEditorDialog.cpp" line="136"/> + <location filename="../PictureDialog.cpp" line="732"/> + <location filename="../SnapmaticEditor.cpp" line="252"/> + <location filename="../SnapmaticWidget.cpp" line="332"/> <source>Patching of Snapmatic Properties failed because of I/O Error</source> <translation>Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen I/O Fehler</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="291"/> + <location filename="../SnapmaticEditor.cpp" line="302"/> <source>New Snapmatic title:</source> <translation>Neuer Snapmatic Titel:</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="320"/> + <location filename="../SnapmaticEditor.cpp" line="331"/> <source>Snapmatic Crew</source> <translation>Snapmatic Crew</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="320"/> + <location filename="../SnapmaticEditor.cpp" line="331"/> <source>New Snapmatic crew:</source> <translation>Neue Snapmatic Crew:</translation> </message> @@ -2053,18 +2149,18 @@ Exportieren als:</translation> </message> <message> <location filename="../SnapmaticWidget.ui" line="152"/> - <location filename="../SnapmaticWidget.cpp" line="144"/> - <location filename="../SnapmaticWidget.cpp" line="153"/> + <location filename="../SnapmaticWidget.cpp" line="146"/> + <location filename="../SnapmaticWidget.cpp" line="155"/> <source>Delete picture</source> <translation>Bild löschen</translation> </message> <message> - <location filename="../SnapmaticWidget.cpp" line="144"/> + <location filename="../SnapmaticWidget.cpp" line="146"/> <source>Are you sure to delete %1 from your Snapmatic pictures?</source> <translation>Bist du sicher %1 von deine Snapmatic Bilder zu löschen?</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1151"/> + <location filename="../ProfileInterface.cpp" line="1155"/> <source>Edi&t</source> <translation>Bearbei&ten</translation> </message> @@ -2077,7 +2173,7 @@ Exportieren als:</translation> <translation type="vanished">&Im Spiel deaktivieren</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1161"/> + <location filename="../ProfileInterface.cpp" line="1168"/> <source>&Export</source> <translation>&Exportieren</translation> </message> @@ -2090,12 +2186,12 @@ Exportieren als:</translation> <translation type="obsolete">Exportiere als &GTA Snapmatic</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1154"/> + <location filename="../ProfileInterface.cpp" line="1158"/> <source>Show &In-game</source> <translation>&Im Spiel anzeigen</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1158"/> + <location filename="../ProfileInterface.cpp" line="1162"/> <source>Hide &In-game</source> <translation>&Im Spiel ausblenden</translation> </message> @@ -2128,32 +2224,32 @@ Exportieren als:</translation> <translation type="vanished">Exportiere als &Snapmatic...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1164"/> + <location filename="../ProfileInterface.cpp" line="1171"/> <source>&View</source> <translation>A&nsehen</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1167"/> + <location filename="../ProfileInterface.cpp" line="1174"/> <source>&Remove</source> <translation>Entfe&rnen</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1169"/> + <location filename="../ProfileInterface.cpp" line="1176"/> <source>&Select</source> <translation>Au&swählen</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1170"/> + <location filename="../ProfileInterface.cpp" line="1177"/> <source>&Deselect</source> <translation>A&bwählen</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1173"/> + <location filename="../ProfileInterface.cpp" line="1180"/> <source>Select &All</source> <translation>Alles &auswählen</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1177"/> + <location filename="../ProfileInterface.cpp" line="1184"/> <source>&Deselect All</source> <translation>Alles a&bwählen</translation> </message> @@ -2201,7 +2297,7 @@ Exportieren als:</translation> <translation type="obsolete">Bist du sicher %1 von deinen Snapmatic Bilder zu löschen?</translation> </message> <message> - <location filename="../SnapmaticWidget.cpp" line="153"/> + <location filename="../SnapmaticWidget.cpp" line="155"/> <source>Failed at deleting %1 from your Snapmatic pictures</source> <translation>Fehlgeschlagen beim Löschen von %1 von deinen Snapmatic Bildern</translation> </message> @@ -2499,7 +2595,7 @@ Exportieren als:</translation> </message> <message> <location filename="../UserInterface.ui" line="312"/> - <location filename="../OptionsDialog.cpp" line="491"/> + <location filename="../OptionsDialog.cpp" line="564"/> <location filename="../UserInterface.cpp" line="103"/> <location filename="../UserInterface.cpp" line="523"/> <source>Select GTA V Folder...</source> diff --git a/res/gta5sync_en_US.qm b/res/gta5sync_en_US.qm index a017ab7..f097a03 100644 Binary files a/res/gta5sync_en_US.qm and b/res/gta5sync_en_US.qm differ diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index cc2c4b6..46170db 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -114,6 +114,7 @@ Pictures and Savegames</source> <name>CrewDatabase</name> <message> <location filename="../CrewDatabase.cpp" line="102"/> + <location filename="../CrewDatabase.cpp" line="113"/> <source>No Crew</source> <translation></translation> </message> @@ -237,12 +238,14 @@ Pictures and Savegames</source> </message> <message> <location filename="../ImportDialog.cpp" line="105"/> + <location filename="../ProfileInterface.cpp" line="599"/> <source>Custom Avatar</source> <comment>Custom Avatar Description in SC, don't use Special Character!</comment> <translation type="unfinished"></translation> </message> <message> <location filename="../ImportDialog.cpp" line="131"/> + <location filename="../ProfileInterface.cpp" line="618"/> <source>Custom Picture</source> <comment>Custom Picture Description in SC, don't use Special Character!</comment> <translation type="unfinished"></translation> @@ -264,6 +267,24 @@ When you want to use it as Avatar the image will be detached!</source> <translation>Select Color...</translation> </message> </context> +<context> + <name>JsonEditorDialog</name> + <message> + <location filename="../JsonEditorDialog.ui" line="14"/> + <source>Snapmatic JSON Editor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../JsonEditorDialog.ui" line="107"/> + <source>&Save</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../JsonEditorDialog.ui" line="114"/> + <source>&Close</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>MapLocationDialog</name> <message> @@ -297,7 +318,7 @@ When you want to use it as Avatar the image will be detached!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../MapLocationDialog.cpp" line="89"/> + <location filename="../MapLocationDialog.cpp" line="90"/> <source>X: %1 Y: %2</source> <comment>X and Y position</comment> @@ -437,106 +458,131 @@ Y: %2</source> <source>Name</source> <translation></translation> </message> + <message> + <location filename="../OptionsDialog.ui" line="412"/> + <source>Language for Areas</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="431"/> + <source>Style</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="449"/> + <source>Style:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="474"/> + <source>Font</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="480"/> + <source>Always use Message Font (Windows 2003 and earlier)</source> + <translation type="unfinished"></translation> + </message> <message> <location filename="../OptionsDialog.ui" line="387"/> - <source>Language</source> - <translation></translation> + <source>Interface</source> + <translation type="unfinished"></translation> </message> <message> <location filename="../OptionsDialog.ui" line="393"/> - <source>Interface</source> + <source>Language for Interface</source> <translation type="unfinished"></translation> </message> <message> <location filename="../OptionsDialog.ui" line="402"/> <location filename="../OptionsDialog.ui" line="421"/> - <location filename="../OptionsDialog.cpp" line="167"/> - <location filename="../OptionsDialog.cpp" line="215"/> + <location filename="../OptionsDialog.cpp" line="169"/> + <location filename="../OptionsDialog.cpp" line="217"/> <source>Current: %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="412"/> - <source>Areas</source> + <location filename="../OptionsDialog.ui" line="437"/> + <source>Use Default Style (Restart)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="445"/> + <location filename="../OptionsDialog.ui" line="504"/> <source>Sync</source> <translation></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="451"/> + <location filename="../OptionsDialog.ui" line="510"/> <source>Sync is not implemented at current time</source> <translation></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="489"/> + <location filename="../OptionsDialog.ui" line="548"/> <source>Apply changes</source> <translation></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="492"/> + <location filename="../OptionsDialog.ui" line="551"/> <source>&OK</source> <extracomment>OK, Cancel, Apply</extracomment> <translation></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="505"/> + <location filename="../OptionsDialog.ui" line="564"/> <source>Discard changes</source> <translation></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="508"/> + <location filename="../OptionsDialog.ui" line="567"/> <source>&Cancel</source> <extracomment>OK, Cancel, Apply</extracomment> <translation></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="131"/> + <location filename="../OptionsDialog.cpp" line="133"/> <source>%1 (Next Closest Language)</source> <comment>First language a person can talk with a different person/application. "Native" or "Not Native".</comment> <translation></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="131"/> + <location filename="../OptionsDialog.cpp" line="133"/> <source>System</source> <comment>System in context of System default</comment> <translation></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="133"/> + <location filename="../OptionsDialog.cpp" line="135"/> <source>%1 (Closest to Interface)</source> <comment>Next closest language compared to the Interface</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="133"/> + <location filename="../OptionsDialog.cpp" line="135"/> <source>Auto</source> <comment>Automatic language choice.</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="335"/> + <location filename="../OptionsDialog.cpp" line="408"/> <source>%1</source> <comment>%1</comment> <translation></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="335"/> + <location filename="../OptionsDialog.cpp" line="408"/> <source>The new Custom Folder will initialise after you restart %1.</source> <translation>The new Custom Folder will initialize after you restart %1.</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="345"/> + <location filename="../OptionsDialog.cpp" line="418"/> <source>No Profile</source> <comment>No Profile, as default</comment> <translation></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="353"/> - <location filename="../OptionsDialog.cpp" line="357"/> - <location filename="../OptionsDialog.cpp" line="359"/> + <location filename="../OptionsDialog.cpp" line="426"/> + <location filename="../OptionsDialog.cpp" line="430"/> + <location filename="../OptionsDialog.cpp" line="432"/> <source>Profile: %1</source> <translation></translation> </message> @@ -577,66 +623,67 @@ Y: %2</source> <translation></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="145"/> - <location filename="../ProfileInterface.cpp" line="1162"/> + <location filename="../PictureDialog.cpp" line="148"/> + <location filename="../ProfileInterface.cpp" line="1169"/> <source>Export as &Picture...</source> <translation></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="146"/> - <location filename="../ProfileInterface.cpp" line="1163"/> + <location filename="../PictureDialog.cpp" line="149"/> + <location filename="../ProfileInterface.cpp" line="1170"/> <source>Export as &Snapmatic...</source> <translation></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="148"/> - <source>Open &Map View...</source> - <translation></translation> - </message> - <message> - <location filename="../PictureDialog.cpp" line="150"/> - <location filename="../ProfileInterface.cpp" line="1160"/> + <location filename="../PictureDialog.cpp" line="151"/> + <location filename="../ProfileInterface.cpp" line="1164"/> <source>&Edit Properties...</source> <translation></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="373"/> + <location filename="../PictureDialog.cpp" line="153"/> + <location filename="../ProfileInterface.cpp" line="1166"/> + <source>Open &Map Viewer...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../PictureDialog.cpp" line="380"/> <source>Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate</source> <translation></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="433"/> - <location filename="../PictureDialog.cpp" line="476"/> + <location filename="../PictureDialog.cpp" line="439"/> + <location filename="../PictureDialog.cpp" line="473"/> <source>Snapmatic Picture Viewer</source> <translation></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="433"/> - <location filename="../PictureDialog.cpp" line="476"/> + <location filename="../PictureDialog.cpp" line="439"/> + <location filename="../PictureDialog.cpp" line="473"/> <source>Failed at %1</source> <translation></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="475"/> - <location filename="../PictureDialog.cpp" line="614"/> + <location filename="../PictureDialog.cpp" line="472"/> + <location filename="../PictureDialog.cpp" line="618"/> <source>No Players</source> <translation></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="475"/> - <location filename="../PictureDialog.cpp" line="589"/> + <location filename="../PictureDialog.cpp" line="472"/> + <location filename="../PictureDialog.cpp" line="591"/> <source>No Crew</source> <translation></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="475"/> + <location filename="../PictureDialog.cpp" line="472"/> <source>Unknown Location</source> <translation></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="560"/> + <location filename="../PictureDialog.cpp" line="557"/> <source>Avatar Preview Mode Press 1 for Default View</source> <translation></translation> @@ -744,6 +791,12 @@ Press 1 for Default View</source> <source>Exported Snapmatic to "%1" because of using the .auto extension.</source> <translation></translation> </message> + <message> + <location filename="../PictureDialog.cpp" line="155"/> + <location filename="../ProfileInterface.cpp" line="1167"/> + <source>Open &JSON Editor...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>ProfileInterface</name> @@ -790,207 +843,207 @@ Press 1 for Default View</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="65"/> + <location filename="../ProfileInterface.cpp" line="68"/> <source>Enabled pictures: %1 of %2</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="131"/> + <location filename="../ProfileInterface.cpp" line="134"/> <source>Loading...</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="413"/> - <location filename="../ProfileInterface.cpp" line="478"/> + <location filename="../ProfileInterface.cpp" line="416"/> + <location filename="../ProfileInterface.cpp" line="483"/> <source>Import...</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="414"/> - <location filename="../ProfileInterface.cpp" line="457"/> - <location filename="../ProfileInterface.cpp" line="509"/> - <location filename="../ProfileInterface.cpp" line="529"/> - <location filename="../ProfileInterface.cpp" line="545"/> - <location filename="../ProfileInterface.cpp" line="661"/> - <location filename="../ProfileInterface.cpp" line="742"/> - <location filename="../ProfileInterface.cpp" line="747"/> - <location filename="../ProfileInterface.cpp" line="757"/> - <location filename="../ProfileInterface.cpp" line="762"/> - <location filename="../ProfileInterface.cpp" line="773"/> - <location filename="../ProfileInterface.cpp" line="810"/> - <location filename="../ProfileInterface.cpp" line="816"/> + <location filename="../ProfileInterface.cpp" line="417"/> + <location filename="../ProfileInterface.cpp" line="462"/> + <location filename="../ProfileInterface.cpp" line="515"/> + <location filename="../ProfileInterface.cpp" line="535"/> + <location filename="../ProfileInterface.cpp" line="551"/> + <location filename="../ProfileInterface.cpp" line="666"/> + <location filename="../ProfileInterface.cpp" line="746"/> + <location filename="../ProfileInterface.cpp" line="751"/> + <location filename="../ProfileInterface.cpp" line="761"/> + <location filename="../ProfileInterface.cpp" line="766"/> + <location filename="../ProfileInterface.cpp" line="777"/> + <location filename="../ProfileInterface.cpp" line="814"/> + <location filename="../ProfileInterface.cpp" line="820"/> <source>Import</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="429"/> + <location filename="../ProfileInterface.cpp" line="432"/> <source>Importable files (%1)</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="430"/> + <location filename="../ProfileInterface.cpp" line="433"/> <location filename="../UserInterface.cpp" line="375"/> <source>GTA V Export (*.g5e)</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="431"/> + <location filename="../ProfileInterface.cpp" line="434"/> <location filename="../UserInterface.cpp" line="376"/> <source>Savegames files (SGTA*)</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="432"/> + <location filename="../ProfileInterface.cpp" line="435"/> <location filename="../UserInterface.cpp" line="377"/> <source>Snapmatic pictures (PGTA*)</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="433"/> + <location filename="../ProfileInterface.cpp" line="436"/> <source>All image files (%1)</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="434"/> + <location filename="../ProfileInterface.cpp" line="437"/> <location filename="../UserInterface.cpp" line="378"/> <source>All files (**)</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="457"/> - <location filename="../ProfileInterface.cpp" line="747"/> + <location filename="../ProfileInterface.cpp" line="462"/> + <location filename="../ProfileInterface.cpp" line="751"/> <location filename="../UserInterface.cpp" line="466"/> <source>No valid file is selected</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="479"/> - <location filename="../ProfileInterface.cpp" line="494"/> + <location filename="../ProfileInterface.cpp" line="484"/> + <location filename="../ProfileInterface.cpp" line="499"/> <source>Import file %1 of %2 files</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="509"/> + <location filename="../ProfileInterface.cpp" line="515"/> <source>Import failed with... %1</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="529"/> + <location filename="../ProfileInterface.cpp" line="535"/> <location filename="../UserInterface.cpp" line="418"/> <source>Failed to read Snapmatic picture</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="545"/> + <location filename="../ProfileInterface.cpp" line="551"/> <location filename="../UserInterface.cpp" line="434"/> <source>Failed to read Savegame file</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="661"/> + <location filename="../ProfileInterface.cpp" line="666"/> <source>Can't import %1 because file can't be parsed properly</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="742"/> + <location filename="../ProfileInterface.cpp" line="746"/> <source>Can't import %1 because file format can't be detected</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="757"/> + <location filename="../ProfileInterface.cpp" line="761"/> <source>Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="762"/> + <location filename="../ProfileInterface.cpp" line="766"/> <source>Failed to import the Snapmatic picture, the picture is already in the game</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="773"/> + <location filename="../ProfileInterface.cpp" line="777"/> <source>Failed to import the Snapmatic picture, can't copy the file into profile</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="810"/> + <location filename="../ProfileInterface.cpp" line="814"/> <source>Failed to import the Savegame, can't copy the file into profile</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="816"/> + <location filename="../ProfileInterface.cpp" line="820"/> <source>Failed to import the Savegame, no Savegame slot is left</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="880"/> - <location filename="../ProfileInterface.cpp" line="918"/> - <location filename="../ProfileInterface.cpp" line="997"/> - <location filename="../ProfileInterface.cpp" line="1017"/> + <location filename="../ProfileInterface.cpp" line="884"/> + <location filename="../ProfileInterface.cpp" line="922"/> + <location filename="../ProfileInterface.cpp" line="1001"/> + <location filename="../ProfileInterface.cpp" line="1021"/> <source>Export selected</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="903"/> - <location filename="../ProfileInterface.cpp" line="921"/> + <location filename="../ProfileInterface.cpp" line="907"/> + <location filename="../ProfileInterface.cpp" line="925"/> <source>JPG pictures and GTA Snapmatic</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="904"/> - <location filename="../ProfileInterface.cpp" line="926"/> + <location filename="../ProfileInterface.cpp" line="908"/> + <location filename="../ProfileInterface.cpp" line="930"/> <source>JPG pictures only</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="905"/> - <location filename="../ProfileInterface.cpp" line="930"/> + <location filename="../ProfileInterface.cpp" line="909"/> + <location filename="../ProfileInterface.cpp" line="934"/> <source>GTA Snapmatic only</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="918"/> + <location filename="../ProfileInterface.cpp" line="922"/> <source>%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:</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="963"/> + <location filename="../ProfileInterface.cpp" line="967"/> <source>Export selected...</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="964"/> + <location filename="../ProfileInterface.cpp" line="968"/> <source>Initialising export...</source> <translation>Initializing export...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="997"/> + <location filename="../ProfileInterface.cpp" line="1001"/> <source>Export failed with... %1</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1017"/> - <location filename="../ProfileInterface.cpp" line="1059"/> + <location filename="../ProfileInterface.cpp" line="1021"/> + <location filename="../ProfileInterface.cpp" line="1063"/> <source>No Snapmatic pictures or Savegames files are selected</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1025"/> - <location filename="../ProfileInterface.cpp" line="1053"/> - <location filename="../ProfileInterface.cpp" line="1059"/> + <location filename="../ProfileInterface.cpp" line="1029"/> + <location filename="../ProfileInterface.cpp" line="1057"/> + <location filename="../ProfileInterface.cpp" line="1063"/> <source>Remove selected</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1025"/> + <location filename="../ProfileInterface.cpp" line="1029"/> <source>You really want remove the selected Snapmatic picutres and Savegame files?</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1053"/> + <location filename="../ProfileInterface.cpp" line="1057"/> <source>Failed at remove the complete selected Snapmatic pictures and/or Savegame files</source> <translation></translation> </message> @@ -1003,15 +1056,20 @@ Press 1 for Default View</source> <context> <name>QApplication</name> <message> - <location filename="../main.cpp" line="67"/> + <location filename="../main.cpp" line="87"/> <source>Font</source> <translation></translation> </message> <message> - <location filename="../main.cpp" line="67"/> + <location filename="../main.cpp" line="87"/> <source>Selected Font: %1</source> <translation></translation> </message> + <message> + <location filename="../main.cpp" line="108"/> + <source><h4>Welcome to %1!</h4>You want to configure %1 before you start using it?</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>SavegameDialog</name> @@ -1086,37 +1144,37 @@ Press 1 for Default View</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1198"/> + <location filename="../ProfileInterface.cpp" line="1205"/> <source>&View</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1199"/> + <location filename="../ProfileInterface.cpp" line="1206"/> <source>&Export</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1200"/> + <location filename="../ProfileInterface.cpp" line="1207"/> <source>&Remove</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1202"/> + <location filename="../ProfileInterface.cpp" line="1209"/> <source>&Select</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1203"/> + <location filename="../ProfileInterface.cpp" line="1210"/> <source>&Deselect</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1206"/> + <location filename="../ProfileInterface.cpp" line="1213"/> <source>Select &All</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1210"/> + <location filename="../ProfileInterface.cpp" line="1217"/> <source>&Deselect All</source> <translation></translation> </message> @@ -1210,8 +1268,13 @@ Press 1 for Default View</source> <message> <location filename="../SnapmaticEditor.ui" line="14"/> <location filename="../SnapmaticEditor.ui" line="81"/> - <location filename="../PictureDialog.cpp" line="727"/> - <location filename="../SnapmaticEditor.cpp" line="241"/> + <location filename="../JsonEditorDialog.cpp" line="83"/> + <location filename="../JsonEditorDialog.cpp" line="130"/> + <location filename="../JsonEditorDialog.cpp" line="136"/> + <location filename="../JsonEditorDialog.cpp" line="148"/> + <location filename="../PictureDialog.cpp" line="732"/> + <location filename="../SnapmaticEditor.cpp" line="252"/> + <location filename="../SnapmaticWidget.cpp" line="332"/> <source>Snapmatic Properties</source> <translation></translation> </message> @@ -1257,20 +1320,20 @@ Press 1 for Default View</source> </message> <message> <location filename="../SnapmaticEditor.ui" line="113"/> - <location filename="../SnapmaticEditor.cpp" line="200"/> + <location filename="../SnapmaticEditor.cpp" line="211"/> <source>Crew: %1 (%2)</source> <translation></translation> </message> <message> <location filename="../SnapmaticEditor.ui" line="126"/> - <location filename="../SnapmaticEditor.cpp" line="185"/> + <location filename="../SnapmaticEditor.cpp" line="196"/> <source>Title: %1 (%2)</source> <translation></translation> </message> <message> <location filename="../SnapmaticEditor.ui" line="136"/> - <location filename="../SnapmaticEditor.cpp" line="189"/> - <location filename="../SnapmaticEditor.cpp" line="193"/> + <location filename="../SnapmaticEditor.cpp" line="200"/> + <location filename="../SnapmaticEditor.cpp" line="204"/> <source>Appropriate: %1</source> <translation></translation> </message> @@ -1300,46 +1363,59 @@ Press 1 for Default View</source> <translation></translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="184"/> - <location filename="../SnapmaticEditor.cpp" line="199"/> + <location filename="../SnapmaticEditor.cpp" line="195"/> + <location filename="../SnapmaticEditor.cpp" line="210"/> <source>Edit</source> <translation></translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="189"/> + <location filename="../SnapmaticEditor.cpp" line="200"/> <source>Yes</source> <comment>Yes, should work fine</comment> <translation></translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="193"/> + <location filename="../SnapmaticEditor.cpp" line="204"/> <source>No</source> <comment>No, could lead to issues</comment> <translation></translation> </message> <message> - <location filename="../PictureDialog.cpp" line="727"/> - <location filename="../SnapmaticEditor.cpp" line="241"/> + <location filename="../JsonEditorDialog.cpp" line="83"/> + <source><h4>Unsaved changes detected</h4>You want to save the JSON content before you quit?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../JsonEditorDialog.cpp" line="130"/> + <location filename="../JsonEditorDialog.cpp" line="148"/> + <source>Patching of Snapmatic Properties failed because of JSON Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../JsonEditorDialog.cpp" line="136"/> + <location filename="../PictureDialog.cpp" line="732"/> + <location filename="../SnapmaticEditor.cpp" line="252"/> + <location filename="../SnapmaticWidget.cpp" line="332"/> <source>Patching of Snapmatic Properties failed because of I/O Error</source> <translation></translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="291"/> + <location filename="../SnapmaticEditor.cpp" line="302"/> <source>Snapmatic Title</source> <translation></translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="291"/> + <location filename="../SnapmaticEditor.cpp" line="302"/> <source>New Snapmatic title:</source> <translation></translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="320"/> + <location filename="../SnapmaticEditor.cpp" line="331"/> <source>Snapmatic Crew</source> <translation></translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="320"/> + <location filename="../SnapmaticEditor.cpp" line="331"/> <source>New Snapmatic crew:</source> <translation></translation> </message> @@ -1396,8 +1472,8 @@ Press 1 for Default View</source> </message> <message> <location filename="../SnapmaticWidget.ui" line="152"/> - <location filename="../SnapmaticWidget.cpp" line="144"/> - <location filename="../SnapmaticWidget.cpp" line="153"/> + <location filename="../SnapmaticWidget.cpp" line="146"/> + <location filename="../SnapmaticWidget.cpp" line="155"/> <source>Delete picture</source> <translation></translation> </message> @@ -1407,62 +1483,62 @@ Press 1 for Default View</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1151"/> + <location filename="../ProfileInterface.cpp" line="1155"/> <source>Edi&t</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1154"/> + <location filename="../ProfileInterface.cpp" line="1158"/> <source>Show &In-game</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1158"/> + <location filename="../ProfileInterface.cpp" line="1162"/> <source>Hide &In-game</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1161"/> + <location filename="../ProfileInterface.cpp" line="1168"/> <source>&Export</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1164"/> + <location filename="../ProfileInterface.cpp" line="1171"/> <source>&View</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1167"/> + <location filename="../ProfileInterface.cpp" line="1174"/> <source>&Remove</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1169"/> + <location filename="../ProfileInterface.cpp" line="1176"/> <source>&Select</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1170"/> + <location filename="../ProfileInterface.cpp" line="1177"/> <source>&Deselect</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1173"/> + <location filename="../ProfileInterface.cpp" line="1180"/> <source>Select &All</source> <translation></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1177"/> + <location filename="../ProfileInterface.cpp" line="1184"/> <source>&Deselect All</source> <translation></translation> </message> <message> - <location filename="../SnapmaticWidget.cpp" line="144"/> + <location filename="../SnapmaticWidget.cpp" line="146"/> <source>Are you sure to delete %1 from your Snapmatic pictures?</source> <translation></translation> </message> <message> - <location filename="../SnapmaticWidget.cpp" line="153"/> + <location filename="../SnapmaticWidget.cpp" line="155"/> <source>Failed at deleting %1 from your Snapmatic pictures</source> <translation></translation> </message> @@ -1646,7 +1722,7 @@ Press 1 for Default View</source> </message> <message> <location filename="../UserInterface.ui" line="312"/> - <location filename="../OptionsDialog.cpp" line="491"/> + <location filename="../OptionsDialog.cpp" line="564"/> <location filename="../UserInterface.cpp" line="103"/> <location filename="../UserInterface.cpp" line="523"/> <source>Select GTA V Folder...</source> diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index 1750a3e..53ccfdd 100644 Binary files a/res/gta5sync_fr.qm and b/res/gta5sync_fr.qm differ 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</translation> <name>CrewDatabase</name> <message> <location filename="../CrewDatabase.cpp" line="102"/> + <location filename="../CrewDatabase.cpp" line="113"/> <source>No Crew</source> <translation>Aucun crew</translation> </message> @@ -362,12 +363,14 @@ et les fichiers de sauvegarde de Grand Theft Auto V</translation> </message> <message> <location filename="../ImportDialog.cpp" line="105"/> + <location filename="../ProfileInterface.cpp" line="599"/> <source>Custom Avatar</source> <comment>Custom Avatar Description in SC, don't use Special Character!</comment> <translation type="unfinished"></translation> </message> <message> <location filename="../ImportDialog.cpp" line="131"/> + <location filename="../ProfileInterface.cpp" line="618"/> <source>Custom Picture</source> <comment>Custom Picture Description in SC, don't use Special Character!</comment> <translation type="unfinished"></translation> @@ -389,6 +392,24 @@ When you want to use it as Avatar the image will be detached!</source> <translation type="unfinished"></translation> </message> </context> +<context> + <name>JsonEditorDialog</name> + <message> + <location filename="../JsonEditorDialog.ui" line="14"/> + <source>Snapmatic JSON Editor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../JsonEditorDialog.ui" line="107"/> + <source>&Save</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../JsonEditorDialog.ui" line="114"/> + <source>&Close</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>MapLocationDialog</name> <message> @@ -422,7 +443,7 @@ When you want to use it as Avatar the image will be detached!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../MapLocationDialog.cpp" line="89"/> + <location filename="../MapLocationDialog.cpp" line="90"/> <source>X: %1 Y: %2</source> <comment>X and Y position</comment> @@ -570,56 +591,85 @@ Y: %2</source> <translation>Nom</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="387"/> + <location filename="../OptionsDialog.ui" line="412"/> + <source>Language for Areas</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="431"/> + <source>Style</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="449"/> + <source>Style:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="474"/> + <source>Font</source> + <translation type="unfinished">Police</translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="480"/> + <source>Always use Message Font (Windows 2003 and earlier)</source> + <translation type="unfinished"></translation> + </message> + <message> <source>Language</source> - <translation>Langue</translation> + <translation type="vanished">Langue</translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="387"/> + <source>Interface</source> + <translation type="unfinished"></translation> </message> <message> <location filename="../OptionsDialog.ui" line="393"/> - <source>Interface</source> + <source>Language for Interface</source> <translation type="unfinished"></translation> </message> <message> <location filename="../OptionsDialog.ui" line="402"/> <location filename="../OptionsDialog.ui" line="421"/> - <location filename="../OptionsDialog.cpp" line="167"/> - <location filename="../OptionsDialog.cpp" line="215"/> + <location filename="../OptionsDialog.cpp" line="169"/> + <location filename="../OptionsDialog.cpp" line="217"/> <source>Current: %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="412"/> - <source>Areas</source> + <location filename="../OptionsDialog.ui" line="437"/> + <source>Use Default Style (Restart)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="445"/> + <location filename="../OptionsDialog.ui" line="504"/> <source>Sync</source> <translation>Synchronisation</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="451"/> + <location filename="../OptionsDialog.ui" line="510"/> <source>Sync is not implemented at current time</source> <translation>La synchronisation n'est pas encore implémentée</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="489"/> + <location filename="../OptionsDialog.ui" line="548"/> <source>Apply changes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="492"/> + <location filename="../OptionsDialog.ui" line="551"/> <source>&OK</source> <extracomment>OK, Cancel, Apply</extracomment> <translation>&OK</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="505"/> + <location filename="../OptionsDialog.ui" line="564"/> <source>Discard changes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="508"/> + <location filename="../OptionsDialog.ui" line="567"/> <source>&Cancel</source> <extracomment>OK, Cancel, Apply</extracomment> <translation>&Annuler</translation> @@ -635,37 +685,37 @@ Y: %2</source> <translation type="vanished">Système</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="131"/> + <location filename="../OptionsDialog.cpp" line="133"/> <source>%1 (Next Closest Language)</source> <comment>First language a person can talk with a different person/application. "Native" or "Not Native".</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="131"/> + <location filename="../OptionsDialog.cpp" line="133"/> <source>System</source> <comment>System in context of System default</comment> <translation>Système</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="133"/> + <location filename="../OptionsDialog.cpp" line="135"/> <source>%1 (Closest to Interface)</source> <comment>Next closest language compared to the Interface</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="133"/> + <location filename="../OptionsDialog.cpp" line="135"/> <source>Auto</source> <comment>Automatic language choice.</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="335"/> + <location filename="../OptionsDialog.cpp" line="408"/> <source>%1</source> <comment>%1</comment> <translation>%1</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="335"/> + <location filename="../OptionsDialog.cpp" line="408"/> <source>The new Custom Folder will initialise after you restart %1.</source> <translation type="unfinished"></translation> </message> @@ -678,15 +728,15 @@ Y: %2</source> <translation type="vanished">Le changement de langue sera actif au prochain lancement de %1.</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="345"/> + <location filename="../OptionsDialog.cpp" line="418"/> <source>No Profile</source> <comment>No Profile, as default</comment> <translation>Aucun profil</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="353"/> - <location filename="../OptionsDialog.cpp" line="357"/> - <location filename="../OptionsDialog.cpp" line="359"/> + <location filename="../OptionsDialog.cpp" line="426"/> + <location filename="../OptionsDialog.cpp" line="430"/> + <location filename="../OptionsDialog.cpp" line="432"/> <source>Profile: %1</source> <translation>Profil : %1</translation> </message> @@ -852,8 +902,8 @@ Y: %2</source> <translation type="vanished">Exporter comme image &JPG...</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="145"/> - <location filename="../ProfileInterface.cpp" line="1162"/> + <location filename="../PictureDialog.cpp" line="148"/> + <location filename="../ProfileInterface.cpp" line="1169"/> <source>Export as &Picture...</source> <translation type="unfinished"></translation> </message> @@ -862,8 +912,8 @@ Y: %2</source> <translation type="vanished">Exporter comme &GTA Snapmatic...</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="146"/> - <location filename="../ProfileInterface.cpp" line="1163"/> + <location filename="../PictureDialog.cpp" line="149"/> + <location filename="../ProfileInterface.cpp" line="1170"/> <source>Export as &Snapmatic...</source> <translation type="unfinished"></translation> </message> @@ -872,18 +922,19 @@ Y: %2</source> <translation type="obsolete">Édi&ter</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="148"/> - <source>Open &Map View...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../PictureDialog.cpp" line="150"/> - <location filename="../ProfileInterface.cpp" line="1160"/> + <location filename="../PictureDialog.cpp" line="151"/> + <location filename="../ProfileInterface.cpp" line="1164"/> <source>&Edit Properties...</source> <translation>Modifier les &propriétés...</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="373"/> + <location filename="../PictureDialog.cpp" line="153"/> + <location filename="../ProfileInterface.cpp" line="1166"/> + <source>Open &Map Viewer...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../PictureDialog.cpp" line="380"/> <source>Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate</source> @@ -892,31 +943,31 @@ Touche 2 - Activer/désactiver l'overlay Touches fléchées - Naviguer</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="433"/> - <location filename="../PictureDialog.cpp" line="476"/> + <location filename="../PictureDialog.cpp" line="439"/> + <location filename="../PictureDialog.cpp" line="473"/> <source>Snapmatic Picture Viewer</source> <translation>Visionneuse de photo Snapmatic</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="433"/> - <location filename="../PictureDialog.cpp" line="476"/> + <location filename="../PictureDialog.cpp" line="439"/> + <location filename="../PictureDialog.cpp" line="473"/> <source>Failed at %1</source> <translation>Echec de %1</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="475"/> - <location filename="../PictureDialog.cpp" line="589"/> + <location filename="../PictureDialog.cpp" line="472"/> + <location filename="../PictureDialog.cpp" line="591"/> <source>No Crew</source> <translation>Aucun crew</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="475"/> - <location filename="../PictureDialog.cpp" line="614"/> + <location filename="../PictureDialog.cpp" line="472"/> + <location filename="../PictureDialog.cpp" line="618"/> <source>No Players</source> <translation>Aucun joueurs</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="560"/> + <location filename="../PictureDialog.cpp" line="557"/> <source>Avatar Preview Mode Press 1 for Default View</source> <translation>Mode Aperçu Avatar @@ -935,7 +986,7 @@ Appuyer sur 1 pour le mode par défaut</translation> <translation type="vanished">Aucun crew</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="475"/> + <location filename="../PictureDialog.cpp" line="472"/> <source>Unknown Location</source> <translation>Emplacement inconnu</translation> </message> @@ -968,6 +1019,12 @@ Appuyer sur 1 pour le mode par défaut</translation> <source>Failed to export current Snapmatic picture</source> <translation>Échec de l'export de la photo Snapmatic</translation> </message> + <message> + <location filename="../PictureDialog.cpp" line="155"/> + <location filename="../ProfileInterface.cpp" line="1167"/> + <source>Open &JSON Editor...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>ProfileInterface</name> @@ -1018,35 +1075,35 @@ Appuyer sur 1 pour le mode par défaut</translation> <translation>Copie du fichier %1 sur %2</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="65"/> + <location filename="../ProfileInterface.cpp" line="68"/> <source>Enabled pictures: %1 of %2</source> <translation>Photos activées : %1 sur %2</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="131"/> + <location filename="../ProfileInterface.cpp" line="134"/> <source>Loading...</source> <translation>Chargement...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="413"/> - <location filename="../ProfileInterface.cpp" line="478"/> + <location filename="../ProfileInterface.cpp" line="416"/> + <location filename="../ProfileInterface.cpp" line="483"/> <source>Import...</source> <translation>Importer...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="414"/> - <location filename="../ProfileInterface.cpp" line="457"/> - <location filename="../ProfileInterface.cpp" line="509"/> - <location filename="../ProfileInterface.cpp" line="529"/> - <location filename="../ProfileInterface.cpp" line="545"/> - <location filename="../ProfileInterface.cpp" line="661"/> - <location filename="../ProfileInterface.cpp" line="742"/> - <location filename="../ProfileInterface.cpp" line="747"/> - <location filename="../ProfileInterface.cpp" line="757"/> - <location filename="../ProfileInterface.cpp" line="762"/> - <location filename="../ProfileInterface.cpp" line="773"/> - <location filename="../ProfileInterface.cpp" line="810"/> - <location filename="../ProfileInterface.cpp" line="816"/> + <location filename="../ProfileInterface.cpp" line="417"/> + <location filename="../ProfileInterface.cpp" line="462"/> + <location filename="../ProfileInterface.cpp" line="515"/> + <location filename="../ProfileInterface.cpp" line="535"/> + <location filename="../ProfileInterface.cpp" line="551"/> + <location filename="../ProfileInterface.cpp" line="666"/> + <location filename="../ProfileInterface.cpp" line="746"/> + <location filename="../ProfileInterface.cpp" line="751"/> + <location filename="../ProfileInterface.cpp" line="761"/> + <location filename="../ProfileInterface.cpp" line="766"/> + <location filename="../ProfileInterface.cpp" line="777"/> + <location filename="../ProfileInterface.cpp" line="814"/> + <location filename="../ProfileInterface.cpp" line="820"/> <source>Import</source> <translation>Importer</translation> </message> @@ -1055,36 +1112,36 @@ Appuyer sur 1 pour le mode par défaut</translation> <translation type="vanished">Fichiers de profil GTA (SGTA* PGTA*)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="431"/> + <location filename="../ProfileInterface.cpp" line="434"/> <location filename="../UserInterface.cpp" line="376"/> <source>Savegames files (SGTA*)</source> <translation>Fichiers de sauvegarde GTA (SGTA*)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="432"/> + <location filename="../ProfileInterface.cpp" line="435"/> <location filename="../UserInterface.cpp" line="377"/> <source>Snapmatic pictures (PGTA*)</source> <translation>Photos Snapmatic (PGTA*)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="433"/> + <location filename="../ProfileInterface.cpp" line="436"/> <source>All image files (%1)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="434"/> + <location filename="../ProfileInterface.cpp" line="437"/> <location filename="../UserInterface.cpp" line="378"/> <source>All files (**)</source> <translation>Tous les fichiers (**)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="479"/> - <location filename="../ProfileInterface.cpp" line="494"/> + <location filename="../ProfileInterface.cpp" line="484"/> + <location filename="../ProfileInterface.cpp" line="499"/> <source>Import file %1 of %2 files</source> <translation>Importation du fichier %1 sur %2</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="509"/> + <location filename="../ProfileInterface.cpp" line="515"/> <source>Import failed with... %1</source> @@ -1093,25 +1150,25 @@ Appuyer sur 1 pour le mode par défaut</translation> %1</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="457"/> - <location filename="../ProfileInterface.cpp" line="747"/> + <location filename="../ProfileInterface.cpp" line="462"/> + <location filename="../ProfileInterface.cpp" line="751"/> <location filename="../UserInterface.cpp" line="466"/> <source>No valid file is selected</source> <translation>Fichier invalide</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="429"/> + <location filename="../ProfileInterface.cpp" line="432"/> <source>Importable files (%1)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="529"/> + <location filename="../ProfileInterface.cpp" line="535"/> <location filename="../UserInterface.cpp" line="418"/> <source>Failed to read Snapmatic picture</source> <translation>Impossible d'ouvrir la photo Snapmatic</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="545"/> + <location filename="../ProfileInterface.cpp" line="551"/> <location filename="../UserInterface.cpp" line="434"/> <source>Failed to read Savegame file</source> <translation>Impossible de lire le fichier de sauvegarde</translation> @@ -1133,78 +1190,78 @@ Appuyer sur 1 pour le mode par défaut</translation> <translation type="vanished">Tous les fichiers image (*.jpg *.png)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="661"/> + <location filename="../ProfileInterface.cpp" line="666"/> <source>Can't import %1 because file can't be parsed properly</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="742"/> + <location filename="../ProfileInterface.cpp" line="746"/> <source>Can't import %1 because file format can't be detected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="757"/> + <location filename="../ProfileInterface.cpp" line="761"/> <source>Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e</source> <translation>Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PGTA*, *.g5e)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="762"/> + <location filename="../ProfileInterface.cpp" line="766"/> <source>Failed to import the Snapmatic picture, the picture is already in the game</source> <translation>Impossible d'importer la photo Snapmatic, un fichier du même nom existe déjà</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="773"/> + <location filename="../ProfileInterface.cpp" line="777"/> <source>Failed to import the Snapmatic picture, can't copy the file into profile</source> <translation>Impossible d'importer la photo Snapmatic, impossible de copier le fichier dans le profil</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="810"/> + <location filename="../ProfileInterface.cpp" line="814"/> <source>Failed to import the Savegame, can't copy the file into profile</source> <translation>Impossible d'importer la sauvegarde, impossible de copier le fichier dans le profil</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="816"/> + <location filename="../ProfileInterface.cpp" line="820"/> <source>Failed to import the Savegame, no Savegame slot is left</source> <translation>Impossible d'importer la sauvegarde, aucun emplacement libre</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="880"/> - <location filename="../ProfileInterface.cpp" line="918"/> - <location filename="../ProfileInterface.cpp" line="997"/> - <location filename="../ProfileInterface.cpp" line="1017"/> + <location filename="../ProfileInterface.cpp" line="884"/> + <location filename="../ProfileInterface.cpp" line="922"/> + <location filename="../ProfileInterface.cpp" line="1001"/> + <location filename="../ProfileInterface.cpp" line="1021"/> <source>Export selected</source> <translation>Exporter la sélection</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="903"/> - <location filename="../ProfileInterface.cpp" line="921"/> + <location filename="../ProfileInterface.cpp" line="907"/> + <location filename="../ProfileInterface.cpp" line="925"/> <source>JPG pictures and GTA Snapmatic</source> <translation>Images JPG et GTA Snapmatic</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="904"/> - <location filename="../ProfileInterface.cpp" line="926"/> + <location filename="../ProfileInterface.cpp" line="908"/> + <location filename="../ProfileInterface.cpp" line="930"/> <source>JPG pictures only</source> <translation>Images JPG seulement</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="905"/> - <location filename="../ProfileInterface.cpp" line="930"/> + <location filename="../ProfileInterface.cpp" line="909"/> + <location filename="../ProfileInterface.cpp" line="934"/> <source>GTA Snapmatic only</source> <translation>GTA Snapmatic seulement</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="918"/> + <location filename="../ProfileInterface.cpp" line="922"/> <source>%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:</source> <translation>%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 :</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="963"/> + <location filename="../ProfileInterface.cpp" line="967"/> <source>Export selected...</source> <translation>Exporter la sélection...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="964"/> + <location filename="../ProfileInterface.cpp" line="968"/> <source>Initialising export...</source> <translation type="unfinished"></translation> </message> @@ -1213,7 +1270,7 @@ Appuyer sur 1 pour le mode par défaut</translation> <translation type="vanished">Initialisation de l'export...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="997"/> + <location filename="../ProfileInterface.cpp" line="1001"/> <source>Export failed with... %1</source> @@ -1222,25 +1279,25 @@ Appuyer sur 1 pour le mode par défaut</translation> %1</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1017"/> - <location filename="../ProfileInterface.cpp" line="1059"/> + <location filename="../ProfileInterface.cpp" line="1021"/> + <location filename="../ProfileInterface.cpp" line="1063"/> <source>No Snapmatic pictures or Savegames files are selected</source> <translation>Aucun fichier de sauvegarde ou photo Snapmatic sélectionné</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1025"/> - <location filename="../ProfileInterface.cpp" line="1053"/> - <location filename="../ProfileInterface.cpp" line="1059"/> + <location filename="../ProfileInterface.cpp" line="1029"/> + <location filename="../ProfileInterface.cpp" line="1057"/> + <location filename="../ProfileInterface.cpp" line="1063"/> <source>Remove selected</source> <translation>Supprimer la sélection</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1025"/> + <location filename="../ProfileInterface.cpp" line="1029"/> <source>You really want remove the selected Snapmatic picutres and Savegame files?</source> <translation>Supprimer la sélection ?</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1053"/> + <location filename="../ProfileInterface.cpp" line="1057"/> <source>Failed at remove the complete selected Snapmatic pictures and/or Savegame files</source> <translation>Impossible de supprimer la sélection</translation> </message> @@ -1250,7 +1307,7 @@ Appuyer sur 1 pour le mode par défaut</translation> <translation>Tous les fichiers de profil (*.g5e SGTA* PGTA*)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="430"/> + <location filename="../ProfileInterface.cpp" line="433"/> <location filename="../UserInterface.cpp" line="375"/> <source>GTA V Export (*.g5e)</source> <translation>GTA V Export (*.g5e)</translation> @@ -1259,15 +1316,20 @@ Appuyer sur 1 pour le mode par défaut</translation> <context> <name>QApplication</name> <message> - <location filename="../main.cpp" line="67"/> + <location filename="../main.cpp" line="87"/> <source>Font</source> <translation>Police</translation> </message> <message> - <location filename="../main.cpp" line="67"/> + <location filename="../main.cpp" line="87"/> <source>Selected Font: %1</source> <translation>Police sélectionnée : %1</translation> </message> + <message> + <location filename="../main.cpp" line="108"/> + <source><h4>Welcome to %1!</h4>You want to configure %1 before you start using it?</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>SavegameDialog</name> @@ -1342,7 +1404,7 @@ Appuyer sur 1 pour le mode par défaut</translation> <translation>Supprimer</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1199"/> + <location filename="../ProfileInterface.cpp" line="1206"/> <source>&Export</source> <translation>&Exporter</translation> </message> @@ -1433,32 +1495,32 @@ Appuyer sur 1 pour le mode par défaut</translation> <translation>Impossible de supprimer %1</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1198"/> + <location filename="../ProfileInterface.cpp" line="1205"/> <source>&View</source> <translation>&Voir</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1200"/> + <location filename="../ProfileInterface.cpp" line="1207"/> <source>&Remove</source> <translation>&Supprimer</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1202"/> + <location filename="../ProfileInterface.cpp" line="1209"/> <source>&Select</source> <translation>&Sélectionner</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1203"/> + <location filename="../ProfileInterface.cpp" line="1210"/> <source>&Deselect</source> <translation>&Déselectionner</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1206"/> + <location filename="../ProfileInterface.cpp" line="1213"/> <source>Select &All</source> <translation>Sélectionner to&ut</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1210"/> + <location filename="../ProfileInterface.cpp" line="1217"/> <source>&Deselect All</source> <translation>&Déselectionner tout</translation> </message> @@ -1468,8 +1530,13 @@ Appuyer sur 1 pour le mode par défaut</translation> <message> <location filename="../SnapmaticEditor.ui" line="14"/> <location filename="../SnapmaticEditor.ui" line="81"/> - <location filename="../PictureDialog.cpp" line="727"/> - <location filename="../SnapmaticEditor.cpp" line="241"/> + <location filename="../JsonEditorDialog.cpp" line="83"/> + <location filename="../JsonEditorDialog.cpp" line="130"/> + <location filename="../JsonEditorDialog.cpp" line="136"/> + <location filename="../JsonEditorDialog.cpp" line="148"/> + <location filename="../PictureDialog.cpp" line="732"/> + <location filename="../SnapmaticEditor.cpp" line="252"/> + <location filename="../SnapmaticWidget.cpp" line="332"/> <source>Snapmatic Properties</source> <translation>Propriétés Snapmatic</translation> </message> @@ -1513,7 +1580,7 @@ Appuyer sur 1 pour le mode par défaut</translation> <translation>Meme</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="291"/> + <location filename="../SnapmaticEditor.cpp" line="302"/> <source>Snapmatic Title</source> <translation>Titre Snapmatic</translation> </message> @@ -1524,20 +1591,20 @@ Appuyer sur 1 pour le mode par défaut</translation> </message> <message> <location filename="../SnapmaticEditor.ui" line="113"/> - <location filename="../SnapmaticEditor.cpp" line="200"/> + <location filename="../SnapmaticEditor.cpp" line="211"/> <source>Crew: %1 (%2)</source> <translation>Crew : %1 (%2)</translation> </message> <message> <location filename="../SnapmaticEditor.ui" line="126"/> - <location filename="../SnapmaticEditor.cpp" line="185"/> + <location filename="../SnapmaticEditor.cpp" line="196"/> <source>Title: %1 (%2)</source> <translation>Titre : %1 (%2)</translation> </message> <message> <location filename="../SnapmaticEditor.ui" line="136"/> - <location filename="../SnapmaticEditor.cpp" line="189"/> - <location filename="../SnapmaticEditor.cpp" line="193"/> + <location filename="../SnapmaticEditor.cpp" line="200"/> + <location filename="../SnapmaticEditor.cpp" line="204"/> <source>Appropriate: %1</source> <translation>Valide : %1</translation> </message> @@ -1567,43 +1634,56 @@ Appuyer sur 1 pour le mode par défaut</translation> <translation>A&nnuler</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="184"/> - <location filename="../SnapmaticEditor.cpp" line="199"/> + <location filename="../SnapmaticEditor.cpp" line="195"/> + <location filename="../SnapmaticEditor.cpp" line="210"/> <source>Edit</source> <translation>Éditer</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="189"/> + <location filename="../SnapmaticEditor.cpp" line="200"/> <source>Yes</source> <comment>Yes, should work fine</comment> <translatorcomment>Oui, devrait fonctionner</translatorcomment> <translation>Oui</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="193"/> + <location filename="../SnapmaticEditor.cpp" line="204"/> <source>No</source> <comment>No, could lead to issues</comment> <translatorcomment>Non, pourrait causer des erreurs</translatorcomment> <translation>Non</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="727"/> - <location filename="../SnapmaticEditor.cpp" line="241"/> + <location filename="../JsonEditorDialog.cpp" line="83"/> + <source><h4>Unsaved changes detected</h4>You want to save the JSON content before you quit?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../JsonEditorDialog.cpp" line="130"/> + <location filename="../JsonEditorDialog.cpp" line="148"/> + <source>Patching of Snapmatic Properties failed because of JSON Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../JsonEditorDialog.cpp" line="136"/> + <location filename="../PictureDialog.cpp" line="732"/> + <location filename="../SnapmaticEditor.cpp" line="252"/> + <location filename="../SnapmaticWidget.cpp" line="332"/> <source>Patching of Snapmatic Properties failed because of I/O Error</source> <translation>La modification des propriétés Snapmatic a échoué : erreur d'entrée/sortie</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="291"/> + <location filename="../SnapmaticEditor.cpp" line="302"/> <source>New Snapmatic title:</source> <translation>Nouveau titre Snapmatic :</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="320"/> + <location filename="../SnapmaticEditor.cpp" line="331"/> <source>Snapmatic Crew</source> <translation>Crew Snapmatic</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="320"/> + <location filename="../SnapmaticEditor.cpp" line="331"/> <source>New Snapmatic crew:</source> <translation>Nouveau crew Snapmatic :</translation> </message> @@ -1660,8 +1740,8 @@ Appuyer sur 1 pour le mode par défaut</translation> </message> <message> <location filename="../SnapmaticWidget.ui" line="152"/> - <location filename="../SnapmaticWidget.cpp" line="144"/> - <location filename="../SnapmaticWidget.cpp" line="153"/> + <location filename="../SnapmaticWidget.cpp" line="146"/> + <location filename="../SnapmaticWidget.cpp" line="155"/> <source>Delete picture</source> <translation>Supprimer la photo</translation> </message> @@ -1671,27 +1751,27 @@ Appuyer sur 1 pour le mode par défaut</translation> <translation>Supprimer</translation> </message> <message> - <location filename="../SnapmaticWidget.cpp" line="144"/> + <location filename="../SnapmaticWidget.cpp" line="146"/> <source>Are you sure to delete %1 from your Snapmatic pictures?</source> <translation>Supprimer %1 ?</translation> </message> <message> - <location filename="../SnapmaticWidget.cpp" line="153"/> + <location filename="../SnapmaticWidget.cpp" line="155"/> <source>Failed at deleting %1 from your Snapmatic pictures</source> <translation>Impossible de supprimer %1</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1151"/> + <location filename="../ProfileInterface.cpp" line="1155"/> <source>Edi&t</source> <translation>Édi&ter</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1154"/> + <location filename="../ProfileInterface.cpp" line="1158"/> <source>Show &In-game</source> <translation>&Visible en jeu</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1158"/> + <location filename="../ProfileInterface.cpp" line="1162"/> <source>Hide &In-game</source> <translation>&Invisible en jeu</translation> </message> @@ -1700,7 +1780,7 @@ Appuyer sur 1 pour le mode par défaut</translation> <translation type="vanished">Modifier les &propriétés...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1161"/> + <location filename="../ProfileInterface.cpp" line="1168"/> <source>&Export</source> <translation>&Exporter</translation> </message> @@ -1713,32 +1793,32 @@ Appuyer sur 1 pour le mode par défaut</translation> <translation type="vanished">Exporter comme &GTA Snapmatic...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1164"/> + <location filename="../ProfileInterface.cpp" line="1171"/> <source>&View</source> <translation>&Voir</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1167"/> + <location filename="../ProfileInterface.cpp" line="1174"/> <source>&Remove</source> <translation>S&upprimer</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1169"/> + <location filename="../ProfileInterface.cpp" line="1176"/> <source>&Select</source> <translation>&Sélectionner</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1170"/> + <location filename="../ProfileInterface.cpp" line="1177"/> <source>&Deselect</source> <translation>&Déselectionner</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1173"/> + <location filename="../ProfileInterface.cpp" line="1180"/> <source>Select &All</source> <translation>Sélectionner &tout</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1177"/> + <location filename="../ProfileInterface.cpp" line="1184"/> <source>&Deselect All</source> <translation>&Déselectionner tout</translation> </message> @@ -1912,7 +1992,7 @@ Appuyer sur 1 pour le mode par défaut</translation> </message> <message> <location filename="../UserInterface.ui" line="312"/> - <location filename="../OptionsDialog.cpp" line="491"/> + <location filename="../OptionsDialog.cpp" line="564"/> <location filename="../UserInterface.cpp" line="103"/> <location filename="../UserInterface.cpp" line="523"/> <source>Select GTA V Folder...</source> diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index 8579c33..71a4daf 100644 Binary files a/res/gta5sync_ru.qm and b/res/gta5sync_ru.qm differ 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 картинок и сохранений</translati <name>CrewDatabase</name> <message> <location filename="../CrewDatabase.cpp" line="102"/> + <location filename="../CrewDatabase.cpp" line="113"/> <source>No Crew</source> <translation>Вне банды</translation> </message> @@ -325,12 +326,14 @@ Grand Theft Auto V Snapmatic картинок и сохранений</translati </message> <message> <location filename="../ImportDialog.cpp" line="105"/> + <location filename="../ProfileInterface.cpp" line="599"/> <source>Custom Avatar</source> <comment>Custom Avatar Description in SC, don't use Special Character!</comment> <translation type="unfinished"></translation> </message> <message> <location filename="../ImportDialog.cpp" line="131"/> + <location filename="../ProfileInterface.cpp" line="618"/> <source>Custom Picture</source> <comment>Custom Picture Description in SC, don't use Special Character!</comment> <translation type="unfinished"></translation> @@ -352,6 +355,24 @@ When you want to use it as Avatar the image will be detached!</source> <translation>Выбрать цвет...</translation> </message> </context> +<context> + <name>JsonEditorDialog</name> + <message> + <location filename="../JsonEditorDialog.ui" line="14"/> + <source>Snapmatic JSON Editor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../JsonEditorDialog.ui" line="107"/> + <source>&Save</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../JsonEditorDialog.ui" line="114"/> + <source>&Close</source> + <translation type="unfinished">&Закрыть</translation> + </message> +</context> <context> <name>MapLocationDialog</name> <message> @@ -392,7 +413,7 @@ Y: %2</translation> <translation type="unfinished"></translation> </message> <message> - <location filename="../MapLocationDialog.cpp" line="89"/> + <location filename="../MapLocationDialog.cpp" line="90"/> <source>X: %1 Y: %2</source> <comment>X and Y position</comment> @@ -534,56 +555,85 @@ Y: %2</translation> <translation>Имя</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="387"/> + <location filename="../OptionsDialog.ui" line="412"/> + <source>Language for Areas</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="431"/> + <source>Style</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="449"/> + <source>Style:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="474"/> + <source>Font</source> + <translation type="unfinished">Шрифт</translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="480"/> + <source>Always use Message Font (Windows 2003 and earlier)</source> + <translation type="unfinished"></translation> + </message> + <message> <source>Language</source> - <translation>Язык</translation> + <translation type="vanished">Язык</translation> + </message> + <message> + <location filename="../OptionsDialog.ui" line="387"/> + <source>Interface</source> + <translation type="unfinished"></translation> </message> <message> <location filename="../OptionsDialog.ui" line="393"/> - <source>Interface</source> + <source>Language for Interface</source> <translation type="unfinished"></translation> </message> <message> <location filename="../OptionsDialog.ui" line="402"/> <location filename="../OptionsDialog.ui" line="421"/> - <location filename="../OptionsDialog.cpp" line="167"/> - <location filename="../OptionsDialog.cpp" line="215"/> + <location filename="../OptionsDialog.cpp" line="169"/> + <location filename="../OptionsDialog.cpp" line="217"/> <source>Current: %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="412"/> - <source>Areas</source> + <location filename="../OptionsDialog.ui" line="437"/> + <source>Use Default Style (Restart)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.ui" line="445"/> + <location filename="../OptionsDialog.ui" line="504"/> <source>Sync</source> <translation>Sync</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="451"/> + <location filename="../OptionsDialog.ui" line="510"/> <source>Sync is not implemented at current time</source> <translation>Синхронизация пока ещё не реализована</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="489"/> + <location filename="../OptionsDialog.ui" line="548"/> <source>Apply changes</source> <translation>Применить изменения</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="492"/> + <location filename="../OptionsDialog.ui" line="551"/> <source>&OK</source> <extracomment>OK, Cancel, Apply</extracomment> <translation>&ОК</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="505"/> + <location filename="../OptionsDialog.ui" line="564"/> <source>Discard changes</source> <translation>Отвергнуть изменения</translation> </message> <message> - <location filename="../OptionsDialog.ui" line="508"/> + <location filename="../OptionsDialog.ui" line="567"/> <source>&Cancel</source> <extracomment>OK, Cancel, Apply</extracomment> <translation>От&мена</translation> @@ -600,37 +650,37 @@ Y: %2</translation> <translation type="vanished">%1 (%2 если имеется)</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="131"/> + <location filename="../OptionsDialog.cpp" line="133"/> <source>%1 (Next Closest Language)</source> <comment>First language a person can talk with a different person/application. "Native" or "Not Native".</comment> <translation></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="131"/> + <location filename="../OptionsDialog.cpp" line="133"/> <source>System</source> <comment>System in context of System default</comment> <translation>Система</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="133"/> + <location filename="../OptionsDialog.cpp" line="135"/> <source>%1 (Closest to Interface)</source> <comment>Next closest language compared to the Interface</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="133"/> + <location filename="../OptionsDialog.cpp" line="135"/> <source>Auto</source> <comment>Automatic language choice.</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="335"/> + <location filename="../OptionsDialog.cpp" line="408"/> <source>%1</source> <comment>%1</comment> <translation>%1</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="335"/> + <location filename="../OptionsDialog.cpp" line="408"/> <source>The new Custom Folder will initialise after you restart %1.</source> <translation>Другая папка будет загружена после перезапуска %1.</translation> </message> @@ -643,15 +693,15 @@ Y: %2</translation> <translation type="vanished">Язык изменится после перезапуска %1.</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="345"/> + <location filename="../OptionsDialog.cpp" line="418"/> <source>No Profile</source> <comment>No Profile, as default</comment> <translation>Нет профиля</translation> </message> <message> - <location filename="../OptionsDialog.cpp" line="353"/> - <location filename="../OptionsDialog.cpp" line="357"/> - <location filename="../OptionsDialog.cpp" line="359"/> + <location filename="../OptionsDialog.cpp" line="426"/> + <location filename="../OptionsDialog.cpp" line="430"/> + <location filename="../OptionsDialog.cpp" line="432"/> <source>Profile: %1</source> <translation>Профиль: %1</translation> </message> @@ -731,8 +781,8 @@ Y: %2</translation> <translation type="vanished">Эксп&ортировать как картинку JPG...</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="145"/> - <location filename="../ProfileInterface.cpp" line="1162"/> + <location filename="../PictureDialog.cpp" line="148"/> + <location filename="../ProfileInterface.cpp" line="1169"/> <source>Export as &Picture...</source> <translation>Экспортировать как &картинку...</translation> </message> @@ -741,8 +791,8 @@ Y: %2</translation> <translation type="vanished">Экс&портировать как GTA Snapmatic...</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="146"/> - <location filename="../ProfileInterface.cpp" line="1163"/> + <location filename="../PictureDialog.cpp" line="149"/> + <location filename="../ProfileInterface.cpp" line="1170"/> <source>Export as &Snapmatic...</source> <translation>Экспортировать как &Snapmatic...</translation> </message> @@ -751,18 +801,23 @@ Y: %2</translation> <translation type="obsolete">&Правка</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="148"/> <source>Open &Map View...</source> - <translation>Открыть &карту...</translation> + <translation type="vanished">Открыть &карту...</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="150"/> - <location filename="../ProfileInterface.cpp" line="1160"/> + <location filename="../PictureDialog.cpp" line="151"/> + <location filename="../ProfileInterface.cpp" line="1164"/> <source>&Edit Properties...</source> <translation>&Изменить свойства...</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="373"/> + <location filename="../PictureDialog.cpp" line="153"/> + <location filename="../ProfileInterface.cpp" line="1166"/> + <source>Open &Map Viewer...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../PictureDialog.cpp" line="380"/> <source>Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate</source> @@ -771,31 +826,31 @@ Arrow Keys - Navigate</source> Стрелки - Навигация</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="433"/> - <location filename="../PictureDialog.cpp" line="476"/> + <location filename="../PictureDialog.cpp" line="439"/> + <location filename="../PictureDialog.cpp" line="473"/> <source>Snapmatic Picture Viewer</source> <translation>Просмотрщик фотографий Snapmatic</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="433"/> - <location filename="../PictureDialog.cpp" line="476"/> + <location filename="../PictureDialog.cpp" line="439"/> + <location filename="../PictureDialog.cpp" line="473"/> <source>Failed at %1</source> <translation>Ошибка при %1</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="475"/> - <location filename="../PictureDialog.cpp" line="589"/> + <location filename="../PictureDialog.cpp" line="472"/> + <location filename="../PictureDialog.cpp" line="591"/> <source>No Crew</source> <translation>Вне банды</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="475"/> - <location filename="../PictureDialog.cpp" line="614"/> + <location filename="../PictureDialog.cpp" line="472"/> + <location filename="../PictureDialog.cpp" line="618"/> <source>No Players</source> <translation>Игроков нет</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="560"/> + <location filename="../PictureDialog.cpp" line="557"/> <source>Avatar Preview Mode Press 1 for Default View</source> <translation>Режим просмотра аватарок @@ -810,7 +865,7 @@ Press 1 for Default View</source> <translation type="vanished">Без группы</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="475"/> + <location filename="../PictureDialog.cpp" line="472"/> <source>Unknown Location</source> <translation>Неизвестное место</translation> </message> @@ -947,6 +1002,12 @@ Press 1 for Default View</source> <source>Failed to copy current Snapmatic picture</source> <translation type="vanished">Не удалось скопировать текущую картинку Snapmatic</translation> </message> + <message> + <location filename="../PictureDialog.cpp" line="155"/> + <location filename="../ProfileInterface.cpp" line="1167"/> + <source>Open &JSON Editor...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>ProfileInterface</name> @@ -998,30 +1059,30 @@ Press 1 for Default View</source> <translation type="obsolete">Закрыть профиль</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="131"/> + <location filename="../ProfileInterface.cpp" line="134"/> <source>Loading...</source> <translation>Загрузка...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="413"/> - <location filename="../ProfileInterface.cpp" line="478"/> + <location filename="../ProfileInterface.cpp" line="416"/> + <location filename="../ProfileInterface.cpp" line="483"/> <source>Import...</source> <translation>Импортировать...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="414"/> - <location filename="../ProfileInterface.cpp" line="457"/> - <location filename="../ProfileInterface.cpp" line="509"/> - <location filename="../ProfileInterface.cpp" line="529"/> - <location filename="../ProfileInterface.cpp" line="545"/> - <location filename="../ProfileInterface.cpp" line="661"/> - <location filename="../ProfileInterface.cpp" line="742"/> - <location filename="../ProfileInterface.cpp" line="747"/> - <location filename="../ProfileInterface.cpp" line="757"/> - <location filename="../ProfileInterface.cpp" line="762"/> - <location filename="../ProfileInterface.cpp" line="773"/> - <location filename="../ProfileInterface.cpp" line="810"/> - <location filename="../ProfileInterface.cpp" line="816"/> + <location filename="../ProfileInterface.cpp" line="417"/> + <location filename="../ProfileInterface.cpp" line="462"/> + <location filename="../ProfileInterface.cpp" line="515"/> + <location filename="../ProfileInterface.cpp" line="535"/> + <location filename="../ProfileInterface.cpp" line="551"/> + <location filename="../ProfileInterface.cpp" line="666"/> + <location filename="../ProfileInterface.cpp" line="746"/> + <location filename="../ProfileInterface.cpp" line="751"/> + <location filename="../ProfileInterface.cpp" line="761"/> + <location filename="../ProfileInterface.cpp" line="766"/> + <location filename="../ProfileInterface.cpp" line="777"/> + <location filename="../ProfileInterface.cpp" line="814"/> + <location filename="../ProfileInterface.cpp" line="820"/> <source>Import</source> <translation>Импортировать</translation> </message> @@ -1030,31 +1091,31 @@ Press 1 for Default View</source> <translation type="vanished">Все файлы профиля (SGTA* PGTA*)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="431"/> + <location filename="../ProfileInterface.cpp" line="434"/> <location filename="../UserInterface.cpp" line="376"/> <source>Savegames files (SGTA*)</source> <translation>Файлы сохранения (SGTA*)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="432"/> + <location filename="../ProfileInterface.cpp" line="435"/> <location filename="../UserInterface.cpp" line="377"/> <source>Snapmatic pictures (PGTA*)</source> <translation>Картинка Snapmatic (PGTA*)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="434"/> + <location filename="../ProfileInterface.cpp" line="437"/> <location filename="../UserInterface.cpp" line="378"/> <source>All files (**)</source> <translation>Все файлы (**)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="479"/> - <location filename="../ProfileInterface.cpp" line="494"/> + <location filename="../ProfileInterface.cpp" line="484"/> + <location filename="../ProfileInterface.cpp" line="499"/> <source>Import file %1 of %2 files</source> <translation>Импортируются файлы %1 из %2</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="509"/> + <location filename="../ProfileInterface.cpp" line="515"/> <source>Import failed with... %1</source> @@ -1063,13 +1124,13 @@ Press 1 for Default View</source> %1</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="529"/> + <location filename="../ProfileInterface.cpp" line="535"/> <location filename="../UserInterface.cpp" line="418"/> <source>Failed to read Snapmatic picture</source> <translation>Не удалось загрузить картинку Snapmatic</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="545"/> + <location filename="../ProfileInterface.cpp" line="551"/> <location filename="../UserInterface.cpp" line="434"/> <source>Failed to read Savegame file</source> <translation>Не удалось загрузить файл сохранения</translation> @@ -1079,14 +1140,14 @@ Press 1 for Default View</source> <translation type="vanished">Не получилось импортировать %1 из-за неправильного формата файла</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="457"/> - <location filename="../ProfileInterface.cpp" line="747"/> + <location filename="../ProfileInterface.cpp" line="462"/> + <location filename="../ProfileInterface.cpp" line="751"/> <location filename="../UserInterface.cpp" line="466"/> <source>No valid file is selected</source> <translation>Выбранный файл неверен</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="65"/> + <location filename="../ProfileInterface.cpp" line="68"/> <source>Enabled pictures: %1 of %2</source> <translation>Включенные картинки: %1 из %2</translation> </message> @@ -1099,93 +1160,93 @@ Press 1 for Default View</source> <translation type="vanished">Все изображения (*.jpg *.png)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="429"/> + <location filename="../ProfileInterface.cpp" line="432"/> <source>Importable files (%1)</source> <translation>Файлы для импорта (%1)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="433"/> + <location filename="../ProfileInterface.cpp" line="436"/> <source>All image files (%1)</source> <translation>Все файлы изображений (%1)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="661"/> + <location filename="../ProfileInterface.cpp" line="666"/> <source>Can't import %1 because file can't be parsed properly</source> <translation>Не получилось импортировать %1, файл не может быть правильно обработан</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="742"/> + <location filename="../ProfileInterface.cpp" line="746"/> <source>Can't import %1 because file format can't be detected</source> <translation>Не получилось импортировать %1, не удалось определить формат файла</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="757"/> + <location filename="../ProfileInterface.cpp" line="761"/> <source>Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e</source> <translation>Не удалось импортировать картинку Snapmatic, название не начинается с PGTA или не заканчивается с .g5e</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="762"/> + <location filename="../ProfileInterface.cpp" line="766"/> <source>Failed to import the Snapmatic picture, the picture is already in the game</source> <translation>Не удалось импортировать картинку Snapmatic, картинка уже в игре</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="773"/> + <location filename="../ProfileInterface.cpp" line="777"/> <source>Failed to import the Snapmatic picture, can't copy the file into profile</source> <translation>Не удалось импортировать картинку Snapmatic, не получилось скопировать файл в профиль</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="810"/> + <location filename="../ProfileInterface.cpp" line="814"/> <source>Failed to import the Savegame, can't copy the file into profile</source> <translation>Не удалось импортировать сохранение, не получилось скопировать файл в профиль</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="816"/> + <location filename="../ProfileInterface.cpp" line="820"/> <source>Failed to import the Savegame, no Savegame slot is left</source> <translation>Не удалось импортировать сохранение, нет пустых ячеек под сохранения</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="903"/> - <location filename="../ProfileInterface.cpp" line="921"/> + <location filename="../ProfileInterface.cpp" line="907"/> + <location filename="../ProfileInterface.cpp" line="925"/> <source>JPG pictures and GTA Snapmatic</source> <translation>Картинки JPG и GTA Snapmatic</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="904"/> - <location filename="../ProfileInterface.cpp" line="926"/> + <location filename="../ProfileInterface.cpp" line="908"/> + <location filename="../ProfileInterface.cpp" line="930"/> <source>JPG pictures only</source> <translation>Только картинки JPG</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="905"/> - <location filename="../ProfileInterface.cpp" line="930"/> + <location filename="../ProfileInterface.cpp" line="909"/> + <location filename="../ProfileInterface.cpp" line="934"/> <source>GTA Snapmatic only</source> <translation>Только GTA Snapmatic</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="964"/> + <location filename="../ProfileInterface.cpp" line="968"/> <source>Initialising export...</source> <translation>Подготовка к экспорту...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1017"/> - <location filename="../ProfileInterface.cpp" line="1059"/> + <location filename="../ProfileInterface.cpp" line="1021"/> + <location filename="../ProfileInterface.cpp" line="1063"/> <source>No Snapmatic pictures or Savegames files are selected</source> <translation>Не выделены ни один Snapmatic или сохранение</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1025"/> - <location filename="../ProfileInterface.cpp" line="1053"/> - <location filename="../ProfileInterface.cpp" line="1059"/> + <location filename="../ProfileInterface.cpp" line="1029"/> + <location filename="../ProfileInterface.cpp" line="1057"/> + <location filename="../ProfileInterface.cpp" line="1063"/> <source>Remove selected</source> <translation>Снять выделение</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1025"/> + <location filename="../ProfileInterface.cpp" line="1029"/> <source>You really want remove the selected Snapmatic picutres and Savegame files?</source> <translation>Точно ли хочешь удалить выбранные картинки Snapmatic и файлы сохранений?</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1053"/> + <location filename="../ProfileInterface.cpp" line="1057"/> <source>Failed at remove the complete selected Snapmatic pictures and/or Savegame files</source> <translation>Не удалось удалить полностью выбранные картинки Snapmatic и/или файлы сохранений</translation> </message> @@ -1206,20 +1267,20 @@ Press 1 for Default View</source> <translation type="obsolete">Не получилось имортировать копию сохранения, потому что не осталось свободных под них слотов</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="880"/> - <location filename="../ProfileInterface.cpp" line="918"/> - <location filename="../ProfileInterface.cpp" line="997"/> - <location filename="../ProfileInterface.cpp" line="1017"/> + <location filename="../ProfileInterface.cpp" line="884"/> + <location filename="../ProfileInterface.cpp" line="922"/> + <location filename="../ProfileInterface.cpp" line="1001"/> + <location filename="../ProfileInterface.cpp" line="1021"/> <source>Export selected</source> <translation>Экспортировать выделенное</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="918"/> + <location filename="../ProfileInterface.cpp" line="922"/> <source>%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:</source> <translation>%1Эскпортировать картинки Snapmatic%2<br><br>Картинки JPG можно открыть любым просмотрщиком<br>Картинки формата GTA Snapmatic можно снова импортировать в игру<br><br>Экспортировать как:</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="963"/> + <location filename="../ProfileInterface.cpp" line="967"/> <source>Export selected...</source> <translation>Экпортировать выделенное...</translation> </message> @@ -1228,7 +1289,7 @@ Press 1 for Default View</source> <translation type="vanished">Подготавливаю эскпорт...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="997"/> + <location filename="../ProfileInterface.cpp" line="1001"/> <source>Export failed with... %1</source> @@ -1249,7 +1310,7 @@ Press 1 for Default View</source> <translation>Все файлы профиля (*.g5e SGTA* PGTA*)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="430"/> + <location filename="../ProfileInterface.cpp" line="433"/> <location filename="../UserInterface.cpp" line="375"/> <source>GTA V Export (*.g5e)</source> <translation>GTA V Export (*.g5e)</translation> @@ -1258,15 +1319,20 @@ Press 1 for Default View</source> <context> <name>QApplication</name> <message> - <location filename="../main.cpp" line="67"/> + <location filename="../main.cpp" line="87"/> <source>Font</source> <translation>Шрифт</translation> </message> <message> - <location filename="../main.cpp" line="67"/> + <location filename="../main.cpp" line="87"/> <source>Selected Font: %1</source> <translation>Выбранный шрифт: %1</translation> </message> + <message> + <location filename="../main.cpp" line="108"/> + <source><h4>Welcome to %1!</h4>You want to configure %1 before you start using it?</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>SavegameDialog</name> @@ -1400,32 +1466,32 @@ Press 1 for Default View</source> <translation>Не удалось удалить сохранение %1</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1198"/> + <location filename="../ProfileInterface.cpp" line="1205"/> <source>&View</source> <translation>&Просмотр</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1200"/> + <location filename="../ProfileInterface.cpp" line="1207"/> <source>&Remove</source> <translation>&Удалить</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1202"/> + <location filename="../ProfileInterface.cpp" line="1209"/> <source>&Select</source> <translation>&Выбрать</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1203"/> + <location filename="../ProfileInterface.cpp" line="1210"/> <source>&Deselect</source> <translation>Сн&ять выбор</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1206"/> + <location filename="../ProfileInterface.cpp" line="1213"/> <source>Select &All</source> <translation>В&ыбрать все</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1210"/> + <location filename="../ProfileInterface.cpp" line="1217"/> <source>&Deselect All</source> <translation>Снять выбо&р со всех</translation> </message> @@ -1435,7 +1501,7 @@ Press 1 for Default View</source> <translation>Копировать сохранение</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1199"/> + <location filename="../ProfileInterface.cpp" line="1206"/> <source>&Export</source> <translation>&Экспортировать</translation> </message> @@ -1495,8 +1561,13 @@ Press 1 for Default View</source> <message> <location filename="../SnapmaticEditor.ui" line="14"/> <location filename="../SnapmaticEditor.ui" line="81"/> - <location filename="../PictureDialog.cpp" line="727"/> - <location filename="../SnapmaticEditor.cpp" line="241"/> + <location filename="../JsonEditorDialog.cpp" line="83"/> + <location filename="../JsonEditorDialog.cpp" line="130"/> + <location filename="../JsonEditorDialog.cpp" line="136"/> + <location filename="../JsonEditorDialog.cpp" line="148"/> + <location filename="../PictureDialog.cpp" line="732"/> + <location filename="../SnapmaticEditor.cpp" line="252"/> + <location filename="../SnapmaticWidget.cpp" line="332"/> <source>Snapmatic Properties</source> <translation>Свойства Snapmatic</translation> </message> @@ -1537,7 +1608,7 @@ Press 1 for Default View</source> </message> <message> <location filename="../SnapmaticEditor.ui" line="113"/> - <location filename="../SnapmaticEditor.cpp" line="200"/> + <location filename="../SnapmaticEditor.cpp" line="211"/> <source>Crew: %1 (%2)</source> <translation>Банда: %1 (%2)</translation> </message> @@ -1547,20 +1618,20 @@ Press 1 for Default View</source> <translation>Meme</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="291"/> + <location filename="../SnapmaticEditor.cpp" line="302"/> <source>Snapmatic Title</source> <translation>Заголовок Snapmatic</translation> </message> <message> <location filename="../SnapmaticEditor.ui" line="126"/> - <location filename="../SnapmaticEditor.cpp" line="185"/> + <location filename="../SnapmaticEditor.cpp" line="196"/> <source>Title: %1 (%2)</source> <translation>Заголовок: %1 (%2)</translation> </message> <message> <location filename="../SnapmaticEditor.ui" line="136"/> - <location filename="../SnapmaticEditor.cpp" line="189"/> - <location filename="../SnapmaticEditor.cpp" line="193"/> + <location filename="../SnapmaticEditor.cpp" line="200"/> + <location filename="../SnapmaticEditor.cpp" line="204"/> <source>Appropriate: %1</source> <translation>Подходит: %1</translation> </message> @@ -1590,41 +1661,54 @@ Press 1 for Default View</source> <translation>&Отмена</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="184"/> - <location filename="../SnapmaticEditor.cpp" line="199"/> + <location filename="../SnapmaticEditor.cpp" line="195"/> + <location filename="../SnapmaticEditor.cpp" line="210"/> <source>Edit</source> <translation>Правка</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="189"/> + <location filename="../SnapmaticEditor.cpp" line="200"/> <source>Yes</source> <comment>Yes, should work fine</comment> <translation>Да</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="193"/> + <location filename="../SnapmaticEditor.cpp" line="204"/> <source>No</source> <comment>No, could lead to issues</comment> <translation>Нет</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="727"/> - <location filename="../SnapmaticEditor.cpp" line="241"/> + <location filename="../JsonEditorDialog.cpp" line="83"/> + <source><h4>Unsaved changes detected</h4>You want to save the JSON content before you quit?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../JsonEditorDialog.cpp" line="130"/> + <location filename="../JsonEditorDialog.cpp" line="148"/> + <source>Patching of Snapmatic Properties failed because of JSON Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../JsonEditorDialog.cpp" line="136"/> + <location filename="../PictureDialog.cpp" line="732"/> + <location filename="../SnapmaticEditor.cpp" line="252"/> + <location filename="../SnapmaticWidget.cpp" line="332"/> <source>Patching of Snapmatic Properties failed because of I/O Error</source> <translation>Не удалось измененить свойства Snapmatic из-за проблемы ввода/вывода</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="291"/> + <location filename="../SnapmaticEditor.cpp" line="302"/> <source>New Snapmatic title:</source> <translation>Новый заголовок Snapmatic:</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="320"/> + <location filename="../SnapmaticEditor.cpp" line="331"/> <source>Snapmatic Crew</source> <translation>Банда на Snapmatic</translation> </message> <message> - <location filename="../SnapmaticEditor.cpp" line="320"/> + <location filename="../SnapmaticEditor.cpp" line="331"/> <source>New Snapmatic crew:</source> <translation>Новая банда на Snapmatic:</translation> </message> @@ -1676,33 +1760,33 @@ Press 1 for Default View</source> </message> <message> <location filename="../SnapmaticWidget.ui" line="152"/> - <location filename="../SnapmaticWidget.cpp" line="144"/> - <location filename="../SnapmaticWidget.cpp" line="153"/> + <location filename="../SnapmaticWidget.cpp" line="146"/> + <location filename="../SnapmaticWidget.cpp" line="155"/> <source>Delete picture</source> <translation>Удалить картинку</translation> </message> <message> - <location filename="../SnapmaticWidget.cpp" line="144"/> + <location filename="../SnapmaticWidget.cpp" line="146"/> <source>Are you sure to delete %1 from your Snapmatic pictures?</source> <translation>Уверены, что хотите удалить %1 из коллекции картинок Snapmatic?</translation> </message> <message> - <location filename="../SnapmaticWidget.cpp" line="153"/> + <location filename="../SnapmaticWidget.cpp" line="155"/> <source>Failed at deleting %1 from your Snapmatic pictures</source> <translation>Не удалось удалить %1 из колелкции картинок Snapmatic </translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1151"/> + <location filename="../ProfileInterface.cpp" line="1155"/> <source>Edi&t</source> <translation>&Правка</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1154"/> + <location filename="../ProfileInterface.cpp" line="1158"/> <source>Show &In-game</source> <translation>Показывать в &игре</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1158"/> + <location filename="../ProfileInterface.cpp" line="1162"/> <source>Hide &In-game</source> <translation>Ск&рыть в игре</translation> </message> @@ -1711,7 +1795,7 @@ Press 1 for Default View</source> <translation type="vanished">&Изменить свойства...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1161"/> + <location filename="../ProfileInterface.cpp" line="1168"/> <source>&Export</source> <translation>&Экспорт</translation> </message> @@ -1724,32 +1808,32 @@ Press 1 for Default View</source> <translation type="vanished">Экс&портировать как GTA Snapmatic...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1164"/> + <location filename="../ProfileInterface.cpp" line="1171"/> <source>&View</source> <translation>По&казать</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1167"/> + <location filename="../ProfileInterface.cpp" line="1174"/> <source>&Remove</source> <translation>У&далить</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1169"/> + <location filename="../ProfileInterface.cpp" line="1176"/> <source>&Select</source> <translation>&Выделить</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1170"/> + <location filename="../ProfileInterface.cpp" line="1177"/> <source>&Deselect</source> <translation>Сн&ять выделение</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1173"/> + <location filename="../ProfileInterface.cpp" line="1180"/> <source>Select &All</source> <translation>В&ыбрать все</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="1177"/> + <location filename="../ProfileInterface.cpp" line="1184"/> <source>&Deselect All</source> <translation>Снять выбо&р со всех</translation> </message> @@ -1977,7 +2061,7 @@ Press 1 for Default View</source> </message> <message> <location filename="../UserInterface.ui" line="312"/> - <location filename="../OptionsDialog.cpp" line="491"/> + <location filename="../OptionsDialog.cpp" line="564"/> <location filename="../UserInterface.cpp" line="103"/> <location filename="../UserInterface.cpp" line="523"/> <source>Select GTA V Folder...</source>