added mass tool and improved import

This commit is contained in:
Syping 2017-12-17 13:03:43 +01:00
parent 98b7c766fe
commit 9b6253b848
40 changed files with 19799 additions and 1189 deletions

View File

@ -32,14 +32,14 @@ before_script:
script: script:
- cd qt5 - cd qt5
- qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev6\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - qmake -qt=5 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev7\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro
- make -j 4 - make -j 4
- sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev6 --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=dev7 --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 ..
- cd qt4 - cd qt4
- qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev6\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro - qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=c++11 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$PACKAGE_VERSION-dev7\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro
- make -j 4 - make -j 4
- sudo checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=dev6 --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=dev7 --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 .. - cd ..
deploy: deploy:

View File

@ -28,10 +28,6 @@ AboutDialog::AboutDialog(QWidget *parent) :
{ {
// Set Window Flags // Set Window Flags
setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint);
#ifdef Q_OS_LINUX
// for stupid Window Manager (GNOME 3 should feel triggered)
setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window);
#endif
// Build Strings // Build Strings
QString appVersion = qApp->applicationVersion(); QString appVersion = qApp->applicationVersion();

185
ImageEditorDialog.cpp Normal file
View File

@ -0,0 +1,185 @@
/*****************************************************************************
* gta5sync GRAND THEFT AUTO V SYNC
* Copyright (C) 2016-2017 Syping
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*****************************************************************************/
#include "ImageEditorDialog.h"
#include "ui_ImageEditorDialog.h"
#include "ProfileInterface.h"
#include "SidebarGenerator.h"
#include "StandardPaths.h"
#include "ImportDialog.h"
#include "AppEnv.h"
#include "config.h"
#include <QStringBuilder>
#include <QImageReader>
#include <QFileDialog>
#include <QMessageBox>
ImageEditorDialog::ImageEditorDialog(SnapmaticPicture *picture, QString profileName, QWidget *parent) :
QDialog(parent), smpic(picture), profileName(profileName),
ui(new Ui::ImageEditorDialog)
{
// Set Window Flags
setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint);
ui->setupUi(this);
ui->cmdClose->setFocus();
// DPI calculation
qreal screenRatio = AppEnv::screenRatio();
snapmaticResolutionLW = 516 * screenRatio; // 430
snapmaticResolutionLH = 288 * screenRatio; // 240
ui->labPicture->setMinimumSize(snapmaticResolutionLW, snapmaticResolutionLH);
ui->labCapacity->setText(tr("Capacity: %1").arg(QString::number(qRound((double)picture->getContentMaxLength() / 1024)) % " KB"));
imageIsChanged = false;
pictureCache = picture->getImage();
ui->labPicture->setPixmap(QPixmap::fromImage(pictureCache).scaled(snapmaticResolutionLW, snapmaticResolutionLH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
setMaximumSize(sizeHint());
setMinimumSize(sizeHint());
setFixedSize(sizeHint());
}
ImageEditorDialog::~ImageEditorDialog()
{
delete ui;
}
void ImageEditorDialog::on_cmdClose_clicked()
{
close();
}
void ImageEditorDialog::on_cmdReplace_clicked()
{
QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR);
settings.beginGroup("FileDialogs");
bool dontUseNativeDialog = settings.value("DontUseNativeDialog", false).toBool();
settings.beginGroup("ImportReplace");
fileDialogPreOpen: //Work?
QFileDialog fileDialog(this);
fileDialog.setFileMode(QFileDialog::ExistingFile);
fileDialog.setViewMode(QFileDialog::Detail);
fileDialog.setAcceptMode(QFileDialog::AcceptOpen);
fileDialog.setOption(QFileDialog::DontUseNativeDialog, dontUseNativeDialog);
fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint);
fileDialog.setWindowTitle(ProfileInterface::tr("Import..."));
fileDialog.setLabelText(QFileDialog::Accept, ProfileInterface::tr("Import"));
// Getting readable Image formats
QString imageFormatsStr = " ";
for (QByteArray imageFormat : QImageReader::supportedImageFormats())
{
imageFormatsStr += QString("*.") % QString::fromUtf8(imageFormat).toLower() % " ";
}
QStringList filters;
filters << ProfileInterface::tr("All image files (%1)").arg(imageFormatsStr.trimmed());
filters << ProfileInterface::tr("All files (**)");
fileDialog.setNameFilters(filters);
QList<QUrl> sidebarUrls = SidebarGenerator::generateSidebarUrls(fileDialog.sidebarUrls());
fileDialog.setSidebarUrls(sidebarUrls);
fileDialog.setDirectory(settings.value(profileName % "+Directory", StandardPaths::documentsLocation()).toString());
fileDialog.restoreGeometry(settings.value(profileName % "+Geometry", "").toByteArray());
if (fileDialog.exec())
{
QStringList selectedFiles = fileDialog.selectedFiles();
if (selectedFiles.length() == 1)
{
QString selectedFile = selectedFiles.at(0);
QString selectedFileName = QFileInfo(selectedFile).fileName();
QFile snapmaticFile(selectedFile);
if (!snapmaticFile.open(QFile::ReadOnly))
{
QMessageBox::warning(this, ProfileInterface::tr("Import"), ProfileInterface::tr("Can't import %1 because file can't be open").arg("\""+selectedFileName+"\""));
goto fileDialogPreOpen;
}
QImage *importImage = new QImage();
QImageReader snapmaticImageReader;
snapmaticImageReader.setDecideFormatFromContent(true);
snapmaticImageReader.setDevice(&snapmaticFile);
if (!snapmaticImageReader.read(importImage))
{
QMessageBox::warning(this, ProfileInterface::tr("Import"), ProfileInterface::tr("Can't import %1 because file can't be parsed properly").arg("\""+selectedFileName+"\""));
delete importImage;
goto fileDialogPreOpen;
}
ImportDialog *importDialog = new ImportDialog(this);
importDialog->setImage(importImage);
importDialog->setModal(true);
importDialog->show();
importDialog->exec();
if (importDialog->isImportAgreed())
{
pictureCache = importDialog->image();
ui->labPicture->setPixmap(QPixmap::fromImage(pictureCache).scaled(snapmaticResolutionLW, snapmaticResolutionLH, Qt::KeepAspectRatio, Qt::SmoothTransformation));
imageIsChanged = true;
}
delete importDialog;
}
}
settings.setValue(profileName % "+Geometry", fileDialog.saveGeometry());
settings.setValue(profileName % "+Directory", fileDialog.directory().absolutePath());
settings.endGroup();
settings.endGroup();
}
void ImageEditorDialog::on_cmdSave_clicked()
{
if (imageIsChanged)
{
const QByteArray previousPicture = smpic->getPictureStream();
bool success = smpic->setImage(pictureCache);
if (success)
{
QString currentFilePath = smpic->getPictureFilePath();
QString originalFilePath = smpic->getOriginalPictureFilePath();
QString backupFileName = originalFilePath % ".bak";
if (!QFile::exists(backupFileName))
{
QFile::copy(currentFilePath, backupFileName);
}
if (!smpic->exportPicture(currentFilePath))
{
smpic->setPictureStream(previousPicture);
QMessageBox::warning(this, tr("Snapmatic Image Editor"), tr("Patching of Snapmatic Image failed because of I/O Error"));
return;
}
smpic->emitCustomSignal("PictureUpdated");
}
else
{
QMessageBox::warning(this, tr("Snapmatic Image Editor"), tr("Patching of Snapmatic Image failed because of Image Error"));
return;
}
}
close();
}
void ImageEditorDialog::on_cmdQuestion_clicked()
{
QMessageBox::information(this, tr("Snapmatic Image Editor"), tr("Every taken Snapmatic have a different Capacity, a Snapmatic with higher Capacity can store a picture with better quality."));
}

53
ImageEditorDialog.h Normal file
View File

@ -0,0 +1,53 @@
/*****************************************************************************
* gta5sync GRAND THEFT AUTO V SYNC
* Copyright (C) 2016-2017 Syping
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*****************************************************************************/
#ifndef IMAGEEDITORDIALOG_H
#define IMAGEEDITORDIALOG_H
#include "SnapmaticPicture.h"
#include <QDialog>
namespace Ui {
class ImageEditorDialog;
}
class ImageEditorDialog : public QDialog
{
Q_OBJECT
public:
explicit ImageEditorDialog(SnapmaticPicture *picture, QString profileName, QWidget *parent = 0);
~ImageEditorDialog();
private slots:
void on_cmdClose_clicked();
void on_cmdReplace_clicked();
void on_cmdSave_clicked();
void on_cmdQuestion_clicked();
private:
SnapmaticPicture *smpic;
QString profileName;
Ui::ImageEditorDialog *ui;
int snapmaticResolutionLW;
int snapmaticResolutionLH;
bool imageIsChanged;
QImage pictureCache;
};
#endif // IMAGEEDITORDIALOG_H

130
ImageEditorDialog.ui Normal file
View File

