[anjuta] class-gen: Use a simple hash table instead of NPWValue
- From: Sebastien Granjoux <sgranjoux src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta] class-gen: Use a simple hash table instead of NPWValue
- Date: Mon, 30 Apr 2012 19:09:24 +0000 (UTC)
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]