mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-28 00:17:30 -05:00
Handle legend node in parent gracefully with embedded widgets
This commit is contained in:
parent
75e5da3796
commit
291dbb59a1
@ -1196,7 +1196,7 @@ void QgsLayerTreeModel::addLegendToLayer( QgsLayerTreeLayer* nodeL )
|
||||
|
||||
QList<QgsLayerTreeModelLegendNode*> filteredLstNew = filterLegendNodes( lstNew );
|
||||
|
||||
bool isEmbedded = filteredLstNew.count() == 1 && filteredLstNew[0]->isEmbeddedInParent();
|
||||
bool hasOnlyEmbedded = filteredLstNew.count() == 1 && filteredLstNew[0]->isEmbeddedInParent();
|
||||
|
||||
Q_FOREACH ( QgsLayerTreeModelLegendNode* n, lstNew )
|
||||
{
|
||||
@ -1215,11 +1215,11 @@ void QgsLayerTreeModel::addLegendToLayer( QgsLayerTreeLayer* nodeL )
|
||||
|
||||
int count = data.tree ? data.tree->children[nullptr].count() : filteredLstNew.count();
|
||||
|
||||
if ( ! isEmbedded ) beginInsertRows( node2index( nodeL ), 0, count - 1 );
|
||||
if ( ! hasOnlyEmbedded ) beginInsertRows( node2index( nodeL ), 0, count - 1 );
|
||||
|
||||
mLegend[nodeL] = data;
|
||||
|
||||
if ( ! isEmbedded ) endInsertRows();
|
||||
if ( ! hasOnlyEmbedded ) endInsertRows();
|
||||
|
||||
if ( hasStyleOverride )
|
||||
ml->styleManager()->restoreOverrideStyle();
|
||||
@ -1316,9 +1316,6 @@ int QgsLayerTreeModel::legendNodeRowCount( QgsLayerTreeModelLegendNode* node ) c
|
||||
|
||||
int QgsLayerTreeModel::legendRootRowCount( QgsLayerTreeLayer* nL ) const
|
||||
{
|
||||
if ( legendEmbeddedInParent( nL ) )
|
||||
return 0;
|
||||
|
||||
if ( !mLegend.contains( nL ) )
|
||||
return 0;
|
||||
|
||||
@ -1326,7 +1323,12 @@ int QgsLayerTreeModel::legendRootRowCount( QgsLayerTreeLayer* nL ) const
|
||||
if ( data.tree )
|
||||
return data.tree->children[nullptr].count();
|
||||
|
||||
return data.activeNodes.count();
|
||||
int count = data.activeNodes.count();
|
||||
|
||||
if ( legendEmbeddedInParent( nL ) )
|
||||
count--; // one item less -- it is embedded in parent
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
@ -1390,14 +1392,29 @@ Qt::ItemFlags QgsLayerTreeModel::legendNodeFlags( QgsLayerTreeModelLegendNode* n
|
||||
|
||||
bool QgsLayerTreeModel::legendEmbeddedInParent( QgsLayerTreeLayer* nodeLayer ) const
|
||||
{
|
||||
return legendNodeEmbeddedInParent( nodeLayer );
|
||||
}
|
||||
|
||||
QgsLayerTreeModelLegendNode* QgsLayerTreeModel::legendNodeEmbeddedInParent( QgsLayerTreeLayer* nodeLayer ) const
|
||||
{
|
||||
// legend node embedded in parent does not have to be the first one...
|
||||
// there could be extra legend nodes generated for embedded widgets
|
||||
const LayerLegendData& data = mLegend[nodeLayer];
|
||||
return data.activeNodes.count() == 1 && data.activeNodes[0]->isEmbeddedInParent();
|
||||
Q_FOREACH ( QgsLayerTreeModelLegendNode* legendNode, data.activeNodes )
|
||||
{
|
||||
if ( legendNode->isEmbeddedInParent() )
|
||||
return legendNode;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
QIcon QgsLayerTreeModel::legendIconEmbeddedInParent( QgsLayerTreeLayer* nodeLayer ) const
|
||||
{
|
||||
return QIcon( qvariant_cast<QPixmap>( mLegend[nodeLayer].activeNodes[0]->data( Qt::DecorationRole ) ) );
|
||||
QgsLayerTreeModelLegendNode* legendNode = legendNodeEmbeddedInParent( nodeLayer );
|
||||
if ( !legendNode )
|
||||
return QIcon();
|
||||
return QIcon( qvariant_cast<QPixmap>( legendNode->data( Qt::DecorationRole ) ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -277,6 +277,7 @@ class CORE_EXPORT QgsLayerTreeModel : public QAbstractItemModel
|
||||
QVariant legendNodeData( QgsLayerTreeModelLegendNode* node, int role ) const;
|
||||
Qt::ItemFlags legendNodeFlags( QgsLayerTreeModelLegendNode* node ) const;
|
||||
bool legendEmbeddedInParent( QgsLayerTreeLayer* nodeLayer ) const;
|
||||
QgsLayerTreeModelLegendNode* legendNodeEmbeddedInParent( QgsLayerTreeLayer* nodeLayer ) const;
|
||||
QIcon legendIconEmbeddedInParent( QgsLayerTreeLayer* nodeLayer ) const;
|
||||
void legendCleanup();
|
||||
void legendInvalidateMapBasedData();
|
||||
|
Loading…
x
Reference in New Issue
Block a user