|
43 | 43 | #include <QInputDialog>
|
44 | 44 |
|
45 | 45 |
|
| 46 | +static int _unfilteredLegendNodeIndex( QgsLayerTreeModelLegendNode* legendNode ) |
| 47 | +{ |
| 48 | + return legendNode->model()->layerOriginalLegendNodes( legendNode->layerNode() ).indexOf( legendNode ); |
| 49 | +} |
| 50 | + |
| 51 | +static int _originalLegendNodeIndex( QgsLayerTreeModelLegendNode* legendNode ) |
| 52 | +{ |
| 53 | + // figure out index of the legend node as it comes out of the map layer legend. |
| 54 | + // first legend nodes may be reordered, output of that is available in layerOriginalLegendNodes(). |
| 55 | + // next the nodes may be further filtered (by scale, map content etc). |
| 56 | + // so here we go in reverse order: 1. find index before filtering, 2. find index before reorder |
| 57 | + int unfilteredNodeIndex = _unfilteredLegendNodeIndex( legendNode ); |
| 58 | + QList<int> order = QgsMapLayerLegendUtils::legendNodeOrder( legendNode->layerNode() ); |
| 59 | + return ( unfilteredNodeIndex >= 0 && unfilteredNodeIndex < order.count() ? order[unfilteredNodeIndex] : -1 ); |
| 60 | +} |
| 61 | + |
| 62 | + |
46 | 63 | QgsComposerLegendWidget::QgsComposerLegendWidget( QgsComposerLegend* legend )
|
47 | 64 | : QgsComposerItemBaseWidget( nullptr, legend )
|
48 | 65 | , mLegend( legend )
|
@@ -480,7 +497,7 @@ void QgsComposerLegendWidget::on_mMoveDownToolButton_clicked()
|
480 | 497 | }
|
481 | 498 | else // legend node
|
482 | 499 | {
|
483 |
| - _moveLegendNode( legendNode->layerNode(), index.row(), 1 ); |
| 500 | + _moveLegendNode( legendNode->layerNode(), _unfilteredLegendNodeIndex( legendNode ), 1 ); |
484 | 501 | mItemTreeView->layerTreeModel()->refreshLayerLegend( legendNode->layerNode() );
|
485 | 502 | }
|
486 | 503 |
|
@@ -517,7 +534,7 @@ void QgsComposerLegendWidget::on_mMoveUpToolButton_clicked()
|
517 | 534 | }
|
518 | 535 | else // legend node
|
519 | 536 | {
|
520 |
| - _moveLegendNode( legendNode->layerNode(), index.row(), -1 ); |
| 537 | + _moveLegendNode( legendNode->layerNode(), _unfilteredLegendNodeIndex( legendNode ), -1 ); |
521 | 538 | mItemTreeView->layerTreeModel()->refreshLayerLegend( legendNode->layerNode() );
|
522 | 539 | }
|
523 | 540 |
|
@@ -688,7 +705,7 @@ void QgsComposerLegendWidget::on_mRemoveToolButton_clicked()
|
688 | 705 | if ( QgsLayerTreeModelLegendNode* legendNode = mItemTreeView->layerTreeModel()->index2legendNode( index ) )
|
689 | 706 | {
|
690 | 707 | QgsLayerTreeLayer* nodeLayer = legendNode->layerNode();
|
691 |
| - nodesWithRemoval[nodeLayer].append( index.row() ); |
| 708 | + nodesWithRemoval[nodeLayer].append( _unfilteredLegendNodeIndex( legendNode ) ); |
692 | 709 | }
|
693 | 710 | }
|
694 | 711 | Q_FOREACH ( QgsLayerTreeLayer* nodeLayer, nodesWithRemoval.keys() )
|
@@ -1011,11 +1028,7 @@ void QgsComposerLegendWidget::on_mItemTreeView_doubleClicked( const QModelIndex
|
1011 | 1028 | }
|
1012 | 1029 | else if ( legendNode )
|
1013 | 1030 | {
|
1014 |
| - QList<int> order = QgsMapLayerLegendUtils::legendNodeOrder( legendNode->layerNode() ); |
1015 |
| - //find unfiltered row number |
1016 |
| - QList<QgsLayerTreeModelLegendNode*> layerLegendNodes = model->layerOriginalLegendNodes( legendNode->layerNode() ); |
1017 |
| - int unfilteredRowIndex = layerLegendNodes.indexOf( legendNode ); |
1018 |
| - int originalIndex = ( unfilteredRowIndex >= 0 && unfilteredRowIndex < order.count() ? order[unfilteredRowIndex] : -1 ); |
| 1031 | + int originalIndex = _originalLegendNodeIndex( legendNode ); |
1019 | 1032 | QgsMapLayerLegendUtils::setLegendNodeUserLabel( legendNode->layerNode(), originalIndex, newText );
|
1020 | 1033 | model->refreshLayerLegend( legendNode->layerNode() );
|
1021 | 1034 | }
|
|
0 commit comments