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

Sharan Rao sharanrao at gmail.com
Wed Nov 14 13:00:46 UTC 2007


SVN commit 736607 by sharan:

Control of popping up ListPopMenu for UMLWidgets given to UMLWidgetController. UMLWidgets only setup the menu now. Also allows custom implementation for setting up menu for different UML widgets.
This enabled fixing up a crash which happenned on RightClick on MessageWidget and selecting any option.



 M  +3 -3      listpopupmenu.cpp  
 M  +15 -10    messagewidget.cpp  
 M  +2 -0      messagewidget.h  
 M  +3 -3      umlwidget.cpp  
 M  +1 -2      umlwidget.h  
 M  +2 -1      umlwidgetcontroller.cpp  


--- trunk/KDE/kdesdk/umbrello/umbrello/listpopupmenu.cpp #736606:736607
@@ -365,9 +365,9 @@
 
     case Uml::wt_Message:
         insertStdItems(false, type);
-        insert(mt_Change_Font);
-        insert(mt_Operation, SmallIcon( "document-new"), i18n("New Operation..."));
-        insert(mt_Select_Operation, i18n("Select Operation..."));
+        //insert(mt_Change_Font);
+        //insert(mt_Operation, SmallIcon( "document-new"), i18n("New Operation..."));
+        //insert(mt_Select_Operation, i18n("Select Operation..."));
         break;
 
     case Uml::wt_Note:
--- trunk/KDE/kdesdk/umbrello/umbrello/messagewidget.cpp #736606:736607
@@ -22,6 +22,8 @@
 #include <kdebug.h>
 #include <kcursor.h>
 #include <kmessagebox.h>
+#include <klocale.h>
+
 //app includes
 #include "messagewidgetcontroller.h"
 #include "floatingtextwidget.h"
@@ -497,16 +499,8 @@
         // This will clean up this widget and the text widget:
         m_pView -> removeWidget(this);
     } else {
-        if (m_pFText == NULL) {
-            Uml::Text_Role tr = Uml::tr_Seq_Message;
-            if (m_pOw[Uml::A] == m_pOw[Uml::B])
-                tr = Uml::tr_Seq_Message_Self;
-            m_pFText = new FloatingTextWidget( m_pView, tr );
-            m_pFText->setFont(UMLWidget::getFont());
-            setLinkAndTextPos();
-            m_pView->getWidgetList().append(m_pFText);
-        }
-        m_pFText -> slotMenuSelection(action);
+
+        UMLWidget::slotMenuSelection( action );
     }
 }
 
@@ -964,4 +958,15 @@
     return true;
 }
 
+ListPopupMenu* MessageWidget::setupPopupMenu() {
+
+    UMLWidget::setupPopupMenu( ); // will setup the menu in m_pMenu
+    ListPopupMenu* floatingtextSubMenu = m_pFText->setupPopupMenu();
+    floatingtextSubMenu->setTitle( i18n( "Operation" ) );
+
+    m_pMenu->addMenu( floatingtextSubMenu );
+
+    return m_pMenu;
+}
+
 #include "messagewidget.moc"
--- trunk/KDE/kdesdk/umbrello/umbrello/messagewidget.h #736606:736607
@@ -387,6 +387,8 @@
         return xclicked;
     }
 
+    ListPopupMenu* setupPopupMenu();
+
 protected:
     /**
      * Shortcut for calling m_pFText->setLink() followed by
--- trunk/KDE/kdesdk/umbrello/umbrello/umlwidget.cpp #736606:736607
@@ -633,7 +633,7 @@
     dlg->close(); //wipe from memory
 }
 
-void UMLWidget::startPopupMenu( const QPoint &At) {
+ListPopupMenu*  UMLWidget::setupPopupMenu( ) {
     slotRemovePopupMenu();
 
     //if in a multi- selection to a specific m_pMenu for that
@@ -661,9 +661,9 @@
     if(currentCG && dynamic_cast<SimpleCodeGenerator*>(currentCG))
         m_pMenu->setActionEnabled(ListPopupMenu::mt_ViewCode, false);
 
-    m_pMenu->popup(At);
+    connect(m_pMenu, SIGNAL(triggered(QAction*)), this, SLOT(slotMenuSelection(QAction*)));
 
-    connect(m_pMenu, SIGNAL(triggered(QAction*)), this, SLOT(slotMenuSelection(QAction*)));
+    return m_pMenu;
 }
 
 void UMLWidget::slotRemovePopupMenu() {
--- trunk/KDE/kdesdk/umbrello/umbrello/umlwidget.h #736606:736607
@@ -466,9 +466,8 @@
     /**
      * Starts the popup menu.
      *
-     * @param At The Point where the diagram is to be coming up.
      */
-    void startPopupMenu( const QPoint &At );
+    virtual ListPopupMenu* setupPopupMenu();
 
     /**
      * Adjusts associations with the given co-ordinates
--- trunk/KDE/kdesdk/umbrello/umbrello/umlwidgetcontroller.cpp #736606:736607
@@ -577,7 +577,8 @@
     if (m_widget->m_pMenu) {
         return;
     }
-    m_widget->startPopupMenu(me->globalPos());
+    ListPopupMenu* menu = m_widget->setupPopupMenu();
+    menu->popup( me->globalPos() );
 }
 
 bool UMLWidgetController::wasSizeChanged() {




More information about the umbrello-devel mailing list