Updated Spanish translation
[anjuta-git-plugin.git] / plugins / symbol-db / symbol-db-engine-iterator.c
blob6cc682ffeda69d690faff02db6d3c7d3d78cf67f
1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
2 /*
3 * anjuta
4 * Copyright (C) Massimo Cora' 2007 <maxcvs@email.it>
5 *
6 * anjuta is free software.
7 *
8 * You may redistribute it and/or modify it under the terms of the
9 * GNU General Public License, as published by the Free Software
10 * Foundation; either version 2 of the License, or (at your option)
11 * any later version.
13 * anjuta is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16 * See the GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with anjuta. If not, write to:
20 * The Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor
22 * Boston, MA 02110-1301, USA.
25 #include <libanjuta/anjuta-debug.h>
26 #include "symbol-db-engine-iterator.h"
27 #include "symbol-db-engine.h"
29 struct _SymbolDBEngineIteratorPriv
31 GdaDataModel *data_model;
32 GdaDataModelIter *data_iter;
34 gint curr_row;
35 gint total_rows;
38 static GObjectClass* parent_class = NULL;
40 static void
41 sdb_engine_iterator_init (SymbolDBEngineIterator *object)
43 SymbolDBEngineIterator *sdbi;
45 sdbi = SYMBOL_DB_ENGINE_ITERATOR (object);
46 sdbi->priv = g_new0 (SymbolDBEngineIteratorPriv, 1);
48 /* initialize some priv data */
49 sdbi->priv->data_model = NULL;
50 sdbi->priv->data_iter = NULL;
51 sdbi->priv->curr_row = 0;
52 sdbi->priv->total_rows = 0;
55 static void
56 sdb_engine_iterator_finalize (GObject *object)
58 /* TODO: Add deinitalization code here */
59 SymbolDBEngineIterator *dbi;
60 SymbolDBEngineIteratorPriv *priv;
62 dbi = SYMBOL_DB_ENGINE_ITERATOR (object);
63 priv = dbi->priv;
65 DEBUG_PRINT ("finalizing sdb_iterator");
67 if (priv->data_model)
68 g_object_unref (priv->data_model);
70 G_OBJECT_CLASS (parent_class)->finalize (object);
73 static void
74 sdb_engine_iterator_class_init (SymbolDBEngineIteratorClass *klass)
76 GObjectClass* object_class = G_OBJECT_CLASS (klass);
77 parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
79 object_class->finalize = sdb_engine_iterator_finalize;
82 GType
83 symbol_db_engine_iterator_get_type (void)
85 static GType our_type = 0;
87 if(our_type == 0)
89 static const GTypeInfo our_info =
91 sizeof (SymbolDBEngineIteratorClass), /* class_size */
92 (GBaseInitFunc) NULL, /* base_init */
93 (GBaseFinalizeFunc) NULL, /* base_finalize */
94 (GClassInitFunc) sdb_engine_iterator_class_init, /* class_init */
95 (GClassFinalizeFunc) NULL, /* class_finalize */
96 NULL /* class_data */,
97 sizeof (SymbolDBEngineIterator), /* instance_size */
98 0, /* n_preallocs */
99 (GInstanceInitFunc) sdb_engine_iterator_init, /* instance_init */
100 NULL /* value_table */
103 our_type = g_type_register_static (G_TYPE_OBJECT, "SymbolDBEngineIterator",
104 &our_info, 0);
107 return our_type;
110 SymbolDBEngineIterator *
111 symbol_db_engine_iterator_new (GdaDataModel *model)
113 SymbolDBEngineIterator *dbi;
114 SymbolDBEngineIteratorPriv *priv;
116 g_return_val_if_fail (model != NULL, NULL);
118 dbi = g_object_new (SYMBOL_TYPE_DB_ENGINE_ITERATOR, NULL);
120 priv = dbi->priv;
122 priv->data_model = model;
123 priv->data_iter = gda_data_model_iter_new (model);
124 priv->total_rows = gda_data_model_get_n_rows (model);
126 return dbi;
129 gboolean
130 symbol_db_engine_iterator_move_next (SymbolDBEngineIterator *dbi)
132 SymbolDBEngineIteratorPriv *priv;
134 g_return_val_if_fail (dbi != NULL, FALSE);
135 priv = dbi->priv;
137 if (priv->curr_row + 1 < priv->total_rows)
138 priv->curr_row++;
139 else
140 return FALSE;
142 return gda_data_model_iter_move_next (priv->data_iter);
145 gboolean
146 symbol_db_engine_iterator_move_prev (SymbolDBEngineIterator *dbi)
148 SymbolDBEngineIteratorPriv *priv;
150 g_return_val_if_fail (dbi != NULL, FALSE);
151 priv = dbi->priv;
153 if (priv->curr_row > 0)
154 priv->curr_row--;
155 else
156 return FALSE;
158 return gda_data_model_iter_move_prev (priv->data_iter);
161 /* -1 on error */
162 gint
163 symbol_db_engine_iterator_get_n_items (SymbolDBEngineIterator *dbi)
165 SymbolDBEngineIteratorPriv *priv;
167 g_return_val_if_fail (dbi != NULL, -1);
168 priv = dbi->priv;
170 return priv->total_rows;
174 * Symbol name must be always on column 0
176 gint
177 symbol_db_engine_iterator_get_symbol_id (SymbolDBEngineIterator *dbi)
179 SymbolDBEngineIteratorPriv *priv;
180 const GValue* value;
182 g_return_val_if_fail (dbi != NULL, -1);
183 priv = dbi->priv;
185 value = gda_data_model_get_value_at (priv->data_model, 0, priv->curr_row);
187 return value != NULL && G_VALUE_HOLDS_INT (value)
188 ? g_value_get_int (value) : -1;
192 * Symbol name must be always on column 1
194 const gchar*
195 symbol_db_engine_iterator_get_symbol_name (SymbolDBEngineIterator *dbi)
197 SymbolDBEngineIteratorPriv *priv;
198 const GValue* value;
200 g_return_val_if_fail (dbi != NULL, NULL);
201 priv = dbi->priv;
203 value = gda_data_model_get_value_at (priv->data_model, 1, priv->curr_row);
205 return value != NULL && G_VALUE_HOLDS_STRING (value)
206 ? g_value_get_string (value) : NULL;
209 gint
210 symbol_db_engine_iterator_get_symbol_file_pos (SymbolDBEngineIterator *dbi)
212 SymbolDBEngineIteratorPriv *priv;
213 const GValue* value;
215 g_return_val_if_fail (dbi != NULL, -1);
216 priv = dbi->priv;
218 value = gda_data_model_get_value_at (priv->data_model, 2, priv->curr_row);
220 return value != NULL && G_VALUE_HOLDS_INT (value)
221 ? g_value_get_int (value) : -1;
224 gboolean
225 symbol_db_engine_iterator_get_symbol_is_file_scope (SymbolDBEngineIterator *dbi)
227 SymbolDBEngineIteratorPriv *priv;
228 const GValue* value;
230 g_return_val_if_fail (dbi != NULL, -1);
231 priv = dbi->priv;
233 value = gda_data_model_get_value_at (priv->data_model, 3, priv->curr_row);
235 if (value != NULL)
236 return g_value_get_int (value) == 1 ? TRUE : FALSE;
238 return FALSE;
241 const gchar*
242 symbol_db_engine_iterator_get_symbol_signature (SymbolDBEngineIterator *dbi)
244 SymbolDBEngineIteratorPriv *priv;
245 const GValue* value;
247 g_return_val_if_fail (dbi != NULL, NULL);
248 priv = dbi->priv;
250 value = gda_data_model_get_value_at (priv->data_model, 4, priv->curr_row);
252 return value != NULL && G_VALUE_HOLDS_STRING (value)
253 ? g_value_get_string (value) : NULL;
256 const gchar*
257 symbol_db_engine_iterator_get_symbol_extra_string (SymbolDBEngineIterator *dbi,
258 gint sym_info)
260 SymbolDBEngineIteratorPriv *priv;
261 const GValue* value;
263 g_return_val_if_fail (dbi != NULL, NULL);
264 priv = dbi->priv;
266 if (sym_info & SYMINFO_FILE_PATH)
268 value = gda_data_model_get_value_at_col_name (priv->data_model,
269 "file_path",
270 priv->curr_row);
271 return value != NULL && G_VALUE_HOLDS_STRING (value)
272 ? g_value_get_string (value) : NULL;
275 if (sym_info & SYMINFO_LANGUAGE)
277 value = gda_data_model_get_value_at_col_name (priv->data_model,
278 "language_name",
279 priv->curr_row);
280 return value != NULL && G_VALUE_HOLDS_STRING (value)
281 ? g_value_get_string (value) : NULL;
284 if (sym_info & SYMINFO_IMPLEMENTATION)
286 value = gda_data_model_get_value_at_col_name (priv->data_model,
287 "implementation_name",
288 priv->curr_row);
289 return value != NULL && G_VALUE_HOLDS_STRING (value)
290 ? g_value_get_string (value) : NULL;
293 if (sym_info & SYMINFO_ACCESS)
295 value = gda_data_model_get_value_at_col_name (priv->data_model,
296 "access_name",
297 priv->curr_row);
298 return value != NULL && G_VALUE_HOLDS_STRING (value)
299 ? g_value_get_string (value) : NULL;
302 if (sym_info & SYMINFO_KIND)
304 value = gda_data_model_get_value_at_col_name (priv->data_model,
305 "kind_name",
306 priv->curr_row);
307 return value != NULL && G_VALUE_HOLDS_STRING (value)
308 ? g_value_get_string (value) : NULL;
311 if (sym_info & SYMINFO_TYPE)
313 value = gda_data_model_get_value_at_col_name (priv->data_model,
314 "type",
315 priv->curr_row);
316 return value != NULL && G_VALUE_HOLDS_STRING (value)
317 ? g_value_get_string (value) : NULL;
320 if (sym_info & SYMINFO_TYPE_NAME)
322 value = gda_data_model_get_value_at_col_name (priv->data_model,
323 "type_name",
324 priv->curr_row);
325 return value != NULL && G_VALUE_HOLDS_STRING (value)
326 ? g_value_get_string (value) : NULL;
329 if (sym_info & SYMINFO_PROJECT_NAME)
331 value = gda_data_model_get_value_at_col_name (priv->data_model,
332 "project_name",
333 priv->curr_row);
334 return value != NULL && G_VALUE_HOLDS_STRING (value)
335 ? g_value_get_string (value) : NULL;
338 if (sym_info & SYMINFO_FILE_IGNORE)
340 value = gda_data_model_get_value_at_col_name (priv->data_model,
341 "file_ignore_type",
342 priv->curr_row);
343 return value != NULL && G_VALUE_HOLDS_STRING (value)
344 ? g_value_get_string (value) : NULL;
347 if (sym_info & SYMINFO_FILE_INCLUDE)
349 value = gda_data_model_get_value_at_col_name (priv->data_model,
350 "file_include_type",
351 priv->curr_row);
352 return value != NULL && G_VALUE_HOLDS_STRING (value)
353 ? g_value_get_string (value) : NULL;
356 /* not found */
357 return NULL;