[anjuta] project-wizard: bgo #711353 - Project Wizard - Set default setting for author, email, version, and p



commit 0370dbf12718cee71ba0f32da1ec343095a72cd3
Author: Sébastien Granjoux <seb sfo free fr>
Date:   Mon Jan 27 22:53:30 2014 +0100

    project-wizard: bgo #711353 - Project Wizard - Set default setting for author, email, version, and 
project directory

 plugins/project-wizard/Makefile.am                 |   19 ++--
 plugins/project-wizard/druid.c                     |  113 +++++++++++++++++++-
 ...me.anjuta.plugins.project-wizard.gschema.xml.in |   19 ++++
 3 files changed, 137 insertions(+), 14 deletions(-)
---
diff --git a/plugins/project-wizard/Makefile.am b/plugins/project-wizard/Makefile.am
index c91356e..f7d6b65 100644
--- a/plugins/project-wizard/Makefile.am
+++ b/plugins/project-wizard/Makefile.am
@@ -60,17 +60,16 @@ libanjuta_project_wizard_la_SOURCES= \
        tar.c \
        tar.h
 
+gsettings_in_file = org.gnome.anjuta.plugins.project-wizard.gschema.xml.in
+gsettings_SCHEMAS = $(gsettings_in_file:.xml.in=.xml)
+ INTLTOOL_XML_NOMERGE_RULE@
+ GSETTINGS_RULES@
+
 EXTRA_DIST = \
-       $(plugin_in_files)
+       $(plugin_in_files) \
+       $(gsettings_in_file)
 
-## templates_dir = $(datadir)/anjuta/projects
-## 
-## install-data-local:
-##     mkdir -p $(DESTDIR)$(templates_dir)
-##     $(INSTALL_DATA) $(srcdir)/templates $(DESTDIR)$(templates_dir)
-##
-## uninstall-local:
-##     @rm -fv $(*:%=$(templates_dir)/%)
-##     -if test -d $(templates_dir); then rmdir $(templates_dir); fi
+CLEANFILES = \
+        $(gsettings_SCHEMAS)
 
 -include $(top_srcdir)/git.mk
diff --git a/plugins/project-wizard/druid.c b/plugins/project-wizard/druid.c
index ad92a4a..9c6f202 100644
--- a/plugins/project-wizard/druid.c
+++ b/plugins/project-wizard/druid.c
@@ -55,8 +55,11 @@
  *---------------------------------------------------------------------------*/
 
 #define ANJUTA_PROJECT_DIRECTORY_PROPERTY "AnjutaProjectDirectory"
+#define DESTINATION_PROPERTY "Destination"
 #define USER_NAME_PROPERTY "UserName"
+#define AUTHOR_PROPERTY "Author"
 #define EMAIL_ADDRESS_PROPERTY "EmailAddress"
+#define EMAIL_PROPERTY "Email"
 #define INDENT_WIDTH_PROPERTY "IndentWidth"
 #define TAB_WIDTH_PROPERTY "TabWidth"
 #define USE_TABS_PROPERTY "UseTabs"
@@ -64,6 +67,11 @@
 /* Common editor preferences */
 #define ANJUTA_PREF_SCHEMA_PREFIX "org.gnome.anjuta."
 
+#define PROJECT_WIZARD_PREF_SCHEMA     "plugins.project-wizard"
+
+#define LAST_DIRECTORY "project-directory"
+#define LAST_USER_NAME "user"
+#define LAST_EMAIL             "email"
 
 /* Widget and signal name found in glade file
  *---------------------------------------------------------------------------*/
@@ -1127,6 +1135,75 @@ on_druid_prepare (GtkAssistant* assistant, GtkWidget *page, NPWDruid* druid)
        g_idle_add (on_druid_delayed_prepare, druid);
 }
 
+static void
+npw_druid_save_default_property (NPWDruid* druid)
+{
+       GSettings *settings;
+       const gchar *new_value;
+       gchar *old_value;
+
+
+       settings = g_settings_new (ANJUTA_PREF_SCHEMA_PREFIX PROJECT_WIZARD_PREF_SCHEMA);
+
+       new_value = g_hash_table_lookup (druid->values, DESTINATION_PROPERTY);
+       if ((new_value != NULL) && (*new_value != '\0'))
+       {
+               /* Remove project directory */
+               gchar *parent;
+
+               parent = g_path_get_dirname (new_value);
+               if (new_value[strlen(new_value) - 1] == G_DIR_SEPARATOR)
+               {
+                       gchar *dir = parent;
+                       parent = g_path_get_dirname (dir);
+                       g_free (dir);
+               }
+               
+               old_value = g_settings_get_string (settings, LAST_DIRECTORY);
+               if (strcmp (parent, old_value) != 0)
+               {
+                       /* If the new directory is in the home directory, store a relative
+                        * path */
+                       const gchar *home;
+                       size_t len;
+
+                       home = g_get_home_dir ();
+                       len = strlen (home);
+                       if ((strncmp (home, parent, len) == 0) && ((parent[len] == G_DIR_SEPARATOR) || 
(parent[len] == '\0')))
+                       {
+                               g_settings_set_string (settings, LAST_DIRECTORY, parent[len] == '\0' ? "" : 
parent + len + 1);
+                       }
+                       else
+                       {
+                               g_settings_set_string (settings, LAST_DIRECTORY, parent);
+                       }
+               }
+               g_free (old_value);
+               g_free (parent);
+       }
+
+       new_value = g_hash_table_lookup (druid->values, AUTHOR_PROPERTY);
+       if ((new_value != NULL) && (*new_value != '\0'))
+       {
+               old_value = g_settings_get_string (settings, LAST_USER_NAME);
+               if (strcmp (new_value, old_value) != 0)
+               {
+                       g_settings_set_string (settings, LAST_USER_NAME, new_value);
+               }
+               g_free (old_value);
+       }
+
+       new_value = g_hash_table_lookup (druid->values, EMAIL_PROPERTY);
+       if ((new_value != NULL) && (*new_value != '\0'))
+       {
+               old_value = g_settings_get_string (settings, LAST_EMAIL);
+               if (strcmp (new_value, old_value) != 0)
+               {
+                       g_settings_set_string (settings, LAST_EMAIL, new_value);
+               }
+               g_free (old_value);
+       }
+}
 
 static void
 on_druid_finish (GtkAssistant* assistant, NPWDruid* druid)
