1 /****************************************************************************
2  **
3  ** Copyright (C) Qxt Foundation. Some rights reserved.
4  **
5  ** This file is part of the QxtCore module of the Qxt library.
6  **
7  ** This library is free software; you can redistribute it and/or modify it
8  ** under the terms of the Common Public License, version 1.0, as published
9  ** by IBM, and/or under the terms of the GNU Lesser General Public License,
10  ** version 2.1, as published by the Free Software Foundation.
11  **
12  ** This file is provided "AS IS", without WARRANTIES OR CONDITIONS OF ANY
13  ** KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
14  ** WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR
15  ** FITNESS FOR A PARTICULAR PURPOSE.
16  **
17  ** You should have received a copy of the CPL and the LGPL along with this
18  ** file. See the LICENSE file and the cpl1.0.txt/lgpl-2.1.txt files
19  ** included with the source distribution for more information.
20  ** If you did not receive a copy of the licenses, contact the Qxt Foundation.
21  **
22  ** <http://libqxt.org>  <foundation@libqxt.org>
23  **
24  ****************************************************************************/
25 
26 #ifndef QXTGLOBAL_H
27 #define QXTGLOBAL_H
28 
29 #include <qglobal.h>
30 
31 #define QXT_VERSION 0x000600
32 #define QXT_VERSION_STR "0.6.0"
33 
34 //--------------------------global macros------------------------------
35 
36 #ifndef QXT_NO_MACROS
37 
38 #endif // QXT_NO_MACROS
39 
40 //--------------------------export macros------------------------------
41 
42 #define QXT_DLLEXPORT DO_NOT_USE_THIS_ANYMORE
43 
44 #if !defined(QXT_STATIC)
45 #    if defined(BUILD_QXT_CORE)
46 #        define QXT_CORE_EXPORT Q_DECL_EXPORT
47 #    else
48 #        define QXT_CORE_EXPORT Q_DECL_IMPORT
49 #    endif
50 #else
51 #    define QXT_CORE_EXPORT
52 #endif // BUILD_QXT_CORE
53 
54 #if !defined(QXT_STATIC)
55 #    if defined(BUILD_QXT_GUI)
56 #        define QXT_GUI_EXPORT Q_DECL_EXPORT
57 #    else
58 #        define QXT_GUI_EXPORT Q_DECL_IMPORT
59 #    endif
60 #else
61 #    define QXT_GUI_EXPORT
62 #endif // BUILD_QXT_GUI
63 
64 #if !defined(QXT_STATIC)
65 #    if defined(BUILD_QXT_NETWORK)
66 #        define QXT_NETWORK_EXPORT Q_DECL_EXPORT
67 #    else
68 #        define QXT_NETWORK_EXPORT Q_DECL_IMPORT
69 #    endif
70 #else
71 #    define QXT_NETWORK_EXPORT
72 #endif // BUILD_QXT_NETWORK
73 
74 #if !defined(QXT_STATIC)
75 #    if defined(BUILD_QXT_SQL)
76 #        define QXT_SQL_EXPORT Q_DECL_EXPORT
77 #    else
78 #        define QXT_SQL_EXPORT Q_DECL_IMPORT
79 #    endif
80 #else
81 #    define QXT_SQL_EXPORT
82 #endif // BUILD_QXT_SQL
83 
84 #if !defined(QXT_STATIC)
85 #    if defined(BUILD_QXT_WEB)
86 #        define QXT_WEB_EXPORT Q_DECL_EXPORT
87 #    else
88 #        define QXT_WEB_EXPORT Q_DECL_IMPORT
89 #    endif
90 #else
91 #    define QXT_WEB_EXPORT
92 #endif // BUILD_QXT_WEB
93 
94 #if !defined(QXT_STATIC)
95 #    if defined(BUILD_QXT_BERKELEY)
96 #        define QXT_BERKELEY_EXPORT Q_DECL_EXPORT
97 #    else
98 #        define QXT_BERKELEY_EXPORT Q_DECL_IMPORT
99 #    endif
100 #else
101 #    define QXT_BERKELEY_EXPORT
102 #endif // BUILD_QXT_BERKELEY
103 
104 #if !defined(QXT_STATIC)
105 #    if defined(BUILD_QXT_ZEROCONF)
106 #        define QXT_ZEROCONF_EXPORT Q_DECL_EXPORT
107 #    else
108 #        define QXT_ZEROCONF_EXPORT Q_DECL_IMPORT
109 #    endif
110 #else
111 #    define QXT_ZEROCONF_EXPORT
112 #endif // QXT_ZEROCONF_EXPORT
113 
114 #if defined BUILD_QXT_CORE || defined BUILD_QXT_GUI || defined  BUILD_QXT_SQL || defined BUILD_QXT_NETWORK || defined BUILD_QXT_WEB || defined BUILD_QXT_BERKELEY || defined BUILD_QXT_ZEROCONF
115 #   define BUILD_QXT
116 #endif
117 
118 QXT_CORE_EXPORT const char* qxtVersion();
119 
120 #ifndef QT_BEGIN_NAMESPACE
121 #define QT_BEGIN_NAMESPACE
122 #endif
123 
124 #ifndef QT_END_NAMESPACE
125 #define QT_END_NAMESPACE
126 #endif
127 
128 #ifndef QT_FORWARD_DECLARE_CLASS
129 #define QT_FORWARD_DECLARE_CLASS(Class) class Class;
130 #endif
131 
132 /****************************************************************************
133 ** This file is derived from code bearing the following notice:
134 ** The sole author of this file, Adam Higerd, has explicitly disclaimed all
135 ** copyright interest and protection for the content within. This file has
136 ** been placed in the public domain according to United States copyright
137 ** statute and case law. In jurisdictions where this public domain dedication
138 ** is not legally recognized, anyone who receives a copy of this file is
139 ** permitted to use, modify, duplicate, and redistribute this file, in whole
140 ** or in part, with no restrictions or conditions. In these jurisdictions,
141 ** this file shall be copyright (C) 2006-2008 by Adam Higerd.
142 ****************************************************************************/
143 
144 #define QXT_DECLARE_PRIVATE(PUB) friend class PUB##Private; QxtPrivateInterface<PUB, PUB##Private> qxt_d;
145 #define QXT_DECLARE_PUBLIC(PUB) friend class PUB;
146 #define QXT_INIT_PRIVATE(PUB) qxt_d.setPublic(this);
147 #define QXT_D(PUB) PUB##Private& d = qxt_d()
148 #define QXT_P(PUB) PUB& p = qxt_p()
149 
150 template <typename PUB>
151 class QxtPrivate
152 {
153 public:
~QxtPrivate()154     virtual ~QxtPrivate()
155     {}
QXT_setPublic(PUB * pub)156     inline void QXT_setPublic(PUB* pub)
157     {
158         qxt_p_ptr = pub;
159     }
160 
161 protected:
qxt_p()162     inline PUB& qxt_p()
163     {
164         return *qxt_p_ptr;
165     }
qxt_p()166     inline const PUB& qxt_p() const
167     {
168         return *qxt_p_ptr;
169     }
170 
171 private:
172     PUB* qxt_p_ptr;
173 };
174 
175 template <typename PUB, typename PVT>
176 class QxtPrivateInterface
177 {
178     friend class QxtPrivate<PUB>;
179 public:
QxtPrivateInterface()180     QxtPrivateInterface()
181     {
182         pvt = new PVT;
183     }
~QxtPrivateInterface()184     ~QxtPrivateInterface()
185     {
186         delete pvt;
187     }
188 
setPublic(PUB * pub)189     inline void setPublic(PUB* pub)
190     {
191         pvt->QXT_setPublic(pub);
192     }
operator()193     inline PVT& operator()()
194     {
195         return *static_cast<PVT*>(pvt);
196     }
operator()197     inline const PVT& operator()() const
198     {
199         return *static_cast<PVT*>(pvt);
200     }
201 private:
QxtPrivateInterface(const QxtPrivateInterface &)202     QxtPrivateInterface(const QxtPrivateInterface&) { }
203     QxtPrivateInterface& operator=(const QxtPrivateInterface&) { }
204     QxtPrivate<PUB>* pvt;
205 };
206 
207 #endif // QXT_GLOBAL
208