2015-11-12 17:01:08 +00:00
/*
2021-02-06 19:00:48 +01:00
Copyright 2006 - 2020 The QElectroTech Team
2020-08-16 09:40:14 +02:00
This file is part of QElectroTech .
2015-11-12 17:01:08 +00:00
2020-08-16 09:40:14 +02:00
QElectroTech 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 2 of the License , or
( at your option ) any later version .
2015-11-12 17:01:08 +00:00
2020-08-16 09:40:14 +02:00
QElectroTech 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 .
2015-11-12 17:01:08 +00:00
2020-08-16 09:40:14 +02:00
You should have received a copy of the GNU General Public License
along with QElectroTech . If not , see < http : //www.gnu.org/licenses/>.
2015-11-12 17:01:08 +00:00
*/
# include "diagrameventaddimage.h"
2020-12-08 19:57:35 +01:00
# include "../diagram.h"
# include "../diagramcommands.h"
2020-12-10 18:44:03 +01:00
# include "../qetgraphicsitem/diagramimageitem.h"
2015-11-12 17:01:08 +00:00
/**
2020-08-16 11:19:36 +02:00
@ brief DiagramEventAddImage : : DiagramEventAddImage
Default constructor
@ param diagram : diagram where operate this event
*/
2015-11-12 17:01:08 +00:00
DiagramEventAddImage : : DiagramEventAddImage ( Diagram * diagram ) :
2020-08-16 14:23:25 +02:00
DiagramEventInterface ( diagram ) ,
m_image ( nullptr ) ,
m_is_added ( false )
2015-11-12 17:01:08 +00:00
{
2020-08-16 14:23:25 +02:00
openDialog ( ) ;
2015-11-12 17:01:08 +00:00
}
/**
2020-08-16 11:19:36 +02:00
@ brief DiagramEventAddImage : : ~ DiagramEventAddImage
*/
2015-11-12 17:01:08 +00:00
DiagramEventAddImage : : ~ DiagramEventAddImage ( )
{
2020-08-16 14:23:25 +02:00
if ( m_running | | m_abort )
{
if ( m_is_added ) m_diagram - > removeItem ( m_image ) ;
delete m_image ;
}
foreach ( QGraphicsView * view , m_diagram - > views ( ) )
view - > setContextMenuPolicy ( ( Qt : : DefaultContextMenu ) ) ;
2015-11-12 17:01:08 +00:00
}
/**
2020-08-16 11:19:36 +02:00
@ brief DiagramEventAddImage : : mousePressEvent
Action when mouse is pressed
@ param event : event of mouse pressed
*/
2019-01-14 18:25:43 +00:00
void DiagramEventAddImage : : mousePressEvent ( QGraphicsSceneMouseEvent * event )
2015-11-12 17:01:08 +00:00
{
2020-07-15 23:00:21 +02:00
if ( m_image & & event - > button ( ) = = Qt : : LeftButton )
{
QPointF pos = event - > scenePos ( ) ;
pos . rx ( ) - = m_image - > boundingRect ( ) . width ( ) / 2 ;
pos . ry ( ) - = m_image - > boundingRect ( ) . height ( ) / 2 ;
m_diagram - > undoStack ( ) . push ( new AddItemCommand < DiagramImageItem * > ( m_image , m_diagram , pos ) ) ;
2019-01-14 18:25:43 +00:00
for ( QGraphicsView * view : m_diagram - > views ( ) ) {
2020-07-15 23:00:21 +02:00
view - > setContextMenuPolicy ( ( Qt : : DefaultContextMenu ) ) ;
2019-01-14 18:25:43 +00:00
}
2020-07-15 23:00:21 +02:00
m_running = false ;
emit finish ( ) ;
2019-01-14 18:25:43 +00:00
event - > setAccepted ( true ) ;
2020-07-15 23:00:21 +02:00
}
else if ( m_image & & event - > button ( ) = = Qt : : RightButton )
{
m_image - > setRotation ( m_image - > rotation ( ) + 90 ) ;
event - > setAccepted ( true ) ;
}
2015-11-12 17:01:08 +00:00
}
/**
2020-08-16 11:19:36 +02:00
@ brief DiagramEventAddImage : : mouseMoveEvent
Action when mouse move
@ param event : event of mouse move
*/
2019-01-14 18:25:43 +00:00
void DiagramEventAddImage : : mouseMoveEvent ( QGraphicsSceneMouseEvent * event )
2015-11-12 17:01:08 +00:00
{
2019-01-14 18:25:43 +00:00
if ( ! m_image | | event - > buttons ( ) ! = Qt : : NoButton ) {
return ;
} ;
2020-07-15 23:00:21 +02:00
QPointF pos = event - > scenePos ( ) ;
if ( ! m_is_added )
{
2019-01-14 18:25:43 +00:00
for ( QGraphicsView * view : m_diagram - > views ( ) ) {
2020-07-15 23:00:21 +02:00
view - > setContextMenuPolicy ( ( Qt : : NoContextMenu ) ) ;
2019-01-14 18:25:43 +00:00
}
2020-07-15 23:00:21 +02:00
m_diagram - > addItem ( m_image ) ;
m_is_added = true ;
}
m_image - > setPos ( pos - m_image - > boundingRect ( ) . center ( ) ) ;
event - > setAccepted ( true ) ;
2015-11-12 17:01:08 +00:00
}
/**
2020-08-16 11:19:36 +02:00
@ brief DiagramEventAddImage : : mouseDoubleClickEvent
This method is only use to overwrite double click .
When double click , image propertie dialog isn ' t open .
@ param event : event of mouse double click .
*/
2019-01-14 18:25:43 +00:00
void DiagramEventAddImage : : mouseDoubleClickEvent ( QGraphicsSceneMouseEvent * event ) {
event - > setAccepted ( true ) ;
2015-11-12 17:01:08 +00:00
}
/**
2020-08-16 11:19:36 +02:00
@ brief DiagramEventAddImage : : wheelEvent
Action when mouse wheel is rotate
@ param event : evet of mouse wheel
*/
2019-01-14 18:25:43 +00:00
void DiagramEventAddImage : : wheelEvent ( QGraphicsSceneWheelEvent * event )
2015-11-12 17:01:08 +00:00
{
2019-01-14 18:25:43 +00:00
if ( ! m_is_added | | ! m_image | | event - > modifiers ( ) ! = Qt : : CTRL ) {
return ;
}
2020-07-15 23:00:21 +02:00
qreal scaling = m_image - > scale ( ) ;
event - > delta ( ) > 1 ? scaling + = 0.01 : scaling - = 0.01 ;
2019-01-14 18:25:43 +00:00
if ( scaling > 0.01 & & scaling < = 2 ) {
2020-07-15 23:00:21 +02:00
m_image - > setScale ( scaling ) ;
2019-01-14 18:25:43 +00:00
}
2020-07-15 23:00:21 +02:00
event - > setAccepted ( true ) ;
2015-11-12 17:01:08 +00:00
}
/**
2020-08-16 11:19:36 +02:00
@ brief DiagramEventAddImage : : isNull
@ return : true if image can ' t be loaded , otherwise return false .
*/
2015-11-12 17:01:08 +00:00
bool DiagramEventAddImage : : isNull ( ) const
{
2020-07-15 23:00:21 +02:00
if ( ! m_image ) return true ;
return false ;
2015-11-12 17:01:08 +00:00
}
/**
2020-08-16 11:19:36 +02:00
@ brief DiagramEventAddImage : : openDialog
Open dialog for select the image to add .
*/
2015-11-12 17:01:08 +00:00
void DiagramEventAddImage : : openDialog ( )
{
2020-07-15 23:00:21 +02:00
if ( m_diagram - > isReadOnly ( ) ) return ;
//Open dialog for select image
QString pathPictures = QStandardPaths : : writableLocation ( QStandardPaths : : PicturesLocation ) ;
QString fileName = QFileDialog : : getOpenFileName ( m_diagram - > views ( ) . isEmpty ( ) ? nullptr : m_diagram - > views ( ) . first ( ) , QObject : : tr ( " Selectionner une image... " ) , pathPictures , QObject : : tr ( " Image Files (*.png *.jpg *.jpeg *.bmp *.svg) " ) ) ;
if ( fileName . isEmpty ( ) ) return ;
QImage image ( fileName ) ;
if ( image . isNull ( ) )
{
QMessageBox : : critical ( m_diagram - > views ( ) . isEmpty ( ) ? nullptr : m_diagram - > views ( ) . first ( ) , QObject : : tr ( " Erreur " ) , QObject : : tr ( " Impossible de charger l'image. " ) ) ;
return ;
}
m_image = new DiagramImageItem ( QPixmap : : fromImage ( image ) ) ;
m_running = true ;
2015-11-12 17:01:08 +00:00
}