40 #include <QMessageBox> 42 static bool _initRenderer(
const QString &name,
QgsRendererWidgetFunc f,
const QString &iconName = QString() )
54 if ( !iconName.isEmpty() )
58 if ( pix.load( iconPath ) )
66 static void _initRendererWidgetFunctions()
68 static bool sInitialized =
false;
92 mLayerRenderingGroupBox->setSettingGroup( QStringLiteral(
"layerRenderingGroupBox" ) );
98 layout()->setContentsMargins( 0, 0, 0, 0 );
102 _initRendererWidgetFunctions();
106 Q_FOREACH (
const QString &name, renderers )
112 cboRenderers->setCurrentIndex( -1 );
118 connect( checkboxEnableOrderBy, &QAbstractButton::toggled, btnOrderBy, &QWidget::setEnabled );
119 connect( btnOrderBy, &QAbstractButton::clicked,
this, &QgsRendererPropertiesDialog::showOrderByDialog );
123 QList<QWidget *> widgets;
124 widgets << mOpacityWidget
126 << checkboxEnableOrderBy
127 << mBlendModeComboBox
128 << mFeatureBlendComboBox
137 Q_FOREACH ( QWidget *widget, widgets )
141 connect( w, SIGNAL( changed ),
this, slot );
145 connect( w, SIGNAL( fieldChanged( QString ) ),
this, slot );
147 else if (
QgsOpacityWidget *w = qobject_cast<QgsOpacityWidget *>( widget ) )
149 connect( w, SIGNAL( opacityChanged(
double ) ),
this, slot );
151 else if ( QComboBox *w = qobject_cast<QComboBox *>( widget ) )
153 connect( w, SIGNAL( currentIndexChanged(
int ) ),
this, slot );
155 else if ( QSpinBox *w = qobject_cast<QSpinBox *>( widget ) )
157 connect( w, SIGNAL( valueChanged(
int ) ),
this, slot );
159 else if ( QDoubleSpinBox *w = qobject_cast<QDoubleSpinBox *>( widget ) )
161 connect( w, SIGNAL( valueChanged(
double ) ),
this, slot );
163 else if (
QgsColorButton *w = qobject_cast<QgsColorButton *>( widget ) )
165 connect( w, SIGNAL( colorChanged( QColor ) ),
this, slot );
167 else if ( QCheckBox *w = qobject_cast<QCheckBox *>( widget ) )
169 connect( w, SIGNAL( toggled(
bool ) ),
this, slot );
171 else if ( QLineEdit *w = qobject_cast<QLineEdit *>( widget ) )
173 connect( w, SIGNAL( textEdited( QString ) ),
this, slot );
174 connect( w, SIGNAL( textChanged( QString ) ),
this, slot );
178 connect( w, SIGNAL( changed() ),
this, slot );
201 mDockMode = dockMode;
202 mEffectWidget->setDockMode( dockMode );
210 if ( cboRenderers->currentIndex() == -1 )
212 QgsDebugMsg(
"No current item -- this should never happen!" );
216 QString rendererName = cboRenderers->currentData().toString();
268 stackedWidget->setCurrentWidget( pageNoWidget );
318 QDialog *dlg =
new QDialog();
319 QString key = QStringLiteral(
"/UI/paneldialog/%1" ).arg( panel->
panelTitle() );
321 dlg->restoreGeometry( settings.
value( key ).toByteArray() );
323 dlg->setLayout(
new QVBoxLayout() );
324 dlg->layout()->addWidget( panel );
325 QDialogButtonBox *buttonBox =
new QDialogButtonBox( QDialogButtonBox::Ok );
326 connect( buttonBox, &QDialogButtonBox::accepted, dlg, &QDialog::accept );
327 dlg->layout()->addWidget( buttonBox );
329 settings.
setValue( key, dlg->saveGeometry() );
334 void QgsRendererPropertiesDialog::syncToLayer()
362 checkboxEnableOrderBy->setChecked(
true );
366 btnOrderBy->setEnabled(
false );
367 checkboxEnableOrderBy->setChecked(
false );
375 int rendererIdx = cboRenderers->findData( rendererName );
376 cboRenderers->setCurrentIndex( rendererIdx );
379 Q_ASSERT( rendererIdx != -1 &&
"there must be a renderer!" );
384 void QgsRendererPropertiesDialog::showOrderByDialog()
399 checkboxEnableOrderBy->setChecked( orderByEnabled );
402 void QgsRendererPropertiesDialog::updateUIState(
bool hidden )
404 mLayerRenderingGroupBox->setHidden( hidden );
405 cboRenderers->setHidden( hidden );
412 if ( !isWindow() && e->key() == Qt::Key_Escape )
418 QDialog::keyPressEvent( e );
void widgetChanged()
Emitted when something on the widget has changed.
This is a dialog to build and manage a list of order by clauses.
void onOK()
Apply and accept the changes for the dialog.
QgsRendererWidget * mActiveWidget
void setRenderer(QgsFeatureRenderer *r)
Set renderer which will be invoked to represent this layer.
void setOrderBy(const QgsFeatureRequest::OrderBy &orderBy)
Set the order by to manage.
void apply()
Apply the changes from the dialog to the layer.
void setDockMode(bool dockMode)
Set the widget in dock mode which tells the widget to emit panel widgets and not open dialogs...
void openPanel(QgsPanelWidget *panel)
Open a panel or dialog depending on dock mode setting If dock mode is true this method will emit the ...
static QString defaultThemePath()
Returns the path to the default theme directory.
This class is a composition of two QSettings instances:
~QgsRendererPropertiesDialog() override
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
QgsFeatureRequest::OrderBy orderBy() const
Gets the order in which features shall be processed by this renderer.
void setFeatureBlendMode(QPainter::CompositionMode blendMode)
Sets the blending mode used for rendering each feature.
QgsMapCanvas * mMapCanvas
void setMapCanvas(QgsMapCanvas *canvas)
Sets the map canvas associated with the dialog.
QStringList renderersList(QgsRendererAbstractMetadata::LayerTypes layerTypes=QgsRendererAbstractMetadata::All) const
Returns a list of available renderers.
QString iconPath(const QString &iconFile)
void setBlendMode(QPainter::CompositionMode blendMode)
Set the blending mode used for rendering a layer.
void setMapCanvas(QgsMapCanvas *canvas)
Sets the map canvas associated with the widget.
Map canvas is a class for displaying all GIS data types on a canvas.
virtual QgsPaintEffect * clone() const =0
Duplicates an effect by creating a deep copy of the effect.
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the renderer.
QgsPaintEffect * paintEffect() const
Returns the current paint effect for the renderer.
Contains settings which reflect the context in which a symbol (or renderer) widget is shown...
void layerVariablesChanged()
Emitted when expression context variables on the associated vector layers have been changed...
QgsRendererWidget *(* QgsRendererWidgetFunc)(QgsVectorLayer *, QgsStyle *, QgsFeatureRenderer *)
QgsPaintEffect * mPaintEffect
QgsRendererAbstractMetadata * rendererMetadata(const QString &rendererName)
Returns the metadata for a specified renderer.
QgsFeatureRenderer * renderer()
Returns renderer.
bool orderByEnabled() const
Returns whether custom ordering will be applied before features are processed by this renderer...
QPainter::CompositionMode featureBlendMode() const
Returns the current blending mode for features.
void setOrderBy(const QgsFeatureRequest::OrderBy &orderBy)
Define the order in which features shall be processed by this renderer.
void showPanel(QgsPanelWidget *panel)
Emit when you require a panel to be show in the interface.
QgsFeatureRequest::OrderBy mOrderBy
void keyPressEvent(QKeyEvent *event) override
void connectValueChanged(const QList< QWidget *> &widgets, const char *slot)
Connect the given slot to the value changed event for the set of widgets Each widget is checked for t...
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
void rendererChanged()
called when user changes renderer type
QgsRendererPropertiesDialog(QgsVectorLayer *layer, QgsStyle *style, bool embedded=false, QWidget *parent=nullptr)
Constructor for QgsRendererPropertiesDialog.
QgsFeatureRequest::OrderBy orderBy()
Gets the order by defined in the dialog.
Represents a vector layer which manages a vector based data sets.
void setOrderByEnabled(bool enabled)
Sets whether custom ordering should be applied before features are processed by this renderer...
static QgsRendererRegistry * rendererRegistry()
Returns the application's renderer registry, used for managing vector layer renderers.
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...
QPainter::CompositionMode blendMode() const
Returns the current blending mode for a layer.
void setOpacity(double opacity)
Sets the opacity for the vector layer, where opacity is a value between 0 (totally transparent) and 1...