/** * Overrides the standard operation. */ void ObjectWidget::moveEvent(QGraphicsSceneMouseEvent *event) { Q_UNUSED(event) emit sigWidgetMoved(m_nLocalID); if (m_pLine) { m_pLine->setStartPoint(x() + width() / 2, y() + height()); } }
bool PreconditionWidget::activate(IDChangeLog * Log /*= 0*/) { m_scene->resetPastePoint(); UMLWidget::activate(Log); if (m_pOw == NULL) { uDebug() << "cannot make precondition"; return false; } connect(m_pOw, SIGNAL(sigWidgetMoved(Uml::IDType)), this, SLOT(slotWidgetMoved(Uml::IDType))); calculateDimensions(); return true; }
/** * Activates a PreconditionWidget. Connects the WidgetMoved signal from * its m_objectWidget pointer so that PreconditionWidget can adjust to the move of * the object widget. */ bool PreconditionWidget::activate(IDChangeLog * Log /*= 0*/) { m_scene->resetPastePoint(); UMLWidget::activate(Log); loadObjectWidget(); if (!m_objectWidget) { DEBUG(DBG_SRC) << "role A widget " << Uml::ID::toString(m_widgetAId) << " could not be found"; return false; } connect(m_objectWidget, SIGNAL(sigWidgetMoved(Uml::ID::Type)), this, SLOT(slotWidgetMoved(Uml::ID::Type))); calculateDimensions(); return true; }
/** * Activates a MessageWidget. Connects its m_pOw[] pointers * to UMLObjects and also send signals about its FloatingTextWidget. */ bool MessageWidget::activate(IDChangeLog * /*Log = 0*/) { m_scene->resetPastePoint(); // UMLWidget::activate(Log); CHECK: I don't think we need this ? if (m_pOw[Uml::RoleType::A] == NULL) { UMLWidget *pWA = m_scene->findWidget(m_widgetAId); if (pWA == NULL) { DEBUG(DBG_SRC) << "role A object " << Uml::ID::toString(m_widgetAId) << " not found"; return false; } m_pOw[Uml::RoleType::A] = dynamic_cast<ObjectWidget*>(pWA); if (m_pOw[Uml::RoleType::A] == NULL) { DEBUG(DBG_SRC) << "role A widget " << Uml::ID::toString(m_widgetAId) << " is not an ObjectWidget"; return false; } } if (m_pOw[Uml::RoleType::B] == NULL) { UMLWidget *pWB = m_scene->findWidget(m_widgetBId); if (pWB == NULL) { DEBUG(DBG_SRC) << "role B object " << Uml::ID::toString(m_widgetBId) << " not found"; return false; } m_pOw[Uml::RoleType::B] = dynamic_cast<ObjectWidget*>(pWB); if (m_pOw[Uml::RoleType::B] == NULL) { DEBUG(DBG_SRC) << "role B widget " << Uml::ID::toString(m_widgetBId) << " is not an ObjectWidget"; return false; } } updateResizability(); UMLClassifier *c = dynamic_cast<UMLClassifier*>(m_pOw[Uml::RoleType::B]->umlObject()); UMLOperation *op = NULL; if (c && !m_CustomOp.isEmpty()) { Uml::ID::Type opId = Uml::ID::fromString(m_CustomOp); op = dynamic_cast<UMLOperation*>(c->findChildObjectById(opId, true)); if (op) { // If the UMLOperation is set, m_CustomOp isn't used anyway. // Just setting it empty for the sake of sanity. m_CustomOp.clear(); } } if(!m_pFText) { Uml::TextRole::Enum tr = Uml::TextRole::Seq_Message; if (isSelf()) tr = Uml::TextRole::Seq_Message_Self; m_pFText = new FloatingTextWidget(m_scene, tr, operationText(m_scene)); m_scene->addFloatingTextWidget(m_pFText); m_pFText->setFontCmd(UMLWidget::font()); } if (op) setOperation(op); // This requires a valid m_pFText. setLinkAndTextPos(); m_pFText->setText(QString()); m_pFText->setActivated(); QString messageText = m_pFText->text(); m_pFText->setVisible(messageText.length() > 1); connect(m_pOw[Uml::RoleType::A], SIGNAL(sigWidgetMoved(Uml::ID::Type)), this, SLOT(slotWidgetMoved(Uml::ID::Type))); connect(m_pOw[Uml::RoleType::B], SIGNAL(sigWidgetMoved(Uml::ID::Type)), this, SLOT(slotWidgetMoved(Uml::ID::Type))); connect(this, SIGNAL(sigMessageMoved()), m_pOw[Uml::RoleType::A], SLOT(slotMessageMoved())); connect(this, SIGNAL(sigMessageMoved()), m_pOw[Uml::RoleType::B], SLOT(slotMessageMoved())); m_pOw[Uml::RoleType::A]->messageAdded(this); if (!isSelf()) m_pOw[Uml::RoleType::B]->messageAdded(this); // Calculate the size and position of the message widget calculateDimensions(); // Position the floating text accordingly setTextPosition(); emit sigMessageMoved(); return true; }