From 56a25fffa8d102abe2ca2cbf53e9fce43fce0995 Mon Sep 17 00:00:00 2001
From: Christiaan Janssen <christiaan.janssen@nokia.com>
Date: Mon, 8 Mar 2010 17:33:56 +0100
Subject: [PATCH] QmlDesigner.Navigator:  LineInput now covers the whole item
 row

---
 .../navigator/navigatortreemodel.cpp          | 21 +++++++++++----
 .../components/navigator/navigatortreemodel.h |  3 +++
 .../navigator/navigatortreeview.cpp           | 27 +++++++++++++++++++
 .../components/navigator/navigatortreeview.h  |  5 ++++
 4 files changed, 51 insertions(+), 5 deletions(-)

diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
index d415f967282..6515a004ba7 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
@@ -277,14 +277,11 @@ void NavigatorTreeModel::handleChangedItem(QStandardItem *item)
             if (ModelNode::isValidId(item->text()))
                 node.setId(item->text());
             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();
-
+                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."));
             item->setText(node.id());
         }
     } else if (item == itemRow.visibilityItem) {
@@ -456,6 +453,20 @@ bool NavigatorTreeModel::blockItemChangedSignal(bool block)
     return oldValue;
 }
 
+void NavigatorTreeModel::setId(const QModelIndex &index, const QString &id)
+{
+    ModelNode node = nodeForIndex(index);
+    ItemRow itemRow = itemRowForNode(node);
+    itemRow.idItem->setText(id);
+}
+
+void NavigatorTreeModel::setVisible(const QModelIndex &index, bool visible)
+{
+    ModelNode node = nodeForIndex(index);
+    ItemRow itemRow = itemRowForNode(node);
+    itemRow.visibilityItem->setCheckState(visible ? Qt::Checked : Qt::Unchecked);
+}
+
 
 }
 
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h
index bf86fb651ea..9c9d86bb09d 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h
@@ -107,6 +107,9 @@ public:
     void updateItemRow(const ModelNode &node);
     void updateItemRowOrder(const ModelNode &node);
 
+    void setId(const QModelIndex &index, const QString &id);
+    void setVisible(const QModelIndex &index, bool visible);
+
 private slots:
     void handleChangedItem(QStandardItem *item);
 
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
index ccf407eb39d..19fb8c6715a 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
@@ -36,6 +36,7 @@
 
 #include <nodeproperty.h>
 #include "metainfo.h"
+#include <QLineEdit>
 
 namespace QmlDesigner {
 
@@ -189,4 +190,30 @@ void IdItemDelegate::paint(QPainter *painter,
     painter->restore();
 }
 
+QWidget *IdItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+    return new QLineEdit(parent);
+}
+
+void IdItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
+{
+    ModelNode node = m_TreeModel->nodeForIndex(index);
+    QString value = node.id();
+
+    QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
+    lineEdit->setText(value);
+}
+
+void IdItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
+{
+    QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
+    m_TreeModel->setId(index,lineEdit->text());
+}
+
+void IdItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+    QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
+    lineEdit->setGeometry(option.rect);
+}
+
 }
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreeview.h b/src/plugins/qmldesigner/components/navigator/navigatortreeview.h
index 16ce396df9e..303c805c453 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreeview.h
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreeview.h
@@ -78,6 +78,11 @@ class IdItemDelegate : public QStyledItemDelegate
     void paint(QPainter *painter,
                const QStyleOptionViewItem &option, const QModelIndex &index) const;
 
+    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+    void setEditorData(QWidget *editor, const QModelIndex &index) const;
+    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
+    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+
     private:
     NavigatorTreeModel *m_TreeModel;
 };
-- 
GitLab