Skip to content

Commit 6effd6b

Browse files
committedJul 2, 2021
Use QgsImageSourceLineEdit and allow placeholder images also for vector layers
1 parent b7b9470 commit 6effd6b

File tree

6 files changed

+63
-43
lines changed

6 files changed

+63
-43
lines changed
 

‎src/core/qgsmaplayerlegend.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
#include "qgsmaplayerlegend.h"
1717
#include "qgsiconutils.h"
18+
#include "qgsimagecache.h"
1819
#include "qgssettings.h"
1920
#include "qgslayertree.h"
2021
#include "qgslayertreemodellegendnode.h"
@@ -359,6 +360,19 @@ QList<QgsLayerTreeModelLegendNode *> QgsDefaultVectorLayerLegend::createLayerTre
359360
{
360361
QList<QgsLayerTreeModelLegendNode *> nodes;
361362

363+
if ( mLayer )
364+
{
365+
QString placeholderImage = mLayer->legendPlaceholderImage();
366+
if ( !placeholderImage.isEmpty() )
367+
{
368+
QgsImageCache ic;
369+
bool fitsInCache;
370+
QImage img = ic.pathAsImage( placeholderImage, QSize(), false, 1.0, fitsInCache );
371+
nodes << new QgsImageLegendNode( nodeLayer, img );
372+
return nodes;
373+
}
374+
}
375+
362376
QgsFeatureRenderer *r = mLayer->renderer();
363377
if ( !r )
364378
return nodes;
@@ -505,7 +519,10 @@ QList<QgsLayerTreeModelLegendNode *> QgsDefaultRasterLayerLegend::createLayerTre
505519
QString placeholderImage = mLayer->legendPlaceholderImage();
506520
if ( !placeholderImage.isEmpty() )
507521
{
508-
nodes << new QgsImageLegendNode( nodeLayer, QImage( placeholderImage ) );
522+
QgsImageCache ic;
523+
bool fitsInCache;
524+
QImage img = ic.pathAsImage( placeholderImage, QSize(), false, 1.0, fitsInCache );
525+
nodes << new QgsImageLegendNode( nodeLayer, img );
509526
}
510527
else if ( mLayer->renderer() )
511528
nodes.append( mLayer->renderer()->createLegendNodes( nodeLayer ) );

‎src/gui/raster/qgsrasterlayerproperties.cpp

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -914,7 +914,8 @@ void QgsRasterLayerProperties::sync()
914914
QVariant wmsBackgroundLayer = mRasterLayer->customProperty( QStringLiteral( "WMSBackgroundLayer" ), false );
915915
mBackgroundLayerCheckBox->setChecked( wmsBackgroundLayer.toBool() );
916916

917-
mLegendPlaceholderLineEdit->setText( mRasterLayer->legendPlaceholderImage() );
917+
mLegendPlaceholderWidget->setLastPathSettingsKey( QStringLiteral( "lastLegendPlaceholderDir" ) );
918+
mLegendPlaceholderWidget->setSource( mRasterLayer->legendPlaceholderImage() );
918919
mLegendConfigEmbeddedWidget->setLayer( mRasterLayer );
919920

920921
mTemporalWidget->syncToLayer();
@@ -947,7 +948,7 @@ void QgsRasterLayerProperties::apply()
947948
/*
948949
* Legend Tab
949950
*/
950-
mRasterLayer->setLegendPlaceholderImage( mLegendPlaceholderLineEdit->text() );
951+
mRasterLayer->setLegendPlaceholderImage( mLegendPlaceholderWidget->source() );
951952
mLegendConfigEmbeddedWidget->applyToLayer();
952953

953954
QgsDebugMsgLevel( QStringLiteral( "apply processing symbology tab" ), 3 );
@@ -1277,18 +1278,6 @@ void QgsRasterLayerProperties::urlClicked( const QUrl &url )
12771278
QDesktopServices::openUrl( url );
12781279
}
12791280

