2017-10-09 08:35:48 +02:00
/*****************************************************************************
* gta5sync GRAND THEFT AUTO V SYNC
* Copyright ( C ) 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 "ImportDialog.h"
# include "ui_ImportDialog.h"
# include "AppEnv.h"
# include <QColorDialog>
# include <QMessageBox>
# include <QPainter>
# include <QPixmap>
# include <QImage>
# include <QDebug>
# include <QRgb>
// IMAGES VALUES
# define snapmaticResolutionW 960
# define snapmaticResolutionH 536
# define snapmaticAvatarResolution 470
# define snapmaticAvatarPlacementW 145
# define snapmaticAvatarPlacementH 66
ImportDialog : : ImportDialog ( QWidget * parent ) :
QDialog ( parent ) ,
ui ( new Ui : : ImportDialog )
{
2017-12-12 04:45:46 +01:00
// Set Window Flags
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
2017-10-09 08:35:48 +02:00
ui - > setupUi ( this ) ;
importAgreed = false ;
insideAvatarZone = false ;
avatarAreaImage = QImage ( " :/img/avatarareaimport.png " ) ;
selectedColour = QColor : : fromRgb ( 0 , 0 , 0 , 255 ) ;
if ( QIcon : : hasThemeIcon ( " dialog-ok " ) )
{
ui - > cmdOK - > setIcon ( QIcon : : fromTheme ( " dialog-ok " ) ) ;
}
if ( QIcon : : hasThemeIcon ( " dialog-cancel " ) )
{
ui - > cmdCancel - > setIcon ( QIcon : : fromTheme ( " dialog-cancel " ) ) ;
}
ui - > cbIgnore - > setChecked ( false ) ;
ui - > labColour - > setText ( tr ( " Background Colour: <span style= \" color: %1 \" >%1</span> " ) . arg ( selectedColour . name ( ) ) ) ;
2017-12-12 04:45:46 +01:00
// DPI calculation
2017-10-09 08:35:48 +02:00
qreal screenRatio = AppEnv : : screenRatio ( ) ;
snapmaticResolutionLW = 430 * screenRatio ;
snapmaticResolutionLH = 240 * screenRatio ;
2017-12-12 04:45:46 +01:00
ui - > vlButtom - > setSpacing ( 6 * screenRatio ) ;
# ifndef Q_OS_MAC
ui - > vlButtom - > setContentsMargins ( 9 * screenRatio , 6 * screenRatio , 9 * screenRatio , 9 * screenRatio ) ;
# else
if ( QApplication : : style ( ) - > objectName ( ) = = " macintosh " )
{
ui - > vlButtom - > setContentsMargins ( 9 * screenRatio , 9 * screenRatio , 9 * screenRatio , 9 * screenRatio ) ;
}
else
{
ui - > vlButtom - > setContentsMargins ( 9 * screenRatio , 6 * screenRatio , 9 * screenRatio , 9 * screenRatio ) ;
}
# endif
2017-10-09 08:35:48 +02:00
setMinimumSize ( 430 * screenRatio , 380 * screenRatio ) ;
setMaximumSize ( 430 * screenRatio , 380 * screenRatio ) ;
setFixedSize ( 430 * screenRatio , 380 * screenRatio ) ;
}
ImportDialog : : ~ ImportDialog ( )
{
delete ui ;
}
void ImportDialog : : processImage ( )
{
2017-11-12 15:58:59 +01:00
if ( workImage . isNull ( ) ) return ;
2017-10-09 08:35:48 +02:00
QImage snapmaticImage = workImage ;
QPixmap snapmaticPixmap ( snapmaticResolutionW , snapmaticResolutionH ) ;
snapmaticPixmap . fill ( selectedColour ) ;
QPainter snapmaticPainter ( & snapmaticPixmap ) ;
if ( insideAvatarZone )
{
// Avatar mode
int diffWidth = 0 ;
int diffHeight = 0 ;
if ( ! ui - > cbIgnore - > isChecked ( ) )
{
snapmaticImage = snapmaticImage . scaled ( snapmaticAvatarResolution , snapmaticAvatarResolution , Qt : : KeepAspectRatio , Qt : : SmoothTransformation ) ;
if ( snapmaticImage . width ( ) > snapmaticImage . height ( ) )
{
diffHeight = snapmaticAvatarResolution - snapmaticImage . height ( ) ;
diffHeight = diffHeight / 2 ;
}
else if ( snapmaticImage . width ( ) < snapmaticImage . height ( ) )
{
diffWidth = snapmaticAvatarResolution - snapmaticImage . width ( ) ;
diffWidth = diffWidth / 2 ;
}
}
else
{
snapmaticImage = snapmaticImage . scaled ( snapmaticAvatarResolution , snapmaticAvatarResolution , Qt : : IgnoreAspectRatio , Qt : : SmoothTransformation ) ;
}
snapmaticPainter . drawImage ( snapmaticAvatarPlacementW + diffWidth , snapmaticAvatarPlacementH + diffHeight , snapmaticImage ) ;
2017-11-12 15:58:59 +01:00
imageTitle = tr ( " Custom Avatar " , " Custom Avatar Description in SC, don't use Special Character! " ) ;
2017-10-09 08:35:48 +02:00
}
else
{
// Picture mode
int diffWidth = 0 ;
int diffHeight = 0 ;
if ( ! ui - > cbIgnore - > isChecked ( ) )
{
snapmaticImage = snapmaticImage . scaled ( snapmaticResolutionW , snapmaticResolutionH , Qt : : KeepAspectRatio , Qt : : SmoothTransformation ) ;
if ( snapmaticImage . width ( ) ! = snapmaticResolutionW )
{
diffWidth = snapmaticResolutionW - snapmaticImage . width ( ) ;
diffWidth = diffWidth / 2 ;
}
else if ( snapmaticImage . height ( ) ! = snapmaticResolutionH )
{
diffHeight = snapmaticResolutionH - snapmaticImage . height ( ) ;
diffHeight = diffHeight / 2 ;
}
}
else
{
snapmaticImage = snapmaticImage . scaled ( snapmaticResolutionW , snapmaticResolutionH , Qt : : IgnoreAspectRatio , Qt : : SmoothTransformation ) ;
}
snapmaticPainter . drawImage ( 0 + diffWidth , 0 + diffHeight , snapmaticImage ) ;
2017-11-12 15:58:59 +01:00
imageTitle = tr ( " Custom Picture " , " Custom Picture Description in SC, don't use Special Character! " ) ;
2017-10-09 08:35:48 +02:00
}
snapmaticPainter . end ( ) ;
newImage = snapmaticPixmap . toImage ( ) ;
ui - > labPicture - > setPixmap ( snapmaticPixmap . scaled ( snapmaticResolutionLW , snapmaticResolutionLH , Qt : : IgnoreAspectRatio , Qt : : SmoothTransformation ) ) ;
}
QImage ImportDialog : : image ( )
{
return newImage ;
}
2017-11-12 15:58:59 +01:00
void ImportDialog : : setImage ( QImage * image_ )
2017-10-09 08:35:48 +02:00
{
2017-11-12 15:58:59 +01:00
workImage = QImage ( ) ;
if ( image_ - > width ( ) = = image_ - > height ( ) )
2017-10-09 08:35:48 +02:00
{
insideAvatarZone = true ;
ui - > cbAvatar - > setChecked ( true ) ;
2017-11-12 15:58:59 +01:00
if ( image_ - > height ( ) > snapmaticResolutionH )
{
workImage = image_ - > scaled ( snapmaticResolutionH , snapmaticResolutionH , Qt : : IgnoreAspectRatio , Qt : : SmoothTransformation ) ;
delete image_ ;
}
else
{
workImage = * image_ ;
delete image_ ;
}
}
else if ( image_ - > width ( ) > snapmaticResolutionW & & image_ - > width ( ) > image_ - > height ( ) )
{
workImage = image_ - > scaledToWidth ( snapmaticResolutionW , Qt : : SmoothTransformation ) ;
delete image_ ;
}
else if ( image_ - > height ( ) > snapmaticResolutionH & & image_ - > height ( ) > image_ - > width ( ) )
{
workImage = image_ - > scaledToHeight ( snapmaticResolutionH , Qt : : SmoothTransformation ) ;
delete image_ ;
}
else
{
workImage = * image_ ;
delete image_ ;
2017-10-09 08:35:48 +02:00
}
processImage ( ) ;
}
bool ImportDialog : : isImportAgreed ( )
{
return importAgreed ;
}
QString ImportDialog : : getImageTitle ( )
{
return imageTitle ;
}
void ImportDialog : : on_cbIgnore_toggled ( bool checked )
{
Q_UNUSED ( checked )
processImage ( ) ;
}
void ImportDialog : : on_cbAvatar_toggled ( bool checked )
{
if ( workImage . width ( ) = = workImage . height ( ) & & ! checked )
{
if ( QMessageBox : : No = = QMessageBox : : warning ( this , tr ( " Snapmatic Avatar Zone " ) , tr ( " Are you sure to use a square image outside of the Avatar Zone? \n When you want to use it as Avatar the image will be detached! " ) , QMessageBox : : Yes | QMessageBox : : No , QMessageBox : : No ) )
{
ui - > cbAvatar - > setChecked ( true ) ;
insideAvatarZone = true ;
return ;
}
}
insideAvatarZone = ui - > cbAvatar - > isChecked ( ) ;
processImage ( ) ;
}
void ImportDialog : : on_cmdCancel_clicked ( )
{
close ( ) ;
}
void ImportDialog : : on_cmdOK_clicked ( )
{
importAgreed = true ;
close ( ) ;
}
void ImportDialog : : on_labPicture_labelPainted ( )
{
if ( insideAvatarZone )
{
QImage avatarAreaFinalImage ( avatarAreaImage ) ;
if ( selectedColour . lightness ( ) > 127 )
{
avatarAreaFinalImage . setColor ( 1 , qRgb ( 0 , 0 , 0 ) ) ;
}
QPainter labelPainter ( ui - > labPicture ) ;
labelPainter . drawImage ( 0 , 0 , avatarAreaFinalImage . scaled ( snapmaticResolutionLW , snapmaticResolutionLH , Qt : : IgnoreAspectRatio , Qt : : SmoothTransformation ) ) ;
labelPainter . end ( ) ;
}
}
void ImportDialog : : on_cmdColourChange_clicked ( )
{
QColor newSelectedColour = QColorDialog : : getColor ( selectedColour , this , tr ( " Select Colour... " ) ) ;
if ( newSelectedColour . isValid ( ) )
{
selectedColour = newSelectedColour ;
ui - > labColour - > setText ( tr ( " Background Colour: <span style= \" color: %1 \" >%1</span> " ) . arg ( selectedColour . name ( ) ) ) ;
processImage ( ) ;
}
}