[anjuta] project-wizard: Do not use NPWValue in autogen API
- From: Sebastien Granjoux <sgranjoux src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta] project-wizard: Do not use NPWValue in autogen API
- Date: Mon, 30 Apr 2012 19:09:18 +0000 (UTC)
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]