|
34 | 34 | #include "qgsmaplayerlegend.h"
|
35 | 35 | #include "qgsproject.h"
|
36 | 36 | #include "qgsvectorlayer.h"
|
37 |
| -#include "qgslayoutitemlegend.h" |
38 | 37 | #include "qgslayoutatlas.h"
|
| 38 | +#include "qgslayoutitemlegend.h" |
| 39 | +#include "qgslayoutmeasurementconverter.h" |
| 40 | +#include "qgsunittypes.h" |
39 | 41 |
|
40 | 42 | #include <QMessageBox>
|
41 | 43 | #include <QInputDialog>
|
42 | 44 |
|
| 45 | +Q_GUI_EXPORT extern int qt_defaultDpiX(); |
43 | 46 |
|
44 | 47 | static int _unfilteredLegendNodeIndex( QgsLayerTreeModelLegendNode *legendNode )
|
45 | 48 | {
|
@@ -135,6 +138,7 @@ QgsLayoutLegendWidget::QgsLayoutLegendWidget( QgsLayoutItemLegend *legend )
|
135 | 138 |
|
136 | 139 | mItemTreeView->setModel( legend->model() );
|
137 | 140 | mItemTreeView->setMenuProvider( new QgsLayoutLegendMenuProvider( mItemTreeView, this ) );
|
| 141 | + setLegendMapViewData(); |
138 | 142 | connect( legend, &QgsLayoutObject::changed, this, &QgsLayoutLegendWidget::setGuiElements );
|
139 | 143 |
|
140 | 144 | // connect atlas state to the filter legend by atlas checkbox
|
@@ -627,6 +631,8 @@ void QgsLayoutLegendWidget::composerMapChanged( QgsLayoutItem *item )
|
627 | 631 | mLegend->setLinkedMap( map );
|
628 | 632 | mLegend->updateFilterByMap();
|
629 | 633 | mLegend->endCommand();
|
| 634 | + |
| 635 | + setLegendMapViewData(); |
630 | 636 | }
|
631 | 637 | }
|
632 | 638 |
|
@@ -1035,6 +1041,21 @@ void QgsLayoutLegendWidget::setCurrentNodeStyleFromAction()
|
1035 | 1041 | mLegend->updateFilterByMap();
|
1036 | 1042 | }
|
1037 | 1043 |
|
| 1044 | +void QgsLayoutLegendWidget::setLegendMapViewData() |
| 1045 | +{ |
| 1046 | + if ( mLegend->linkedMap() ) |
| 1047 | + { |
| 1048 | + int dpi = qt_defaultDpiX(); |
| 1049 | + QgsLayoutMeasurementConverter measurementConverter = QgsLayoutMeasurementConverter(); |
| 1050 | + measurementConverter.setDpi( dpi ); |
| 1051 | + double mapWidth = measurementConverter.convert( mLegend->linkedMap()->sizeWithUnits(), QgsUnitTypes::LayoutPixels ).width(); |
| 1052 | + double mapHeight = measurementConverter.convert( mLegend->linkedMap()->sizeWithUnits(), QgsUnitTypes::LayoutPixels ).height(); |
| 1053 | + double mapUnitsPerPixelX = mLegend->linkedMap()->extent().width() / mapWidth; |
| 1054 | + double mapUnitsPerPixelY = mLegend->linkedMap()->extent().height() / mapHeight; |
| 1055 | + mLegend->model()->setLegendMapViewData( ( mapUnitsPerPixelX > mapUnitsPerPixelY ? mapUnitsPerPixelX : mapUnitsPerPixelY ), dpi, mLegend->linkedMap()->scale() ); |
| 1056 | + } |
| 1057 | +} |
| 1058 | + |
1038 | 1059 | void QgsLayoutLegendWidget::updateFilterLegendByAtlasButton()
|
1039 | 1060 | {
|
1040 | 1061 | if ( QgsLayoutAtlas *atlas = layoutAtlas() )
|
|
0 commit comments