mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-20 08:10:52 +01:00
Element editor add touchpad gestures, thank Yoann
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@3533 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -18,6 +18,7 @@
|
|||||||
#include "elementview.h"
|
#include "elementview.h"
|
||||||
#include "qetelementeditor.h"
|
#include "qetelementeditor.h"
|
||||||
#include "editorcommands.h"
|
#include "editorcommands.h"
|
||||||
|
#include "qetapp.h"
|
||||||
/**
|
/**
|
||||||
Constructeur
|
Constructeur
|
||||||
@param scene ElementScene visualisee par cette ElementView
|
@param scene ElementScene visualisee par cette ElementView
|
||||||
@@ -28,6 +29,7 @@ ElementView::ElementView(ElementScene *scene, QWidget *parent) :
|
|||||||
scene_(scene),
|
scene_(scene),
|
||||||
offset_paste_count_(0)
|
offset_paste_count_(0)
|
||||||
{
|
{
|
||||||
|
grabGesture(Qt::PinchGesture);
|
||||||
setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
|
setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
|
||||||
setInteractive(true);
|
setInteractive(true);
|
||||||
setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||||||
@@ -112,6 +114,22 @@ void ElementView::zoomOut() {
|
|||||||
scale(0.75, 0.75);
|
scale(0.75, 0.75);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Agrandit le schema avec le trackpad
|
||||||
|
*/
|
||||||
|
void ElementView::zoomInSlowly() {
|
||||||
|
scale(1.02, 1.02);
|
||||||
|
adjustSceneRect();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Retrecit le schema avec le trackpad
|
||||||
|
*/
|
||||||
|
void ElementView::zoomOutSlowly() {
|
||||||
|
scale(0.98, 0.98);
|
||||||
|
adjustSceneRect();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Agrandit ou rectrecit le schema de facon a ce que tous les elements du
|
Agrandit ou rectrecit le schema de facon a ce que tous les elements du
|
||||||
schema soient visibles a l'ecran. S'il n'y a aucun element sur le schema,
|
schema soient visibles a l'ecran. S'il n'y a aucun element sur le schema,
|
||||||
@@ -381,20 +399,74 @@ void ElementView::mouseReleaseEvent(QMouseEvent *e) {
|
|||||||
QGraphicsView::mouseReleaseEvent(e);
|
QGraphicsView::mouseReleaseEvent(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ElementView::gestures
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
bool ElementView::gestures() const {
|
||||||
|
return(QETApp::settings().value("diagramview/gestures", false).toBool());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief ElementView::wheelEvent
|
* @brief ElementView::wheelEvent
|
||||||
* @param e
|
* @param e
|
||||||
*/
|
*/
|
||||||
void ElementView::wheelEvent(QWheelEvent *e) {
|
void ElementView::wheelEvent(QWheelEvent *e) {
|
||||||
//Zoom and scrolling
|
//Zoom and scrolling
|
||||||
if (e -> buttons() != Qt::MidButton) {
|
// if (e -> buttons() != Qt::MidButton) {
|
||||||
if (!(e -> modifiers() & Qt::ControlModifier))
|
// if (!(e -> modifiers() & Qt::ControlModifier))
|
||||||
e -> delta() > 0 ? zoomIn() : zoomOut();
|
// e -> delta() > 0 ? zoomIn() : zoomOut();
|
||||||
|
// else
|
||||||
|
// QAbstractScrollArea::wheelEvent(e);
|
||||||
|
// }
|
||||||
|
if ( gestures() ) {
|
||||||
|
if (e -> modifiers() & Qt::ControlModifier)
|
||||||
|
e -> delta() > 0 ? zoomInSlowly() : zoomOutSlowly();
|
||||||
else
|
else
|
||||||
QAbstractScrollArea::wheelEvent(e);
|
QGraphicsView::wheelEvent(e);
|
||||||
|
} else {
|
||||||
|
e -> delta() > 0 ? zoomIn(): zoomOut();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Gere les evenements de la ElementView
|
||||||
|
@param e Evenement
|
||||||
|
*/
|
||||||
|
bool ElementView::event(QEvent *e) {
|
||||||
|
// By default touch events are converted to mouse events. So
|
||||||
|
// after this event we will get a mouse event also but we want
|
||||||
|
// to handle touch events as gestures only. So we need this safeguard
|
||||||
|
// to block mouse events that are actually generated from touch.
|
||||||
|
if (e->type() == QEvent::Gesture)
|
||||||
|
return gestureEvent(static_cast<QGestureEvent *>(e));
|
||||||
|
|
||||||
|
return(QGraphicsView::event(e));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utilise le pincement du trackpad pour zoomer
|
||||||
|
* @brief ElementView::gestureEvent
|
||||||
|
* @param event
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
bool ElementView::gestureEvent(QGestureEvent *event){
|
||||||
|
if (QGesture *gesture = event->gesture(Qt::PinchGesture)) {
|
||||||
|
QPinchGesture *pinch = static_cast<QPinchGesture *>(gesture);
|
||||||
|
if (pinch->changeFlags() & QPinchGesture::ScaleFactorChanged){
|
||||||
|
qreal value = gesture->property("scaleFactor").toReal();
|
||||||
|
if (value > 1){
|
||||||
|
zoomInSlowly();
|
||||||
|
}else{
|
||||||
|
zoomOutSlowly();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Dessine l'arriere-plan de l'editeur, cad la grille.
|
Dessine l'arriere-plan de l'editeur, cad la grille.
|
||||||
@param p Le QPainter a utiliser pour dessiner
|
@param p Le QPainter a utiliser pour dessiner
|
||||||
|
|||||||
@@ -47,6 +47,8 @@ class ElementView : public QGraphicsView {
|
|||||||
void mousePressEvent(QMouseEvent *);
|
void mousePressEvent(QMouseEvent *);
|
||||||
void mouseMoveEvent(QMouseEvent *);
|
void mouseMoveEvent(QMouseEvent *);
|
||||||
void mouseReleaseEvent(QMouseEvent *);
|
void mouseReleaseEvent(QMouseEvent *);
|
||||||
|
bool gestureEvent(QGestureEvent *event);
|
||||||
|
bool event(QEvent *event);
|
||||||
void wheelEvent(QWheelEvent *);
|
void wheelEvent(QWheelEvent *);
|
||||||
virtual void drawBackground(QPainter *, const QRectF &);
|
virtual void drawBackground(QPainter *, const QRectF &);
|
||||||
|
|
||||||
@@ -58,6 +60,8 @@ class ElementView : public QGraphicsView {
|
|||||||
void setSelectionMode();
|
void setSelectionMode();
|
||||||
void zoomIn();
|
void zoomIn();
|
||||||
void zoomOut();
|
void zoomOut();
|
||||||
|
void zoomInSlowly();
|
||||||
|
void zoomOutSlowly();
|
||||||
void zoomFit();
|
void zoomFit();
|
||||||
void zoomReset();
|
void zoomReset();
|
||||||
void adjustSceneRect();
|
void adjustSceneRect();
|
||||||
@@ -86,6 +90,7 @@ class ElementView : public QGraphicsView {
|
|||||||
QPointF start_top_left_corner_;
|
QPointF start_top_left_corner_;
|
||||||
QPointF reference_view_;
|
QPointF reference_view_;
|
||||||
QPointF center_view_;
|
QPointF center_view_;
|
||||||
|
bool gestures() const;
|
||||||
bool is_moving_view_; ///< Indicate whether the visualisation mode has been enabled due to mouse/keyboard interactions
|
bool is_moving_view_; ///< Indicate whether the visualisation mode has been enabled due to mouse/keyboard interactions
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user