mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-09 00:08:52 -04:00
commit
d0fceef23a
@ -1,3 +1,12 @@
|
|||||||
# The following has been generated automatically from src/gui/qgsadvanceddigitizingdockwidget.h
|
# The following has been generated automatically from src/gui/qgsadvanceddigitizingdockwidget.h
|
||||||
QgsAdvancedDigitizingDockWidget.CadCapacities.baseClass = QgsAdvancedDigitizingDockWidget
|
QgsAdvancedDigitizingDockWidget.CadCapacities.baseClass = QgsAdvancedDigitizingDockWidget
|
||||||
CadCapacities = QgsAdvancedDigitizingDockWidget # dirty hack since SIP seems to introduce the flags in module
|
CadCapacities = QgsAdvancedDigitizingDockWidget # dirty hack since SIP seems to introduce the flags in module
|
||||||
|
# monkey patching scoped based enum
|
||||||
|
QgsAdvancedDigitizingDockWidget.AdditionalConstraint.NoConstraint.__doc__ = "No additional constraint"
|
||||||
|
QgsAdvancedDigitizingDockWidget.NoConstraint = QgsAdvancedDigitizingDockWidget.AdditionalConstraint.NoConstraint
|
||||||
|
QgsAdvancedDigitizingDockWidget.AdditionalConstraint.Perpendicular.__doc__ = "Perpendicular"
|
||||||
|
QgsAdvancedDigitizingDockWidget.Perpendicular = QgsAdvancedDigitizingDockWidget.AdditionalConstraint.Perpendicular
|
||||||
|
QgsAdvancedDigitizingDockWidget.AdditionalConstraint.Parallel.__doc__ = "Parallel"
|
||||||
|
QgsAdvancedDigitizingDockWidget.Parallel = QgsAdvancedDigitizingDockWidget.AdditionalConstraint.Parallel
|
||||||
|
QgsAdvancedDigitizingDockWidget.AdditionalConstraint.__doc__ = 'Additional constraints which can be enabled\n' + '* NoConstraint: ' + QgsAdvancedDigitizingDockWidget.AdditionalConstraint.NoConstraint.__doc__ + '\n' + '* Perpendicular: ' + QgsAdvancedDigitizingDockWidget.AdditionalConstraint.Perpendicular.__doc__ + '\n' + '* Parallel: ' + QgsAdvancedDigitizingDockWidget.AdditionalConstraint.Parallel.__doc__
|
||||||
|
# --
|
||||||
|
@ -35,13 +35,14 @@ by implementing filters called from QgsMapToolAdvancedDigitizing.
|
|||||||
typedef QFlags<QgsAdvancedDigitizingDockWidget::CadCapacity> CadCapacities;
|
typedef QFlags<QgsAdvancedDigitizingDockWidget::CadCapacity> CadCapacities;
|
||||||
|
|
||||||
|
|
||||||
enum AdditionalConstraint
|
enum class AdditionalConstraint
|
||||||
{
|
{
|
||||||
NoConstraint,
|
NoConstraint,
|
||||||
Perpendicular,
|
Perpendicular,
|
||||||
Parallel
|
Parallel
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class CadConstraint
|
class CadConstraint
|
||||||
{
|
{
|
||||||
%Docstring
|
%Docstring
|
||||||
|
@ -950,8 +950,16 @@ while ($LINE_IDX < $LINE_COUNT){
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Enum declaration
|
# Enum declaration
|
||||||
if ( $LINE =~ m/^\s*enum\s+\w+.*?$/ ){
|
# For scoped and type based enum, the type has to be removed
|
||||||
write_output("ENU1", "$LINE\n");
|
if ( $LINE =~ m/^(\s*enum\s+(class\s+)?(\w+))(:?\s+SIP_.*)?(\s*:\s*\w+)?(?<oneliner>.*)$/ ){
|
||||||
|
write_output("ENU1", "$1");
|
||||||
|
write_output("ENU1", $+{oneliner}) if defined $+{oneliner};
|
||||||
|
write_output("ENU1", "\n");
|
||||||
|
my $enum_qualname = $3;
|
||||||
|
my $is_scope_based = "0";
|
||||||
|
$is_scope_based = "1" if defined $2;
|
||||||
|
my $monkeypatch = "0";
|
||||||
|
$monkeypatch = "1" if defined $is_scope_based eq "1" and $LINE =~ m/SIP_MONKEYPATCH_SCOPEENUM/;
|
||||||
if ($LINE =~ m/\{((\s*\w+)(\s*=\s*[\w\s\d<|]+.*?)?(,?))+\s*\}/){
|
if ($LINE =~ m/\{((\s*\w+)(\s*=\s*[\w\s\d<|]+.*?)?(,?))+\s*\}/){
|
||||||
# one line declaration
|
# one line declaration
|
||||||
$LINE !~ m/=/ or exit_with_error("spify.pl does not handle enum one liners with value assignment. Use multiple lines instead.");
|
$LINE !~ m/=/ or exit_with_error("spify.pl does not handle enum one liners with value assignment. Use multiple lines instead.");
|
||||||
@ -962,6 +970,8 @@ while ($LINE_IDX < $LINE_COUNT){
|
|||||||
$LINE = read_line();
|
$LINE = read_line();
|
||||||
$LINE =~ m/^\s*\{\s*$/ or exit_with_error('Unexpected content: enum should be followed by {');
|
$LINE =~ m/^\s*\{\s*$/ or exit_with_error('Unexpected content: enum should be followed by {');
|
||||||
write_output("ENU2", "$LINE\n");
|
write_output("ENU2", "$LINE\n");
|
||||||
|
push @OUTPUT_PYTHON, "# monkey patching scoped based enum\n" if $is_scope_based eq "1";
|
||||||
|
my @enum_members_doc = ();
|
||||||
while ($LINE_IDX < $LINE_COUNT){
|
while ($LINE_IDX < $LINE_COUNT){
|
||||||
$LINE = read_line();
|
$LINE = read_line();
|
||||||
if (detect_comment_block()){
|
if (detect_comment_block()){
|
||||||
@ -971,13 +981,19 @@ while ($LINE_IDX < $LINE_COUNT){
|
|||||||
next if ($LINE =~ m/^\s*\w+\s*\|/); # multi line declaration as sum of enums
|
next if ($LINE =~ m/^\s*\w+\s*\|/); # multi line declaration as sum of enums
|
||||||
|
|
||||||
do {no warnings 'uninitialized';
|
do {no warnings 'uninitialized';
|
||||||
my $enum_decl = $LINE =~ s/^(\s*\w+)(\s+SIP_\w+(?:\([^()]+\))?)?(?:\s*=\s*(?:[\w\s\d|+-]|::|<<)+)?(,?).*$/$1$2$3/r;
|
my $enum_decl = $LINE =~ s/^(\s*(?<em>\w+))(\s+SIP_\w+(?:\([^()]+\))?)?(?:\s*=\s*(?:[\w\s\d|+-]|::|<<)+)?(,?)(:?\s*\/\/!<\s*(?<co>.*)|.*)$/$1$3$4/r;
|
||||||
|
my $enum_member = $+{em};
|
||||||
|
push @enum_members_doc, "'* $enum_member: ' + $ACTUAL_CLASS.$enum_qualname.$2.__doc__";
|
||||||
|
my $comment = $+{co};
|
||||||
|
push @OUTPUT_PYTHON, "$ACTUAL_CLASS.$enum_qualname.$enum_member.__doc__ = \"$comment\"\n" if $is_scope_based eq "1";
|
||||||
|
push @OUTPUT_PYTHON, "$ACTUAL_CLASS.$enum_member = $ACTUAL_CLASS.$enum_qualname.$enum_member\n" if $monkeypatch eq "1";
|
||||||
$enum_decl = fix_annotations($enum_decl);
|
$enum_decl = fix_annotations($enum_decl);
|
||||||
write_output("ENU3", "$enum_decl\n");
|
write_output("ENU3", "$enum_decl\n");
|
||||||
};
|
};
|
||||||
detect_comment_block(strict_mode => UNSTRICT);
|
detect_comment_block(strict_mode => UNSTRICT);
|
||||||
}
|
}
|
||||||
write_output("ENU4", "$LINE\n");
|
write_output("ENU4", "$LINE\n");
|
||||||
|
push @OUTPUT_PYTHON, "$ACTUAL_CLASS.$enum_qualname.__doc__ = '$COMMENT\\n' + " . join(" + '\\n' + ", @enum_members_doc) . "\n# --\n" if $is_scope_based eq "1";
|
||||||
# enums don't have Docstring apparently
|
# enums don't have Docstring apparently
|
||||||
$COMMENT = '';
|
$COMMENT = '';
|
||||||
next;
|
next;
|
||||||
|
@ -232,4 +232,12 @@
|
|||||||
#define SIP_PYTHON_SPECIAL_BOOL(method_or_code)
|
#define SIP_PYTHON_SPECIAL_BOOL(method_or_code)
|
||||||
#define SIP_PYTHON_SPECIAL_REPR(method_or_code)
|
#define SIP_PYTHON_SPECIAL_REPR(method_or_code)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If one reformat an enum to a scope based enum
|
||||||
|
* sipify will take care of monkey patching to keep
|
||||||
|
* API compatibility
|
||||||
|
*/
|
||||||
|
#define SIP_MONKEYPATCH_SCOPEENUM
|
||||||
|
|
||||||
|
|
||||||
#endif // QGIS_SIP_H
|
#endif // QGIS_SIP_H
|
||||||
|
@ -116,7 +116,7 @@ void QgsAdvancedDigitizingCanvasItem::paint( QPainter *painter )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Draw segment par/per input
|
// Draw segment par/per input
|
||||||
if ( mAdvancedDigitizingDockWidget->additionalConstraint() != QgsAdvancedDigitizingDockWidget::NoConstraint && hasSnappedSegment )
|
if ( mAdvancedDigitizingDockWidget->additionalConstraint() != QgsAdvancedDigitizingDockWidget::AdditionalConstraint::NoConstraint && hasSnappedSegment )
|
||||||
{
|
{
|
||||||
painter->setPen( mConstruction2Pen );
|
painter->setPen( mConstruction2Pen );
|
||||||
painter->drawLine( snapSegmentPix1, snapSegmentPix2 );
|
painter->drawLine( snapSegmentPix1, snapSegmentPix2 );
|
||||||
@ -230,7 +230,7 @@ void QgsAdvancedDigitizingCanvasItem::paint( QPainter *painter )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Draw constr
|
// Draw constr
|
||||||
if ( mAdvancedDigitizingDockWidget->additionalConstraint() == QgsAdvancedDigitizingDockWidget::NoConstraint )
|
if ( mAdvancedDigitizingDockWidget->additionalConstraint() == QgsAdvancedDigitizingDockWidget::AdditionalConstraint::NoConstraint )
|
||||||
{
|
{
|
||||||
if ( curPointExist && previousPointExist )
|
if ( curPointExist && previousPointExist )
|
||||||
{
|
{
|
||||||
|
@ -48,7 +48,7 @@ QgsAdvancedDigitizingDockWidget::QgsAdvancedDigitizingDockWidget( QgsMapCanvas *
|
|||||||
mDistanceConstraint.reset( new CadConstraint( mDistanceLineEdit, mLockDistanceButton, nullptr, mRepeatingLockDistanceButton ) );
|
mDistanceConstraint.reset( new CadConstraint( mDistanceLineEdit, mLockDistanceButton, nullptr, mRepeatingLockDistanceButton ) );
|
||||||
mXConstraint.reset( new CadConstraint( mXLineEdit, mLockXButton, mRelativeXButton, mRepeatingLockXButton ) );
|
mXConstraint.reset( new CadConstraint( mXLineEdit, mLockXButton, mRelativeXButton, mRepeatingLockXButton ) );
|
||||||
mYConstraint.reset( new CadConstraint( mYLineEdit, mLockYButton, mRelativeYButton, mRepeatingLockYButton ) );
|
mYConstraint.reset( new CadConstraint( mYLineEdit, mLockYButton, mRelativeYButton, mRepeatingLockYButton ) );
|
||||||
mAdditionalConstraint = NoConstraint;
|
mAdditionalConstraint = AdditionalConstraint::NoConstraint;
|
||||||
|
|
||||||
mMapCanvas->installEventFilter( this );
|
mMapCanvas->installEventFilter( this );
|
||||||
mAngleLineEdit->installEventFilter( this );
|
mAngleLineEdit->installEventFilter( this );
|
||||||
@ -187,15 +187,15 @@ void QgsAdvancedDigitizingDockWidget::additionalConstraintClicked( bool activate
|
|||||||
{
|
{
|
||||||
if ( !activated )
|
if ( !activated )
|
||||||
{
|
{
|
||||||
lockAdditionalConstraint( NoConstraint );
|
lockAdditionalConstraint( AdditionalConstraint::NoConstraint );
|
||||||
}
|
}
|
||||||
if ( sender() == mParallelAction )
|
if ( sender() == mParallelAction )
|
||||||
{
|
{
|
||||||
lockAdditionalConstraint( Parallel );
|
lockAdditionalConstraint( AdditionalConstraint::Parallel );
|
||||||
}
|
}
|
||||||
else if ( sender() == mPerpendicularAction )
|
else if ( sender() == mPerpendicularAction )
|
||||||
{
|
{
|
||||||
lockAdditionalConstraint( Perpendicular );
|
lockAdditionalConstraint( AdditionalConstraint::Perpendicular );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -258,7 +258,7 @@ void QgsAdvancedDigitizingDockWidget::releaseLocks( bool releaseRepeatingLocks )
|
|||||||
{
|
{
|
||||||
// release all locks except construction mode
|
// release all locks except construction mode
|
||||||
|
|
||||||
lockAdditionalConstraint( NoConstraint );
|
lockAdditionalConstraint( AdditionalConstraint::NoConstraint );
|
||||||
|
|
||||||
if ( releaseRepeatingLocks || !mAngleConstraint->isRepeatingLock() )
|
if ( releaseRepeatingLocks || !mAngleConstraint->isRepeatingLock() )
|
||||||
mAngleConstraint->setLockMode( CadConstraint::NoLock );
|
mAngleConstraint->setLockMode( CadConstraint::NoLock );
|
||||||
@ -380,7 +380,7 @@ void QgsAdvancedDigitizingDockWidget::lockConstraint( bool activate /* default t
|
|||||||
// deactivate perpendicular/parallel if angle has been activated
|
// deactivate perpendicular/parallel if angle has been activated
|
||||||
if ( constraint == mAngleConstraint.get() )
|
if ( constraint == mAngleConstraint.get() )
|
||||||
{
|
{
|
||||||
lockAdditionalConstraint( NoConstraint );
|
lockAdditionalConstraint( AdditionalConstraint::NoConstraint );
|
||||||
}
|
}
|
||||||
|
|
||||||
// run a fake map mouse event to update the paint item
|
// run a fake map mouse event to update the paint item
|
||||||
@ -417,8 +417,8 @@ void QgsAdvancedDigitizingDockWidget::constraintFocusOut()
|
|||||||
void QgsAdvancedDigitizingDockWidget::lockAdditionalConstraint( AdditionalConstraint constraint )
|
void QgsAdvancedDigitizingDockWidget::lockAdditionalConstraint( AdditionalConstraint constraint )
|
||||||
{
|
{
|
||||||
mAdditionalConstraint = constraint;
|
mAdditionalConstraint = constraint;
|
||||||
mPerpendicularAction->setChecked( constraint == Perpendicular );
|
mPerpendicularAction->setChecked( constraint == AdditionalConstraint::Perpendicular );
|
||||||
mParallelAction->setChecked( constraint == Parallel );
|
mParallelAction->setChecked( constraint == AdditionalConstraint::Parallel );
|
||||||
}
|
}
|
||||||
|
|
||||||
void QgsAdvancedDigitizingDockWidget::updateCapacity( bool updateUIwithoutChange )
|
void QgsAdvancedDigitizingDockWidget::updateCapacity( bool updateUIwithoutChange )
|
||||||
@ -465,7 +465,7 @@ void QgsAdvancedDigitizingDockWidget::updateCapacity( bool updateUIwithoutChange
|
|||||||
|
|
||||||
if ( !absoluteAngle )
|
if ( !absoluteAngle )
|
||||||
{
|
{
|
||||||
lockAdditionalConstraint( NoConstraint );
|
lockAdditionalConstraint( AdditionalConstraint::NoConstraint );
|
||||||
}
|
}
|
||||||
|
|
||||||
// absolute angle = azimuth, relative = from previous line
|
// absolute angle = azimuth, relative = from previous line
|
||||||
@ -663,7 +663,7 @@ QList<QgsPointXY> QgsAdvancedDigitizingDockWidget::snapSegmentToAllLayers( const
|
|||||||
|
|
||||||
bool QgsAdvancedDigitizingDockWidget::alignToSegment( QgsMapMouseEvent *e, CadConstraint::LockMode lockMode )
|
bool QgsAdvancedDigitizingDockWidget::alignToSegment( QgsMapMouseEvent *e, CadConstraint::LockMode lockMode )
|
||||||
{
|
{
|
||||||
if ( mAdditionalConstraint == NoConstraint )
|
if ( mAdditionalConstraint == AdditionalConstraint::NoConstraint )
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -685,7 +685,7 @@ bool QgsAdvancedDigitizingDockWidget::alignToSegment( QgsMapMouseEvent *e, CadCo
|
|||||||
angle -= std::atan2( previousPt.y() - penultimatePt.y(), previousPt.x() - penultimatePt.x() );
|
angle -= std::atan2( previousPt.y() - penultimatePt.y(), previousPt.x() - penultimatePt.x() );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( mAdditionalConstraint == Perpendicular )
|
if ( mAdditionalConstraint == AdditionalConstraint::Perpendicular )
|
||||||
{
|
{
|
||||||
angle += M_PI_2;
|
angle += M_PI_2;
|
||||||
}
|
}
|
||||||
@ -696,7 +696,7 @@ bool QgsAdvancedDigitizingDockWidget::alignToSegment( QgsMapMouseEvent *e, CadCo
|
|||||||
mAngleConstraint->setLockMode( lockMode );
|
mAngleConstraint->setLockMode( lockMode );
|
||||||
if ( lockMode == CadConstraint::HardLock )
|
if ( lockMode == CadConstraint::HardLock )
|
||||||
{
|
{
|
||||||
mAdditionalConstraint = NoConstraint;
|
mAdditionalConstraint = AdditionalConstraint::NoConstraint;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -931,15 +931,15 @@ bool QgsAdvancedDigitizingDockWidget::filterKeyPress( QKeyEvent *e )
|
|||||||
|
|
||||||
if ( !parallel && !perpendicular )
|
if ( !parallel && !perpendicular )
|
||||||
{
|
{
|
||||||
lockAdditionalConstraint( Perpendicular );
|
lockAdditionalConstraint( AdditionalConstraint::Perpendicular );
|
||||||
}
|
}
|
||||||
else if ( perpendicular )
|
else if ( perpendicular )
|
||||||
{
|
{
|
||||||
lockAdditionalConstraint( Parallel );
|
lockAdditionalConstraint( AdditionalConstraint::Parallel );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
lockAdditionalConstraint( NoConstraint );
|
lockAdditionalConstraint( AdditionalConstraint::NoConstraint );
|
||||||
}
|
}
|
||||||
e->accept();
|
e->accept();
|
||||||
}
|
}
|
||||||
|
@ -65,13 +65,14 @@ class GUI_EXPORT QgsAdvancedDigitizingDockWidget : public QgsDockWidget, private
|
|||||||
/**
|
/**
|
||||||
* Additional constraints which can be enabled
|
* Additional constraints which can be enabled
|
||||||
*/
|
*/
|
||||||
enum AdditionalConstraint
|
enum class AdditionalConstraint SIP_MONKEYPATCH_SCOPEENUM : int
|
||||||
{
|
{
|
||||||
NoConstraint, //!< No additional constraint
|
NoConstraint, //!< No additional constraint
|
||||||
Perpendicular, //!< Perpendicular
|
Perpendicular, //!< Perpendicular
|
||||||
Parallel //!< Parallel
|
Parallel //!< Parallel
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup gui
|
* \ingroup gui
|
||||||
* \brief The CadConstraint is an abstract class for all basic constraints (angle/distance/x/y).
|
* \brief The CadConstraint is an abstract class for all basic constraints (angle/distance/x/y).
|
||||||
|
Loading…
x
Reference in New Issue
Block a user