2016-03-25 07:07:58 +01:00
/*****************************************************************************
* gta5sync GRAND THEFT AUTO V SYNC
2016-03-27 09:52:23 +02:00
* Copyright ( C ) 2016 Syping
2016-03-25 07:07:58 +01: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 "SnapmaticWidget.h"
# include "ui_SnapmaticWidget.h"
2016-03-26 08:53:37 +01:00
# include "SnapmaticPicture.h"
2016-12-10 07:55:06 +01:00
# include "SnapmaticEditor.h"
2016-03-27 15:53:32 +02:00
# include "DatabaseThread.h"
2016-03-26 10:46:25 +01:00
# include "PictureDialog.h"
2016-04-03 02:27:24 +02:00
# include "PictureExport.h"
# include "PictureCopy.h"
2016-11-02 06:53:19 +01:00
# include "config.h"
2016-03-28 15:24:09 +02:00
# include <QMessageBox>
2016-03-26 08:53:37 +01:00
# include <QPixmap>
2016-04-03 05:25:54 +02:00
# include <QTimer>
2016-03-28 15:24:09 +02:00
# include <QDebug>
2016-04-03 01:18:48 +02:00
# include <QMenu>
2016-03-28 15:24:09 +02:00
# include <QFile>
2016-03-25 07:07:58 +01:00
2016-05-09 10:24:34 +02:00
SnapmaticWidget : : SnapmaticWidget ( ProfileDatabase * profileDB , CrewDatabase * crewDB , DatabaseThread * threadDB , QWidget * parent ) :
ProfileWidget ( parent ) , profileDB ( profileDB ) , crewDB ( crewDB ) , threadDB ( threadDB ) ,
2016-03-25 07:07:58 +01:00
ui ( new Ui : : SnapmaticWidget )
{
ui - > setupUi ( this ) ;
2016-04-03 01:18:48 +02:00
ui - > cmdView - > setVisible ( false ) ;
ui - > cmdCopy - > setVisible ( false ) ;
2016-04-03 02:27:24 +02:00
ui - > cmdExport - > setVisible ( false ) ;
2016-04-03 01:18:48 +02:00
ui - > cmdDelete - > setVisible ( false ) ;
ui - > cbSelected - > setVisible ( false ) ;
2016-04-03 05:25:54 +02:00
QPalette palette ;
2016-04-12 18:29:52 +02:00
highlightBackColor = palette . highlight ( ) . color ( ) ;
highlightTextColor = palette . highlightedText ( ) . color ( ) ;
2016-10-27 06:50:53 +02:00
palette . setCurrentColorGroup ( QPalette : : Disabled ) ;
highlightHiddenColor = palette . text ( ) . color ( ) ;
2016-04-03 05:25:54 +02:00
2016-10-27 10:35:20 +02:00
snwgt = parent ;
2016-03-26 08:53:37 +01:00
picPath = " " ;
2016-03-28 15:24:09 +02:00
picStr = " " ;
2016-03-26 08:53:37 +01:00
smpic = 0 ;
2016-04-12 18:29:52 +02:00
installEventFilter ( this ) ;
2016-03-25 07:07:58 +01:00
}
SnapmaticWidget : : ~ SnapmaticWidget ( )
{
delete ui ;
}
2016-03-26 08:53:37 +01:00
2016-04-12 18:29:52 +02:00
bool SnapmaticWidget : : eventFilter ( QObject * obj , QEvent * ev )
{
if ( obj = = this )
{
if ( ev - > type ( ) = = QEvent : : Enter )
{
setStyleSheet ( QString ( " QFrame#SnapmaticFrame{background-color: rgb(%1, %2, %3)}QLabel#labPicStr{color: rgb(%4, %5, %6)} " ) . arg ( QString : : number ( highlightBackColor . red ( ) ) , QString : : number ( highlightBackColor . green ( ) ) , QString : : number ( highlightBackColor . blue ( ) ) , QString : : number ( highlightTextColor . red ( ) ) , QString : : number ( highlightTextColor . green ( ) ) , QString : : number ( highlightTextColor . blue ( ) ) ) ) ;
return true ;
}
else if ( ev - > type ( ) = = QEvent : : Leave )
{
setStyleSheet ( " " ) ;
return true ;
}
}
return false ;
}
2016-03-26 08:53:37 +01:00
void SnapmaticWidget : : setSnapmaticPicture ( SnapmaticPicture * picture , QString picturePath )
{
2016-03-28 15:24:09 +02:00
smpic = picture ;
picPath = picturePath ;
picStr = picture - > getPictureStr ( ) ;
2016-04-05 04:54:06 +02:00
picTitl = picture - > getPictureTitl ( ) ;
2016-03-28 15:24:09 +02:00
2016-12-09 23:13:21 +01:00
QPixmap SnapmaticPixmap = QPixmap : : fromImage ( picture - > getPicture ( ) . scaled ( ui - > labPicture - > width ( ) , ui - > labPicture - > height ( ) , Qt : : KeepAspectRatio , Qt : : SmoothTransformation ) , Qt : : AutoColor ) ;
2016-04-05 04:54:06 +02:00
ui - > labPicStr - > setText ( picStr + " \n " + picTitl + " " ) ;
2016-03-26 08:53:37 +01:00
ui - > labPicture - > setPixmap ( SnapmaticPixmap ) ;
2016-10-27 06:50:53 +02:00
2016-12-09 23:13:21 +01:00
picture - > clearCache ( ) ;
2016-10-27 06:50:53 +02:00
adjustTextColor ( ) ;
2016-03-26 08:53:37 +01:00
}
2016-03-26 10:46:25 +01:00
2016-04-12 20:56:58 +02:00
void SnapmaticWidget : : setSnapmaticPicture ( SnapmaticPicture * picture )
{
setSnapmaticPicture ( picture , picture - > getPictureFileName ( ) ) ;
}
2016-03-26 10:46:25 +01:00
void SnapmaticWidget : : on_cmdView_clicked ( )
{
2016-11-02 06:53:19 +01:00
QSettings settings ( GTA5SYNC_APPVENDOR , GTA5SYNC_APPSTR ) ;
settings . beginGroup ( " Interface " ) ;
bool navigationBar = settings . value ( " NavigationBar " , false ) . toBool ( ) ;
settings . endGroup ( ) ;
2016-05-09 10:24:34 +02:00
PictureDialog * picDialog = new PictureDialog ( profileDB , crewDB , this ) ;
2016-03-26 10:46:25 +01:00
picDialog - > setWindowFlags ( picDialog - > windowFlags ( ) ^ Qt : : WindowContextHelpButtonHint ) ;
2016-04-01 01:54:21 +02:00
picDialog - > setSnapmaticPicture ( smpic , picPath , true ) ;
2016-03-26 10:46:25 +01:00
picDialog - > setModal ( true ) ;
2016-03-27 15:53:32 +02:00
// be ready for playerName updated
2016-04-03 06:12:12 +02:00
QObject : : connect ( threadDB , SIGNAL ( playerNameUpdated ( ) ) , picDialog , SLOT ( playerNameUpdated ( ) ) ) ;
2016-04-12 20:56:58 +02:00
QObject : : connect ( picDialog , SIGNAL ( nextPictureRequested ( ) ) , this , SLOT ( dialogNextPictureRequested ( ) ) ) ;
QObject : : connect ( picDialog , SIGNAL ( previousPictureRequested ( ) ) , this , SLOT ( dialogPreviousPictureRequested ( ) ) ) ;
2016-03-27 15:53:32 +02:00
2016-11-01 14:19:22 +01:00
// add previous next buttons
2016-11-02 06:53:19 +01:00
if ( navigationBar ) picDialog - > addPreviousNextButtons ( ) ;
2016-11-01 14:19:22 +01:00
2016-03-27 15:53:32 +02:00
// show picture dialog
2016-04-22 14:57:56 +02:00
picDialog - > show ( ) ;
2016-11-02 06:53:19 +01:00
if ( navigationBar ) picDialog - > stylizeDialog ( ) ;
2016-12-02 13:55:27 +01:00
//picDialog->adaptNewDialogSize();
2016-04-11 20:10:23 +02:00
picDialog - > setMinimumSize ( picDialog - > size ( ) ) ;
picDialog - > setMaximumSize ( picDialog - > size ( ) ) ;
2016-03-26 10:46:25 +01:00
picDialog - > exec ( ) ;
2016-03-27 15:53:32 +02:00
delete picDialog ;
2016-03-26 10:46:25 +01:00
}
2016-03-28 15:24:09 +02:00
2016-04-03 01:18:48 +02:00
void SnapmaticWidget : : on_cmdCopy_clicked ( )
{
2016-04-03 10:17:01 +02:00
PictureCopy : : copyPicture ( this , picPath ) ;
2016-04-03 02:27:24 +02:00
}
2016-04-03 01:18:48 +02:00
2016-04-03 02:27:24 +02:00
void SnapmaticWidget : : on_cmdExport_clicked ( )
{
2016-04-03 10:17:01 +02:00
PictureExport : : exportPicture ( this , smpic ) ;
2016-04-03 01:18:48 +02:00
}
2016-03-28 15:24:09 +02:00
void SnapmaticWidget : : on_cmdDelete_clicked ( )
{
2016-03-28 21:37:42 +02:00
int uchoice = QMessageBox : : question ( this , tr ( " Delete picture " ) , tr ( " Are you sure to delete %1 from your Snapmatic pictures? " ) . arg ( " \" " + picStr + " \" " ) , QMessageBox : : Yes | QMessageBox : : No , QMessageBox : : No ) ;
2016-03-28 15:24:09 +02:00
if ( uchoice = = QMessageBox : : Yes )
{
2016-03-28 15:32:02 +02:00
if ( ! QFile : : exists ( picPath ) )
2016-03-28 15:24:09 +02:00
{
emit pictureDeleted ( ) ;
}
else if ( QFile : : remove ( picPath ) )
{
emit pictureDeleted ( ) ;
}
else
{
2016-03-28 17:46:42 +02:00
QMessageBox : : warning ( this , tr ( " Delete picture " ) , tr ( " Failed at deleting %1 from your Snapmatic pictures " ) . arg ( " \" " + picStr + " \" " ) ) ;
2016-03-28 15:24:09 +02:00
}
}
}
2016-04-02 19:41:11 +02:00
2016-04-03 05:25:54 +02:00
void SnapmaticWidget : : mousePressEvent ( QMouseEvent * ev )
{
ProfileWidget : : mousePressEvent ( ev ) ;
}
void SnapmaticWidget : : mouseReleaseEvent ( QMouseEvent * ev )
{
ProfileWidget : : mouseReleaseEvent ( ev ) ;
if ( ui - > cbSelected - > isVisible ( ) )
{
if ( rect ( ) . contains ( ev - > pos ( ) ) & & ev - > button ( ) = = Qt : : LeftButton )
{
2016-04-03 08:39:31 +02:00
ui - > cbSelected - > setChecked ( ! ui - > cbSelected - > isChecked ( ) ) ;
2016-04-03 05:25:54 +02:00
}
}
2016-04-03 05:49:18 +02:00
else
{
2016-04-14 06:33:15 +02:00
if ( getContentMode ( ) = = 0 & & rect ( ) . contains ( ev - > pos ( ) ) & & ev - > button ( ) = = Qt : : LeftButton )
2016-04-03 05:49:18 +02:00
{
on_cmdView_clicked ( ) ;
}
}
2016-04-03 05:25:54 +02:00
}
2016-04-02 19:41:11 +02:00
void SnapmaticWidget : : mouseDoubleClickEvent ( QMouseEvent * ev )
{
2016-04-14 06:33:15 +02:00
ProfileWidget : : mouseDoubleClickEvent ( ev ) ;
2016-04-03 01:18:48 +02:00
2016-04-14 06:33:15 +02:00
if ( ! ui - > cbSelected - > isVisible ( ) & & getContentMode ( ) = = 1 & & ev - > button ( ) = = Qt : : LeftButton )
2016-04-03 05:25:54 +02:00
{
2016-04-14 06:33:15 +02:00
on_cmdView_clicked ( ) ;
2016-04-03 05:25:54 +02:00
}
}
2016-04-03 08:39:31 +02:00
void SnapmaticWidget : : setSelected ( bool isSelected )
2016-04-03 02:27:24 +02:00
{
2016-04-03 08:39:31 +02:00
ui - > cbSelected - > setChecked ( isSelected ) ;
2016-04-03 02:27:24 +02:00
}
2016-04-03 06:12:12 +02:00
void SnapmaticWidget : : pictureSelected ( )
2016-04-03 01:18:48 +02:00
{
2016-04-03 09:23:14 +02:00
setSelected ( ! ui - > cbSelected - > isChecked ( ) ) ;
2016-04-03 01:18:48 +02:00
}
void SnapmaticWidget : : contextMenuEvent ( QContextMenuEvent * ev )
{
QMenu contextMenu ( this ) ;
2016-10-27 06:50:53 +02:00
QMenu editMenu ( tr ( " Edi&t " ) , this ) ;
if ( isHidden ( ) )
{
2016-10-27 11:07:07 +02:00
editMenu . addAction ( tr ( " Show &In-game " ) , this , SLOT ( makePictureVisibleSlot ( ) ) ) ;
2016-10-27 06:50:53 +02:00
}
else
{
2016-10-27 11:07:07 +02:00
editMenu . addAction ( tr ( " Hide &In-game " ) , this , SLOT ( makePictureHiddenSlot ( ) ) ) ;
2016-10-27 06:50:53 +02:00
}
2016-12-12 06:21:23 +01:00
editMenu . addAction ( tr ( " &Edit Properties... " ) , this , SLOT ( editSnapmaticProperties ( ) ) ) ;
2016-04-08 16:55:28 +02:00
QMenu exportMenu ( tr ( " &Export " ) , this ) ;
2016-04-09 10:15:36 +02:00
exportMenu . addAction ( tr ( " Export as &JPG picture... " ) , this , SLOT ( on_cmdExport_clicked ( ) ) ) ;
exportMenu . addAction ( tr ( " Export as >A Snapmatic... " ) , this , SLOT ( on_cmdCopy_clicked ( ) ) ) ;
2016-09-20 06:48:33 +02:00
contextMenu . addAction ( tr ( " &View " ) , this , SLOT ( on_cmdView_clicked ( ) ) ) ;
2016-10-27 06:50:53 +02:00
contextMenu . addMenu ( & editMenu ) ;
2016-04-08 16:55:28 +02:00
contextMenu . addMenu ( & exportMenu ) ;
2016-09-20 06:48:33 +02:00
contextMenu . addAction ( tr ( " &Remove " ) , this , SLOT ( on_cmdDelete_clicked ( ) ) ) ;
2016-04-03 09:23:14 +02:00
if ( ui - > cbSelected - > isVisible ( ) )
2016-04-03 01:18:48 +02:00
{
contextMenu . addSeparator ( ) ;
2016-04-08 16:55:28 +02:00
if ( ! ui - > cbSelected - > isChecked ( ) ) { contextMenu . addAction ( tr ( " &Select " ) , this , SLOT ( pictureSelected ( ) ) ) ; }
if ( ui - > cbSelected - > isChecked ( ) ) { contextMenu . addAction ( tr ( " &Deselect " ) , this , SLOT ( pictureSelected ( ) ) ) ; }
2016-09-20 06:48:33 +02:00
contextMenu . addAction ( tr ( " Select &All " ) , this , SLOT ( selectAllWidgets ( ) ) , QKeySequence : : fromString ( " Ctrl+A " ) ) ;
2016-10-27 10:35:20 +02:00
ProfileInterface * profileInterface = ( ProfileInterface * ) snwgt ;
if ( profileInterface - > selectedWidgets ( ) ! = 0 )
{
contextMenu . addAction ( tr ( " &Deselect All " ) , this , SLOT ( deselectAllWidgets ( ) ) , QKeySequence : : fromString ( " Ctrl+D " ) ) ;
}
2016-04-03 09:23:14 +02:00
}
else
{
contextMenu . addSeparator ( ) ;
2016-04-08 16:55:28 +02:00
contextMenu . addAction ( tr ( " &Select " ) , this , SLOT ( pictureSelected ( ) ) ) ;
2016-09-20 06:48:33 +02:00
contextMenu . addAction ( tr ( " Select &All " ) , this , SLOT ( selectAllWidgets ( ) ) , QKeySequence : : fromString ( " Ctrl+A " ) ) ;
2016-04-03 01:18:48 +02:00
}
contextMenu . exec ( ev - > globalPos ( ) ) ;
}
2016-04-12 20:56:58 +02:00
void SnapmaticWidget : : dialogNextPictureRequested ( )
{
emit nextPictureRequested ( ( QWidget * ) sender ( ) ) ;
}
void SnapmaticWidget : : dialogPreviousPictureRequested ( )
{
emit previousPictureRequested ( ( QWidget * ) sender ( ) ) ;
}
2016-04-03 01:18:48 +02:00
void SnapmaticWidget : : on_cbSelected_stateChanged ( int arg1 )
{
if ( arg1 = = Qt : : Checked )
{
emit widgetSelected ( ) ;
}
else if ( arg1 = = Qt : : Unchecked )
{
emit widgetDeselected ( ) ;
}
}
2016-10-27 06:50:53 +02:00
void SnapmaticWidget : : adjustTextColor ( )
{
if ( isHidden ( ) )
{
ui - > labPicStr - > setStyleSheet ( QString ( " QLabel{color: rgb(%1, %2, %3);} " ) . arg ( QString : : number ( highlightHiddenColor . red ( ) ) , QString : : number ( highlightHiddenColor . green ( ) ) , QString : : number ( highlightHiddenColor . blue ( ) ) ) ) ;
}
else
{
ui - > labPicStr - > setStyleSheet ( " " ) ;
}
}
2016-10-27 11:24:26 +02:00
bool SnapmaticWidget : : makePictureHidden ( )
2016-10-27 06:50:53 +02:00
{
2016-10-27 08:59:08 +02:00
SnapmaticPicture * picture = ( SnapmaticPicture * ) smpic ;
if ( picture - > setPictureHidden ( ) )
2016-10-27 06:50:53 +02:00
{
2016-10-27 11:24:26 +02:00
picPath = picture - > getPictureFileName ( ) ;
2016-10-27 06:50:53 +02:00
adjustTextColor ( ) ;
2016-10-27 11:24:26 +02:00
return true ;
2016-10-27 06:50:53 +02:00
}
2016-10-27 11:24:26 +02:00
return false ;
2016-10-27 06:50:53 +02:00
}
2016-10-27 11:24:26 +02:00
bool SnapmaticWidget : : makePictureVisible ( )
2016-10-27 06:50:53 +02:00
{
2016-10-27 08:59:08 +02:00
SnapmaticPicture * picture = ( SnapmaticPicture * ) smpic ;
if ( picture - > setPictureVisible ( ) )
2016-10-27 06:50:53 +02:00
{
2016-10-27 11:24:26 +02:00
picPath = picture - > getPictureFileName ( ) ;
2016-10-27 06:50:53 +02:00
adjustTextColor ( ) ;
2016-10-27 11:24:26 +02:00
return true ;
2016-10-27 06:50:53 +02:00
}
2016-10-27 11:24:26 +02:00
return false ;
}
void SnapmaticWidget : : makePictureHiddenSlot ( )
{
makePictureHidden ( ) ;
}
void SnapmaticWidget : : makePictureVisibleSlot ( )
{
makePictureVisible ( ) ;
2016-10-27 06:50:53 +02:00
}
2016-12-10 07:55:06 +01:00
void SnapmaticWidget : : editSnapmaticProperties ( )
{
SnapmaticEditor * snapmaticEditor = new SnapmaticEditor ( this ) ;
snapmaticEditor - > setWindowFlags ( snapmaticEditor - > windowFlags ( ) ^ Qt : : WindowContextHelpButtonHint ) ;
snapmaticEditor - > setSnapmaticPicture ( smpic ) ;
snapmaticEditor - > setModal ( true ) ;
snapmaticEditor - > exec ( ) ;
delete snapmaticEditor ;
}
2016-04-03 03:56:24 +02:00
bool SnapmaticWidget : : isSelected ( )
{
return ui - > cbSelected - > isChecked ( ) ;
}
2016-10-27 06:50:53 +02:00
bool SnapmaticWidget : : isHidden ( )
{
if ( picPath . right ( 7 ) = = " .hidden " )
{
return true ;
}
return false ;
}
2016-04-03 01:18:48 +02:00
void SnapmaticWidget : : setSelectionMode ( bool selectionMode )
{
ui - > cbSelected - > setVisible ( selectionMode ) ;
}
2016-04-03 03:56:24 +02:00
2016-04-03 09:23:14 +02:00
void SnapmaticWidget : : selectAllWidgets ( )
{
emit allWidgetsSelected ( ) ;
}
void SnapmaticWidget : : deselectAllWidgets ( )
{
emit allWidgetsDeselected ( ) ;
}
2016-04-03 03:56:24 +02:00
SnapmaticPicture * SnapmaticWidget : : getPicture ( )
{
return smpic ;
}
2016-04-06 05:34:26 +02:00
2016-10-27 07:09:46 +02:00
QString SnapmaticWidget : : getPicturePath ( )
{
return picPath ;
}
2016-04-06 05:34:26 +02:00
QString SnapmaticWidget : : getWidgetType ( )
{
return " SnapmaticWidget " ;
}