blob: 0c5dffb48ec2dc88403ff20d06f86fd56e63daab (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt for Python.
**
** $QT_BEGIN_LICENSE:COMM$
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef GLOBALRECEIVER_V2_H
#define GLOBALRECEIVER_V2_H
#include <sbkpython.h>
#include "dynamicqmetaobject.h"
#include <QtCore/QByteArray>
#include <QtCore/QObject>
#include <QtCore/QMap>
#include <QtCore/QSharedPointer>
namespace PySide
{
class DynamicSlotDataV2;
class GlobalReceiverV2;
typedef QMap<QByteArray, GlobalReceiverV2 *> GlobalReceiverV2Map;
typedef QSharedPointer<GlobalReceiverV2Map> SharedMap;
/**
* A class used to make the link between the C++ Signal/Slot and Python callback
* This class is used internally by SignalManager
**/
class GlobalReceiverV2 : public QObject
{
public:
/**
* Create a GlobalReceiver object that will call 'callback' argumentent
*
* @param callback A Python callable object (can be a method or not)
* @param ma A SharedPointer used on Signal manager that contains all instaces of GlobalReceiver
**/
GlobalReceiverV2(PyObject *callback, SharedMap map);
/**
* Destructor
**/
~GlobalReceiverV2() override;
/**
* Reimplemented function from QObject
**/
int qt_metacall(QMetaObject::Call call, int id, void **args) override;
const QMetaObject *metaObject() const override;
/**
* Add a extra slot to this object
*
* @param signature The signature of the slot to be added
* @return The index of this slot on metaobject
**/
int addSlot(const char *signature);
/**
* Notify to GlobalReceiver about when a new connection was made
**/
void notify();
/**
* Used to increment the reference of the GlobalReceiver object
*
* @param link This is a optional paramenter used to link the ref to some QObject life
**/
void incRef(const QObject *link = nullptr);
/**
* Used to decrement the reference of the GlobalReceiver object
*
* @param link This is a optional paramenter used to dismiss the link ref to some QObject
**/
void decRef(const QObject *link = nullptr);
/*
* Return the count of refs which the GlobalReceiver has
*
* @param link If any QObject was passed, the function return the number of references relative to this 'link' object
* @return The number of references
**/
int refCount(const QObject *link) const;
/**
* Use to retrieve the unique hash of this GlobalReceiver object
*
* @return a string with a unique id based on GlobalReceiver contents
**/
QByteArray hash() const;
/**
* Use to retrieve the unique hash of the PyObject based on GlobalReceiver rules
*
* @param callback The Python callable object used to calculate the id
* @return a string with a unique id based on GlobalReceiver contents
**/
static QByteArray hash(PyObject *callback);
const MetaObjectBuilder &metaObjectBuilder() const { return m_metaObject; }
MetaObjectBuilder &metaObjectBuilder() { return m_metaObject; }
private:
MetaObjectBuilder m_metaObject;
DynamicSlotDataV2 *m_data;
QList<const QObject *> m_refs;
SharedMap m_sharedMap;
};
}
#endif
|