From 125eb66b79f17868caab8e06faab95cf6229a672 Mon Sep 17 00:00:00 2001
From: Marco Bubke <marco.bubke@digia.com>
Date: Mon, 29 Jul 2013 14:57:37 +0200
Subject: [PATCH] QmlDesigner: Move generateNewId to AbstractView

Change-Id: I8753eae6c4f79967822003709e7cd35dbea4eeba
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
---
 .../designercore/include/abstractview.h       |  1 +
 .../designercore/include/modelnode.h          |  2 +-
 .../designercore/model/abstractview.cpp       | 14 ++++++++++++
 .../designercore/model/modelnode.cpp          | 15 +------------
 .../designercore/model/qmlitemnode.cpp        | 22 ++-----------------
 5 files changed, 19 insertions(+), 35 deletions(-)

diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h
index d29f3e4b6e8..695aa16826c 100644
--- a/src/plugins/qmldesigner/designercore/include/abstractview.h
+++ b/src/plugins/qmldesigner/designercore/include/abstractview.h
@@ -159,6 +159,7 @@ public:
 
     ModelNode modelNodeForId(const QString &id);
     bool hasId(const QString &id) const;
+    QString generateNewId(const QString prefixName) const;
 
     ModelNode modelNodeForInternalId(qint32 internalId);
     bool hasModelNodeForInternalId(qint32 internalId) const;
diff --git a/src/plugins/qmldesigner/designercore/include/modelnode.h b/src/plugins/qmldesigner/designercore/include/modelnode.h
index 63b63c4ad5f..5f6eff7f00b 100644
--- a/src/plugins/qmldesigner/designercore/include/modelnode.h
+++ b/src/plugins/qmldesigner/designercore/include/modelnode.h
@@ -185,7 +185,7 @@ public:
 
 private: // functions
     Internal::InternalNodePointer internalNode() const;
-    QString generateNewId() const;
+
 
 private: // variables
     Internal::InternalNodePointer m_internalNode;
diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp
index 4e8eac4e9a1..7a29ce0d8c8 100644
--- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp
@@ -375,6 +375,20 @@ bool AbstractView::hasId(const QString &id) const
     return model()->d->hasId(id);
 }
 
+QString AbstractView::generateNewId(const QString prefixName) const
+{
+    int counter = 1;
+
+    QString newId = QString("%1%2").arg(prefixName.toLower()).arg(counter);
+
+    while (hasId(newId)) {
+        counter += 1;
+        newId = QString("%1%2").arg(prefixName.toLower()).arg(counter);
+    }
+
+    return newId;
+}
+
 ModelNode AbstractView::modelNodeForInternalId(qint32 internalId)
 {
      return ModelNode(model()->d->nodeForInternalId(internalId), model(), this);
diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
index 06a016f4fed..a46fcd898c7 100644
--- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
@@ -125,19 +125,6 @@ ModelNode::~ModelNode()
 {
 }
 
-QString ModelNode::generateNewId() const
-{
-    int counter = 1;
-    QString newId = QString("%1%2").arg(QString::fromUtf8(simplifiedTypeName()).toLower()).arg(counter);
-
-    while (view()->hasId(newId)) {
-        counter += 1;
-        newId = QString("%1%2").arg(QString::fromUtf8(simplifiedTypeName()).toLower()).arg(counter);
-    }
-
-    return newId;
-}
-
 /*! \brief returns the name of node which is a short cut to a property like objectName
 \return name of the node
 */
@@ -152,7 +139,7 @@ QString ModelNode::id() const
 QString ModelNode::validId()
 {
     if (id().isEmpty())
-        setId(generateNewId());
+        setId(view()->generateNewId(QString::fromUtf8(simplifiedTypeName())));
 
     return id();
 }
diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
index 8938c9a788b..fd1e2c67ae3 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
@@ -147,17 +147,7 @@ QmlItemNode QmlItemNode::createQmlItemNode(AbstractView *view, const ItemLibrary
         if (!newQmlItemNode.isValid())
             return newQmlItemNode;
 
-        QString id;
-        int i = 1;
-        QString name(itemLibraryEntry.name().toLower());
-        //remove forbidden characters
-        name.replace(QRegExp(QLatin1String("[^a-zA-Z0-9_]")), QLatin1String("_"));
-        do {
-            id = name + QString::number(i);
-            i++;
-        } while (view->hasId(id)); //If the name already exists count upwards
-
-        newQmlItemNode.setId(id);
+        newQmlItemNode.setId(view->generateNewId("image"));
 
         if (!QmlModelState(view->actualStateNode()).isBaseState()) {
             newQmlItemNode.modelNode().variantProperty("opacity").setValue(0);
@@ -224,16 +214,8 @@ QmlItemNode QmlItemNode::createQmlItemNodeFromImage(AbstractView *view, const QS
 
         Q_ASSERT(newQmlItemNode.isValid());
 
-        QString id;
-        int i = 1;
-        QString name("image");
-        name.remove(QLatin1Char(' '));
-        do {
-            id = name + QString::number(i);
-            i++;
-        } while (view->hasId(id)); //If the name already exists count upwards
+        newQmlItemNode.setId(view->generateNewId("image"));
 
-        newQmlItemNode.setId(id);
         if (!QmlModelState(view->actualStateNode()).isBaseState()) {
             newQmlItemNode.modelNode().variantProperty("opacity").setValue(0);
             newQmlItemNode.setVariantProperty("opacity", 1);
-- 
GitLab