45#include "moc_qgsrendererpropertiesdialog.cpp"
47using namespace Qt::StringLiterals;
49static bool initVectorLayerRenderer(
const QString &name,
QgsRendererWidgetFunc f,
const QString &iconName = QString() )
61 if ( !iconName.isEmpty() )
70void QgsRendererPropertiesDialog::initRendererWidgetFunctions()
72 static bool sInitialized =
false;
99 mLayerRenderingGroupBox->setSettingGroup( u
"layerRenderingGroupBox"_s );
105 layout()->setContentsMargins( 0, 0, 0, 0 );
109 initRendererWidgetFunctions();
113 const auto constRenderers = renderers;
114 for (
const QString &name : constRenderers )
120 cboRenderers->setCurrentIndex( -1 );
126 connect( checkboxEnableOrderBy, &QAbstractButton::toggled, btnOrderBy, &QWidget::setEnabled );
127 connect( btnOrderBy, &QAbstractButton::clicked,
this, &QgsRendererPropertiesDialog::showOrderByDialog );
131 QList<QWidget *> widgets;
132 widgets << mOpacityWidget << cboRenderers << checkboxEnableOrderBy << mBlendModeComboBox << mFeatureBlendComboBox << mEffectWidget;
140 for ( QWidget *widget : widgets )
150 else if (
QgsOpacityWidget *w = qobject_cast<QgsOpacityWidget *>( widget ) )
154 else if ( QComboBox *w = qobject_cast<QComboBox *>( widget ) )
158 else if ( QSpinBox *w = qobject_cast<QSpinBox *>( widget ) )
162 else if ( QDoubleSpinBox *w = qobject_cast<QDoubleSpinBox *>( widget ) )
166 else if (
QgsColorButton *w = qobject_cast<QgsColorButton *>( widget ) )
170 else if ( QCheckBox *w = qobject_cast<QCheckBox *>( widget ) )
174 else if ( QLineEdit *w = qobject_cast<QLineEdit *>( widget ) )
214 mDockMode = dockMode;
215 mEffectWidget->setDockMode( dockMode );
223 if ( cboRenderers->currentIndex() == -1 )
225 QgsDebugError( u
"No current item -- this should never happen!"_s );
229 const QString rendererName = cboRenderers->currentData().toString();
239 oldRenderer =
mLayer->renderer()->clone();
282 stackedWidget->setCurrentWidget( pageNoWidget );
307 mLayer->setBlendMode( mBlendModeComboBox->blendMode() );
308 mLayer->setFeatureBlendMode( mFeatureBlendComboBox->blendMode() );
311 mLayer->setOpacity( mOpacityWidget->opacity() );
329 QDialog *dlg =
new QDialog();
330 const QString key = u
"/UI/paneldialog/%1"_s.arg( panel->
panelTitle() );
332 dlg->restoreGeometry( settings.
value( key ).toByteArray() );
334 dlg->setLayout(
new QVBoxLayout() );
335 dlg->layout()->addWidget( panel );
336 QDialogButtonBox *buttonBox =
new QDialogButtonBox( QDialogButtonBox::Ok );
337 connect( buttonBox, &QDialogButtonBox::accepted, dlg, &QDialog::accept );
338 dlg->layout()->addWidget( buttonBox );
340 settings.
setValue( key, dlg->saveGeometry() );
345void QgsRendererPropertiesDialog::syncToLayer()
348 mFeatureBlendComboBox->setShowClippingModes( mBlendModeComboBox->showClippingModes() );
373 if (
mLayer->renderer() &&
mLayer->renderer()->orderByEnabled() )
375 checkboxEnableOrderBy->setChecked(
true );
379 btnOrderBy->setEnabled(
false );
380 checkboxEnableOrderBy->setChecked(
false );
386 const QString rendererName =
mLayer->renderer()->type();
388 const int rendererIdx = cboRenderers->findData( rendererName );
389 cboRenderers->setCurrentIndex( rendererIdx );
392 Q_ASSERT( rendererIdx != -1 &&
"there must be a renderer!" );
396void QgsRendererPropertiesDialog::showOrderByDialog()
398 QgsOrderByDialog dlg(
mLayer,
this );
411 checkboxEnableOrderBy->setChecked( orderByEnabled );
414void QgsRendererPropertiesDialog::updateUIState(
bool hidden )
416 mLayerRenderingGroupBox->setHidden( hidden );
417 cboRenderers->setHidden( hidden );
424 if ( !isWindow() && e->key() == Qt::Key_Escape )
430 QDialog::keyPressEvent( e );
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
static QgsRendererRegistry * rendererRegistry()
Returns the application's renderer registry, used for managing vector layer renderers.
Abstract base class for all 2D vector feature renderers.
void setOrderBy(const QgsFeatureRequest::OrderBy &orderBy)
Define the order in which features shall be processed by this renderer.
void setOrderByEnabled(bool enabled)
Sets whether custom ordering should be applied before features are processed by this renderer.
QgsPaintEffect * paintEffect() const
Returns the current paint effect for the renderer.
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the renderer.
virtual QgsFeatureRenderer * clone() const =0
Create a deep copy of this renderer.
Represents a list of OrderByClauses, with the most important first and the least important last.
static void enableAutoGeometryRestore(QWidget *widget, const QString &key=QString())
Register the widget to allow its position to be automatically saved and restored when open and closed...
Map canvas is a class for displaying all GIS data types on a canvas.
QPainter::CompositionMode blendMode() const
Returns the current blending mode for a layer.
virtual QgsPaintEffect * clone() const =0
Duplicates an effect by creating a deep copy of the effect.
static bool layerIsContainedInGroupLayer(QgsProject *project, QgsMapLayer *layer)
Returns true if the specified layer is a child layer from any QgsGroupLayer in the given project.
static QgsProject * instance()
Returns the QgsProject singleton instance.
void showPanel(QgsPanelWidget *panel)
Emit when you require a panel to be show in the interface.
void openPanel(QgsPanelWidget *panel)
Open a panel or dialog depending on dock mode setting If dock mode is true this method will emit the ...
QgsMapCanvas * mMapCanvas
void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the dialog is shown, e.g., the associated map canvas and expression context...
void connectValueChanged(const QList< QWidget * > &widgets)
Connect the value changed event for the set of widgets to widgetChanged signal.
QgsFeatureRequest::OrderBy mOrderBy
QgsPaintEffect * mPaintEffect
QgsMessageBar * mMessageBar
void apply()
Apply the changes from the dialog to the layer.
void setMapCanvas(QgsMapCanvas *canvas)
Sets the map canvas associated with the dialog.
void layerVariablesChanged()
Emitted when expression context variables on the associated vector layers have been changed.
void widgetChanged()
Emitted when something on the widget has changed.
~QgsRendererPropertiesDialog() override
void onOK()
Apply and accept the changes for the dialog.
void keyPressEvent(QKeyEvent *event) override
void setDockMode(bool dockMode)
Set the widget in dock mode which tells the widget to emit panel widgets and not open dialogs.
QgsRendererWidget * mActiveWidget
QgsRendererPropertiesDialog(QgsVectorLayer *layer, QgsStyle *style, bool embedded=false, QWidget *parent=nullptr)
Constructor for QgsRendererPropertiesDialog.
void rendererChanged()
called when user changes renderer type
QStringList renderersList(QgsRendererAbstractMetadata::LayerTypes layerTypes=QgsRendererAbstractMetadata::All) const
Returns a list of available renderers.
QgsRendererAbstractMetadata * rendererMetadata(const QString &rendererName)
Returns the metadata for a specified renderer.
Stores settings for use within QGIS.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
A database of saved style entities, including symbols, color ramps, text formats and others.
Contains settings which reflect the context in which a symbol (or renderer) widget is shown,...
void setMapCanvas(QgsMapCanvas *canvas)
Sets the map canvas associated with the widget.
void setMessageBar(QgsMessageBar *bar)
Sets the message bar associated with the widget.
QgsMapCanvas * mapCanvas() const
Returns the map canvas associated with the widget.
QgsMessageBar * messageBar() const
Returns the message bar associated with the widget.
Represents a vector layer which manages a vector based dataset.
QPainter::CompositionMode featureBlendMode() const
Returns the current blending mode for features.
QgsFeatureRenderer * renderer()
Returns the feature renderer used for rendering the features in the layer in 2D map views.
#define QgsDebugMsgLevel(str, level)
#define QgsDebugError(str)
QgsRendererWidget *(* QgsRendererWidgetFunc)(QgsVectorLayer *, QgsStyle *, QgsFeatureRenderer *)