OSDN Git Service

QmlDesigner.propertyEditor: unifying error messages for invalid nodes
authorThomas Hartmann <Thomas.Hartmann@nokia.com>
Wed, 28 Apr 2010 11:42:41 +0000 (13:42 +0200)
committerThomas Hartmann <Thomas.Hartmann@nokia.com>
Wed, 28 Apr 2010 12:07:11 +0000 (14:07 +0200)
The Navigator and the Property Editor now show the same error
message for invalid nodes

See: BAUHAUS-611

src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
src/plugins/qmldesigner/core/exceptions/invalididexception.cpp
src/plugins/qmldesigner/core/include/invalididexception.h
src/plugins/qmldesigner/core/model/modelnode.cpp

index 81c4d2c..25908d6 100644 (file)
@@ -272,14 +272,9 @@ void NavigatorTreeModel::handleChangedItem(QStandardItem *item)
     ItemRow itemRow = itemRowForNode(node);
     if (item == itemRow.idItem) {
         try {
-            if (ModelNode::isValidId(item->text()))
-                node.setId(item->text());
-            else {
-                QMessageBox::warning(0,"Invalid Id",tr("Invalid id.\nOnly alphanumeric characters and underscore allowed.\nIds must begin with a lowercase letter."));
-                item->setText(node.id());
-            }
-        } catch (InvalidIdException &) {
-            QMessageBox::warning(0,"Invalid Id",tr("Item id must be unique."));
+            node.setId(item->text());
+        } catch (InvalidIdException &e) {
+            QMessageBox::warning(0, tr("Invalid Id"), e.description());
             item->setText(node.id());
         }
     } else if (item == itemRow.visibilityItem) {
index e5b72e4..e0e0e4c 100644 (file)
@@ -166,7 +166,6 @@ void PropertyEditor::NodeType::setValue(const QmlObjectNode & fxObjectNode, cons
 void PropertyEditor::NodeType::setup(const QmlObjectNode &fxObjectNode, const QString &stateName, const QUrl &qmlSpecificsFile, PropertyEditor *propertyEditor)
 {
     if (!fxObjectNode.isValid()) {
-        qWarning() << "invalid node for setup";
         return;
     }
 
@@ -354,12 +353,10 @@ void PropertyEditor::changeValue(const QString &propertyName)
         const QString newId = value->value().toString();
 
         try {
-            if (ModelNode::isValidId(newId))
-                m_selectedNode.setId(newId);
-            else
-                value->setValue(m_selectedNode.id());
-        } catch (InvalidIdException &) {
+            m_selectedNode.setId(newId);
+        } catch (InvalidIdException &e) {
             value->setValue(m_selectedNode.id());
+            QMessageBox::warning(0, tr("Invalid Id"), e.description());
         }
 
         return;
index aec0ded..467c472 100644 (file)
@@ -33,8 +33,10 @@ namespace QmlDesigner {
 
 InvalidIdException::InvalidIdException(int line,
                                        const QString &function,
-                                       const QString &file):
-    InvalidArgumentException(line, function, file, "id")
+                                       const QString &file,
+                                       const QString &id,
+                                       bool duplicate) :
+    InvalidArgumentException(line, function, file, "id"), m_id(id), m_duplicate(duplicate)
 {
 }
 
@@ -42,4 +44,23 @@ QString InvalidIdException::type() const
 {
     return "InvalidIdException";
 }
+
+QString InvalidIdException::description() const
+{
+    if (m_duplicate)
+        return duplicateErrorMessage(m_id);
+
+    return invalidErrorMessage(m_id);
+}
+
+QString InvalidIdException::duplicateErrorMessage(const QString &id)
+{
+     return QObject::tr("Ids have to be unique: ") + id;
+}
+
+QString InvalidIdException::invalidErrorMessage(const QString &id)
+{
+    return QObject::tr("Invalid Id: ") + id + QObject::tr("\nOnly alphanumeric characters and underscore allowed.\nIds must begin with a lowercase letter.");
+}
+
 }
index 8bb7761..f9e3676 100644 (file)
@@ -39,9 +39,19 @@ class CORESHARED_EXPORT InvalidIdException : public InvalidArgumentException
 public:
     InvalidIdException(int line,
                        const QString &function,
-                       const QString &file);
+                       const QString &file,
+                       const QString &id,
+                       bool duplicate = false);
 
     QString type() const;
+    QString description() const;
+
+    static QString duplicateErrorMessage(const QString &id);
+    static QString invalidErrorMessage(const QString &id);
+
+private:
+    QString m_id;
+    bool m_duplicate;
 
 };
 
index 16e1a7f..ec8c6e3 100644 (file)
@@ -180,13 +180,13 @@ void ModelNode::setId(const QString& id)
     }
 
     if (!isValidId(id))
-        throw InvalidIdException(__LINE__, __FUNCTION__, __FILE__);
+        throw InvalidIdException(__LINE__, __FUNCTION__, __FILE__, id);
 
     if (id == ModelNode::id())
         return;
 
     if (view()->hasId(id))
-        throw InvalidIdException(__LINE__, __FUNCTION__, __FILE__);
+        throw InvalidIdException(__LINE__, __FUNCTION__, __FILE__, id, true);
 
     m_model.data()->m_d->changeNodeId(internalNode(), id);
 }