Navigation Menu

Skip to content

Commit

Permalink
[UI] Fix/add zm to QgsAdvancedDigitizingFloater
Browse files Browse the repository at this point in the history
  • Loading branch information
lbartoletti authored and nyalldawson committed Sep 23, 2021
1 parent 6fd34ca commit ae444a3
Show file tree
Hide file tree
Showing 3 changed files with 204 additions and 26 deletions.
116 changes: 116 additions & 0 deletions src/gui/qgsadvanceddigitizingfloater.cpp
Expand Up @@ -44,50 +44,70 @@ QgsAdvancedDigitizingFloater::QgsAdvancedDigitizingFloater( QgsMapCanvas *canvas
mDistanceLineEdit->installEventFilter( cadDockWidget );
mXLineEdit->installEventFilter( cadDockWidget );
mYLineEdit->installEventFilter( cadDockWidget );
mZLineEdit->installEventFilter( cadDockWidget );
mMLineEdit->installEventFilter( cadDockWidget );

// Connect all cadDockWidget's signals to update the widget's display
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::cadEnabledChanged, this, &QgsAdvancedDigitizingFloater::hideIfDisabled );

connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::valueXChanged, this, &QgsAdvancedDigitizingFloater::changeX );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::valueYChanged, this, &QgsAdvancedDigitizingFloater::changeY );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::valueZChanged, this, &QgsAdvancedDigitizingFloater::changeZ );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::valueMChanged, this, &QgsAdvancedDigitizingFloater::changeM );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::valueAngleChanged, this, &QgsAdvancedDigitizingFloater::changeAngle );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::valueDistanceChanged, this, &QgsAdvancedDigitizingFloater::changeDistance );

connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::lockXChanged, this, &QgsAdvancedDigitizingFloater::changeLockX );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::lockYChanged, this, &QgsAdvancedDigitizingFloater::changeLockY );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::lockZChanged, this, &QgsAdvancedDigitizingFloater::changeLockZ );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::lockMChanged, this, &QgsAdvancedDigitizingFloater::changeLockM );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::lockAngleChanged, this, &QgsAdvancedDigitizingFloater::changeLockAngle );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::lockDistanceChanged, this, &QgsAdvancedDigitizingFloater::changeLockDistance );

connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::relativeXChanged, this, &QgsAdvancedDigitizingFloater::changeRelativeX );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::relativeYChanged, this, &QgsAdvancedDigitizingFloater::changeRelativeY );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::relativeZChanged, this, &QgsAdvancedDigitizingFloater::changeRelativeZ );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::relativeMChanged, this, &QgsAdvancedDigitizingFloater::changeRelativeM );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::relativeAngleChanged, this, &QgsAdvancedDigitizingFloater::changeRelativeAngle );
// distance is always relative

connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::focusOnXRequested, this, &QgsAdvancedDigitizingFloater::focusOnX );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::focusOnYRequested, this, &QgsAdvancedDigitizingFloater::focusOnY );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::focusOnZRequested, this, &QgsAdvancedDigitizingFloater::focusOnZ );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::focusOnMRequested, this, &QgsAdvancedDigitizingFloater::focusOnM );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::focusOnAngleRequested, this, &QgsAdvancedDigitizingFloater::focusOnAngle );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::focusOnDistanceRequested, this, &QgsAdvancedDigitizingFloater::focusOnDistance );

connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::enabledChangedX, this, &QgsAdvancedDigitizingFloater::enabledChangedX );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::enabledChangedY, this, &QgsAdvancedDigitizingFloater::enabledChangedY );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::enabledChangedZ, this, &QgsAdvancedDigitizingFloater::enabledChangedZ );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::enabledChangedM, this, &QgsAdvancedDigitizingFloater::enabledChangedM );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::enabledChangedAngle, this, &QgsAdvancedDigitizingFloater::enabledChangedAngle );
connect( cadDockWidget, &QgsAdvancedDigitizingDockWidget::enabledChangedDistance, this, &QgsAdvancedDigitizingFloater::enabledChangedDistance );