@@ -1134,6 +1211,8 @@ on_druid_finish (GtkAssistant* assistant, NPWDruid* druid)
        NPWInstall* inst;
        GList *path;
 
+       npw_druid_save_default_property (druid);
+
        inst = npw_install_new (druid->plugin);
        npw_install_set_property (inst, druid->values);
        npw_install_set_wizard_file (inst, npw_header_get_filename (druid->header));
@@ -1228,16 +1307,42 @@ npw_druid_add_default_property (NPWDruid* druid)
        gboolean flag;
        gint i;
 
+
        /* Add default base project directory */
-       g_hash_table_insert (druid->values, g_strdup (ANJUTA_PROJECT_DIRECTORY_PROPERTY), g_strdup 
(g_get_home_dir()));
+       settings = g_settings_new (ANJUTA_PREF_SCHEMA_PREFIX PROJECT_WIZARD_PREF_SCHEMA);
+       s = g_settings_get_string (settings,LAST_DIRECTORY);
+       if (*s == '\0')
+       {
+               s = g_strdup (g_get_home_dir());
+       }
+       else if (!g_path_is_absolute (s))
+       {
+               gchar *path;
+
+               path = g_build_filename (g_get_home_dir(), s, NULL);
+               g_free (s);
+               s = path;
+       }
+       g_hash_table_insert (druid->values, g_strdup (ANJUTA_PROJECT_DIRECTORY_PROPERTY), s);
 
        /* Add user name */
-       g_hash_table_insert (druid->values, g_strdup (USER_NAME_PROPERTY), g_strdup (g_get_real_name()));
+       s = g_settings_get_string (settings,LAST_USER_NAME);
+       if (*s == '\0')
+       {
+               g_free (s);
+               s = g_strdup (g_get_real_name());
+       }
+       g_hash_table_insert (druid->values, g_strdup (USER_NAME_PROPERTY), s);
 
        /* Add Email address */
-       /* FIXME: We need a default way for the mail */
-       s = anjuta_util_get_user_mail();
+       s = g_settings_get_string (settings,LAST_EMAIL);
+       if (*s == '\0')
+       {
+               g_free (s);
+               s = anjuta_util_get_user_mail();
+       }
        g_hash_table_insert (druid->values, g_strdup (EMAIL_ADDRESS_PROPERTY), s);
+       g_object_unref (settings);
 
        /* Add use-tabs property */
        settings = g_settings_new (ANJUTA_PREF_SCHEMA_PREFIX IANJUTA_EDITOR_PREF_SCHEMA);
diff --git a/plugins/project-wizard/org.gnome.anjuta.plugins.project-wizard.gschema.xml.in 
b/plugins/project-wizard/org.gnome.anjuta.plugins.project-wizard.gschema.xml.in
new file mode 100644
index 0000000..38e2e85
--- /dev/null
+++ b/plugins/project-wizard/org.gnome.anjuta.plugins.project-wizard.gschema.xml.in
@@ -0,0 +1,19 @@
+<schemalist>
+       <schema id="org.gnome.anjuta.plugins.project-wizard" path="/org/gnome/anjuta/plugins/project-wizard/">
+               <key name="project-directory" type="s">
+                       <default>""</default>
+                       <_summary>Directory where the new projects are created by default</_summary>
+                       <_description>If empty, the user home directory is used. If the path is relative, it 
is relative to the home directory.</_description>
+               </key>
+               <key name="user" type="s">
+                       <default>""</default>
+                       <_summary>Default user name used in new project</_summary>
+                       <_description>If empty, the current user name is used.</_description>
+               </key>
+               <key name="email" type="s">
+                       <default>""</default>
+                       <_summary>Default email used in new project</_summary>
+                       <_description>If empty, current login and machine name is used.</_description>
+               </key>
+       </schema>
+</schemalist>


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