From 913410c66ab5855d1a5930950fed717fca936e7a Mon Sep 17 00:00:00 2001
From: Christiaan Janssen <christiaan.janssen@nokia.com>
Date: Fri, 29 Jan 2010 12:10:08 +0100
Subject: [PATCH] QmlDesigner.navigator:  New and cleaner look

---
 .../navigator/navigatortreemodel.cpp          |  29 ++++--
 .../components/navigator/navigatortreemodel.h |  26 ++++-
 .../components/navigator/navigatorview.cpp    |  89 ++++++++++++++++++
 .../components/navigator/navigatorwidget.cpp  |   5 +
 .../resources/images/eye_crossed.png          | Bin 0 -> 715 bytes
 .../components/resources/images/eye_open.png  | Bin 0 -> 587 bytes
 .../components/resources/images/hole.png      | Bin 0 -> 288 bytes
 .../components/resources/images/lock.png      | Bin 0 -> 562 bytes
 .../components/resources/resources.qrc        |   4 +
 9 files changed, 138 insertions(+), 15 deletions(-)
 create mode 100644 src/plugins/qmldesigner/components/resources/images/eye_crossed.png
 create mode 100644 src/plugins/qmldesigner/components/resources/images/eye_open.png
 create mode 100644 src/plugins/qmldesigner/components/resources/images/hole.png
 create mode 100644 src/plugins/qmldesigner/components/resources/images/lock.png

diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
index 959ed213b58..3c3066d6d7e 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
@@ -45,9 +45,11 @@ NavigatorTreeModel::NavigatorTreeModel(QObject *parent)
 {
     invisibleRootItem()->setFlags(Qt::NoItemFlags);
 
-    setHorizontalHeaderItem(0,  new QStandardItem(tr("Name")));
-    setHorizontalHeaderItem(1,  new QStandardItem(tr("Type")));
-    setHorizontalHeaderItem(2,  new QStandardItem(tr("Show in Editor")));
+    #ifdef _LOCK_ITEMS_
+    setColumnCount(3);
+    #else
+    setColumnCount(2);
+    #endif
 
     setSupportedDragActions(Qt::LinkAction);
 
@@ -189,11 +191,14 @@ NavigatorTreeModel::ItemRow NavigatorTreeModel::createItemRow(const ModelNode &n
     idItem->setEditable(true);
     idItem->setData(hash, Qt::UserRole);
 
-    QStandardItem *typeItem = new QStandardItem;
-    typeItem->setDragEnabled(true);
-    idItem->setDropEnabled(node.metaInfo().isContainer());
-    typeItem->setEditable(false);
-    typeItem->setData(hash, Qt::UserRole);
+    #ifdef _LOCK_ITEMS_
+    QStandardItem *lockItem = new QStandardItem;
+    lockItem->setDragEnabled(true);
+    lockItem->setDropEnabled(node.metaInfo().isContainer());
+    lockItem->setEditable(false);
+    lockItem->setCheckable(true);
+    lockItem->setData(hash, Qt::UserRole);
+    #endif
 
     QStandardItem *visibilityItem = new QStandardItem;
     visibilityItem->setDropEnabled(node.metaInfo().isContainer());
@@ -201,7 +206,11 @@ NavigatorTreeModel::ItemRow NavigatorTreeModel::createItemRow(const ModelNode &n
     visibilityItem->setEditable(false);
     visibilityItem->setData(hash, Qt::UserRole);
 
-    return ItemRow(idItem, typeItem, visibilityItem);
+    #ifdef _LOCK_ITEMS_
+    return ItemRow(idItem, lockItem, visibilityItem);
+    #else
+    return ItemRow(idItem, visibilityItem);
+    #endif
 }
 
 void NavigatorTreeModel::updateItemRow(const ModelNode &node, ItemRow items)
@@ -209,7 +218,7 @@ void NavigatorTreeModel::updateItemRow(const ModelNode &node, ItemRow items)
     bool blockSignal = blockItemChangedSignal(true);
 
     items.idItem->setText(node.id());
-    items.typeItem->setText(node.simplifiedTypeName());
+    items.idItem->setToolTip(!node.id().isEmpty()?node.simplifiedTypeName():"");
     items.visibilityItem->setCheckState(node.auxiliaryData("invisible").toBool() ? Qt::Unchecked : Qt::Checked);
 
     blockItemChangedSignal(blockSignal);
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h
index f03614a1bfe..06287f3a3dd 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h
@@ -46,20 +46,36 @@ class NavigatorTreeModel : public QStandardItemModel
 {
     Q_OBJECT
 
+#ifdef _LOCK_ITEMS_
     struct ItemRow {
         ItemRow()
-            : idItem(0), typeItem(0), visibilityItem(0) {}
-        ItemRow(QStandardItem *id, QStandardItem *type, QStandardItem *visibility)
-            : idItem(id), typeItem(type), visibilityItem(visibility) {}
+            : idItem(0), lockItem(0), visibilityItem(0) {}
+        ItemRow(QStandardItem *id, QStandardItem *lock, QStandardItem *visibility)
+            : idItem(id), lockItem(lock), visibilityItem(visibility) {}
 
         QList<QStandardItem*> toList() const {
-            return QList<QStandardItem*>() << idItem << typeItem << visibilityItem;
+            return QList<QStandardItem*>() << idItem << lockItem << visibilityItem;
         }
 
         QStandardItem *idItem;
-        QStandardItem *typeItem;
+        QStandardItem *lockItem;
         QStandardItem *visibilityItem;
     };
+#else
+    struct ItemRow {
+        ItemRow()
+            : idItem(0), visibilityItem(0) {}
+        ItemRow(QStandardItem *id, QStandardItem *visibility)
+            : idItem(id), visibilityItem(visibility) {}
+
+        QList<QStandardItem*> toList() const {
+            return QList<QStandardItem*>() << idItem << visibilityItem;
+        }
+
+        QStandardItem *idItem;
+        QStandardItem *visibilityItem;
+    };
+#endif
 
 public:
     NavigatorTreeModel(QObject *parent = 0);
diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
index 80a5fad9c90..57093069f62 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
@@ -32,10 +32,80 @@
 #include "navigatorwidget.h"
 
 #include <nodeproperty.h>
+#include <QStyledItemDelegate>
 
+#include <QPainter>
 
 namespace QmlDesigner {
 
+    class IconCheckboxItemDelegate : public QStyledItemDelegate
+    {
+        public:
+        IconCheckboxItemDelegate(QObject *parent = 0, QString checkedPixmapURL="", QString uncheckedPixmapURL="", NavigatorTreeModel *treeModel=NULL)
+            : QStyledItemDelegate(parent),offPix(uncheckedPixmapURL),onPix(checkedPixmapURL),m_TreeModel(treeModel)
+        {}
+
+        QSize sizeHint(const QStyleOptionViewItem &option,
+                       const QModelIndex &index) const { return QSize(15,17); }
+
+        void paint(QPainter *painter,
+                   const QStyleOptionViewItem &option, const QModelIndex &index) const
+        {
+            painter->save();
+            if (option.state & QStyle::State_Selected)
+                painter->fillRect(option.rect, option.palette.highlight());
+            bool isChecked= (m_TreeModel->itemFromIndex(index)->checkState() == Qt::Checked);
+            if (isChecked)
+                painter->drawPixmap(option.rect.x()+2,option.rect.y()+1,onPix);
+            else
+                painter->drawPixmap(option.rect.x()+2,option.rect.y()+1,offPix);
+
+            painter->restore();
+        }
+
+        private:
+        NavigatorTreeModel *m_TreeModel;
+        QPixmap offPix;
+        QPixmap onPix;
+    };
+
+    class IdItemDelegate : public QStyledItemDelegate {
+        public:
+        IdItemDelegate(QObject *parent=0, NavigatorTreeModel *treeModel=NULL) : QStyledItemDelegate(parent),m_TreeModel(treeModel) {}
+
+        void paint(QPainter *painter,
+                   const QStyleOptionViewItem &option, const QModelIndex &index) const
+        {
+            painter->save();
+            if (option.state & QStyle::State_Selected)
+                painter->fillRect(option.rect, option.palette.highlight());
+
+            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(),option.rect.y(),pixmap);
+
+            QString myString = node.id();
+            if (myString.isEmpty())
+                myString = node.simplifiedTypeName();
+            else
+            {
+                QFont font = painter->font();
+                font.setBold(true);
+                painter->setFont(font);
+            }
+            painter->drawText(option.rect.bottomLeft()+QPoint(4,-4),myString);
+
+            painter->restore();
+        }
+
+        private:
+        NavigatorTreeModel *m_TreeModel;
+    };
+
+
 NavigatorView::NavigatorView(QObject* parent) :
         QmlModelView(parent),
         m_blockSelectionChangedSignal(false),
@@ -46,6 +116,25 @@ NavigatorView::NavigatorView(QObject* parent) :
 
     connect(treeWidget()->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(changeSelection(QItemSelection,QItemSelection)));
     treeWidget()->setIndentation(treeWidget()->indentation() * 0.5);
+
+    IdItemDelegate *idDelegate = new IdItemDelegate(this,m_treeModel.data());
+    IconCheckboxItemDelegate *showDelegate = new IconCheckboxItemDelegate(this,":/qmldesigner/images/eye_open.png",
+                                                          ":/qmldesigner/images/eye_crossed.png",m_treeModel.data());
+
+#ifdef _LOCK_ITEMS_
+    IconCheckboxItemDelegate *lockDelegate = new IconCheckboxItemDelegate(this,":/qmldesigner/images/lock.png",
+                                                          ":/qmldesigner/images/hole.png",m_treeModel.data());
+#endif
+
+
+    treeWidget()->setItemDelegateForColumn(0,idDelegate);
+#ifdef _LOCK_ITEMS_
+    treeWidget()->setItemDelegateForColumn(1,lockDelegate);
+    treeWidget()->setItemDelegateForColumn(2,showDelegate);
+#else
+    treeWidget()->setItemDelegateForColumn(1,showDelegate);
+#endif
+
 }
 
 NavigatorView::~NavigatorView()
diff --git a/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp b/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp
index 761b256c610..58567d53f66 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp
@@ -79,6 +79,11 @@ void NavigatorWidget::setTreeModel(QAbstractItemModel* model)
 {
     m_treeView->setModel(model);
     m_treeView->header()->setResizeMode(0, QHeaderView::Stretch);
+    m_treeView->header()->resizeSection(1,20);
+#ifdef _LOCK_ITEMS_
+    m_treeView->header()->resizeSection(2,20);
+#endif
+    m_treeView->setHeaderHidden(true);
 }
 
 QTreeView *NavigatorWidget::treeView()
diff --git a/src/plugins/qmldesigner/components/resources/images/eye_crossed.png b/src/plugins/qmldesigner/components/resources/images/eye_crossed.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8729ca200d5edd15f3cc7f16cd39159515ed08f
GIT binary patch
literal 715
zcmV;+0yO=JP)<h;3K|Lk000e1NJLTq000jF000pP1^@s60t)t_00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igG~
z3>_aMpv?0C000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0006eNkl<Z
zILp<NJxdz_0EVAjF6P?vOmcU@<fsXjLZyjRaS@7310t?MlcjW#ZtgCkf`7puP}{-w
z2V`(kGH7scP&9~0ykw~#$>rlbIWN6#qC>luzSH{-&pSQvuM&7X78e)&NF+ii6vDP`
zJkP_nZLY7c+1S_!{1IMWUiK@M3e9E{*L6`81xb=nRTaZ9kR%DyG+AF?4?KaFmX`e8
z-CYDhU}9ndfOfl$>$+H$MYr2!U|@iekr8^m9&2lB0RUlse%{~T-zS|;v#_v$EX#<Z
zNGg>=(=;y6&PXK^WHK2_r4p^HD?S$rK0qL!&-<#XGCMm9K(SavQ4|gj59u8rlMzKa
zw#}PDfp)u1y;ww%WvbyYqGeg+aycBw0bp-$k7P25b#cMFzCJ!qPt&q(zHDv+@M&g-
zh%EDUYm1;LiYvOVqiGtR=ixXGrfH(;I%2KHYr`O}D7;E0c{@BzTv2GWT9i*t2#$`9
zuI%jWplKS>XcWUR=yW<%Yc=kCAG1>7rLGf~WuA*7KN}6cZEs@@4H2wXtE*#UV=Luy
znR>krz~JB@larIg1cBT0bFzs9&w@dG&%?gG<)~igE*gC*$<)-8e{*w#>$>zDhxe{a
zetevGe?M2<F2F<oesF;J7%r7c4`*|^oF6$orC$)ZY&Q9EbOgYMY!)RPCL&1${^ssn
xHtWA=H0a#l(@LlL<@>};6D1VFjK%m*^Bc45-#5<><!S%`002ovPDHLkV1jbTELi{m

literal 0
HcmV?d00001

diff --git a/src/plugins/qmldesigner/components/resources/images/eye_open.png b/src/plugins/qmldesigner/components/resources/images/eye_open.png
new file mode 100644
index 0000000000000000000000000000000000000000..79dc3b2184fdbf90db7941719eec76892732ec8b
GIT binary patch
literal 587
zcmV-R0<`^!P)<h;3K|Lk000e1NJLTq000jF000pP1^@s60t)t_00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igG~
z3?2dUf}&FZ000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0004|Nkl<Z
zILqylyQ<<~6oo%UMGzJIo1=K`>_h}R-@t$mU}<4vZzDFof-hj>Td1gDz-I7r5DN(r
z8!;rPAu%X9#emFVm}Z)3W>tF^-(H)=f`28?uS>h#cB9cKe!m~nG<iOsn5N0)a$ztS
zc>V}?yIps;+o9_^j^hvxhY1FQ#9}cLi3Gu55LH#__xql2aHrF87mEd6ua{D(1i<xr
z#c>=A!{C0u6NyB~=kvT?FM7S62f*8CG~DHKNhXt_)oKw6h4A@&q|<4H5U8q3`s0Io
zz0PblL)Z29+uqylMlP45R;vMUI-Pht9?a)+#^W(U2!4Ei0?=$WQB@U5l3W0<VHgyP
zMJ&t0vMgj-X0zFFKA*pZV_6mek|eQSuYWo#io$-s$F^;3+on(`plKRH2!s&t*)R+Y
z!(cQTy$|~0@i@cbkk{))KA)#tF7tRiI2;ZD2qCCet301irqe01ETbrj=bd(?QgM&R
zBiU@0csx!vn<bS>y&aCnBdgVl?RNVHe=A9)QgJm+!*Lt}fdBxG;{cFMCYeko9{%g^
Z^#yU7!LWvXEQSC8002ovPDHLkV1i<*@nir1

literal 0
HcmV?d00001

diff --git a/src/plugins/qmldesigner/components/resources/images/hole.png b/src/plugins/qmldesigner/components/resources/images/hole.png
new file mode 100644
index 0000000000000000000000000000000000000000..0f276682011b3af8e538cf348a12fe308c412098
GIT binary patch
literal 288
zcmeAS@N?(olHy`uVBq!ia0vp@KrG0?1|-@3tIYvYjKx9jP7LeL$-D%KC3(BMF#HF>
z1$&oI28wVNctjR6FmMZlFeAgPITAoY_7YEDSN2<sGCZ>E24_N+0)-??Tq8=H^K)}k
z^GX<;i&7IyQd1PlGfOfQ+&z5*!W;R-fr_d<T^vI+&cB_wk(XIffaSek!LPQAgDW$e
zR%I|Pk7xONV4>}DF}}D>GXGju&&=q|t84$RxbzFlg=ce?ta|cp=l6fVN>ch6wg@oE
z9uIWlc=9f{eBUBVbw-UdHB1_5Zqp~On$!`(z%RJc@Yw4UcQ?<xD6x3m){dE<Yya9;
aGKb7H`NwzR)M21A7(8A5T-G@yGywq2eP-(b

literal 0
HcmV?d00001

diff --git a/src/plugins/qmldesigner/components/resources/images/lock.png b/src/plugins/qmldesigner/components/resources/images/lock.png
new file mode 100644
index 0000000000000000000000000000000000000000..de043938133a98706b58e9df09c83ecaec0a290a
GIT binary patch
literal 562
zcmV-20?qx2P)<h;3K|Lk000e1NJLTq000dD000pP1^@s62LC3U00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igG~
z3^g7J`clsT000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0004vNkl<Z
zD9@FWy^8Wc6o#LyaYIn7ECm~}(F6n$4On>(UPtc8D-i@C7Fw!EsuWr%h(8z%nPg^*
zUGwc9F5e3SGo0t)Fmpz8U6=1!tybB-(P;drzkEJ;o<|S_0P3-VAYe9|eUbFf!UssJ
z)ye?h_ti&Ta~$WNG@s7_)L<~caU4#kQzrHMeLT-&JRYmXVxhI$?W~isZJTPf%5*x#
z_kE%$;`Q~Fdc97qR>QV!Hk*wCG#%i4K4V!H+wB(5^GK3}X0yq9y=K4PV;BaOWo37J
z0T4nEh9Q^Bh3oZ7x7*c<#iG{fbhJ2*IUbLMVTcd{0L^t>CX<QE<#PO$G)*a&%V@n`
zPYs7dDwWEg(&2DmG#a7DaZHjV*+7+2zY0nzOw+_LjQ7_I!|*AbrYS-QZnqm!%6I9z
zAf+Tp5`+*4Ay7(X>&uULz)=(-gg{D}b$Y-*q&SYb-|tW1M@`S?^XzszOw;@ol2VeU
zDM~5gI7SG8UMLh;E|=Nho<-MnN~IDypz)u113RVs0I@O0vj6}907*qoM6N<$f~U0S
AVgLXD

literal 0
HcmV?d00001

diff --git a/src/plugins/qmldesigner/components/resources/resources.qrc b/src/plugins/qmldesigner/components/resources/resources.qrc
index 9b5bf928cee..86f37f21124 100644
--- a/src/plugins/qmldesigner/components/resources/resources.qrc
+++ b/src/plugins/qmldesigner/components/resources/resources.qrc
@@ -10,6 +10,10 @@
         <file>images/checkbox_unchecked.png</file>
         <file>images/checkbox_unchecked_hover.png</file>
         <file>images/checkbox_unchecked_pressed.png</file>
+	<file>images/eye_open.png</file>
+	<file>images/eye_crossed.png</file>
+	<file>images/lock.png</file>
+	<file>images/hole.png</file>
         <file>images/down_arrow.png</file>
         <file>images/down_arrow_disabled.png</file>
         <file>images/frame.png</file>
-- 
GitLab