// Connect our line edits signals to update cadDockWidget's state (implementation copied from QgsAdvancedDigitizingDockWidget)
connect( mXLineEdit, &QLineEdit::returnPressed, cadDockWidget, [ = ]() { cadDockWidget->setX( mXLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::ReturnPressed ); } );
connect( mYLineEdit, &QLineEdit::returnPressed, cadDockWidget, [ = ]() { cadDockWidget->setY( mYLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::ReturnPressed ); } );
connect( mZLineEdit, &QLineEdit::returnPressed, cadDockWidget, [ = ]() { cadDockWidget->setZ( mZLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::ReturnPressed ); } );
connect( mMLineEdit, &QLineEdit::returnPressed, cadDockWidget, [ = ]() { cadDockWidget->setM( mMLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::ReturnPressed ); } );
connect( mAngleLineEdit, &QLineEdit::returnPressed, cadDockWidget, [ = ]() { cadDockWidget->setAngle( mAngleLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::ReturnPressed ); } );
connect( mDistanceLineEdit, &QLineEdit::returnPressed, cadDockWidget, [ = ]() { cadDockWidget->setDistance( mDistanceLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::ReturnPressed ); } );

connect( mXLineEdit, &QLineEdit::textEdited, cadDockWidget, [ = ]() { cadDockWidget->setX( mXLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::TextEdited ); } );
connect( mYLineEdit, &QLineEdit::textEdited, cadDockWidget, [ = ]() { cadDockWidget->setY( mYLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::TextEdited ); } );
connect( mZLineEdit, &QLineEdit::textEdited, cadDockWidget, [ = ]() { cadDockWidget->setZ( mZLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::TextEdited ); } );
connect( mMLineEdit, &QLineEdit::textEdited, cadDockWidget, [ = ]() { cadDockWidget->setM( mMLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::TextEdited ); } );
connect( mAngleLineEdit, &QLineEdit::textEdited, cadDockWidget, [ = ]() { cadDockWidget->setAngle( mAngleLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::TextEdited ); } );
connect( mDistanceLineEdit, &QLineEdit::textEdited, cadDockWidget, [ = ]() { cadDockWidget->setDistance( mDistanceLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::TextEdited ); } );

QgsFocusWatcher *xWatcher = new QgsFocusWatcher( mXLineEdit );
connect( xWatcher, &QgsFocusWatcher::focusOut, cadDockWidget, [ = ]() { cadDockWidget->setX( mXLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::FocusOut ); } );
QgsFocusWatcher *yWatcher = new QgsFocusWatcher( mYLineEdit );
connect( yWatcher, &QgsFocusWatcher::focusOut, cadDockWidget, [ = ]() { cadDockWidget->setY( mYLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::FocusOut ); } );
QgsFocusWatcher *zWatcher = new QgsFocusWatcher( mZLineEdit );
connect( zWatcher, &QgsFocusWatcher::focusOut, cadDockWidget, [ = ]() { cadDockWidget->setZ( mZLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::FocusOut ); } );
QgsFocusWatcher *mWatcher = new QgsFocusWatcher( mYLineEdit );
connect( mWatcher, &QgsFocusWatcher::focusOut, cadDockWidget, [ = ]() { cadDockWidget->setM( mMLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::FocusOut ); } );
QgsFocusWatcher *angleWatcher = new QgsFocusWatcher( mAngleLineEdit );
connect( angleWatcher, &QgsFocusWatcher::focusOut, cadDockWidget, [ = ]() { cadDockWidget->setAngle( mAngleLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::FocusOut ); } );
QgsFocusWatcher *distanceWatcher = new QgsFocusWatcher( mDistanceLineEdit );
Expand Down Expand Up @@ -159,6 +179,16 @@ void QgsAdvancedDigitizingFloater::changeY( const QString &text )
mYLineEdit->setText( text );
}

void QgsAdvancedDigitizingFloater::changeZ( const QString &text )
{
mZLineEdit->setText( text );
}

void QgsAdvancedDigitizingFloater::changeM( const QString &text )
{
mMLineEdit->setText( text );
}

void QgsAdvancedDigitizingFloater::changeDistance( const QString &text )
{
mDistanceLineEdit->setText( text );
Expand Down Expand Up @@ -197,6 +227,34 @@ void QgsAdvancedDigitizingFloater::changeLockY( bool locked )
}
}

