| Summary: | sequence diagram crashs during message inserting | ||
|---|---|---|---|
| Product: | [Applications] umbrello | Reporter: | Egbert Voigt <Egbert.Voigt> |
| Component: | general | Assignee: | Oliver Kellogg <okellogg> |
| Status: | RESOLVED FIXED | ||
| Severity: | crash | ||
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | Compiled Sources | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
|
Description
Egbert Voigt
2007-04-16 11:02:11 UTC
Cannot confirm. Tried with an existing XMI file, and also tried with two new classes created ad-hoc. Perhaps you could attach the XMI file for which this happens to you. Ouch. Forget my previous comments, I do confirm.
#0 0x0816bbe1 in FloatingTextWidget::showOpDlg (this=0x0)
at /kdesdk-3.5-branch/umbrello/umbrello/floatingtextwidget.cpp:272
#1 0x081acc7b in ToolBarStateMessages::setSecondWidget (this=0x8744ea0,
secondObject=0x89def50, messageType=NormalMessage)
at /kdesdk-3.5-branch/umbrello/umbrello/toolbarstatemessages.cpp:147
#2 0x081aca01 in ToolBarStateMessages::mouseReleaseWidget (this=0x8744ea0)
at /kdesdk-3.5-branch/umbrello/umbrello/toolbarstatemessages.cpp:106
#3 0x081a9979 in ToolBarState::mouseRelease (this=0x8744ea0, ome=0xbfffe210)
at /kdesdk-3.5-branch/umbrello/umbrello/toolbarstate.cpp:84
#4 0x081e2de2 in UMLView::contentsMouseReleaseEvent (this=0x89ae888,
ome=0xbfffe210)
at /kdesdk-3.5-branch/umbrello/umbrello/umlview.cpp:381
#5 0x40f81168 in QScrollView::viewportMouseReleaseEvent ()
from /usr/lib/qt3/lib/libqt-mt.so.3
SVN commit 654857 by okellogg:
activate(): Attempt resolving m_widget{A,B}Id only if the m_pOw[] is NULL.
BUG:144293
M +1 -0 ChangeLog
M +26 -22 umbrello/messagewidget.cpp
--- branches/KDE/3.5/kdesdk/umbrello/ChangeLog #654856:654857
@@ -30,6 +30,7 @@
* Support duplication of diagrams (139856, 143581)
* Crash on changing multiplicity in an association in ERD (143909)
* Class diagram in folder not loaded correctly from xmi (144119)
+* Sequence diagram crashs during message inserting (144293)
Version 1.5.61
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/messagewidget.cpp #654856:654857
@@ -407,35 +407,39 @@
bool MessageWidget::activate(IDChangeLog * Log /*= 0*/) {
m_pView->resetPastePoint();
// UMLWidget::activate(Log); CHECK: I don't think we need this ?
- UMLWidget *pWA = m_pView->findWidget(m_widgetAId);
- if (pWA == NULL) {
- kDebug() << "MessageWidget::activate: role A object "
- << ID2STR(m_widgetAId) << " not found" << endl;
- return false;
- }
- UMLWidget *pWB = m_pView->findWidget(m_widgetBId);
- if (pWB == NULL) {
- kDebug() << "MessageWidget::activate: role B object "
- << ID2STR(m_widgetBId) << " not found" << endl;
- return false;
- }
- m_pOw[Uml::A] = dynamic_cast<ObjectWidget*>(pWA);
if (m_pOw[Uml::A] == NULL) {
- kDebug() << "MessageWidget::activate: role A widget "
- << ID2STR(m_widgetAId) << " is not an ObjectWidget" << endl;
- return false;
+ UMLWidget *pWA = m_pView->findWidget(m_widgetAId);
+ if (pWA == NULL) {
+ kDebug() << "MessageWidget::activate: role A object "
+ << ID2STR(m_widgetAId) << " not found" << endl;
+ return false;
+ }
+ m_pOw[Uml::A] = dynamic_cast<ObjectWidget*>(pWA);
+ if (m_pOw[Uml::A] == NULL) {
+ kDebug() << "MessageWidget::activate: role A widget "
+ << ID2STR(m_widgetAId) << " is not an ObjectWidget" << endl;
+ return false;
+ }
}
- m_pOw[Uml::B] = dynamic_cast<ObjectWidget*>(pWB);
if (m_pOw[Uml::B] == NULL) {
- kDebug() << "MessageWidget::activate: role B widget "
- << ID2STR(m_widgetBId) << " is not an ObjectWidget" << endl;
- return false;
+ UMLWidget *pWB = m_pView->findWidget(m_widgetBId);
+ if (pWB == NULL) {
+ kDebug() << "MessageWidget::activate: role B object "
+ << ID2STR(m_widgetBId) << " not found" << endl;
+ return false;
+ }
+ m_pOw[Uml::B] = dynamic_cast<ObjectWidget*>(pWB);
+ if (m_pOw[Uml::B] == NULL) {
+ kDebug() << "MessageWidget::activate: role B widget "
+ << ID2STR(m_widgetBId) << " is not an ObjectWidget" << endl;
+ return false;
+ }
}
updateResizability();
- UMLClassifier *c = dynamic_cast<UMLClassifier*>(pWB->getUMLObject());
+ UMLClassifier *c = dynamic_cast<UMLClassifier*>(m_pOw[Uml::B]->getUMLObject());
UMLOperation *op = NULL;
- if (c) {
+ if (c && !m_CustomOp.isEmpty()) {
Uml::IDType opId = STR2ID(m_CustomOp);
op = dynamic_cast<UMLOperation*>( c->findChildObjectById(opId, true) );
if (op) {
|