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);
|
item->setEditable(false);
|
||||||
m_standardItemModel->appendRow(item);
|
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.append(node.type());
|
||||||
m_componentList.sort();
|
m_componentList.sort();
|
||||||
m_listChanged = true;
|
m_listChanged = true;
|
||||||
|
|||||||
@@ -190,7 +190,7 @@ NavigatorTreeModel::ItemRow NavigatorTreeModel::createItemRow(const ModelNode &n
|
|||||||
|
|
||||||
QStandardItem *idItem = new QStandardItem;
|
QStandardItem *idItem = new QStandardItem;
|
||||||
idItem->setDragEnabled(true);
|
idItem->setDragEnabled(true);
|
||||||
idItem->setDropEnabled(node.metaInfo().isContainer());
|
idItem->setDropEnabled(node.metaInfo().isValid() && node.metaInfo().isContainer());
|
||||||
idItem->setEditable(true);
|
idItem->setEditable(true);
|
||||||
idItem->setData(hash, Qt::UserRole);
|
idItem->setData(hash, Qt::UserRole);
|
||||||
|
|
||||||
@@ -204,7 +204,7 @@ NavigatorTreeModel::ItemRow NavigatorTreeModel::createItemRow(const ModelNode &n
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
QStandardItem *visibilityItem = new QStandardItem;
|
QStandardItem *visibilityItem = new QStandardItem;
|
||||||
visibilityItem->setDropEnabled(node.metaInfo().isContainer());
|
visibilityItem->setDropEnabled(node.metaInfo().isValid() && node.metaInfo().isContainer());
|
||||||
visibilityItem->setCheckable(true);
|
visibilityItem->setCheckable(true);
|
||||||
visibilityItem->setEditable(false);
|
visibilityItem->setEditable(false);
|
||||||
visibilityItem->setData(hash, Qt::UserRole);
|
visibilityItem->setData(hash, Qt::UserRole);
|
||||||
|
|||||||
@@ -165,23 +165,29 @@ void IdItemDelegate::paint(QPainter *painter,
|
|||||||
|
|
||||||
ModelNode node = m_TreeModel->nodeForIndex(index);
|
ModelNode node = m_TreeModel->nodeForIndex(index);
|
||||||
|
|
||||||
QIcon icon=node.metaInfo().icon();
|
QIcon icon;
|
||||||
if (icon.isNull())
|
if (node.metaInfo().isValid()) {
|
||||||
{
|
icon=node.metaInfo().icon();
|
||||||
// if node has no own icon, search for it in the itemlibrary
|
if (icon.isNull())
|
||||||
QList <ItemLibraryInfo> InfoList = node.metaInfo().metaInfo().itemLibraryRepresentations(node.metaInfo());
|
|
||||||
foreach (const ItemLibraryInfo &entry, InfoList)
|
|
||||||
{
|
{
|
||||||
if (entry.typeName()==node.metaInfo().typeName()) {
|
// if node has no own icon, search for it in the itemlibrary
|
||||||
icon = entry.icon();
|
QList <ItemLibraryInfo> InfoList = node.metaInfo().metaInfo().itemLibraryRepresentations(node.metaInfo());
|
||||||
break;
|
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 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
|
// If no icon is present, leave an empty space of 24 pixels anyway
|
||||||
int pixmapSide = 16;
|
int pixmapSide = 16;
|
||||||
QPixmap pixmap = icon.pixmap(pixmapSide, pixmapSide);
|
QPixmap pixmap = icon.pixmap(pixmapSide, pixmapSide);
|
||||||
|
|||||||
@@ -38,16 +38,12 @@ namespace QmlDesigner {
|
|||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
DummyNodeInstance::DummyNodeInstance()
|
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);
|
return Pointer(new DummyNodeInstance);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,17 +100,10 @@ QStringList DummyNodeInstance::localProperties()
|
|||||||
return QStringList();
|
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 Internal
|
||||||
} // namespace QmlDesigner
|
} // namespace QmlDesigner
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ public:
|
|||||||
typedef QSharedPointer<DummyNodeInstance> Pointer;
|
typedef QSharedPointer<DummyNodeInstance> Pointer;
|
||||||
typedef QWeakPointer<DummyNodeInstance> WeakPointer;
|
typedef QWeakPointer<DummyNodeInstance> WeakPointer;
|
||||||
|
|
||||||
static Pointer create(const NodeMetaInfo &metaInfo, QDeclarativeContext *context);
|
static Pointer create();
|
||||||
|
|
||||||
void paint(QPainter *painter) const;
|
void paint(QPainter *painter) const;
|
||||||
|
|
||||||
@@ -56,12 +56,12 @@ public:
|
|||||||
double opacity() const;
|
double opacity() const;
|
||||||
|
|
||||||
void setPropertyVariant(const QString &name, const QVariant &value);
|
void setPropertyVariant(const QString &name, const QVariant &value);
|
||||||
|
void setBindingProperty(const QString &name, const QString &expression);
|
||||||
QVariant property(const QString &name) const;
|
QVariant property(const QString &name) const;
|
||||||
QStringList properties();
|
QStringList properties();
|
||||||
QStringList localProperties();
|
QStringList localProperties();
|
||||||
|
|
||||||
bool isVisible() const;
|
void initializePropertyWatcher(const ObjectNodeInstance::Pointer &objectNodeInstance);
|
||||||
void setVisible(bool isVisible);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
DummyNodeInstance();
|
DummyNodeInstance();
|
||||||
|
|||||||
@@ -132,7 +132,13 @@ Internal::ObjectNodeInstance::Pointer NodeInstance::createInstance(const NodeMet
|
|||||||
{
|
{
|
||||||
Internal::ObjectNodeInstance::Pointer instance;
|
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);
|
instance = Internal::GraphicsViewNodeInstance::create(metaInfo, context, objectToBeWrapped);
|
||||||
else if (metaInfo.isSubclassOf("Qt/QDeclarativeView", 4, 6))
|
else if (metaInfo.isSubclassOf("Qt/QDeclarativeView", 4, 6))
|
||||||
instance = Internal::QDeclarativeViewNodeInstance::create(metaInfo, context, objectToBeWrapped);
|
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);
|
instance = Internal::GraphicsWidgetNodeInstance::create(metaInfo, context, objectToBeWrapped);
|
||||||
else if (metaInfo.isSubclassOf("Qt/Item", 4, 6))
|
else if (metaInfo.isSubclassOf("Qt/Item", 4, 6))
|
||||||
instance = Internal::QmlGraphicsItemNodeInstance::create(metaInfo, context, objectToBeWrapped);
|
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))
|
else if (metaInfo.isSubclassOf("Qt/QGraphicsScene", 4, 6))
|
||||||
instance = Internal::GraphicsSceneNodeInstance::create(metaInfo, context, objectToBeWrapped);
|
instance = Internal::GraphicsSceneNodeInstance::create(metaInfo, context, objectToBeWrapped);
|
||||||
else if (metaInfo.isSubclassOf("Qt/Component", 4, 6))
|
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);
|
instance = Internal::BehaviorNodeInstance::create(metaInfo, context, objectToBeWrapped);
|
||||||
else if (metaInfo.isSubclassOf("Qt/QtObject", 4, 6))
|
else if (metaInfo.isSubclassOf("Qt/QtObject", 4, 6))
|
||||||
instance = Internal::ObjectNodeInstance::create(metaInfo, context, objectToBeWrapped);
|
instance = Internal::ObjectNodeInstance::create(metaInfo, context, objectToBeWrapped);
|
||||||
|
else
|
||||||
|
instance = Internal::DummyNodeInstance::create();
|
||||||
|
|
||||||
if (instance.isNull()) {
|
|
||||||
instance = Internal::DummyNodeInstance::create(metaInfo, context);
|
|
||||||
}
|
|
||||||
|
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -401,8 +401,6 @@ void NodeInstanceView::loadNodes(const QList<ModelNode> &nodeList)
|
|||||||
// TODO: Set base state as current model state
|
// TODO: Set base state as current model state
|
||||||
void NodeInstanceView::loadModel(Model *model)
|
void NodeInstanceView::loadModel(Model *model)
|
||||||
{
|
{
|
||||||
Q_ASSERT(rootModelNode().isValid());
|
|
||||||
|
|
||||||
removeAllInstanceNodeRelationships();
|
removeAllInstanceNodeRelationships();
|
||||||
|
|
||||||
engine()->rootContext()->setBaseUrl(model->fileUrl());
|
engine()->rootContext()->setBaseUrl(model->fileUrl());
|
||||||
@@ -602,7 +600,6 @@ void NodeInstanceView::emitParentChanged(QObject *child)
|
|||||||
|
|
||||||
NodeInstance NodeInstanceView::loadNode(const ModelNode &node, QObject *objectToBeWrapped)
|
NodeInstance NodeInstanceView::loadNode(const ModelNode &node, QObject *objectToBeWrapped)
|
||||||
{
|
{
|
||||||
Q_ASSERT(node.isValid());
|
|
||||||
NodeInstance instance(NodeInstance::create(this, node, objectToBeWrapped));
|
NodeInstance instance(NodeInstance::create(this, node, objectToBeWrapped));
|
||||||
|
|
||||||
insertInstanceNodeRelationship(node, instance);
|
insertInstanceNodeRelationship(node, instance);
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ public:
|
|||||||
|
|
||||||
NodeInstanceView *nodeInstanceView() const;
|
NodeInstanceView *nodeInstanceView() const;
|
||||||
void setNodeInstanceView(NodeInstanceView *view);
|
void setNodeInstanceView(NodeInstanceView *view);
|
||||||
void initializePropertyWatcher(const Pointer &objectNodeInstance);
|
virtual void initializePropertyWatcher(const Pointer &objectNodeInstance);
|
||||||
virtual void paint(QPainter *painter) const;
|
virtual void paint(QPainter *painter) const;
|
||||||
|
|
||||||
virtual bool isTopLevel() 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
|
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
|
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
|
bool QmlItemNode::isRootNode() const
|
||||||
|
|||||||
@@ -228,6 +228,7 @@ void QmlModelState::setName(const QString &name)
|
|||||||
bool QmlModelState::isValid() const
|
bool QmlModelState::isValid() const
|
||||||
{
|
{
|
||||||
return QmlModelNodeFacade::isValid() &&
|
return QmlModelNodeFacade::isValid() &&
|
||||||
|
modelNode().metaInfo().isValid() &&
|
||||||
(modelNode().metaInfo().isSubclassOf("Qt/State", 4, 6) || isBaseState());
|
(modelNode().metaInfo().isSubclassOf("Qt/State", 4, 6) || isBaseState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user