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 #ifdef PHONON_BACKEND_VERSION_4_7
30 # ifndef PHONON_BACKEND_VERSION_4_4
31 #  define PHONON_BACKEND_VERSION_4_4
32 # endif
33 #endif
34 #ifdef PHONON_BACKEND_VERSION_4_4
35 # ifndef PHONON_BACKEND_VERSION_4_3
36 #  define PHONON_BACKEND_VERSION_4_3
37 # endif
38 #endif
39 #ifdef PHONON_BACKEND_VERSION_4_3
40 # ifndef PHONON_BACKEND_VERSION_4_2
41 #  define PHONON_BACKEND_VERSION_4_2
42 # endif
43 #endif
44 
45 // the following inlines are correct - exclude per line doesn't work for multiline-macros so exclude
46 // the whole file for inline checks
47 //krazy:excludeall=inline
48 #define P_DECLARE_PRIVATE(Class) \
49     inline Class##Private* k_func() { return reinterpret_cast<Class##Private *>(k_ptr); } \
50     inline const Class##Private* k_func() const { return reinterpret_cast<const Class##Private *>(k_ptr); } \
51     friend class Class##Private;
52 
53 /**
54  * \internal
55  * Used in class declarations to provide the needed functions. This is used for
56  * abstract base classes.
57  *
58  * \param classname The Name of the class this macro is used for.
59  *
60  * Example:
61  * \code
62  * class AbstractEffect : public QObject
63  * {
64  *   Q _OBJECT
65  *   Q_PROPERTY(int propertyA READ propertyA WRITE setPropertyA)
66  *   PHONON_ABSTRACTBASE(AbstractEffect)
67  *   public:
68  *     int propertyA() const;
69  *     void setPropertyA(int);
70  * };
71  * \endcode
72  *
73  * \see PHONON_OBJECT
74  * \see PHONON_HEIR
75  */
76 #define PHONON_ABSTRACTBASE(classname) \
77 protected: \
78     /**
79      * \internal
80      * Constructor that is called from derived classes.
81      *
82      * \param parent Standard QObject parent.
83      */ \
84     classname(classname ## Private &dd, QObject *parent); \
85 private:
86 
87 /**
88  * \internal
89  * Used in class declarations to provide the needed functions. This is used for
90  * classes that inherit QObject directly.
91  *
92  * \param classname The Name of the class this macro is used for.
93  *
94  * Example:
95  * \code
96  * class EffectSettings : public QObject
97  * {
98  *   Q _OBJECT
99  *   Q_PROPERTY(int propertyA READ propertyA WRITE setPropertyA)
100  *   PHONON_OBJECT(EffectSettings)
101  *   public:
102  *     int propertyA() const;
103  *     void setPropertyA(int);
104  * };
105  * \endcode
106  *
107  * \see PHONON_ABSTRACTBASE
108  * \see PHONON_HEIR
109  */
110 #define PHONON_OBJECT(classname) \
111 public: \
112     /**
113      * Constructs an object with the given \p parent.
114      */ \
115     classname(QObject *parent = 0); \
116 private:
117 
118 /**
119  * \internal
120  * Used in class declarations to provide the needed functions. This is used for
121  * classes that inherit another Phonon object.
122  *
123  * \param classname The Name of the class this macro is used for.
124  *
125  * Example:
126  * \code
127  * class ConcreteEffect : public AbstractEffect
128  * {
129  *   Q _OBJECT
130  *   Q_PROPERTY(int propertyB READ propertyB WRITE setPropertyB)
131  *   PHONON_HEIR(ConcreteEffect)
132  *   public:
133  *     int propertyB() const;
134  *     void setPropertyB(int);
135  * };
136  * \endcode
137  *
138  * \see PHONON_ABSTRACTBASE
139  * \see PHONON_OBJECT
140  */
141 #define PHONON_HEIR(classname) \
142 public: \
143     /**
144      * Constructs an object with the given \p parent.
145      */ \
146     classname(QObject *parent = 0); \
147 
148 
149 #endif // PHONONDEFS_H
150