22#include <QDialogButtonBox>
25#include "moc_qgslabelingenginerulewidget.cpp"
32 : QDialog( parent, flags )
36 setWindowTitle( tr(
"Configure Rule" ) );
37 setObjectName( QStringLiteral(
"QgsLabelingEngineRuleDialog" ) );
39 QVBoxLayout *layout =
new QVBoxLayout(
this );
40 layout->addWidget( mWidget );
42 mButtonBox =
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help, Qt::Horizontal,
this );
43 layout->addWidget( mButtonBox );
48 connect( mButtonBox->button( QDialogButtonBox::Ok ), &QAbstractButton::clicked,
this, &QDialog::accept );
49 connect( mButtonBox->button( QDialogButtonBox::Cancel ), &QAbstractButton::clicked,
this, &QDialog::reject );
50 connect( mButtonBox, &QDialogButtonBox::helpRequested,
this, [] {
51 QgsHelp::openHelp( QStringLiteral(
"working_with_vector/vector_properties.html#labeling-rules" ) );
57 mWidget->setRule(
rule );
62 return mWidget->rule();
70QgsLabelingEngineRuleAvoidLabelOverlapWithFeatureWidget::QgsLabelingEngineRuleAvoidLabelOverlapWithFeatureWidget( QWidget *parent )
75 setWindowTitle( tr(
"Prevent Labels Overlapping Features" ) );
76 setPanelTitle( tr(
"Configure Rule" ) );
81 connect( mEditName, &QLineEdit::textChanged,
this, &QgsLabelingEngineRuleAvoidLabelOverlapWithFeatureWidget::onChanged );
93 mEditName->setText( castRule->
name() );
97 mBlockSignals =
false;
102 auto res = std::make_unique<QgsLabelingEngineRuleAvoidLabelOverlapWithFeature>();
103 res->setName( mEditName->text() );
104 res->setLabeledLayer( mComboLabeledLayer->currentLayer() );
105 res->setTargetLayer( qobject_cast<QgsVectorLayer *>( mComboTargetLayer->currentLayer() ) );
106 return res.release();
109void QgsLabelingEngineRuleAvoidLabelOverlapWithFeatureWidget::onChanged()
111 if ( !mBlockSignals )
119QgsLabelingEngineRuleMinimumDistanceLabelToFeatureWidget::QgsLabelingEngineRuleMinimumDistanceLabelToFeatureWidget( QWidget *parent )
124 setWindowTitle( tr(
"Push Labels Away from Features" ) );
125 setPanelTitle( tr(
"Configure Rule" ) );
132 connect( mEditName, &QLineEdit::textChanged,
this, &QgsLabelingEngineRuleMinimumDistanceLabelToFeatureWidget::onChanged );
136 connect( mSpinDistance, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
this, &QgsLabelingEngineRuleMinimumDistanceLabelToFeatureWidget::onChanged );
138 connect( mCostSlider, &QSlider::valueChanged,
this, &QgsLabelingEngineRuleMinimumDistanceLabelToFeatureWidget::onChanged );
147 mBlockSignals =
true;
148 mEditName->setText( castRule->
name() );
152 mSpinDistance->setValue( castRule->
distance() );
153 mDistanceUnitWidget->setUnit( castRule->
distanceUnit() );
156 mCostSlider->setValue(
static_cast<int>( castRule->
cost() * 10 ) );
158 mBlockSignals =
false;
163 auto res = std::make_unique<QgsLabelingEngineRuleMinimumDistanceLabelToFeature>();
164 res->setName( mEditName->text() );
165 res->setLabeledLayer( mComboLabeledLayer->currentLayer() );
166 res->setTargetLayer( qobject_cast<QgsVectorLayer *>( mComboTargetLayer->currentLayer() ) );
168 res->setDistance( mSpinDistance->value() );
169 res->setDistanceUnit( mDistanceUnitWidget->unit() );
170 res->setDistanceUnitScale( mDistanceUnitWidget->getMapUnitScale() );
172 res->setCost( mCostSlider->value() / 10.0 );
174 return res.release();
177void QgsLabelingEngineRuleMinimumDistanceLabelToFeatureWidget::onChanged()
179 if ( !mBlockSignals )
187QgsLabelingEngineRuleMaximumDistanceLabelToFeatureWidget::QgsLabelingEngineRuleMaximumDistanceLabelToFeatureWidget( QWidget *parent )
192 setWindowTitle( tr(
"Pull Labels toward Features" ) );
193 setPanelTitle( tr(
"Configure Rule" ) );
200 connect( mEditName, &QLineEdit::textChanged,
this, &QgsLabelingEngineRuleMaximumDistanceLabelToFeatureWidget::onChanged );
204 connect( mSpinDistance, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
this, &QgsLabelingEngineRuleMaximumDistanceLabelToFeatureWidget::onChanged );
206 connect( mCostSlider, &QSlider::valueChanged,
this, &QgsLabelingEngineRuleMaximumDistanceLabelToFeatureWidget::onChanged );
215 mBlockSignals =
true;
216 mEditName->setText( castRule->
name() );
220 mSpinDistance->setValue( castRule->
distance() );
221 mDistanceUnitWidget->setUnit( castRule->
distanceUnit() );
224 mCostSlider->setValue(
static_cast<int>( castRule->
cost() * 10 ) );
226 mBlockSignals =
false;
231 auto res = std::make_unique<QgsLabelingEngineRuleMaximumDistanceLabelToFeature>();
232 res->setName( mEditName->text() );
233 res->setLabeledLayer( mComboLabeledLayer->currentLayer() );
234 res->setTargetLayer( qobject_cast<QgsVectorLayer *>( mComboTargetLayer->currentLayer() ) );
236 res->setDistance( mSpinDistance->value() );
237 res->setDistanceUnit( mDistanceUnitWidget->unit() );
238 res->setDistanceUnitScale( mDistanceUnitWidget->getMapUnitScale() );
240 res->setCost( mCostSlider->value() / 10.0 );
242 return res.release();
245void QgsLabelingEngineRuleMaximumDistanceLabelToFeatureWidget::onChanged()
247 if ( !mBlockSignals )
256QgsLabelingEngineRuleMinimumDistanceLabelToLabelWidget::QgsLabelingEngineRuleMinimumDistanceLabelToLabelWidget( QWidget *parent )
261 setWindowTitle( tr(
"Pull Labels toward Features" ) );
262 setPanelTitle( tr(
"Configure Rule" ) );
269 connect( mEditName, &QLineEdit::textChanged,
this, &QgsLabelingEngineRuleMinimumDistanceLabelToLabelWidget::onChanged );
273 connect( mSpinDistance, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
this, &QgsLabelingEngineRuleMinimumDistanceLabelToLabelWidget::onChanged );
283 mBlockSignals =
true;
284 mEditName->setText( castRule->
name() );
288 mSpinDistance->setValue( castRule->
distance() );
289 mDistanceUnitWidget->setUnit( castRule->
distanceUnit() );
292 mBlockSignals =
false;
297 auto res = std::make_unique<QgsLabelingEngineRuleMinimumDistanceLabelToLabel>();
298 res->setName( mEditName->text() );
299 res->setLabeledLayer( mComboLabeledLayer->currentLayer() );
300 res->setTargetLayer( mComboTargetLayer->currentLayer() );
302 res->setDistance( mSpinDistance->value() );
303 res->setDistanceUnit( mDistanceUnitWidget->unit() );
304 res->setDistanceUnitScale( mDistanceUnitWidget->getMapUnitScale() );
306 return res.release();
309void QgsLabelingEngineRuleMinimumDistanceLabelToLabelWidget::onChanged()
311 if ( !mBlockSignals )
@ SpatialLayer
All spatial layers.
@ Millimeters
Millimeters.
@ Points
Points (e.g., for font sizes).
@ MetersInMapUnits
Meters value as Map units.
Qgis::RenderUnit distanceUnit() const
Returns the units for the distance between labels and the features from the targetLayer().
const QgsMapUnitScale & distanceUnitScale() const
Returns the scaling for the distance between labels and the features from the targetLayer().
double distance() const
Returns the acceptable distance threshold between labels and the features from the targetLayer().
double cost() const
Returns the penalty cost incurred when the rule is violated.
Abstract base class for labeling engine rules.
QString name() const
Returns the name for this instance of the rule.
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...
static void openHelp(const QString &key)
Opens help topic for the given help key using default system web browser.
A labeling engine rule which prevents labels being placed overlapping features from a different layer...
void setRule(const QgsAbstractLabelingEngineRule *rule)
Sets the rule to show in the dialog.
QgsAbstractLabelingEngineRule * rule()
Returns the rule defined by the current settings in the dialog.
QgsLabelingEngineRuleDialog(QgsLabelingEngineRuleWidget *widget, QWidget *parent=nullptr, Qt::WindowFlags flags=QgsGuiUtils::ModalDialogFlags)
Constructor for QgsLabelingEngineRuleDialog.
A labeling engine rule which prevents labels being placed too far from features from a different laye...
A labeling engine rule which prevents labels being placed too close to features from a different laye...
A labeling engine rule which prevents labels being placed too close to labels from a different layer.
double distance() const
Returns the minimum permitted distance between labels from the labeledLayer() and the labels from the...
const QgsMapUnitScale & distanceUnitScale() const
Returns the scaling for the distance between labels from the labeledLayer() and the labels from the t...
Qgis::RenderUnit distanceUnit() const
Returns the units for the distance between labels from the labeledLayer() and the labels from the tar...
void layerChanged(QgsMapLayer *layer)
Emitted whenever the currently selected layer changes.
QList< Qgis::RenderUnit > RenderUnitList
List of render units.