[Uml-devel] branches/KDE/3.5/kdesdk/umbrello

Oliver Kellogg okellogg at users.sourceforge.net
Sat Feb 18 15:46:01 UTC 2006


SVN commit 511145 by okellogg:

SelectOpDlg::isClassOp(): New. Used by FloatingText::showOpDlg().
MessageWidget::loadFromXMI(): Remove backward compatibility crutch
 which stops us from supporting true custom ops.
BUG:120337


 M  +1 -0      ChangeLog  
 M  +5 -0      umbrello/dialogs/selectopdlg.cpp  
 M  +10 -0     umbrello/dialogs/selectopdlg.h  
 M  +23 -19    umbrello/floatingtext.cpp  
 M  +0 -16     umbrello/messagewidget.cpp  


--- branches/KDE/3.5/kdesdk/umbrello/ChangeLog #511144:511145
@@ -7,6 +7,7 @@
 * Bugs/wishes from http://bugs.kde.org:
 * Import Rose model files (81364)
 * Default data types not added for old Java generator (115991)
+* Custom operations in sequence diagrams become class operations (120337)
 * Multiplicity labels positioned incorrectly when moving entities (120598)
 * Types of entity's attributes are displayed instead of their names (120742)
 * Unable to delete entity from entity list in "UML Model" frame (120750)
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/dialogs/selectopdlg.cpp #511144:511145
@@ -86,6 +86,10 @@
         return m_pOpLE -> text();
 }
 
+bool SelectOpDlg::isClassOp() const {
+    return (m_id == OP);
+}
+
 void SelectOpDlg::slotSelected(int id) {
     if(id == OP) {
         m_pOpLE -> setEnabled(false);
@@ -95,6 +99,7 @@
         m_pOpLE -> setEnabled(true);
         m_pOpCB -> setEnabled(false);
     }
+    m_id = id;
 }
 
 void SelectOpDlg::setCustomOp(const QString &op) {
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/dialogs/selectopdlg.h #511144:511145
@@ -64,6 +64,15 @@
     QString getOpText();
 
     /**
+     * Return whether the user selected a class operation
+     * or a custom operation.
+     *
+     * @return  True if user selected a class operation,
+     *          false if user selected a custom operation
+     */
+    bool isClassOp() const;
+
+    /**
      *  Returns the sequence number for the operation.
      *
      *  @return Returns the sequence number for the operation.
@@ -99,6 +108,7 @@
     QButtonGroup * m_pOpBG, * m_pDocGB;
     QString m_Text;
     int m_nOpCount;
+    int m_id;  ///< takes on the value OP or CUSTOM according to what the user selected
     UMLView *m_pView;
 public slots:
     void slotSelected(int id);
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/floatingtext.cpp #511144:511145
@@ -304,26 +304,30 @@
     }
     seqNum = selectDlg.getSeqNumber();
     opText = selectDlg.getOpText();
-    Model_Utils::OpDescriptor od;
-    Model_Utils::Parse_Status st = Model_Utils::parseOperation(opText, od, c);
-    if (st == Model_Utils::PS_OK) {
-        UMLClassifierList selfAndAncestors = c->findSuperClassConcepts();
-        selfAndAncestors.prepend(c);
-        UMLOperation *op = NULL;
-        for (UMLClassifier *cl = selfAndAncestors.first(); cl; cl = selfAndAncestors.next()) {
-            op = cl->findOperation(od.m_name, od.m_args);
-            if (op != NULL)
-                break;
+    if (selectDlg.isClassOp()) {
+        Model_Utils::OpDescriptor od;
+        Model_Utils::Parse_Status st = Model_Utils::parseOperation(opText, od, c);
+        if (st == Model_Utils::PS_OK) {
+            UMLClassifierList selfAndAncestors = c->findSuperClassConcepts();
+            selfAndAncestors.prepend(c);
+            UMLOperation *op = NULL;
+            for (UMLClassifier *cl = selfAndAncestors.first(); cl; cl = selfAndAncestors.next()) {
+                op = cl->findOperation(od.m_name, od.m_args);
+                if (op != NULL)
+                    break;
+            }
+            if (op == NULL) {
+                // The op does not yet exist. Create a new one.
+                UMLObject *o = c->createOperation(od.m_name, NULL, &od.m_args);
+                op = static_cast<UMLOperation*>(o);
+            }
+            if (od.m_pReturnType)
+                op->setType(od.m_pReturnType);
+            m_pLink->setOperation(op);
+            opText = QString::null;
+        } else {
+            m_pLink->setOperation(NULL);
         }
-        if (op == NULL) {
-            // The op does not yet exist. Create a new one.
-            UMLObject *o = c->createOperation(od.m_name, NULL, &od.m_args);
-            op = static_cast<UMLOperation*>(o);
-        }
-        if (od.m_pReturnType)
-            op->setType(od.m_pReturnType);
-        m_pLink->setOperation(op);
-        opText = QString::null;
     } else {
         m_pLink->setOperation(NULL);
     }
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/messagewidget.cpp #511144:511145
@@ -827,22 +827,6 @@
             // If the UMLOperation is set, m_CustomOp isn't used anyway.
             // Just setting it empty for the sake of sanity.
             m_CustomOp = QString::null;
-        } else {
-            // Previous umbrello versions saved the operation text
-            // instead of the xmi.id of the operation.
-            // For backward compatibility, attempt to determine the
-            // m_pOperation from the operation text:
-            Model_Utils::OpDescriptor od;
-            Model_Utils::Parse_Status st = Model_Utils::parseOperation(m_CustomOp, od, c);
-            if (st == Model_Utils::PS_OK) {
-                bool isExistingOp = false;
-                UMLObject *o = c->createOperation(od.m_name, &isExistingOp, &od.m_args);
-                op = static_cast<UMLOperation*>(o);
-                if (od.m_pReturnType) {
-                    op->setType(od.m_pReturnType);
-                }
-                m_CustomOp = QString::null;
-            }
         }
     }
 




More information about the umbrello-devel mailing list