void QgsAdvancedDigitizingFloater::changeLockZ( bool locked )
{
if ( !locked )
{
mZLineEdit->setStyleSheet( QString() );
mZLabel->setStyleSheet( QString() );
}
else
{
mZLineEdit->setStyleSheet( QStringLiteral( "font-weight: bold" ) );
mZLabel->setStyleSheet( QStringLiteral( "font-weight: bold" ) );
}
}

void QgsAdvancedDigitizingFloater::changeLockM( bool locked )
{
if ( !locked )
{
mMLineEdit->setStyleSheet( QString() );
mMLabel->setStyleSheet( QString() );
}
else
{
mMLineEdit->setStyleSheet( QStringLiteral( "font-weight: bold" ) );
mMLabel->setStyleSheet( QStringLiteral( "font-weight: bold" ) );
}
}

void QgsAdvancedDigitizingFloater::changeLockDistance( bool locked )
{
if ( !locked )
Expand Down Expand Up @@ -252,6 +310,32 @@ void QgsAdvancedDigitizingFloater::changeRelativeY( bool relative )
adjustSize();
}

void QgsAdvancedDigitizingFloater::changeRelativeZ( bool relative )
{
if ( !relative )
{
mZLabel->setText( "z" );
}
else
{
mZLabel->setText( "Δz" );
}
adjustSize();
}

void QgsAdvancedDigitizingFloater::changeRelativeM( bool relative )
{
if ( !relative )
{
mMLabel->setText( "m" );
}
else
{
mMLabel->setText( "Δm" );
}
adjustSize();
}

// distance is always relative

void QgsAdvancedDigitizingFloater::changeRelativeAngle( bool relative )
Expand Down Expand Up @@ -285,6 +369,24 @@ void QgsAdvancedDigitizingFloater::focusOnY()
}
}

void QgsAdvancedDigitizingFloater::focusOnZ()
{
if ( mActive )
{
mZLineEdit->setFocus();
mZLineEdit->selectAll();
}
}

void QgsAdvancedDigitizingFloater::focusOnM()
{
if ( mActive )
{
mMLineEdit->setFocus();
mMLineEdit->selectAll();
}
}

void QgsAdvancedDigitizingFloater::focusOnDistance()
{
if ( mActive )
Expand Down Expand Up @@ -318,6 +420,20 @@ void QgsAdvancedDigitizingFloater::enabledChangedY( bool enabled )
adjustSize();
}

void QgsAdvancedDigitizingFloater::enabledChangedZ( bool enabled )
{
mZLineEdit->setVisible( enabled );
mZLabel->setVisible( enabled );
adjustSize();
}

void QgsAdvancedDigitizingFloater::enabledChangedM( bool enabled )
{
mMLineEdit->setVisible( enabled );
mMLabel->setVisible( enabled );
adjustSize();
}

void QgsAdvancedDigitizingFloater::enabledChangedDistance( bool enabled )
{
mDistanceLineEdit->setVisible( enabled );
Expand Down
10 changes: 10 additions & 0 deletions src/gui/qgsadvanceddigitizingfloater.h
Expand Up @@ -71,22 +71,32 @@ class GUI_EXPORT QgsAdvancedDigitizingFloater : public QWidget, private Ui::QgsA

void changeX( const QString &text );
void changeY( const QString &text );
void changeZ( const QString &text );
void changeM( const QString &text );
void changeDistance( const QString &text );
void changeAngle( const QString &text );
void changeLockX( bool locked );
void changeLockY( bool locked );
void changeLockZ( bool locked );
void changeLockM( bool locked );
void changeLockDistance( bool locked );
void changeLockAngle( bool locked );
void changeRelativeX( bool relative );
void changeRelativeY( bool relative );
void changeRelativeZ( bool relative );
void changeRelativeM( bool relative );
// void changeRelativeDistance( bool relative ); // doesn't happen
void changeRelativeAngle( bool relative );
void focusOnX();
void focusOnY();
void focusOnZ();
void focusOnM();
void focusOnAngle();
void focusOnDistance();
void enabledChangedX( bool enabled );
void enabledChangedY( bool enabled );
void enabledChangedZ( bool enabled );
void enabledChangedM( bool enabled );
void enabledChangedAngle( bool enabled );
void enabledChangedDistance( bool enabled );

Expand Down

0 comments on commit ae444a3

Please sign in to comment.