packages feed

hsqml-0.1.0: cbits/HsQMLObject.h

#ifndef HSQML_OBJECT_H
#define HSQML_OBJECT_H

#include <QObject>

class HsQMLClass;
class HsQMLObject;

class HsQMLObjectProxy
{
public:
    HsQMLObjectProxy(HsStablePtr, HsQMLClass*);
    virtual ~HsQMLObjectProxy();
    HsStablePtr haskell() const;
    HsQMLClass* klass() const;
    HsQMLObject* object();
    void clearObject();
    enum RefSrc {Handle, Object};
    void ref(RefSrc);
    void deref(RefSrc);

private:
    HsStablePtr mHaskell;
    HsQMLClass* mKlass;
    HsQMLObject* mObject;
    QAtomicInt mRefCount;
};

class HsQMLObject : public QObject
{
public:
    HsQMLObject(HsQMLObjectProxy*);
    virtual ~HsQMLObject();
    virtual const QMetaObject* metaObject() const;
    virtual void* qt_metacast(const char*);
    virtual int qt_metacall(QMetaObject::Call, int, void**);
    HsQMLObjectProxy* proxy() const;

private:
    HsQMLObjectProxy* mProxy;
    HsStablePtr mHaskell;
    HsQMLClass* mKlass;
};

#endif /*HSQML_OBJECT_H*/