mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-17 20:50:34 +01:00
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:
@@ -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;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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);});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user