added mass tool and improved import
This commit is contained in:
parent
98b7c766fe
commit
9b6253b848
40 changed files with 19799 additions and 1189 deletions
|
@ -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:
|
||||||
|
|
|
@ -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
185
ImageEditorDialog.cpp
Normal 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
53
ImageEditorDialog.h
Normal 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
130
ImageEditorDialog.ui
Normal 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>&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>&Overwrite</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="cmdClose">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Close</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
148
ImportDialog.cpp
148
ImportDialog.cpp
|
@ -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();
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
194
ImportDialog.ui
194
ImportDialog.ui
|
@ -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: <span style="color: %1">%1</span></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: <span style="color: %1">%1</span></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>
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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, ¤tTime, false))
|
if (!importFile(selectedFile, importDateTime, ¤tTime, 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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 &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>&About %1</string>
|
<string>&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 &Profile</string>
|
<string>Close &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>&Settings</string>
|
<string>&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 &All</string>
|
<string>Select &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>&Deselect All</string>
|
<string>&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>&Export selected...</string>
|
<string>&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>&Remove selected</string>
|
<string>&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>&Import files...</string>
|
<string>&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>&Open File...</string>
|
<string>&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&e</string>
|
<string>Show In-gam&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&de In-game</string>
|
<string>Hi&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 &Title...</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string notr="true">Shift+T</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionSet_Crew">
|
||||||
|
<property name="text">
|
||||||
|
<string>Change &Crew...</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string notr="true">Shift+C</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionQualify_as_Avatar">
|
||||||
|
<property name="text">
|
||||||
|
<string>&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 &Players...</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string notr="true">Shift+P</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
|
|
2
config.h
2
config.h
|
@ -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
|
||||||
|
|
|
@ -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 \
|
||||||
|
|
4
main.cpp
4
main.cpp
|
@ -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; }
|
||||||
|
|
||||||
|
|
|
@ -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
16450
res/qtbase_en_GB.ts
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue