[anjuta] project-wizard: Do not use NPWValue in autogen API



commit ef79e6d045c35bc1d5d1e9bde1bf7e7e1c127fca
Author: SÃbastien Granjoux <seb sfo free fr>
Date:   Sat Apr 28 10:43:08 2012 +0200

    project-wizard: Do not use NPWValue in autogen API

 plugins/project-wizard/autogen.c  |   40 +++++++++++++++++++++
 plugins/project-wizard/autogen.h  |    1 +
 plugins/project-wizard/druid.c    |   31 +++++------------
 plugins/project-wizard/install.c  |    2 +-
 plugins/project-wizard/property.c |   68 +++++++++++++++++++++++--------------
 5 files changed, 93 insertions(+), 49 deletions(-)
---
diff --git a/plugins/project-wizard/autogen.c b/plugins/project-wizard/autogen.c
index d0cecc9..75aac8f 100644
--- a/plugins/project-wizard/autogen.c
+++ b/plugins/project-wizard/autogen.c
@@ -170,6 +170,46 @@ npw_autogen_write_definition_file (NPWAutogen* this, GHashTable* values)
 	return TRUE;
 }
 
+static void
+cb_autogen_write_key (const gchar* name, const gchar *value, gpointer user_data)
+{
+	FILE* def = (FILE *)user_data;
+
+	if (value != NULL)
+	{
+		if(*value == '{') /* Seems to be a list, so do not quote */
+		{
+			fprintf(def, "%s = %s;\n", name, value);
+		}
+		else
+		{
+			gchar *esc_value = g_strescape (value, NULL);
+			fprintf (def, "%s = \"%s\";\n", name, esc_value);
+			g_free (esc_value);
+		}
+	}
+}
+
+gboolean
+npw_autogen_write_definition_file_from_hash (NPWAutogen* this, GHashTable* values)
+{
+	FILE* def;
+
+	/* Autogen should not be running */
+	g_return_val_if_fail (this->busy == FALSE, FALSE);
+
+	def = fopen (this->deffilename, "wt");
+	if (def == NULL) return FALSE;
+
+	/* Generate definition data for autogen */
+	fputs ("AutoGen Definitions .;\n",def);
+	g_hash_table_foreach (values, (GHFunc)cb_autogen_write_key, def);
+
+	fclose (def);
+
+	return TRUE;
+}
+
 /* Set library path
  *---------------------------------------------------------------------------*/
 
diff --git a/plugins/project-wizard/autogen.h b/plugins/project-wizard/autogen.h
index fd7c33d..2d30a86 100644
--- a/plugins/project-wizard/autogen.h
+++ b/plugins/project-wizard/autogen.h
@@ -35,6 +35,7 @@ NPWAutogen* npw_autogen_new (void);
 void npw_autogen_free (NPWAutogen* this);
 
 gboolean npw_autogen_write_definition_file (NPWAutogen* this, GHashTable* values);
+gboolean npw_autogen_write_definition_file_from_hash (NPWAutogen* this, GHashTable* values);
 
 void npw_autogen_set_library_path (NPWAutogen* this, const gchar *directory);
 void npw_autogen_clear_library_path (NPWAutogen* this);
diff --git a/plugins/project-wizard/druid.c b/plugins/project-wizard/druid.c
index 57ebe7f..8fc2dc1 100644
--- a/plugins/project-wizard/druid.c
+++ b/plugins/project-wizard/druid.c
@@ -1066,7 +1066,7 @@ on_druid_real_prepare (GtkAssistant* assistant, GtkWidget *page, NPWDruid* druid
 			druid->parser = npw_page_parser_new (npw_druid_add_new_page (druid), druid->project_file, previous);
 
 			npw_autogen_set_output_callback (druid->gen, on_druid_parse_page, druid->parser);
-			npw_autogen_write_definition_file (druid->gen, druid->values);
+			npw_autogen_write_definition_file_from_hash (druid->gen, druid->values);
 			npw_autogen_execute (druid->gen, on_druid_get_new_page, druid, NULL);
 		}
 		else
@@ -1210,7 +1210,6 @@ npw_druid_create_assistant (NPWDruid* druid, const gchar *directory)
 static void
 npw_druid_add_default_property (NPWDruid* druid)
 {
-	NPWValue* value;
 	gchar* s;
 	AnjutaPreferences* pref;
 	GSettings *settings;
@@ -1220,40 +1219,28 @@ npw_druid_add_default_property (NPWDruid* druid)
 	pref = anjuta_shell_get_preferences (ANJUTA_PLUGIN (druid->plugin)->shell, NULL);
 
 	/* Add default base project directory */
-	value = npw_value_heap_find_value (druid->values, ANJUTA_PROJECT_DIRECTORY_PROPERTY);
-	npw_value_set_value (value, g_get_home_dir (), NPW_VALID_VALUE);
+	g_hash_table_insert (druid->values, g_strdup (ANJUTA_PROJECT_DIRECTORY_PROPERTY), g_strdup (g_get_home_dir()));
 
 	/* Add user name */
-	value = npw_value_heap_find_value (druid->values, USER_NAME_PROPERTY);
-	s = (gchar *)g_get_real_name();
-	npw_value_set_value (value, s, NPW_VALID_VALUE);
+	g_hash_table_insert (druid->values, g_strdup (USER_NAME_PROPERTY), g_strdup (g_get_real_name()));
 
 	/* Add Email address */
-	value = npw_value_heap_find_value (druid->values, EMAIL_ADDRESS_PROPERTY);
 	/* FIXME: We need a default way for the mail */
 	s = anjuta_util_get_user_mail();
-	npw_value_set_value (value, s, NPW_VALID_VALUE);
-	g_free (s);
+	g_hash_table_insert (druid->values, g_strdup (EMAIL_ADDRESS_PROPERTY), s);
 
 	/* Add use-tabs property */
 	settings = g_settings_new (ANJUTA_PREF_SCHEMA_PREFIX IANJUTA_EDITOR_PREF_SCHEMA);
 	flag = g_settings_get_boolean (settings, IANJUTA_EDITOR_USE_TABS_KEY);
-	value = npw_value_heap_find_value (druid->values, USE_TABS_PROPERTY);
-	npw_value_set_value (value, flag ? "1" : "0", NPW_VALID_VALUE);
+	g_hash_table_insert (druid->values, g_strdup (USE_TABS_PROPERTY), g_strdup (flag ? "1" : "0"));
 
 	/* Add tab-width property */
 	i = g_settings_get_int (settings, IANJUTA_EDITOR_TAB_WIDTH_KEY);
-	value = npw_value_heap_find_value (druid->values, TAB_WIDTH_PROPERTY);
-	s = g_strdup_printf("%d", i);
-	npw_value_set_value (value, s, NPW_VALID_VALUE);
-	g_free (s);
+	g_hash_table_insert (druid->values, g_strdup (TAB_WIDTH_PROPERTY), g_strdup_printf("%d", i));
 
 	/* Add indent-width property */
 	i = g_settings_get_int (settings, IANJUTA_EDITOR_INDENT_WIDTH_KEY);
-	value = npw_value_heap_find_value (druid->values, INDENT_WIDTH_PROPERTY);
-	s = g_strdup_printf("%d", i);
-	npw_value_set_value (value, s, NPW_VALID_VALUE);
-	g_free (s);
+	g_hash_table_insert (druid->values, g_strdup (INDENT_WIDTH_PROPERTY), g_strdup_printf("%d", i));
 	g_object_unref (settings);
 }
 
@@ -1277,7 +1264,7 @@ npw_druid_new (NPWPlugin* plugin, const gchar *directory)
 	druid->project_file = NULL;
 	druid->busy = FALSE;
 	druid->page_list = g_queue_new ();
-	druid->values = npw_value_heap_new ();
+	druid->values = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify)g_free);
 	druid->gen = npw_autogen_new ();
 	druid->plugin = plugin;
 	druid->error_extra_widget = NULL;
@@ -1308,7 +1295,7 @@ npw_druid_free (NPWDruid* druid)
 		npw_page_free (page);
 	}
 	g_queue_free (druid->page_list);
-	npw_value_heap_free (druid->values);
+	g_hash_table_destroy (druid->values);
 	npw_autogen_free (druid->gen);
 	if (druid->parser != NULL) npw_page_parser_free (druid->parser);
 	npw_header_list_free (druid->header_list);
diff --git a/plugins/project-wizard/install.c b/plugins/project-wizard/install.c
index d689b9c..98e00dc 100644
--- a/plugins/project-wizard/install.c
+++ b/plugins/project-wizard/install.c
@@ -236,7 +236,7 @@ void npw_install_free (NPWInstall* this)
 gboolean
 npw_install_set_property (NPWInstall* this, GHashTable* values)
 {
-	npw_autogen_write_definition_file (this->gen, values);
+	npw_autogen_write_definition_file_from_hash (this->gen, values);
 
 	return TRUE;
 }
diff --git a/plugins/project-wizard/property.c b/plugins/project-wizard/property.c
index 3a47069..4b6aa76 100644
--- a/plugins/project-wizard/property.c
+++ b/plugins/project-wizard/property.c
@@ -63,7 +63,8 @@ struct _NPWProperty {
 	gchar* description;
 	gchar* defvalue;
 	gint language;
-	NPWValue* value;
+	const gchar *name;
+	GHashTable *values;
 	GtkWidget* widget;
 	GSList* items;
 };
@@ -170,7 +171,7 @@ npw_property_restriction_from_string (const gchar* restriction)
 static gint
 npw_property_compare (const NPWProperty *a, const NPWProperty *b)
 {
-	return g_strcmp0 (npw_value_get_name (a->value), npw_value_get_name (b->value));
+	return g_strcmp0 (a->name, b->name);
 }
 
 NPWProperty*
@@ -306,13 +307,24 @@ npw_property_is_valid_restriction (const NPWProperty* prop)
 void
 npw_property_set_name (NPWProperty* prop, const gchar* name, NPWPage *page)
 {
-	prop->value = npw_value_heap_find_value (page->values, name);
+	gchar *key;
+
+	prop->values = page->values;
+	if (g_hash_table_lookup_extended (prop->values, name, (gpointer *)&key, NULL))
+	{
+		prop->name = key;
+	}
+	else
+	{
+		prop->name = g_strdup (name);
+		g_hash_table_insert (prop->values, (gpointer)prop->name, NULL);
+	}
 }
 
 const gchar*
 npw_property_get_name (const NPWProperty* prop)
 {
-	return npw_value_get_name (prop->value);
+	return prop->name;
 }
 
 void
@@ -649,14 +661,15 @@ npw_property_set_range (NPWProperty* prop, NPWPropertyRangeMark mark, const gcha
 }
 
 static gboolean
-npw_property_set_value_from_widget (NPWProperty* prop, NPWValueTag tag)
+npw_property_set_value_from_widget (NPWProperty* prop)
 {
 	gchar* alloc_value = NULL;
 	const gchar* value = NULL;
 	GList* packages;
 	GList* node;
 	GString* str_value;
-	gboolean ok;
+	gboolean change;
+	const gchar *old_value;
 
 	switch (prop->type)
 	{
@@ -733,51 +746,54 @@ npw_property_set_value_from_widget (NPWProperty* prop, NPWValueTag tag)
 		break;
 	}
 
-	/* Check and mark default value (will not be saved) */
-	if ((value) && (prop->defvalue) && (strcmp (value, prop->defvalue) == 0))
-	{
-		tag |= NPW_DEFAULT_VALUE;
-	}
-
-	ok = npw_value_set_value (prop->value, value, tag);
+	/* Update value */
+	old_value = g_hash_table_lookup (prop->values, prop->name);
+	change = g_strcmp0 (value, old_value) != 0;
+	if (change) g_hash_table_insert (prop->values, g_strdup (prop->name), g_strdup (value));
 	if (alloc_value != NULL) g_free (alloc_value);
 
-	return ok;
+	return change;
 }
 
 gboolean
 npw_property_update_value_from_widget (NPWProperty* prop)
 {
-	return npw_property_set_value_from_widget (prop, NPW_VALID_VALUE);
+	return npw_property_set_value_from_widget (prop);
 }
 
 gboolean
 npw_property_save_value_from_widget (NPWProperty* prop)
 {
-	return npw_property_set_value_from_widget (prop, NPW_OLD_VALUE);
+	return npw_property_set_value_from_widget (prop);
 }
 
 gboolean
 npw_property_remove_value (NPWProperty* prop)
 {
-	return npw_value_set_value (prop->value, NULL, NPW_EMPTY_VALUE);
+	if (g_hash_table_lookup (prop->values, prop->name) != NULL)
+	{
+		g_hash_table_insert (prop->values, g_strdup(prop->name), NULL);
+
+		return TRUE;
+	}
+	else
+	{
+		return FALSE;
+	}
 }
 
 const char*
 npw_property_get_value (const NPWProperty* prop)
 {
-	NPWValueTag tag;
+	const gchar *value;
 
-	tag = npw_value_get_tag (prop->value);
-	if ((tag == NPW_EMPTY_VALUE) || (tag & NPW_DEFAULT_VALUE))
-	{
-		return prop->defvalue;
-	}
-	else
+	value = g_hash_table_lookup (prop->values, prop->name);
+	if (value == NULL)
 	{
-		/* Only value entered by user could replace default value */
-		return npw_value_get_value (prop->value);
+		value = prop->defvalue;
 	}
+
+	return value;
 }
 
 gboolean



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