[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [umbrello/_associationline_refactoring_] umbrello: Patch from Ralf Habacker applied:
From:       Andi Fischer <andi.fischer () hispeed ! ch>
Date:       2013-07-31 22:50:34
Message-ID: E1V4fE2-0005iF-2G () scm ! kde ! org
[Download RAW message or body]

Git commit f788d6ce93f0f254858580acd4c01d1e3d3f16c1 by Andi Fischer.
Committed on 31/07/2013 at 22:47.
Pushed by fischer into branch '_associationline_refactoring_'.

Patch from  Ralf Habacker applied:
- save to and load from xmi-file the layout of the association line
- layout selection in popup menu changed to checked items.

M  +24   -8    umbrello/listpopupmenu.cpp
M  +3    -2    umbrello/listpopupmenu.h
M  +1    -1    umbrello/version.h
M  +30   -1    umbrello/widgets/associationline.cpp
M  +5    -3    umbrello/widgets/associationline.h

http://commits.kde.org/umbrello/f788d6ce93f0f254858580acd4c01d1e3d3f16c1

diff --git a/umbrello/listpopupmenu.cpp b/umbrello/listpopupmenu.cpp
index 54ea367..48a8412 100644
--- a/umbrello/listpopupmenu.cpp
+++ b/umbrello/listpopupmenu.cpp
@@ -4,7 +4,7 @@
  *   the Free Software Foundation; either version 2 of the License, or     *
  *   (at your option) any later version.                                   *
  *                                                                         *
- *   copyright (C) 2002-2012                                               *
+ *   copyright (C) 2002-2013                                               *
  *   Umbrello UML Modeller Authors <uml-devel@uml.sf.net>                  *
  ***************************************************************************/
 
@@ -13,6 +13,7 @@
 
 // app includes
 #include "activitywidget.h"
+#include "associationline.h"
 #include "category.h"
 #include "classifier.h"
 #include "classifierwidget.h"
@@ -902,10 +903,10 @@ void ListPopupMenu::insertAssociationItem(MenuType mt)
             insert(mt_Add_Point, Icon_Utils::SmallIcon(Icon_Utils::it_Add_Point), \
i18n("Add Point"));  if (w->isPointRemovable())
             insert(mt_Delete_Point, \
Icon_Utils::SmallIcon(Icon_Utils::it_Delete_Point), i18n("Delete Point")); +        \
addSeparator(); +        insertSubMenuLayout(w->associationLine());
     }
     addSeparator();