@ -0,0 +1,130 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ImageEditorDialog</class>
<widget class="QDialog" name="ImageEditorDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>516</width>
<height>335</height>
</rect>
</property>
<property name="windowTitle">
<string>Overwrite Image...</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>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="labPicture">
<property name="minimumSize">
<size>
<width>516</width>
<height>288</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QFrame" name="buttomFrame">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<layout class="QVBoxLayout" name="vlButtons">
<item>
<layout class="QHBoxLayout" name="hlCapacity">
<item>
<widget class="QLabel" name="labCapacity">
<property name="text">
<string>Capacity: %1</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="cmdQuestion">
<property name="text">
<string>?</string>
</property>
</widget>
</item>
<item>
<spacer name="hsCapacity">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="hlButtons">
<item>
<widget class="QPushButton" name="cmdReplace">
<property name="text">
<string>&amp;Import...</string>
</property>
</widget>
</item>
<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>&amp;Overwrite</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="cmdClose">
<property name="text">
<string>&amp;Close</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -18,13 +18,21 @@
#include "ImportDialog.h" #include "ImportDialog.h"
#include "ui_ImportDialog.h" #include "ui_ImportDialog.h"
#include "SidebarGenerator.h"
#include "StandardPaths.h"
#include "AppEnv.h" #include "AppEnv.h"
#include "config.h"
#include <QStringBuilder>
#include <QImageReader>
#include <QColorDialog> #include <QColorDialog>
#include <QFileDialog>
#include <QMessageBox> #include <QMessageBox>
#include <QSettings>
#include <QPainter> #include <QPainter>
#include <QPixmap> #include <QPixmap>
#include <QImage> #include <QImage>
#include <QDebug> #include <QDebug>
#include <QFile>
#include <QRgb> #include <QRgb>
// IMAGES VALUES // IMAGES VALUES
@ -39,11 +47,7 @@ ImportDialog::ImportDialog(QWidget *parent) :
ui(new Ui::ImportDialog) ui(new Ui::ImportDialog)
{ {
// Set Window Flags // Set Window Flags
setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowMinMaxButtonsHint); setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint);
#ifdef Q_OS_LINUX
// for stupid Window Manager (GNOME 3 should feel triggered)
setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window);
#endif
ui->setupUi(this); ui->setupUi(this);
importAgreed = false; importAgreed = false;
@ -62,11 +66,15 @@ ImportDialog::ImportDialog(QWidget *parent) :
ui->cbIgnore->setChecked(false); ui->cbIgnore->setChecked(false);
ui->labColour->setText(tr("Background Colour: <span style=\"color: %1\">%1</span>").arg(selectedColour.name())); ui->labColour->setText(tr("Background Colour: <span style=\"color: %1\">%1</span>").arg(selectedColour.name()));
ui->labBackgroundImage->setText(tr("Background Image:"));
ui->cmdBackgroundWipe->setVisible(false);
// DPI calculation // DPI calculation
qreal screenRatio = AppEnv::screenRatio(); qreal screenRatio = AppEnv::screenRatio();
snapmaticResolutionLW = 430 * screenRatio; snapmaticResolutionLW = 516 * screenRatio; // 430
snapmaticResolutionLH = 240 * screenRatio; snapmaticResolutionLH = 288 * screenRatio; // 240
ui->labPicture->setMinimumSize(snapmaticResolutionLW, snapmaticResolutionLH);
ui->vlButtom->setSpacing(6 * screenRatio); ui->vlButtom->setSpacing(6 * screenRatio);
#ifndef Q_OS_MAC #ifndef Q_OS_MAC
ui->vlButtom->setContentsMargins(9 * screenRatio, 6 * screenRatio, 9 * screenRatio, 9 * screenRatio); ui->vlButtom->setContentsMargins(9 * screenRatio, 6 * screenRatio, 9 * screenRatio, 9 * screenRatio);
@ -80,9 +88,10 @@ ImportDialog::ImportDialog(QWidget *parent) :
ui->vlButtom->setContentsMargins(9 * screenRatio, 6 * screenRatio, 9 * screenRatio, 9 * screenRatio); ui->vlButtom->setContentsMargins(9 * screenRatio, 6 * screenRatio, 9 * screenRatio, 9 * screenRatio);
} }
#endif #endif
setMinimumSize(430 * screenRatio, 380 * screenRatio);
setMaximumSize(430 * screenRatio, 380 * screenRatio); setMaximumSize(sizeHint());
setFixedSize(430 * screenRatio, 380 * screenRatio); setMinimumSize(sizeHint());
setFixedSize(sizeHint());
} }
ImportDialog::~ImportDialog() ImportDialog::~ImportDialog()
@ -97,6 +106,33 @@ void ImportDialog::processImage()
QPixmap snapmaticPixmap(snapmaticResolutionW, snapmaticResolutionH); QPixmap snapmaticPixmap(snapmaticResolutionW, snapmaticResolutionH);
snapmaticPixmap.fill(selectedColour); snapmaticPixmap.fill(selectedColour);
QPainter snapmaticPainter(&snapmaticPixmap); QPainter snapmaticPainter(&snapmaticPixmap);
if (!backImage.isNull())
{
if (!ui->cbStretch->isChecked())
{
int diffWidth = 0;
int diffHeight = 0;
if (backImage.width() != snapmaticResolutionW)
{
diffWidth = snapmaticResolutionW - backImage.width();
diffWidth = diffWidth / 2;
}
else if (backImage.height() != snapmaticResolutionH)
{
diffHeight = snapmaticResolutionH - backImage.height();
diffHeight = diffHeight / 2;
}
snapmaticPainter.drawImage(0 + diffWidth, 0 + diffHeight, backImage);
}
else
{
snapmaticPainter.drawImage(0, 0, QImage(backImage).scaled(snapmaticResolutionW, snapmaticResolutionH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
}
if (ui->cbAvatar->isChecked() && ui->cbForceAvatarColour->isChecked())
{
snapmaticPainter.fillRect(snapmaticAvatarPlacementW, snapmaticAvatarPlacementH, snapmaticAvatarResolution, snapmaticAvatarResolution, selectedColour);
}
}
if (insideAvatarZone) if (insideAvatarZone)
{ {
// Avatar mode // Avatar mode
@ -262,3 +298,95 @@ void ImportDialog::on_cmdColourChange_clicked()
processImage(); processImage();
} }
} }
void ImportDialog::on_cmdBackgroundChange_clicked()
{
QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR);
settings.beginGroup("FileDialogs");
bool dontUseNativeDialog = settings.value("DontUseNativeDialog", false).toBool();
settings.beginGroup("ImportBackground");
fileDialogPreOpen:
QFileDialog fileDialog(this);
fileDialog.setFileMode(QFileDialog::ExistingFiles);
fileDialog.setViewMode(QFileDialog::Detail);
fileDialog.setAcceptMode(QFileDialog::AcceptOpen);
fileDialog.setOption(QFileDialog::DontUseNativeDialog, dontUseNativeDialog);
fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint);
fileDialog.setWindowTitle(QApplication::translate("ProfileInterface", "Import..."));
fileDialog.setLabelText(QFileDialog::Accept, QApplication::translate("ProfileInterface", "Import"));
// Getting readable Image formats
QString imageFormatsStr = " ";
for (QByteArray imageFormat : QImageReader::supportedImageFormats())
{
imageFormatsStr += QString("*.") % QString::fromUtf8(imageFormat).toLower() % " ";
}
QStringList filters;
filters << QApplication::translate("ProfileInterface", "All image files (%1)").arg(imageFormatsStr.trimmed());
filters << QApplication::translate("ProfileInterface", "All files (**)");
fileDialog.setNameFilters(filters);
QList<QUrl> sidebarUrls = SidebarGenerator::generateSidebarUrls(fileDialog.sidebarUrls());
fileDialog.setSidebarUrls(sidebarUrls);
fileDialog.setDirectory(settings.value("Directory", StandardPaths::documentsLocation()).toString());
fileDialog.restoreGeometry(settings.value("Geometry", "").toByteArray());
if (fileDialog.exec())
{
QStringList selectedFiles = fileDialog.selectedFiles();
if (selectedFiles.length() == 1)
{
QString selectedFile = selectedFiles.at(0);
QString selectedFileName = QFileInfo(selectedFile).fileName();
QFile snapmaticFile(selectedFile);
if (!snapmaticFile.open(QFile::ReadOnly))
{
QMessageBox::warning(this, QApplication::translate("ProfileInterface", "Import"), QApplication::translate("ProfileInterface", "Can't import %1 because file can't be open").arg("\""+selectedFileName+"\""));
goto fileDialogPreOpen;
}
QImage importImage;
QImageReader snapmaticImageReader;
snapmaticImageReader.setDecideFormatFromContent(true);
snapmaticImageReader.setDevice(&snapmaticFile);
if (!snapmaticImageReader.read(&importImage))
{
QMessageBox::warning(this, QApplication::translate("ProfileInterface", "Import"), QApplication::translate("ProfileInterface", "Can't import %1 because file can't be parsed properly").arg("\""+selectedFileName+"\""));
goto fileDialogPreOpen;
}
backImage = importImage.scaled(snapmaticResolutionW, snapmaticResolutionH, Qt::KeepAspectRatio, Qt::SmoothTransformation);
backgroundPath = selectedFile;
ui->labBackgroundImage->setText(tr("Background Image: %1").arg(tr("File", "Background Image: File")));
ui->cmdBackgroundWipe->setVisible(true);
processImage();
}
}
settings.setValue("Geometry", fileDialog.saveGeometry());
settings.setValue("Directory", fileDialog.directory().absolutePath());
settings.endGroup();
settings.endGroup();
}
void ImportDialog::on_cmdBackgroundWipe_clicked()
{
backImage = QImage();
ui->labBackgroundImage->setText(tr("Background Image:"));
ui->cmdBackgroundWipe->setVisible(false);
processImage();
}
void ImportDialog::on_cbStretch_toggled(bool checked)
{
Q_UNUSED(checked)
processImage();
}
void ImportDialog::on_cbForceAvatarColour_toggled(bool checked)
{
Q_UNUSED(checked)
processImage();
}

View File

@ -45,11 +45,17 @@ private slots:
void on_cmdOK_clicked(); void on_cmdOK_clicked();
void on_labPicture_labelPainted(); void on_labPicture_labelPainted();
void on_cmdColourChange_clicked(); void on_cmdColourChange_clicked();
void on_cmdBackgroundChange_clicked();
void on_cmdBackgroundWipe_clicked();
void on_cbStretch_toggled(bool checked);
void on_cbForceAvatarColour_toggled(bool checked);
private: private:
Ui::ImportDialog *ui; Ui::ImportDialog *ui;
QImage avatarAreaImage; QImage avatarAreaImage;
QString backgroundPath;
QString imageTitle; QString imageTitle;
QImage backImage;
QImage workImage; QImage workImage;
QImage newImage; QImage newImage;
QColor selectedColour; QColor selectedColour;

View File

@ -6,20 +6,14 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>430</width> <width>516</width>
<height>380</height> <height>425</height>
</rect> </rect>
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>430</width> <width>516</width>
<height>380</height> <height>425</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>430</width>
<height>380</height>
</size> </size>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -45,8 +39,8 @@
<widget class="UiModLabel" name="labPicture"> <widget class="UiModLabel" name="labPicture">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>430</width> <width>516</width>
<height>240</height> <height>288</height>
</size> </size>
</property> </property>
<property name="text"> <property name="text">
@ -87,40 +81,9 @@
<item> <item>
<widget class="QGroupBox" name="gbSettings"> <widget class="QGroupBox" name="gbSettings">
<property name="title"> <property name="title">
<string>Settings</string> <string>Picture</string>
</property> </property>
<layout class="QVBoxLayout" name="vlSettings"> <layout class="QVBoxLayout" name="vlSettings">
<item>
<layout class="QHBoxLayout" name="hlColor">
<item>
<widget class="QLabel" name="labColour">
<property name="text">
<string>Background Colour: &lt;span style=&quot;color: %1&quot;&gt;%1&lt;/span&gt;</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="cmdColourChange">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item>
<spacer name="hsColourSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item> <item>
<layout class="QHBoxLayout" name="hlCheckboxes"> <layout class="QHBoxLayout" name="hlCheckboxes">
<item> <item>
@ -155,7 +118,148 @@
</widget> </widget>
</item> </item>
<item> <item>
<spacer name="vsDialog"> <widget class="QGroupBox" name="gbBackground">
<property name="title">
<string>Background</string>
</property>
<layout class="QVBoxLayout" name="vlBackground">
<item>
<layout class="QHBoxLayout" name="hlColor">
<item>
<layout class="QHBoxLayout" name="hlColourManage">
<item>
<widget class="QLabel" name="labColour">
<property name="text">
<string>Background Colour: &lt;span style=&quot;color: %1&quot;&gt;%1&lt;/span&gt;</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="hlColourButton">
<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="QToolButton" name="cmdColourChange">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="hsColour">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="hlBackgroundManage">
<item>
<widget class="QLabel" name="labBackgroundImage">
<property name="text">
<string>Background Image:</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="hlBackgroundButton">
<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="QToolButton" name="cmdBackgroundChange">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="cmdBackgroundWipe">
<property name="text">
<string>X</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="hsBackgroundImage">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="hlBackground">
<item>
<widget class="QCheckBox" name="cbForceAvatarColour">
<property name="text">
<string>Force Colour in Avatar Zone</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbStretch">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Ignore Aspect Ratio</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="vsInterface">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
</property> </property>

View File

@ -35,10 +35,6 @@ JsonEditorDialog::JsonEditorDialog(SnapmaticPicture *picture, QWidget *parent) :
{ {
// Set Window Flags // Set Window Flags
setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowMinMaxButtonsHint); setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowMinMaxButtonsHint);
#ifdef Q_OS_LINUX
// for stupid Window Manager (GNOME 3 should feel triggered)
setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window);
#endif
ui->setupUi(this); ui->setupUi(this);
ui->cmdClose->setDefault(true); ui->cmdClose->setDefault(true);

View File

@ -29,10 +29,6 @@ MapLocationDialog::MapLocationDialog(double x, double y, QWidget *parent) :
{ {
// Set Window Flags // Set Window Flags
setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint);
#ifdef Q_OS_LINUX
// for stupid Window Manager (GNOME 3 should feel triggered)
setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window);
#endif
ui->setupUi(this); ui->setupUi(this);
ui->cmdDone->setVisible(false); ui->cmdDone->setVisible(false);

View File

@ -42,10 +42,6 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) :
{ {
// Set Window Flags // Set Window Flags
setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint);
#ifdef Q_OS_LINUX
// for stupid Window Manager (GNOME 3 should feel triggered)
setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window);
#endif
// Setup User Interface // Setup User Interface
ui->setupUi(this); ui->setupUi(this);
@ -86,9 +82,11 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) :
setupInterfaceSettings(); setupInterfaceSettings();
setupSnapmaticPictureViewer(); setupSnapmaticPictureViewer();
#ifndef Q_QS_ANDROID
// DPI calculation // DPI calculation
qreal screenRatio = AppEnv::screenRatio(); qreal screenRatio = AppEnv::screenRatio();
resize(435 * screenRatio, 405 * screenRatio); resize(435 * screenRatio, 405 * screenRatio);
#endif
#ifdef GTA5SYNC_DISABLED #ifdef GTA5SYNC_DISABLED
ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabSync)); ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabSync));

View File

@ -22,6 +22,7 @@
#include "ui_PictureDialog.h" #include "ui_PictureDialog.h"
#include "SidebarGenerator.h" #include "SidebarGenerator.h"
#include "MapLocationDialog.h" #include "MapLocationDialog.h"
#include "ImageEditorDialog.h"
#include "JsonEditorDialog.h" #include "JsonEditorDialog.h"
#include "SnapmaticEditor.h" #include "SnapmaticEditor.h"
#include "StandardPaths.h" #include "StandardPaths.h"
@ -84,6 +85,14 @@ PictureDialog::PictureDialog(ProfileDatabase *profileDB, CrewDatabase *crewDB, Q
setupPictureDialog(); setupPictureDialog();
} }
PictureDialog::PictureDialog(ProfileDatabase *profileDB, CrewDatabase *crewDB, QString profileName, QWidget *parent) :
QDialog(parent), profileDB(profileDB), crewDB(crewDB), profileName(profileName),
ui(new Ui::PictureDialog)
{
primaryWindow = false;
setupPictureDialog();
}
PictureDialog::PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent) : PictureDialog::PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent) :
QDialog(parent), primaryWindow(primaryWindow), profileDB(profileDB), crewDB(crewDB), QDialog(parent), primaryWindow(primaryWindow), profileDB(profileDB), crewDB(crewDB),
ui(new Ui::PictureDialog) ui(new Ui::PictureDialog)
@ -91,6 +100,13 @@ PictureDialog::PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, Cre
setupPictureDialog(); setupPictureDialog();
} }
PictureDialog::PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, CrewDatabase *crewDB, QString profileName, QWidget *parent) :
QDialog(parent), primaryWindow(primaryWindow), profileDB(profileDB), crewDB(crewDB), profileName(profileName),
ui(new Ui::PictureDialog)
{
setupPictureDialog();
}
void PictureDialog::setupPictureDialog() void PictureDialog::setupPictureDialog()
{ {
// Set Window Flags // Set Window Flags
@ -137,6 +153,7 @@ void PictureDialog::setupPictureDialog()
manageMenu->addAction(tr("Export as &Snapmatic..."), this, SLOT(copySnapmaticPicture())); manageMenu->addAction(tr("Export as &Snapmatic..."), this, SLOT(copySnapmaticPicture()));
manageMenu->addSeparator(); manageMenu->addSeparator();
manageMenu->addAction(tr("&Edit Properties..."), this, SLOT(editSnapmaticProperties())); manageMenu->addAction(tr("&Edit Properties..."), this, SLOT(editSnapmaticProperties()));
manageMenu->addAction(tr("&Overwrite Image..."), this, SLOT(editSnapmaticImage()));
manageMenu->addSeparator(); manageMenu->addSeparator();
QAction *openViewerAction = manageMenu->addAction(tr("Open &Map Viewer..."), this, SLOT(openPreviewMap())); QAction *openViewerAction = manageMenu->addAction(tr("Open &Map Viewer..."), this, SLOT(openPreviewMap()));
openViewerAction->setShortcut(Qt::Key_M); openViewerAction->setShortcut(Qt::Key_M);
@ -583,7 +600,7 @@ void PictureDialog::renderOverlayPicture()
void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, bool _indexed, int _index) void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, bool _indexed, int _index)
{ {
if (smpic != nullptr) smpic->disconnect(this, SLOT(updated())); if (smpic != nullptr) smpic->disconnect();
snapmaticPicture = QImage(); snapmaticPicture = QImage();
indexed = _indexed; indexed = _indexed;
index = _index; index = _index;
@ -620,6 +637,7 @@ void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk,
QMessageBox::warning(this,tr("Snapmatic Picture Viewer"),tr("Failed at %1").arg(picture->getLastStep())); QMessageBox::warning(this,tr("Snapmatic Picture Viewer"),tr("Failed at %1").arg(picture->getLastStep()));
} }
QObject::connect(smpic, SIGNAL(updated()), this, SLOT(updated())); QObject::connect(smpic, SIGNAL(updated()), this, SLOT(updated()));
QObject::connect(smpic, SIGNAL(customSignal(QString)), this, SLOT(customSignal(QString)));
emit newPictureCommited(snapmaticPicture); emit newPictureCommited(snapmaticPicture);
} }
@ -808,6 +826,11 @@ void PictureDialog::on_labPicture_mouseDoubleClicked(Qt::MouseButton button)
pictureWidget->move(desktopRect.x(), desktopRect.y()); pictureWidget->move(desktopRect.x(), desktopRect.y());
pictureWidget->resize(desktopRect.width(), desktopRect.height()); pictureWidget->resize(desktopRect.width(), desktopRect.height());
#ifdef GTA5SYNC_WIN
#if QT_VERSION >= 0x050200
QtWin::markFullscreenWindow(pictureWidget, true);
#endif
#endif
pictureWidget->showFullScreen(); pictureWidget->showFullScreen();
pictureWidget->setFocus(); pictureWidget->setFocus();
pictureWidget->raise(); pictureWidget->raise();
@ -847,7 +870,11 @@ void PictureDialog::openPreviewMap()
} }
mapLocDialog->setWindowIcon(windowIcon()); mapLocDialog->setWindowIcon(windowIcon());
mapLocDialog->setModal(true); mapLocDialog->setModal(true);
#ifndef Q_OS_ANDROID
mapLocDialog->show(); mapLocDialog->show();
#else
mapLocDialog->showMaximized();
#endif
mapLocDialog->exec(); mapLocDialog->exec();
if (mapLocDialog->propUpdated()) if (mapLocDialog->propUpdated())
{ {
@ -895,11 +922,38 @@ void PictureDialog::editSnapmaticProperties()
snapmaticEditor->setWindowIcon(windowIcon()); snapmaticEditor->setWindowIcon(windowIcon());
snapmaticEditor->setSnapmaticPicture(picture); snapmaticEditor->setSnapmaticPicture(picture);
snapmaticEditor->setModal(true); snapmaticEditor->setModal(true);
#ifndef Q_OS_ANDROID
snapmaticEditor->show(); snapmaticEditor->show();
#else
snapmaticEditor->showMaximized();
#endif
snapmaticEditor->exec(); snapmaticEditor->exec();
delete snapmaticEditor; delete snapmaticEditor;
} }
void PictureDialog::editSnapmaticImage()
{
SnapmaticPicture *picture = smpic;
ImageEditorDialog *imageEditor;
if (rqFullscreen && fullscreenWidget != nullptr)
{
imageEditor = new ImageEditorDialog(picture, profileName, fullscreenWidget);
}
else
{
imageEditor = new ImageEditorDialog(picture, profileName, this);
}
imageEditor->setWindowIcon(windowIcon());
imageEditor->setModal(true);
#ifndef Q_OS_ANDROID
imageEditor->show();
#else
snapmaticEditor->showMaximized();
#endif
imageEditor->exec();
delete imageEditor;
}
void PictureDialog::editSnapmaticRawJson() void PictureDialog::editSnapmaticRawJson()
{ {
SnapmaticPicture *picture = smpic; SnapmaticPicture *picture = smpic;
@ -914,7 +968,11 @@ void PictureDialog::editSnapmaticRawJson()
} }
jsonEditor->setWindowIcon(windowIcon()); jsonEditor->setWindowIcon(windowIcon());
jsonEditor->setModal(true); jsonEditor->setModal(true);
#ifndef Q_OS_ANDROID
jsonEditor->show(); jsonEditor->show();
#else
jsonEditor->showMaximized();
#endif
jsonEditor->exec(); jsonEditor->exec();
delete jsonEditor; delete jsonEditor;
} }
@ -933,3 +991,13 @@ void PictureDialog::updated()
} }
ui->labJSON->setText(jsonDrawString.arg(locX, locY, locZ, generatePlayersString(), generateCrewString(), picTitl, picAreaStr, created)); ui->labJSON->setText(jsonDrawString.arg(locX, locY, locZ, generatePlayersString(), generateCrewString(), picTitl, picAreaStr, created));
} }
void PictureDialog::customSignal(QString signal)
{
SnapmaticPicture *picture = smpic; // used by macro
if (signal == "PictureUpdated")
{
snapmaticPicture = picture->getImage();
renderPicture();
}
}

View File

