27#include "moc_qgsadvanceddigitizingfloater.cpp"
30 : QWidget( canvas->viewport() )
31 , mMapCanvas( canvas )
32 , mCadDockWidget( cadDockWidget )
36 setAttribute( Qt::WA_TransparentForMouseEvents );
46 mMapCanvas->viewport()->installEventFilter(
this );
47 mMapCanvas->viewport()->setMouseTracking(
true );
50 mAngleLineEdit->installEventFilter( cadDockWidget );
51 mDistanceLineEdit->installEventFilter( cadDockWidget );
52 mXLineEdit->installEventFilter( cadDockWidget );
53 mYLineEdit->installEventFilter( cadDockWidget );
54 mZLineEdit->installEventFilter( cadDockWidget );
55 mMLineEdit->installEventFilter( cadDockWidget );
107 connect( mAngleLineEdit, &QLineEdit::returnPressed, cadDockWidget, [
this, cadDockWidget]() {
110 whileBlocking( mAngleLineEdit )->setText( cleanedInputValue );
112 connect( mDistanceLineEdit, &QLineEdit::returnPressed, cadDockWidget, [
this, cadDockWidget]() {
115 whileBlocking( mDistanceLineEdit )->setText( cleanedInputValue );
136 whileBlocking( mAngleLineEdit )->setText( mCadDockWidget->constraintAngle()->displayValue() );
140 whileBlocking( mAngleLineEdit )->setText( cleanedInputValue );
145 whileBlocking( mDistanceLineEdit )->setText( mCadDockWidget->constraintDistance()->displayValue() );
149 whileBlocking( mDistanceLineEdit )->setText( cleanedInputValue );
151 changeCommonAngleSnapping( mCadDockWidget->commonAngleConstraint() );
154bool QgsAdvancedDigitizingFloater::eventFilter( QObject *obj, QEvent *event )
156 if ( mCadDockWidget && mCadDockWidget->cadEnabled() && mActive )
158 if ( event->type() == QEvent::MouseMove )
161 QMouseEvent *mouseEvent = qgis::down_cast<QMouseEvent *>( event );
162 updatePos( mouseEvent->pos() );
164 else if ( event->type() == QEvent::Enter )
167 QEnterEvent *enterEvent = qgis::down_cast<QEnterEvent *>( event );
168 updatePos( enterEvent->pos() );
171 else if ( event->type() == QEvent::Leave )
177 return QWidget::eventFilter( obj, event );
187 return mItemsVisibility.testFlag( item );
201 const QMetaEnum enumData { QMetaEnum::fromType<QgsAdvancedDigitizingFloater::FloaterItem>() };
202 QgsSettings().
setValue( QStringLiteral(
"/Cad/%1ShowInFloater" ).arg( enumData.valueToKey(
static_cast<int>( item ) ) ), visible );
203 mItemsVisibility.setFlag( item, visible );
207 enabledChangedX( visible );
210 enabledChangedY( visible );
213 enabledChangedM( visible );
216 enabledChangedZ( visible );
219 enabledChangedAngle( visible );
222 enabledChangedDistance( visible );
225 enabledCommonAngleSnapping( visible );
228 enabledChangedBearing( visible );
233void QgsAdvancedDigitizingFloater::updatePos(
const QPoint &pos )
236 move( pos + QPoint( 15, 5 ) );
239void QgsAdvancedDigitizingFloater::hideIfDisabled()
241 if ( !mCadDockWidget || !mCadDockWidget->cadEnabled() || !mActive )
247void QgsAdvancedDigitizingFloater::changeX(
const QString &text )
249 mXLineEdit->setText( text );
252void QgsAdvancedDigitizingFloater::changeY(
const QString &text )
254 mYLineEdit->setText( text );
257void QgsAdvancedDigitizingFloater::changeZ(
const QString &text )
259 mZLineEdit->setText( text );
262void QgsAdvancedDigitizingFloater::changeM(
const QString &text )
264 mMLineEdit->setText( text );
267void QgsAdvancedDigitizingFloater::changeCommonAngleSnapping(
double angle )
269 mCommonAngleSnappingLineEdit->setText(
qgsDoubleNear( angle, 0.0 ) ? tr(
"disabled" ) : QLocale().toString( angle ).append( tr(
" °" ) ) );
272void QgsAdvancedDigitizingFloater::changeDistance(
const QString &text )
274 mDistanceLineEdit->setText( text );
277void QgsAdvancedDigitizingFloater::changeAngle(
const QString &text )
279 mAngleLineEdit->setText( text );
282void QgsAdvancedDigitizingFloater::changeBearing(
const QString &text )
284 mBearingLineEdit->setText( text );
287void QgsAdvancedDigitizingFloater::changeLockX(
bool locked )
291 mXLineEdit->setStyleSheet( QString() );
292 mXLabel->setStyleSheet( QString() );
296 mXLineEdit->setStyleSheet( QStringLiteral(
"font-weight: bold" ) );
297 mXLabel->setStyleSheet( QStringLiteral(
"font-weight: bold" ) );
301void QgsAdvancedDigitizingFloater::changeLockY(
bool locked )
305 mYLineEdit->setStyleSheet( QString() );
306 mYLabel->setStyleSheet( QString() );
310 mYLineEdit->setStyleSheet( QStringLiteral(
"font-weight: bold" ) );
311 mYLabel->setStyleSheet( QStringLiteral(
"font-weight: bold" ) );
315void QgsAdvancedDigitizingFloater::changeLockZ(
bool locked )
319 mZLineEdit->setStyleSheet( QString() );
320 mZLabel->setStyleSheet( QString() );
324 mZLineEdit->setStyleSheet( QStringLiteral(
"font-weight: bold" ) );
325 mZLabel->setStyleSheet( QStringLiteral(
"font-weight: bold" ) );
329void QgsAdvancedDigitizingFloater::changeLockM(
bool locked )
333 mMLineEdit->setStyleSheet( QString() );
334 mMLabel->setStyleSheet( QString() );
338 mMLineEdit->setStyleSheet( QStringLiteral(
"font-weight: bold" ) );
339 mMLabel->setStyleSheet( QStringLiteral(
"font-weight: bold" ) );
343void QgsAdvancedDigitizingFloater::changeLockDistance(
bool locked )
347 mDistanceLineEdit->setStyleSheet( QString() );
348 mDistanceLabel->setStyleSheet( QString() );
352 mDistanceLineEdit->setStyleSheet( QStringLiteral(
"font-weight: bold" ) );
353 mDistanceLabel->setStyleSheet( QStringLiteral(
"font-weight: bold" ) );
357void QgsAdvancedDigitizingFloater::changeLockAngle(
bool locked )
361 mAngleLineEdit->setStyleSheet( QString() );
362 mAngleLabel->setStyleSheet( QString() );
366 mAngleLineEdit->setStyleSheet( QStringLiteral(
"font-weight: bold" ) );
367 mAngleLabel->setStyleSheet( QStringLiteral(
"font-weight: bold" ) );
372void QgsAdvancedDigitizingFloater::changeRelativeX(
bool relative )
376 mXLabel->setText(
"x" );
380 mXLabel->setText(
"Δx" );
385void QgsAdvancedDigitizingFloater::changeRelativeY(
bool relative )
389 mYLabel->setText(
"y" );
393 mYLabel->setText(
"Δy" );
398void QgsAdvancedDigitizingFloater::changeRelativeZ(
bool relative )
402 mZLabel->setText(
"z" );
406 mZLabel->setText(
"Δz" );
411void QgsAdvancedDigitizingFloater::changeRelativeM(
bool relative )
415 mMLabel->setText(
"m" );
419 mMLabel->setText(
"Δm" );
426void QgsAdvancedDigitizingFloater::changeRelativeAngle(
bool relative )
430 mAngleLabel->setText(
"a" );
434 mAngleLabel->setText(
"Δa" );
439void QgsAdvancedDigitizingFloater::focusOnX()
443 mXLineEdit->setFocus();
444 mXLineEdit->selectAll();
448void QgsAdvancedDigitizingFloater::focusOnY()
452 mYLineEdit->setFocus();
453 mYLineEdit->selectAll();
457void QgsAdvancedDigitizingFloater::focusOnZ()
461 mZLineEdit->setFocus();
462 mZLineEdit->selectAll();
466void QgsAdvancedDigitizingFloater::focusOnM()
470 mMLineEdit->setFocus();
471 mMLineEdit->selectAll();
475void QgsAdvancedDigitizingFloater::focusOnDistance()
480 mDistanceLineEdit->setText( cleanedInputValue );
481 mDistanceLineEdit->setFocus();
482 mDistanceLineEdit->selectAll();
486void QgsAdvancedDigitizingFloater::focusOnAngle()
491 mAngleLineEdit->setText( cleanedInputValue );
492 mAngleLineEdit->setFocus();
493 mAngleLineEdit->selectAll();
498void QgsAdvancedDigitizingFloater::enabledChangedX(
bool enabled )
505void QgsAdvancedDigitizingFloater::enabledChangedY(
bool enabled )
512void QgsAdvancedDigitizingFloater::enabledChangedZ(
bool enabled )
519void QgsAdvancedDigitizingFloater::enabledChangedM(
bool enabled )
526void QgsAdvancedDigitizingFloater::enabledChangedDistance(
bool enabled )
533void QgsAdvancedDigitizingFloater::enabledCommonAngleSnapping(
bool enabled )
540void QgsAdvancedDigitizingFloater::enabledChangedAngle(
bool enabled )
547void QgsAdvancedDigitizingFloater::enabledChangedBearing(
bool enabled )
@ Distance
Distance value.
QgsAdvancedDigitizingFloater(QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget)
Create an advanced digitizing floater widget.
void setItemVisibility(const QgsAdvancedDigitizingFloater::FloaterItem &item, bool visible)
Set whether the floater item should be visible or not.
FloaterItem
Available floater items.
bool itemVisibility(const QgsAdvancedDigitizingFloater::FloaterItem &item) const
Returns true if the floater item visibility setting is enabled.
void setActive(bool active)
Set whether the floater should be active or not.
bool active()
Whether the floater is active or not.
An event filter for watching for focus events on a parent object.
void focusIn()
Emitted when parent object gains focus.
void focusOut()
Emitted when parent object loses focus.
Map canvas is a class for displaying all GIS data types on a canvas.
Stores settings for use within QGIS.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference).
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.