Minor refactoring of diagram event interface

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@5706 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2019-01-14 18:25:43 +00:00
parent 3ed7a4e63b
commit dba6a58390
12 changed files with 157 additions and 177 deletions

View File

@@ -182,15 +182,14 @@ void Diagram::drawBackground(QPainter *p, const QRectF &r) {
*/ */
void Diagram::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) void Diagram::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{ {
if (m_event_interface) event->setAccepted(false);
if(m_event_interface->mouseDoubleClickEvent(event))
{ if (m_event_interface) {
if(!m_event_interface->isRunning()) m_event_interface->mouseDoubleClickEvent(event);
{ if (event->isAccepted()) {
delete m_event_interface; m_event_interface = nullptr;
}
return; return;
} }
}
QGraphicsScene::mouseDoubleClickEvent(event); QGraphicsScene::mouseDoubleClickEvent(event);
} }
@@ -202,15 +201,14 @@ void Diagram::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
*/ */
void Diagram::mousePressEvent(QGraphicsSceneMouseEvent *event) void Diagram::mousePressEvent(QGraphicsSceneMouseEvent *event)
{ {
if (m_event_interface) event->setAccepted(false);
if(m_event_interface->mousePressEvent(event))
{ if (m_event_interface) {
if(!m_event_interface->isRunning()) m_event_interface->mousePressEvent(event);
{ if (event->isAccepted()) {
delete m_event_interface; m_event_interface = nullptr;
}
return; return;
} }
}
QGraphicsScene::mousePressEvent(event); QGraphicsScene::mousePressEvent(event);
} }
@@ -222,15 +220,14 @@ void Diagram::mousePressEvent(QGraphicsSceneMouseEvent *event)
*/ */
void Diagram::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void Diagram::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{ {
if (m_event_interface) event->setAccepted(false);
if(m_event_interface->mouseMoveEvent(event))
{ if (m_event_interface) {
if(!m_event_interface->isRunning()) m_event_interface->mouseMoveEvent(event);
{ if (event->isAccepted()) {
delete m_event_interface; m_event_interface = nullptr;
}
return; return;
} }
}
QGraphicsScene::mouseMoveEvent(event); QGraphicsScene::mouseMoveEvent(event);
} }
@@ -242,15 +239,14 @@ void Diagram::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
*/ */
void Diagram::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) void Diagram::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{ {
if (m_event_interface) event->setAccepted(false);
if(m_event_interface->mouseReleaseEvent(event))
{ if (m_event_interface) {
if(!m_event_interface->isRunning()) m_event_interface->mouseReleaseEvent(event);
{ if (event->isAccepted()) {
delete m_event_interface; m_event_interface = nullptr;
}
return; return;
} }
}
QGraphicsScene::mouseReleaseEvent(event); QGraphicsScene::mouseReleaseEvent(event);
} }
@@ -262,15 +258,14 @@ void Diagram::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
*/ */
void Diagram::wheelEvent(QGraphicsSceneWheelEvent *event) void Diagram::wheelEvent(QGraphicsSceneWheelEvent *event)
{ {
if (m_event_interface) event->setAccepted(false);
if(m_event_interface->wheelEvent(event))
{ if (m_event_interface) {
if(!m_event_interface->isRunning()) m_event_interface->wheelEvent(event);
{ if (event->isAccepted()) {
delete m_event_interface; m_event_interface = nullptr;
}
return; return;
} }
}
QGraphicsScene::wheelEvent(event); QGraphicsScene::wheelEvent(event);
} }
@@ -283,15 +278,14 @@ void Diagram::wheelEvent(QGraphicsSceneWheelEvent *event)
*/ */
void Diagram::keyPressEvent(QKeyEvent *event) void Diagram::keyPressEvent(QKeyEvent *event)
{ {
if (m_event_interface) event->setAccepted(false);
if(m_event_interface->keyPressEvent(event))
{ if (m_event_interface) {
if(!m_event_interface->isRunning()) m_event_interface->keyPressEvent(event);
{ if (event->isAccepted()) {
delete m_event_interface; m_event_interface = nullptr;
}
return; return;
} }
}
if (!isReadOnly()) if (!isReadOnly())
{ {
@@ -373,15 +367,14 @@ void Diagram::keyPressEvent(QKeyEvent *event)
*/ */
void Diagram::keyReleaseEvent(QKeyEvent *e) void Diagram::keyReleaseEvent(QKeyEvent *e)
{ {
if (m_event_interface) e->setAccepted(false);
if(m_event_interface->keyReleaseEvent(e))
{ if (m_event_interface) {
if(!m_event_interface->isRunning()) m_event_interface->keyReleaseEvent(e);
{ if (e->isAccepted()) {
delete m_event_interface; m_event_interface = nullptr;
}
return; return;
} }
}
bool transmit_event = true; bool transmit_event = true;
if (!isReadOnly()) { if (!isReadOnly()) {
@@ -417,6 +410,12 @@ void Diagram::setEventInterface(DiagramEventInterface *event_interface)
event_interface -> init(); event_interface -> init();
} }
m_event_interface = event_interface; m_event_interface = event_interface;
connect(m_event_interface, &DiagramEventInterface::finish, [this]()
{
delete this->m_event_interface;
this->m_event_interface = nullptr;
});
} }
/** /**

View File

@@ -67,37 +67,35 @@ DiagramEventAddElement::~DiagramEventAddElement()
/** /**
* @brief DiagramEventAddElement::mouseMoveEvent * @brief DiagramEventAddElement::mouseMoveEvent
* Move the element to new pos of mouse * Move the element to new pos of mouse
* the event is always accepted
* @param event * @param event
* @return always true
*/ */
bool DiagramEventAddElement::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void DiagramEventAddElement::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{ {
if (m_element) if (m_element) {
m_element->setPos(Diagram::snapToGrid(event->scenePos())); m_element->setPos(Diagram::snapToGrid(event->scenePos()));
}
return true; event->setAccepted(true);
} }
/** /**
* @brief DiagramEventAddElement::mousePressEvent * @brief DiagramEventAddElement::mousePressEvent
* Do nothing, but return true for not transit the event to other thing in diagram. * Do nothing, but return true for not transit the event to other thing in diagram.
* the event is always accepted
* @param event * @param event
* @return always true
*/ */
bool DiagramEventAddElement::mousePressEvent(QGraphicsSceneMouseEvent *event) void DiagramEventAddElement::mousePressEvent(QGraphicsSceneMouseEvent *event) {
{ event->setAccepted(true);
Q_UNUSED(event);
return true;
} }
/** /**
* @brief DiagramEventAddElement::mouseReleaseEvent * @brief DiagramEventAddElement::mouseReleaseEvent
* Right button finish this event (isRunning = false) and emit finish. * Right button finish this event (isRunning = false) and emit finish.
* Left button add an element to diagram * Left button add an element to diagram
* the event is always accepted
* @param event * @param event
* @return always true
*/ */
bool DiagramEventAddElement::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) void DiagramEventAddElement::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{ {
if (m_element) if (m_element)
{ {
@@ -114,16 +112,16 @@ bool DiagramEventAddElement::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
} }
} }
return true; event->setAccepted(true);
} }
/** /**
* @brief DiagramEventAddElement::mouseDoubleClickEvent * @brief DiagramEventAddElement::mouseDoubleClickEvent
* If mouse left double clic, finish this event (isRunning = false) and emit finish * If mouse left double clic, finish this event (isRunning = false) and emit finish
* the event is always accepted
* @param event * @param event
* @return always true
*/ */
bool DiagramEventAddElement::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) void DiagramEventAddElement::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{ {
if (m_element && (event -> button() == Qt::LeftButton)) if (m_element && (event -> button() == Qt::LeftButton))
{ {
@@ -133,7 +131,7 @@ bool DiagramEventAddElement::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *eve
emit finish(); emit finish();
} }
return true; event->setAccepted(true);
} }
/** /**
@@ -141,17 +139,17 @@ bool DiagramEventAddElement::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *eve
* Press space key rotate the element to 90° (return true) * Press space key rotate the element to 90° (return true)
* else call DiagramEventInterface::keyPressEvent(event), and return the value. * else call DiagramEventInterface::keyPressEvent(event), and return the value.
* @param event * @param event
* @return
*/ */
bool DiagramEventAddElement::keyPressEvent(QKeyEvent *event) void DiagramEventAddElement::keyPressEvent(QKeyEvent *event)
{ {
if (m_element && event->key() == Qt::Key_Space) if (m_element && event->key() == Qt::Key_Space)
{ {
m_element->setRotation(m_element->rotation() + 90); m_element->setRotation(m_element->rotation() + 90);
return true; event->setAccepted(true);
}
else {
DiagramEventInterface::keyPressEvent(event);
} }
return DiagramEventInterface::keyPressEvent(event);
} }
/** /**

View File

@@ -36,11 +36,11 @@ class DiagramEventAddElement : public DiagramEventInterface
DiagramEventAddElement(ElementsLocation &location, Diagram *diagram, QPointF pos = QPointF(0,0)); DiagramEventAddElement(ElementsLocation &location, Diagram *diagram, QPointF pos = QPointF(0,0));
~DiagramEventAddElement() override; ~DiagramEventAddElement() override;
bool mouseMoveEvent (QGraphicsSceneMouseEvent *event) override; void mouseMoveEvent (QGraphicsSceneMouseEvent *event) override;
bool mousePressEvent (QGraphicsSceneMouseEvent *event) override; void mousePressEvent (QGraphicsSceneMouseEvent *event) override;
bool mouseReleaseEvent (QGraphicsSceneMouseEvent *event) override; void mouseReleaseEvent (QGraphicsSceneMouseEvent *event) override;
bool mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event) override; void mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event) override;
bool keyPressEvent (QKeyEvent *event) override; void keyPressEvent (QKeyEvent *event) override;
void init() override; void init() override;
private: private:

View File

@@ -53,9 +53,8 @@ DiagramEventAddImage::~DiagramEventAddImage()
* @brief DiagramEventAddImage::mousePressEvent * @brief DiagramEventAddImage::mousePressEvent
* Action when mouse is pressed * Action when mouse is pressed
* @param event : event of mouse pressed * @param event : event of mouse pressed
* @return : true if this event is handled, otherwise false
*/ */
bool DiagramEventAddImage::mousePressEvent(QGraphicsSceneMouseEvent *event) void DiagramEventAddImage::mousePressEvent(QGraphicsSceneMouseEvent *event)
{ {
if (m_image && event -> button() == Qt::LeftButton) if (m_image && event -> button() == Qt::LeftButton)
{ {
@@ -64,46 +63,46 @@ bool DiagramEventAddImage::mousePressEvent(QGraphicsSceneMouseEvent *event)
pos.ry() -= m_image->boundingRect().height()/2; pos.ry() -= m_image->boundingRect().height()/2;
m_diagram -> undoStack().push (new AddItemCommand<DiagramImageItem *>(m_image, m_diagram, pos)); m_diagram -> undoStack().push (new AddItemCommand<DiagramImageItem *>(m_image, m_diagram, pos));
foreach (QGraphicsView *view, m_diagram->views()) for (QGraphicsView *view : m_diagram->views()) {
view->setContextMenuPolicy((Qt::DefaultContextMenu)); view->setContextMenuPolicy((Qt::DefaultContextMenu));
}
m_running = false; m_running = false;
emit finish(); emit finish();
return true; event->setAccepted(true);
} }
else if (m_image && event -> button() == Qt::RightButton)
if (m_image && event -> button() == Qt::RightButton)
{ {
m_image->setRotation(m_image->rotation() + 90); m_image->setRotation(m_image->rotation() + 90);
return true; event->setAccepted(true);
} }
return false;
} }
/** /**
* @brief DiagramEventAddImage::mouseMoveEvent * @brief DiagramEventAddImage::mouseMoveEvent
* Action when mouse move * Action when mouse move
* @param event : event of mouse move * @param event : event of mouse move
* @return : true if this event is handled, otherwise false
*/ */
bool DiagramEventAddImage::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void DiagramEventAddImage::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{ {
if (!m_image || event -> buttons() != Qt::NoButton) return false; if (!m_image || event->buttons() != Qt::NoButton) {
return;
};
QPointF pos = event->scenePos(); QPointF pos = event->scenePos();
if (!m_is_added) if (!m_is_added)
{ {
foreach (QGraphicsView *view, m_diagram->views()) for (QGraphicsView *view : m_diagram->views()) {
view->setContextMenuPolicy((Qt::NoContextMenu)); view->setContextMenuPolicy((Qt::NoContextMenu));
}
m_diagram->addItem(m_image); m_diagram->addItem(m_image);
m_is_added = true; m_is_added = true;
} }
m_image->setPos(pos - m_image->boundingRect().center()); m_image->setPos(pos - m_image->boundingRect().center());
return true; event->setAccepted(true);
} }
/** /**
@@ -111,30 +110,29 @@ bool DiagramEventAddImage::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
* This method is only use to overwrite double click. * This method is only use to overwrite double click.
* When double click, image propertie dialog isn't open. * When double click, image propertie dialog isn't open.
* @param event : event of mouse double click. * @param event : event of mouse double click.
* @return : true if this event is handled, otherwise false
*/ */
bool DiagramEventAddImage::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) void DiagramEventAddImage::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) {
{ event->setAccepted(true);
Q_UNUSED(event);
return true;
} }
/** /**
* @brief DiagramEventAddImage::wheelEvent * @brief DiagramEventAddImage::wheelEvent
* Action when mouse wheel is rotate * Action when mouse wheel is rotate
* @param event: evet of mouse wheel * @param event: evet of mouse wheel
* @return : true if this event is handled, otherwise false
*/ */
bool DiagramEventAddImage::wheelEvent(QGraphicsSceneWheelEvent *event) void DiagramEventAddImage::wheelEvent(QGraphicsSceneWheelEvent *event)
{ {
if (!m_is_added || !m_image || event -> modifiers() != Qt::CTRL) return false; if (!m_is_added || !m_image || event -> modifiers() != Qt::CTRL) {
return;
}
qreal scaling = m_image->scale(); qreal scaling = m_image->scale();
event->delta() > 1? scaling += 0.01 : scaling -= 0.01; event->delta() > 1? scaling += 0.01 : scaling -= 0.01;
if (scaling>0.01 && scaling <= 2) if (scaling>0.01 && scaling <= 2) {
m_image->setScale(scaling); m_image->setScale(scaling);
}
return true; event->setAccepted(true);
} }
/** /**

View File

@@ -35,10 +35,10 @@ class DiagramEventAddImage : public DiagramEventInterface
DiagramEventAddImage(Diagram *diagram); DiagramEventAddImage(Diagram *diagram);
~DiagramEventAddImage() override; ~DiagramEventAddImage() override;
bool mousePressEvent (QGraphicsSceneMouseEvent *event) override; void mousePressEvent (QGraphicsSceneMouseEvent *event) override;
bool mouseMoveEvent (QGraphicsSceneMouseEvent *event) override; void mouseMoveEvent (QGraphicsSceneMouseEvent *event) override;
bool mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event) override; void mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event) override;
bool wheelEvent (QGraphicsSceneWheelEvent *event) override; void wheelEvent (QGraphicsSceneWheelEvent *event) override;
bool isNull () const; bool isNull () const;
private: private:

View File

@@ -57,15 +57,17 @@ DiagramEventAddShape::~DiagramEventAddShape()
* @brief DiagramEventAddShape::mousePressEvent * @brief DiagramEventAddShape::mousePressEvent
* Action when mouse is pressed * Action when mouse is pressed
* @param event : event of mouse press * @param event : event of mouse press
* @return : true if this event is managed, otherwise false
*/ */
bool DiagramEventAddShape::mousePressEvent(QGraphicsSceneMouseEvent *event) void DiagramEventAddShape::mousePressEvent(QGraphicsSceneMouseEvent *event)
{ {
if (Q_UNLIKELY(m_diagram->isReadOnly())) return false; if (Q_UNLIKELY(m_diagram->isReadOnly())) {
return;
}
QPointF pos = event->scenePos(); QPointF pos = event->scenePos();
if (event->modifiers() != Qt::ControlModifier) if (event->modifiers() != Qt::ControlModifier) {
pos = Diagram::snapToGrid(pos); pos = Diagram::snapToGrid(pos);
}
//Action for left mouse click //Action for left mouse click
if (event->button() == Qt::LeftButton) if (event->button() == Qt::LeftButton)
@@ -75,7 +77,8 @@ bool DiagramEventAddShape::mousePressEvent(QGraphicsSceneMouseEvent *event)
{ {
m_shape_item = new QetShapeItem(pos, pos, m_shape_type); m_shape_item = new QetShapeItem(pos, pos, m_shape_type);
m_diagram->addItem (m_shape_item); m_diagram->addItem (m_shape_item);
return true; event->setAccepted(true);
return;
} }
//If current item isn't a polyline, add it with an undo command //If current item isn't a polyline, add it with an undo command
@@ -94,46 +97,42 @@ bool DiagramEventAddShape::mousePressEvent(QGraphicsSceneMouseEvent *event)
m_shape_item->setNextPoint (pos); m_shape_item->setNextPoint (pos);
} }
return true; event->setAccepted(true);
return;
} }
if (event->button() == Qt::RightButton) if (event->button() == Qt::RightButton) {
return true; event->setAccepted(true);
}
return false;
} }
/** /**
* @brief DiagramEventAddShape::mouseMoveEvent * @brief DiagramEventAddShape::mouseMoveEvent
* Action when mouse move * Action when mouse move
* @param event : event of mouse move * @param event : event of mouse move
* @return : true if this event is managed, otherwise false
*/ */
bool DiagramEventAddShape::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void DiagramEventAddShape::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{ {
updateHelpCross(event->scenePos()); updateHelpCross(event->scenePos());
if (m_shape_item && event->buttons() == Qt::NoButton) if (m_shape_item && event->buttons() == Qt::NoButton)
{ {
QPointF pos = event->scenePos(); QPointF pos = event->scenePos();
if (event->modifiers() != Qt::ControlModifier) if (event->modifiers() != Qt::ControlModifier) {
pos = Diagram::snapToGrid(pos); pos = Diagram::snapToGrid(pos);
m_shape_item->setP2 (pos);
return true;
} }
return false; m_shape_item->setP2 (pos);
event->setAccepted(true);
}
} }
/** /**
* @brief DiagramEventAddShape::mouseReleaseEvent * @brief DiagramEventAddShape::mouseReleaseEvent
* Action when mouse button is released * Action when mouse button is released
* @param event : event of mouse release * @param event : event of mouse release
* @return : true if this event is managed, otherwise false
*/ */
bool DiagramEventAddShape::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) void DiagramEventAddShape::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{ {
if (event->button() == Qt::RightButton) if (event->button() == Qt::RightButton)
{ {
@@ -150,33 +149,32 @@ bool DiagramEventAddShape::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
pos = Diagram::snapToGrid(pos); pos = Diagram::snapToGrid(pos);
m_shape_item->setP2(pos); //Set the new last point under the cursor m_shape_item->setP2(pos); //Set the new last point under the cursor
return true; event->setAccepted(true);
return;
} }
//For other case, we remove item from scene //For other case, we remove item from scene
m_diagram->removeItem(m_shape_item); m_diagram->removeItem(m_shape_item);
delete m_shape_item; delete m_shape_item;
m_shape_item = nullptr; m_shape_item = nullptr;
return true; event->setAccepted(true);
return;
} }
//Else (no shape), we set to false the running status //Else (no shape), we set to false the running status
//for indicate to the owner of this event that everything is done //for indicate to the owner of this event that everything is done
m_running = false; m_running = false;
emit finish(); emit finish();
return true; event->setAccepted(true);
} }
return false;
} }
/** /**
* @brief DiagramEventAddShape::mouseDoubleClickEvent * @brief DiagramEventAddShape::mouseDoubleClickEvent
* Action when mouse button is double clicked * Action when mouse button is double clicked
* @param event : event of mouse double click * @param event : event of mouse double click
* @return : true if this event is managed, otherwise false
*/ */
bool DiagramEventAddShape::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) void DiagramEventAddShape::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{ {
//If current item is a polyline, add it with an undo command //If current item is a polyline, add it with an undo command
if (m_shape_item && m_shape_type == QetShapeItem::Polygon && event->button() == Qt::LeftButton) if (m_shape_item && m_shape_type == QetShapeItem::Polygon && event->button() == Qt::LeftButton)
@@ -186,10 +184,8 @@ bool DiagramEventAddShape::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event
m_shape_item->removePoints(); m_shape_item->removePoints();
m_diagram->undoStack().push (new AddItemCommand<QetShapeItem *> (m_shape_item, m_diagram)); m_diagram->undoStack().push (new AddItemCommand<QetShapeItem *> (m_shape_item, m_diagram));
m_shape_item = nullptr; //< set to nullptr for create new shape at next left clic m_shape_item = nullptr; //< set to nullptr for create new shape at next left clic
return true; event->setAccepted(true);
} }
return false;
} }
void DiagramEventAddShape::init() void DiagramEventAddShape::init()

View File

@@ -33,10 +33,10 @@ class DiagramEventAddShape : public DiagramEventInterface
DiagramEventAddShape(Diagram *diagram, QetShapeItem::ShapeType shape_type); DiagramEventAddShape(Diagram *diagram, QetShapeItem::ShapeType shape_type);
~DiagramEventAddShape() override; ~DiagramEventAddShape() override;
bool mousePressEvent (QGraphicsSceneMouseEvent *event) override; void mousePressEvent (QGraphicsSceneMouseEvent *event) override;
bool mouseMoveEvent (QGraphicsSceneMouseEvent *event) override; void mouseMoveEvent (QGraphicsSceneMouseEvent *event) override;
bool mouseReleaseEvent (QGraphicsSceneMouseEvent *event) override; void mouseReleaseEvent (QGraphicsSceneMouseEvent *event) override;
bool mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event) override; void mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event) override;
void init() override; void init() override;
private: private:

View File

@@ -39,9 +39,8 @@ DiagramEventAddText::~DiagramEventAddText()
/** /**
* @brief DiagramEventAddText::mousePressEvent * @brief DiagramEventAddText::mousePressEvent
* @param event : event of mouse press event. * @param event : event of mouse press event.
* @return : true if this event is handled, otherwise false
*/ */
bool DiagramEventAddText::mousePressEvent(QGraphicsSceneMouseEvent *event) void DiagramEventAddText::mousePressEvent(QGraphicsSceneMouseEvent *event)
{ {
if (event->button() == Qt::LeftButton) if (event->button() == Qt::LeftButton)
{ {
@@ -50,7 +49,6 @@ bool DiagramEventAddText::mousePressEvent(QGraphicsSceneMouseEvent *event)
text->setTextInteractionFlags(Qt::TextEditorInteraction); text->setTextInteractionFlags(Qt::TextEditorInteraction);
text->setFocus(Qt::MouseFocusReason); text->setFocus(Qt::MouseFocusReason);
emit finish(); emit finish();
return true; event->setAccepted(true);
} }
return false;
} }

View File

@@ -34,7 +34,7 @@ class DiagramEventAddText : public DiagramEventInterface
DiagramEventAddText(Diagram *diagram); DiagramEventAddText(Diagram *diagram);
~DiagramEventAddText() override; ~DiagramEventAddText() override;
bool mousePressEvent (QGraphicsSceneMouseEvent *event) override; void mousePressEvent (QGraphicsSceneMouseEvent *event) override;
}; };
#endif // DIAGRAMEVENTADDTEXT_H #endif // DIAGRAMEVENTADDTEXT_H

View File

@@ -31,50 +31,44 @@ DiagramEventInterface::DiagramEventInterface(Diagram *diagram) :
DiagramEventInterface::~DiagramEventInterface() {}; DiagramEventInterface::~DiagramEventInterface() {};
bool DiagramEventInterface::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) { void DiagramEventInterface::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) {
Q_UNUSED (event); Q_UNUSED (event);
return false;
} }
bool DiagramEventInterface::mousePressEvent(QGraphicsSceneMouseEvent *event) { void DiagramEventInterface::mousePressEvent(QGraphicsSceneMouseEvent *event) {
Q_UNUSED (event); Q_UNUSED (event);
return false;
} }
bool DiagramEventInterface::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { void DiagramEventInterface::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
Q_UNUSED (event); Q_UNUSED (event);
return false;
} }
bool DiagramEventInterface::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { void DiagramEventInterface::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
Q_UNUSED (event); Q_UNUSED (event);
return false;
} }
bool DiagramEventInterface::wheelEvent(QGraphicsSceneWheelEvent *event) { void DiagramEventInterface::wheelEvent(QGraphicsSceneWheelEvent *event) {
Q_UNUSED (event); Q_UNUSED (event);
return false;
} }
/** /**
* @brief DiagramEventInterface::keyPressEvent * @brief DiagramEventInterface::keyPressEvent
* By default, press escape key abort the curent action * By default, press escape key abort the curent action
* @param event * @param event
* @return
*/ */
bool DiagramEventInterface::keyPressEvent(QKeyEvent *event) { void DiagramEventInterface::keyPressEvent(QKeyEvent *event)
if (event->key() == Qt::Key_Escape) { {
if (event->key() == Qt::Key_Escape)
{
m_running = false; m_running = false;
m_abort = true; m_abort = true;
emit finish(); emit finish();
return true; event->setAccepted(true);
} }
return false;
} }
bool DiagramEventInterface::keyReleaseEvent(QKeyEvent *event) { void DiagramEventInterface::keyReleaseEvent(QKeyEvent *event){
Q_UNUSED (event); Q_UNUSED (event);
return false;
} }
bool DiagramEventInterface::isRunning() const { bool DiagramEventInterface::isRunning() const {

View File

@@ -27,19 +27,16 @@ class Diagram;
/** /**
* @brief The DiagramEventInterface class * @brief The DiagramEventInterface class
* Each method return a bool: True if the methode do something else return false.
* Each method of DVEventInterface return false;
* isRunning() return true if action is running (do something). By default return false. * isRunning() return true if action is running (do something). By default return false.
* *
* ##USE DiagramEventInterface## * ##USE DiagramEventInterface##
* This class is the basic interface for manage event on a diagram. * This class is the basic interface for manage event on a diagram.
* To create a behavior for event diagram, we need to herite this class. * To create a behavior for event diagram, we need to herite this class.
* This interface work like this : * This interface work like this :
* You need to create an interface and call diagram::setEventInterface(*your_interface). * You need to create an interface and call diagram::setEventInterface(pointer_of_your_interface).
* When a diagram get an event (mouse or key) if they have an event interface, * When a diagram get an event (mouse or key) if they have an event interface,
* they send the event to the interface (for exemple mousePressEvent). * they send the event (with the status accepted to false) to the interface (for exemple mousePressEvent).
* If the interface do something with this event, you need to return true to signal the diagram you work with this event. * If the interface do something with this event, you need to set to true the accepted status of the event, then diagram do nothing.
* (if you do nothing by defaut the interface return false, so diagram do nothing)
* When the interface job is done, we need to emit the signal finish(), the diagram use this signal to delete the interface. * When the interface job is done, we need to emit the signal finish(), the diagram use this signal to delete the interface.
* Be carreful with the destructor, diagram can at any time (even if interface is still running) delete the interface, * Be carreful with the destructor, diagram can at any time (even if interface is still running) delete the interface,
* the bool m_abort is here for that at destruction time. * the bool m_abort is here for that at destruction time.
@@ -52,13 +49,13 @@ class DiagramEventInterface : public QObject
public: public:
DiagramEventInterface(Diagram *diagram); DiagramEventInterface(Diagram *diagram);
~DiagramEventInterface() override = 0; ~DiagramEventInterface() override = 0;
virtual bool mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event); virtual void mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event);
virtual bool mousePressEvent (QGraphicsSceneMouseEvent *event); virtual void mousePressEvent (QGraphicsSceneMouseEvent *event);
virtual bool mouseMoveEvent (QGraphicsSceneMouseEvent *event); virtual void mouseMoveEvent (QGraphicsSceneMouseEvent *event);
virtual bool mouseReleaseEvent (QGraphicsSceneMouseEvent *event); virtual void mouseReleaseEvent (QGraphicsSceneMouseEvent *event);
virtual bool wheelEvent (QGraphicsSceneWheelEvent *event); virtual void wheelEvent (QGraphicsSceneWheelEvent *event);
virtual bool keyPressEvent (QKeyEvent *event); virtual void keyPressEvent (QKeyEvent *event);
virtual bool keyReleaseEvent (QKeyEvent *event); virtual void keyReleaseEvent (QKeyEvent *event);
virtual bool isRunning () const; virtual bool isRunning () const;
virtual void init(); virtual void init();

View File

@@ -1319,7 +1319,7 @@ void QETDiagramEditor::addItemGroupTriggered(QAction *action)
if (diagram_event) if (diagram_event)
{ {
d->setEventInterface(diagram_event); d->setEventInterface(diagram_event);
connect(diagram_event, &DiagramEventInterface::finish, [action](){action->setChecked(false);}); connect(diagram_event, &DiagramEventInterface::destroyed, [action]() {action->setChecked(false);});
} }
} }