-    insertSubMenuLayout();
-    addSeparator();
     insert(mt_Delete);
 
     switch(mt) {
@@ -948,13 +949,28 @@ void ListPopupMenu::insertAssociationTextItem(const QString \
&label, MenuType mt)  /**
  * Inserts a sub menu for association layouts.
  */
-void ListPopupMenu::insertSubMenuLayout()
+void ListPopupMenu::insertSubMenuLayout(AssociationLine *associationLine)
 {
     KMenu* layout = new KMenu(i18nc("Layout menu", "Layout"), this);
-    insert(mt_LayoutDirect, layout, i18n("Direct"));
-    insert(mt_LayoutSpline, layout, i18n("Spline"));
-    insert(mt_LayoutOrthogonal, layout, i18n("Orthogonal"));
-    insert(mt_LayoutPolyline, layout, i18n("Polyline"));
+    insert(mt_LayoutDirect, layout, i18n("Direct"), true);
+    insert(mt_LayoutSpline, layout, i18n("Spline"), true);
+    insert(mt_LayoutOrthogonal, layout, i18n("Orthogonal"), true);
+    insert(mt_LayoutPolyline, layout, i18n("Polyline"), true);
+    switch(associationLine->layout()) {
+    case AssociationLine::Direct:
+        m_actions[mt_LayoutDirect]->setChecked(true);
+        break;
+    case AssociationLine::Orthogonal:
+        m_actions[mt_LayoutOrthogonal]->setChecked(true);
+        break;
+    case AssociationLine::Spline:
+        m_actions[mt_LayoutSpline]->setChecked(true);
+        break;
+    case AssociationLine::Polyline:
+    default:
+        m_actions[mt_LayoutPolyline]->setChecked(true);
+        break;
+    }
     addMenu(layout);
 }
 
diff --git a/umbrello/listpopupmenu.h b/umbrello/listpopupmenu.h
index 0d70cfb..d9d0b64 100644
--- a/umbrello/listpopupmenu.h
+++ b/umbrello/listpopupmenu.h
@@ -20,9 +20,10 @@
 
 #include <QHash>
 
-class UMLView;
+class AssociationLine;
 class ClassifierWidget;
 class UMLCategory;
+class UMLView;
 
 /**
  * A popup menu that depending on what type is set to will
@@ -280,7 +281,7 @@ private:
     void insertContainerItems(bool folderAndDiagrams);
     void insertAssociationItem(MenuType mt);
     void insertAssociationTextItem(const QString &label, MenuType mt);
-    void insertSubMenuLayout();
+    void insertSubMenuLayout(AssociationLine *associationLine);
     void insertSubmodelAction();
     void insertLayoutItems(UMLView *view);
 
diff --git a/umbrello/version.h b/umbrello/version.h
index 27d4c5b..3c94e86 100644
--- a/umbrello/version.h
+++ b/umbrello/version.h
@@ -27,6 +27,6 @@ inline QByteArray umbrelloVersion()
 }
 
 // Update this version when changing the XMI file format
-#define XMI_FILE_VERSION "1.6.1"
+#define XMI_FILE_VERSION "1.6.2"
 
 #endif
diff --git a/umbrello/widgets/associationline.cpp \
b/umbrello/widgets/associationline.cpp index c8e3216..21d5a0d 100644
--- a/umbrello/widgets/associationline.cpp
+++ b/umbrello/widgets/associationline.cpp
@@ -300,6 +300,9 @@ void AssociationLine::dumpPoints()
  */
 bool AssociationLine::loadFromXMI(QDomElement &qElement)
 {
+    QString layout = qElement.attribute("layout", "polyline");
+    m_layout = fromString(layout);
+
     QDomNode node = qElement.firstChild();
 
     m_points.clear();
@@ -352,6 +355,7 @@ void AssociationLine::saveToXMI(QDomDocument &qDoc, QDomElement \
&qElement)  {
     QPointF point = m_associationWidget->mapToScene(startPoint());
     QDomElement lineElement = qDoc.createElement("linepath");
+    lineElement.setAttribute("layout", toString(m_layout));
     QDomElement startElement = qDoc.createElement("startpoint");
     startElement.setAttribute("startx", point.x());
     startElement.setAttribute("starty", point.y());
@@ -921,14 +925,38 @@ QString AssociationLine::toString(LayoutType layout)
 }
 
 /**
+ * Convert string to enum LayoutType.
+ */
+AssociationLine::LayoutType AssociationLine::fromString(const QString &layout)
+{
+    if (layout == "Direct")
+        return Direct;
+    if (layout == "Spline")
+        return Spline;
+    if (layout == "Orthogonal")
+        return Orthogonal;
+    return Polyline;
+}
+
+/**
+ * Return the layout type of the association line.
+ * @return   the currently used layout
+ */
+AssociationLine::LayoutType AssociationLine::layout() const
+{
+    return m_layout;
+}
+
+/**
  * Set the layout type of the association line.
  * @param layout   the desired layout to set
  */
 void AssociationLine::setLayout(LayoutType layout)
 {
+    prepareGeometryChange();
     m_layout = layout;
     DEBUG(DBG_SRC) << "new layout = " << toString(m_layout);
-    update();
+    alignSymbols();
 }
 
 /**
@@ -1101,6 +1129,7 @@ void AssociationLine::paint(QPainter* painter, const \
QStyleOptionGraphicsItem* o  painter->setPen(p);
             painter->setBrush(Qt::NoBrush);
             painter->drawPath(shape());
+            painter->drawRect(shape().boundingRect());
         }
     }
 
diff --git a/umbrello/widgets/associationline.h b/umbrello/widgets/associationline.h
index 5d8274e..89b83c0 100644
--- a/umbrello/widgets/associationline.h
+++ b/umbrello/widgets/associationline.h
@@ -107,13 +107,14 @@ class AssociationLine : public QGraphicsObject
     Q_ENUMS(LayoutType)
 public:
     enum LayoutType {
-        Direct,
-        Spline,
+        Direct = 1,
         Orthogonal,
-        Polyline
+        Polyline,
+        Spline
     };
 
     static QString toString(LayoutType layout);
+    static LayoutType fromString(const QString& layout);
 
     explicit AssociationLine(AssociationWidget *association);
     virtual ~AssociationLine();
@@ -153,6 +154,7 @@ public:
     QRectF boundingRect() const;
     QPainterPath shape() const;
 
+    LayoutType layout() const;
     void setLayout(LayoutType layout);
 
     void mousePressEvent(QGraphicsSceneMouseEvent *event);


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic