QmlDesigner: Fix entires for component combobox

Task-number: QTCREATORBUG-10383
Change-Id: Ifa539401c75c82bd3afdec3143f9f17e69a2e36b
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
This commit is contained in:
Marco Bubke
2013-10-16 18:02:31 +02:00
parent 5ed7442f99
commit 1da6acf6c4
2 changed files with 71 additions and 25 deletions

View File

@@ -85,7 +85,7 @@ void ComponentView::removeSingleNodeFromList(const ModelNode &node)
} }
int ComponentView::indexForNode(const ModelNode &node) int ComponentView::indexForNode(const ModelNode &node) const
{ {
for (int row = 0; row < m_standardItemModel->rowCount(); row++) { for (int row = 0; row < m_standardItemModel->rowCount(); row++) {
if (m_standardItemModel->item(row)->data(ModelNodeRole).toInt() == node.internalId()) if (m_standardItemModel->item(row)->data(ModelNodeRole).toInt() == node.internalId())
@@ -94,7 +94,7 @@ int ComponentView::indexForNode(const ModelNode &node)
return -1; return -1;
} }
int ComponentView::indexOfMaster() int ComponentView::indexOfMaster() const
{ {
for (int row = 0; row < m_standardItemModel->rowCount(); row++) { for (int row = 0; row < m_standardItemModel->rowCount(); row++) {
if (m_standardItemModel->item(row)->data(ModelNodeRole).toInt() == 0) if (m_standardItemModel->item(row)->data(ModelNodeRole).toInt() == 0)
@@ -104,12 +104,57 @@ int ComponentView::indexOfMaster()
return -1; return -1;
} }
bool ComponentView::hasMasterEntry() const
{
return indexOfMaster() >= 0;
}
bool ComponentView::hasEntryForNode(const ModelNode &node) const
{
return indexForNode(node) >= 0;
}
void ComponentView::addMasterDocument() void ComponentView::addMasterDocument()
{ {
QStandardItem *item = new QStandardItem("master"); if (!hasMasterEntry()) {
item->setData(QVariant::fromValue(0), ModelNodeRole); QStandardItem *item = new QStandardItem("master");
item->setEditable(false); item->setData(QVariant::fromValue(0), ModelNodeRole);
m_standardItemModel->appendRow(item); item->setEditable(false);
m_standardItemModel->appendRow(item);
}
}
void ComponentView::removeMasterDocument()
{
m_standardItemModel->removeColumn(indexOfMaster());
}
QString ComponentView::descriptionForNode(const ModelNode &node) const
{
QString description;
if (!node.id().isEmpty()) {
description = node.id();
} else if (node.hasParentProperty()) {
ModelNode parentNode = node.parentProperty().parentModelNode();
if (parentNode.id().isEmpty())
description = parentNode.simplifiedTypeName() + QLatin1Char(' ');
else
description = parentNode.id() + QLatin1Char(' ');
description += node.parentProperty().name();
}
return description;
}
void ComponentView::updateDescription(const ModelNode &node)
{
int nodeIndex = indexForNode(node);
if (nodeIndex > -1)
m_standardItemModel->item(nodeIndex)->setText(descriptionForNode(node));
} }
void ComponentView::modelAttached(Model *model) void ComponentView::modelAttached(Model *model)
@@ -161,24 +206,11 @@ void ComponentView::searchForComponentAndAddToList(const ModelNode &node)
addMasterDocument(); addMasterDocument();
} }
if (!node.id().isEmpty()) { if (!hasEntryForNode(node)) {
QStandardItem *item = new QStandardItem(node.id()); QString description = descriptionForNode(node);
item->setData(QVariant::fromValue(node.internalId()), ModelNodeRole);
item->setEditable(false);
removeSingleNodeFromList(node); //remove node if already present
m_standardItemModel->appendRow(item);
} else {
QString description;
if (node.hasParentProperty()) {
ModelNode parentNode = node.parentProperty().parentModelNode();
if (parentNode.id().isEmpty())
description = parentNode.simplifiedTypeName() + QLatin1Char(' ');
else
description = parentNode.id() + QLatin1Char(' ');
description += node.parentProperty().name();
}
QStandardItem *item = new QStandardItem(description); QStandardItem *item = new QStandardItem(description);
item->setData(QVariant::fromValue(node.internalId()), ModelNodeRole); item->setData(QVariant::fromValue(node.internalId()), ModelNodeRole);
@@ -205,6 +237,9 @@ void ComponentView::searchForComponentAndRemoveFromList(const ModelNode &node)
if (childNode.nodeSourceType() == ModelNode::NodeWithComponentSource) if (childNode.nodeSourceType() == ModelNode::NodeWithComponentSource)
removeSingleNodeFromList(childNode); removeSingleNodeFromList(childNode);
} }
if (m_standardItemModel->rowCount() == 1)
removeMasterDocument();
} }
void ComponentView::nodeAboutToBeReparented(const ModelNode &/*node*/, const NodeAbstractProperty &/*newPropertyParent*/, const NodeAbstractProperty &/*oldPropertyParent*/, AbstractView::PropertyChangeFlags /*propertyChange*/) {} void ComponentView::nodeAboutToBeReparented(const ModelNode &/*node*/, const NodeAbstractProperty &/*newPropertyParent*/, const NodeAbstractProperty &/*oldPropertyParent*/, AbstractView::PropertyChangeFlags /*propertyChange*/) {}
@@ -212,9 +247,15 @@ void ComponentView::nodeAboutToBeReparented(const ModelNode &/*node*/, const Nod
void ComponentView::nodeReparented(const ModelNode &node, const NodeAbstractProperty &/*newPropertyParent*/, const NodeAbstractProperty &/*oldPropertyParent*/, AbstractView::PropertyChangeFlags /*propertyChange*/) void ComponentView::nodeReparented(const ModelNode &node, const NodeAbstractProperty &/*newPropertyParent*/, const NodeAbstractProperty &/*oldPropertyParent*/, AbstractView::PropertyChangeFlags /*propertyChange*/)
{ {
searchForComponentAndAddToList(node); searchForComponentAndAddToList(node);
updateDescription(node);
}
void ComponentView::nodeIdChanged(const ModelNode& node, const QString& /*newId*/, const QString& /*oldId*/)
{
updateDescription(node);
} }
void ComponentView::nodeIdChanged(const ModelNode& /*node*/, const QString& /*newId*/, const QString& /*oldId*/) {}
void ComponentView::propertiesAboutToBeRemoved(const QList<AbstractProperty>& /*propertyList*/) {} void ComponentView::propertiesAboutToBeRemoved(const QList<AbstractProperty>& /*propertyList*/) {}
void ComponentView::propertiesRemoved(const QList<AbstractProperty>& /*propertyList*/) {} void ComponentView::propertiesRemoved(const QList<AbstractProperty>& /*propertyList*/) {}
void ComponentView::variantPropertiesChanged(const QList<VariantProperty>& /*propertyList*/, PropertyChangeFlags /*propertyChange*/) {} void ComponentView::variantPropertiesChanged(const QList<VariantProperty>& /*propertyList*/, PropertyChangeFlags /*propertyChange*/) {}

View File

@@ -126,9 +126,14 @@ private: //functions
void searchForComponentAndAddToList(const ModelNode &node); void searchForComponentAndAddToList(const ModelNode &node);
void searchForComponentAndRemoveFromList(const ModelNode &node); void searchForComponentAndRemoveFromList(const ModelNode &node);
void removeSingleNodeFromList(const ModelNode &node); void removeSingleNodeFromList(const ModelNode &node);
int indexForNode(const ModelNode &node); int indexForNode(const ModelNode &node) const;
int indexOfMaster(); int indexOfMaster() const;
bool hasMasterEntry() const;
bool hasEntryForNode(const ModelNode &node) const;
void addMasterDocument(); void addMasterDocument();
void removeMasterDocument();
QString descriptionForNode(const ModelNode &node) const;
void updateDescription(const ModelNode &node);
private: private:
QStandardItemModel *m_standardItemModel; QStandardItemModel *m_standardItemModel;