diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp index d415f9672822b5651cd99a289361408b619c7045..6515a004ba7702a96b2c72c9d38998feeec2aeb3 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 bf86fb651eae52e9fbab4c82403284710ab8102c..9c9d86bb09d6a997639614a28a684840ce88b34c 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 ccf407eb39d93f81e853e0cedbac9136a27fa9c0..19fb8c6715ad9b71e60d03b3c0de3831c4d99d74 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 16ce396df9e851d9a2c2fbedcc0dc1455072debb..303c805c453756903cd11b20eafe317bf55caa70 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; };