From 913410c66ab5855d1a5930950fed717fca936e7a Mon Sep 17 00:00:00 2001 From: Christiaan Janssen 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 toList() const { - return QList() << idItem << typeItem << visibilityItem; + return QList() << 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 toList() const { + return QList() << 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 +#include +#include 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 zcmeAS@N?(olHy`uVBq!ia0y~yVBlw9U=ZYBV_;xl;`+9bfq{XsILO_JVcj{ImkbOH zY)RhkE)4%caKYZ?lNlHoI14-?iy0WWg+Z8+Vb&Z81_lQ95>H=O_FIfHJhJl23(kCI zU|^6eag8W(&d<$F%`0JWE=o--Nlj5G&n(GMaQE~L2yf&QXJBAb^K@|xu{eEolC8Hi zBSYK#7`8(Oh`&%YAD;?`+8TzG}rC7Qxg&zCQcNr+AEixoz2LQSXX!N{{8#vbNx1N*wCPJ zx?_=t)>NmT%(S)+ozJD&-3v6jw0EsroGCT$`9ll7Wtod!StYGKmVH=ZoyHz7wMuInpP0am zEm2ea{W$vi`qsU9^JYP&)Wr;u!v-%(tU|I)-_^)(4tltBo$&P3dEH9((!Bd}^OJdb z1=obFUY(qrto^iTX4PK40}mc3OrAXX2utJb&&8WMSyE{zx1kz@9= zu!QA6dybf@jGB@s%fDyuV$5Fe&oFs$=l*4{d_Ofx*+&&t;ucLK6UT$1GU@ 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 zcmeAS@N?(olHy`uVBq!ia0y~yVBlw9U=ZYBV_;xl;`+9bfq{XsILO_JVcj{ImkbOH zY)RhkE)4%caKYZ?lNlHoI14-?iy0WWg+Z8+Vb&Z81_lQ95>H=O_FIfHJaUYmnid5! zFfd4#xJHyX=jZ08=9Mrw7o{eaq^2m8XO?6rxO@5rgg5euGcYhN^K@|xu{iy9((YA{ z5=2_aSqp~?zH zLk-KL4QCQ(q|M4q3#}HvA2<7GQ@!f>_1?ShmMy-hQMX_IvPq@g{29wmJ}pW#kf`{_ zQNBC2eEaQ%udVtX3-GmbvNaz`G8F1$IhY_28v644?|JzJ%P$v-ceBQ=pB}W5<-pgf zqlGd&hac4K7w&X9@%;0iIQ^=<^VkpE&M>+2w8&F!^1`cGf?Ta1e%36xoY^9;$x2uojB@h>X&CUKXISAXCbT zqebBTO#>dD!wDu*d-;Do`eo`eZ2Zh-t4{UWE8BNmdG*za{(W1{Iq69xjw&YGh#O od(1GwM{TB$n%uwF@4vDZ&N{fEtyZUvfq{X+)78&qol`;+0Ai}~WB>pF 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@3=9l{9Bd2>3~c|^<}ffYFct^7J29*~C-V{{mgMd3 z!tfsi7wla=nSp_Uv%n*=n1O*?7=#%aX3ddcU|?V`@$_|Nzr`rSBg<}ZCS)lC1A}CV zYeb22er|4RUI~M9QEFmIYKlU6W=V#EyQgnJcq5-U0|P^~r;B5V#`(7sH}Wzo3b4HQ zEBMuxad2g3)2a-nX{jxd3EjI6_gTe~DWM4f%zb9- 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 zcmeAS@N?(olHy`uVBq!ia0vp@3=9l{9Bd2>3~c|^<}ffYFct^7J29*~C-V{{mgMd3 z!tfsi7wla=nSp_Uv%n*=n1O*?7=#%aX3ddcU|?V`@$_|Nzr`rSV=Bk_E9g7}1A}CV zYeb22er|4RUI~M9QEFmIYKlU6W=V#EyQgnJcq5-U0|R5Pr;B5V#`&p}_I7=85NVsg zrqDTHjSj2y#)~X0g1ixx{BiE@PG}3VD2hd`@>nGjrO{z8!80=@tvmMfTY0_v+|0&v zo&s~6p;nl__g#@$NwG+RbKg8~_`syi$``@p+ z#}>;xpKmh%JmZxFg9C*!e#?W^zW%PYIiGAJxB6((!mYR8u9>_kcXrm+QzceMzt=9( zc=Yw_)T+IHYr_t2%Qc(b%VZ+^pvEpaQtb9yvGbojCbgt(K3TOlZU6mb3ASmespZv- z0!{*LiqlWGzW(a9{r1(aql>P+EZJhwXDQd;lGq`@#BjDWR&8?Usi#GMrkeO_PCuQo zH_o58-C1kusri>479^NREj(W6GfCy9!_=VtTwaaCNLovWB_4VogiUWZniY*RaGfS%u*e|i@+j;-J|3i1*^UpuODYN#u z{6}~ 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 @@ images/checkbox_unchecked.png images/checkbox_unchecked_hover.png images/checkbox_unchecked_pressed.png + images/eye_open.png + images/eye_crossed.png + images/lock.png + images/hole.png images/down_arrow.png images/down_arrow_disabled.png images/frame.png