From bcc7561d50a7a15a47702cfeb037c7d563984d9c Mon Sep 17 00:00:00 2001
From: Christiaan Janssen <christiaan.janssen@nokia.com>
Date: Tue, 9 Feb 2010 17:20:40 +0100
Subject: [PATCH] QmlDesigner.Navigator:  Icons and error message on invalid id

---
 .../navigator/navigatortreemodel.cpp          |  9 +++++-
 .../navigator/navigatortreeview.cpp           | 31 ++++++++++++-------
 2 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
index 3f72e1f9aa7..654b05a8b77 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
@@ -36,6 +36,7 @@
 #include <invalididexception.h>
 
 #include <QMimeData>
+#include <QMessageBox>
 
 namespace QmlDesigner {
 
@@ -272,8 +273,14 @@ void NavigatorTreeModel::handleChangedItem(QStandardItem *item)
         try {
             if (ModelNode::isValidId(item->text()))
                 node.setId(item->text());
-            else
+            else {
+                QMessageBox errorDialog;
+                errorDialog.setModal(true);
+                errorDialog.setText(tr("Invalid id.\nOnly alphanumeric characters and underscore allowed.\nIds must begin with a lowercase letter."));
+                errorDialog.exec();
+
                 item->setText(node.id());
+            }
         } catch (InvalidIdException &) {
             item->setText(node.id());
         }
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
index f4a5feb936a..6c6defb53fc 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
@@ -44,7 +44,7 @@ QSize IconCheckboxItemDelegate::sizeHint(const QStyleOptionViewItem &option,
 {
     Q_UNUSED(option);
     Q_UNUSED(index);
-    return QSize(15,17);
+    return QSize(15,21);
 }
 
 void IconCheckboxItemDelegate::paint(QPainter *painter,
@@ -63,10 +63,6 @@ void IconCheckboxItemDelegate::paint(QPainter *painter,
     else
         painter->drawPixmap(option.rect.x()+2,option.rect.y()+1,offPix);
 
-    painter->setOpacity(1.0);
-    painter->setPen(QColor(_separator_line_color_));
-    painter->drawLine(option.rect.topLeft(),option.rect.bottomLeft());
-
     painter->restore();
 }
 
@@ -81,19 +77,32 @@ void IdItemDelegate::paint(QPainter *painter,
 
     ModelNode node = m_TreeModel->nodeForIndex(index);
 
-    //            QIcon icon=node.metaInfo().icon();
-    //            if (icon.isNull()) icon = QIcon(":/ItemLibrary/images/default-icon.png");
-    //            QPixmap pixmap = icon.pixmap(option.rect.width(),option.rect.height());
-    //            painter->drawPixmap(option.rect.x()+1,option.rect.y(),pixmap);
+    QIcon icon=node.metaInfo().icon();
+    if (icon.isNull()) icon = QIcon(":/ItemLibrary/images/default-icon.png");
+    QPixmap pixmap = icon.pixmap(option.rect.width(),option.rect.height()-4);
+    painter->drawPixmap(option.rect.x()+5,option.rect.y()+2,pixmap);
 
     QString myString = node.id();
     if (myString.isEmpty())
         myString = node.simplifiedTypeName();
 
+    // Check text length does not exceed available space
+    int extraSpace=12+pixmap.width();
+    QFontMetrics metric(painter->fontMetrics());
+    if (painter->fontMetrics().boundingRect(myString).width() > option.rect.width()-extraSpace)
+    {
+        QString origString(myString);
+        int cutpoint=origString.length()/2;
+        while (painter->fontMetrics().boundingRect(myString).width() > option.rect.width()-extraSpace)
+        {
+            cutpoint--;
+            myString = origString.left(cutpoint)+QLatin1String("...")+origString.right(cutpoint);
+        }
+    }
+
     if (m_TreeModel->isNodeInvisible( index ))
         painter->setOpacity(0.5);
-    //            painter->drawText(option.rect.bottomLeft()+QPoint(4+pixmap.width(),-4),myString);
-    painter->drawText(option.rect.bottomLeft()+QPoint(4,-4),myString);
+    painter->drawText(option.rect.bottomLeft()+QPoint(8+pixmap.width(),-4),myString);
 
     painter->restore();
 }
-- 
GitLab