[anjuta] class-gen: Use a simple hash table instead of NPWValue



commit 1fde9cd4f7e844ca71dff3cafa3da4e4cd98a932
Author: SÃbastien Granjoux <seb sfo free fr>
Date:   Sat Apr 28 14:34:51 2012 +0200

    class-gen: Use a simple hash table instead of NPWValue

 plugins/class-gen/element-editor.c |   85 ++++++++++++++++-------------------
 plugins/class-gen/element-editor.h |    2 -
 plugins/class-gen/generator.c      |   21 +++++----
 plugins/class-gen/generator.h      |    2 -
 plugins/class-gen/plugin.c         |   11 +---
 plugins/class-gen/window.c         |   42 ++++-------------
 plugins/class-gen/window.h         |    2 -
 7 files changed, 63 insertions(+), 102 deletions(-)
---
diff --git a/plugins/class-gen/element-editor.c b/plugins/class-gen/element-editor.c
index 68744ed..bd910db 100644
--- a/plugins/class-gen/element-editor.c
+++ b/plugins/class-gen/element-editor.c
@@ -46,7 +46,7 @@ struct _CgElementEditorPrivate
 
 	guint n_columns;
 	CgElementEditorColumn *columns;
-	
+
 	GtkButton *add_button;
 	GtkButton *remove_button;
 };
