Hello community,

here is the log from the commit of package umbrello for openSUSE:Factory 
checked in at 2016-11-13 23:01:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/umbrello (Old)
 and      /work/SRC/openSUSE:Factory/.umbrello.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "umbrello"

Changes:
--------
--- /work/SRC/openSUSE:Factory/umbrello/umbrello.changes        2016-10-18 
10:42:34.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.umbrello.new/umbrello.changes   2016-11-13 
23:01:05.000000000 +0100
@@ -1,0 +2,7 @@
+Wed Nov  9 06:29:53 UTC 2016 - [email protected]
+
+- Update to KDE Applications 16.08.3
+  * KDE Applications 16.08.3
+  * https://www.kde.org/announcements/announce-applications-16.08.3.php
+
+-------------------------------------------------------------------

Old:
----
  umbrello-16.08.2.tar.xz

New:
----
  umbrello-16.08.3.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ umbrello.spec ++++++
--- /var/tmp/diff_new_pack.hjGRI6/_old  2016-11-13 23:01:06.000000000 +0100
+++ /var/tmp/diff_new_pack.hjGRI6/_new  2016-11-13 23:01:06.000000000 +0100
@@ -24,7 +24,7 @@
 License:        GPL-2.0 and GFDL-1.2
 Group:          Development/Tools/Other
 Url:            http://www.kde.org/
-Version:        16.08.2
+Version:        16.08.3
 Release:        0
 Source0:        %{name}-%{version}.tar.xz
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build

++++++ umbrello-16.08.2.tar.xz -> umbrello-16.08.3.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/umbrello-16.08.2/CMakeLists.txt 
new/umbrello-16.08.3/CMakeLists.txt
--- old/umbrello-16.08.2/CMakeLists.txt 2016-10-07 01:13:32.000000000 +0200
+++ new/umbrello-16.08.3/CMakeLists.txt 2016-11-07 13:02:12.000000000 +0100
@@ -3,7 +3,7 @@
 # KDE Application Version, managed by release script
 set (KDE_APPLICATIONS_VERSION_MAJOR "16")
 set (KDE_APPLICATIONS_VERSION_MINOR "08")
-set (KDE_APPLICATIONS_VERSION_MICRO "2")
+set (KDE_APPLICATIONS_VERSION_MICRO "3")
 
 set(UMBRELLO_VERSION_MAJOR "2")
 MATH(EXPR UMBRELLO_VERSION_MINOR "12+${KDE_APPLICATIONS_VERSION_MINOR}")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/umbrello-16.08.2/umbrello/codegenerators/cpp/cppwriter.cpp 
new/umbrello-16.08.3/umbrello/codegenerators/cpp/cppwriter.cpp
--- old/umbrello-16.08.2/umbrello/codegenerators/cpp/cppwriter.cpp      
2016-10-07 01:13:32.000000000 +0200
+++ new/umbrello-16.08.3/umbrello/codegenerators/cpp/cppwriter.cpp      
2016-11-07 13:02:12.000000000 +0100
@@ -27,6 +27,7 @@
 #include "umlclassifierlistitemlist.h"
 #include "classifierlistitem.h"
 #include "codegenerationpolicy.h"
+#include "enumliteral.h"
 
 // qt includes
 #include <QFile>
@@ -395,8 +396,11 @@
         uint i = 0;
         cpp << "enum " << className_ << " {" << m_endl;
         foreach (UMLClassifierListItem* lit, litList) {
+            UMLEnumLiteral *el = static_cast<UMLEnumLiteral *>(lit);
             QString enumLiteral = cleanName(lit->name());
             cpp << indent() << enumLiteral;
+            if (!el->value().isEmpty())
+                cpp << " = " << el->value();
             if (++i < (uint)litList.count())
                 cpp << ",";
             cpp << m_endl;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/umbrello-16.08.2/umbrello/codeimport/kdevcppparser/cpptree2uml.cpp 
new/umbrello-16.08.3/umbrello/codeimport/kdevcppparser/cpptree2uml.cpp
--- old/umbrello-16.08.2/umbrello/codeimport/kdevcppparser/cpptree2uml.cpp      
2016-10-07 01:13:32.000000000 +0200
+++ new/umbrello-16.08.3/umbrello/codeimport/kdevcppparser/cpptree2uml.cpp      
2016-11-07 13:02:12.000000000 +0100
@@ -163,7 +163,7 @@
                         typeId == m_currentNamespace[m_nsCnt]->name())
                     inner = m_currentNamespace[m_nsCnt];
                 else
