~ubuntu-branches/ubuntu/precise/gwenview/precise-proposed

« back to all changes in this revision

Viewing changes to lib/binder.h

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2011-12-15 14:17:54 UTC
  • mto: This revision was merged to the branch mainline in revision 12.
  • Revision ID: package-import@ubuntu.com-20111215141754-z043hyx69dulbggf
Tags: upstream-4.7.90
Import upstream version 4.7.90

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// vim: set tabstop=4 shiftwidth=4 noexpandtab:
 
1
// vim: set tabstop=4 shiftwidth=4 expandtab:
2
2
/*
3
3
Gwenview: an image viewer
4
4
Copyright 2009 Aurélien Gâteau <agateau@kde.org>
26
26
// Qt
27
27
#include <QObject>
28
28
 
29
 
namespace Gwenview {
 
29
namespace Gwenview
 
30
{
30
31
 
31
32
/**
32
33
 * @internal
33
34
 *
34
35
 * Necessary helper class because a QObject class cannot be a template
35
36
 */
36
 
class GWENVIEWLIB_EXPORT BinderInternal : public QObject {
37
 
        Q_OBJECT
 
37
class GWENVIEWLIB_EXPORT BinderInternal : public QObject
 
38
{
 
39
    Q_OBJECT
38
40
public:
39
 
        explicit BinderInternal(QObject* parent);
40
 
        ~BinderInternal();
 
41
    explicit BinderInternal(QObject* parent);
 
42
    ~BinderInternal();
41
43
 
42
44
protected Q_SLOTS:
43
 
        virtual void callMethod() {}
 
45
    virtual void callMethod() {}
44
46
};
45
47
 
46
48
/**
79
81
class BaseBinder : public BinderInternal
80
82
{
81
83
public:
82
 
        typedef void (Receiver::*Method)(MethodArg);
83
 
        static void bind(QObject* emitter, const char* signal, Receiver* receiver, Method method, MethodArg arg) {
84
 
                BaseBinder<Receiver, Arg, MethodArg>* binder = new BaseBinder<Receiver, Arg, MethodArg>(emitter);
85
 
                binder->mReceiver = receiver;
86
 
                binder->mMethod = method;
87
 
                binder->mArg = arg;
88
 
                QObject::connect(emitter, signal, binder, SLOT(callMethod()));
89
 
                QObject::connect(receiver, SIGNAL(destroyed(QObject*)), binder, SLOT(deleteLater()));
90
 
        }
 
84
    typedef void (Receiver::*Method)(MethodArg);
 
85
    static void bind(QObject* emitter, const char* signal, Receiver* receiver, Method method, MethodArg arg) {
 
86
        BaseBinder<Receiver, Arg, MethodArg>* binder = new BaseBinder<Receiver, Arg, MethodArg>(emitter);
 
87
        binder->mReceiver = receiver;
 
88
        binder->mMethod = method;
 
89
        binder->mArg = arg;
 
90
        QObject::connect(emitter, signal, binder, SLOT(callMethod()));
 
91
        QObject::connect(receiver, SIGNAL(destroyed(QObject*)), binder, SLOT(deleteLater()));
 
92
    }
91
93
 
92
94
protected:
93
 
        void callMethod() {
94
 
                (mReceiver->*mMethod)(mArg);
95
 
        }
 
95
    void callMethod() {
 
96
        (mReceiver->*mMethod)(mArg);
 
97
    }
96
98
 
97
99
private:
98
 
        BaseBinder(QObject* emitter)
99
 
        : BinderInternal(emitter)
100
 
        {}
 
100
    BaseBinder(QObject* emitter)
 
101
        : BinderInternal(emitter)
 
102
    {}
101
103
 
102
 
        Receiver* mReceiver;
103
 
        Method mMethod;
104
 
        Arg mArg;
 
104
    Receiver* mReceiver;
 
105
    Method mMethod;
 
106
    Arg mArg;
105
107
};
106
108
 
107
109
template <class Receiver, class Arg>