QmlDesigner: Some support for non default properties in navigator

* Using hints to determine if properties/nodes should be visible, even
  if they are not in a default property.

* Using hints to add items to properties that are not the default property.

Change-Id: Iab461287807d0c82a535b7d182b989e42f96d21c
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Thomas Hartmann
2019-06-14 14:29:34 +02:00
parent 3a7a1c5e81
commit dfc5e76830

View File

@@ -246,14 +246,29 @@ Qt::ItemFlags NavigatorTreeModel::flags(const QModelIndex &index) const
| Qt::ItemNeverHasChildren; | Qt::ItemNeverHasChildren;
} }
void static appendForcedNodes(const NodeListProperty &property, QList<ModelNode> &list)
{
const QStringList visibleProperties = NodeHints::fromModelNode(property.parentModelNode()).visibleNonDefaultProperties();
for (const ModelNode &node : property.parentModelNode().directSubModelNodes()) {
if (!list.contains(node) && visibleProperties.contains(QString::fromUtf8(node.parentProperty().name())))
list.append(node);
}
}
QList<ModelNode> filteredList(const NodeListProperty &property, bool filter) QList<ModelNode> filteredList(const NodeListProperty &property, bool filter)
{ {
if (!filter) if (!filter)
return property.toModelNodeList(); return property.toModelNodeList();
return Utils::filtered(property.toModelNodeList(), [] (const ModelNode &arg) { QList<ModelNode> list;
list.append(Utils::filtered(property.toModelNodeList(), [] (const ModelNode &arg) {
return QmlItemNode::isValidQmlItemNode(arg) || NodeHints::fromModelNode(arg).visibleInNavigator(); return QmlItemNode::isValidQmlItemNode(arg) || NodeHints::fromModelNode(arg).visibleInNavigator();
}); }));
appendForcedNodes(property, list);
return list;
} }
QModelIndex NavigatorTreeModel::index(int row, int column, QModelIndex NavigatorTreeModel::index(int row, int column,
@@ -431,7 +446,8 @@ bool NavigatorTreeModel::dropMimeData(const QMimeData *mimeData,
static bool findTargetProperty(const QModelIndex &rowModelIndex, static bool findTargetProperty(const QModelIndex &rowModelIndex,
NavigatorTreeModel *navigatorTreeModel, NavigatorTreeModel *navigatorTreeModel,
NodeAbstractProperty *targetProperty, NodeAbstractProperty *targetProperty,
int *targetRowNumber) int *targetRowNumber,
const QString &propertyName = {})
{ {
QModelIndex targetItemIndex; QModelIndex targetItemIndex;
PropertyName targetPropertyName; PropertyName targetPropertyName;
@@ -445,7 +461,10 @@ static bool findTargetProperty(const QModelIndex &rowModelIndex,
if (!targetNode.metaInfo().hasDefaultProperty()) if (!targetNode.metaInfo().hasDefaultProperty())
return false; return false;
if (propertyName.isEmpty())
targetPropertyName = targetNode.metaInfo().defaultPropertyName(); targetPropertyName = targetNode.metaInfo().defaultPropertyName();
else
targetPropertyName = propertyName.toUtf8();
} }
// Disallow dropping items between properties, which are listed first. // Disallow dropping items between properties, which are listed first.
@@ -494,12 +513,16 @@ void NavigatorTreeModel::handleItemLibraryItemDrop(const QMimeData *mimeData, in
int targetRowNumber = rowNumber; int targetRowNumber = rowNumber;
NodeAbstractProperty targetProperty; NodeAbstractProperty targetProperty;
bool foundTarget = findTargetProperty(rowModelIndex, this, &targetProperty, &targetRowNumber);
if (foundTarget) {
const ItemLibraryEntry itemLibraryEntry = const ItemLibraryEntry itemLibraryEntry =
createItemLibraryEntryFromMimeData(mimeData->data("application/vnd.bauhaus.itemlibraryinfo")); createItemLibraryEntryFromMimeData(mimeData->data("application/vnd.bauhaus.itemlibraryinfo"));
const NodeHints hints = NodeHints::fromItemLibraryEntry(itemLibraryEntry);
const QString targetPropertyName = hints.forceNonDefaultProperty();
bool foundTarget = findTargetProperty(rowModelIndex, this, &targetProperty, &targetRowNumber, targetPropertyName);
if (foundTarget) {
if (!NodeHints::fromItemLibraryEntry(itemLibraryEntry).canBeDroppedInNavigator()) if (!NodeHints::fromItemLibraryEntry(itemLibraryEntry).canBeDroppedInNavigator())
return; return;