qt.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # Copyright (C) 2022 The Qt Company Ltd.
  2. # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
  3. from __future__ import annotations
  4. """Provides some type information on Qt classes"""
  5. from enum import Flag
  6. class ClassFlag(Flag):
  7. PASS_BY_CONSTREF = 1
  8. PASS_BY_REF = 2
  9. PASS_BY_VALUE = 4
  10. PASS_ON_STACK_MASK = PASS_BY_CONSTREF | PASS_BY_REF | PASS_BY_VALUE
  11. INSTANTIATE_ON_STACK = 8
  12. _QT_CLASS_FLAGS = {
  13. # QtCore
  14. "QCoreApplication": ClassFlag.INSTANTIATE_ON_STACK,
  15. "QFile": ClassFlag.PASS_BY_REF | ClassFlag.INSTANTIATE_ON_STACK,
  16. "QFileInfo": ClassFlag.INSTANTIATE_ON_STACK,
  17. "QLine": ClassFlag.PASS_BY_CONSTREF | ClassFlag.INSTANTIATE_ON_STACK,
  18. "QLineF": ClassFlag.PASS_BY_CONSTREF | ClassFlag.INSTANTIATE_ON_STACK,
  19. "QModelIndex": ClassFlag.PASS_BY_CONSTREF | ClassFlag.INSTANTIATE_ON_STACK,
  20. "QPoint": ClassFlag.PASS_BY_VALUE | ClassFlag.INSTANTIATE_ON_STACK,
  21. "QPointF": ClassFlag.PASS_BY_CONSTREF | ClassFlag.INSTANTIATE_ON_STACK,
  22. "QRect": ClassFlag.PASS_BY_CONSTREF | ClassFlag.INSTANTIATE_ON_STACK,
  23. "QRectF": ClassFlag.PASS_BY_CONSTREF | ClassFlag.INSTANTIATE_ON_STACK,
  24. "QSaveFile": ClassFlag.INSTANTIATE_ON_STACK,
  25. "QSettings": ClassFlag.PASS_BY_REF | ClassFlag.INSTANTIATE_ON_STACK,
  26. "QSize": ClassFlag.PASS_BY_VALUE | ClassFlag.INSTANTIATE_ON_STACK,
  27. "QSizeF": ClassFlag.PASS_BY_CONSTREF | ClassFlag.INSTANTIATE_ON_STACK,
  28. "QString": ClassFlag.PASS_BY_CONSTREF | ClassFlag.INSTANTIATE_ON_STACK,
  29. "QTextStream": ClassFlag.PASS_BY_REF | ClassFlag.INSTANTIATE_ON_STACK,
  30. # QtGui
  31. "QBrush": ClassFlag.PASS_BY_CONSTREF | ClassFlag.INSTANTIATE_ON_STACK,
  32. "QColor": ClassFlag.PASS_BY_VALUE | ClassFlag.INSTANTIATE_ON_STACK,
  33. "QGradient": ClassFlag.PASS_BY_CONSTREF | ClassFlag.INSTANTIATE_ON_STACK,
  34. "QGuiApplication": ClassFlag.INSTANTIATE_ON_STACK,
  35. "QIcon": ClassFlag.PASS_BY_CONSTREF | ClassFlag.INSTANTIATE_ON_STACK,
  36. "QPainter": ClassFlag.INSTANTIATE_ON_STACK,
  37. "QPen": ClassFlag.INSTANTIATE_ON_STACK,
  38. "QPixmap": ClassFlag.PASS_BY_CONSTREF | ClassFlag.INSTANTIATE_ON_STACK,
  39. # QtWidgets
  40. "QApplication": ClassFlag.INSTANTIATE_ON_STACK,
  41. "QColorDialog": ClassFlag.INSTANTIATE_ON_STACK,
  42. "QFileDialog": ClassFlag.INSTANTIATE_ON_STACK,
  43. "QFontDialog": ClassFlag.INSTANTIATE_ON_STACK,
  44. "QMessageBox": ClassFlag.INSTANTIATE_ON_STACK,
  45. # QtQml
  46. "QQmlApplicationEngine": ClassFlag.INSTANTIATE_ON_STACK,
  47. "QQmlComponent": ClassFlag.INSTANTIATE_ON_STACK,
  48. "QQmlEngine": ClassFlag.INSTANTIATE_ON_STACK,
  49. # QtQuick
  50. "QQuickView": ClassFlag.INSTANTIATE_ON_STACK
  51. }
  52. def qt_class_flags(type):
  53. f = _QT_CLASS_FLAGS.get(type)
  54. return f if f else ClassFlag(0)