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, [] {
54 QgsHelp::openHelp( u
"working_with_vector/vector_properties.html#labeling-rules"_s );
60 mWidget->setRule(
rule );
65 return mWidget->rule();
73QgsLabelingEngineRuleAvoidLabelOverlapWithFeatureWidget::QgsLabelingEngineRuleAvoidLabelOverlapWithFeatureWidget( QWidget *parent )
78 setWindowTitle( tr(
"Prevent Labels Overlapping Features" ) );
79 setPanelTitle( tr(
"Configure Rule" ) );
84 connect( mEditName, &QLineEdit::textChanged,
this, &QgsLabelingEngineRuleAvoidLabelOverlapWithFeatureWidget::onChanged );
96 mEditName->setText( castRule->
name() );
100 mBlockSignals =
false;
105 auto res = std::make_unique<QgsLabelingEngineRuleAvoidLabelOverlapWithFeature>();
106 res->setName( mEditName->text() );
107 res->setLabeledLayer( mComboLabeledLayer->currentLayer() );
108 res->setTargetLayer( qobject_cast<QgsVectorLayer *>( mComboTargetLayer->currentLayer() ) );
109 return res.release();
112void QgsLabelingEngineRuleAvoidLabelOverlapWithFeatureWidget::onChanged()
114 if ( !mBlockSignals )
122QgsLabelingEngineRuleMinimumDistanceLabelToFeatureWidget::QgsLabelingEngineRuleMinimumDistanceLabelToFeatureWidget( QWidget *parent )
127 setWindowTitle( tr(
"Push Labels Away from Features" ) );
128 setPanelTitle( tr(
"Configure Rule" ) );
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" ) );
203 connect( mEditName, &QLineEdit::textChanged,
this, &QgsLabelingEngineRuleMaximumDistanceLabelToFeatureWidget::onChanged );
207 connect( mSpinDistance, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
this, &QgsLabelingEngineRuleMaximumDistanceLabelToFeatureWidget::onChanged );
209 connect( mCostSlider, &QSlider::valueChanged,
this, &QgsLabelingEngineRuleMaximumDistanceLabelToFeatureWidget::onChanged );
218 mBlockSignals =
true;
219 mEditName->setText( castRule->
name() );
223 mSpinDistance->setValue( castRule->
distance() );
224 mDistanceUnitWidget->setUnit( castRule->
distanceUnit() );
227 mCostSlider->setValue(
static_cast<int>( castRule->
cost() * 10 ) );
229 mBlockSignals =
false;
234 auto res = std::make_unique<QgsLabelingEngineRuleMaximumDistanceLabelToFeature>();
235 res->setName( mEditName->text() );
236 res->setLabeledLayer( mComboLabeledLayer->currentLayer() );
237 res->setTargetLayer( qobject_cast<QgsVectorLayer *>( mComboTargetLayer->currentLayer() ) );
239 res->setDistance( mSpinDistance->value() );
240 res->setDistanceUnit( mDistanceUnitWidget->unit() );
241 res->setDistanceUnitScale( mDistanceUnitWidget->getMapUnitScale() );
243 res->setCost( mCostSlider->value() / 10.0 );
245 return res.release();
248void QgsLabelingEngineRuleMaximumDistanceLabelToFeatureWidget::onChanged()
250 if ( !mBlockSignals )
259QgsLabelingEngineRuleMinimumDistanceLabelToLabelWidget::QgsLabelingEngineRuleMinimumDistanceLabelToLabelWidget( QWidget *parent )
264 setWindowTitle( tr(
"Pull Labels toward Features" ) );
265 setPanelTitle( tr(
"Configure Rule" ) );
272 connect( mEditName, &QLineEdit::textChanged,
this, &QgsLabelingEngineRuleMinimumDistanceLabelToLabelWidget::onChanged );
276 connect( mSpinDistance, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
this, &QgsLabelingEngineRuleMinimumDistanceLabelToLabelWidget::onChanged );
286 mBlockSignals =
true;
287 mEditName->setText( castRule->
name() );
291 mSpinDistance->setValue( castRule->
distance() );
292 mDistanceUnitWidget->setUnit( castRule->
distanceUnit() );
295 mBlockSignals =
false;
300 auto res = std::make_unique<QgsLabelingEngineRuleMinimumDistanceLabelToLabel>();
301 res->setName( mEditName->text() );
302 res->setLabeledLayer( mComboLabeledLayer->currentLayer() );
303 res->setTargetLayer( mComboTargetLayer->currentLayer() );
305 res->setDistance( mSpinDistance->value() );
306 res->setDistanceUnit( mDistanceUnitWidget->unit() );
307 res->setDistanceUnitScale( mDistanceUnitWidget->getMapUnitScale() );
309 return res.release();
312void QgsLabelingEngineRuleMinimumDistanceLabelToLabelWidget::onChanged()
314 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.