2017-10-09 08:35:48 +02:00
/*****************************************************************************
2018-05-24 22:32:00 +02:00
* gta5view Grand Theft Auto V Profile Viewer
2018-07-28 05:06:46 +02:00
* Copyright ( C ) 2016 - 2018 Syping
2017-10-09 08:35:48 +02:00
*
* 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 "SavegameWidget.h"
# include "ui_SavegameWidget.h"
# include "SidebarGenerator.h"
# include "SavegameDialog.h"
# include "StandardPaths.h"
# include "SavegameData.h"
# include "SavegameCopy.h"
# include "AppEnv.h"
2018-07-28 05:06:46 +02:00
# include "config.h"
2017-10-09 08:35:48 +02:00
# include <QFileDialog>
# include <QMessageBox>
# include <QSettings>
# include <QFileInfo>
# include <QPalette>
# include <QColor>
# include <QBrush>
# include <QTimer>
# include <QDebug>
# include <QFile>
# include <QMenu>
# include <QUrl>
2018-07-28 05:06:46 +02:00
# ifdef GTA5SYNC_TELEMETRY
# include "TelemetryClass.h"
# include <QJsonDocument>
# include <QJsonObject>
# include <QDateTime>
# endif
2017-10-09 08:35:48 +02:00
SavegameWidget : : SavegameWidget ( QWidget * parent ) :
ProfileWidget ( parent ) ,
ui ( new Ui : : SavegameWidget )
{
ui - > setupUi ( this ) ;
ui - > cmdCopy - > setVisible ( false ) ;
ui - > cmdView - > setVisible ( false ) ;
ui - > cmdDelete - > setVisible ( false ) ;
ui - > cbSelected - > setVisible ( false ) ;
qreal screenRatio = AppEnv : : screenRatio ( ) ;
ui - > labSavegamePic - > setFixedSize ( 48 * screenRatio , 27 * screenRatio ) ;
2019-01-13 14:32:12 +01:00
ui - > labSavegamePic - > setScaledContents ( true ) ;
ui - > labSavegamePic - > setPixmap ( QPixmap ( " :/img/savegame.svgz " ) ) ;
2017-10-09 08:35:48 +02:00
QString exportSavegameStr = tr ( " Export Savegame... " ) ;
Q_UNUSED ( exportSavegameStr )
labelAutosaveStr = tr ( " AUTOSAVE - %1 \n %2 " ) ;
labelSaveStr = tr ( " SAVE %3 - %1 \n %2 " ) ;
ui - > SavegameFrame - > setMouseTracking ( true ) ;
ui - > labSavegamePic - > setMouseTracking ( true ) ;
ui - > labSavegameStr - > setMouseTracking ( true ) ;
ui - > cbSelected - > setMouseTracking ( true ) ;
sgdata = nullptr ;
}
SavegameWidget : : ~ SavegameWidget ( )
{
delete ui ;
}
void SavegameWidget : : setSavegameData ( SavegameData * savegame , QString savegamePath )
{
// BETA CODE
QString savegameString = savegame - > getSavegameStr ( ) ;
QString fileName = QFileInfo ( savegame - > getSavegameFileName ( ) ) . fileName ( ) ;
renderString ( savegameString , fileName ) ;
sgdStr = savegameString ;
sgdPath = savegamePath ;
sgdata = savegame ;
}
void SavegameWidget : : renderString ( const QString & savegameString , const QString & fileName )
{
bool validNumber ;
QString savegameName = tr ( " WRONG FORMAT " ) ;
QString savegameDate = tr ( " WRONG FORMAT " ) ;
QStringList savegameNDL = QString ( savegameString ) . split ( " - " ) ;
if ( savegameNDL . length ( ) > = 2 )
{
savegameDate = savegameNDL . at ( savegameNDL . length ( ) - 1 ) ;
savegameName = QString ( savegameString ) . remove ( savegameString . length ( ) - savegameDate . length ( ) - 3 , savegameDate . length ( ) + 3 ) ;
}
int savegameNumber = QString ( fileName ) . remove ( 0 , 5 ) . toInt ( & validNumber ) + 1 ;
if ( validNumber )
{
if ( savegameNumber = = 16 )
{
ui - > labSavegameStr - > setText ( labelAutosaveStr . arg ( savegameDate , savegameName ) ) ;
}
else
{
ui - > labSavegameStr - > setText ( labelSaveStr . arg ( savegameDate , savegameName , QString : : number ( savegameNumber ) ) ) ;
}
}
else
{
ui - > labSavegameStr - > setText ( labelSaveStr . arg ( savegameDate , savegameName , tr ( " UNKNOWN " ) ) ) ;
}
}
void SavegameWidget : : retranslate ( )
{
labelAutosaveStr = tr ( " AUTOSAVE - %1 \n %2 " ) ;
labelSaveStr = tr ( " SAVE %3 - %1 \n %2 " ) ;
QString fileName = QFileInfo ( sgdata - > getSavegameFileName ( ) ) . fileName ( ) ;
renderString ( sgdStr , fileName ) ;
}
void SavegameWidget : : on_cmdCopy_clicked ( )
{
SavegameCopy : : copySavegame ( this , sgdPath ) ;
}
void SavegameWidget : : on_cmdDelete_clicked ( )
{
2017-10-12 22:21:45 +02:00
int uchoice = QMessageBox : : question ( this , tr ( " Delete Savegame " ) , tr ( " Are you sure to delete %1 from your savegames? " ) . arg ( " \" " + sgdStr + " \" " ) , QMessageBox : : No | QMessageBox : : Yes , QMessageBox : : No ) ;
2017-10-09 08:35:48 +02:00
if ( uchoice = = QMessageBox : : Yes )
{
if ( ! QFile : : exists ( sgdPath ) )
{
emit savegameDeleted ( ) ;
2018-07-28 05:06:46 +02:00
# ifdef GTA5SYNC_TELEMETRY
QSettings telemetrySettings ( GTA5SYNC_APPVENDOR , GTA5SYNC_APPSTR ) ;
telemetrySettings . beginGroup ( " Telemetry " ) ;
bool pushUsageData = telemetrySettings . value ( " PushUsageData " , false ) . toBool ( ) ;
telemetrySettings . endGroup ( ) ;
if ( pushUsageData & & Telemetry - > canPush ( ) )
{
QJsonDocument jsonDocument ;
QJsonObject jsonObject ;
jsonObject [ " Type " ] = " DeleteSuccess " ;
jsonObject [ " ExtraFlags " ] = " Savegame " ;
jsonObject [ " DeletedTime " ] = QString : : number ( QDateTime : : currentDateTimeUtc ( ) . toTime_t ( ) ) ;
jsonDocument . setObject ( jsonObject ) ;
Telemetry - > push ( TelemetryCategory : : PersonalData , jsonDocument ) ;
}
# endif
2017-10-09 08:35:48 +02:00
}
2018-07-28 05:06:46 +02:00
else if ( QFile : : remove ( sgdPath ) )
2017-10-09 08:35:48 +02:00
{
2018-07-28 05:06:46 +02:00
# ifdef GTA5SYNC_TELEMETRY
QSettings telemetrySettings ( GTA5SYNC_APPVENDOR , GTA5SYNC_APPSTR ) ;
telemetrySettings . beginGroup ( " Telemetry " ) ;
bool pushUsageData = telemetrySettings . value ( " PushUsageData " , false ) . toBool ( ) ;
telemetrySettings . endGroup ( ) ;
if ( pushUsageData & & Telemetry - > canPush ( ) )
{
QJsonDocument jsonDocument ;
QJsonObject jsonObject ;
jsonObject [ " Type " ] = " DeleteSuccess " ;
jsonObject [ " ExtraFlags " ] = " Savegame " ;
jsonObject [ " DeletedTime " ] = QString : : number ( QDateTime : : currentDateTimeUtc ( ) . toTime_t ( ) ) ;
jsonDocument . setObject ( jsonObject ) ;
Telemetry - > push ( TelemetryCategory : : PersonalData , jsonDocument ) ;
}
# endif
2017-10-09 08:35:48 +02:00
emit savegameDeleted ( ) ;
}
else
{
2017-10-12 22:21:45 +02:00
QMessageBox : : warning ( this , tr ( " Delete Savegame " ) , tr ( " Failed at deleting %1 from your savegames " ) . arg ( " \" " + sgdStr + " \" " ) ) ;
2017-10-09 08:35:48 +02:00
}
}
}
void SavegameWidget : : on_cmdView_clicked ( )
{
SavegameDialog * savegameDialog = new SavegameDialog ( this ) ;
savegameDialog - > setSavegameData ( sgdata , sgdPath , true ) ;
savegameDialog - > setModal ( true ) ;
# ifdef Q_OS_ANDROID
// Android ...
savegameDialog - > showMaximized ( ) ;
# else
savegameDialog - > show ( ) ;
# endif
savegameDialog - > exec ( ) ;
delete savegameDialog ;
}
void SavegameWidget : : mousePressEvent ( QMouseEvent * ev )
{
ProfileWidget : : mousePressEvent ( ev ) ;
}
void SavegameWidget : : mouseReleaseEvent ( QMouseEvent * ev )
{
ProfileWidget : : mouseReleaseEvent ( ev ) ;
if ( ui - > cbSelected - > isVisible ( ) )
{
if ( rect ( ) . contains ( ev - > pos ( ) ) & & ev - > button ( ) = = Qt : : LeftButton )
{
ui - > cbSelected - > setChecked ( ! ui - > cbSelected - > isChecked ( ) ) ;
}
}
else
{
2020-11-23 03:13:07 +01:00
const int contentMode = getContentMode ( ) ;
if ( ( contentMode = = 0 | | contentMode = = 10 | | contentMode = = 20 ) & & rect ( ) . contains ( ev - > pos ( ) ) & & ev - > button ( ) = = Qt : : LeftButton )
2017-10-09 08:35:48 +02:00
{
if ( ev - > modifiers ( ) . testFlag ( Qt : : ShiftModifier ) )
{
ui - > cbSelected - > setChecked ( ! ui - > cbSelected - > isChecked ( ) ) ;
}
else
{
on_cmdView_clicked ( ) ;
}
}
2020-11-23 03:13:07 +01:00
else if ( ! ui - > cbSelected - > isVisible ( ) & & ( contentMode = = 1 | | contentMode = = 11 | | contentMode = = 21 ) & & ev - > button ( ) = = Qt : : LeftButton & & ev - > modifiers ( ) . testFlag ( Qt : : ShiftModifier ) )
2017-10-09 08:35:48 +02:00
{
ui - > cbSelected - > setChecked ( ! ui - > cbSelected - > isChecked ( ) ) ;
}
}
}
void SavegameWidget : : mouseDoubleClickEvent ( QMouseEvent * ev )
{
ProfileWidget : : mouseDoubleClickEvent ( ev ) ;
2020-11-23 03:13:07 +01:00
const int contentMode = getContentMode ( ) ;
if ( ! ui - > cbSelected - > isVisible ( ) & & ( contentMode = = 1 | | contentMode = = 11 | | contentMode = = 21 ) & & ev - > button ( ) = = Qt : : LeftButton )
2017-10-09 08:35:48 +02:00
{
on_cmdView_clicked ( ) ;
}
}
void SavegameWidget : : setSelected ( bool isSelected )
{
ui - > cbSelected - > setChecked ( isSelected ) ;
}
void SavegameWidget : : savegameSelected ( )
{
setSelected ( ! ui - > cbSelected - > isChecked ( ) ) ;
}
void SavegameWidget : : contextMenuEvent ( QContextMenuEvent * ev )
{
emit contextMenuTriggered ( ev ) ;
}
void SavegameWidget : : on_cbSelected_stateChanged ( int arg1 )
{
if ( arg1 = = Qt : : Checked )
{
emit widgetSelected ( ) ;
}
else if ( arg1 = = Qt : : Unchecked )
{
emit widgetDeselected ( ) ;
}
}
bool SavegameWidget : : isSelected ( )
{
return ui - > cbSelected - > isChecked ( ) ;
}
void SavegameWidget : : setSelectionMode ( bool selectionMode )
{
ui - > cbSelected - > setVisible ( selectionMode ) ;
}
void SavegameWidget : : selectAllWidgets ( )
{
emit allWidgetsSelected ( ) ;
}
void SavegameWidget : : deselectAllWidgets ( )
{
emit allWidgetsDeselected ( ) ;
}
SavegameData * SavegameWidget : : getSavegame ( )
{
return sgdata ;
}
QString SavegameWidget : : getWidgetType ( )
{
return " SavegameWidget " ;
}