/** * Called when the release event happened on an empty space. * Cleans the message. * Empty spaces are not only actual empty spaces, but also associations. */ void ToolBarStateMessages::mouseReleaseEmpty() { Uml::Sequence_Message_Type msgType = getMessageType(); if (m_firstObject && msgType == Uml::sequence_message_lost) { xclick = m_pMouseEvent->scenePos().x(); yclick = m_pMouseEvent->scenePos().y(); MessageWidget* message = new MessageWidget(m_firstObject, QPointF(xclick, yclick), msgType); setupMessageWidget(message); cleanMessage(); xclick = 0; yclick = 0; } else if (!m_firstObject && msgType == Uml::sequence_message_found && xclick == 0 && yclick == 0) { xclick = m_pMouseEvent->scenePos().x(); yclick = m_pMouseEvent->scenePos().y(); m_messageLine = new UMLSceneLineItem(); m_pUMLScene->addItem(m_messageLine); qreal x = m_pMouseEvent->scenePos().x(), y = m_pMouseEvent->scenePos().y(); m_messageLine->setLine(x, y, x, y); m_messageLine->setPen(QPen(m_pUMLScene->lineColor(), m_pUMLScene->lineWidth(), Qt::DashLine)); m_messageLine->setVisible(true); } else { cleanMessage(); } }
/** * Sets the second object of the message using the specified widget and * creates the message. * The association is created and added to the view. The dialog to select * the operation of the message is shown. * * @param secondObject The second object of the message. * @param messageType The type of the message to create. */ void ToolBarStateMessages::setSecondWidget(ObjectWidget* secondObject, MessageType messageType) { Uml::Sequence_Message_Type msgType = getMessageType(); //There shouldn't be second widget for a lost or a found message if (msgType == Uml::sequence_message_lost || msgType == Uml::sequence_message_found) { cleanMessage(); xclick = 0; yclick = 0; return; } //TODO shouldn't start position in the first widget be used also for normal messages //and not only for creation? qreal y = m_pMouseEvent->scenePos().y(); if (messageType == CreationMessage) { msgType = Uml::sequence_message_creation; y = m_messageLine->line().p1().y(); } MessageWidget* message = new MessageWidget(m_firstObject, secondObject, msgType); message->setPos(message->pos().x(), y); setupMessageWidget(message); cleanMessage(); }
/** * Called when the release event happened on an empty space. * Cleans the message. * Empty spaces are not only actual empty spaces, but also associations. */ void ToolBarStateMessages::mouseReleaseEmpty() { Uml::SequenceMessage::Enum msgType = getMessageType(); if (m_firstObject && msgType == Uml::SequenceMessage::Lost) { xclick = m_pMouseEvent->scenePos().x(); yclick = m_pMouseEvent->scenePos().y(); MessageWidget* message = new MessageWidget(m_pUMLScene, m_firstObject, xclick, yclick, msgType); setupMessageWidget(message); cleanMessage(); xclick = 0; yclick = 0; } else if (!m_firstObject && msgType == Uml::SequenceMessage::Found && xclick == 0 && yclick == 0) { xclick = m_pMouseEvent->scenePos().x(); yclick = m_pMouseEvent->scenePos().y(); m_messageLine = new QGraphicsLineItem(); m_pUMLScene->addItem(m_messageLine); qreal x = m_pMouseEvent->scenePos().x(); qreal y = m_pMouseEvent->scenePos().y(); m_messageLine->setLine(x, y, x, y); m_messageLine->setPen(QPen(m_pUMLScene->lineColor(), m_pUMLScene->lineWidth(), Qt::DashLine)); m_messageLine->setVisible(true); m_pUMLScene->activeView()->viewport()->setMouseTracking(true); } else { cleanMessage(); } }