1280-
void QgsRasterLayerProperties::on_mLegendPlaceholderToolButton_clicked()
1281-
{
1282-
QgsSettings myQSettings;
1283-
QString myLastDir = myQSettings.value( QStringLiteral( "lastPlaceholderDir" ), QDir::homePath() ).toString();
1284-
QString myFileName = QFileDialog::getOpenFileName( this, tr( "Open file" ), myLastDir );
1285-
if ( !myFileName.isEmpty() )
1286-
{
1287-
mLegendPlaceholderLineEdit->setText( myFileName );
1288-
myQSettings.setValue( QStringLiteral( "lastPlaceholderDir" ), QFileInfo( myFileName ).absolutePath() );
1289-
}
1290-
}
1291-
12921281
void QgsRasterLayerProperties::mRenderTypeComboBox_currentIndexChanged( int index )
12931282
{
12941283
if ( index < 0 || mDisableRenderTypeComboBoxCurrentIndexChanged || ! mRasterLayer->renderer() )

‎src/gui/raster/qgsrasterlayerproperties.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,6 @@ class GUI_EXPORT QgsRasterLayerProperties : public QgsOptionsDialogBase, private
214214

215215
void urlClicked( const QUrl &url );
216216

217-
void on_mLegendPlaceholderToolButton_clicked();
218-
219217
private:
220218
QPushButton *mBtnStyle = nullptr;
221219
QPushButton *mBtnMetadata = nullptr;

‎src/gui/vector/qgsvectorlayerlegendwidget.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include <QTreeWidget>
2222

2323
#include "qgsexpressionbuilderdialog.h"
24+
#include "qgsfilecontentsourcelineedit.h"
2425
#include "qgsmapcanvas.h"
2526
#include "qgsmaplayerlegend.h"
2627
#include "qgsrenderer.h"
@@ -71,10 +72,19 @@ QgsVectorLayerLegendWidget::QgsVectorLayerLegendWidget( QWidget *parent )
7172
labelLegendLayout->addWidget( mLabelLegendTreeWidget );
7273
mLabelLegendGroupBox->setLayout( labelLegendLayout );
7374

75+
mPlaceholderImageLabel = new QLabel( tr( "Legend placeholder image" ) );
76+
mImageSourceLineEdit = new QgsImageSourceLineEdit();
77+
mImageSourceLineEdit->setLastPathSettingsKey( QStringLiteral( "lastLegendPlaceholderDir" ) );
78+
if ( mLayer )
79+
{
80+
mImageSourceLineEdit->setSource( mLayer->legendPlaceholderImage() );
81+
}
7482

7583

7684
QVBoxLayout *layout = new QVBoxLayout;
7785
layout->setContentsMargins( 0, 0, 0, 0 );
86+
layout->addWidget( mPlaceholderImageLabel );
87+
layout->addWidget( mImageSourceLineEdit );
7888
layout->addWidget( mShowLabelLegendCheckBox );
7989
layout->addWidget( mLabelLegendGroupBox );
8090
layout->addWidget( mTextOnSymbolGroupBox );
@@ -122,7 +132,10 @@ void QgsVectorLayerLegendWidget::setLayer( QgsVectorLayer *layer )
122132
mTextOnSymbolGroupBox->setChecked( legend->textOnSymbolEnabled() );
123133
mTextOnSymbolFormatButton->setTextFormat( legend->textOnSymbolTextFormat() );
124134
populateLegendTreeView( legend->textOnSymbolContent() );
125-
135+
if ( mLayer )
136+
{
137+
mImageSourceLineEdit->setSource( mLayer->legendPlaceholderImage() );
138+
}
126139
}
127140

128141
void QgsVectorLayerLegendWidget::populateLabelLegendTreeWidget()
@@ -221,6 +234,8 @@ void QgsVectorLayerLegendWidget::applyToLayer()
221234
applyLabelLegend();
222235
}
223236

237+
mLayer->setLegendPlaceholderImage( mImageSourceLineEdit->source() );
238+
224239
mLayer->setLegend( legend );
225240
}
226241

‎src/gui/vector/qgsvectorlayerlegendwidget.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "qgis_gui.h"
2626