@@ -73,10 +73,10 @@ cg_element_editor_reference_new (CgElementEditorColumn *column,
 {
 	CgElementEditorReference *ref;
 	ref = g_new (CgElementEditorReference, 1);
-	
+
 	ref->column = column;
 	ref->path_str = g_strdup (path_str);
-	
+
 	return ref;
 }
 
@@ -94,11 +94,11 @@ cg_element_editor_select (CgElementEditor *editor,
 {
 	CgElementEditorPrivate *priv;
 	priv = CG_ELEMENT_EDITOR_PRIVATE (editor);
-	
+
 	if (column < priv->n_columns)
 	{
 		gtk_widget_grab_focus (GTK_WIDGET (priv->view));
-		
+
 
 		gtk_tree_view_scroll_to_cell (priv->view, path,
 		                              priv->columns[column].column, FALSE,
@@ -143,7 +143,7 @@ cg_element_editor_row_inserted_cb (G_GNUC_UNUSED GtkTreeModel *model,
 
 	editor = CG_ELEMENT_EDITOR (user_data);
 	priv = CG_ELEMENT_EDITOR_PRIVATE (editor);
-	
+
 	path_str = gtk_tree_path_to_string(path);
 	ref = cg_element_editor_reference_new (&priv->columns[0], path_str);
 	g_free(path_str);
@@ -293,7 +293,7 @@ cg_element_editor_add_button_clicked_cb (G_GNUC_UNUSED GtkButton *button,
 	CgElementEditor *editor;
 	CgElementEditorPrivate *priv;
 	GtkTreeIter iter;
-	
+
 	editor = CG_ELEMENT_EDITOR (user_data);
 	priv = CG_ELEMENT_EDITOR_PRIVATE (editor);
 
@@ -312,7 +312,7 @@ cg_element_editor_remove_button_clicked_cb (G_GNUC_UNUSED GtkButton *button,
 	GList *selected_rows;
 	GList *selected_iters;
 	GList *cur_item;
-	
+
 	editor = CG_ELEMENT_EDITOR (user_data);
 	priv = CG_ELEMENT_EDITOR_PRIVATE (editor);
 	selection = gtk_tree_view_get_selection (priv->view);
@@ -332,7 +332,7 @@ cg_element_editor_remove_button_clicked_cb (G_GNUC_UNUSED GtkButton *button,
 
 		gtk_tree_path_free (path);
 	}
-	
+
 	for (cur_item = selected_iters;
 	     cur_item != NULL;
 	     cur_item = cur_item->next)
@@ -341,7 +341,7 @@ cg_element_editor_remove_button_clicked_cb (G_GNUC_UNUSED GtkButton *button,
 		gtk_list_store_remove (GTK_LIST_STORE (priv->list), iter);
 		g_free (iter);
 	}
-	
+
 	g_list_free (selected_rows);
 	g_list_free (selected_iters);
 }
@@ -355,7 +355,7 @@ cg_element_editor_selection_changed_cb (GtkTreeSelection *selection,
 
 	editor = CG_ELEMENT_EDITOR (user_data);
 	priv = CG_ELEMENT_EDITOR_PRIVATE (editor);
-	
+
 	if (gtk_tree_selection_count_selected_rows (selection) > 0)
 		gtk_widget_set_sensitive (GTK_WIDGET (priv->remove_button), TRUE);
 	else
@@ -374,7 +374,7 @@ cg_element_editor_init (CgElementEditor *element_editor)
 	priv->columns = NULL;
 }
 
-static void 
+static void
 cg_element_editor_finalize (GObject *object)
 {
 	CgElementEditor *element_editor;
@@ -418,7 +418,7 @@ cg_element_editor_set_property (GObject *object,
 static void
 cg_element_editor_get_property (GObject *object,
                                 guint prop_id,
-                                GValue *value, 
+                                GValue *value,
                                 GParamSpec *pspec)
 {
 	CgElementEditor *element_editor;
@@ -496,7 +496,7 @@ cg_element_editor_init_list_renderer(CgElementEditorColumn *column,
 {
 	GtkTreeModel *combo_list;
 	const gchar **items;
-	GtkTreeIter iter;	
+	GtkTreeIter iter;
 
 	*type = G_TYPE_STRING;
 
@@ -528,9 +528,9 @@ cg_element_editor_init_flags_renderer (CgElementEditorColumn *column,
 	GtkTreeModel *combo_list;
 	const CgElementEditorFlags *items;
 	GtkTreeIter iter;
-	
+
 	*type = G_TYPE_STRING;
-	
+
 	column->renderer = cg_cell_renderer_flags_new ();
 	combo_list = GTK_TREE_MODEL (gtk_list_store_new (2, G_TYPE_STRING,
 	                             G_TYPE_STRING));
@@ -560,7 +560,7 @@ cg_element_editor_init_string_renderer (CgElementEditorColumn *column,
 {
 	*type = G_TYPE_STRING;
 	column->renderer = gtk_cell_renderer_text_new ();
-			
+
 	g_object_set (G_OBJECT (column->renderer), "editable", TRUE, NULL);
 
 	/* We intentionally do not only connect to the "edited" signal here
@@ -589,9 +589,9 @@ cg_element_editor_init_arguments_renderer (CgElementEditorColumn *column,
 {
 	*type = G_TYPE_STRING;
 	column->renderer = gtk_cell_renderer_text_new ();
-	
+
 	g_object_set (G_OBJECT (column->renderer), "editable", TRUE, NULL);
-	
+
 	/* Same as above */
 	g_signal_connect_after (G_OBJECT (column->renderer), "edited",
 	                        G_CALLBACK (cg_element_editor_string_edited_cb),
@@ -619,7 +619,7 @@ cg_element_editor_new (GtkTreeView *view,
 
 	editor = CG_ELEMENT_EDITOR (g_object_new (CG_TYPE_ELEMENT_EDITOR,
 	                                          "tree-view", view, NULL));
-	
+
 	priv = CG_ELEMENT_EDITOR_PRIVATE (editor);
 
 	types = g_malloc (sizeof (GType) * n_columns);
@@ -660,7 +660,7 @@ cg_element_editor_new (GtkTreeView *view,
 			g_assert_not_reached ();
 			break;
 		}
-		
+
 		gtk_tree_view_column_pack_start (priv->columns[i].column,
 		                                 priv->columns[i].renderer, TRUE);
 
@@ -694,28 +694,28 @@ cg_element_editor_new (GtkTreeView *view,
 	g_signal_connect_after (G_OBJECT (priv->list), "row-inserted",
 	                        G_CALLBACK (cg_element_editor_row_inserted_cb),
 	                        editor);
-	
+
 	priv->add_button = add_button;
 	priv->remove_button = remove_button;
-	
+
 	if(priv->add_button != NULL)
 	{
 		g_signal_connect (G_OBJECT(priv->add_button), "clicked",
 		                  G_CALLBACK (cg_element_editor_add_button_clicked_cb),
 		                  editor);
 	}
-	
+
 	if(priv->remove_button != NULL)
 	{
 		g_signal_connect (G_OBJECT (priv->remove_button), "clicked",
 			G_CALLBACK (cg_element_editor_remove_button_clicked_cb), editor);
 	}
-	
+
 	selection = gtk_tree_view_get_selection (view);
 	gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
 
 	if(priv->remove_button != NULL)
-	{	
+	{
 		g_signal_connect(G_OBJECT (selection), "changed",
 		                 G_CALLBACK (cg_element_editor_selection_changed_cb),
 		                 editor);
@@ -738,7 +738,7 @@ cg_element_editor_set_valuesv_foreach_func (gpointer key,
 
 		str = (GString*)user_data;
 		escaped = g_strescape ((const gchar *) data, NULL);
-	
+
 		g_string_append (str, (const gchar *) key);
 		g_string_append (str, "=\"");
 		g_string_append (str, escaped);
@@ -759,10 +759,8 @@ cg_element_editor_set_valuesv (CgElementEditor *editor,
 	GtkTreeIter iter;
 	gboolean result;
 	GString *value_str;
-	gchar *value_name;
 	GHashTable *table;
 	gchar *single_value;
-	NPWValue *value;
 	guint32 i;
 	guint32 row_counter;
 
@@ -775,7 +773,7 @@ cg_element_editor_set_valuesv (CgElementEditor *editor,
 	     result == TRUE;
 	     result = gtk_tree_model_iter_next (priv->list, &iter))
 	{
-		value_name = g_strdup_printf ("%s[%d]", name, row_counter);
+		gchar *value_and_key;
 
 		table = g_hash_table_new_full (g_str_hash, g_str_equal,
 		                               NULL, (GDestroyNotify) g_free);
@@ -788,7 +786,7 @@ cg_element_editor_set_valuesv (CgElementEditor *editor,
 		}
 
 		if(func != NULL) func (table, user_data);
-	
+
 		g_string_append_c (value_str, '{');
 		g_hash_table_foreach (table,
 		                      cg_element_editor_set_valuesv_foreach_func,
@@ -796,17 +794,16 @@ cg_element_editor_set_valuesv (CgElementEditor *editor,
 		g_string_append_c (value_str, '}');
 		g_hash_table_destroy (table);
 
-		value = npw_value_heap_find_value (values, value_name);
-
-		npw_value_set_value (value, value_str->str,
-		                          NPW_VALID_VALUE);
+		/* Add key value after the value so it can be freed, using
+		 * g_hash_table_insert on such key is wrong */
+		value_and_key = g_strdup_printf ("%s%c%s[%d]", value_str->str, '\0', name, row_counter);
+		g_hash_table_replace (values, value_and_key+value_str->len+1, value_and_key);
 
 		g_string_set_size (value_str, 0);
-		g_free (value_name);
-		
+
 		++ row_counter;
 	}
-	
+
 	g_string_free (value_str, TRUE);
 }
 
@@ -822,7 +819,7 @@ cg_element_editor_set_values (CgElementEditor *editor,
 	CgElementEditorPrivate *priv;
 	va_list arglist;
 	guint32 i;
-	
+
 	priv = CG_ELEMENT_EDITOR_PRIVATE (editor);
 
 	field_names = g_malloc (sizeof (const gchar *) * priv->n_columns);
@@ -848,12 +845,10 @@ cg_element_editor_set_value_count (CgElementEditor *editor,
 	CgElementEditorPrivate* priv;
 	GtkTreeIter iter;
 	gboolean result;
-	NPWValue *value;
 	const gchar **vals;
-	gchar count_str[16];
 	guint count;
 	guint i;
-	
+
 	priv = CG_ELEMENT_EDITOR_PRIVATE (editor);
 	vals = g_malloc (priv->n_columns * sizeof (const gchar *));
 	count = 0;
@@ -876,10 +871,8 @@ cg_element_editor_set_value_count (CgElementEditor *editor,
 			++ count;
 		}
 	}
-	
+
 	g_free (vals);
 
-	sprintf (count_str, "%u", count);
-	value = npw_value_heap_find_value (values, name);
-	npw_value_set_value (value, count_str, NPW_VALID_VALUE);
+	g_hash_table_insert (values, (gpointer)name, g_strdup_printf ("%u", count));
 }
diff --git a/plugins/class-gen/element-editor.h b/plugins/class-gen/element-editor.h
index 9031b58..8c15f09 100644
--- a/plugins/class-gen/element-editor.h
+++ b/plugins/class-gen/element-editor.h
@@ -20,8 +20,6 @@
 #ifndef __CLASSGEN_ELEMENT_EDITOR_H__
 #define __CLASSGEN_ELEMENT_EDITOR_H__
 
-#include <plugins/project-wizard/values.h>
-
 #include <gtk/gtk.h>
 
 #include <glib-object.h>
diff --git a/plugins/class-gen/generator.c b/plugins/class-gen/generator.c
index 3e9ee52..ecc728d 100644
--- a/plugins/class-gen/generator.c
+++ b/plugins/class-gen/generator.c
@@ -25,12 +25,13 @@
 #include <libanjuta/anjuta-utils.h>
 
 #include <glib/gstdio.h>
+#include <glib/gi18n.h>
 
 typedef struct _CgGeneratorPrivate CgGeneratorPrivate;
 struct _CgGeneratorPrivate
 {
 	NPWAutogen *autogen;
-	
+
 	gchar *header_template;
 	gchar *source_template;
 	gchar *header_destination;
@@ -82,7 +83,7 @@ cg_generator_make_absolute (const gchar *path)
 		abs_path = g_build_filename (current_dir, path, NULL);
 		g_free (current_dir);
 	}
-	
+
 	return abs_path;
 }
 
@@ -94,7 +95,7 @@ cg_generator_autogen_source_func (NPWAutogen *autogen,
 	CgGeneratorPrivate *priv;
 	GError *error;
 	gboolean success;
-	
+
 	generator = CG_GENERATOR (user_data);
 	priv = CG_GENERATOR_PRIVATE (generator);
 
@@ -174,24 +175,24 @@ cg_generator_init (CgGenerator *generator)
 	priv = CG_GENERATOR_PRIVATE (generator);
 
 	priv->autogen = npw_autogen_new ();
-	
+
 	priv->header_template = NULL;
 	priv->source_template = NULL;
 	priv->header_destination = NULL;
 	priv->source_destination = NULL;
 }
 
-static void 
+static void
 cg_generator_finalize (GObject *object)
 {
 	CgGenerator *generator;
 	CgGeneratorPrivate *priv;
-	
+
 	generator = CG_GENERATOR (object);
 	priv = CG_GENERATOR_PRIVATE (generator);
 
 	npw_autogen_free (priv->autogen);
-	
+
 	g_free (priv->header_template);
 	g_free (priv->source_template);
 	g_free (priv->header_destination);
@@ -247,7 +248,7 @@ cg_generator_set_property (GObject *object,
 static void
 cg_generator_get_property (GObject *object,
                            guint prop_id,
-                           GValue *value, 
+                           GValue *value,
                            GParamSpec *pspec)
 {
 	CgGenerator *generator;
@@ -271,7 +272,7 @@ cg_generator_get_property (GObject *object,
 		break;
 	case PROP_SOURCE_DESTINATION:
 		g_value_set_string (value, priv->source_destination);
-		break;		
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;
@@ -398,7 +399,7 @@ cg_generator_run (CgGenerator *generator,
 	priv = CG_GENERATOR_PRIVATE (generator);
 
 	/* TODO: npw_autogen_write_definiton_file should take a GError... */
-	if (npw_autogen_write_definition_file (priv->autogen, values) == FALSE)
+	if (npw_autogen_write_definition_file_from_hash (priv->autogen, values) == FALSE)
 	{
 		g_set_error (error, g_quark_from_static_string("CG_GENERATOR_ERROR"),
 		             CG_GENERATOR_ERROR_DEFFILE,
diff --git a/plugins/class-gen/generator.h b/plugins/class-gen/generator.h
index e9356b7..b8e2d62 100644
--- a/plugins/class-gen/generator.h
+++ b/plugins/class-gen/generator.h
@@ -20,8 +20,6 @@
 #ifndef __CLASSGEN_GENERATOR_H__
 #define __CLASSGEN_GENERATOR_H__
 
-#include <plugins/project-wizard/values.h>
-
 #include <glib-object.h>
 
 G_BEGIN_DECLS
diff --git a/plugins/class-gen/plugin.c b/plugins/class-gen/plugin.c
index 6a40c7f..ba424ea 100644
--- a/plugins/class-gen/plugin.c
+++ b/plugins/class-gen/plugin.c
@@ -380,7 +380,6 @@ cg_plugin_window_response_cb (G_GNUC_UNUSED GtkDialog *dialog,
 	AnjutaClassGenPlugin *plugin;
 	IAnjutaProjectManager *manager;
 	GHashTable *values;
-	NPWValue *value;
 	GError *error;
 	gchar *name;
 
@@ -423,17 +422,13 @@ cg_plugin_window_response_cb (G_GNUC_UNUSED GtkDialog *dialog,
 			{
 				/* Use basename of the project's root URI as project name. */
 				name = g_path_get_basename (plugin->top_dir);
-				value = npw_value_heap_find_value (values, "ProjectName");
-				npw_value_set_value (value, name, NPW_VALID_VALUE);
-				g_free (name);
+				g_hash_table_insert (values, "ProjectName", name);
 			}
 			else
 			{
 				name = g_path_get_basename (cg_window_get_source_file(
 				                            plugin->window));
-				value = npw_value_heap_find_value (values, "ProjectName");
-				npw_value_set_value (value, name, NPW_VALID_VALUE);
-				g_free (name);
+				g_hash_table_insert (values, "ProjectName", name);
 			}
 
     		plugin->generator = cg_generator_new (
@@ -465,7 +460,7 @@ cg_plugin_window_response_cb (G_GNUC_UNUSED GtkDialog *dialog,
 					GTK_WIDGET (cg_window_get_dialog (plugin->window)), FALSE);
 			}
 
-			npw_value_heap_free (values);
+			g_hash_table_destroy (values);
 			g_free (header_file);
 			g_free (source_file);
 		}
diff --git a/plugins/class-gen/window.c b/plugins/class-gen/window.c
index 4703918..5e137f5 100644
--- a/plugins/class-gen/window.c
+++ b/plugins/class-gen/window.c
@@ -291,30 +291,22 @@ cg_window_set_heap_value (CgWindow *window,
                           const gchar *name,
                           const gchar *id)
 {
-	gchar int_buffer[16];
 	gint int_value;
-
 	gchar *text;
-	NPWValue *value;
-
-	value = npw_value_heap_find_value (values, name);
 
 	switch (type)
 	{
 	case G_TYPE_STRING:
 		text = cg_window_fetch_string (window, id);
-		npw_value_set_value (value, text, NPW_VALID_VALUE);
-		g_free (text);
+		g_hash_table_insert (values, name, text);
 		break;
 	case G_TYPE_INT:
 		int_value = cg_window_fetch_integer (window, id);
-		sprintf (int_buffer, "%d", int_value);
-		npw_value_set_value (value, int_buffer, NPW_VALID_VALUE);
+		g_hash_table_insert (values, name, g_strdup_printf ("%d", int_value));
 		break;
 	case G_TYPE_BOOLEAN:
-		npw_value_set_value (value,
-			cg_window_fetch_boolean (window, id) ? "1" : "0", NPW_VALID_VALUE);
-
+		text = g_strdup (cg_window_fetch_boolean (window, id) ? "1" : "0");
+		g_hash_table_insert (values, name, text);
 		break;
 	default:
 		break;
@@ -1308,7 +1300,6 @@ cg_window_create_value_heap (CgWindow *window)
 
 	CgWindowPrivate *priv;
 	GHashTable *values;
-	NPWValue *value;
 	GError *error;
 	gint license_index;
 
@@ -1325,7 +1316,7 @@ cg_window_create_value_heap (CgWindow *window)
 	notebook = GTK_NOTEBOOK (gtk_builder_get_object (priv->bxml,
 	                                               "top_notebook"));
 
-	values = npw_value_heap_new ();
+	values = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify)g_free);
 	error = NULL;
 
 	switch (gtk_notebook_get_current_page (notebook))
@@ -1365,14 +1356,9 @@ cg_window_create_value_heap (CgWindow *window)
 
 		g_free (text);
 
-		value = npw_value_heap_find_value (values, "BaseTypePrefix");
-		npw_value_set_value (value, base_prefix, NPW_VALID_VALUE);
+		g_hash_table_insert (values, "BaseTypePrefix", base_prefix);
 
-		value = npw_value_heap_find_value (values, "BaseTypeSuffix");
-		npw_value_set_value (value, base_suffix, NPW_VALID_VALUE);
-
-		g_free (base_prefix);
-		g_free (base_suffix);
+		g_hash_table_insert (values, "BaseTypeSuffix", base_suffix);
 
 		cg_window_set_heap_value (window, values, G_TYPE_STRING,
 		                          "FuncPrefix", "go_func_prefix");
@@ -1488,22 +1474,14 @@ cg_window_create_value_heap (CgWindow *window)
 	                         "AuthorEmail", "author_email");
 
 	license_index = cg_window_fetch_integer (window, "license");
-	value = npw_value_heap_find_value (values, "License");
-
-	npw_value_set_value(value, LICENSES[license_index],
-	                         NPW_VALID_VALUE);
+	g_hash_table_insert (values, "License", g_strdup (LICENSES[license_index]));
 
 	header_file = cg_window_get_header_file (window) != NULL ? g_path_get_basename (cg_window_get_header_file (window)) : NULL;
 	source_file = g_path_get_basename (cg_window_get_source_file (window));
 
-	value = npw_value_heap_find_value (values, "HeaderFile");
-	npw_value_set_value (value, header_file, NPW_VALID_VALUE);
-
-	value = npw_value_heap_find_value (values, "SourceFile");
-	npw_value_set_value (value, source_file, NPW_VALID_VALUE);
+	g_hash_table_insert (values, "HeaderFile", header_file);
 
-	g_free (header_file);
-	g_free (source_file);
+	g_hash_table_insert (values, "SourceFile", source_file);
 
 	return values;
 }
diff --git a/plugins/class-gen/window.h b/plugins/class-gen/window.h
index 5d72d62..945de86 100644
--- a/plugins/class-gen/window.h
+++ b/plugins/class-gen/window.h
@@ -20,8 +20,6 @@
 #ifndef __CLASSGEN_WINDOW_H__
 #define __CLASSGEN_WINDOW_H__
 
-#include <plugins/project-wizard/values.h>
-
 #include <gtk/gtk.h>
 
 #include <glib-object.h>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]