63
63
my $PYTHON_SIGNATURE = ' ' ;
64
64
my @ENUM_INT_TYPES = ();
65
65
my @ENUM_CLASS_NON_INT_TYPES = ();
66
+ my @ENUM_MONKEY_PATCHED_TYPES = ();
66
67
67
68
my $INDENT = ' ' ;
68
69
my $PREV_INDENT = ' ' ;
@@ -1158,8 +1159,9 @@ sub detect_non_method_member{
1158
1159
# Enum declaration
1159
1160
# For scoped and type based enum, the type has to be removed
1160
1161
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 *$ / ){
1161
-
1162
1162
push @OUTPUT_PYTHON , " $+ {emkb}.$+ {emkf} = $ACTUAL_CLASS .$+ {flags_name}\n " ;
1163
+ push @ENUM_MONKEY_PATCHED_TYPES , [$ACTUAL_CLASS , $+ {flags_name }, $+ {emkb }, $+ {emkf }];
1164
+
1163
1165
$LINE =~ s /\s *SIP_MONKEYPATCH_FLAGS_UNNEST\( .*?\) // ;
1164
1166
}
1165
1167
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 @@ sub detect_non_method_member{
1362
1364
}
1363
1365
# catch Q_DECLARE_OPERATORS_FOR_FLAGS
1364
1366
if ( $LINE =~ m / ^(\s *)Q_DECLARE_OPERATORS_FOR_FLAGS\(\s *(.*?)\s *\)\s *$ / ){
1365
- my $flag = $QFLAG_HASH {$2 };
1367
+ my $flags = $2 ;
1368
+ my $flag = $QFLAG_HASH {$flags };
1366
1369
$LINE = " $1QFlags<$flag > operator|($flag f1, QFlags<$flag > f2);\n " ;
1367
1370
1368
1371
my $py_flag = $flag ;
@@ -1384,6 +1387,20 @@ sub detect_non_method_member{
1384
1387
push @OUTPUT_PYTHON , " $py_flag .__or__ = lambda flag1, flag2: $py_flag (_force_int(flag1) | _force_int(flag2))\n " ;
1385
1388
}
1386
1389
}
1390
+ if ( !$is_qt6 )
1391
+ {
1392
+ foreach ( @ENUM_MONKEY_PATCHED_TYPES ) {
1393
+ if ( $flags eq " $_ ->[0]::$_ ->[1]" )
1394
+ {
1395
+ dbg_info(" monkey patching flags" );
1396
+ if ($HAS_PUSHED_FORCE_INT eq 0) {
1397
+ push @OUTPUT_PYTHON , " from enum import Enum\n\n\n def _force_int(v): return int(v.value) if isinstance(v, Enum) else v\n\n\n " ;
1398
+ $HAS_PUSHED_FORCE_INT = 1;
1399
+ }
1400
+ push @OUTPUT_PYTHON , " $py_flag .__or__ = lambda flag1, flag2: $_ ->[0].$_ ->[1](_force_int(flag1) | _force_int(flag2))\n " ;
1401
+ }
1402
+ }
1403
+ }
1387
1404
}
1388
1405
1389
1406
# remove Q_INVOKABLE
0 commit comments