forked from qt-creator/qt-creator
Let the designer start nodes which have invalid meta info
This is only a workaround!
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -165,7 +165,9 @@ void IdItemDelegate::paint(QPainter *painter,
|
||||
|
||||
ModelNode node = m_TreeModel->nodeForIndex(index);
|
||||
|
||||
QIcon icon=node.metaInfo().icon();
|
||||
QIcon icon;
|
||||
if (node.metaInfo().isValid()) {
|
||||
icon=node.metaInfo().icon();
|
||||
if (icon.isNull())
|
||||
{
|
||||
// if node has no own icon, search for it in the itemlibrary
|
||||
@@ -179,8 +181,12 @@ void IdItemDelegate::paint(QPainter *painter,
|
||||
}
|
||||
|
||||
// if the library was also empty, use the default icon
|
||||
if (icon.isNull()) icon = QIcon(":/ItemLibrary/images/item-default-icon.png");
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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())*/;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user