mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-06 00:07:29 -04:00
Handle flags compatibility with older code when porting enums to enum
class on PyQt5 builds
This commit is contained in:
parent
1e67b81d5e
commit
0aafdbfb77
@ -4166,3 +4166,21 @@ Qgis.GdalResampleAlgorithm.RA_Q3.__doc__ = "Third quartile (selects the third qu
|
||||
Qgis.GdalResampleAlgorithm.__doc__ = "Resampling algorithm to be used (equivalent to GDAL's enum GDALResampleAlg)\n\n.. note::\n\n RA_Max, RA_Min, RA_Median, RA_Q1 and RA_Q3 are available on GDAL >= 2.0 builds only\n\n.. versionadded:: 3.34\n\n" + '* ``RA_NearestNeighbour``: ' + Qgis.GdalResampleAlgorithm.RA_NearestNeighbour.__doc__ + '\n' + '* ``RA_Bilinear``: ' + Qgis.GdalResampleAlgorithm.RA_Bilinear.__doc__ + '\n' + '* ``RA_Cubic``: ' + Qgis.GdalResampleAlgorithm.RA_Cubic.__doc__ + '\n' + '* ``RA_CubicSpline``: ' + Qgis.GdalResampleAlgorithm.RA_CubicSpline.__doc__ + '\n' + '* ``RA_Lanczos``: ' + Qgis.GdalResampleAlgorithm.RA_Lanczos.__doc__ + '\n' + '* ``RA_Average``: ' + Qgis.GdalResampleAlgorithm.RA_Average.__doc__ + '\n' + '* ``RA_Mode``: ' + Qgis.GdalResampleAlgorithm.RA_Mode.__doc__ + '\n' + '* ``RA_Max``: ' + Qgis.GdalResampleAlgorithm.RA_Max.__doc__ + '\n' + '* ``RA_Min``: ' + Qgis.GdalResampleAlgorithm.RA_Min.__doc__ + '\n' + '* ``RA_Median``: ' + Qgis.GdalResampleAlgorithm.RA_Median.__doc__ + '\n' + '* ``RA_Q1``: ' + Qgis.GdalResampleAlgorithm.RA_Q1.__doc__ + '\n' + '* ``RA_Q3``: ' + Qgis.GdalResampleAlgorithm.RA_Q3.__doc__
|
||||
# --
|
||||
Qgis.GdalResampleAlgorithm.baseClass = Qgis
|
||||
from enum import Enum
|
||||
|
||||
|
||||
def _force_int(v): return int(v.value) if isinstance(v, Enum) else v
|
||||
|
||||
|
||||
Qgis.BrowserItemCapability.__or__ = lambda flag1, flag2: Qgis.BrowserItemCapabilities(_force_int(flag1) | _force_int(flag2))
|
||||
Qgis.GeometryValidityFlag.__or__ = lambda flag1, flag2: Qgis.GeometryValidityFlags(_force_int(flag1) | _force_int(flag2))
|
||||
Qgis.LabelingFlag.__or__ = lambda flag1, flag2: Qgis.LabelingFlags(_force_int(flag1) | _force_int(flag2))
|
||||
Qgis.LabelLinePlacementFlag.__or__ = lambda flag1, flag2: Qgis.LabelLinePlacementFlags(_force_int(flag1) | _force_int(flag2))
|
||||
Qgis.MapSettingsFlag.__or__ = lambda flag1, flag2: Qgis.MapSettingsFlags(_force_int(flag1) | _force_int(flag2))
|
||||
Qgis.ProjectReadFlag.__or__ = lambda flag1, flag2: Qgis.ProjectReadFlags(_force_int(flag1) | _force_int(flag2))
|
||||
Qgis.RenderContextFlag.__or__ = lambda flag1, flag2: Qgis.RenderContextFlags(_force_int(flag1) | _force_int(flag2))
|
||||
Qgis.SnappingType.__or__ = lambda flag1, flag2: Qgis.SnappingTypes(_force_int(flag1) | _force_int(flag2))
|
||||
Qgis.SymbolPreviewFlag.__or__ = lambda flag1, flag2: Qgis.SymbolPreviewFlags(_force_int(flag1) | _force_int(flag2))
|
||||
Qgis.SymbolRenderHint.__or__ = lambda flag1, flag2: Qgis.SymbolRenderHints(_force_int(flag1) | _force_int(flag2))
|
||||
Qgis.FeatureRequestFlag.__or__ = lambda flag1, flag2: Qgis.FeatureRequestFlags(_force_int(flag1) | _force_int(flag2))
|
||||
Qgis.ProcessingFeatureSourceDefinitionFlag.__or__ = lambda flag1, flag2: Qgis.ProcessingFeatureSourceDefinitionFlags(_force_int(flag1) | _force_int(flag2))
|
||||
|
@ -63,6 +63,7 @@ my $ACTUAL_CLASS = '';
|
||||
my $PYTHON_SIGNATURE = '';
|
||||
my @ENUM_INT_TYPES = ();
|
||||
my @ENUM_CLASS_NON_INT_TYPES = ();
|
||||
my @ENUM_MONKEY_PATCHED_TYPES = ();
|
||||
|
||||
my $INDENT = '';
|
||||
my $PREV_INDENT = '';
|
||||
@ -1158,8 +1159,9 @@ while ($LINE_IDX < $LINE_COUNT){
|
||||
# Enum declaration
|
||||
# For scoped and type based enum, the type has to be removed
|
||||
if ( $LINE =~ m/^\s*Q_DECLARE_FLAGS\s*\(\s*(?<flags_name>\w+)\s*,\s*(?<flag_name>\w+)\s*\)\s*SIP_MONKEYPATCH_FLAGS_UNNEST\s*\(\s*(?<emkb>\w+)\s*,\s*(?<emkf>\w+)\s*\)\s*$/ ){
|
||||
|
||||
push @OUTPUT_PYTHON, "$+{emkb}.$+{emkf} = $ACTUAL_CLASS.$+{flags_name}\n";
|
||||
push @ENUM_MONKEY_PATCHED_TYPES, [$ACTUAL_CLASS, $+{flags_name}, $+{emkb}, $+{emkf}];
|
||||
|
||||
$LINE =~ s/\s*SIP_MONKEYPATCH_FLAGS_UNNEST\(.*?\)//;
|
||||
}
|
||||
if ( $LINE =~ m/^(\s*enum(\s+Q_DECL_DEPRECATED)?\s+(?<isclass>class\s+)?(?<enum_qualname>\w+))(:?\s+SIP_[^:]*)?(\s*:\s*(?<enum_type>\w+))?(?<oneliner>.*)$/ ){
|
||||
@ -1362,7 +1364,8 @@ while ($LINE_IDX < $LINE_COUNT){
|
||||
}
|
||||
# catch Q_DECLARE_OPERATORS_FOR_FLAGS
|
||||
if ( $LINE =~ m/^(\s*)Q_DECLARE_OPERATORS_FOR_FLAGS\(\s*(.*?)\s*\)\s*$/ ){
|
||||
my $flag = $QFLAG_HASH{$2};
|
||||
my $flags = $2;
|
||||
my $flag = $QFLAG_HASH{$flags};
|
||||
$LINE = "$1QFlags<$flag> operator|($flag f1, QFlags<$flag> f2);\n";
|
||||
|
||||
my $py_flag = $flag;
|
||||
@ -1384,6 +1387,20 @@ while ($LINE_IDX < $LINE_COUNT){
|
||||
push @OUTPUT_PYTHON, "$py_flag.__or__ = lambda flag1, flag2: $py_flag(_force_int(flag1) | _force_int(flag2))\n";
|
||||
}
|
||||
}
|
||||
if ( !$is_qt6 )
|
||||
{
|
||||
foreach ( @ENUM_MONKEY_PATCHED_TYPES ) {
|
||||
if ( $flags eq "$_->[0]::$_->[1]" )
|
||||
{
|
||||
dbg_info("monkey patching flags");
|
||||
if ($HAS_PUSHED_FORCE_INT eq 0) {
|
||||
push @OUTPUT_PYTHON, "from enum import Enum\n\n\ndef _force_int(v): return int(v.value) if isinstance(v, Enum) else v\n\n\n";
|
||||
$HAS_PUSHED_FORCE_INT = 1;
|
||||
}
|
||||
push @OUTPUT_PYTHON, "$py_flag.__or__ = lambda flag1, flag2: $_->[0].$_->[1](_force_int(flag1) | _force_int(flag2))\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# remove Q_INVOKABLE
|
||||
|
Loading…
x
Reference in New Issue
Block a user