2727
class QCheckBox;
28+
class QgsImageSourceLineEdit;
2829
class QLabel;
2930
class QPushButton;
3031
class QTreeView;
@@ -76,6 +77,8 @@ class GUI_EXPORT QgsVectorLayerLegendWidget : public QWidget
7677
QCheckBox *mShowLabelLegendCheckBox = nullptr;
7778
QgsCollapsibleGroupBox *mLabelLegendGroupBox = nullptr;
7879
QTreeWidget *mLabelLegendTreeWidget = nullptr;
80+
QLabel *mPlaceholderImageLabel = nullptr;
81+
QgsImageSourceLineEdit *mImageSourceLineEdit = nullptr;
7982

8083
QgsMapCanvas *mCanvas = nullptr;
8184
QgsVectorLayer *mLayer = nullptr;

‎src/ui/qgsrasterlayerpropertiesbase.ui

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1740,7 +1740,7 @@ p, li { white-space: pre-wrap; }
17401740
</widget>
17411741
<widget class="QWidget" name="mOptsPage_Legend">
17421742
<layout class="QGridLayout" name="gridLayout_15">
1743-
<item row="1" column="0">
1743+
<item row="2" column="0">
17441744
<widget class="QGroupBox" name="groupBox">
17451745
<property name="sizePolicy">
17461746
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
@@ -1758,33 +1758,14 @@ p, li { white-space: pre-wrap; }
17581758
</layout>
17591759
</widget>
17601760
</item>
1761+
<item row="1" column="0">
1762+
<widget class="QgsImageSourceLineEdit" name="mLegendPlaceholderWidget" native="true"/>
1763+
</item>
17611764
<item row="0" column="0">
1762-
<widget class="QGroupBox" name="mPlaceholderImageGroupBox">
1763-
<property name="sizePolicy">
1764-
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
1765-
<horstretch>0</horstretch>
1766-
<verstretch>0</verstretch>
1767-
</sizepolicy>
1768-
</property>
1769-
<property name="title">
1765+
<widget class="QLabel" name="mLegendPlaceholderLabel">
1766+
<property name="text">
17701767
<string>Legend placeholder image</string>
17711768
</property>
1772-
<layout class="QGridLayout" name="gridLayout_16">
1773-
<item row="0" column="0">
1774-
<layout class="QHBoxLayout" name="horizontalLayout_4">
1775-
<item>
1776-
<widget class="QLineEdit" name="mLegendPlaceholderLineEdit"/>
1777-
</item>
1778-
<item>
1779-
<widget class="QToolButton" name="mLegendPlaceholderToolButton">
1780-
<property name="text">
1781-
<string>...</string>
1782-
</property>
1783-
</widget>
1784-
</item>
1785-
</layout>
1786-
</item>
1787-
</layout>
17881769
</widget>
17891770
</item>
17901771
</layout>
@@ -2338,6 +2319,23 @@ p, li { white-space: pre-wrap; }
23382319
<extends>QComboBox</extends>
23392320
<header>qgsblendmodecombobox.h</header>
23402321
</customwidget>
2322+
<customwidget>
2323+
<class>QgsOpacityWidget</class>
2324+
<extends>QWidget</extends>
2325+
<header>qgsopacitywidget.h</header>
2326+
<container>1</container>
2327+
</customwidget>
2328+
<customwidget>
2329+
<class>QgsRasterBandComboBox</class>
2330+
<extends>QComboBox</extends>
2331+
<header>qgsrasterbandcombobox.h</header>
2332+
</customwidget>
2333+
<customwidget>
2334+
<class>QgsImageSourceLineEdit</class>
2335+
<extends>QWidget</extends>
2336+
<header>qgsfilecontentsourcelineedit.h</header>
2337+
<container>1</container>
2338+
</customwidget>
23412339
</customwidgets>
23422340
<tabstops>
23432341
<tabstop>mSearchLineEdit</tabstop>

0 commit comments

Comments
 (0)
Please sign in to comment.