1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19 
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 
25 module gtk.TreeModel;
26 
27 private import glib.Str;
28 private import gobject.ObjectG;
29 private import gobject.Signals;
30 private import gobject.Type;
31 private import gobject.Value;
32 private import gtk.TreeIter;
33 private import gtk.TreeModelIF;
34 private import gtk.TreeModelT;
35 private import gtk.TreePath;
36 private import gtkc.Loader;
37 private import gtkc.gobject;
38 private import gtkc.gtk;
39 public  import gtkc.gtktypes;
40 private import gtkc.paths;
41 
42 
43 struct CustomTreeModelClass
44 {
45 	GObjectClass parentClass;
46 }
47 
48 /**
49  */
50 public class TreeModel : ObjectG, TreeModelIF
51 {
52 	static GObjectClass* parentClass = null;
53 	
54 	/** the main Gtk struct */
55 	protected GtkTreeModel* gtkTreeModel;
56 	
57 	// Minimal implementation.
58 	mixin TreeModelT!(GtkTreeModel);
59 	
60 	/** the main Gtk struct as a void* */
61 	protected override void* getStruct()
62 	{
63 		return cast(void*)gtkTreeModel;
64 	}
65 	
66 	public this ()
67 	{
68 		auto p =  super(customTreeModelgetType(), null);
69 		gtkTreeModel = cast(GtkTreeModel*) p.getObjectGStruct();
70 		
71 		setDataFull("customTreeModel", cast(void*)this, cast(GDestroyNotify)&destroyNotify);
72 	}
73 	
74 	/**
75 	 * Sets our main struct and passes it to the parent class
76 	 */
77 	public this (GtkTreeModel* gtkTreeModel, bool ownedRef = false)
78 	{
79 		super(cast(GObject*)gtkTreeModel, ownedRef);
80 		this.gtkTreeModel = gtkTreeModel;
81 	}
82 	
83 	
84 	extern(C)
85 	{
86 		/*
87 		 *  here we register our new type and its interfaces
88 		 *  with the type system. If you want to implement
89 		 *  additional interfaces like GtkTreeSortable, you
90 		 *  will need to do it here.
91 		 */
92 		
93 		static GType customTreeModelgetType()
94 		{
95 			GType customTreeModelType = Type.fromName("CustomTreeModel");
96 			
97 			/* Some boilerplate type registration stuff */
98 			if (customTreeModelType == GType.INVALID)
99 			{
100 				GTypeInfo customTreeModelInfo =
101 				{
102 					CustomTreeModelClass.sizeof,                   /* class size */
103 					null,                                          /* base_init */
104 					null,                                          /* base_finalize */
105 					cast(GClassInitFunc) &customTreeModelClassInit,/* class init function */
106 					null,                                          /* class finalize */
107 					null,                                          /* class_data */
108 					GObject.sizeof,                                /* instance size */
109 					0,                                             /* n_preallocs */
110 					//cast(GInstanceInitFunc) &customTreeModelInit   /* instance init */
111 					null
112 				};
113 				GInterfaceInfo treeModelInfo =
114 				{
115 					cast(GInterfaceInitFunc) &customTreeModelInit,
116 					null,
117 					null
118 				};
119 				
120 				/* First register the new derived type with the GObject type system */
121 				customTreeModelType = Type.registerStatic (GType.OBJECT, "CustomTreeModel",
122 				&customTreeModelInfo, cast(GTypeFlags)0);
123 				
124 				/* Now register our GtkTreeModel interface with the type system */
125 				Type.addInterfaceStatic (customTreeModelType, gtk_tree_model_get_type() /*GTK_TYPE_TREE_MODEL*/, &treeModelInfo);
126 			}
127 			
128 			return customTreeModelType;
129 		}
130 		
131 		/*
132 		 *  boilerplate GObject/GType stuff.
133 		 *  Init callback for the type system,
134 		 *  called once when our new class is created.
135 		 */
136 		
137 		static void customTreeModelClassInit (void* klass)
138 		{
139 			GObjectClass* objectClass;
140 			
141 			parentClass = cast(GObjectClass*) g_type_class_peek_parent(klass);
142 			objectClass = cast(GObjectClass*) klass;
143 			
144 			objectClass.finalize = &customTreeModelFinalize;
145 		}
146 		
147 		/*
148 		 *  init callback for the interface registration
149 		 *  in customTreeModelGetType. Here we override
150 		 *  the GtkTreeModel interface functions that
151 		 *  we implement.
152 		 */
153 		
154 		static void customTreeModelInit (GtkTreeModelIface *iface)
155 		{
156 			iface.getFlags      = &customTreeModelGetFlags;
157 			iface.getNColumns   = &customTreeModelGetNColumns;
158 			iface.getColumnType = &customTreeModelGetColumnType;
159 			iface.getIter       = &customTreeModelGetIter;
160 			iface.getPath       = &customTreeModelGetPath;
161 			iface.getValue      = &customTreeModelGetValue;
162 			iface.iterNext      = &customTreeModelIterNext;
163 			iface.iterChildren  = &customTreeModelIterChildren;
164 			iface.iterHasChild  = &customTreeModelIterHasChild;
165 			iface.iterNChildren = &customTreeModelIterNChildren;
166 			iface.iterNthChild  = &customTreeModelIterNthChild;
167 			iface.iterParent    = &customTreeModelIterParent;
168 		}
169 		
170 		/*
171 		 *  this is called just before a custom list is
172 		 *  destroyed. Free dynamically allocated memory here.
173 		 */
174 		
175 		static void customTreeModelFinalize (GObject *object)
176 		{
177 			/* must chain up - finalize parent */
178 			parentClass.finalize(object);
179 		}
180 		
181 		static GtkTreeModelFlags customTreeModelGetFlags(GtkTreeModel *tree_model)
182 		{
183 			auto tm = ObjectG.getDObject!(TreeModel)(tree_model);
184 			
185 			return tm.getFlags();
186 		}
187 		
188 		static int customTreeModelGetNColumns(GtkTreeModel *tree_model)
189 		{
190 			auto tm = ObjectG.getDObject!(TreeModel)(tree_model);
191 			
192 			return tm.getNColumns();
193 		}
194 		
195 		static GType customTreeModelGetColumnType(GtkTreeModel *tree_model, int index)
196 		{
197 			auto tm = ObjectG.getDObject!(TreeModel)(tree_model);
198 			
199 			return tm.getColumnType(index);
200 		}
201 		
202 		static int customTreeModelGetIter(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreePath *path)
203 		{
204 			auto tm = ObjectG.getDObject!(TreeModel)(tree_model);
205 			
206 			return tm.getIter(ObjectG.getDObject!(TreeIter)(iter), ObjectG.getDObject!(TreePath)(gtk_tree_path_copy(path)));
207 		}
208 		
209 		static GtkTreePath* customTreeModelGetPath(GtkTreeModel *tree_model, GtkTreeIter *iter)
210 		{
211 			auto tm = ObjectG.getDObject!(TreeModel)(tree_model);
212 			TreePath path = tm.getPath(ObjectG.getDObject!(TreeIter)(iter));
213 			
214 			return (path is null) ? null : gtk_tree_path_copy(path.getTreePathStruct());
215 		}
216 		
217 		static void customTreeModelGetValue(GtkTreeModel *tree_model, GtkTreeIter *iter, int column, GValue *value)
218 		{
219 			auto tm = ObjectG.getDObject!(TreeModel)(tree_model);
220 			
221 			tm.getValue(ObjectG.getDObject!(TreeIter)(iter), column, ObjectG.getDObject!(Value)(value));
222 		}
223 		
224 		static int customTreeModelIterNext(GtkTreeModel *tree_model, GtkTreeIter *iter)
225 		{
226 			auto tm = ObjectG.getDObject!(TreeModel)(tree_model);
227 			
228 			return tm.iterNext(ObjectG.getDObject!(TreeIter)(iter));
229 		}
230 		
231 		static int customTreeModelIterChildren(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent)
232 		{
233 			TreeIter ti;
234 			auto tm = ObjectG.getDObject!(TreeModel)(tree_model);
235 			
236 			auto p = tm.iterChildren(ti, ObjectG.getDObject!(TreeIter)(parent));
237 			
238 			iter = ti.getTreeIterStruct();
239 			return p;
240 		}
241 		
242 		static int customTreeModelIterHasChild(GtkTreeModel *tree_model, GtkTreeIter *iter)
243 		{
244 			auto tm = ObjectG.getDObject!(TreeModel)(tree_model);
245 			
246 			return tm.iterHasChild(ObjectG.getDObject!(TreeIter)(iter));
247 		}
248 		
249 		static int customTreeModelIterNChildren(GtkTreeModel *tree_model, GtkTreeIter *iter)
250 		{
251 			auto tm = ObjectG.getDObject!(TreeModel)(tree_model);
252 			
253 			return tm.iterNChildren(ObjectG.getDObject!(TreeIter)(iter));
254 		}
255 		
256 		static int customTreeModelIterNthChild(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent, int n)
257 		{
258 			TreeIter ti;
259 			auto tm = ObjectG.getDObject!(TreeModel)(tree_model);
260 			
261 			auto p = tm.iterNthChild(ti, ObjectG.getDObject!(TreeIter)(parent), n);
262 			
263 			iter = ti.getTreeIterStruct();
264 			return p;
265 		}
266 		
267 		static int customTreeModelIterParent(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *child)
268 		{
269 			TreeIter ti;
270 			auto tm = ObjectG.getDObject!(TreeModel)(tree_model);
271 			
272 			auto p = tm.iterParent(ti, ObjectG.getDObject!(TreeIter)(child));
273 			
274 			iter = ti.getTreeIterStruct();
275 			return p;
276 		}
277 	}
278 }
279 
280 /**
281  */