Compare commits

...

4 Commits
1.9.0 ... 1.9.x

Author SHA1 Message Date
Syping 98cfa7c5de gta5view 1.9.2
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2021-03-22 05:54:46 +01:00
Syping b8ad311912 Fix rare PictureDialog crash issue
continuous-integration/drone/push Build is passing Details
2021-01-27 14:40:50 +01:00
Syping dd7667b9f7 Build fix Qt6 ifdef
continuous-integration/drone/push Build is passing Details
2021-01-10 01:33:18 +01:00
Syping 7adf8f2c90 1.9.1: Cayo Perico DLC update, Multi-select bugfix
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2020-12-16 13:02:11 +01:00
25 changed files with 149 additions and 94 deletions

View File

@ -24,7 +24,7 @@ BEGIN
VALUE "FileDescription", "gta5view" VALUE "FileDescription", "gta5view"
VALUE "FileVersion", "MAJOR_VER.MINOR_VER.PATCH_VERSTR_BUILD_VER" VALUE "FileVersion", "MAJOR_VER.MINOR_VER.PATCH_VERSTR_BUILD_VER"
VALUE "InternalName", "gta5view" VALUE "InternalName", "gta5view"
VALUE "LegalCopyright", "Copyright © 2016-2020 Syping" VALUE "LegalCopyright", "Copyright © 2016-2021 Syping"
VALUE "OriginalFilename", "gta5view.exe" VALUE "OriginalFilename", "gta5view.exe"
VALUE "ProductName", "gta5view" VALUE "ProductName", "gta5view"
VALUE "ProductVersion", "MAJOR_VER.MINOR_VER.PATCH_VERSTR_BUILD_VER" VALUE "ProductVersion", "MAJOR_VER.MINOR_VER.PATCH_VERSTR_BUILD_VER"

View File

@ -3,8 +3,8 @@
!define APP_NAME "gta5view" !define APP_NAME "gta5view"
!define COMP_NAME "Syping" !define COMP_NAME "Syping"
!define WEB_SITE "https://gta5view.syping.de/" !define WEB_SITE "https://gta5view.syping.de/"
!define VERSION "1.9.0.0" !define VERSION "1.9.2.0"
!define COPYRIGHT "Copyright © 2016-2020 Syping" !define COPYRIGHT "Copyright © 2016-2021 Syping"
!define DESCRIPTION "Grand Theft Auto V Savegame and Snapmatic Viewer/Editor" !define DESCRIPTION "Grand Theft Auto V Savegame and Snapmatic Viewer/Editor"
!define INSTALLER_NAME "gta5view_setup.exe" !define INSTALLER_NAME "gta5view_setup.exe"
!define MAIN_APP_EXE "gta5view.exe" !define MAIN_APP_EXE "gta5view.exe"

View File

@ -199,7 +199,7 @@ void PictureDialog::setupPictureDialog()
} }
installEventFilter(this); installEventFilter(this);
installEventFilter(ui->labPicture); // installEventFilter(ui->labPicture);
// DPI calculation // DPI calculation
ui->hlButtons->setSpacing(6 * screenRatio); ui->hlButtons->setSpacing(6 * screenRatio);
@ -214,32 +214,32 @@ void PictureDialog::setupPictureDialog()
PictureDialog::~PictureDialog() PictureDialog::~PictureDialog()
{ {
#ifdef Q_OS_WIN //#ifdef Q_OS_WIN
#if QT_VERSION >= 0x050200 //#if QT_VERSION >= 0x050200
if (naviEnabled) // if (naviEnabled)
{ // {
for (QObject *obj : layout()->menuBar()->children()) // for (QObject *obj : layout()->menuBar()->children())
{ // {
delete obj; // delete obj;
} // }
delete layout()->menuBar(); // delete layout()->menuBar();
} // }
#endif //#endif
#else //#else
if (naviEnabled) // if (naviEnabled)
{ // {
for (QObject *obj : layout()->menuBar()->children()) // for (QObject *obj : layout()->menuBar()->children())
{ // {
delete obj; // delete obj;
} // }
delete layout()->menuBar(); // delete layout()->menuBar();
} // }
#endif //#endif
for (QObject *obj : manageMenu->children()) // for (QObject *obj : manageMenu->children())
{ // {
delete obj; // delete obj;
} // }
delete manageMenu; // delete manageMenu;
delete ui; delete ui;
} }

