From kde-commits Wed Jul 31 22:50:34 2013 From: Andi Fischer Date: Wed, 31 Jul 2013 22:50:34 +0000 To: kde-commits Subject: [umbrello/_associationline_refactoring_] umbrello: Patch from Ralf Habacker applied: Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=137531104301562 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 = * *************************************************************************= **/ = @@ -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_D= elete_Point), i18n("Delete Point")); + addSeparator(); + insertSubMenuLayout(w->associationLine()); } addSeparator(); - insertSubMenuLayout(); - addSeparator(); insert(mt_Delete); = switch(mt) { @@ -948,13 +949,28 @@ void ListPopupMenu::insertAssociationTextItem(const Q= String &label, MenuType mt) /** * Inserts a sub menu for association layouts. */ -void ListPopupMenu::insertSubMenuLayout() +void ListPopupMenu::insertSubMenuLayout(AssociationLine *associationLine) { KMenu* layout =3D 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 = -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/associ= ationline.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 =3D qElement.attribute("layout", "polyline"); + m_layout =3D fromString(layout); + QDomNode node =3D qElement.firstChild(); = m_points.clear(); @@ -352,6 +355,7 @@ void AssociationLine::saveToXMI(QDomDocument &qDoc, QDo= mElement &qElement) { QPointF point =3D m_associationWidget->mapToScene(startPoint()); QDomElement lineElement =3D qDoc.createElement("linepath"); + lineElement.setAttribute("layout", toString(m_layout)); QDomElement startElement =3D 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 &lay= out) +{ + if (layout =3D=3D "Direct") + return Direct; + if (layout =3D=3D "Spline") + return Spline; + if (layout =3D=3D "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 =3D layout; DEBUG(DBG_SRC) << "new layout =3D " << 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/associat= ionline.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 =3D 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);