QmlDesigner: reactivating subcomponent editing

This includes refactoring the DesignDocumentController.
In the ComponentTextMoifier I use replaced because it is not blocked by
beginEditBlock() of the text cursor.

I use the same pattern now for ComponentView like for all the other
views.
The view is created and controlled by DesignModeWidget because we
have only a single instance.

Change-Id: I7809b96f52f4d275f0231f3961c3c4bc2618ce89
Reviewed-on: http://codereview.qt.nokia.com/96
Reviewed-by: Marco Bubke <marco.bubke@nokia.com>
This commit is contained in:
Thomas Hartmann
2011-05-24 18:47:33 +02:00
committed by Marco Bubke
parent e3842f9973
commit f950b8d7c7
9 changed files with 109 additions and 64 deletions

View File

@@ -31,9 +31,11 @@
**************************************************************************/
#include "componentview.h"
#include "componentaction.h"
#include <QtDebug>
#include <nodemetainfo.h>
#include <nodeabstractproperty.h>
#include <QStandardItemModel>
// silence gcc warnings about unused parameters
@@ -43,7 +45,8 @@ namespace QmlDesigner {
ComponentView::ComponentView(QObject *parent)
: AbstractView(parent),
m_standardItemModel(new QStandardItemModel(this)),
m_listChanged(false)
m_listChanged(false),
m_componentAction(new ComponentAction(this))
{
}
@@ -56,6 +59,7 @@ void ComponentView::nodeAboutToBeRemoved(const ModelNode &removedNode)
if (item->data(ModelNodeRole).value<ModelNode>() == removedNode)
m_standardItemModel->removeRow(index);
}
searchForComponentAndRemoveFromList(removedNode);
}
QStandardItemModel *ComponentView::standardItemModel() const
@@ -86,17 +90,29 @@ void ComponentView::modelAttached(Model *model)
if (AbstractView::model() == model)
return;
bool block = m_componentAction->blockSignals(true);
m_standardItemModel->clear();
AbstractView::modelAttached(model);
Q_ASSERT(model->masterModel());
appendWholeDocumentAsComponent();
searchForComponentAndAddToList(rootModelNode());
m_componentAction->blockSignals(block);
}
void ComponentView::modelAboutToBeDetached(Model *model)
{
bool block = m_componentAction->blockSignals(true);
m_standardItemModel->clear();
AbstractView::modelAboutToBeDetached(model);
m_componentAction->blockSignals(block);
}
ComponentAction *ComponentView::action()
{
return m_componentAction;
}
void ComponentView::nodeCreated(const ModelNode &createdNode)
@@ -112,48 +128,59 @@ void ComponentView::searchForComponentAndAddToList(const ModelNode &node)
foreach (const ModelNode &childNode, nodeList) {
if (childNode.type() == "Qt/Component") {
if (childNode.type() == "QtQuick.Component") {
if (!childNode.id().isEmpty()) {
QStandardItem *item = new QStandardItem(childNode.id());
item->setData(QVariant::fromValue(childNode), ModelNodeRole);
item->setEditable(false);
m_standardItemModel->appendRow(item);
} else {
QString description;
if (!childNode.parentProperty().parentModelNode().id().isEmpty())
description = childNode.parentProperty().parentModelNode().id() + QLatin1Char(' ');
else
description = childNode.parentProperty().parentModelNode().simplifiedTypeName() + QLatin1Char(' ');
description += childNode.parentProperty().name();
QStandardItem *item = new QStandardItem(description);
item->setData(QVariant::fromValue(childNode), ModelNodeRole);
item->setEditable(false);
m_standardItemModel->appendRow(item);
}
} else if (node.metaInfo().isValid() && node.metaInfo().isComponent() && !m_componentList.contains(node.type())) {
m_componentList.append(node.type());
m_componentList.sort();
m_listChanged = true;
}
}
}
}
void ComponentView::nodeRemoved(const ModelNode & /*removedNode*/, const NodeAbstractProperty & /*parentProperty*/, PropertyChangeFlags /*propertyChange*/)
void ComponentView::nodeRemoved(const ModelNode & /* removedNode */, const NodeAbstractProperty & /*parentProperty*/, PropertyChangeFlags /*propertyChange*/)
{
}
//void ComponentView::searchForComponentAndRemoveFromList(const ModelNode &node)
//{
// QList<ModelNode> nodeList;
// nodeList.append(node);
// nodeList.append(node.allSubModelNodes());
//
//
// foreach (const ModelNode &childNode, nodeList) {
// if (node.type() == "Qt/Component") {
// if (!node.id().isEmpty()) {
// for(int row = 0; row < m_standardItemModel->rowCount(); row++) {
// if (m_standardItemModel->item(row)->text() == node.id())
// m_standardItemModel->removeRow(row);
// }
// }
// } else if (node.metaInfo().isComponent() && !m_componentList.contains(node.type())) {
// m_componentList.append(node.type());
// m_componentList.sort();
// m_listChanged = true;
// }
// }
//}
void ComponentView::searchForComponentAndRemoveFromList(const ModelNode &node)
{
QList<ModelNode> nodeList;
nodeList.append(node);
nodeList.append(node.allSubModelNodes());
foreach (const ModelNode &childNode, nodeList) {
if (childNode.type() == "QtQuick.Component") {
if (!childNode.id().isEmpty()) {
for (int row = 0; row < m_standardItemModel->rowCount(); row++) {
if (m_standardItemModel->item(row)->text() == childNode.id())
m_standardItemModel->removeRow(row);
}
}
} else if (node.metaInfo().isComponent() && !m_componentList.contains(childNode.type())) {
m_componentList.append(childNode.type());
m_componentList.sort();
m_listChanged = true;
}
}
}
void ComponentView::nodeAboutToBeReparented(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*/) {}
void ComponentView::nodeIdChanged(const ModelNode& /*node*/, const QString& /*newId*/, const QString& /*oldId*/) {}