From: Thomas Hartmann Date: Wed, 30 Mar 2011 10:21:06 +0000 (+0200) Subject: QmlDesigner: fix for duplicate ids X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=b5c1bf6ad5e2219d4ca2b89d38480e29d761166a;p=qt-creator-jp%2Fqt-creator-jp.git QmlDesigner: fix for duplicate ids Duplicate ids for not handled 100% correctly in the property editor and in the navigator. Reviewed-by: Kai Koehne --- diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp index 7e22888a42..f9af9ad57f 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp @@ -315,7 +315,7 @@ void NavigatorTreeModel::handleChangedItem(QStandardItem *item) ItemRow itemRow = itemRowForNode(node); if (item == itemRow.idItem) { - if (node.isValidId(item->text())) { + if (node.isValidId(item->text()) && !node.view()->modelNodeForId(item->text()).isValid()) { if (node.id().isEmpty() || item->text().isEmpty()) { //no id try { node.setId(item->text()); @@ -327,8 +327,14 @@ void NavigatorTreeModel::handleChangedItem(QStandardItem *item) node.view()->rewriterView()->renameId(node.id(), item->text()); } } else { - QMessageBox::warning(0, tr("Invalid Id"), tr("%1 is an invalid id").arg(item->text())); - item->setText(node.id()); + + if (!node.isValidId(item->text())) + QMessageBox::warning(0, tr("Invalid Id"), tr("%1 is an invalid id").arg(item->text())); + else + QMessageBox::warning(0, tr("Invalid Id"), tr("%1 already exists").arg(item->text())); + bool blockSingals = blockItemChangedSignal(true); + item->setText(node.id()); + blockItemChangedSignal(blockSingals); } } else if (item == itemRow.visibilityItem) { bool invisible = (item->checkState() == Qt::Unchecked); diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp index 8b13aacbe6..d67c8ea27d 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp @@ -368,12 +368,17 @@ void PropertyEditor::changeValue(const QString &propertyName) PropertyEditorValue *value = qobject_cast(QDeclarativeMetaType::toQObject(m_currentType->m_backendValuesPropertyMap.value(propertyName))); const QString newId = value->value().toString(); - if (m_selectedNode.isValidId(newId)) { + if (newId == m_selectedNode.id()) + return; + + if (m_selectedNode.isValidId(newId) && !modelNodeForId(newId).isValid() ) { if (m_selectedNode.id().isEmpty() || newId.isEmpty()) { //no id try { m_selectedNode.setId(newId); } catch (InvalidIdException &e) { //better save then sorry + m_locked = true; value->setValue(m_selectedNode.id()); + m_locked = false; QMessageBox::warning(0, tr("Invalid Id"), e.description()); } } else { //there is already an id, so we refactor @@ -381,8 +386,13 @@ void PropertyEditor::changeValue(const QString &propertyName) rewriterView()->renameId(m_selectedNode.id(), newId); } } else { + m_locked = true; value->setValue(m_selectedNode.id()); - QMessageBox::warning(0, tr("Invalid Id"), tr("%1 is an invalid id").arg(newId)); + m_locked = false; + if (!m_selectedNode.isValidId(newId)) + QMessageBox::warning(0, tr("Invalid Id"), tr("%1 is an invalid id").arg(newId)); + else + QMessageBox::warning(0, tr("Invalid Id"), tr("%1 already exists").arg(newId)); } return; }