40 #include <QMessageBox> 42 static bool _initRenderer(
const QString &name,
QgsRendererWidgetFunc f,
const QString &iconName = QString() )
54 if ( !iconName.isEmpty() )
63 static void _initRendererWidgetFunctions()
65 static bool sInitialized =
false;
90 mLayerRenderingGroupBox->setSettingGroup( QStringLiteral(
"layerRenderingGroupBox" ) );
96 layout()->setContentsMargins( 0, 0, 0, 0 );
100 _initRendererWidgetFunctions();
104 const auto constRenderers = renderers;
105 for (
const QString &name : constRenderers )
111 cboRenderers->setCurrentIndex( -1 );
117 connect( checkboxEnableOrderBy, &QAbstractButton::toggled, btnOrderBy, &QWidget::setEnabled );
118 connect( btnOrderBy, &QAbstractButton::clicked,
this, &QgsRendererPropertiesDialog::showOrderByDialog );
122 QList<QWidget *> widgets;
123 widgets << mOpacityWidget
125 << checkboxEnableOrderBy
126 << mBlendModeComboBox
127 << mFeatureBlendComboBox
136 const auto constWidgets = widgets;
137 for ( QWidget *widget : constWidgets )
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 );
211 mDockMode = dockMode;
212 mEffectWidget->setDockMode( dockMode );
220 if ( cboRenderers->currentIndex() == -1 )
222 QgsDebugMsg( QStringLiteral(
"No current item -- this should never happen!" ) );
226 QString rendererName = cboRenderers->currentData().toString();
279 stackedWidget->setCurrentWidget( pageNoWidget );
329 QDialog *dlg =
new QDialog();
330 QString key = QStringLiteral(
"/UI/paneldialog/%1" ).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() );
345 void QgsRendererPropertiesDialog::syncToLayer()
373 checkboxEnableOrderBy->setChecked(
true );
377 btnOrderBy->setEnabled(
false );
378 checkboxEnableOrderBy->setChecked(
false );
386 int rendererIdx = cboRenderers->findData( rendererName );
387 cboRenderers->setCurrentIndex( rendererIdx );
390 Q_ASSERT( rendererIdx != -1 &&
"there must be a renderer!" );
395 void QgsRendererPropertiesDialog::showOrderByDialog()
410 checkboxEnableOrderBy->setChecked( orderByEnabled );
413 void QgsRendererPropertiesDialog::updateUIState(
bool hidden )
415 mLayerRenderingGroupBox->setHidden( hidden );
416 cboRenderers->setHidden( hidden );
423 if ( !isWindow() && e->key() == Qt::Key_Escape )
429 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)
Sets 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 ...
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
static QIcon getThemeIcon(const QString &name)
Helper to get a theme icon.
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.
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 setMessageBar(QgsMessageBar *bar)
Sets the message bar associated with the widget.
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 setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the dialog is shown, e.g., the associated map canvas and expression context...
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
QgsMapCanvas * mapCanvas() const
Returns the map canvas associated with the widget.
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
QgsMessageBar * mMessageBar
QgsMessageBar * messageBar() const
Returns the message bar associated with the widget.
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...
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...