22#include <QDialogButtonBox>
26#include "moc_qgslabelingenginerulewidget.cpp"
28using namespace Qt::StringLiterals;
35 : QDialog( parent, flags )
39 setWindowTitle( tr(
"Configure Rule" ) );
40 setObjectName( u
"QgsLabelingEngineRuleDialog"_s );
42 QVBoxLayout *layout =
new QVBoxLayout(
this );
43 layout->addWidget( mWidget );
45 mButtonBox =
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help, Qt::Horizontal,
this );
46 layout->addWidget( mButtonBox );
51 connect( mButtonBox->button( QDialogButtonBox::Ok ), &QAbstractButton::clicked,
this, &QDialog::accept );
52 connect( mButtonBox->button( QDialogButtonBox::Cancel ), &QAbstractButton::clicked,
this, &QDialog::reject );
53 connect( mButtonBox, &QDialogButtonBox::helpRequested,
this, [] {
QgsHelp::openHelp( u
"working_with_vector/vector_properties.html#labeling-rules"_s ); } );
58 mWidget->setRule(
rule );
63 return mWidget->rule();
71QgsLabelingEngineRuleAvoidLabelOverlapWithFeatureWidget::QgsLabelingEngineRuleAvoidLabelOverlapWithFeatureWidget( QWidget *parent )
76 setWindowTitle( tr(
"Prevent Labels Overlapping Features" ) );
77 setPanelTitle( tr(
"Configure Rule" ) );
82 connect( mEditName, &QLineEdit::textChanged,
this, &QgsLabelingEngineRuleAvoidLabelOverlapWithFeatureWidget::onChanged );
94 mEditName->setText( castRule->
name() );
98 mBlockSignals =
false;
103 auto res = std::make_unique<QgsLabelingEngineRuleAvoidLabelOverlapWithFeature>();
104 res->setName( mEditName->text() );
105 res->setLabeledLayer( mComboLabeledLayer->currentLayer() );
106 res->setTargetLayer( qobject_cast<QgsVectorLayer *>( mComboTargetLayer->currentLayer() ) );
107 return res.release();
110void QgsLabelingEngineRuleAvoidLabelOverlapWithFeatureWidget::onChanged()
112 if ( !mBlockSignals )
120QgsLabelingEngineRuleMinimumDistanceLabelToFeatureWidget::QgsLabelingEngineRuleMinimumDistanceLabelToFeatureWidget( QWidget *parent )
125 setWindowTitle( tr(
"Push Labels Away from Features" ) );
126 setPanelTitle( tr(
"Configure Rule" ) );
131 mDistanceUnitWidget->setUnits(
135 connect( mEditName, &QLineEdit::textChanged,
this, &QgsLabelingEngineRuleMinimumDistanceLabelToFeatureWidget::onChanged );
139 connect( mSpinDistance, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
this, &QgsLabelingEngineRuleMinimumDistanceLabelToFeatureWidget::onChanged );
141 connect( mCostSlider, &QSlider::valueChanged,
this, &QgsLabelingEngineRuleMinimumDistanceLabelToFeatureWidget::onChanged );
150 mBlockSignals =
true;
151 mEditName->setText( castRule->
name() );
155 mSpinDistance->setValue( castRule->
distance() );
156 mDistanceUnitWidget->setUnit( castRule->
distanceUnit() );
159 mCostSlider->setValue(
static_cast<int>( castRule->
cost() * 10 ) );
161 mBlockSignals =
false;
166 auto res = std::make_unique<QgsLabelingEngineRuleMinimumDistanceLabelToFeature>();
167 res->setName( mEditName->text() );
168 res->setLabeledLayer( mComboLabeledLayer->currentLayer() );
169 res->setTargetLayer( qobject_cast<QgsVectorLayer *>( mComboTargetLayer->currentLayer() ) );
171 res->setDistance( mSpinDistance->value() );
172 res->setDistanceUnit( mDistanceUnitWidget->unit() );
173 res->setDistanceUnitScale( mDistanceUnitWidget->getMapUnitScale() );
175 res->setCost( mCostSlider->value() / 10.0 );
177 return res.release();
180void QgsLabelingEngineRuleMinimumDistanceLabelToFeatureWidget::onChanged()
182 if ( !mBlockSignals )
190QgsLabelingEngineRuleMaximumDistanceLabelToFeatureWidget::QgsLabelingEngineRuleMaximumDistanceLabelToFeatureWidget( QWidget *parent )
195 setWindowTitle( tr(
"Pull Labels toward Features" ) );
196 setPanelTitle( tr(
"Configure Rule" ) );
201 mDistanceUnitWidget->setUnits(
205 connect( mEditName, &QLineEdit::textChanged,
this, &QgsLabelingEngineRuleMaximumDistanceLabelToFeatureWidget::onChanged );
209 connect( mSpinDistance, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
this, &QgsLabelingEngineRuleMaximumDistanceLabelToFeatureWidget::onChanged );
211 connect( mCostSlider, &QSlider::valueChanged,
this, &QgsLabelingEngineRuleMaximumDistanceLabelToFeatureWidget::onChanged );
220 mBlockSignals =
true;
221 mEditName->setText( castRule->
name() );
225 mSpinDistance->setValue( castRule->
distance() );
226 mDistanceUnitWidget->setUnit( castRule->
distanceUnit() );
229 mCostSlider->setValue(
static_cast<int>( castRule->
cost() * 10 ) );
231 mBlockSignals =
false;
236 auto res = std::make_unique<QgsLabelingEngineRuleMaximumDistanceLabelToFeature>();
237 res->setName( mEditName->text() );
238 res->setLabeledLayer( mComboLabeledLayer->currentLayer() );
239 res->setTargetLayer( qobject_cast<QgsVectorLayer *>( mComboTargetLayer->currentLayer() ) );
241 res->setDistance( mSpinDistance->value() );
242 res->setDistanceUnit( mDistanceUnitWidget->unit() );
243 res->setDistanceUnitScale( mDistanceUnitWidget->getMapUnitScale() );
245 res->setCost( mCostSlider->value() / 10.0 );
247 return res.release();
250void QgsLabelingEngineRuleMaximumDistanceLabelToFeatureWidget::onChanged()
252 if ( !mBlockSignals )
261QgsLabelingEngineRuleMinimumDistanceLabelToLabelWidget::QgsLabelingEngineRuleMinimumDistanceLabelToLabelWidget( QWidget *parent )
266 setWindowTitle( tr(
"Pull Labels toward Features" ) );
267 setPanelTitle( tr(
"Configure Rule" ) );
272 mDistanceUnitWidget->setUnits(
276 connect( mEditName, &QLineEdit::textChanged,
this, &QgsLabelingEngineRuleMinimumDistanceLabelToLabelWidget::onChanged );
280 connect( mSpinDistance, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
this, &QgsLabelingEngineRuleMinimumDistanceLabelToLabelWidget::onChanged );
290 mBlockSignals =
true;
291 mEditName->setText( castRule->
name() );
295 mSpinDistance->setValue( castRule->
distance() );
296 mDistanceUnitWidget->setUnit( castRule->
distanceUnit() );
299 mBlockSignals =
false;
304 auto res = std::make_unique<QgsLabelingEngineRuleMinimumDistanceLabelToLabel>();
305 res->setName( mEditName->text() );
306 res->setLabeledLayer( mComboLabeledLayer->currentLayer() );
307 res->setTargetLayer( mComboTargetLayer->currentLayer() );
309 res->setDistance( mSpinDistance->value() );
310 res->setDistanceUnit( mDistanceUnitWidget->unit() );
311 res->setDistanceUnitScale( mDistanceUnitWidget->getMapUnitScale() );
313 return res.release();
316void QgsLabelingEngineRuleMinimumDistanceLabelToLabelWidget::onChanged()
318 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.