1 #if defined(HAVE_CONFIG_H) && !defined(GEANYPY_WINDOWS)
2 # include "config.h"
3 #endif
4 
5 #include "geanypy.h"
6 
7 /* TODO: see if the TemplatePrefs members are safe to modify. */
8 
9 typedef struct
10 {
11 	PyObject_HEAD
12 	GeanyTemplatePrefs *template_prefs;
13 } TemplatePrefs;
14 
15 
16 static void
TemplatePrefs_dealloc(TemplatePrefs * self)17 TemplatePrefs_dealloc(TemplatePrefs *self)
18 {
19 	g_return_if_fail(self != NULL);
20 	self->ob_type->tp_free((PyObject *) self);
21 }
22 
23 
24 static int
TemplatePrefs_init(TemplatePrefs * self)25 TemplatePrefs_init(TemplatePrefs *self)
26 {
27 	g_return_val_if_fail(self != NULL, -1);
28 	self->template_prefs = geany_data->template_prefs;
29 	return 0;
30 }
31 
32 
33 static PyObject *
TemplatePrefs_get_property(TemplatePrefs * self,const gchar * prop_name)34 TemplatePrefs_get_property(TemplatePrefs *self, const gchar *prop_name)
35 {
36 	g_return_val_if_fail(self != NULL, NULL);
37 	g_return_val_if_fail(prop_name != NULL, NULL);
38 
39 	if (!self->template_prefs)
40 	{
41 		PyErr_SetString(PyExc_RuntimeError,
42 			"TemplatePrefs instance not initialized properly");
43 		return NULL;
44 	}
45 
46 	if (g_str_equal(prop_name, "company"))
47 		return PyString_FromString(self->template_prefs->company);
48 	else if (g_str_equal(prop_name, "developer"))
49 		return PyString_FromString(self->template_prefs->developer);
50 	else if (g_str_equal(prop_name, "initials"))
51 		return PyString_FromString(self->template_prefs->initials);
52 	else if (g_str_equal(prop_name, "mail"))
53 		return PyString_FromString(self->template_prefs->mail);
54 	else if (g_str_equal(prop_name, "version"))
55 		return PyString_FromString(self->template_prefs->version);
56 
57 	Py_RETURN_NONE;
58 }
59 GEANYPY_PROPS_READONLY(TemplatePrefs);
60 
61 
62 static PyGetSetDef TemplatePrefs_getseters[] = {
63 	GEANYPY_GETSETDEF(TemplatePrefs, "company", ""),
64 	GEANYPY_GETSETDEF(TemplatePrefs, "developer", ""),
65 	GEANYPY_GETSETDEF(TemplatePrefs, "initials", ""),
66 	GEANYPY_GETSETDEF(TemplatePrefs, "mail", "Email address"),
67 	GEANYPY_GETSETDEF(TemplatePrefs, "version", "Initial version"),
68 	{ NULL }
69 };
70 
71 
72 static PyTypeObject TemplatePrefsType = {
73 	PyObject_HEAD_INIT(NULL)
74 	0,											/* ob_size */
75 	"geany.templates.TemplatePrefs",							/* tp_name */
76 	sizeof(TemplatePrefs),								/* tp_basicsize */
77 	0,											/* tp_itemsize */
78 	(destructor) TemplatePrefs_dealloc,					/* tp_dealloc */
79 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* tp_print - tp_as_buffer */
80 	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,	/* tp_flags */
81 	"Wrapper around a GeanyTemplatePrefs structure.",		/* tp_doc  */
82 	0, 0, 0, 0, 0, 0, 0, 0,						/* tp_traverse - tp_members */
83 	TemplatePrefs_getseters,								/* tp_getset */
84 	0, 0, 0, 0, 0,								/* tp_base - tp_dictoffset */
85 	(initproc) TemplatePrefs_init,						/* tp_init */
86 	0, 0,										/* tp_alloc - tp_new */
87 };
88 
89 
90 static PyMethodDef TemplatePrefsModule_methods[] = { { NULL } };
91 
92 
inittemplates(void)93 PyMODINIT_FUNC inittemplates(void)
94 {
95 	PyObject *m;
96 
97 	TemplatePrefsType.tp_new = PyType_GenericNew;
98 	if (PyType_Ready(&TemplatePrefsType) < 0)
99 		return;
100 
101 	m = Py_InitModule3("templates", TemplatePrefsModule_methods,
102 			"Template information and management.");
103 
104 	Py_INCREF(&TemplatePrefsType);
105 	PyModule_AddObject(m, "TemplatePrefs", (PyObject *) &TemplatePrefsType);
106 }
107