View File

@ -1670,7 +1670,7 @@ void ProfileInterface::contextMenuTriggeredPIC(QContextMenuEvent *ev)
} }
QMenu contextMenu(picWidget); QMenu contextMenu(picWidget);
const int selectedCount = selectedWidgets(); const int selectedCount = selectedWidgets();
if (contentMode < 20 || selectedCount <= 1) { if (contentMode < 20 || selectedCount == 0) {
QMenu editMenu(SnapmaticWidget::tr("Edi&t"), picWidget); QMenu editMenu(SnapmaticWidget::tr("Edi&t"), picWidget);
if (picWidget->isHidden()) { if (picWidget->isHidden()) {
editMenu.addAction(SnapmaticWidget::tr("Show &In-game"), picWidget, SLOT(makePictureVisibleSlot())); editMenu.addAction(SnapmaticWidget::tr("Show &In-game"), picWidget, SLOT(makePictureVisibleSlot()));
@ -1750,7 +1750,7 @@ void ProfileInterface::contextMenuTriggeredSGD(QContextMenuEvent *ev)
} }
QMenu contextMenu(sgdWidget); QMenu contextMenu(sgdWidget);
const int selectedCount = selectedWidgets(); const int selectedCount = selectedWidgets();
if (contentMode < 20 || selectedCount <= 1) { if (contentMode < 20 || selectedCount == 0) {
contextMenu.addAction(SavegameWidget::tr("&View"), sgdWidget, SLOT(on_cmdView_clicked())); contextMenu.addAction(SavegameWidget::tr("&View"), sgdWidget, SLOT(on_cmdView_clicked()));
contextMenu.addAction(SavegameWidget::tr("&Export"), sgdWidget, SLOT(on_cmdCopy_clicked())); contextMenu.addAction(SavegameWidget::tr("&Export"), sgdWidget, SLOT(on_cmdCopy_clicked()));
contextMenu.addAction(SavegameWidget::tr("&Remove"), sgdWidget, SLOT(on_cmdDelete_clicked())); contextMenu.addAction(SavegameWidget::tr("&Remove"), sgdWidget, SLOT(on_cmdDelete_clicked()));

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
* gta5view Grand Theft Auto V Profile Viewer * gta5view Grand Theft Auto V Profile Viewer
* Copyright (C) 2020 Syping * Copyright (C) 2020-2021 Syping
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -90,15 +90,20 @@ bool RagePhoto::load()
quint32 format = charToUInt32LE(uInt32Buffer); quint32 format = charToUInt32LE(uInt32Buffer);
if (format == static_cast<quint32>(PhotoFormat::GTA5)) { if (format == static_cast<quint32>(PhotoFormat::GTA5)) {
char photoHeader[256]; char *photoHeader = static_cast<char*>(malloc(256));
size = dataBuffer.read(photoHeader, 256); if (!photoHeader)
if (size != 256)
return false; return false;
size = dataBuffer.read(photoHeader, 256);
if (size != 256) {
free(photoHeader);
return false;
}
for (const QChar &photoChar : utf16LEToString(photoHeader, 256)) { for (const QChar &photoChar : utf16LEToString(photoHeader, 256)) {
if (photoChar.isNull()) if (photoChar.isNull())
break; break;
p_photoString += photoChar; p_photoString += photoChar;
} }
free(photoHeader);
size = dataBuffer.read(uInt32Buffer, 4); size = dataBuffer.read(uInt32Buffer, 4);
if (size != 4) if (size != 4)
@ -142,11 +147,16 @@ bool RagePhoto::load()
return false; return false;
quint32 t_photoSize = charToUInt32LE(uInt32Buffer); quint32 t_photoSize = charToUInt32LE(uInt32Buffer);
char photoData[t_photoSize]; char *photoData = static_cast<char*>(malloc(t_photoSize));
size = dataBuffer.read(photoData, t_photoSize); if (!photoData)
if (size != t_photoSize)
return false; return false;
size = dataBuffer.read(photoData, t_photoSize);
if (size != t_photoSize) {
free(photoData);
return false;
}
p_photoData = QByteArray(photoData, t_photoSize); p_photoData = QByteArray(photoData, t_photoSize);
free(photoData);
dataBuffer.seek(p_jsonOffset + 264); dataBuffer.seek(p_jsonOffset + 264);
size = dataBuffer.read(markerBuffer, 4); size = dataBuffer.read(markerBuffer, 4);
@ -160,15 +170,20 @@ bool RagePhoto::load()
return false; return false;
p_jsonBuffer = charToUInt32LE(uInt32Buffer); p_jsonBuffer = charToUInt32LE(uInt32Buffer);
char jsonBytes[p_jsonBuffer]; char *jsonBytes = static_cast<char*>(malloc(p_jsonBuffer));
size = dataBuffer.read(jsonBytes, p_jsonBuffer); if (!jsonBytes)
if (size != p_jsonBuffer)
return false; return false;
size = dataBuffer.read(jsonBytes, p_jsonBuffer);
if (size != p_jsonBuffer) {
free(jsonBytes);
return false;
}
for (quint32 i = 0; i != p_jsonBuffer; i++) { for (quint32 i = 0; i != p_jsonBuffer; i++) {
if (jsonBytes[i] == '\x00') if (jsonBytes[i] == '\x00')
break; break;
p_jsonData += jsonBytes[i]; p_jsonData += jsonBytes[i];
} }
free(jsonBytes);
QJsonDocument t_jsonDocument = QJsonDocument::fromJson(p_jsonData); QJsonDocument t_jsonDocument = QJsonDocument::fromJson(p_jsonData);
if (t_jsonDocument.isNull()) if (t_jsonDocument.isNull())
return false; return false;
@ -186,15 +201,20 @@ bool RagePhoto::load()
return false; return false;
p_titlBuffer = charToUInt32LE(uInt32Buffer); p_titlBuffer = charToUInt32LE(uInt32Buffer);
char titlBytes[p_titlBuffer]; char *titlBytes = static_cast<char*>(malloc(p_titlBuffer));
size = dataBuffer.read(titlBytes, p_titlBuffer); if (!titlBytes)
if (size != p_titlBuffer)
return false; return false;
size = dataBuffer.read(titlBytes, p_titlBuffer);
if (size != p_titlBuffer){
free(titlBytes);
return false;
}
for (const QChar &titlChar : QString::fromUtf8(titlBytes, p_titlBuffer)) { for (const QChar &titlChar : QString::fromUtf8(titlBytes, p_titlBuffer)) {
if (titlChar.isNull()) if (titlChar.isNull())
break; break;
p_titleString += titlChar; p_titleString += titlChar;
} }
free(titlBytes);
dataBuffer.seek(p_descOffset + 264); dataBuffer.seek(p_descOffset + 264);
size = dataBuffer.read(markerBuffer, 4); size = dataBuffer.read(markerBuffer, 4);
@ -208,15 +228,20 @@ bool RagePhoto::load()
return false; return false;
p_descBuffer = charToUInt32LE(uInt32Buffer); p_descBuffer = charToUInt32LE(uInt32Buffer);
char descBytes[p_descBuffer]; char *descBytes = static_cast<char*>(malloc(p_descBuffer));
size = dataBuffer.read(descBytes, p_descBuffer); if (!descBytes)
if (size != p_descBuffer)
return false; return false;
size = dataBuffer.read(descBytes, p_descBuffer);
if (size != p_descBuffer) {
free(descBytes);
return false;
}
for (const QChar &descChar : QString::fromUtf8(descBytes, p_descBuffer)) { for (const QChar &descChar : QString::fromUtf8(descBytes, p_descBuffer)) {
if (descChar.isNull()) if (descChar.isNull())
break; break;
p_descriptionString += descChar; p_descriptionString += descChar;
} }
free(descBytes);
dataBuffer.seek(p_endOfFile + 260); dataBuffer.seek(p_endOfFile + 260);
size = dataBuffer.read(markerBuffer, 4); size = dataBuffer.read(markerBuffer, 4);
@ -243,12 +268,17 @@ bool RagePhoto::load()
return false; return false;
quint32 compressedSize = charToUInt32LE(uInt32Buffer); quint32 compressedSize = charToUInt32LE(uInt32Buffer);
char compressedPhotoHeader[compressedSize]; char *compressedPhotoHeader = static_cast<char*>(malloc(compressedSize));
size = dataBuffer.read(compressedPhotoHeader, compressedSize); if (!compressedPhotoHeader)
if (size != compressedSize)
return false; return false;
size = dataBuffer.read(compressedPhotoHeader, compressedSize);
if (size != compressedSize) {
free(compressedPhotoHeader);
return false;
}
QByteArray t_photoHeader = QByteArray::fromRawData(compressedPhotoHeader, compressedSize); QByteArray t_photoHeader = QByteArray::fromRawData(compressedPhotoHeader, compressedSize);
t_photoHeader = qUncompress(t_photoHeader); t_photoHeader = qUncompress(t_photoHeader);
free(compressedPhotoHeader);
if (t_photoHeader.isEmpty()) if (t_photoHeader.isEmpty())
return false; return false;
p_photoString = QString::fromUtf8(t_photoHeader); p_photoString = QString::fromUtf8(t_photoHeader);
@ -268,12 +298,17 @@ bool RagePhoto::load()
return false; return false;
compressedSize = charToUInt32LE(uInt32Buffer); compressedSize = charToUInt32LE(uInt32Buffer);
char compressedPhoto[compressedSize]; char *compressedPhoto = static_cast<char*>(malloc(compressedSize));
size = dataBuffer.read(compressedPhoto, compressedSize); if (!compressedPhoto)
if (size != compressedSize)
return false; return false;
size = dataBuffer.read(compressedPhoto, compressedSize);
if (size != compressedSize) {
free(compressedPhoto);
return false;
}
QByteArray t_photoData = QByteArray::fromRawData(compressedPhoto, compressedSize); QByteArray t_photoData = QByteArray::fromRawData(compressedPhoto, compressedSize);
p_photoData = qUncompress(t_photoData); p_photoData = qUncompress(t_photoData);
free(compressedPhoto);
size = dataBuffer.read(uInt32Buffer, 4); size = dataBuffer.read(uInt32Buffer, 4);
if (size != 4) if (size != 4)
@ -290,12 +325,17 @@ bool RagePhoto::load()
return false; return false;
compressedSize = charToUInt32LE(uInt32Buffer); compressedSize = charToUInt32LE(uInt32Buffer);
char compressedJson[compressedSize]; char *compressedJson = static_cast<char*>(malloc(compressedSize));
size = dataBuffer.read(compressedJson, compressedSize); if (!compressedJson)
if (size != compressedSize)
return false; return false;
size = dataBuffer.read(compressedJson, compressedSize);
if (size != compressedSize) {
free(compressedJson);
return false;
}
QByteArray t_jsonBytes = QByteArray::fromRawData(compressedJson, compressedSize); QByteArray t_jsonBytes = QByteArray::fromRawData(compressedJson, compressedSize);
p_jsonData = qUncompress(t_jsonBytes); p_jsonData = qUncompress(t_jsonBytes);
free(compressedJson);
if (p_jsonData.isEmpty()) if (p_jsonData.isEmpty())
return false; return false;
QJsonDocument t_jsonDocument = QJsonDocument::fromJson(p_jsonData); QJsonDocument t_jsonDocument = QJsonDocument::fromJson(p_jsonData);
@ -318,12 +358,17 @@ bool RagePhoto::load()
return false; return false;
compressedSize = charToUInt32LE(uInt32Buffer); compressedSize = charToUInt32LE(uInt32Buffer);
char compressedTitl[compressedSize]; char *compressedTitl = static_cast<char*>(malloc(compressedSize));
size = dataBuffer.read(compressedTitl, compressedSize); if (!compressedTitl)
if (size != compressedSize)
return false; return false;
size = dataBuffer.read(compressedTitl, compressedSize);
if (size != compressedSize) {
free(compressedTitl);
return false;
}
QByteArray t_titlBytes = QByteArray::fromRawData(compressedTitl, compressedSize); QByteArray t_titlBytes = QByteArray::fromRawData(compressedTitl, compressedSize);
t_titlBytes = qUncompress(t_titlBytes); t_titlBytes = qUncompress(t_titlBytes);
free(compressedTitl);
p_titleString = QString::fromUtf8(t_titlBytes); p_titleString = QString::fromUtf8(t_titlBytes);
size = dataBuffer.read(uInt32Buffer, 4); size = dataBuffer.read(uInt32Buffer, 4);
@ -341,12 +386,17 @@ bool RagePhoto::load()
return false; return false;
compressedSize = charToUInt32LE(uInt32Buffer); compressedSize = charToUInt32LE(uInt32Buffer);
char compressedDesc[compressedSize]; char *compressedDesc = static_cast<char*>(malloc(compressedSize));
size = dataBuffer.read(compressedDesc, compressedSize); if (!compressedDesc)
if (size != compressedSize)
return false; return false;
size = dataBuffer.read(compressedDesc, compressedSize);
if (size != compressedSize) {
free(compressedDesc);
return false;
}
QByteArray t_descBytes = QByteArray::fromRawData(compressedDesc, compressedSize); QByteArray t_descBytes = QByteArray::fromRawData(compressedDesc, compressedSize);
t_descBytes = qUncompress(t_descBytes); t_descBytes = qUncompress(t_descBytes);
free(compressedDesc);
p_descriptionString = QString::fromUtf8(t_descBytes); p_descriptionString = QString::fromUtf8(t_descBytes);
size = dataBuffer.read(uInt32Buffer, 4); size = dataBuffer.read(uInt32Buffer, 4);
@ -382,7 +432,7 @@ bool RagePhoto::load()
size = dataBuffer.read(length, 1); size = dataBuffer.read(length, 1);
if (size != 1) if (size != 1)
return false; return false;
int i_length = QByteArray::number((int)length[0], 16).toInt() + 6; int i_length = QByteArray::number(static_cast<int>(length[0]), 16).toInt() + 6;
#if QT_VERSION >= 0x050A00 #if QT_VERSION >= 0x050A00
size = dataBuffer.skip(i_length); size = dataBuffer.skip(i_length);

View File

@ -63,7 +63,7 @@ void TranslationClass::loadTranslation(QApplication *app)
{ {
app->installTranslator(&inQtTranslator); app->installTranslator(&inQtTranslator);
} }
#if QT_VERSION <= 0x060000 #if QT_VERSION >= 0x060000
QLocale::setDefault(QLocale(currentLanguage)); QLocale::setDefault(QLocale(currentLanguage));
#else #else
QLocale::setDefault(currentLanguage); QLocale::setDefault(currentLanguage);
@ -151,7 +151,7 @@ void TranslationClass::loadTranslation(QApplication *app)
{ {
app->installTranslator(&inQtTranslator); app->installTranslator(&inQtTranslator);
} }
#if QT_VERSION <= 0x060000 #if QT_VERSION >= 0x060000
QLocale::setDefault(QLocale(currentLanguage)); QLocale::setDefault(QLocale(currentLanguage));
#else #else
QLocale::setDefault(currentLanguage); QLocale::setDefault(currentLanguage);
@ -184,7 +184,7 @@ void TranslationClass::loadTranslation(QApplication *app)
{ {
app->installTranslator(&inQtTranslator); app->installTranslator(&inQtTranslator);
} }
#if QT_VERSION <= 0x060000 #if QT_VERSION >= 0x060000
QLocale::setDefault(QLocale(currentLanguage)); QLocale::setDefault(QLocale(currentLanguage));
#else #else
QLocale::setDefault(currentLanguage); QLocale::setDefault(currentLanguage);
@ -207,7 +207,7 @@ void TranslationClass::loadTranslation(QApplication *app)
{ {
app->installTranslator(&inQtTranslator); app->installTranslator(&inQtTranslator);
} }
#if QT_VERSION <= 0x060000 #if QT_VERSION >= 0x060000
QLocale::setDefault(QLocale(currentLanguage)); QLocale::setDefault(QLocale(currentLanguage));
#else #else
QLocale::setDefault(currentLanguage); QLocale::setDefault(currentLanguage);
@ -235,7 +235,7 @@ void TranslationClass::loadTranslation(QApplication *app)
{ {
app->installTranslator(&inQtTranslator); app->installTranslator(&inQtTranslator);
} }
#if QT_VERSION <= 0x060000 #if QT_VERSION >= 0x060000
QLocale::setDefault(QLocale(currentLanguage)); QLocale::setDefault(QLocale(currentLanguage));
#else #else
QLocale::setDefault(currentLanguage); QLocale::setDefault(currentLanguage);
@ -256,7 +256,7 @@ void TranslationClass::loadTranslation(QApplication *app)
{ {
app->installTranslator(&inQtTranslator); app->installTranslator(&inQtTranslator);
} }
#if QT_VERSION <= 0x060000 #if QT_VERSION >= 0x060000
QLocale::setDefault(QLocale(currentLanguage)); QLocale::setDefault(QLocale(currentLanguage));
#else #else
QLocale::setDefault(currentLanguage); QLocale::setDefault(currentLanguage);

View File

@ -40,11 +40,11 @@
#endif #endif
#ifndef GTA5SYNC_COPYRIGHT #ifndef GTA5SYNC_COPYRIGHT
#define GTA5SYNC_COPYRIGHT "2016-2020" #define GTA5SYNC_COPYRIGHT "2016-2021"
#endif #endif
#ifndef GTA5SYNC_APPVER #ifndef GTA5SYNC_APPVER
#define GTA5SYNC_APPVER "1.9.0" #define GTA5SYNC_APPVER "1.9.2"
#endif #endif
#if __cplusplus #if __cplusplus

View File

@ -4,8 +4,8 @@ IDI_ICON1 ICON DISCARDABLE "5sync.ico"
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gta5view.exe.manifest" CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gta5view.exe.manifest"
#include <windows.h> #include <windows.h>
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 1, 9, 0, 0 FILEVERSION 1, 9, 2, 0
PRODUCTVERSION 1, 9, 0, 0 PRODUCTVERSION 1, 9, 2, 0
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
FILEFLAGS 0 FILEFLAGS 0
FILEOS VOS_NT_WINDOWS32 FILEOS VOS_NT_WINDOWS32
@ -22,12 +22,12 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "Syping" VALUE "CompanyName", "Syping"
VALUE "FileDescription", "gta5view" VALUE "FileDescription", "gta5view"
VALUE "FileVersion", "1.9.0" VALUE "FileVersion", "1.9.2"
VALUE "InternalName", "gta5view" VALUE "InternalName", "gta5view"
VALUE "LegalCopyright", "Copyright © 2016-2020 Syping" VALUE "LegalCopyright", "Copyright © 2016-2021 Syping"
VALUE "OriginalFilename", "gta5view.exe" VALUE "OriginalFilename", "gta5view.exe"
VALUE "ProductName", "gta5view" VALUE "ProductName", "gta5view"
VALUE "ProductVersion", "1.9.0" VALUE "ProductVersion", "1.9.2"
END END
END END
END END

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2020 Syping --> <!-- Copyright 2021 Syping -->
<component type="desktop-application"> <component type="desktop-application">
<id>de.syping.gta5view</id> <id>de.syping.gta5view</id>
<launchable type="desktop-id">de.syping.gta5view.desktop</launchable> <launchable type="desktop-id">de.syping.gta5view.desktop</launchable>
@ -32,6 +32,8 @@
<developer_name>Syping</developer_name> <developer_name>Syping</developer_name>
<releases> <releases>
<release date="2021-03-22" version="1.9.2"/>
<release date="2020-12-16" version="1.9.1"/>
<release date="2020-11-30" version="1.9.0"/> <release date="2020-11-30" version="1.9.0"/>
<release date="2020-10-11" version="1.8.0"/> <release date="2020-10-11" version="1.8.0"/>
</releases> </releases>

View File

@ -42,6 +42,7 @@ HAWICK="Hawick"
HEART="Heart Attacks Beach" HEART="Heart Attacks Beach"
HORS="Vinewood-Rennbahn" HORS="Vinewood-Rennbahn"
HUMLAB="Humane Labs and Research" HUMLAB="Humane Labs and Research"
ISHEIST="Cayo Perico"
JAIL="Bolingbroke-Strafanstalt" JAIL="Bolingbroke-Strafanstalt"
KOREAT="Little Seoul" KOREAT="Little Seoul"
LACT="Land-Act-Stausee" LACT="Land-Act-Stausee"

View File

@ -42,6 +42,7 @@ HAWICK="Hawick"
HEART="Heart Attacks Beach" HEART="Heart Attacks Beach"
HORS="Vinewood Racetrack" HORS="Vinewood Racetrack"
HUMLAB="Humane Labs and Research" HUMLAB="Humane Labs and Research"
ISHEIST="Cayo Perico"
JAIL="Bolingbroke Penitentiary" JAIL="Bolingbroke Penitentiary"
KOREAT="Little Seoul" KOREAT="Little Seoul"
LACT="Land Act Reservoir" LACT="Land Act Reservoir"

View File

@ -42,6 +42,7 @@ HAWICK="Hawick"
HEART="Heart Attacks Beach" HEART="Heart Attacks Beach"
HORS="Circuito de Vinewood" HORS="Circuito de Vinewood"
HUMLAB="Laboratorios Humane" HUMLAB="Laboratorios Humane"
ISHEIST="Cayo Perico"
JAIL="Penitenciaría de Bolingbroke" JAIL="Penitenciaría de Bolingbroke"
KOREAT="Little Seoul" KOREAT="Little Seoul"
LACT="Embalse de Land Act" LACT="Embalse de Land Act"

View File

@ -42,6 +42,7 @@ HAWICK="Hawick"
HEART="Heart Attacks Beach" HEART="Heart Attacks Beach"
HORS="Circuito de Vinewood" HORS="Circuito de Vinewood"
HUMLAB="Humane Labs and Research" HUMLAB="Humane Labs and Research"
ISHEIST="Cayo Perico"
JAIL="Penitenciaría de Bolingbroke" JAIL="Penitenciaría de Bolingbroke"
KOREAT="Little Seoul" KOREAT="Little Seoul"
LACT="Presa de Land Act" LACT="Presa de Land Act"

View File

@ -41,6 +41,7 @@ HAWICK="Hawick"
HEART="Heart Attacks Beach" HEART="Heart Attacks Beach"
HORS="Hippodrome de Vinewood" HORS="Hippodrome de Vinewood"
HUMLAB="Laboratoires Humane" HUMLAB="Laboratoires Humane"
ISHEIST="Cayo Perico"
JAIL="Pénitencier de Bolingbroke" JAIL="Pénitencier de Bolingbroke"
KOREAT="Little Seoul" KOREAT="Little Seoul"
LACT="Land Act Reservoir" LACT="Land Act Reservoir"

View File

@ -42,6 +42,7 @@ HAWICK="Hawick"
HEART="Heart Attacks Beach" HEART="Heart Attacks Beach"
HORS="Vinewood Racetrack" HORS="Vinewood Racetrack"
HUMLAB="Laboratori di ricerca Humane" HUMLAB="Laboratori di ricerca Humane"
ISHEIST="Cayo Perico"
JAIL="Bolingbroke Penitentiary" JAIL="Bolingbroke Penitentiary"
KOREAT="Little Seoul" KOREAT="Little Seoul"
LACT="Land Act Reservoir" LACT="Land Act Reservoir"

View File

@ -42,6 +42,7 @@ HAWICK="ハウィック"
HEART="ハートアタック・ビーチ" HEART="ハートアタック・ビーチ"
HORS="バインウッド・レーストラック" HORS="バインウッド・レーストラック"
HUMLAB="ヒューメイン研究所" HUMLAB="ヒューメイン研究所"
ISHEIST="カヨ・ペリコ"
JAIL="ボーリングブローク刑務所" JAIL="ボーリングブローク刑務所"
KOREAT="リトル・ソウル" KOREAT="リトル・ソウル"
LACT="ランド・アクト貯水池" LACT="ランド・アクト貯水池"

View File

@ -42,6 +42,7 @@ HAWICK="호익"
HEART="하트 어택 해변" HEART="하트 어택 해변"
HORS="바인우드 레이스트랙" HORS="바인우드 레이스트랙"
HUMLAB="휴메인 실험 연구소" HUMLAB="휴메인 실험 연구소"
ISHEIST="카요 페리코"
JAIL="볼링브로크 교도소" JAIL="볼링브로크 교도소"
KOREAT="리틀 서울" KOREAT="리틀 서울"
LACT="랜드 액트 저수지" LACT="랜드 액트 저수지"

View File

@ -42,6 +42,7 @@ HAWICK="Hawick"
HEART="Plaża Zawałowców" HEART="Plaża Zawałowców"
HORS="Tor wyścigowy Vinewood" HORS="Tor wyścigowy Vinewood"
HUMLAB="Humane Labs and Research" HUMLAB="Humane Labs and Research"
ISHEIST="Cayo Perico"
JAIL="Zakład karny Bolingbroke" JAIL="Zakład karny Bolingbroke"
KOREAT="Mały Seul" KOREAT="Mały Seul"
LACT="Jezioro zaporowe" LACT="Jezioro zaporowe"

View File

@ -41,6 +41,7 @@ HAWICK="Hawick"
HEART="Heart Attacks Beach" HEART="Heart Attacks Beach"
HORS="Hipódromo de Vinewood" HORS="Hipódromo de Vinewood"
HUMLAB="Laboratórios e Pesquisas Humane" HUMLAB="Laboratórios e Pesquisas Humane"
ISHEIST="Cayo Perico"
JAIL="Penitenciária Bolingbroke" JAIL="Penitenciária Bolingbroke"
KOREAT="Little Seoul" KOREAT="Little Seoul"
LACT="Reservatório Land Act" LACT="Reservatório Land Act"

View File

@ -42,6 +42,7 @@ HAWICK="Хавик"
HEART="Харт-Аттакс-Бич" HEART="Харт-Аттакс-Бич"
HORS="Гоночная трасса Вайнвуда" HORS="Гоночная трасса Вайнвуда"
HUMLAB="Лаборатория Humane Labs and Research" HUMLAB="Лаборатория Humane Labs and Research"
ISHEIST="Кайо-Перико"
JAIL="Тюрьма Болингброук" JAIL="Тюрьма Болингброук"
KOREAT="Маленький Сеул" KOREAT="Маленький Сеул"
LACT="Лэнд-экт-резервуар" LACT="Лэнд-экт-резервуар"

View File

@ -41,6 +41,7 @@ HAWICK="霍伊克"
HEART="驚心海灘" HEART="驚心海灘"
HORS="好麥塢賽馬場" HORS="好麥塢賽馬場"
HUMLAB="人道研究實驗室" HUMLAB="人道研究實驗室"
ISHEIST="佩里克島"
JAIL="博林布魯克監獄" JAIL="博林布魯克監獄"
KOREAT="小首爾" KOREAT="小首爾"
LACT="蘭艾水庫" LACT="蘭艾水庫"

Binary file not shown.

View File

@ -305,7 +305,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V</translation>
<message> <message>
<location filename="../ImportDialog.ui" line="311"/> <location filename="../ImportDialog.ui" line="311"/>
<source>Resolution:</source> <source>Resolution:</source>
<translation>Résolution:</translation> <translation>Résolution :</translation>
</message> </message>
<message> <message>
<location filename="../ImportDialog.ui" line="324"/> <location filename="../ImportDialog.ui" line="324"/>

Binary file not shown.

View File

@ -46,26 +46,21 @@ void UiModWidget::setImageDropEnabled(bool enabled)
void UiModWidget::dragEnterEvent(QDragEnterEvent *dragEnterEvent) void UiModWidget::dragEnterEvent(QDragEnterEvent *dragEnterEvent)
{ {
if (filesDropEnabled && dragEnterEvent->mimeData()->hasUrls()) if (filesDropEnabled && dragEnterEvent->mimeData()->hasUrls()) {
{ QVector<QString> pathList;
QStringList pathList;
const QList<QUrl> urlList = dragEnterEvent->mimeData()->urls(); const QList<QUrl> urlList = dragEnterEvent->mimeData()->urls();
for (const QUrl &currentUrl : urlList) for (const QUrl &currentUrl : urlList) {
{ if (currentUrl.isLocalFile()) {
if (currentUrl.isLocalFile())
{
pathList.append(currentUrl.toLocalFile()); pathList.append(currentUrl.toLocalFile());
} }
} }
if (!pathList.isEmpty()) if (!pathList.isEmpty()) {
{
dragEnterEvent->acceptProposedAction(); dragEnterEvent->acceptProposedAction();
} }
} }
else if (imageDropEnabled && dragEnterEvent->mimeData()->hasImage()) else if (imageDropEnabled && dragEnterEvent->mimeData()->hasImage()) {
{
dragEnterEvent->acceptProposedAction(); dragEnterEvent->acceptProposedAction();
} }
} }
@ -80,11 +75,7 @@ void UiModWidget::paintEvent(QPaintEvent *paintEvent)
{ {
Q_UNUSED(paintEvent) Q_UNUSED(paintEvent)
QStyleOption opt; QStyleOption opt;
#if QT_VERSION <= 0x060000
opt.initFrom(this); opt.initFrom(this);
#else
opt.init(this);
#endif
QPainter p(this); QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
} }