diff --git a/sources/diagramview.cpp b/sources/diagramview.cpp index 6d752289d..728dc25e8 100644 --- a/sources/diagramview.cpp +++ b/sources/diagramview.cpp @@ -609,6 +609,15 @@ void DiagramView::focusInEvent(QFocusEvent *e) { mode if needed. */ void DiagramView::keyPressEvent(QKeyEvent *e) { + if (m_event_interface) { + if (m_event_interface -> keyPressEvent(e)) { + if (m_event_interface->isFinish()) { + emit (itemAdded()); + delete m_event_interface; m_event_interface = nullptr; + } + return; + } + } switchToVisualisationModeIfNeeded(e); QGraphicsView::keyPressEvent(e); } @@ -618,6 +627,15 @@ void DiagramView::keyPressEvent(QKeyEvent *e) { mode if needed. */ void DiagramView::keyReleaseEvent(QKeyEvent *e) { + if (m_event_interface) { + if (m_event_interface -> KeyReleaseEvent(e)) { + if (m_event_interface->isFinish()) { + emit (itemAdded()); + delete m_event_interface; m_event_interface = nullptr; + } + return; + } + } switchToSelectionModeIfNeeded(e); QGraphicsView::keyReleaseEvent(e); } diff --git a/sources/dvevent/dveventaddimage.cpp b/sources/dvevent/dveventaddimage.cpp index 097b1b447..ce851d346 100644 --- a/sources/dvevent/dveventaddimage.cpp +++ b/sources/dvevent/dveventaddimage.cpp @@ -39,7 +39,7 @@ DVEventAddImage::DVEventAddImage(DiagramView *dv) : * @brief DVEventAddImage::~DVEventAddImage */ DVEventAddImage::~DVEventAddImage() { - if (m_running) { + if (m_running || m_abort) { if (m_is_added) m_diagram -> removeItem(m_image); delete m_image; } diff --git a/sources/dvevent/dveventaddshape.cpp b/sources/dvevent/dveventaddshape.cpp index 84d9d9ff2..665d25e86 100644 --- a/sources/dvevent/dveventaddshape.cpp +++ b/sources/dvevent/dveventaddshape.cpp @@ -40,7 +40,7 @@ DVEventAddShape::DVEventAddShape(DiagramView *dv, QetShapeItem::ShapeType shape_ * @brief DVEventAddShape::~DVEventAddShape */ DVEventAddShape::~DVEventAddShape() { - if (m_running) { + if (m_running || m_abort) { m_diagram -> removeItem(m_shape_item); delete m_shape_item; } diff --git a/sources/dvevent/dveventinterface.cpp b/sources/dvevent/dveventinterface.cpp index 446b89d45..e97ae3642 100644 --- a/sources/dvevent/dveventinterface.cpp +++ b/sources/dvevent/dveventinterface.cpp @@ -22,7 +22,8 @@ DVEventInterface::DVEventInterface(DiagramView *dv) : m_dv(dv), m_diagram(dv->diagram()), - m_running(false) + m_running(false), + m_abort(false) { } @@ -53,6 +54,26 @@ bool DVEventInterface::wheelEvent(QWheelEvent *event) { return false; } +/** + * @brief DVEventInterface::keyPressEvent + * By default, press escape key abort the curent action + * @param event + * @return + */ +bool DVEventInterface::keyPressEvent(QKeyEvent *event) { + if (event->key() == Qt::Key_Escape) { + m_running = false; + m_abort = true; + return true; + } + return false; +} + +bool DVEventInterface::KeyReleaseEvent(QKeyEvent *event) { + Q_UNUSED (event); + return false; +} + bool DVEventInterface::isRunning() const { return m_running; } diff --git a/sources/dvevent/dveventinterface.h b/sources/dvevent/dveventinterface.h index 58113b0e8..ce00c4e86 100644 --- a/sources/dvevent/dveventinterface.h +++ b/sources/dvevent/dveventinterface.h @@ -20,6 +20,7 @@ class QMouseEvent; class QWheelEvent; +class QKeyEvent; class DiagramView; class Diagram; @@ -42,6 +43,8 @@ class DVEventInterface virtual bool mouseMoveEvent (QMouseEvent *event); virtual bool mouseReleaseEvent (QMouseEvent *event); virtual bool wheelEvent (QWheelEvent *event); + virtual bool keyPressEvent (QKeyEvent *event); + virtual bool KeyReleaseEvent (QKeyEvent *event); virtual bool isRunning () const; virtual bool isFinish () const; @@ -49,6 +52,7 @@ class DVEventInterface DiagramView *m_dv; Diagram *m_diagram; bool m_running; + bool m_abort; }; #endif // DVEVENTINTERFACE_H