2018-02-26 08:09:21 +00:00
|
|
|
/******************************************************************************
|
|
|
|
* QSkinny - Copyright (C) 2016 Uwe Rathmann
|
|
|
|
* This file may be used under the terms of the QSkinny License, Version 1.0
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
#ifndef QSK_META_CALLBACK_H
|
|
|
|
#define QSK_META_CALLBACK_H 1
|
|
|
|
|
|
|
|
#include "QskGlobal.h"
|
|
|
|
#include "QskMetaFunction.h"
|
|
|
|
|
|
|
|
#include <QObject>
|
|
|
|
#include <QPointer>
|
|
|
|
#include <QMetaMethod>
|
2018-02-27 16:47:23 +00:00
|
|
|
#include <QVector>
|
2018-02-26 08:09:21 +00:00
|
|
|
|
|
|
|
class QskMetaCallback
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
enum Type
|
|
|
|
{
|
|
|
|
Invalid = 0,
|
|
|
|
|
|
|
|
// A QMetaMethod
|
|
|
|
MetaMethod,
|
|
|
|
|
|
|
|
// A function pointer, for what Qt calls "functor based" callbacks
|
|
|
|
MetaFunction
|
|
|
|
};
|
|
|
|
|
|
|
|
QskMetaCallback();
|
2018-02-27 16:47:23 +00:00
|
|
|
|
|
|
|
QskMetaCallback( const QObject*, const QskMetaFunction&,
|
|
|
|
Qt::ConnectionType = Qt::AutoConnection );
|
|
|
|
|
|
|
|
QskMetaCallback( const QObject*, const QMetaMethod&,
|
|
|
|
Qt::ConnectionType = Qt::AutoConnection );
|
|
|
|
|
2018-02-26 08:09:21 +00:00
|
|
|
QskMetaCallback( const QskMetaCallback& );
|
|
|
|
|
|
|
|
~QskMetaCallback();
|
|
|
|
|
|
|
|
QskMetaCallback& operator=( const QskMetaCallback& );
|
|
|
|
|
|
|
|
Type type() const;
|
|
|
|
bool isValid() const;
|
|
|
|
|
|
|
|
const QObject* object() const { return m_object; }
|
2018-02-27 16:47:23 +00:00
|
|
|
|
|
|
|
void setConnectionType( Qt::ConnectionType );
|
2018-02-26 08:09:21 +00:00
|
|
|
Qt::ConnectionType connectionType() const;
|
|
|
|
|
|
|
|
QVector< int > parameterTypes() const;
|
|
|
|
|
|
|
|
void invoke( void* args[] );
|
|
|
|
|
|
|
|
private:
|
|
|
|
void reset();
|
|
|
|
|
|
|
|
QPointer< const QObject > m_object;
|
|
|
|
|
|
|
|
union
|
|
|
|
{
|
2018-02-28 07:37:40 +00:00
|
|
|
QskMetaFunction* m_function;
|
|
|
|
QMetaMethod* m_method;
|
2018-02-26 08:09:21 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
int m_type : 3;
|
|
|
|
ushort m_connectionType : 3;
|
|
|
|
};
|
|
|
|
|
|
|
|
inline QskMetaCallback::QskMetaCallback():
|
|
|
|
m_type( Invalid )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
inline bool QskMetaCallback::isValid() const
|
|
|
|
{
|
|
|
|
return m_type > 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline QskMetaCallback::Type QskMetaCallback::type() const
|
|
|
|
{
|
|
|
|
return static_cast< Type >( m_type );
|
|
|
|
}
|
|
|
|
|
|
|
|
inline Qt::ConnectionType QskMetaCallback::connectionType() const
|
|
|
|
{
|
|
|
|
return static_cast< Qt::ConnectionType >( m_connectionType );
|
|
|
|
}
|
|
|
|
|
2018-02-28 09:43:15 +00:00
|
|
|
QSK_EXPORT void qskInvokeMethod(
|
|
|
|
QObject* object, const QMetaMethod&, void* args[],
|
|
|
|
Qt::ConnectionType = Qt::AutoConnection );
|
|
|
|
|
2018-02-26 08:09:21 +00:00
|
|
|
Q_DECLARE_METATYPE( QskMetaCallback )
|
|
|
|
|
|
|
|
#endif
|