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