From 65a30b06af5f66205a1fe49720c6d529f88bc3f2 Mon Sep 17 00:00:00 2001
From: Lasse Holmstedt <lasse.holmstedt@nokia.com>
Date: Mon, 12 Apr 2010 12:29:13 +0200
Subject: [PATCH] Some more fixes to exception handling in bauhaus

Reviewed-by: thomas hartmann
---
 src/plugins/qmldesigner/core/exceptions/exception.cpp  |  2 +-
 .../core/exceptions/invalidargumentexception.cpp       | 10 ++++++++++
 .../core/include/invalidargumentexception.h            |  1 +
 src/plugins/qmldesigner/core/model/model.cpp           |  4 ++--
 src/plugins/qmldesigner/designmodewidget.cpp           |  4 +++-
 5 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/plugins/qmldesigner/core/exceptions/exception.cpp b/src/plugins/qmldesigner/core/exceptions/exception.cpp
index b4c89482db5..976e1bf2049 100644
--- a/src/plugins/qmldesigner/core/exceptions/exception.cpp
+++ b/src/plugins/qmldesigner/core/exceptions/exception.cpp
@@ -135,7 +135,7 @@ QString Exception::backTrace() const
 */
 QString Exception::description() const
 {
-    return QString();
+    return QString("file: %1, function: %2, line: %3").arg(m_file, m_function, QString::number(m_line));
 }
 
 /*!
diff --git a/src/plugins/qmldesigner/core/exceptions/invalidargumentexception.cpp b/src/plugins/qmldesigner/core/exceptions/invalidargumentexception.cpp
index 27f907fbf26..59c97a418c5 100644
--- a/src/plugins/qmldesigner/core/exceptions/invalidargumentexception.cpp
+++ b/src/plugins/qmldesigner/core/exceptions/invalidargumentexception.cpp
@@ -28,6 +28,7 @@
 **************************************************************************/
 
 #include "invalidargumentexception.h"
+#include <QString>
 
 /*!
 \class QmlDesigner::InvalidArgumentException
@@ -50,6 +51,15 @@ InvalidArgumentException::InvalidArgumentException(int line,
                                                    const QString &argument)
  : Exception(line, function, file), m_argument(argument)
 {
+
+}
+
+QString InvalidArgumentException::description() const
+{
+    if (function() == "createNode")
+        return QString(QObject::tr("Failed to create item of type %1")).arg(m_argument);
+
+    return Exception::description();
 }
 
 /*!
diff --git a/src/plugins/qmldesigner/core/include/invalidargumentexception.h b/src/plugins/qmldesigner/core/include/invalidargumentexception.h
index 108c31c393a..c6661509cb0 100644
--- a/src/plugins/qmldesigner/core/include/invalidargumentexception.h
+++ b/src/plugins/qmldesigner/core/include/invalidargumentexception.h
@@ -45,6 +45,7 @@ public:
 
     QString type() const;
     QString argument() const;
+    QString description() const;
 
 private:
     const QString m_argument;
diff --git a/src/plugins/qmldesigner/core/model/model.cpp b/src/plugins/qmldesigner/core/model/model.cpp
index d109030d85e..d3f6c2057e6 100644
--- a/src/plugins/qmldesigner/core/model/model.cpp
+++ b/src/plugins/qmldesigner/core/model/model.cpp
@@ -169,9 +169,9 @@ InternalNode::Pointer ModelPrivate::createNode(const QString &typeString,
                                                const QList<QPair<QString, QVariant> > &propertyList)
 {
     if (typeString.isEmpty())
-        throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, "typeString");
+        throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, tr("invalid type"));
     if (!m_metaInfo.nodeMetaInfo(typeString).isValid())
-        throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, "typeString");
+        throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, typeString);
 
     InternalNode::Pointer newInternalNodePointer = InternalNode::create(typeString, majorVersion, minorVersion);
 
diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp
index e9abc83860b..69c87605361 100644
--- a/src/plugins/qmldesigner/designmodewidget.cpp
+++ b/src/plugins/qmldesigner/designmodewidget.cpp
@@ -106,8 +106,10 @@ void DocumentWarningWidget::setError(const RewriterView::Error &error)
     QString str;
     if (error.type() == RewriterView::Error::ParseError) {
         str = tr("%3 (%1:%2)").arg(QString::number(error.line()), QString::number(error.column()), error.description());
+        m_goToError->show();
     }  else if (error.type() == RewriterView::Error::InternalError) {
-        str = tr("Internal error (%1)") .arg(error.description());
+        str = tr("Internal error (%1)").arg(error.description());
+        m_goToError->hide();
     }
 
     m_errorMessage->setText(str);
-- 
GitLab