From f5be86aec4dd2db2be7c3f2a72ddd542e108a18b Mon Sep 17 00:00:00 2001 From: Rafael Date: Tue, 12 Apr 2016 21:53:21 +0200 Subject: [PATCH] picture navigation in fullscreen added --- PictureDialog.cpp | 45 ++++--- PictureDialog.h | 4 + PictureWidget.cpp | 79 +++++++++++++ PictureWidget.h | 51 ++++++++ gta5sync.pro | 290 +++++++++++++++++++++++----------------------- 5 files changed, 301 insertions(+), 168 deletions(-) create mode 100644 PictureWidget.cpp create mode 100644 PictureWidget.h diff --git a/PictureDialog.cpp b/PictureDialog.cpp index 6cc14a1..ff675c0 100755 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -17,6 +17,7 @@ *****************************************************************************/ #include "PictureDialog.h" +#include "PictureWidget.h" #include "ProfileDatabase.h" #include "ui_PictureDialog.h" #include "SidebarGenerator.h" @@ -91,13 +92,21 @@ bool PictureDialog::eventFilter(QObject *obj, QEvent *ev) return false; } +void PictureDialog::dialogNextPictureRequested() +{ + emit nextPictureRequested(); +} + +void PictureDialog::dialogPreviousPictureRequested() +{ + emit previousPictureRequested(); +} + void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, QString picturePath, bool readOk, bool _indexed, int _index) { + snapmaticPicture = QImage(); indexed = _indexed; index = _index; - - // Showing error if reading error - QImage snapmaticPicture; picPath = picturePath; smpic = picture; if (!readOk) @@ -105,7 +114,6 @@ void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, QString pictu QMessageBox::warning(this, tr("Snapmatic Picture Viewer"), tr("Failed at %1").arg(picture->getLastStep())); return; } - if (picture->isPicOk()) { snapmaticPicture = picture->getPicture(); @@ -152,6 +160,7 @@ void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, QString pictu ui->labJSON->setText(jsonDrawString.arg("0.0", "0.0", "0.0", tr("No player"), tr("No crew"))); QMessageBox::warning(this,tr("Snapmatic Picture Viewer"),tr("Failed at %1").arg(picture->getLastStep())); } + emit newPictureCommited(snapmaticPicture); } void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, QString picPath, bool readOk) @@ -224,33 +233,21 @@ void PictureDialog::copySnapmaticPicture() void PictureDialog::on_labPicture_mouseDoubleClicked() { - QDialog *pictureWidget = new QDialog(this); - QRect rec = QApplication::desktop()->screenGeometry(); - QHBoxLayout *widgetLayout = new QHBoxLayout(pictureWidget); - widgetLayout->setSpacing(0); - widgetLayout->setContentsMargins(0, 0, 0, 0); - - UiModLabel *pictureLabel = new UiModLabel(pictureWidget); - pictureLabel->setPixmap(ui->labPicture->pixmap()->scaled(rec.width(), rec.height(), Qt::KeepAspectRatio, Qt::SmoothTransformation)); - pictureLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - pictureLabel->setAlignment(Qt::AlignCenter); - widgetLayout->addWidget(pictureLabel); - - QObject::connect(pictureLabel, SIGNAL(mouseDoubleClicked()), pictureWidget, SLOT(close())); - - pictureWidget->setLayout(widgetLayout); + QRect desktopRect = QApplication::desktop()->screenGeometry(); + PictureWidget *pictureWidget = new PictureWidget(this); pictureWidget->setWindowFlags(pictureWidget->windowFlags()^Qt::WindowContextHelpButtonHint); pictureWidget->setWindowTitle(this->windowTitle()); pictureWidget->setStyleSheet("background-color: black;"); + pictureWidget->setImage(snapmaticPicture, desktopRect); + + QObject::connect(this, SIGNAL(newPictureCommited(QImage)), pictureWidget, SLOT(setImage(QImage))); + QObject::connect(pictureWidget, SIGNAL(nextPictureRequested()), this, SLOT(dialogNextPictureRequested())); + QObject::connect(pictureWidget, SIGNAL(previousPictureRequested()), this, SLOT(dialogPreviousPictureRequested())); + pictureWidget->showFullScreen(); pictureWidget->setModal(true); pictureWidget->exec(); - widgetLayout->deleteLater(); - delete widgetLayout; - pictureLabel->deleteLater(); - delete pictureLabel; - pictureWidget->deleteLater(); delete pictureWidget; } diff --git a/PictureDialog.h b/PictureDialog.h index b85103e..f52a9e1 100755 --- a/PictureDialog.h +++ b/PictureDialog.h @@ -46,6 +46,8 @@ public: public slots: void playerNameUpdated(); + void dialogNextPictureRequested(); + void dialogPreviousPictureRequested(); private slots: void copySnapmaticPicture(); @@ -55,6 +57,7 @@ private slots: signals: void nextPictureRequested(); void previousPictureRequested(); + void newPictureCommited(QImage picture); protected: bool eventFilter(QObject *obj, QEvent *ev); @@ -63,6 +66,7 @@ private: ProfileDatabase *profileDB; Ui::PictureDialog *ui; SnapmaticPicture *smpic; + QImage snapmaticPicture; QString jsonDrawString; QString windowTitleStr; QStringList plyrsList; diff --git a/PictureWidget.cpp b/PictureWidget.cpp new file mode 100644 index 0000000..04d9ba1 --- /dev/null +++ b/PictureWidget.cpp @@ -0,0 +1,79 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 Syping +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "PictureWidget.h" +#include "UiModLabel.h" +#include +#include +#include +#include + +PictureWidget::PictureWidget(QWidget *parent) : QDialog(parent) +{ + installEventFilter(this); + + widgetLayout = new QHBoxLayout(this); + widgetLayout->setSpacing(0); + widgetLayout->setContentsMargins(0, 0, 0, 0); + + pictureLabel = new UiModLabel(this); + pictureLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + pictureLabel->setAlignment(Qt::AlignCenter); + widgetLayout->addWidget(pictureLabel); + + QObject::connect(pictureLabel, SIGNAL(mouseDoubleClicked()), this, SLOT(close())); + + setLayout(widgetLayout); +} + +PictureWidget::~PictureWidget() +{ + widgetLayout->removeWidget(pictureLabel); + delete pictureLabel; + delete widgetLayout; +} + +bool PictureWidget::eventFilter(QObject *obj, QEvent *ev) +{ + if (obj == this) + { + if (ev->type() == QEvent::KeyPress) + { + QKeyEvent *keyEvent = (QKeyEvent*)ev; + switch (keyEvent->key()){ + case Qt::Key_Left: + emit previousPictureRequested(); + break; + case Qt::Key_Right: + emit nextPictureRequested(); + break; + } + } + } + return false; +} + +void PictureWidget::setImage(QImage image, QRect rec) +{ + pictureLabel->setPixmap(QPixmap::fromImage(image.scaled(rec.width(), rec.height(), Qt::KeepAspectRatio, Qt::SmoothTransformation))); +} + +void PictureWidget::setImage(QImage image) +{ + pictureLabel->setPixmap(QPixmap::fromImage(image.scaled(geometry().width(), geometry().height(), Qt::KeepAspectRatio, Qt::SmoothTransformation))); +} diff --git a/PictureWidget.h b/PictureWidget.h new file mode 100644 index 0000000..2fd76b1 --- /dev/null +++ b/PictureWidget.h @@ -0,0 +1,51 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 Syping +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef PICTUREWIDGET_H +#define PICTUREWIDGET_H + +#include "UiModLabel.h" +#include +#include +#include +#include + +class PictureWidget : public QDialog +{ + Q_OBJECT +public: + explicit PictureWidget(QWidget *parent = 0); + void setImage(QImage image, QRect rec); + ~PictureWidget(); + +public slots: + void setImage(QImage image); + +protected: + bool eventFilter(QObject *obj, QEvent *ev); + +private: + QHBoxLayout *widgetLayout; + UiModLabel *pictureLabel; + +signals: + void nextPictureRequested(); + void previousPictureRequested(); +}; + +#endif // PICTUREWIDGET_H diff --git a/gta5sync.pro b/gta5sync.pro index c94c22e..b0df3a0 100755 --- a/gta5sync.pro +++ b/gta5sync.pro @@ -1,144 +1,146 @@ -#/***************************************************************************** -#* gta5sync GRAND THEFT AUTO V SYNC -#* Copyright (C) 2015-2016 Syping -#* -#* This program is free software: you can redistribute it and/or modify -#* it under the terms of the GNU General Public License as published by -#* the Free Software Foundation, either version 3 of the License, or -#* (at your option) any later version. -#* -#* This program is distributed in the hope that it will be useful, -#* but WITHOUT ANY WARRANTY; without even the implied warranty of -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -#* GNU General Public License for more details. -#* -#* You should have received a copy of the GNU General Public License -#* along with this program. If not, see . -#*****************************************************************************/ - -QT += core gui network - -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets - -TARGET = gta5sync -TEMPLATE = app - -SOURCES += main.cpp \ - AboutDialog.cpp \ - AppEnv.cpp \ - CrewDatabase.cpp \ - DatabaseThread.cpp \ - ExportThread.cpp \ - IconLoader.cpp \ - OptionsDialog.cpp \ - PictureCopy.cpp \ - PictureDialog.cpp \ - PictureExport.cpp \ - ProfileDatabase.cpp \ - ProfileInterface.cpp \ - ProfileLoader.cpp \ - ProfileWidget.cpp \ - SavegameCopy.cpp \ - SavegameData.cpp \ - SavegameDialog.cpp \ - SavegameWidget.cpp \ - SidebarGenerator.cpp \ - SnapmaticPicture.cpp \ - SnapmaticWidget.cpp \ - StandardPaths.cpp \ - StringParser.cpp \ - UserInterface.cpp \ - uimod/UiModLabel.cpp - -HEADERS += \ - AboutDialog.h \ - AppEnv.h \ - CrewDatabase.h \ - DatabaseThread.h \ - ExportThread.h \ - IconLoader.h \ - OptionsDialog.h \ - PictureCopy.h \ - PictureDialog.h \ - PictureExport.h \ - ProfileDatabase.h \ - ProfileInterface.h \ - ProfileLoader.h \ - ProfileWidget.h \ - SavegameCopy.h \ - SavegameData.h \ - SavegameDialog.h \ - SavegameWidget.h \ - SidebarGenerator.h \ - SnapmaticPicture.h \ - SnapmaticWidget.h \ - StandardPaths.h \ - StringParser.h \ - UserInterface.h \ - uimod/UiModLabel.h - -FORMS += \ - AboutDialog.ui \ - OptionsDialog.ui \ - PictureDialog.ui \ - ProfileInterface.ui \ - SavegameDialog.ui \ - SavegameWidget.ui \ - SnapmaticWidget.ui \ - UserInterface.ui - -TRANSLATIONS += \ - res/gta5sync_de.ts \ - lang/gta5sync_ru.ts - -RESOURCES += \ - res/app.qrc - -DISTFILES += res/app.rc \ - res/gta5sync.desktop \ - res/gta5sync_de.ts \ - lang/gta5sync_ru.qm \ - lang/qtbase_ru.qm \ - lang/README.txt \ - lang/gta5sync_ru.ts \ - lang/qt_ru.qm - -INCLUDEPATH += ./uimod - -# WINDOWS ONLY - -win32: DEFINES += GTA5SYNC_WIN -win32: RC_FILE += res/app.rc -win32: LIBS += -luser32 - -# QT4 ONLY STUFF - -isEqual(QT_MAJOR_VERSION, 4): INCLUDEPATH += ./qjson4 -isEqual(QT_MAJOR_VERSION, 4): HEADERS += qjson4/QJsonArray.h \ - qjson4/QJsonDocument.h \ - qjson4/QJsonObject.h \ - qjson4/QJsonParseError.h \ - qjson4/QJsonValue.h \ - qjson4/QJsonValueRef.h \ - qjson4/QJsonParser.h \ - qjson4/QJsonRoot.h - -isEqual(QT_MAJOR_VERSION, 4): SOURCES += qjson4/QJsonArray.cpp \ - qjson4/QJsonDocument.cpp \ - qjson4/QJsonObject.cpp \ - qjson4/QJsonParseError.cpp \ - qjson4/QJsonValue.cpp \ - qjson4/QJsonValueRef.cpp \ - qjson4/QJsonParser.cpp - -# UNIX SYSTEM STUFF - -unix: !macx: appfiles.path = $$(INSTALL_PATH)/share/applications -unix: !macx: appfiles.files = $$PWD/res/gta5sync.desktop -unix: !macx: pixmaps.path = $$(INSTALL_PATH)/share/pixmaps -unix: !macx: pixmaps.files = $$PWD/res/gta5sync.xpm -unix: !macx: target.path = $$(INSTALL_PATH)/bin -unix: !macx: INSTALLS += target pixmaps appfiles - -# STATIC BUILD STUFF -static: isEqual(QT_MAJOR_VERSION, 4): QTPLUGIN += qjpcodecs +#/***************************************************************************** +#* gta5sync GRAND THEFT AUTO V SYNC +#* Copyright (C) 2015-2016 Syping +#* +#* This program is free software: you can redistribute it and/or modify +#* it under the terms of the GNU General Public License as published by +#* the Free Software Foundation, either version 3 of the License, or +#* (at your option) any later version. +#* +#* This program is distributed in the hope that it will be useful, +#* but WITHOUT ANY WARRANTY; without even the implied warranty of +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#* GNU General Public License for more details. +#* +#* You should have received a copy of the GNU General Public License +#* along with this program. If not, see . +#*****************************************************************************/ + +QT += core gui network + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = gta5sync +TEMPLATE = app + +SOURCES += main.cpp \ + AboutDialog.cpp \ + AppEnv.cpp \ + CrewDatabase.cpp \ + DatabaseThread.cpp \ + ExportThread.cpp \ + IconLoader.cpp \ + OptionsDialog.cpp \ + PictureCopy.cpp \ + PictureDialog.cpp \ + PictureExport.cpp \ + PictureWidget.cpp \ + ProfileDatabase.cpp \ + ProfileInterface.cpp \ + ProfileLoader.cpp \ + ProfileWidget.cpp \ + SavegameCopy.cpp \ + SavegameData.cpp \ + SavegameDialog.cpp \ + SavegameWidget.cpp \ + SidebarGenerator.cpp \ + SnapmaticPicture.cpp \ + SnapmaticWidget.cpp \ + StandardPaths.cpp \ + StringParser.cpp \ + UserInterface.cpp \ + uimod/UiModLabel.cpp + +HEADERS += \ + AboutDialog.h \ + AppEnv.h \ + CrewDatabase.h \ + DatabaseThread.h \ + ExportThread.h \ + IconLoader.h \ + OptionsDialog.h \ + PictureCopy.h \ + PictureDialog.h \ + PictureExport.h \ + PictureWidget.h \ + ProfileDatabase.h \ + ProfileInterface.h \ + ProfileLoader.h \ + ProfileWidget.h \ + SavegameCopy.h \ + SavegameData.h \ + SavegameDialog.h \ + SavegameWidget.h \ + SidebarGenerator.h \ + SnapmaticPicture.h \ + SnapmaticWidget.h \ + StandardPaths.h \ + StringParser.h \ + UserInterface.h \ + uimod/UiModLabel.h + +FORMS += \ + AboutDialog.ui \ + OptionsDialog.ui \ + PictureDialog.ui \ + ProfileInterface.ui \ + SavegameDialog.ui \ + SavegameWidget.ui \ + SnapmaticWidget.ui \ + UserInterface.ui + +TRANSLATIONS += \ + res/gta5sync_de.ts \ + lang/gta5sync_ru.ts + +RESOURCES += \ + res/app.qrc + +DISTFILES += res/app.rc \ + res/gta5sync.desktop \ + res/gta5sync_de.ts \ + lang/gta5sync_ru.qm \ + lang/qtbase_ru.qm \ + lang/README.txt \ + lang/gta5sync_ru.ts \ + lang/qt_ru.qm + +INCLUDEPATH += ./uimod + +# WINDOWS ONLY + +win32: DEFINES += GTA5SYNC_WIN +win32: RC_FILE += res/app.rc +win32: LIBS += -luser32 + +# QT4 ONLY STUFF + +isEqual(QT_MAJOR_VERSION, 4): INCLUDEPATH += ./qjson4 +isEqual(QT_MAJOR_VERSION, 4): HEADERS += qjson4/QJsonArray.h \ + qjson4/QJsonDocument.h \ + qjson4/QJsonObject.h \ + qjson4/QJsonParseError.h \ + qjson4/QJsonValue.h \ + qjson4/QJsonValueRef.h \ + qjson4/QJsonParser.h \ + qjson4/QJsonRoot.h + +isEqual(QT_MAJOR_VERSION, 4): SOURCES += qjson4/QJsonArray.cpp \ + qjson4/QJsonDocument.cpp \ + qjson4/QJsonObject.cpp \ + qjson4/QJsonParseError.cpp \ + qjson4/QJsonValue.cpp \ + qjson4/QJsonValueRef.cpp \ + qjson4/QJsonParser.cpp + +# UNIX SYSTEM STUFF + +unix: !macx: appfiles.path = $$(INSTALL_PATH)/share/applications +unix: !macx: appfiles.files = $$PWD/res/gta5sync.desktop +unix: !macx: pixmaps.path = $$(INSTALL_PATH)/share/pixmaps +unix: !macx: pixmaps.files = $$PWD/res/gta5sync.xpm +unix: !macx: target.path = $$(INSTALL_PATH)/bin +unix: !macx: INSTALLS += target pixmaps appfiles + +# STATIC BUILD STUFF +static: isEqual(QT_MAJOR_VERSION, 4): QTPLUGIN += qjpcodecs