@ -46,7 +46,9 @@ class PictureDialog : public QDialog
Q_OBJECT Q_OBJECT
public: public:
explicit PictureDialog(ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent = 0); explicit PictureDialog(ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent = 0);
explicit PictureDialog(ProfileDatabase *profileDB, CrewDatabase *crewDB, QString profileName, QWidget *parent = 0);
explicit PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent = 0); explicit PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, CrewDatabase *crewDB, QWidget *parent = 0);
explicit PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, CrewDatabase *crewDB, QString profileName, QWidget *parent = 0);
void setupPictureDialog(); void setupPictureDialog();
void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, bool indexed, int index); void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, bool indexed, int index);
void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, int index); void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk, int index);
@ -78,10 +80,12 @@ private slots:
void previousPictureRequestedSlot(); void previousPictureRequestedSlot();
void editSnapmaticProperties(); void editSnapmaticProperties();
void editSnapmaticRawJson(); void editSnapmaticRawJson();
void editSnapmaticImage();
void renderOverlayPicture(); void renderOverlayPicture();
void renderPicture(); void renderPicture();
void openPreviewMap(); void openPreviewMap();
void updated(); void updated();
void customSignal(QString signal);
signals: signals:
void nextPictureRequested(); void nextPictureRequested();
@ -110,6 +114,7 @@ private:
bool primaryWindow; bool primaryWindow;
ProfileDatabase *profileDB; ProfileDatabase *profileDB;
CrewDatabase *crewDB; CrewDatabase *crewDB;
QString profileName;
Ui::PictureDialog *ui; Ui::PictureDialog *ui;
QMap<QString, QString> globalMap; QMap<QString, QString> globalMap;
SnapmaticPicture *smpic; SnapmaticPicture *smpic;

View File

@ -32,10 +32,8 @@ PlayerListDialog::PlayerListDialog(QStringList players, ProfileDatabase *profile
{ {
// Set Window Flags // Set Window Flags
setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint);
#ifdef Q_OS_LINUX
// for stupid Window Manager (GNOME 3 should feel triggered) listUpdated = false;
setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window);
#endif
ui->setupUi(this); ui->setupUi(this);
ui->cmdCancel->setDefault(true); ui->cmdCancel->setDefault(true);
@ -237,5 +235,16 @@ void PlayerListDialog::on_cmdApply_clicked()
players += ui->listSePlayers->item(i)->text().split(" ").at(0); players += ui->listSePlayers->item(i)->text().split(" ").at(0);
} }
emit playerListUpdated(players); emit playerListUpdated(players);
listUpdated = true;
close(); close();
} }
QStringList PlayerListDialog::getPlayerList() const
{
return players;
}
bool PlayerListDialog::isListUpdated()
{
return listUpdated;
}

View File

@ -32,6 +32,8 @@ class PlayerListDialog : public QDialog
public: public:
explicit PlayerListDialog(QStringList players, ProfileDatabase *profileDB, QWidget *parent = 0); explicit PlayerListDialog(QStringList players, ProfileDatabase *profileDB, QWidget *parent = 0);
QStringList getPlayerList() const;
bool isListUpdated();
~PlayerListDialog(); ~PlayerListDialog();
private slots: private slots:
@ -45,6 +47,7 @@ private:
QStringList players; QStringList players;
ProfileDatabase *profileDB; ProfileDatabase *profileDB;
Ui::PlayerListDialog *ui; Ui::PlayerListDialog *ui;
bool listUpdated;
void drawSwitchButtons(); void drawSwitchButtons();
void buildInterface(); void buildInterface();

View File

@ -18,6 +18,7 @@
#include "ProfileInterface.h" #include "ProfileInterface.h"
#include "ui_ProfileInterface.h" #include "ui_ProfileInterface.h"
#include "PlayerListDialog.h"
#include "SidebarGenerator.h" #include "SidebarGenerator.h"
#include "SnapmaticWidget.h" #include "SnapmaticWidget.h"
#include "DatabaseThread.h" #include "DatabaseThread.h"
@ -187,7 +188,7 @@ void ProfileInterface::pictureFixed_event(SnapmaticPicture *picture)
void ProfileInterface::pictureLoaded(SnapmaticPicture *picture, bool inserted) void ProfileInterface::pictureLoaded(SnapmaticPicture *picture, bool inserted)
{ {
SnapmaticWidget *picWidget = new SnapmaticWidget(profileDB, crewDB, threadDB, this); SnapmaticWidget *picWidget = new SnapmaticWidget(profileDB, crewDB, threadDB, profileName, this);
picWidget->setSnapmaticPicture(picture); picWidget->setSnapmaticPicture(picture);
picWidget->setContentMode(contentMode); picWidget->setContentMode(contentMode);
picWidget->setMouseTracking(true); picWidget->setMouseTracking(true);
@ -502,15 +503,15 @@ fileDialogPreOpen: //Work?
void ProfileInterface::importFilesProgress(QStringList selectedFiles) void ProfileInterface::importFilesProgress(QStringList selectedFiles)
{ {
int maximumId = selectedFiles.length(); int maximumId = selectedFiles.length();
int overallId = 1; int overallId = 0;
QString errorStr; QString errorStr;
QStringList failedFiles; QStringList failed;
// Progress dialog // Progress dialog
QProgressDialog pbDialog(this); QProgressDialog pbDialog(this);
pbDialog.setWindowFlags(pbDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint); pbDialog.setWindowFlags(pbDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint);
pbDialog.setWindowTitle(tr("Import...")); pbDialog.setWindowTitle(tr("Import..."));
pbDialog.setLabelText(tr("Import file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId))); pbDialog.setLabelText(tr("Import file %1 of %2 files").arg(QString::number(1), QString::number(maximumId)));
pbDialog.setRange(1, maximumId); pbDialog.setRange(1, maximumId);
pbDialog.setValue(1); pbDialog.setValue(1);
pbDialog.setModal(true); pbDialog.setModal(true);
@ -518,6 +519,7 @@ void ProfileInterface::importFilesProgress(QStringList selectedFiles)
pbBtn.at(0)->setDisabled(true); pbBtn.at(0)->setDisabled(true);
QList<QProgressBar*> pbBar = pbDialog.findChildren<QProgressBar*>(); QList<QProgressBar*> pbBar = pbDialog.findChildren<QProgressBar*>();
pbBar.at(0)->setTextVisible(false); pbBar.at(0)->setTextVisible(false);
pbDialog.setAutoClose(false);
pbDialog.show(); pbDialog.show();
// THREADING HERE PLEASE // THREADING HERE PLEASE
@ -525,18 +527,18 @@ void ProfileInterface::importFilesProgress(QStringList selectedFiles)
int currentTime = importDateTime.time().toString(importTimeFormat).toInt(); int currentTime = importDateTime.time().toString(importTimeFormat).toInt();
for (QString selectedFile : selectedFiles) for (QString selectedFile : selectedFiles)
{ {
overallId++;
pbDialog.setValue(overallId); pbDialog.setValue(overallId);
pbDialog.setLabelText(tr("Import file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId))); pbDialog.setLabelText(tr("Import file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId)));
importDateTime = QDateTime::currentDateTime(); importDateTime = QDateTime::currentDateTime();
if (!importFile(selectedFile, importDateTime, &currentTime, false)) if (!importFile(selectedFile, importDateTime, &currentTime, false))
{ {
failedFiles << QFileInfo(selectedFile).fileName(); failed << QFileInfo(selectedFile).fileName();
} }
overallId++;
} }
pbDialog.close(); pbDialog.close();
for (QString curErrorStr : failedFiles) for (QString curErrorStr : failed)
{ {
errorStr += ", " % curErrorStr; errorStr += ", " % curErrorStr;
} }
@ -685,6 +687,7 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime
QFile snapmaticFile(selectedFile); QFile snapmaticFile(selectedFile);
if (!snapmaticFile.open(QFile::ReadOnly)) if (!snapmaticFile.open(QFile::ReadOnly))
{ {
QMessageBox::warning(this, tr("Import"), tr("Can't import %1 because file can't be open").arg("\""+selectedFileName+"\""));
delete picture; delete picture;
return false; return false;
} }
@ -695,6 +698,7 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime
if (!snapmaticImageReader.read(importImage)) if (!snapmaticImageReader.read(importImage))
{ {
QMessageBox::warning(this, tr("Import"), tr("Can't import %1 because file can't be parsed properly").arg("\""+selectedFileName+"\"")); QMessageBox::warning(this, tr("Import"), tr("Can't import %1 because file can't be parsed properly").arg("\""+selectedFileName+"\""));
delete importImage;
delete picture; delete picture;
return false; return false;
} }
@ -913,7 +917,7 @@ void ProfileInterface::exportSelected()
settings.beginGroup("FileDialogs"); settings.beginGroup("FileDialogs");
//bool dontUseNativeDialog = settings.value("DontUseNativeDialog", false).toBool(); //bool dontUseNativeDialog = settings.value("DontUseNativeDialog", false).toBool();
settings.beginGroup("ExportDirectory"); settings.beginGroup("ExportDirectory");
QString exportDirectory = QFileDialog::getExistingDirectory(this, tr("Export selected"), settings.value(profileName, profileFolder).toString()); QString exportDirectory = QFileDialog::getExistingDirectory(this, tr("Export selected..."), settings.value(profileName, profileFolder).toString());
if (exportDirectory != "") if (exportDirectory != "")
{ {
settings.setValue(profileName, exportDirectory); settings.setValue(profileName, exportDirectory);
@ -951,7 +955,7 @@ void ProfileInterface::exportSelected()
#endif #endif
bool itemSelected = false; bool itemSelected = false;
QString selectedItem = inputDialog.getItem(this, tr("Export selected"), tr("%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:").arg(ExportPreSpan, ExportPostSpan), inputDialogItems, 0, false, &itemSelected, inputDialog.windowFlags()^Qt::WindowContextHelpButtonHint); QString selectedItem = inputDialog.getItem(this, tr("Export selected..."), tr("%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:").arg(ExportPreSpan, ExportPostSpan), inputDialogItems, 0, false, &itemSelected, inputDialog.windowFlags()^Qt::WindowContextHelpButtonHint);
if (itemSelected) if (itemSelected)
{ {
if (selectedItem == tr("JPG pictures and GTA Snapmatic")) if (selectedItem == tr("JPG pictures and GTA Snapmatic"))
@ -1012,6 +1016,7 @@ void ProfileInterface::exportSelected()
QObject::connect(exportThread, SIGNAL(exportFinished()), &pbDialog, SLOT(close())); QObject::connect(exportThread, SIGNAL(exportFinished()), &pbDialog, SLOT(close()));
exportThread->start(); exportThread->start();
pbDialog.setAutoClose(false);
pbDialog.exec(); pbDialog.exec();
QStringList getFailedSavegames = exportThread->getFailedSavegames(); QStringList getFailedSavegames = exportThread->getFailedSavegames();
QStringList getFailedCopyPictures = exportThread->getFailedCopyPictures(); QStringList getFailedCopyPictures = exportThread->getFailedCopyPictures();
@ -1208,6 +1213,7 @@ void ProfileInterface::contextMenuTriggeredPIC(QContextMenuEvent *ev)
editMenu.addAction(SnapmaticWidget::tr("Hide &In-game"), picWidget, SLOT(makePictureHiddenSlot())); editMenu.addAction(SnapmaticWidget::tr("Hide &In-game"), picWidget, SLOT(makePictureHiddenSlot()));
} }
editMenu.addAction(PictureDialog::tr("&Edit Properties..."), picWidget, SLOT(editSnapmaticProperties())); editMenu.addAction(PictureDialog::tr("&Edit Properties..."), picWidget, SLOT(editSnapmaticProperties()));
editMenu.addAction(PictureDialog::tr("&Overwrite Image..."), picWidget, SLOT(editSnapmaticImage()));
editMenu.addSeparator(); editMenu.addSeparator();
editMenu.addAction(PictureDialog::tr("Open &Map Viewer..."), picWidget, SLOT(openMapViewer())); editMenu.addAction(PictureDialog::tr("Open &Map Viewer..."), picWidget, SLOT(openMapViewer()));
editMenu.addAction(PictureDialog::tr("Open &JSON Editor..."), picWidget, SLOT(editSnapmaticRawJson())); editMenu.addAction(PictureDialog::tr("Open &JSON Editor..."), picWidget, SLOT(editSnapmaticRawJson()));
@ -1490,3 +1496,406 @@ bool ProfileInterface::isSupportedImageFile(QString selectedFileName)
} }
return false; return false;
} }
void ProfileInterface::massTool(MassTool tool)
{
switch(tool)
{
case MassTool::Qualify:
{
QList<SnapmaticWidget*> snapmaticWidgets;
for (ProfileWidget *widget : widgets.keys())
{
if (widget->isSelected())
{
if (widget->getWidgetType() == "SnapmaticWidget")
{
SnapmaticWidget *snapmaticWidget = qobject_cast<SnapmaticWidget*>(widget);
snapmaticWidgets += snapmaticWidget;
}
}
}
if (snapmaticWidgets.isEmpty())
{
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("You don't have any Snapmatics selected!"));
return;
}
// Prepare Progress
int maximumId = snapmaticWidgets.length();
int overallId = 0;
QProgressDialog pbDialog(this);
pbDialog.setWindowFlags(pbDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint);
pbDialog.setWindowTitle(tr("Patch selected..."));
pbDialog.setLabelText(tr("Patch file %1 of %2 files").arg(QString::number(1), QString::number(maximumId)));
pbDialog.setRange(1, maximumId);
pbDialog.setValue(1);
pbDialog.setModal(true);
QList<QPushButton*> pbBtn = pbDialog.findChildren<QPushButton*>();
pbBtn.at(0)->setDisabled(true);
QList<QProgressBar*> pbBar = pbDialog.findChildren<QProgressBar*>();
pbBar.at(0)->setTextVisible(false);
pbDialog.setAutoClose(false);
pbDialog.show();
// Begin Progress
QStringList fails;
for (SnapmaticWidget *snapmaticWidget : snapmaticWidgets)
{
// Update Progress
overallId++;
pbDialog.setValue(overallId);
pbDialog.setLabelText(tr("Patch file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId)));
SnapmaticPicture *picture = snapmaticWidget->getPicture();
SnapmaticProperties snapmaticProperties = picture->getSnapmaticProperties();
snapmaticProperties.isSelfie = true;
snapmaticProperties.isMug = false;
snapmaticProperties.isFromRSEditor = false;
snapmaticProperties.isFromDirector = false;
snapmaticProperties.isMeme = false;
QString currentFilePath = picture->getPictureFilePath();
QString originalFilePath = picture->getOriginalPictureFilePath();
QString backupFileName = originalFilePath % ".bak";
if (!QFile::exists(backupFileName))
{
QFile::copy(currentFilePath, backupFileName);
}
SnapmaticProperties fallbackProperties = picture->getSnapmaticProperties();
picture->setSnapmaticProperties(snapmaticProperties);
if (!picture->exportPicture(currentFilePath))
{
picture->setSnapmaticProperties(fallbackProperties);
fails << QString("%1 [%2]").arg(picture->getPictureTitle(), picture->getPictureString());
}
else
{
picture->emitUpdate();
qApp->processEvents();
}
}
pbDialog.close();
if (!fails.isEmpty())
{
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Qualify", "%1 failed with..."), fails.join(", ")));
}
}
break;
case MassTool::Players:
{
QList<SnapmaticWidget*> snapmaticWidgets;
for (ProfileWidget *widget : widgets.keys())
{
if (widget->isSelected())
{
if (widget->getWidgetType() == "SnapmaticWidget")
{
SnapmaticWidget *snapmaticWidget = qobject_cast<SnapmaticWidget*>(widget);
snapmaticWidgets += snapmaticWidget;
}
}
}
if (snapmaticWidgets.isEmpty())
{
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("You don't have any Snapmatics selected!"));
return;
}
PlayerListDialog *playerListDialog = new PlayerListDialog(QStringList(), profileDB, this);
playerListDialog->setModal(true);
playerListDialog->show();
playerListDialog->exec();
if (!playerListDialog->isListUpdated())
{
return;
}
QStringList players = playerListDialog->getPlayerList();
delete playerListDialog;
// Prepare Progress
int maximumId = snapmaticWidgets.length();
int overallId = 0;
QProgressDialog pbDialog(this);
pbDialog.setWindowFlags(pbDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint);
pbDialog.setWindowTitle(tr("Patch selected..."));
pbDialog.setLabelText(tr("Patch file %1 of %2 files").arg(QString::number(1), QString::number(maximumId)));
pbDialog.setRange(1, maximumId);
pbDialog.setValue(1);
pbDialog.setModal(true);
QList<QPushButton*> pbBtn = pbDialog.findChildren<QPushButton*>();
pbBtn.at(0)->setDisabled(true);
QList<QProgressBar*> pbBar = pbDialog.findChildren<QProgressBar*>();
pbBar.at(0)->setTextVisible(false);
pbDialog.setAutoClose(false);
pbDialog.show();
// Begin Progress
QStringList fails;
for (SnapmaticWidget *snapmaticWidget : snapmaticWidgets)
{
// Update Progress
overallId++;
pbDialog.setValue(overallId);
pbDialog.setLabelText(tr("Patch file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId)));
SnapmaticPicture *picture = snapmaticWidget->getPicture();
SnapmaticProperties snapmaticProperties = picture->getSnapmaticProperties();
snapmaticProperties.playersList = players;
QString currentFilePath = picture->getPictureFilePath();
QString originalFilePath = picture->getOriginalPictureFilePath();
QString backupFileName = originalFilePath % ".bak";
if (!QFile::exists(backupFileName))
{
QFile::copy(currentFilePath, backupFileName);
}
SnapmaticProperties fallbackProperties = picture->getSnapmaticProperties();
picture->setSnapmaticProperties(snapmaticProperties);
if (!picture->exportPicture(currentFilePath))
{
picture->setSnapmaticProperties(fallbackProperties);
fails << QString("%1 [%2]").arg(picture->getPictureTitle(), picture->getPictureString());
}
else
{
picture->emitUpdate();
qApp->processEvents();
}
}
pbDialog.close();
if (!fails.isEmpty())
{
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Players", "%1 failed with..."), fails.join(", ")));
}
}
break;
case MassTool::Crew:
{
QList<SnapmaticWidget*> snapmaticWidgets;
for (ProfileWidget *widget : widgets.keys())
{
if (widget->isSelected())
{
if (widget->getWidgetType() == "SnapmaticWidget")
{
SnapmaticWidget *snapmaticWidget = qobject_cast<SnapmaticWidget*>(widget);
snapmaticWidgets += snapmaticWidget;
}
}
}
if (snapmaticWidgets.isEmpty())
{
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("You don't have any Snapmatics selected!"));
return;
}
int crewID = 0;
{
preSelectionCrewID:
bool ok;
QStringList itemList;
QStringList crewList = crewDB->getCrews();
if (!crewList.contains(QLatin1String("0")))
{
crewList += QLatin1String("0");
}
crewList.sort();
for (QString crew : crewList)
{
itemList += QString("%1 (%2)").arg(crew, crewDB->getCrewName(crew.toInt()));
}
QString newCrew = QInputDialog::getItem(this, QApplication::translate("SnapmaticEditor", "Snapmatic Crew"), QApplication::translate("SnapmaticEditor", "New Snapmatic crew:"), itemList, 0, true, &ok, windowFlags()^Qt::Dialog^Qt::WindowMinMaxButtonsHint);
if (ok && !newCrew.isEmpty())
{
if (newCrew.contains(" ")) newCrew = newCrew.split(" ").at(0);
if (newCrew.length() > 10) return;
for (QChar crewChar : newCrew)
{
if (!crewChar.isNumber())
{
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("Failed to enter a valid Snapmatic Crew ID"));
goto preSelectionCrewID;
}
}
crewID = newCrew.toInt();
}
else
{
return;
}
}
// Prepare Progress
int maximumId = snapmaticWidgets.length();
int overallId = 0;
QProgressDialog pbDialog(this);
pbDialog.setWindowFlags(pbDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint);
pbDialog.setWindowTitle(tr("Patch selected..."));
pbDialog.setLabelText(tr("Patch file %1 of %2 files").arg(QString::number(1), QString::number(maximumId)));
pbDialog.setRange(1, maximumId);
pbDialog.setValue(1);
pbDialog.setModal(true);
QList<QPushButton*> pbBtn = pbDialog.findChildren<QPushButton*>();
pbBtn.at(0)->setDisabled(true);
QList<QProgressBar*> pbBar = pbDialog.findChildren<QProgressBar*>();
pbBar.at(0)->setTextVisible(false);
pbDialog.setAutoClose(false);
pbDialog.show();
// Begin Progress
QStringList fails;
for (SnapmaticWidget *snapmaticWidget : snapmaticWidgets)
{
// Update Progress
overallId++;
pbDialog.setValue(overallId);
pbDialog.setLabelText(tr("Patch file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId)));
SnapmaticPicture *picture = snapmaticWidget->getPicture();
SnapmaticProperties snapmaticProperties = picture->getSnapmaticProperties();
snapmaticProperties.crewID = crewID;
QString currentFilePath = picture->getPictureFilePath();
QString originalFilePath = picture->getOriginalPictureFilePath();
QString backupFileName = originalFilePath % ".bak";
if (!QFile::exists(backupFileName))
{
QFile::copy(currentFilePath, backupFileName);
}
SnapmaticProperties fallbackProperties = picture->getSnapmaticProperties();
picture->setSnapmaticProperties(snapmaticProperties);
if (!picture->exportPicture(currentFilePath))
{
picture->setSnapmaticProperties(fallbackProperties);
fails << QString("%1 [%2]").arg(picture->getPictureTitle(), picture->getPictureString());
}
else
{
picture->emitUpdate();
qApp->processEvents();
}
}
pbDialog.close();
if (!fails.isEmpty())
{
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Crew", "%1 failed with..."), fails.join(", ")));
}
}
break;
case MassTool::Title:
{
QList<SnapmaticWidget*> snapmaticWidgets;
for (ProfileWidget *widget : widgets.keys())
{
if (widget->isSelected())
{
if (widget->getWidgetType() == "SnapmaticWidget")
{
SnapmaticWidget *snapmaticWidget = qobject_cast<SnapmaticWidget*>(widget);
snapmaticWidgets += snapmaticWidget;
}
}
}
if (snapmaticWidgets.isEmpty())
{
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("You don't have any Snapmatics selected!"));
return;
}
QString snapmaticTitle;
{
preSelectionTitle:
bool ok;
QString newTitle = QInputDialog::getText(this, QApplication::translate("SnapmaticEditor", "Snapmatic Title"), QApplication::translate("SnapmaticEditor", "New Snapmatic title:"), QLineEdit::Normal, snapmaticTitle, &ok, windowFlags()^Qt::Dialog^Qt::WindowMinMaxButtonsHint);
if (ok && !newTitle.isEmpty())
{
if (!SnapmaticPicture::verifyTitle(newTitle))
{
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("Failed to enter a valid Snapmatic title"));
goto preSelectionTitle;
}
snapmaticTitle = newTitle;
}
else
{
return;
}
}
// Prepare Progress
int maximumId = snapmaticWidgets.length();
int overallId = 0;
QProgressDialog pbDialog(this);
pbDialog.setWindowFlags(pbDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint);
pbDialog.setWindowTitle(tr("Patch selected..."));
pbDialog.setLabelText(tr("Patch file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId)));
pbDialog.setRange(1, maximumId);
pbDialog.setValue(1);
pbDialog.setModal(true);
QList<QPushButton*> pbBtn = pbDialog.findChildren<QPushButton*>();
pbBtn.at(0)->setDisabled(true);
QList<QProgressBar*> pbBar = pbDialog.findChildren<QProgressBar*>();
pbBar.at(0)->setTextVisible(false);
pbDialog.setAutoClose(false);
pbDialog.show();
// Begin Progress
QStringList fails;
for (SnapmaticWidget *snapmaticWidget : snapmaticWidgets)
{
// Update Progress
overallId++;
pbDialog.setValue(overallId);
pbDialog.setLabelText(tr("Patch file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId)));
SnapmaticPicture *picture = snapmaticWidget->getPicture();
QString currentFilePath = picture->getPictureFilePath();
QString originalFilePath = picture->getOriginalPictureFilePath();
QString backupFileName = originalFilePath % ".bak";
if (!QFile::exists(backupFileName))
{
QFile::copy(currentFilePath, backupFileName);
}
QString fallbackTitle = picture->getPictureTitle();
picture->setPictureTitle(snapmaticTitle);
if (!picture->exportPicture(currentFilePath))
{
picture->setPictureTitle(fallbackTitle);
fails << QString("%1 [%2]").arg(picture->getPictureTitle(), picture->getPictureString());
}
else
{
picture->emitUpdate();
qApp->processEvents();
}
}
pbDialog.close();
if (!fails.isEmpty())
{
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Title", "%1 failed with..."), fails.join(", ")));
}
}
break;
}
}

View File

@ -40,6 +40,8 @@ namespace Ui {
class ProfileInterface; class ProfileInterface;
} }
enum class MassTool : int { Qualify = 0, Players = 1, Crew = 2, Title = 3 };
class ProfileInterface : public QWidget class ProfileInterface : public QWidget
{ {
Q_OBJECT Q_OBJECT
@ -48,6 +50,7 @@ public:
void setProfileFolder(QString folder, QString profile); void setProfileFolder(QString folder, QString profile);
void settingsApplied(int contentMode, bool languageChanged); void settingsApplied(int contentMode, bool languageChanged);
void setupProfileInterface(); void setupProfileInterface();
void massTool(MassTool tool);
void disableSelected(); void disableSelected();
void enableSelected(); void enableSelected();
int selectedWidgets(); int selectedWidgets();

View File

@ -3,6 +3,7 @@
#include "SavegameCopy.h" #include "SavegameCopy.h"
#include "AppEnv.h" #include "AppEnv.h"
#include <QMessageBox> #include <QMessageBox>
#include <QDebug>
SavegameDialog::SavegameDialog(QWidget *parent) : SavegameDialog::SavegameDialog(QWidget *parent) :
QDialog(parent), QDialog(parent),
@ -10,10 +11,6 @@ SavegameDialog::SavegameDialog(QWidget *parent) :
{ {
// Set Window Flags // Set Window Flags
setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint);
#ifdef Q_OS_LINUX
// for stupid Window Manager (GNOME 3 should feel triggered)
setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window);
#endif
// Setup User Interface // Setup User Interface
ui->setupUi(this); ui->setupUi(this);
@ -24,9 +21,7 @@ SavegameDialog::SavegameDialog(QWidget *parent) :
ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close"));
} }
// DPI calculation refreshWindowSize();
qreal screenRatio = AppEnv::screenRatio();
resize(400 * screenRatio, 105 * screenRatio);
} }
SavegameDialog::~SavegameDialog() SavegameDialog::~SavegameDialog()
@ -34,6 +29,19 @@ SavegameDialog::~SavegameDialog()
delete ui; delete ui;
} }
void SavegameDialog::refreshWindowSize()
{
// DPI calculation
qreal screenRatio = AppEnv::screenRatio();
int dpiWindowWidth = 400 * screenRatio;
int dpiWindowHeight = 105 * screenRatio;
if (dpiWindowHeight < heightForWidth(dpiWindowWidth))
{
dpiWindowHeight = heightForWidth(dpiWindowWidth);
}
resize(dpiWindowWidth, dpiWindowHeight);
}
void SavegameDialog::setSavegameData(SavegameData *savegame, QString savegamePath, bool readOk) void SavegameDialog::setSavegameData(SavegameData *savegame, QString savegamePath, bool readOk)
{ {
// Showing error if reading error // Showing error if reading error
@ -44,6 +52,7 @@ void SavegameDialog::setSavegameData(SavegameData *savegame, QString savegamePat
} }
sgdPath = savegamePath; sgdPath = savegamePath;
ui->labSavegameText->setText(savegameLabStr.arg(savegame->getSavegameStr())); ui->labSavegameText->setText(savegameLabStr.arg(savegame->getSavegameStr()));
refreshWindowSize();
} }
void SavegameDialog::on_cmdClose_clicked() void SavegameDialog::on_cmdClose_clicked()

View File

@ -19,6 +19,7 @@ public:
private slots: private slots:
void on_cmdClose_clicked(); void on_cmdClose_clicked();
void on_cmdCopy_clicked(); void on_cmdCopy_clicked();
void refreshWindowSize();
private: private:
Ui::SavegameDialog *ui; Ui::SavegameDialog *ui;

View File

@ -36,10 +36,6 @@ SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, ProfileDatabase *profileD
{ {
// Set Window Flags // Set Window Flags
setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint);
#ifdef Q_OS_LINUX
// for stupid Window Manager (GNOME 3 should feel triggered)
setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window);
#endif
ui->setupUi(this); ui->setupUi(this);
ui->cmdCancel->setDefault(true); ui->cmdCancel->setDefault(true);
@ -64,9 +60,11 @@ SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, ProfileDatabase *profileD
snapmaticTitle = QString(); snapmaticTitle = QString();
smpic = 0; smpic = 0;
#ifndef Q_OS_ANDROID
// DPI calculation // DPI calculation
qreal screenRatio = AppEnv::screenRatio(); qreal screenRatio = AppEnv::screenRatio();
resize(400 * screenRatio, 360 * screenRatio); resize(400 * screenRatio, 360 * screenRatio);
#endif
} }
SnapmaticEditor::~SnapmaticEditor() SnapmaticEditor::~SnapmaticEditor()
@ -225,9 +223,11 @@ void SnapmaticEditor::setSnapmaticPlayers(const QStringList &players)
{ {
ui->labPlayers->setText(playersStr.arg(QApplication::translate("PictureDialog", "No Players"), editStr)); ui->labPlayers->setText(playersStr.arg(QApplication::translate("PictureDialog", "No Players"), editStr));
} }
#ifndef Q_OS_ANDROID
ui->gbValues->resize(ui->gbValues->sizeHint()); ui->gbValues->resize(ui->gbValues->sizeHint());
ui->frameWidget->resize(ui->frameWidget->sizeHint()); ui->frameWidget->resize(ui->frameWidget->sizeHint());
resize(width(), heightForWidth(width())); resize(width(), heightForWidth(width()));
#endif
} }
void SnapmaticEditor::setSnapmaticTitle(const QString &title) void SnapmaticEditor::setSnapmaticTitle(const QString &title)
@ -251,9 +251,11 @@ void SnapmaticEditor::setSnapmaticTitle(const QString &title)
{ {
ui->labAppropriate->setText(tr("Appropriate: %1").arg(QString("<span style=\"color: red\">%1</a>").arg(tr("No", "No, could lead to issues")))); ui->labAppropriate->setText(tr("Appropriate: %1").arg(QString("<span style=\"color: red\">%1</a>").arg(tr("No", "No, could lead to issues"))));
} }
#ifndef Q_OS_ANDROID
ui->gbValues->resize(ui->gbValues->sizeHint()); ui->gbValues->resize(ui->gbValues->sizeHint());
ui->frameWidget->resize(ui->frameWidget->sizeHint()); ui->frameWidget->resize(ui->frameWidget->sizeHint());
resize(width(), heightForWidth(width())); resize(width(), heightForWidth(width()));
#endif
} }
void SnapmaticEditor::setSnapmaticCrew(const QString &crew) void SnapmaticEditor::setSnapmaticCrew(const QString &crew)
@ -261,9 +263,11 @@ void SnapmaticEditor::setSnapmaticCrew(const QString &crew)
QString editStr = QString("<a href=\"g5e://editcrew\" style=\"text-decoration: none;\">%1</a>").arg(tr("Edit")); QString editStr = QString("<a href=\"g5e://editcrew\" style=\"text-decoration: none;\">%1</a>").arg(tr("Edit"));
QString crewStr = tr("Crew: %1 (%2)").arg(StringParser::escapeString(crew), editStr); QString crewStr = tr("Crew: %1 (%2)").arg(StringParser::escapeString(crew), editStr);
ui->labCrew->setText(crewStr); ui->labCrew->setText(crewStr);
#ifndef Q_OS_ANDROID
ui->gbValues->resize(ui->gbValues->sizeHint()); ui->gbValues->resize(ui->gbValues->sizeHint());
ui->frameWidget->resize(ui->frameWidget->sizeHint()); ui->frameWidget->resize(ui->frameWidget->sizeHint());
resize(width(), heightForWidth(width())); resize(width(), heightForWidth(width()));
#endif
} }
QString SnapmaticEditor::returnCrewName(int crewID_) QString SnapmaticEditor::returnCrewName(int crewID_)
@ -355,6 +359,7 @@ void SnapmaticEditor::on_labPlayers_linkActivated(const QString &link)
{ {
PlayerListDialog *playerListDialog = new PlayerListDialog(playersList, profileDB, this); PlayerListDialog *playerListDialog = new PlayerListDialog(playersList, profileDB, this);
connect(playerListDialog, SIGNAL(playerListUpdated(QStringList)), this, SLOT(playerListUpdated(QStringList))); connect(playerListDialog, SIGNAL(playerListUpdated(QStringList)), this, SLOT(playerListUpdated(QStringList)));
playerListDialog->setModal(true);
playerListDialog->show(); playerListDialog->show();
playerListDialog->exec(); playerListDialog->exec();
delete playerListDialog; delete playerListDialog;

View File

@ -810,6 +810,9 @@ QImage SnapmaticPicture::getImage(bool fastLoad)
picStream->close(); picStream->close();
delete picStream; delete picStream;
rawPicContent.clear();
rawPicContent.squeeze();
if (returnOk) if (returnOk)
{ {
if (!fastLoadU) if (!fastLoadU)
@ -835,6 +838,22 @@ QImage SnapmaticPicture::getImage(bool fastLoad)
return QImage(); return QImage();
} }
QByteArray SnapmaticPicture::getPictureStream() // Incomplete because it just work in writeEnabled mode
{
QByteArray jpegRawContent;
if (writeEnabled)
{
QBuffer *picStream = new QBuffer(&rawPicContent);
picStream->open(QIODevice::ReadWrite);
if (picStream->seek(jpegStreamEditorBegin))
{
jpegRawContent = picStream->read(jpegPicStreamLength);
}
delete picStream;
}
return jpegRawContent;
}
int SnapmaticPicture::getContentMaxLength() int SnapmaticPicture::getContentMaxLength()
{ {
return jpegRawContentSize; return jpegRawContentSize;
@ -856,6 +875,11 @@ void SnapmaticPicture::emitUpdate()
emit updated(); emit updated();
} }
void SnapmaticPicture::emitCustomSignal(const QString &signal)
{
emit customSignal(signal);
}
// JSON part // JSON part
bool SnapmaticPicture::isJsonOk() bool SnapmaticPicture::isJsonOk()
@ -1351,7 +1375,7 @@ bool SnapmaticPicture::isFormatSwitched()
bool SnapmaticPicture::verifyTitle(const QString &title) bool SnapmaticPicture::verifyTitle(const QString &title)
{ {
// VERIFY TITLE FOR BE A VALID SNAPMATIC TITLE // VERIFY TITLE FOR BE A VALID SNAPMATIC TITLE
if (title.length() <= titlStreamCharacterMax) if (title.length() <= titlStreamCharacterMax && title.length() > 0)
{ {
for (QChar titleChar : title) for (QChar titleChar : title)
{ {

View File

@ -62,6 +62,7 @@ public:
bool isPicOk(); // Please use isPictureOk instead bool isPicOk(); // Please use isPictureOk instead
void clearCache(); void clearCache();
QImage getImage(bool fastLoad = false); QImage getImage(bool fastLoad = false);
QByteArray getPictureStream();
QString getLastStep(bool readable = true); QString getLastStep(bool readable = true);
QString getPictureStr(); QString getPictureStr();
QString getPictureHead(); QString getPictureHead();
@ -79,6 +80,7 @@ public:
bool setPictureStream(const QByteArray &streamArray); bool setPictureStream(const QByteArray &streamArray);
void updateStrings(); void updateStrings();
void emitUpdate(); void emitUpdate();
void emitCustomSignal(const QString &signal);
// FILE MANAGEMENT // FILE MANAGEMENT
bool exportPicture(const QString &fileName, SnapmaticFormat format = SnapmaticFormat::Auto_Format); bool exportPicture(const QString &fileName, SnapmaticFormat format = SnapmaticFormat::Auto_Format);
@ -170,6 +172,7 @@ private:
static bool verifyTitleChar(const QChar &titleChar); static bool verifyTitleChar(const QChar &titleChar);
signals: signals:
void customSignal(QString signal);
void preloaded(); void preloaded();
void updated(); void updated();
void loaded(); void loaded();

View File

@ -18,6 +18,7 @@
#include "SnapmaticWidget.h" #include "SnapmaticWidget.h"
#include "ui_SnapmaticWidget.h" #include "ui_SnapmaticWidget.h"
#include "ImageEditorDialog.h"
#include "MapLocationDialog.h" #include "MapLocationDialog.h"
#include "JsonEditorDialog.h" #include "JsonEditorDialog.h"
#include "SnapmaticPicture.h" #include "SnapmaticPicture.h"
@ -36,8 +37,8 @@
#include <QMenu> #include <QMenu>
#include <QFile> #include <QFile>
SnapmaticWidget::SnapmaticWidget(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent) : SnapmaticWidget::SnapmaticWidget(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QString profileName, QWidget *parent) :
ProfileWidget(parent), profileDB(profileDB), crewDB(crewDB), threadDB(threadDB), ProfileWidget(parent), profileDB(profileDB), crewDB(crewDB), threadDB(threadDB), profileName(profileName),
ui(new Ui::SnapmaticWidget) ui(new Ui::SnapmaticWidget)
{ {
ui->setupUi(this); ui->setupUi(this);
@ -67,6 +68,7 @@ void SnapmaticWidget::setSnapmaticPicture(SnapmaticPicture *picture)
{ {
smpic = picture; smpic = picture;
QObject::connect(picture, SIGNAL(updated()), this, SLOT(snapmaticUpdated())); QObject::connect(picture, SIGNAL(updated()), this, SLOT(snapmaticUpdated()));
QObject::connect(picture, SIGNAL(customSignal(QString)), this, SLOT(customSignal(QString)));
qreal screenRatio = AppEnv::screenRatio(); qreal screenRatio = AppEnv::screenRatio();
ui->labPicture->setFixedSize(48 * screenRatio, 27 * screenRatio); ui->labPicture->setFixedSize(48 * screenRatio, 27 * screenRatio);
@ -82,13 +84,22 @@ void SnapmaticWidget::setSnapmaticPicture(SnapmaticPicture *picture)
void SnapmaticWidget::snapmaticUpdated() void SnapmaticWidget::snapmaticUpdated()
{ {
ui->labPicStr->setText(smpic->getPictureStr() % "\n" % smpic->getPictureTitl() % ""); ui->labPicStr->setText(smpic->getPictureStr() % "\n" % smpic->getPictureTitl());
}
void SnapmaticWidget::customSignal(QString signal)
{
if (signal == "PictureUpdated")
{
QPixmap SnapmaticPixmap = QPixmap::fromImage(smpic->getImage().scaled(ui->labPicture->width(), ui->labPicture->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation), Qt::AutoColor);
ui->labPicture->setPixmap(SnapmaticPixmap);
}
} }
void SnapmaticWidget::retranslate() void SnapmaticWidget::retranslate()
{ {
smpic->updateStrings(); smpic->updateStrings();
ui->labPicStr->setText(smpic->getPictureStr() % "\n" % smpic->getPictureTitl() % ""); ui->labPicStr->setText(smpic->getPictureStr() % "\n" % smpic->getPictureTitl());
} }
void SnapmaticWidget::on_cmdView_clicked() void SnapmaticWidget::on_cmdView_clicked()
@ -98,7 +109,7 @@ void SnapmaticWidget::on_cmdView_clicked()
bool navigationBar = settings.value("NavigationBar", false).toBool(); bool navigationBar = settings.value("NavigationBar", false).toBool();
settings.endGroup(); settings.endGroup();
PictureDialog *picDialog = new PictureDialog(profileDB, crewDB, this); PictureDialog *picDialog = new PictureDialog(profileDB, crewDB, profileName, this);
picDialog->setSnapmaticPicture(smpic, true); picDialog->setSnapmaticPicture(smpic, true);
picDialog->setModal(true); picDialog->setModal(true);
@ -301,11 +312,19 @@ void SnapmaticWidget::editSnapmaticRawJson()
delete jsonEditor; delete jsonEditor;
} }
void SnapmaticWidget::editSnapmaticImage()
{
ImageEditorDialog *imageEditor = new ImageEditorDialog(smpic, profileName, this);
imageEditor->setModal(true);
imageEditor->show();
imageEditor->exec();
delete imageEditor;
}
void SnapmaticWidget::openMapViewer() void SnapmaticWidget::openMapViewer()
{ {
SnapmaticPicture *picture = smpic; SnapmaticPicture *picture = smpic;
MapLocationDialog *mapLocDialog; MapLocationDialog *mapLocDialog = new MapLocationDialog(picture->getSnapmaticProperties().location.x, picture->getSnapmaticProperties().location.y, this);
mapLocDialog = new MapLocationDialog(picture->getSnapmaticProperties().location.x, picture->getSnapmaticProperties().location.y, this);
mapLocDialog->setModal(true); mapLocDialog->setModal(true);
mapLocDialog->show(); mapLocDialog->show();
mapLocDialog->exec(); mapLocDialog->exec();

View File

@ -38,7 +38,7 @@ class SnapmaticWidget : public ProfileWidget
Q_OBJECT Q_OBJECT
public: public:
SnapmaticWidget(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent = 0); SnapmaticWidget(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QString profileName, QWidget *parent = 0);
void setSnapmaticPicture(SnapmaticPicture *picture); void setSnapmaticPicture(SnapmaticPicture *picture);
void setSelectionMode(bool selectionMode); void setSelectionMode(bool selectionMode);
void setSelected(bool isSelected); void setSelected(bool isSelected);
@ -69,8 +69,10 @@ private slots:
void makePictureHiddenSlot(); void makePictureHiddenSlot();
void editSnapmaticProperties(); void editSnapmaticProperties();
void editSnapmaticRawJson(); void editSnapmaticRawJson();
void editSnapmaticImage();
void openMapViewer(); void openMapViewer();
void snapmaticUpdated(); void snapmaticUpdated();
void customSignal(QString signal);
protected: protected:
void mouseDoubleClickEvent(QMouseEvent *ev); void mouseDoubleClickEvent(QMouseEvent *ev);
@ -82,6 +84,7 @@ private:
ProfileDatabase *profileDB; ProfileDatabase *profileDB;
CrewDatabase *crewDB; CrewDatabase *crewDB;
DatabaseThread *threadDB; DatabaseThread *threadDB;
QString profileName;
Ui::SnapmaticWidget *ui; Ui::SnapmaticWidget *ui;
SnapmaticPicture *smpic; SnapmaticPicture *smpic;
QColor highlightHiddenColor; QColor highlightHiddenColor;

View File

@ -82,7 +82,9 @@ UserInterface::UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, D
// DPI calculation // DPI calculation
qreal screenRatio = AppEnv::screenRatio(); qreal screenRatio = AppEnv::screenRatio();
#ifndef Q_QS_ANDROID
resize(625 * screenRatio, 500 * screenRatio); resize(625 * screenRatio, 500 * screenRatio);
#endif
ui->vlUserInterface->setSpacing(6 * screenRatio); ui->vlUserInterface->setSpacing(6 * screenRatio);
ui->vlUserInterface->setContentsMargins(9 * screenRatio, 9 * screenRatio, 9 * screenRatio, 9 * screenRatio); ui->vlUserInterface->setContentsMargins(9 * screenRatio, 9 * screenRatio, 9 * screenRatio, 9 * screenRatio);
} }
@ -560,3 +562,23 @@ void UserInterface::retranslateUi()
this->setWindowTitle(defaultWindowTitle.arg(tr("Select Profile"))); this->setWindowTitle(defaultWindowTitle.arg(tr("Select Profile")));
} }
} }
void UserInterface::on_actionQualify_as_Avatar_triggered()
{
profileUI->massTool(MassTool::Qualify);
}
void UserInterface::on_actionChange_Players_triggered()
{
profileUI->massTool(MassTool::Players);
}
void UserInterface::on_actionSet_Crew_triggered()
{
profileUI->massTool(MassTool::Crew);
}
void UserInterface::on_actionSet_Title_triggered()
{
profileUI->massTool(MassTool::Title);
}

View File

@ -62,6 +62,10 @@ private slots:
void on_actionSelect_GTA_Folder_triggered(); void on_actionSelect_GTA_Folder_triggered();
void on_action_Enable_In_game_triggered(); void on_action_Enable_In_game_triggered();
void on_action_Disable_In_game_triggered(); void on_action_Disable_In_game_triggered();
void on_actionQualify_as_Avatar_triggered();
void on_actionChange_Players_triggered();
void on_actionSet_Crew_triggered();
void on_actionSet_Title_triggered();
void settingsApplied(int contentMode, bool languageChanged); void settingsApplied(int contentMode, bool languageChanged);
protected: protected:

View File

@ -207,10 +207,20 @@
<addaction name="action_Enable_In_game"/> <addaction name="action_Enable_In_game"/>
<addaction name="action_Disable_In_game"/> <addaction name="action_Disable_In_game"/>
</widget> </widget>
<widget class="QMenu" name="menuManage_selection">
<property name="title">
<string>Selection &amp;mass tools</string>
</property>
<addaction name="actionQualify_as_Avatar"/>
<addaction name="actionChange_Players"/>
<addaction name="actionSet_Crew"/>
<addaction name="actionSet_Title"/>
</widget>
<addaction name="action_Import"/> <addaction name="action_Import"/>
<addaction name="actionExport_selected"/> <addaction name="actionExport_selected"/>
<addaction name="actionDelete_selected"/> <addaction name="actionDelete_selected"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="menuManage_selection"/>
<addaction name="menuSelection_visibility"/> <addaction name="menuSelection_visibility"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionSelect_all"/> <addaction name="actionSelect_all"/>
@ -226,7 +236,7 @@
<string>&amp;About %1</string> <string>&amp;About %1</string>
</property> </property>
<property name="shortcut"> <property name="shortcut">
<string>Ctrl+P</string> <string notr="true">Ctrl+P</string>
</property> </property>
</action> </action>
<action name="actionExit"> <action name="actionExit">
@ -237,7 +247,7 @@
<string>Exit</string> <string>Exit</string>
</property> </property>
<property name="shortcut"> <property name="shortcut">
<string>Ctrl+Q</string> <string notr="true">Ctrl+Q</string>
</property> </property>
</action> </action>
<action name="actionSelect_profile"> <action name="actionSelect_profile">
@ -245,7 +255,7 @@
<string>Close &amp;Profile</string> <string>Close &amp;Profile</string>
</property> </property>
<property name="shortcut"> <property name="shortcut">
<string>Ctrl+End</string> <string notr="true">Ctrl+End</string>
</property> </property>
</action> </action>
<action name="actionOptions"> <action name="actionOptions">
@ -253,7 +263,7 @@
<string>&amp;Settings</string> <string>&amp;Settings</string>
</property> </property>
<property name="shortcut"> <property name="shortcut">
<string>Ctrl+S</string> <string notr="true">Ctrl+S</string>
</property> </property>
</action> </action>
<action name="actionSelect_all"> <action name="actionSelect_all">
@ -261,7 +271,7 @@
<string>Select &amp;All</string> <string>Select &amp;All</string>
</property> </property>
<property name="shortcut"> <property name="shortcut">
<string>Ctrl+A</string> <string notr="true">Ctrl+A</string>
</property> </property>
</action> </action>
<action name="actionDeselect_all"> <action name="actionDeselect_all">
@ -269,7 +279,7 @@
<string>&amp;Deselect All</string> <string>&amp;Deselect All</string>
</property> </property>
<property name="shortcut"> <property name="shortcut">
<string>Ctrl+D</string> <string notr="true">Ctrl+D</string>
</property> </property>
</action> </action>
<action name="actionExport_selected"> <action name="actionExport_selected">
@ -277,7 +287,7 @@
<string>&amp;Export selected...</string> <string>&amp;Export selected...</string>
</property> </property>
<property name="shortcut"> <property name="shortcut">
<string>Ctrl+E</string> <string notr="true">Ctrl+E</string>
</property> </property>
</action> </action>
<action name="actionDelete_selected"> <action name="actionDelete_selected">
@ -285,7 +295,7 @@
<string>&amp;Remove selected</string> <string>&amp;Remove selected</string>
</property> </property>
<property name="shortcut"> <property name="shortcut">
<string>Ctrl+Del</string> <string notr="true">Ctrl+Del</string>
</property> </property>
</action> </action>
<action name="action_Import"> <action name="action_Import">
@ -293,7 +303,7 @@
<string>&amp;Import files...</string> <string>&amp;Import files...</string>
</property> </property>
<property name="shortcut"> <property name="shortcut">
<string>Ctrl+I</string> <string notr="true">Ctrl+I</string>
</property> </property>
</action> </action>
<action name="actionOpen_File"> <action name="actionOpen_File">
@ -301,7 +311,7 @@
<string>&amp;Open File...</string> <string>&amp;Open File...</string>
</property> </property>
<property name="shortcut"> <property name="shortcut">
<string>Ctrl+O</string> <string notr="true">Ctrl+O</string>
</property> </property>
</action> </action>
<action name="actionSelect_GTA_Folder"> <action name="actionSelect_GTA_Folder">
@ -312,7 +322,7 @@
<string>Select GTA V Folder...</string> <string>Select GTA V Folder...</string>
</property> </property>
<property name="shortcut"> <property name="shortcut">
<string>Ctrl+G</string> <string notr="true">Ctrl+G</string>
</property> </property>
</action> </action>
<action name="action_Enable_In_game"> <action name="action_Enable_In_game">
@ -320,7 +330,7 @@
<string>Show In-gam&amp;e</string> <string>Show In-gam&amp;e</string>
</property> </property>
<property name="shortcut"> <property name="shortcut">
<string>Shift+E</string> <string notr="true">Shift+E</string>
</property> </property>
</action> </action>
<action name="action_Disable_In_game"> <action name="action_Disable_In_game">
@ -328,7 +338,39 @@
<string>Hi&amp;de In-game</string> <string>Hi&amp;de In-game</string>
</property> </property>
<property name="shortcut"> <property name="shortcut">
<string>Shift+D</string> <string notr="true">Shift+D</string>
</property>
</action>
<action name="actionSet_Title">
<property name="text">
<string>Change &amp;Title...</string>
</property>
<property name="shortcut">
<string notr="true">Shift+T</string>
</property>
</action>
<action name="actionSet_Crew">
<property name="text">
<string>Change &amp;Crew...</string>
</property>
<property name="shortcut">
<string notr="true">Shift+C</string>
</property>
</action>
<action name="actionQualify_as_Avatar">
<property name="text">
<string>&amp;Qualify as Avatar</string>
</property>
<property name="shortcut">
<string notr="true">Shift+Q</string>
</property>
</action>
<action name="actionChange_Players">
<property name="text">
<string>Change &amp;Players...</string>
</property>
<property name="shortcut">
<string notr="true">Shift+P</string>
</property> </property>
</action> </action>
</widget> </widget>

View File

@ -50,7 +50,7 @@
#ifndef GTA5SYNC_APPVER #ifndef GTA5SYNC_APPVER
#ifndef GTA5SYNC_DAILYB #ifndef GTA5SYNC_DAILYB
#define GTA5SYNC_APPVER "1.5.0-dev6" #define GTA5SYNC_APPVER "1.5.0-dev7"
#else #else
#define GTA5SYNC_APPVER GTA5SYNC_DAILYB #define GTA5SYNC_APPVER GTA5SYNC_DAILYB
#endif #endif

View File

@ -37,6 +37,7 @@ SOURCES += main.cpp \
ExportThread.cpp \ ExportThread.cpp \
GlobalString.cpp \ GlobalString.cpp \
IconLoader.cpp \ IconLoader.cpp \
ImageEditorDialog.cpp \
ImportDialog.cpp \ ImportDialog.cpp \
JsonEditorDialog.cpp \ JsonEditorDialog.cpp \
MapLocationDialog.cpp \ MapLocationDialog.cpp \
@ -74,6 +75,7 @@ HEADERS += \
ExportThread.h \ ExportThread.h \
GlobalString.h \ GlobalString.h \
IconLoader.h \ IconLoader.h \
ImageEditorDialog.h \
ImportDialog.h \ ImportDialog.h \
JsonEditorDialog.h \ JsonEditorDialog.h \
MapLocationDialog.h \ MapLocationDialog.h \
@ -105,6 +107,7 @@ HEADERS += \
FORMS += \ FORMS += \
AboutDialog.ui \ AboutDialog.ui \
ExportDialog.ui \ ExportDialog.ui \
ImageEditorDialog.ui \
ImportDialog.ui \ ImportDialog.ui \
JsonEditorDialog.ui \ JsonEditorDialog.ui \
MapLocationDialog.ui \ MapLocationDialog.ui \

View File

@ -179,6 +179,9 @@ int main(int argc, char *argv[])
bool readOk = picture.readingPictureFromFile(arg1); bool readOk = picture.readingPictureFromFile(arg1);
picDialog.setWindowIcon(IconLoader::loadingAppIcon()); picDialog.setWindowIcon(IconLoader::loadingAppIcon());
picDialog.setSnapmaticPicture(&picture, readOk); picDialog.setSnapmaticPicture(&picture, readOk);
#ifndef Q_OS_LINUX
picDialog.setWindowFlags(picDialog.windowFlags()^Qt::Dialog^Qt::Window);
#endif
int crewID = picture.getSnapmaticProperties().crewID; int crewID = picture.getSnapmaticProperties().crewID;
if (crewID != 0) { crewDB.addCrew(crewID); } if (crewID != 0) { crewDB.addCrew(crewID); }
@ -204,6 +207,7 @@ int main(int argc, char *argv[])
bool readOk = savegame.readingSavegameFromFile(arg1); bool readOk = savegame.readingSavegameFromFile(arg1);
savegameDialog.setWindowIcon(IconLoader::loadingAppIcon()); savegameDialog.setWindowIcon(IconLoader::loadingAppIcon());
savegameDialog.setSavegameData(&savegame, arg1, readOk); savegameDialog.setSavegameData(&savegame, arg1, readOk);
savegameDialog.setWindowFlags(savegameDialog.windowFlags()^Qt::Dialog^Qt::Window);
if (!readOk) { return 1; } if (!readOk) { return 1; }

View File

@ -25,12 +25,12 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "Syping" VALUE "CompanyName", "Syping"
VALUE "FileDescription", "gta5view\0" VALUE "FileDescription", "gta5view\0"
VALUE "FileVersion", "1.5.0-dev6\0" VALUE "FileVersion", "1.5.0-dev7\0"
VALUE "InternalName", "gta5view\0" VALUE "InternalName", "gta5view\0"
VALUE "LegalCopyright", "Copyright © 2016-2017 Syping\0" VALUE "LegalCopyright", "Copyright © 2016-2017 Syping\0"
VALUE "OriginalFilename", "gta5view.exe\0" VALUE "OriginalFilename", "gta5view.exe\0"
VALUE "ProductName", "gta5view\0" VALUE "ProductName", "gta5view\0"
VALUE "ProductVersion", "1.5.0-dev6\0" VALUE "ProductVersion", "1.5.0-dev7\0"
END END
END END
END END

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

16450
res/qtbase_en_GB.ts Normal file

File diff suppressed because it is too large Load Diff