mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-06 00:03:16 -05:00
parent
e5e6a13671
commit
0c9f15ee93
@ -198,6 +198,14 @@ Sets the map canvas to ``mapCanvas``
|
|||||||
.. versionadded:: 3.32
|
.. versionadded:: 3.32
|
||||||
%End
|
%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 );
|
explicit QgsAdvancedDigitizingDockWidget( QgsMapCanvas *canvas, QWidget *parent = 0 );
|
||||||
|
|||||||
@ -125,8 +125,18 @@ QgsAdvancedDigitizingDockWidget::QgsAdvancedDigitizingDockWidget( QgsMapCanvas *
|
|||||||
//also watch for focus out events on these widgets
|
//also watch for focus out events on these widgets
|
||||||
QgsFocusWatcher *angleWatcher = new QgsFocusWatcher( mAngleLineEdit );
|
QgsFocusWatcher *angleWatcher = new QgsFocusWatcher( mAngleLineEdit );
|
||||||
connect( angleWatcher, &QgsFocusWatcher::focusOut, this, &QgsAdvancedDigitizingDockWidget::constraintFocusOut );
|
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 );
|
QgsFocusWatcher *distanceWatcher = new QgsFocusWatcher( mDistanceLineEdit );
|
||||||
connect( distanceWatcher, &QgsFocusWatcher::focusOut, this, &QgsAdvancedDigitizingDockWidget::constraintFocusOut );
|
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 );
|
QgsFocusWatcher *xWatcher = new QgsFocusWatcher( mXLineEdit );
|
||||||
connect( xWatcher, &QgsFocusWatcher::focusOut, this, &QgsAdvancedDigitizingDockWidget::constraintFocusOut );
|
connect( xWatcher, &QgsFocusWatcher::focusOut, this, &QgsAdvancedDigitizingDockWidget::constraintFocusOut );
|
||||||
QgsFocusWatcher *yWatcher = new QgsFocusWatcher( mYLineEdit );
|
QgsFocusWatcher *yWatcher = new QgsFocusWatcher( mYLineEdit );
|
||||||
@ -818,17 +828,7 @@ double QgsAdvancedDigitizingDockWidget::parseUserInput( const QString &inputValu
|
|||||||
{
|
{
|
||||||
ok = false;
|
ok = false;
|
||||||
|
|
||||||
QString cleanedInputValue { inputValue };
|
const QString cleanedInputValue { CadConstraint::removeSuffix( inputValue, type ) };
|
||||||
|
|
||||||
// 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 ) );
|
|
||||||
|
|
||||||
double value = qgsPermissiveToDouble( cleanedInputValue, ok );
|
double value = qgsPermissiveToDouble( cleanedInputValue, ok );
|
||||||
|
|
||||||
if ( ! ok )
|
if ( ! ok )
|
||||||
@ -1944,6 +1944,10 @@ void QgsAdvancedDigitizingDockWidget::updateCurrentPoint( const QgsPoint &point
|
|||||||
|
|
||||||
void QgsAdvancedDigitizingDockWidget::CadConstraint::setLockMode( LockMode mode )
|
void QgsAdvancedDigitizingDockWidget::CadConstraint::setLockMode( LockMode mode )
|
||||||
{
|
{
|
||||||
|
if ( mode == mLockMode )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
mLockMode = mode;
|
mLockMode = mode;
|
||||||
mLockerButton->setChecked( mode == HardLock );
|
mLockerButton->setChecked( mode == HardLock );
|
||||||
if ( mRepeatingLockButton )
|
if ( mRepeatingLockButton )
|
||||||
@ -2055,6 +2059,37 @@ void QgsAdvancedDigitizingDockWidget::CadConstraint::setMapCanvas( QgsMapCanvas
|
|||||||
mMapCanvas = mapCanvas;
|
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
|
QgsPoint QgsAdvancedDigitizingDockWidget::currentPointV2( bool *exist ) const
|
||||||
{
|
{
|
||||||
if ( exist )
|
if ( exist )
|
||||||
|
|||||||
@ -225,6 +225,13 @@ class GUI_EXPORT QgsAdvancedDigitizingDockWidget : public QgsDockWidget, private
|
|||||||
*/
|
*/
|
||||||
void setMapCanvas( QgsMapCanvas *mapCanvas );
|
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:
|
private:
|
||||||
QLineEdit *mLineEdit = nullptr;
|
QLineEdit *mLineEdit = nullptr;
|
||||||
QToolButton *mLockerButton = nullptr;
|
QToolButton *mLockerButton = nullptr;
|
||||||
|
|||||||
@ -21,6 +21,7 @@
|
|||||||
#include "qgsmapcanvas.h"
|
#include "qgsmapcanvas.h"
|
||||||
#include "qgssettings.h"
|
#include "qgssettings.h"
|
||||||
#include "qgsfocuswatcher.h"
|
#include "qgsfocuswatcher.h"
|
||||||
|
#include "qgsunittypes.h"
|
||||||
|
|
||||||
QgsAdvancedDigitizingFloater::QgsAdvancedDigitizingFloater( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget )
|
QgsAdvancedDigitizingFloater::QgsAdvancedDigitizingFloater( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget )
|
||||||
: QWidget( canvas->viewport() )
|
: QWidget( canvas->viewport() )
|
||||||
@ -100,8 +101,18 @@ QgsAdvancedDigitizingFloater::QgsAdvancedDigitizingFloater( QgsMapCanvas *canvas
|
|||||||
connect( mYLineEdit, &QLineEdit::returnPressed, cadDockWidget, [ = ]() { cadDockWidget->setY( mYLineEdit->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( mZLineEdit, &QLineEdit::returnPressed, cadDockWidget, [ = ]() { cadDockWidget->setZ( mZLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::ReturnPressed ); } );
|
||||||
connect( mMLineEdit, &QLineEdit::returnPressed, cadDockWidget, [ = ]() { cadDockWidget->setM( mMLineEdit->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( mAngleLineEdit, &QLineEdit::returnPressed, cadDockWidget, [ = ]()
|
||||||
connect( mDistanceLineEdit, &QLineEdit::returnPressed, cadDockWidget, [ = ]() { cadDockWidget->setDistance( mDistanceLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::ReturnPressed ); } );
|
{
|
||||||
|
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( mXLineEdit, &QLineEdit::textEdited, cadDockWidget, [ = ]() { cadDockWidget->setX( mXLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::TextEdited ); } );
|
||||||
connect( mYLineEdit, &QLineEdit::textEdited, cadDockWidget, [ = ]() { cadDockWidget->setY( mYLineEdit->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 );
|
QgsFocusWatcher *mWatcher = new QgsFocusWatcher( mYLineEdit );
|
||||||
connect( mWatcher, &QgsFocusWatcher::focusOut, cadDockWidget, [ = ]() { cadDockWidget->setM( mMLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::FocusOut ); } );
|
connect( mWatcher, &QgsFocusWatcher::focusOut, cadDockWidget, [ = ]() { cadDockWidget->setM( mMLineEdit->text(), QgsAdvancedDigitizingDockWidget::WidgetSetMode::FocusOut ); } );
|
||||||
QgsFocusWatcher *angleWatcher = new QgsFocusWatcher( mAngleLineEdit );
|
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 );
|
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() );
|
changeCommonAngleSnapping( mCadDockWidget->commonAngleConstraint() );
|
||||||
|
|
||||||
|
|
||||||
@ -453,6 +482,8 @@ void QgsAdvancedDigitizingFloater::focusOnDistance()
|
|||||||
{
|
{
|
||||||
if ( mActive )
|
if ( mActive )
|
||||||
{
|
{
|
||||||
|
const QString cleanedInputValue { QgsAdvancedDigitizingDockWidget::CadConstraint::removeSuffix( mDistanceLineEdit->text(), Qgis::CadConstraintType::Distance ) };
|
||||||
|
mDistanceLineEdit->setText( cleanedInputValue );
|
||||||
mDistanceLineEdit->setFocus();
|
mDistanceLineEdit->setFocus();
|
||||||
mDistanceLineEdit->selectAll();
|
mDistanceLineEdit->selectAll();
|
||||||
}
|
}
|
||||||
@ -462,6 +493,8 @@ void QgsAdvancedDigitizingFloater::focusOnAngle()
|
|||||||
{
|
{
|
||||||
if ( mActive )
|
if ( mActive )
|
||||||
{
|
{
|
||||||
|
const QString cleanedInputValue { QgsAdvancedDigitizingDockWidget::CadConstraint::removeSuffix( mDistanceLineEdit->text(), Qgis::CadConstraintType::Angle ) };
|
||||||
|
mAngleLineEdit->setText( cleanedInputValue );
|
||||||
mAngleLineEdit->setFocus();
|
mAngleLineEdit->setFocus();
|
||||||
mAngleLineEdit->selectAll();
|
mAngleLineEdit->selectAll();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user