Created
August 9, 2012 16:38
-
-
Save eiiches/3305701 to your computer and use it in GitHub Desktop.
Neocomplcache snippet for extending gobject.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
snippet gobject | |
/* class: ${1:CAPITAL_CASE}, ${2:CamelCase}, ${3:lower_case}, ${4:simple_name} */ | |
/* base: ${5:G_TYPE_OBJECT}, ${6:GObject} */ | |
/* prefix: ${7:EGG} */ | |
/* ===== Header ===== */ | |
#ifndef _$1_H_ | |
#define _$1_H_ | |
#include <glib.h> | |
#include <glib-object.h> | |
/* {{{ $2 */ | |
typedef struct _$2 $2; | |
typedef struct _$2Class $2Class; | |
struct _$2 | |
{ | |
$6 base; | |
/* TODO: add properties */ | |
}; | |
struct _$2Class | |
{ | |
$6Class base; | |
/* TODO: add signals */ | |
}; | |
#define $7_TYPE_$1 ($3_get_type()) | |
#define $7_$1(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), $7_TYPE_$1, $2)) | |
#define $7_$1_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), $7_TYPE_$1, $2Class)) | |
#define $7_IS_$1(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), $7_TYPE_$1)) | |
#define $7_IS_$1_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), $7_TYPE_$1)) | |
#define $7_$1_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), $7_TYPE_$1, $2Class)) | |
extern GType | |
$3_get_type(); | |
/* }}} */ | |
extern $2 * | |
$3_new(${8:Parameters}); | |
#endif /* _$1_H_ */ | |
/* ====== Body ====== */ | |
#include <glib.h> | |
#include <${9:headername}.h> | |
/* {{{ $2 */ | |
typedef struct _Private Private; | |
#define PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), $7_TYPE_$1, Private)) | |
static void $3_finalize(GObject *object); | |
static void $3_class_init($2Class *klass); | |
static void $3_init($2 *manager); | |
struct _Private | |
{ | |
/* TODO: add private variables */ | |
int dummy; | |
}; | |
enum | |
{ | |
PROPERTY_INVALID, | |
/* TODO: add properties */ | |
PROPERTY_LENGTH | |
}; | |
enum | |
{ | |
/* TODO: add signals */ | |
SIGNAL_LENGTH | |
}; | |
static guint $3_signals[SIGNAL_LENGTH] = {0}; | |
G_DEFINE_TYPE($2, $3, $5); | |
static void | |
$3_set_property(GObject *object, | |
guint prop_id, | |
const GValue *value, | |
GParamSpec *pspec) | |
{ | |
$2 *$4 = EGG_$1(object); | |
switch (prop_id) | |
{ | |
default: | |
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); | |
} | |
} | |
static void | |
$3_get_property(GObject *object, | |
guint prop_id, | |
GValue *value, | |
GParamSpec *pspec) | |
{ | |
$2 *$4 = EGG_$1(object); | |
switch (prop_id) | |
{ | |
default: | |
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); | |
} | |
} | |
static void | |
$3_class_init($2Class *klass) | |
{ | |
g_type_class_add_private(G_OBJECT_CLASS(klass), sizeof(Private)); | |
/* TODO: signal setup */ | |
/* TODO: install properties */ | |
/* override gobject */ | |
G_OBJECT_CLASS(klass)->finalize = $3_finalize; | |
G_OBJECT_CLASS(klass)->set_property = $3_set_property; | |
G_OBJECT_CLASS(klass)->get_property = $3_get_property; | |
/* | |
g_object_class_install_property(G_OBJECT_CLASS(klass), | |
PROPERTY_ID, | |
g_param_spec_boolean("name", | |
"nick", | |
"blurb", | |
DEFAULT, | |
G_PARAM_READWRITE)); | |
*/ | |
} | |
static void | |
$3_finalize(GObject *gobject) | |
{ | |
/* TODO: finalize */ | |
} | |
static void | |
$3_init($2 *$4) | |
{ | |
/* TODO: instance initizalization */ | |
} | |
/* }}} */ | |
$2 * | |
$3_new($8) | |
{ | |
$2 *$4 = g_object_new($7_TYPE_$1, NULL); | |
/* TODO: object setup */ | |
return $4; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment