GnuCash  2.6.99
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
qof-gobject.h
1 /********************************************************************\
2  * qof-gobject.h -- helper macros for qof objects using gobject *
3  * *
4  * This program is free software; you can redistribute it and/or *
5  * modify it under the terms of the GNU General Public License as *
6  * published by the Free Software Foundation; either version 2 of *
7  * the License, or (at your option) any later version. *
8  * *
9  * This program is distributed in the hope that it will be useful, *
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12  * GNU General Public License for more details. *
13  * *
14  * You should have received a copy of the GNU General Public License*
15  * along with this program; if not, contact: *
16  * *
17  * Free Software Foundation Voice: +1-617-542-5942 *
18  * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
19  * Boston, MA 02110-1301, USA [email protected] *
20  * *
21 \********************************************************************/
22 
23 #ifndef QOF_GOBJECT_H
24 #define QOF_GOBJECT_H
25 
26 #include <glib-object.h>
27 
50 #define QOF_GOBJECT_DECL(type_name) \
51  GType type_name##_get_type(void);
52 
59 #define QOF_GOBJECT_GET_TYPE(TypeName, type_name, TYPE_PARENT, CODE) \
60  G_DEFINE_TYPE_WITH_CODE(TypeName, type_name, TYPE_PARENT, CODE);
61 
62 #define QOF_GOBJECT_CLASS_INIT(type_name, TypeName) \
63  static void type_name##_dispose(GObject *object); \
64  static void type_name##_finalize(GObject *object); \
65  static void type_name##_class_init(TypeName##Class *klass) \
66  { \
67  GObjectClass *object_class = G_OBJECT_CLASS(klass); \
68  object_class->dispose = type_name##_dispose; \
69  object_class->finalize = type_name##_finalize; \
70  }
71 
72 #define QOF_GOBJECT_DISPOSE(type_name) \
73  static void type_name##_dispose_real(GObject* object); \
74  static void type_name##_dispose(GObject *object) \
75  { \
76  type_name##_dispose_real(object); \
77  G_OBJECT_CLASS(type_name##_parent_class)->dispose(object); \
78  }
79 
80 #define QOF_GOBJECT_FINALIZE(type_name) \
81  static void type_name##_finalize_real(GObject* object); \
82  static void type_name##_finalize(GObject *object) \
83  { \
84  type_name##_finalize_real(object); \
85  G_OBJECT_CLASS(type_name##_parent_class)->finalize(object); \
86  }
87 
88 #define QOF_GOBJECT_IMPL_WITH_CODE(type_name, TypeName, TYPE_PARENT, CODE) \
89  QOF_GOBJECT_GET_TYPE(TypeName, type_name, TYPE_PARENT, CODE); \
90  QOF_GOBJECT_CLASS_INIT(type_name, TypeName); \
91  QOF_GOBJECT_DISPOSE(type_name); \
92  QOF_GOBJECT_FINALIZE(type_name);
93 
94 #define QOF_GOBJECT_IMPL(type_name, TypeName, TYPE_PARENT) \
95  QOF_GOBJECT_IMPL_WITH_CODE(type_name, TypeName, TYPE_PARENT, {})
96 
97 
98 #endif /* QOF_GOBJECT_H */