@@ -726,9 +726,10 @@ void QgsLayoutLegendWidget::mColumnSpaceSpinBox_valueChanged( double d )
726
726
}
727
727
}
728
728
729
- static void _moveLegendNode ( QgsLayerTreeLayer *nodeLayer, int legendNodeIndex, int offset )
729
+ static void _moveLegendNode ( QgsLayerTreeLayer *nodeLayer, int legendNodeIndex, int destLegendNodeIndex )
730
730
{
731
731
QList<int > order = QgsMapLayerLegendUtils::legendNodeOrder ( nodeLayer );
732
+ const int offset = destLegendNodeIndex - legendNodeIndex;
732
733
733
734
if ( legendNodeIndex < 0 || legendNodeIndex >= order.count () )
734
735
return ;
@@ -770,8 +771,17 @@ void QgsLayoutLegendWidget::mMoveDownToolButton_clicked()
770
771
}
771
772
else // legend node
772
773
{
773
- _moveLegendNode ( legendNode->layerNode (), _unfilteredLegendNodeIndex ( legendNode ), 1 );
774
- mItemTreeView ->layerTreeModel ()->refreshLayerLegend ( legendNode->layerNode () );
774
+ // get the next index, the one that will have to be above our index,
775
+ const QModelIndex nextIndex = index .siblingAtRow ( index .row () + 1 );
776
+ if ( nextIndex.isValid () )
777
+ {
778
+ QgsLayerTreeModelLegendNode *nextLegendNode = mItemTreeView ->index2legendNode ( nextIndex );
779
+ if ( nextLegendNode )
780
+ {
781
+ _moveLegendNode ( legendNode->layerNode (), _unfilteredLegendNodeIndex ( legendNode ), _unfilteredLegendNodeIndex ( nextLegendNode ) );
782
+ mItemTreeView ->layerTreeModel ()->refreshLayerLegend ( legendNode->layerNode () );
783
+ }
784
+ }
775
785
}
776
786
777
787
mItemTreeView ->setCurrentIndex ( mItemTreeView ->proxyModel ()->mapFromSource ( mItemTreeView ->layerTreeModel ()->index ( sourceIndex.row () + 1 , 0 , parentIndex ) ) );
@@ -808,8 +818,17 @@ void QgsLayoutLegendWidget::mMoveUpToolButton_clicked()
808
818
}
809
819
else // legend node
810
820
{
811
- _moveLegendNode ( legendNode->layerNode (), _unfilteredLegendNodeIndex ( legendNode ), -1 );
812
- mItemTreeView ->layerTreeModel ()->refreshLayerLegend ( legendNode->layerNode () );
821
+ // get the previous index, the one that will have to be below our index,
822
+ const QModelIndex prevIndex = index .siblingAtRow ( index .row () - 1 );
823
+ if ( prevIndex.isValid () )
824
+ {
825
+ QgsLayerTreeModelLegendNode *prevLegendNode = mItemTreeView ->index2legendNode ( prevIndex );
826
+ if ( prevLegendNode )
827
+ {
828
+ _moveLegendNode ( legendNode->layerNode (), _unfilteredLegendNodeIndex ( legendNode ), _unfilteredLegendNodeIndex ( prevLegendNode ) );
829
+ mItemTreeView ->layerTreeModel ()->refreshLayerLegend ( legendNode->layerNode () );
830
+ }
831
+ }
813
832
}
814
833
815
834
mItemTreeView ->setCurrentIndex ( mItemTreeView ->proxyModel ()->mapFromSource ( mItemTreeView ->layerTreeModel ()->index ( sourceIndex.row () - 1 , 0 , parentIndex ) ) );
0 commit comments