mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-04 00:06:46 -05:00
parent
e5e6a13671
commit
0c9f15ee93
@ -198,6 +198,14 @@ Sets the map canvas to ``mapCanvas``
|
||||
.. versionadded:: 3.32
|
||||
%End
|
||||
|
||||
static QString removeSuffix( const QString &text, Qgis::CadConstraintType constraintType );
|
||||
%Docstring
|
||||
Removes unit suffix from the constraint text.
|
||||
|
||||
.. versionadded:: 3.34
|
||||
%End
|
||||
|
||||
|
||||
};
|
||||
|
||||
explicit QgsAdvancedDigitizingDockWidget( QgsMapCanvas *canvas, QWidget *parent = 0 );
|
||||
|
||||
@ -125,8 +125,18 @@ QgsAdvancedDigitizingDockWidget::QgsAdvancedDigitizingDockWidget( QgsMapCanvas *
|
||||
//also watch for focus out events on these widgets
|
||||
QgsFocusWatcher *angleWatcher = new QgsFocusWatcher( mAngleLineEdit );
|
||||
connect( angleWatcher, &QgsFocusWatcher::focusOut, this, &QgsAdvancedDigitizingDockWidget::constraintFocusOut );
|
||||
connect( angleWatcher, &QgsFocusWatcher::focusIn, this, [ = ]()
|
||||
{
|
||||
const QString cleanedInputValue { QgsAdvancedDigitizingDockWidget::CadConstraint::removeSuffix( mAngleLineEdit->text(), Qgis::CadConstraintType::Angle ) };
|
||||
whileBlocking( mAngleLineEdit )->setText( cleanedInputValue );
|
||||
} );
|
||||
QgsFocusWatcher *distanceWatcher = new QgsFocusWatcher( mDistanceLineEdit );
|
||||
connect( distanceWatcher, &QgsFocusWatcher::focusOut, this, &QgsAdvancedDigitizingDockWidget::constraintFocusOut );
|
||||
connect( distanceWatcher, &QgsFocusWatcher::focusIn, this, [ = ]()
|
||||
{
|
||||
const QString cleanedInputValue { QgsAdvancedDigitizingDockWidget::CadConstraint::removeSuffix( mDistanceLineEdit->text(), Qgis::CadConstraintType::Distance ) };
|
||||
whileBlocking( mDistanceLineEdit )->setText( cleanedInputValue );
|
||||
} );
|
||||
QgsFocusWatcher *xWatcher = new QgsFocusWatcher( mXLineEdit );
|
||||
connect( xWatcher, &QgsFocusWatcher::focusOut, this, &QgsAdvancedDigitizingDockWidget::constraintFocusOut );
|
||||
QgsFocusWatcher *yWatcher = new QgsFocusWatcher( mYLineEdit );
|
||||
@ -818,17 +828,7 @@ double QgsAdvancedDigitizingDockWidget::parseUserInput( const QString &inputValu
|
||||
{
|
||||
ok = false;
|
||||
|
||||
QString cleanedInputValue { inputValue };
|
||||
|
||||
// Remove angle suffix
|
||||
if ( type == Qgis::CadConstraintType::Angle )
|
||||
cleanedInputValue.remove( tr( "°" ) );
|
||||
|
||||
// Remove distance unit suffix
|
||||
const Qgis::DistanceUnit distanceUnit { QgsProject::instance()->distanceUnits() };
|
||||
if ( type == Qgis::CadConstraintType::Distance )
|
||||
cleanedInputValue.remove( QgsUnitTypes::toAbbreviatedString( distanceUnit ) );
|
||||
|
||||
const QString cleanedInputValue { CadConstraint::removeSuffix( inputValue, type ) };
|
||||
double value = qgsPermissiveToDouble( cleanedInputValue, ok );
|
||||
|
||||
if ( ! ok )
|
||||
@ -1944,6 +1944,10 @@ void QgsAdvancedDigitizingDockWidget::updateCurrentPoint( const QgsPoint &point
|
||||
|
||||
void QgsAdvancedDigitizingDockWidget::CadConstraint::setLockMode( LockMode mode )
|
||||
{
|
||||
if ( mode == mLockMode )
|
||||
{
|
||||
return;
|
||||
}
|
||||
mLockMode = mode;
|
||||
mLockerButton->setChecked( mode == HardLock );
|
||||
if ( mRepeatingLockButton )
|
||||
@ -2055,6 +2059,37 @@ void QgsAdvancedDigitizingDockWidget::CadConstraint::setMapCanvas( QgsMapCanvas
|
||||
mMapCanvas = mapCanvas;
|
||||
}
|
||||
|
||||
QString QgsAdvancedDigitizingDockWidget::CadConstraint::removeSuffix( const QString &text, Qgis::CadConstraintType constraintType )
|
||||
{
|
||||
QString value { text.trimmed() };
|
||||
switch ( constraintType )
|
||||
{
|
||||
case Qgis::CadConstraintType::Distance:
|
||||
{
|
||||
// Remove distance unit suffix
|
||||
const QString distanceUnit { QgsUnitTypes::toAbbreviatedString( QgsProject::instance()->distanceUnits() ).prepend( ' ' ) };
|
||||
if ( value.endsWith( distanceUnit ) )
|
||||
{
|
||||
value.remove( distanceUnit );
|
||||
}
|
||||
break;
|
||||
}
|
||||
case Qgis::CadConstraintType::Angle:
|
||||
{
|
||||
// Remove angle suffix
|
||||
const QString angleUnit { tr( "°" ).prepend( ' ' ) };
|
||||
if ( value.endsWith( angleUnit ) )
|
||||
{
|
||||
value.remove( angleUnit );
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
QgsPoint QgsAdvancedDigitizingDockWidget::currentPointV2( bool *exist ) const
|
||||
{
|
||||
if ( exist )
|
||||
|
||||
@ -225,6 +225,13 @@ class GUI_EXPORT QgsAdvancedDigitizingDockWidget : public QgsDockWidget, private
|
||||
*/
|
||||
void setMapCanvas( QgsMapCanvas *mapCanvas );
|
||||
|
||||
/**
|
||||
* Removes unit suffix from the constraint text.
|
||||
* \since QGIS 3.34
|
||||
*/
|
||||
static QString removeSuffix( const QString &text, Qgis::CadConstraintType constraintType );
|
||||
|
||||
|
||||
private:
|
||||
QLineEdit *mLineEdit = nullptr;
|
||||
QToolButton *mLockerButton = nullptr;
|
||||
|
||||
@ -21,6 +21,7 @@
|
||||
#include "qgsmapcanvas.h"
|
||||
#include "qgssettings.h"
|
||||
#include "qgsfocuswatcher.h"
|
||||
#include "qgsunittypes.h"
|
||||
|
||||
QgsAdvancedDigitizingFloater::QgsAdvancedDigitizingFloater( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget )
|
||||
: QWidget( canvas->viewport() )
|
||||
@ -100,8 +101,18 @@ QgsAdvancedDigitizingFloater::QgsAdvancedDigitizingFloater( QgsMapCanvas *canvas
|
||||
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( mAngleLineEdit, &QLineEdit::returnPressed, cadDockWidget, [ = ]()
|
||||
{
|
||||
cadDockWidget->setAngle( mAngleLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::ReturnPressed );
|
||||
const QString cleanedInputValue { QgsAdvancedDigitizingDockWidget::CadConstraint::removeSuffix( mAngleLineEdit->text(), Qgis::CadConstraintType::Angle ) };
|
||||
whileBlocking( mAngleLineEdit )->setText( cleanedInputValue );
|
||||
} );
|
||||
connect( mDistanceLineEdit, &QLineEdit::returnPressed, cadDockWidget, [ = ]()
|
||||
{
|
||||
cadDockWidget->setDistance( mDistanceLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::ReturnPressed );
|
||||
const QString cleanedInputValue { QgsAdvancedDigitizingDockWidget::CadConstraint::removeSuffix( mDistanceLineEdit->text(), Qgis::CadConstraintType::Distance ) };
|
||||
whileBlocking( mDistanceLineEdit )->setText( cleanedInputValue );
|
||||
} );
|
||||
|
||||
connect( mXLineEdit, &QLineEdit::textEdited, cadDockWidget, [ = ]() { cadDockWidget->setX( mXLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::TextEdited ); } );
|
||||
connect( mYLineEdit, &QLineEdit::textEdited, cadDockWidget, [ = ]() { cadDockWidget->setY( mYLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::TextEdited ); } );
|
||||
@ -119,9 +130,27 @@ QgsAdvancedDigitizingFloater::QgsAdvancedDigitizingFloater( QgsMapCanvas *canvas
|
||||
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 ); } );
|
||||
connect( angleWatcher, &QgsFocusWatcher::focusOut, cadDockWidget, [ = ]()
|
||||
{
|
||||
cadDockWidget->setAngle( mAngleLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::FocusOut );
|
||||
whileBlocking( mAngleLineEdit )->setText( mCadDockWidget->constraintAngle()->displayValue() );
|
||||
} );
|
||||
connect( angleWatcher, &QgsFocusWatcher::focusIn, this, [ = ]()
|
||||
{
|
||||
const QString cleanedInputValue { QgsAdvancedDigitizingDockWidget::CadConstraint::removeSuffix( mAngleLineEdit->text(), Qgis::CadConstraintType::Angle ) };
|
||||
whileBlocking( mAngleLineEdit )->setText( cleanedInputValue );
|
||||
} );
|
||||
QgsFocusWatcher *distanceWatcher = new QgsFocusWatcher( mDistanceLineEdit );
|
||||
connect( distanceWatcher, &QgsFocusWatcher::focusOut, cadDockWidget, [ = ]() { cadDockWidget->setDistance( mDistanceLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::FocusOut ); } );
|
||||
connect( distanceWatcher, &QgsFocusWatcher::focusOut, cadDockWidget, [ = ]()
|
||||
{
|
||||
cadDockWidget->setDistance( mDistanceLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::FocusOut );
|
||||
whileBlocking( mDistanceLineEdit )->setText( mCadDockWidget->constraintDistance()->displayValue() );
|
||||
} );
|
||||
connect( distanceWatcher, &QgsFocusWatcher::focusIn, this, [ = ]()
|
||||
{
|
||||
const QString cleanedInputValue { QgsAdvancedDigitizingDockWidget::CadConstraint::removeSuffix( mDistanceLineEdit->text(), Qgis::CadConstraintType::Distance ) };
|
||||
whileBlocking( mDistanceLineEdit )->setText( cleanedInputValue );
|
||||
} );
|
||||
changeCommonAngleSnapping( mCadDockWidget->commonAngleConstraint() );
|
||||
|
||||
|
||||
@ -453,6 +482,8 @@ void QgsAdvancedDigitizingFloater::focusOnDistance()
|
||||
{
|
||||
if ( mActive )
|
||||
{
|
||||
const QString cleanedInputValue { QgsAdvancedDigitizingDockWidget::CadConstraint::removeSuffix( mDistanceLineEdit->text(), Qgis::CadConstraintType::Distance ) };
|
||||
mDistanceLineEdit->setText( cleanedInputValue );
|
||||
mDistanceLineEdit->setFocus();
|
||||
mDistanceLineEdit->selectAll();
|
||||
}
|
||||
@ -462,6 +493,8 @@ void QgsAdvancedDigitizingFloater::focusOnAngle()
|
||||
{
|
||||
if ( mActive )
|
||||
{
|
||||
const QString cleanedInputValue { QgsAdvancedDigitizingDockWidget::CadConstraint::removeSuffix( mDistanceLineEdit->text(), Qgis::CadConstraintType::Angle ) };
|
||||
mAngleLineEdit->setText( cleanedInputValue );
|
||||
mAngleLineEdit->setFocus();
|
||||
mAngleLineEdit->selectAll();
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user