summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@nokia.com>2010-04-07 21:03:53 +0200
committerKai Koehne <kai.koehne@nokia.com>2010-04-08 20:45:29 +0200
commit299f2be2f4922101300de5f35c9913fad7546c92 (patch)
tree40d972750556acedd752c2edfc08623b81670856
parentbbaf3b18e7456b3b3007f92ef7469802ac372d04 (diff)
downloadqt-creator-299f2be2f4922101300de5f35c9913fad7546c92.tar.gz
Let the designer start nodes which have invalid meta info
This is only a workaround!
-rw-r--r--src/plugins/qmldesigner/components/integration/componentview.cpp2
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp4
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp30
-rw-r--r--src/plugins/qmldesigner/core/instances/dummynodeinstance.cpp17
-rw-r--r--src/plugins/qmldesigner/core/instances/dummynodeinstance.h6
-rw-r--r--src/plugins/qmldesigner/core/instances/nodeinstance.cpp15
-rw-r--r--src/plugins/qmldesigner/core/instances/nodeinstanceview.cpp3
-rw-r--r--src/plugins/qmldesigner/core/instances/objectnodeinstance.h2
-rw-r--r--src/plugins/qmldesigner/core/model/modelnode.cpp2
-rw-r--r--src/plugins/qmldesigner/core/model/qmlitemnode.cpp2
-rw-r--r--src/plugins/qmldesigner/core/model/qmlstate.cpp1
11 files changed, 40 insertions, 44 deletions
diff --git a/src/plugins/qmldesigner/components/integration/componentview.cpp b/src/plugins/qmldesigner/components/integration/componentview.cpp
index 943895b01a..8d52c3c4a2 100644
--- a/src/plugins/qmldesigner/components/integration/componentview.cpp
+++ b/src/plugins/qmldesigner/components/integration/componentview.cpp
@@ -116,7 +116,7 @@ void ComponentView::searchForComponentAndAddToList(const ModelNode &node)
item->setEditable(false);
m_standardItemModel->appendRow(item);
}
- } else if (node.metaInfo().isComponent() && !m_componentList.contains(node.type())) {
+ } else if (node.metaInfo().isValid() && node.metaInfo().isComponent() && !m_componentList.contains(node.type())) {
m_componentList.append(node.type());
m_componentList.sort();
m_listChanged = true;
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
index 6515a004ba..0cfc1f6585 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
@@ -190,7 +190,7 @@ NavigatorTreeModel::ItemRow NavigatorTreeModel::createItemRow(const ModelNode &n
QStandardItem *idItem = new QStandardItem;
idItem->setDragEnabled(true);
- idItem->setDropEnabled(node.metaInfo().isContainer());
+ idItem->setDropEnabled(node.metaInfo().isValid() && node.metaInfo().isContainer());
idItem->setEditable(true);
idItem->setData(hash, Qt::UserRole);
@@ -204,7 +204,7 @@ NavigatorTreeModel::ItemRow NavigatorTreeModel::createItemRow(const ModelNode &n
#endif
QStandardItem *visibilityItem = new QStandardItem;
- visibilityItem->setDropEnabled(node.metaInfo().isContainer());
+ visibilityItem->setDropEnabled(node.metaInfo().isValid() && node.metaInfo().isContainer());
visibilityItem->setCheckable(true);
visibilityItem->setEditable(false);
visibilityItem->setData(hash, Qt::UserRole);
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
index 8dc55a0a33..1fa3796d6b 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
@@ -165,23 +165,29 @@ void IdItemDelegate::paint(QPainter *painter,
ModelNode node = m_TreeModel->nodeForIndex(index);
- QIcon icon=node.metaInfo().icon();
- if (icon.isNull())
- {
- // if node has no own icon, search for it in the itemlibrary
- QList <ItemLibraryInfo> InfoList = node.metaInfo().metaInfo().itemLibraryRepresentations(node.metaInfo());
- foreach (const ItemLibraryInfo &entry, InfoList)
+ QIcon icon;
+ if (node.metaInfo().isValid()) {
+ icon=node.metaInfo().icon();
+ if (icon.isNull())
{
- if (entry.typeName()==node.metaInfo().typeName()) {
- icon = entry.icon();
- break;
+ // if node has no own icon, search for it in the itemlibrary
+ QList <ItemLibraryInfo> InfoList = node.metaInfo().metaInfo().itemLibraryRepresentations(node.metaInfo());
+ foreach (const ItemLibraryInfo &entry, InfoList)
+ {
+ if (entry.typeName()==node.metaInfo().typeName()) {
+ icon = entry.icon();
+ break;
+ }
}
- }
- // if the library was also empty, use the default icon
- if (icon.isNull()) icon = QIcon(":/ItemLibrary/images/item-default-icon.png");
+ // if the library was also empty, use the default icon
+ }
}
+ if (icon.isNull())
+ icon = QIcon(":/ItemLibrary/images/item-default-icon.png");
+
+
// If no icon is present, leave an empty space of 24 pixels anyway
int pixmapSide = 16;
QPixmap pixmap = icon.pixmap(pixmapSide, pixmapSide);
diff --git a/src/plugins/qmldesigner/core/instances/dummynodeinstance.cpp b/src/plugins/qmldesigner/core/instances/dummynodeinstance.cpp
index d2f7658743..e6a3e0f8dc 100644
--- a/src/plugins/qmldesigner/core/instances/dummynodeinstance.cpp
+++ b/src/plugins/qmldesigner/core/instances/dummynodeinstance.cpp
@@ -38,16 +38,12 @@ namespace QmlDesigner {
namespace Internal {
DummyNodeInstance::DummyNodeInstance()
- : ObjectNodeInstance(0)
+ : ObjectNodeInstance(new QObject)
{
}
-DummyNodeInstance::Pointer DummyNodeInstance::create(const NodeMetaInfo & metaInfo, QDeclarativeContext *context)
+DummyNodeInstance::Pointer DummyNodeInstance::create()
{
- Q_UNUSED(context);
- qWarning() << "DummyNodeInstance created" << metaInfo.typeName();
- foreach(const NodeMetaInfo &metaInfo, metaInfo.superClasses())
- qWarning() << "\t" << metaInfo.typeName();
return Pointer(new DummyNodeInstance);
}
@@ -104,17 +100,10 @@ QStringList DummyNodeInstance::localProperties()
return QStringList();
}
-bool DummyNodeInstance::isVisible() const
+void DummyNodeInstance::initializePropertyWatcher(const ObjectNodeInstance::Pointer &/*objectNodeInstance*/)
{
- return false;
-}
-void DummyNodeInstance::setVisible(bool /*isVisible*/)
-{
- Q_ASSERT_X(0, Q_FUNC_INFO, "Cannot set a dummy node instance to visible/non-visible");
- throw InvalidNodeInstanceException(__LINE__, __FUNCTION__, __FILE__);
}
-
} // namespace Internal
} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/core/instances/dummynodeinstance.h b/src/plugins/qmldesigner/core/instances/dummynodeinstance.h
index 4f5ea3a8ee..a6087457e6 100644
--- a/src/plugins/qmldesigner/core/instances/dummynodeinstance.h
+++ b/src/plugins/qmldesigner/core/instances/dummynodeinstance.h
@@ -43,7 +43,7 @@ public:
typedef QSharedPointer<DummyNodeInstance> Pointer;
typedef QWeakPointer<DummyNodeInstance> WeakPointer;
- static Pointer create(const NodeMetaInfo &metaInfo, QDeclarativeContext *context);
+ static Pointer create();
void paint(QPainter *painter) const;
@@ -56,12 +56,12 @@ public:
double opacity() const;
void setPropertyVariant(const QString &name, const QVariant &value);
+ void setBindingProperty(const QString &name, const QString &expression);
QVariant property(const QString &name) const;
QStringList properties();
QStringList localProperties();
- bool isVisible() const;
- void setVisible(bool isVisible);
+ void initializePropertyWatcher(const ObjectNodeInstance::Pointer &objectNodeInstance);
protected:
DummyNodeInstance();
diff --git a/src/plugins/qmldesigner/core/instances/nodeinstance.cpp b/src/plugins/qmldesigner/core/instances/nodeinstance.cpp
index ab6a061f8f..079f9fb52d 100644
--- a/src/plugins/qmldesigner/core/instances/nodeinstance.cpp
+++ b/src/plugins/qmldesigner/core/instances/nodeinstance.cpp
@@ -132,7 +132,13 @@ Internal::ObjectNodeInstance::Pointer NodeInstance::createInstance(const NodeMet
{
Internal::ObjectNodeInstance::Pointer instance;
- if (metaInfo.isSubclassOf("Qt/QGraphicsView", 4, 6))
+ if (!metaInfo.isValid())
+ instance = Internal::DummyNodeInstance::create();
+ else if (metaInfo.isSubclassOf("org.webkit/WebView", 1, 0))
+ instance = Internal::DummyNodeInstance::create();
+ else if (metaInfo.isSubclassOf("Qt/QWidget", 4, 6))
+ instance = Internal::DummyNodeInstance::create();
+ else if (metaInfo.isSubclassOf("Qt/QGraphicsView", 4, 6))
instance = Internal::GraphicsViewNodeInstance::create(metaInfo, context, objectToBeWrapped);
else if (metaInfo.isSubclassOf("Qt/QDeclarativeView", 4, 6))
instance = Internal::QDeclarativeViewNodeInstance::create(metaInfo, context, objectToBeWrapped);
@@ -140,8 +146,6 @@ Internal::ObjectNodeInstance::Pointer NodeInstance::createInstance(const NodeMet
instance = Internal::GraphicsWidgetNodeInstance::create(metaInfo, context, objectToBeWrapped);
else if (metaInfo.isSubclassOf("Qt/Item", 4, 6))
instance = Internal::QmlGraphicsItemNodeInstance::create(metaInfo, context, objectToBeWrapped);
- else if (metaInfo.isSubclassOf("Qt/QWidget", 4, 6))
- instance = Internal::WidgetNodeInstance::create(metaInfo, context, objectToBeWrapped);
else if (metaInfo.isSubclassOf("Qt/QGraphicsScene", 4, 6))
instance = Internal::GraphicsSceneNodeInstance::create(metaInfo, context, objectToBeWrapped);
else if (metaInfo.isSubclassOf("Qt/Component", 4, 6))
@@ -156,10 +160,9 @@ Internal::ObjectNodeInstance::Pointer NodeInstance::createInstance(const NodeMet
instance = Internal::BehaviorNodeInstance::create(metaInfo, context, objectToBeWrapped);
else if (metaInfo.isSubclassOf("Qt/QtObject", 4, 6))
instance = Internal::ObjectNodeInstance::create(metaInfo, context, objectToBeWrapped);
+ else
+ instance = Internal::DummyNodeInstance::create();
- if (instance.isNull()) {
- instance = Internal::DummyNodeInstance::create(metaInfo, context);
- }
return instance;
}
diff --git a/src/plugins/qmldesigner/core/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/core/instances/nodeinstanceview.cpp
index b37a280419..7648623fdb 100644
--- a/src/plugins/qmldesigner/core/instances/nodeinstanceview.cpp
+++ b/src/plugins/qmldesigner/core/instances/nodeinstanceview.cpp
@@ -401,8 +401,6 @@ void NodeInstanceView::loadNodes(const QList<ModelNode> &nodeList)
// TODO: Set base state as current model state
void NodeInstanceView::loadModel(Model *model)
{
- Q_ASSERT(rootModelNode().isValid());
-
removeAllInstanceNodeRelationships();
engine()->rootContext()->setBaseUrl(model->fileUrl());
@@ -602,7 +600,6 @@ void NodeInstanceView::emitParentChanged(QObject *child)
NodeInstance NodeInstanceView::loadNode(const ModelNode &node, QObject *objectToBeWrapped)
{
- Q_ASSERT(node.isValid());
NodeInstance instance(NodeInstance::create(this, node, objectToBeWrapped));
insertInstanceNodeRelationship(node, instance);
diff --git a/src/plugins/qmldesigner/core/instances/objectnodeinstance.h b/src/plugins/qmldesigner/core/instances/objectnodeinstance.h
index 5bb64c9679..4bdb31ef12 100644
--- a/src/plugins/qmldesigner/core/instances/objectnodeinstance.h
+++ b/src/plugins/qmldesigner/core/instances/objectnodeinstance.h
@@ -95,7 +95,7 @@ public:
NodeInstanceView *nodeInstanceView() const;
void setNodeInstanceView(NodeInstanceView *view);
- void initializePropertyWatcher(const Pointer &objectNodeInstance);
+ virtual void initializePropertyWatcher(const Pointer &objectNodeInstance);
virtual void paint(QPainter *painter) const;
virtual bool isTopLevel() const;
diff --git a/src/plugins/qmldesigner/core/model/modelnode.cpp b/src/plugins/qmldesigner/core/model/modelnode.cpp
index ad31d0ebbc..16e1a7f82f 100644
--- a/src/plugins/qmldesigner/core/model/modelnode.cpp
+++ b/src/plugins/qmldesigner/core/model/modelnode.cpp
@@ -250,7 +250,7 @@ A node might become invalid if e.g. it or one of its ancestors is deleted.
*/
bool ModelNode::isValid() const
{
- return !m_model.isNull() && !m_view.isNull() && m_internalNode &&m_internalNode->isValid();
+ return !m_model.isNull() && !m_view.isNull() && m_internalNode &&m_internalNode->isValid() /*&& model()->metaInfo().hasNodeMetaInfo(m_internalNode->type(), m_internalNode->majorVersion(), m_internalNode->minorVersion())*/;
}
/*!
diff --git a/src/plugins/qmldesigner/core/model/qmlitemnode.cpp b/src/plugins/qmldesigner/core/model/qmlitemnode.cpp
index f143287589..f6b88304b8 100644
--- a/src/plugins/qmldesigner/core/model/qmlitemnode.cpp
+++ b/src/plugins/qmldesigner/core/model/qmlitemnode.cpp
@@ -45,7 +45,7 @@ namespace QmlDesigner {
bool QmlItemNode::isValid() const
{
- return QmlModelNodeFacade::isValid() && modelNode().metaInfo().isSubclassOf("Qt/Item", 4, 6);
+ return QmlModelNodeFacade::isValid() && modelNode().metaInfo().isValid() && modelNode().metaInfo().isSubclassOf("Qt/Item", 4, 6);
}
bool QmlItemNode::isRootNode() const
diff --git a/src/plugins/qmldesigner/core/model/qmlstate.cpp b/src/plugins/qmldesigner/core/model/qmlstate.cpp
index e7f3135cbf..c36da4a3e8 100644
--- a/src/plugins/qmldesigner/core/model/qmlstate.cpp
+++ b/src/plugins/qmldesigner/core/model/qmlstate.cpp
@@ -228,6 +228,7 @@ void QmlModelState::setName(const QString &name)
bool QmlModelState::isValid() const
{
return QmlModelNodeFacade::isValid() &&
+ modelNode().metaInfo().isValid() &&
(modelNode().metaInfo().isSubclassOf("Qt/State", 4, 6) || isBaseState());
}