1
/*  This file is part of the KDE project
2
    Copyright (C) 2006-2007 Matthias Kretz <kretz@kde.org>
3
4
    This library is free software; you can redistribute it and/or
5
    modify it under the terms of the GNU Lesser General Public
6
    License as published by the Free Software Foundation; either
7
    version 2.1 of the License, or (at your option) version 3, or any
8
    later version accepted by the membership of KDE e.V. (or its
9
    successor approved by the membership of KDE e.V.), Nokia Corporation 
10
    (or its successors, if any) and the KDE Free Qt Foundation, which shall
11
    act as a proxy defined in Section 6 of version 3 of the license.
12
13
    This library is distributed in the hope that it will be useful,
14
    but WITHOUT ANY WARRANTY; without even the implied warranty of
15
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16
    Lesser General Public License for more details.
17
18
    You should have received a copy of the GNU Lesser General Public 
19
    License along with this library.  If not, see <http://www.gnu.org/licenses/>.
20
21
*/
22
23
#ifndef PHONONDEFS_H
24
#define PHONONDEFS_H
25
26
#include <QtCore/QtGlobal>
27
#include "phonon_export.h"
28
29
QT_BEGIN_HEADER
30
QT_BEGIN_NAMESPACE
31
32
#ifdef PHONON_BACKEND_VERSION_4_4
33
# ifndef PHONON_BACKEND_VERSION_4_3
34
#  define PHONON_BACKEND_VERSION_4_3
35
# endif
36
#endif
37
#ifdef PHONON_BACKEND_VERSION_4_3
38
# ifndef PHONON_BACKEND_VERSION_4_2
39
#  define PHONON_BACKEND_VERSION_4_2
40
# endif
41
#endif
42
43
// the following inlines are correct - exclude per line doesn't work for multiline-macros so exclude
44
// the whole file for inline checks
45
//krazy:excludeall=inline
46
#define K_DECLARE_PRIVATE(Class) \
47
    inline Class##Private* k_func() { return reinterpret_cast<Class##Private *>(k_ptr); } \
48
    inline const Class##Private* k_func() const { return reinterpret_cast<const Class##Private *>(k_ptr); } \
49
    friend class Class##Private;
50
51
/**
52
 * \internal
53
 * Used in class declarations to provide the needed functions. This is used for
54
 * abstract base classes.
55
 *
56
 * \param classname The Name of the class this macro is used for.
57
 *
58
 * Example:
59
 * \code
60
 * class AbstractEffect : public QObject
61
 * {
62
 *   Q _OBJECT
63
 *   Q_PROPERTY(int propertyA READ propertyA WRITE setPropertyA)
64
 *   PHONON_ABSTRACTBASE(AbstractEffect)
65
 *   public:
66
 *     int propertyA() const;
67
 *     void setPropertyA(int);
68
 * };
69
 * \endcode
70
 *
71
 * \see PHONON_OBJECT
72
 * \see PHONON_HEIR
73
 */
74
#define PHONON_ABSTRACTBASE(classname) \
75
protected: \
76
    /**
77
     * \internal
78
     * Constructor that is called from derived classes.
79
     *
80
     * \param parent Standard QObject parent.
81
     */ \
82
    classname(classname ## Private &dd, QObject *parent); \
83
private:
84
85
/**
86
 * \internal
87
 * Used in class declarations to provide the needed functions. This is used for
88
 * classes that inherit QObject directly.
89
 *
90
 * \param classname The Name of the class this macro is used for.
91
 *
92
 * Example:
93
 * \code
94
 * class EffectSettings : public QObject
95
 * {
96
 *   Q _OBJECT
97
 *   Q_PROPERTY(int propertyA READ propertyA WRITE setPropertyA)
98
 *   PHONON_OBJECT(EffectSettings)
99
 *   public:
100
 *     int propertyA() const;
101
 *     void setPropertyA(int);
102
 * };
103
 * \endcode
104
 *
105
 * \see PHONON_ABSTRACTBASE
106
 * \see PHONON_HEIR
107
 */
108
#define PHONON_OBJECT(classname) \
109
public: \
110
    /**
111
     * Constructs an object with the given \p parent.
112
     */ \
113
    classname(QObject *parent = 0); \
114
private:
115
116
/**
117
 * \internal
118
 * Used in class declarations to provide the needed functions. This is used for
119
 * classes that inherit another Phonon object.
120
 *
121
 * \param classname The Name of the class this macro is used for.
122
 *
123
 * Example:
124
 * \code
125
 * class ConcreteEffect : public AbstractEffect
126
 * {
127
 *   Q _OBJECT
128
 *   Q_PROPERTY(int propertyB READ propertyB WRITE setPropertyB)
129
 *   PHONON_HEIR(ConcreteEffect)
130
 *   public:
131
 *     int propertyB() const;
132
 *     void setPropertyB(int);
133
 * };
134
 * \endcode
135
 *
136
 * \see PHONON_ABSTRACTBASE
137
 * \see PHONON_OBJECT
138
 */
139
#define PHONON_HEIR(classname) \
140
public: \
141
    /**
142
     * Constructs an object with the given \p parent.
143
     */ \
144
    classname(QObject *parent = 0); \
145
146
QT_END_NAMESPACE
147
QT_END_HEADER
148
149
#endif // PHONONDEFS_H