pysidesignal_p.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // Copyright (C) 2016 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. #ifndef PYSIDE_QSIGNAL_P_H
  4. #define PYSIDE_QSIGNAL_P_H
  5. #include <sbkpython.h>
  6. #include <QtCore/qbytearray.h>
  7. #include <QtCore/qlist.h>
  8. #include <QtCore/qobject.h>
  9. #include <QtCore/qpointer.h>
  10. #include <memory>
  11. struct PySideSignalData
  12. {
  13. struct Signature
  14. {
  15. QByteArray signature; // ','-separated list of parameter types
  16. unsigned short attributes;
  17. short argCount;
  18. };
  19. QByteArray signalName;
  20. QList<Signature> signatures;
  21. QByteArrayList signalArguments;
  22. };
  23. extern "C"
  24. {
  25. extern PyTypeObject *PySideSignal_TypeF(void);
  26. struct PySideSignal {
  27. PyObject_HEAD
  28. PySideSignalData *data;
  29. PyObject *homonymousMethod;
  30. };
  31. struct PySideSignalInstance;
  32. }; //extern "C"
  33. struct PySideSignalInstanceShared
  34. {
  35. QPointer<QObject> source;
  36. PyTypeObject *sourceType = nullptr;
  37. };
  38. using PySideSignalInstanceSharedPtr = std::shared_ptr<PySideSignalInstanceShared>;
  39. struct PySideSignalInstancePrivate
  40. {
  41. QByteArray signalName;
  42. QByteArray signature;
  43. PySideSignalInstanceSharedPtr shared;
  44. PyObject *homonymousMethod = nullptr;
  45. PySideSignalInstance *next = nullptr;
  46. unsigned short attributes = 0;
  47. short argCount = 0;
  48. };
  49. namespace PySide::Signal {
  50. void init(PyObject *module);
  51. bool connect(PyObject *source, const char *signal, PyObject *callback);
  52. QByteArray getTypeName(PyObject *);
  53. QByteArray codeCallbackName(PyObject *callback, const QByteArray &funcName);
  54. QByteArray voidType();
  55. } // namespace PySide::Signal
  56. #endif