-                    inner = Import_Utils::createUMLObject(UMLObject::ot_Class, 
typeId,
+                    inner = Import_Utils::createUMLObject(UMLObject::ot_Class, 
type,
                                                           
m_currentNamespace[m_nsCnt]);
                 UMLObject *typedefObj =
                  Import_Utils::createUMLObject(UMLObject::ot_Datatype, id,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/umbrello-16.08.2/umbrello/umldoc.cpp 
new/umbrello-16.08.3/umbrello/umldoc.cpp
--- old/umbrello-16.08.2/umbrello/umldoc.cpp    2016-10-07 01:13:32.000000000 
+0200
+++ new/umbrello-16.08.3/umbrello/umldoc.cpp    2016-11-07 13:02:12.000000000 
+0100
@@ -2406,6 +2406,8 @@
     }
 
     resolveTypes();
+    loadDiagrams();
+
     // set a default code generator if no <XMI.extensions><codegeneration> tag 
seen
     if (UMLApp::app()->generator() == 0) {
         UMLApp::app()->setGenerator(UMLApp::app()->defaultLanguage());
@@ -2452,6 +2454,42 @@
     qApp->processEvents();  // give UI events a chance
 }
 
+/**
+ * Load all diagrams collected from the xmi file.
+ *
+ * Loading diagrams is implemented as additional pass to avoid unresolved
+ * uml objects which are defined later in the xmi file.
+ */
+bool UMLDoc::loadDiagrams()
+{
+    bool result = true;
+    DiagramsMap::const_iterator i;
+    for (i = m_diagramsToLoad.constBegin(); i != m_diagramsToLoad.constEnd(); 
i++) {
+        UMLFolder *f = i.key();
+        foreach(QDomNode node, i.value())
+            if (!f->loadDiagramsFromXMI(node))
+                result = false;
+    }
+
+    m_diagramsToLoad.clear();
+    return result;
+}
+
+/**
+ * Add a xml node containing a diagram to the list of diagrams to load.
+ * Helper function for @ref loadDiagrams().
+ *
+ * @param folder pointer to UMFolder instance the diagrams belongs to
+ * @param node xml document node containing the diagram
+ */
+void UMLDoc::addDiagramToLoad(UMLFolder *folder, QDomNode node)
+{
+    if (m_diagramsToLoad.contains(folder))
+        m_diagramsToLoad[folder].append(node);
+    else
+        m_diagramsToLoad[folder] = QList<QDomNode>() << node;
+}
+
 DiagramsModel *UMLDoc::diagramsModel()
 {
     return m_diagramsModel;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/umbrello-16.08.2/umbrello/umldoc.h 
new/umbrello-16.08.3/umbrello/umldoc.h
--- old/umbrello-16.08.2/umbrello/umldoc.h      2016-10-07 01:13:32.000000000 
+0200
+++ new/umbrello-16.08.3/umbrello/umldoc.h      2016-11-07 13:02:12.000000000 
+0100
@@ -234,6 +234,8 @@
     void writeToStatusBar(const QString &text);
 
     void resolveTypes();
+    bool loadDiagrams();
+    void addDiagramToLoad(UMLFolder *folder, QDomNode node);
 
     DiagramsModel *diagramsModel();
     StereotypesModel *stereotypesModel();
@@ -316,6 +318,12 @@
     DiagramsModel *m_diagramsModel;
     StereotypesModel *m_stereotypesModel;
 
+    /**
+     * Holds diagram xml nodes on loading
+     */
+    typedef QMap<UMLFolder*, QList<QDomNode>> DiagramsMap;
+    DiagramsMap m_diagramsToLoad;
+
 public slots:
     void slotRemoveUMLObject(UMLObject*o);
     void slotAutoSave();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/umbrello-16.08.2/umbrello/umllistview.cpp 
new/umbrello-16.08.3/umbrello/umllistview.cpp
--- old/umbrello-16.08.2/umbrello/umllistview.cpp       2016-10-07 
01:13:32.000000000 +0200
+++ new/umbrello-16.08.3/umbrello/umllistview.cpp       2016-11-07 
13:02:12.000000000 +0100
@@ -2504,29 +2504,11 @@
                 // The existing item was created by the slot event triggered
                 // by the loading of the corresponding model object from the
                 // XMI file.
-                // This early creation is done in order to support the loading
-                // of foreign XMI files that do not have the umbrello specific
-                // <listview> tag.
-                // However, now that we encountered the real <listview> info,
-                // we need to delete the existing item: Its parent is always
-                // one of the default predefined folders, but the actual
-                // listview item might be located in a user created folder.
-                // Thanks to Achim Spangler for spotting the problem.
                 UMLListViewItem *itmParent = 
dynamic_cast<UMLListViewItem*>(item->parent());
-                DEBUG(DBG_SRC) << item->text(0) << " parent "
+                DEBUG(DBG_SRC) << "Loaded <listview> entry does not match uml 
model"
+                               << item->text(0) << " parent "
                                << parent->text(0) << " (" << parent << ") != "
                                << itmParent->text(0) << " (" << itmParent << 
")";
-                if (item == m_datatypeFolder && itmParent == 
m_lv[Uml::ModelType::Logical]) {
-                    DEBUG(DBG_SRC) << "Reparenting the Datatypes folder is 
prohibited";
-                } else {
-                    UMLListViewItem *newItem = moveObject(nID, lvType, parent);
-                    item = newItem;
-                    if (item) {
-                        DEBUG(DBG_SRC) << "Attempted reparenting of " << 
item->text(0)
-                                       << "(current parent: " << (itmParent ? 
itmParent->text(0) : QLatin1String("0"))
-                                       << ", new parent: " << parent->text(0) 
<< ")";
-                    }
-                }
             }
             break;
         case UMLListViewItem::lvt_Attribute:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/umbrello-16.08.2/umbrello/umlmodel/folder.cpp 
new/umbrello-16.08.3/umbrello/umlmodel/folder.cpp
--- old/umbrello-16.08.2/umbrello/umlmodel/folder.cpp   2016-10-07 
01:13:32.000000000 +0200
+++ new/umbrello-16.08.3/umbrello/umlmodel/folder.cpp   2016-11-07 
13:02:12.000000000 +0100
@@ -376,8 +376,9 @@
  * Auxiliary to load():
  * Load the diagrams from the "diagrams" in the <XMI.extension>
  */
-bool UMLFolder::loadDiagramsFromXMI(QDomNode& diagrams)
+bool UMLFolder::loadDiagramsFromXMI(QDomNode& node)
 {
+    QDomNode diagrams = node.firstChild();
     const Settings::OptionState optionState = Settings::optionState();
     UMLDoc *umldoc = UMLApp::app()->document();
     bool totalSuccess = true;
@@ -484,9 +485,7 @@
                 QDomElement el = xtnode.toElement();
                 const QString xtag = el.tagName();
                 if (xtag == QLatin1String("diagrams")) {
-                    QDomNode diagramNode = xtnode.firstChild();
-                    if (!loadDiagramsFromXMI(diagramNode))
-                        totalSuccess = false;
+                    umldoc->addDiagramToLoad(this, xtnode);
                 } else if (xtag == QLatin1String("external_file")) {
 #if QT_VERSION >= 0x050000
                     const QString 
rootDir(umldoc->url().adjusted(QUrl::RemoveFilename).path());
@@ -534,6 +533,16 @@
                 continue;
             }
         }
+        // check for invalid namespaces
+        QString ns = tempElement.attribute(QLatin1String("namespace"));
+        Uml::ID::Type id = Uml::ID::fromString(ns);
+        if (id != this->id()) {
+            uError() << "namespace" << ns << "not present; ignoring object 
with id" << idStr;
+            delete pObject;
+            pObject = 0;
+            totalSuccess = false;
+            continue;
+        }
         pObject->setUMLPackage(this);
         if (!pObject->loadFromXMI(tempElement)) {
             removeObject(pObject);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/umbrello-16.08.2/umbrello/umlmodel/folder.h 
new/umbrello-16.08.3/umbrello/umlmodel/folder.h
--- old/umbrello-16.08.2/umbrello/umlmodel/folder.h     2016-10-07 
01:13:32.000000000 +0200
+++ new/umbrello-16.08.3/umbrello/umlmodel/folder.h     2016-11-07 
13:02:12.000000000 +0100
@@ -70,7 +70,7 @@
 
     void save(QDomDocument& qDoc, QDomElement& qElement);
 
-    bool loadDiagramsFromXMI(QDomNode& diagrams);
+    bool loadDiagramsFromXMI(QDomNode& node);
 
     bool loadFolderFile(const QString& path);
 
@@ -87,6 +87,8 @@
      */
     QString m_folderFile;
     UMLViewList m_diagrams;
+
+    friend class UMLDoc;
 };
 
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/umbrello-16.08.2/umbrello/umlwidgets/associationwidget.cpp 
new/umbrello-16.08.3/umbrello/umlwidgets/associationwidget.cpp
--- old/umbrello-16.08.2/umbrello/umlwidgets/associationwidget.cpp      
2016-10-07 01:13:32.000000000 +0200
+++ new/umbrello-16.08.3/umbrello/umlwidgets/associationwidget.cpp      
2016-11-07 13:02:12.000000000 +0100
@@ -3928,6 +3928,13 @@
 {
     //TODO: ADD SUPPORT FOR ASSOC. ON SEQ. DIAGRAMS WHEN NOTES BACK IN.
     moveMidPointsBy(x, y);
+    // multi select
+    if (umlScene()->selectedCount() > 1) {
+        QPointF d(x, y);
+        QPointF s = m_associationLine->startPoint() + d;
+        QPointF e = m_associationLine->endPoint() + d;
+        m_associationLine->setEndPoints(s, e);
+    }
     calculateEndingPoints();
     calculateNameTextSegment();
     resetTextPositions();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/umbrello-16.08.2/umbrello/umlwidgets/classifierwidget.cpp 
new/umbrello-16.08.3/umbrello/umlwidgets/classifierwidget.cpp
--- old/umbrello-16.08.2/umbrello/umlwidgets/classifierwidget.cpp       
2016-10-07 01:13:32.000000000 +0200
+++ new/umbrello-16.08.3/umbrello/umlwidgets/classifierwidget.cpp       
2016-11-07 13:02:12.000000000 +0100
@@ -75,7 +75,7 @@
     setShowAttSigs(ops.classState.showAttSig);
 
     if (c && c->isInterface()) {
-        m_baseType = WidgetBase::wt_Interface;
+        setBaseType(WidgetBase::wt_Interface);
         m_visualProperties = ShowOperations | ShowVisibility | ShowStereotype;
         setShowStereotype(true);
         updateSignatureTypes();
@@ -1152,7 +1152,7 @@
  */
 void ClassifierWidget::changeToClass()
 {
-    m_baseType = WidgetBase::wt_Class;
+    setBaseType(WidgetBase::wt_Class);
     m_umlObject->setBaseType(UMLObject::ot_Class);
     setVisualPropertyCmd(DrawAsCircle, false);
     const Settings::OptionState& ops = m_scene->optionState();
@@ -1170,7 +1170,7 @@
  */
 void ClassifierWidget::changeToInterface()
 {
-    m_baseType = WidgetBase::wt_Interface;
+    setBaseType(WidgetBase::wt_Interface);
     m_umlObject->setBaseType(UMLObject::ot_Interface);
 
     setVisualProperty(ShowAttributes, false);
@@ -1186,7 +1186,7 @@
  */
 void ClassifierWidget::changeToPackage()
 {
-    m_baseType = WidgetBase::wt_Package;
+    setBaseType(WidgetBase::wt_Package);
     m_umlObject->setBaseType(UMLObject::ot_Package);
 
     setVisualProperty(ShowAttributes, false);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/umbrello-16.08.2/umbrello/umlwidgets/pinportbase.cpp 
new/umbrello-16.08.3/umbrello/umlwidgets/pinportbase.cpp
--- old/umbrello-16.08.2/umbrello/umlwidgets/pinportbase.cpp    2016-10-07 
01:13:32.000000000 +0200
+++ new/umbrello-16.08.3/umbrello/umlwidgets/pinportbase.cpp    2016-11-07 
13:02:12.000000000 +0100
@@ -318,8 +318,9 @@
  */
 void PinPortBase::saveToXMI(QDomDocument& qDoc, QDomElement& qElement)
 {
-    QDomElement element = qDoc.createElement(m_baseType == wt_Pin ? 
QLatin1String("pinwidget")
+    QDomElement element = qDoc.createElement(baseType() == wt_Pin ? 
QLatin1String("pinwidget")
                                                                   : 
QLatin1String("portwidget"));
+    Q_ASSERT(ownerWidget() != NULL);
     element.setAttribute(QLatin1String("widgetaid"), 
Uml::ID::toString(ownerWidget()->id()));
     UMLWidget::saveToXMI(qDoc, element);
     if (m_pName && !m_pName->text().isEmpty()) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/umbrello-16.08.2/umbrello/umlwidgets/portwidget.cpp 
new/umbrello-16.08.3/umbrello/umlwidgets/portwidget.cpp
--- old/umbrello-16.08.2/umbrello/umlwidgets/portwidget.cpp     2016-10-07 
01:13:32.000000000 +0200
+++ new/umbrello-16.08.3/umbrello/umlwidgets/portwidget.cpp     2016-11-07 
13:02:12.000000000 +0100
@@ -69,6 +69,7 @@
  */
 void PortWidget::connectOwnerMotion()
 {
+    Q_ASSERT(ownerWidget()->baseType() == WidgetBase::wt_Component);
     ComponentWidget *owner = static_cast<ComponentWidget*>(ownerWidget());
     connect(owner, SIGNAL(sigCompMoved(qreal,qreal)), this, 
SLOT(slotOwnerMoved(qreal,qreal)));
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/umbrello-16.08.2/umbrello/umlwidgets/umlwidget.cpp 
new/umbrello-16.08.3/umbrello/umlwidgets/umlwidget.cpp
--- old/umbrello-16.08.2/umbrello/umlwidgets/umlwidget.cpp      2016-10-07 
01:13:32.000000000 +0200
+++ new/umbrello-16.08.3/umbrello/umlwidgets/umlwidget.cpp      2016-11-07 
13:02:12.000000000 +0100
@@ -138,7 +138,7 @@
     if (this == &other)
         return true;
 
-    if (m_baseType != other.m_baseType) {
+    if (baseType() != other.baseType()) {
         return false;
     }
 
@@ -506,6 +506,7 @@
     DEBUG(DBG_SRC) << "diffX=" << diffX << " / diffY=" << diffY;
     foreach(UMLWidget* widget, umlScene()->selectedWidgets()) {
         widget->moveWidgetBy(diffX, diffY);
+        widget->adjustUnselectedAssocs(delta.x(), delta.y());
         widget->slotSnapToGrid();
     }
 
@@ -654,7 +655,7 @@
 void UMLWidget::updateWidget()
 {
     updateGeometry();
-    switch (m_baseType) {
+    switch (baseType()) {
     case WidgetBase::wt_Class:
         m_scene->createAutoAttributeAssociations(this);
         break;
@@ -981,7 +982,7 @@
  */
 bool UMLWidget::activate(IDChangeLog* /*ChangeLog  = 0 */)
 {
-    if (widgetHasUMLObject(m_baseType) && m_umlObject == NULL) {
+    if (widgetHasUMLObject(baseType()) && m_umlObject == NULL) {
         m_umlObject = m_doc->findObjectById(m_nId);
         if (m_umlObject == NULL) {
             uError() << "cannot find UMLObject with id=" << 
Uml::ID::toString(m_nId);
@@ -1324,7 +1325,7 @@
 void UMLWidget::setSelected(bool _select)
 {
     WidgetBase::setSelected(_select);
-    const WidgetBase::WidgetType wt = m_baseType;
+    const WidgetBase::WidgetType wt = baseType();
     if (_select) {
         if (m_scene->selectedCount() == 0) {
             if (widgetHasUMLObject(wt)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/umbrello-16.08.2/umbrello/umlwidgets/widgetbase.cpp 
new/umbrello-16.08.3/umbrello/umlwidgets/widgetbase.cpp
--- old/umbrello-16.08.2/umbrello/umlwidgets/widgetbase.cpp     2016-10-07 
01:13:32.000000000 +0200
+++ new/umbrello-16.08.3/umbrello/umlwidgets/widgetbase.cpp     2016-11-07 
13:02:12.000000000 +0100
@@ -53,6 +53,7 @@
     m_usesDiagramLineColor(true),
     m_usesDiagramLineWidth(true)
 {
+    Q_ASSERT(m_baseType > wt_MIN && m_baseType < wt_MAX);
     // Note: no virtual methods from derived classes available,
     // this operation need to be finished in derived class constructor.
     setLineColor(QColor("black"));
@@ -88,14 +89,25 @@
  */
 WidgetBase::WidgetType WidgetBase::baseType() const
 {
+    Q_ASSERT(m_baseType > wt_MIN && m_baseType < wt_MAX);
     return m_baseType;
 }
 
 /**
+ * Set property m_baseType. Used for types changing their types during runtime.
+ */
+void WidgetBase::setBaseType(const WidgetType& baseType)
+{
+    Q_ASSERT(baseType > wt_MIN && baseType < wt_MAX);
+    m_baseType = baseType;
+}
+
+/**
  * @return The type used for rtti as string.
  */
 QLatin1String WidgetBase::baseTypeStr() const
 {
+    Q_ASSERT(m_baseType > wt_MIN && m_baseType < wt_MAX);
     return QLatin1String(ENUM_NAME(WidgetBase, WidgetType, m_baseType));
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/umbrello-16.08.2/umbrello/umlwidgets/widgetbase.h 
new/umbrello-16.08.3/umbrello/umlwidgets/widgetbase.h
--- old/umbrello-16.08.2/umbrello/umlwidgets/widgetbase.h       2016-10-07 
01:13:32.000000000 +0200
+++ new/umbrello-16.08.3/umbrello/umlwidgets/widgetbase.h       2016-11-07 
13:02:12.000000000 +0100
@@ -41,7 +41,8 @@
 public:
     enum WidgetType
     {
-        wt_UMLWidget = 300,         // does not have UMLObject representation
+        wt_MIN = 299,               // lower bounds check value
+        wt_UMLWidget,               // does not have UMLObject representation
         wt_Actor,                   // has UMLObject representation
         wt_UseCase,                 // has UMLObject representation
         wt_Class,                   // has UMLObject representation
@@ -70,7 +71,8 @@
         wt_ObjectNode,
         wt_Region,
         wt_Category,                // has UMLObject representation
-        wt_Port                     // has UMLObject representation
+        wt_Port,                    // has UMLObject representation
+        wt_MAX                      // upper bounds check value
     };
 
     static QString toString(WidgetType wt);
@@ -86,6 +88,7 @@
     void setID(Uml::ID::Type id);
 
     WidgetType baseType() const;
+    void setBaseType(const WidgetType& baseType);
     QLatin1String baseTypeStr() const;
 
     virtual void setSelected(bool select);
@@ -156,7 +159,9 @@
 protected:
     virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
 
+private:
     WidgetType  m_baseType;  ///< Type of widget.
+protected:
     UMLScene   *m_scene;
     QPointer<UMLObject> m_umlObject;
     QString     m_Doc;   ///< Only used if m_umlObject is not set.


Reply via email to