4
AUTHOR="YOUR NAME <youremail@here.com>"
5
#-----------------------------------------------------------------------------
8
echo "${1}" | tr 'a-z' 'A-Z'
13
echo "${1}" | tr 'A-Z' 'a-z'
18
echo "${1}" | tr "${2}" "${3}"
23
echo "${1}" | tr -d "${2}"
26
#-----------------------------------------------------------------------------
27
MACRO_NAMESPACE="$(change_character $(uppercase ${NAMESPACE}) '-' '_')"
28
METHOD_NAMESPACE="$(change_character $(lowercase ${NAMESPACE}) '-' '_')"
30
OBJECT_NAME="$(delete_character ${1} '-')"
31
MACRO_OBJECT_NAME="$(change_character $(uppercase ${1}) '-' '_')"
32
METHOD_OBJECT_NAME="$(change_character $(lowercase ${1}) '-' '_')"
33
FULL_OBJECT_NAME="$(delete_character ${NAMESPACE} '-')${OBJECT_NAME}"
34
SHORT_OBJECT_NAME="$(lowercase $(echo ${1} | awk -F- '{print $NF}'))"
36
HEADER_FILENAME="$(lowercase ${NAMESPACE}-${1}).h"
37
HEADER_GUARD="$(change_character $(change_character $(uppercase ${HEADER_FILENAME}) '-' '_') '.' '_')"
39
SOURCE_FILENAME="$(lowercase ${NAMESPACE}-${1}).c"
41
MACRO_PREFIX="${MACRO_NAMESPACE}_${MACRO_OBJECT_NAME}"
42
METHOD_PREFIX="${METHOD_NAMESPACE}_${METHOD_OBJECT_NAME}"
44
ERROR_QUARK="${METHOD_NAMESPACE}-$(lowercase ${1})"
45
HUMAN_READABLE_NAME=$(change_character $(lowercase ${1}) '-' ' ')
47
#-----------------------------------------------------------------------------
48
cat << > ${HEADER_FILENAME}
49
/* vim: ts=4 sw=2 expandtab autoindent cindent
50
* ${HEADER_FILENAME} - ${2}
52
* Copyright (C) $(date +%Y) ${AUTHOR}
54
* This program is free software; you can redistribute it and/or modify
55
* it under the terms of the GNU General Public License as published by
56
* the Free Software Foundation; either version 2, or (at your option)
59
* This program is distributed in the hope that it will be useful,
60
* but WITHOUT ANY WARRANTY; without even the implied warranty of
61
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
62
* GNU General Public License for more details.
64
* You should have received a copy of the GNU General Public License
65
* along with this program; if not, write to the Free Software
66
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
69
* Written By: ${AUTHOR}
71
#ifndef ${HEADER_GUARD}
72
#define ${HEADER_GUARD}
75
#include <glib-object.h>
79
#define ${MACRO_NAMESPACE}_TYPE_${MACRO_OBJECT_NAME} (${METHOD_PREFIX}_get_type ())
80
#define ${MACRO_PREFIX}(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ${MACRO_NAMESPACE}_TYPE_${MACRO_OBJECT_NAME}, ${FULL_OBJECT_NAME}))
81
#define ${MACRO_PREFIX}_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ${MACRO_NAMESPACE}_TYPE_${MACRO_OBJECT_NAME}, ${FULL_OBJECT_NAME}Class))
82
#define ${MACRO_NAMESPACE}_IS_${MACRO_OBJECT_NAME}(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ${MACRO_NAMESPACE}_TYPE_${MACRO_OBJECT_NAME}))
83
#define ${MACRO_NAMESPACE}_IS_${MACRO_OBJECT_NAME}_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ${MACRO_NAMESPACE}_TYPE_${MACRO_OBJECT_NAME}))
84
#define ${MACRO_PREFIX}_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), ${MACRO_NAMESPACE}_TYPE_${MACRO_OBJECT_NAME}, ${FULL_OBJECT_NAME}Class))
85
#define ${MACRO_PREFIX}_ERROR (${METHOD_PREFIX}_error_quark ())
87
typedef struct _${FULL_OBJECT_NAME} ${FULL_OBJECT_NAME};
88
typedef struct _${FULL_OBJECT_NAME}Class ${FULL_OBJECT_NAME}Class;
89
typedef struct _${FULL_OBJECT_NAME}Private ${FULL_OBJECT_NAME}Private;
90
typedef enum _${FULL_OBJECT_NAME}Error ${FULL_OBJECT_NAME}Error;
92
struct _${FULL_OBJECT_NAME}
97
${FULL_OBJECT_NAME}Private *priv;
100
struct _${FULL_OBJECT_NAME}Class
102
GObjectClass parent_class;
106
void (* foo) (${FULL_OBJECT_NAME} *${SHORT_OBJECT_NAME});
110
enum _${FULL_OBJECT_NAME}Error
112
${MACRO_PREFIX}_ERROR_GENERIC = 0,
115
#ifndef ${MACRO_NAMESPACE}_HIDE_FUNCTION_DECLARATIONS
116
GType ${METHOD_PREFIX}_get_type (void);
117
GQuark ${METHOD_PREFIX}_error_quark (void);
119
${FULL_OBJECT_NAME} *${METHOD_PREFIX}_new (void) G_GNUC_MALLOC;
123
#endif /* ${HEADER_GUARD} */
125
#-----------------------------------------------------------------------------
126
cat << > ${SOURCE_FILENAME}
127
/* vim: ts=4 sw=2 expandtab autoindent cindent
128
* ${SOURCE_FILENAME} - ${2}
130
* Copyright (C) $(date +%Y) ${AUTHOR}
132
* This program is free software; you can redistribute it and/or modify
133
* it under the terms of the GNU General Public License as published by
134
* the Free Software Foundation; either version 2, or (at your option)
137
* This program is distributed in the hope that it will be useful,
138
* but WITHOUT ANY WARRANTY; without even the implied warranty of
139
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
140
* GNU General Public License for more details.
142
* You should have received a copy of the GNU General Public License
143
* along with this program; if not, write to the Free Software
144
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
147
* Written by: ${AUTHOR}
150
#include "${HEADER_FILENAME}"
156
#include <glib-object.h>
157
#include <glib/gi18n.h>
159
struct _${FULL_OBJECT_NAME}Private
164
static void ${METHOD_PREFIX}_finalize (GObject *object);
166
static void ${METHOD_PREFIX}_class_install_signals (${FULL_OBJECT_NAME}Class *${SHORT_OBJECT_NAME}_class);
167
static void ${METHOD_PREFIX}_class_install_properties (${FULL_OBJECT_NAME}Class *${SHORT_OBJECT_NAME}_class);
169
static void ${METHOD_PREFIX}_set_property (GObject *object,
173
static void ${METHOD_PREFIX}_get_property (GObject *object,
184
#define ${MACRO_PREFIX}_DEFAULT_BAR 1
192
static guint ${METHOD_PREFIX}_signals[NUMBER_OF_SIGNALS];
195
G_DEFINE_TYPE (${FULL_OBJECT_NAME}, ${METHOD_PREFIX}, G_TYPE_OBJECT);
198
${METHOD_PREFIX}_class_init (${FULL_OBJECT_NAME}Class *${SHORT_OBJECT_NAME}_class)
200
GObjectClass *object_class;
202
object_class = G_OBJECT_CLASS (${SHORT_OBJECT_NAME}_class);
204
object_class->finalize = ${METHOD_PREFIX}_finalize;
207
${METHOD_PREFIX}_class_install_properties (${SHORT_OBJECT_NAME}_class);
208
${METHOD_PREFIX}_class_install_signals (${SHORT_OBJECT_NAME}_class);
211
g_type_class_add_private (${SHORT_OBJECT_NAME}_class, sizeof (${FULL_OBJECT_NAME}Private));
216
${METHOD_PREFIX}_class_install_signals (${FULL_OBJECT_NAME}Class *${SHORT_OBJECT_NAME}_class)
218
GObjectClass *object_class;
220
object_class = G_OBJECT_CLASS (${SHORT_OBJECT_NAME}_class);
222
${METHOD_PREFIX}_signals[FOO] =
223
g_signal_new ("foo", G_OBJECT_CLASS_TYPE (object_class),
225
G_STRUCT_OFFSET (${FULL_OBJECT_NAME}Class, foo),
226
NULL, NULL, g_cclosure_marshal_VOID__VOID,
228
${SHORT_OBJECT_NAME}_class->foo = NULL;
232
${METHOD_PREFIX}_class_install_properties (${FULL_OBJECT_NAME}Class *${SHORT_OBJECT_NAME}_class)
234
GObjectClass *object_class;
235
GParamSpec *param_spec;
237
object_class = G_OBJECT_CLASS (${SHORT_OBJECT_NAME}_class);
238
object_class->set_property = ${METHOD_PREFIX}_set_property;
239
object_class->get_property = ${METHOD_PREFIX}_get_property;
241
param_spec = g_param_spec_int ("bar", _("Bar"),
242
_("The amount of bar"),
244
${MACRO_PREFIX}_DEFAULT_BAR,
245
G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
246
g_object_class_install_property (object_class, PROP_BAR, param_spec);
251
${METHOD_PREFIX}_init (${FULL_OBJECT_NAME} *${SHORT_OBJECT_NAME})
253
${SHORT_OBJECT_NAME}->priv = G_TYPE_INSTANCE_GET_PRIVATE (${SHORT_OBJECT_NAME},
254
${MACRO_NAMESPACE}_TYPE_${MACRO_OBJECT_NAME},
255
${FULL_OBJECT_NAME}Private);
260
${METHOD_PREFIX}_finalize (GObject *object)
262
${FULL_OBJECT_NAME} *${SHORT_OBJECT_NAME};
263
GObjectClass *parent_class;
265
${SHORT_OBJECT_NAME} = ${MACRO_PREFIX} (object);
267
parent_class = G_OBJECT_CLASS (${METHOD_PREFIX}_parent_class);
271
if (parent_class->finalize != NULL)
272
parent_class->finalize (object);
277
${METHOD_PREFIX}_set_property (GObject *object,
282
${FULL_OBJECT_NAME} *${SHORT_OBJECT_NAME} = ${MACRO_PREFIX} (object);
287
${METHOD_PREFIX}_set_bar (${SHORT_OBJECT_NAME},
288
g_value_get_int (value));
292
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
297
${METHOD_PREFIX}_get_property (GObject *object,
302
${FULL_OBJECT_NAME} *${SHORT_OBJECT_NAME} = ${MACRO_PREFIX} (object);
307
g_value_set_int (value,
308
${METHOD_PREFIX}_get_bar (${SHORT_OBJECT_NAME}));
312
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
318
${METHOD_PREFIX}_error_quark (void)
320
static GQuark error_quark = 0;
322
if (error_quark == 0)
323
error_quark = g_quark_from_static_string ("${ERROR_QUARK}");
328
${FULL_OBJECT_NAME} *
329
${METHOD_PREFIX}_new (void)
331
${FULL_OBJECT_NAME} *${SHORT_OBJECT_NAME};
333
${SHORT_OBJECT_NAME} = g_object_new (${MACRO_NAMESPACE}_TYPE_${MACRO_OBJECT_NAME}, NULL);
335
return ${SHORT_OBJECT_NAME};
340
${METHOD_PREFIX}_set_bar (${FULL_OBJECT_NAME} *${SHORT_OBJECT_NAME},
343
if (${SHORT_OBJECT_NAME}->priv->bar != bar)
345
${SHORT_OBJECT_NAME}->priv->bar = bar;
346
g_object_notify (G_OBJECT (${SHORT_OBJECT_NAME}), "bar");
351
${METHOD_PREFIX}_get_bar (${FULL_OBJECT_NAME} *${SHORT_OBJECT_NAME})
353
return ${SHORT_OBJECT_NAME}->priv->bar;
357
#ifdef ${MACRO_PREFIX}_ENABLE_TEST
366
${FULL_OBJECT_NAME} *${SHORT_OBJECT_NAME};
369
g_log_set_always_fatal (G_LOG_LEVEL_ERROR
370
| G_LOG_LEVEL_CRITICAL
371
| G_LOG_LEVEL_WARNING);
375
${SHORT_OBJECT_NAME} = ${METHOD_PREFIX}_new ();
377
g_object_unref (${SHORT_OBJECT_NAME});
383
#endif /* ${MACRO_PREFIX}_ENABLE_TEST */
386
uncrustify -c $(dirname $0)/default.cfg ${HEADER_FILENAME}
387
mv ${HEADER_FILENAME}.uncrustify ${HEADER_FILENAME}
388
uncrustify -c $(dirname $0)/default.cfg ${SOURCE_FILENAME}
389
mv ${SOURCE_FILENAME}.uncrustify ${SOURCE_FILENAME}