[anjuta/sdb-core-trans: 291/291] Merge branch 'sdb-core-trans'



commit 57349badeee18b69e992d630ecfb5ae5932776ad
Merge: 6f001af 6583b12
Author: Johannes Schmid <jhs gnome org>
Date:   Fri Nov 19 17:35:48 2010 +0100

    Merge branch 'sdb-core-trans'
    
    Conflicts:
    	libanjuta/anjuta-utils.c
    	plugins/language-support-cpp-java/plugin.c
    	plugins/symbol-db/anjuta-symbol-db.ui
    	plugins/symbol-db/plugin.c
    	plugins/symbol-db/symbol-db-prefs.c
    	plugins/symbol-db/symbol-db-prefs.h

 libanjuta/anjuta-utils.c                           |   29 +
 libanjuta/anjuta-utils.h                           |    3 +-
 libanjuta/interfaces/libanjuta.idl                 |   61 ++
 .../anjuta-language-cpp-java.ui                    |   64 ++-
 plugins/language-support-cpp-java/plugin.c         |   57 ++
 plugins/symbol-db/Makefile.am                      |    2 -
 plugins/symbol-db/anjuta-symbol-db.ui              |  111 +----
 plugins/symbol-db/benchmark/symbol-db/benchmark.c  |    6 +-
 plugins/symbol-db/plugin.c                         |  459 +++++++++------
 plugins/symbol-db/plugin.h                         |    9 +-
 plugins/symbol-db/symbol-db-engine-core.c          |  466 ++++++++++-----
 plugins/symbol-db/symbol-db-engine-core.h          |   73 ++-
 plugins/symbol-db/symbol-db-engine-priv.h          |   45 +-
 plugins/symbol-db/symbol-db-engine-utils.c         |    2 +-
 plugins/symbol-db/symbol-db-engine-utils.h         |    4 +-
 plugins/symbol-db/symbol-db-prefs.c                |  618 --------------------
 plugins/symbol-db/symbol-db-prefs.h                |   77 ---
 plugins/symbol-db/symbol-db-system.c               |   23 +-
 plugins/symbol-db/symbol-db-system.h               |    4 +-
 plugins/symbol-db/tables.sql                       |    6 +-
 20 files changed, 911 insertions(+), 1208 deletions(-)
---
diff --cc libanjuta/anjuta-utils.c
index 8cf9559,b36bcda..fd8122b
--- a/libanjuta/anjuta-utils.c
+++ b/libanjuta/anjuta-utils.c
@@@ -2423,15 -2431,31 +2423,44 @@@ anjuta_util_drop_get_files (GtkSelectio
  	return files;
  }
  
 +/*
 + * anjuta_util_get_user_mail:
 + *
 + * Returns: The e-mail Address of the logged-in user. The resulting string
 + * must be free'd after use.
 + */
 +gchar* 
 +anjuta_util_get_user_mail()
 +{
 +	/* FIXME: Use libfolks or something like it to query the mail address */
 +	return g_strconcat(g_get_user_name (), "@", g_get_host_name (), NULL);
 +}
++
+ /**
+  * anjuta_utils_clone_string_gptrarray:
+  * @source: The source GPtrArray containing items representing strings
+  *
+  * Clones the contents of source GPtrArray into a new allocated GPtrArray.
+  *
+  * Return a new allocated GPtrArray with strings g_strdup (), NULL on error.
+  * The returned array has set g_free as GDestroyNotity function, so that user
+  * should only care to g_ptr_array_unref () without freeing the strings.
+  */
+ GPtrArray *
+ anjuta_util_clone_string_gptrarray (const GPtrArray* source)
+ {
+ 	gint i;
+ 	GPtrArray *dest;
+ 	
+ 	g_return_val_if_fail (source != NULL, NULL);
+ 		
+ 	dest = g_ptr_array_sized_new (source->len);
+ 	g_ptr_array_set_free_func (dest, g_free);
+ 
+ 	for (i = 0; i < source->len; i++)
+ 	{
+ 		g_ptr_array_add (dest, g_strdup (g_ptr_array_index (source, i)));
+ 	}
+ 
+ 	return dest;
+ }
diff --cc plugins/language-support-cpp-java/anjuta-language-cpp-java.ui
index 256f420,b4fde16..9dd9b1e
--- a/plugins/language-support-cpp-java/anjuta-language-cpp-java.ui
+++ b/plugins/language-support-cpp-java/anjuta-language-cpp-java.ui
@@@ -1,9 -1,22 +1,10 @@@
 -<?xml version="1.0"?>
 +<?xml version="1.0" encoding="UTF-8"?>
  <interface>
    <requires lib="gtk+" version="2.16"/>
+   <!-- interface-requires anjuta 0.0 -->
    <!-- interface-naming-policy toplevel-contextual -->
 -  <object class="GtkAdjustment" id="adjustment1">
 -    <property name="upper">100</property>
 -    <property name="step_increment">1</property>
 -    <property name="page_increment">10</property>
 -  </object>
 -  <object class="GtkAdjustment" id="adjustment2">
 +  <object class="GtkAdjustment" id="adjustment4">
      <property name="upper">100</property>
 -    <property name="value">4</property>
 -    <property name="step_increment">1</property>
 -    <property name="page_increment">10</property>
 -  </object>
 -  <object class="GtkAdjustment" id="adjustment3">
 -    <property name="upper">50</property>
 -    <property name="value">10</property>
      <property name="step_increment">1</property>
      <property name="page_increment">10</property>
    </object>
@@@ -308,16 -287,18 +310,16 @@@
              <child>
                <object class="GtkFrame" id="frame45">
                  <property name="visible">True</property>
--                <property name="border_width">5</property>
++                <property name="border_width">0</property>
                  <property name="label_xalign">0</property>
                  <property name="label_yalign">0</property>
                  <property name="shadow_type">none</property>
                  <child>
                    <object class="GtkVBox" id="vbox1118">
                      <property name="visible">True</property>
-                     <property name="spacing">5</property>
 -                    <property name="orientation">vertical</property>
 -                    <property name="spacing">5</property>
++                    <property name="spacing">0</property>
                      <child>
 -                      <object class="GtkCheckButton" id="preferences_toggle:bool:1:1:language.cpp.code.completion.enable">
 +                      <object class="GtkCheckButton" id="preferences_toggle:bool:1:1:cpp-completion-enable">
                          <property name="label" translatable="yes">Enable code completion</property>
                          <property name="visible">True</property>
                          <property name="can_focus">True</property>
@@@ -471,9 -453,59 +473,63 @@@
                  <property name="position">1</property>
                </packing>
              </child>
+             <child>
+               <object class="GtkFrame" id="frame5">
+                 <property name="visible">True</property>
+                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                 <property name="label_xalign">0</property>
+                 <property name="shadow_type">none</property>
+                 <child>
+                   <object class="GtkAlignment" id="alignment6">
+                     <property name="visible">True</property>
+                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                     <child>
+                       <object class="GtkScrolledWindow" id="scrolledwindow1">
+                         <property name="visible">True</property>
+                         <property name="can_focus">True</property>
+                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                         <property name="hscrollbar_policy">automatic</property>
+                         <property name="vscrollbar_policy">automatic</property>
+                         <property name="shadow_type">in</property>
+                         <child>
+                           <object class="AnjutaPkgConfigChooser" id="pkg_config_chooser1">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="headers_visible">False</property>
+                             <property name="headers_clickable">False</property>
+                             <property name="search_column">0</property>
+                           </object>
+                         </child>
+                       </object>
+                     </child>
+                   </object>
+                 </child>
+                 <child type="label">
+                   <object class="GtkLabel" id="label1">
+                     <property name="visible">True</property>
+                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                     <property name="xpad">6</property>
+                     <property name="label" translatable="yes">Available API tags</property>
+                     <attributes>
+                       <attribute name="weight" value="bold"/>
+                     </attributes>
+                   </object>
+                 </child>
+               </object>
+               <packing>
++                <property name="fill">False</property>
++                <property name="expand">False</property>
+                 <property name="position">2</property>
+               </packing>
+             </child>
+             <child>
+               <placeholder/>
+             </child>
            </object>
            <packing>
--            <property name="position">1</property>
++                <property name="fill">False</property>
++                <property name="expand">False</property>
++                <property name="position">1</property>
            </packing>
          </child>
          <child type="tab">
diff --cc plugins/language-support-cpp-java/plugin.c
index ddc3de6,8164950..a10f816
--- a/plugins/language-support-cpp-java/plugin.c
+++ b/plugins/language-support-cpp-java/plugin.c
@@@ -51,17 -52,16 +52,19 @@@
  #define PREFS_BUILDER PACKAGE_DATA_DIR"/glade/anjuta-language-cpp-java.ui"
  #define ICON_FILE "anjuta-language-cpp-java-plugin.png"
  
+ #define FIXME_DEFAULT_PACKAGE_VERSION		"1.0"
+ 
  /* Preferences keys */
  
 -#define PREF_INDENT_AUTOMATIC "language.cpp.indent.automatic"
 -#define PREF_INDENT_STATEMENT_SIZE "language.cpp.indent.statement.size"
 -#define PREF_INDENT_BRACE_SIZE "language.cpp.indent.brace.size"
 -#define PREF_INDENT_PARANTHESE_LINEUP "language.cpp.indent.paranthese.lineup"
 -#define PREF_INDENT_PARANTHESE_SIZE "language.cpp.indent.paranthese.size"
 -#define PREF_BRACE_AUTOCOMPLETION "language.cpp.brace.autocompletion"
 +#define PREF_SCHEMA "org.gnome.anjuta.cpp"
 +#define PREF_INDENT_AUTOMATIC "cpp-indent-automatic"
 +#define PREF_INDENT_MODELINE "cpp-indent-modeline"
 +#define PREF_INDENT_STATEMENT_SIZE "cpp-indent-statement-size"
 +#define PREF_INDENT_BRACE_SIZE "cpp-indent-brace-size"
 +#define PREF_INDENT_PARANTHESE_LINEUP "cpp-indent-paranthese-lineup"
 +#define PREF_INDENT_PARANTHESE_SIZE "cpp-indent-paranthese-size"
 +#define PREF_BRACE_AUTOCOMPLETION "cpp-brace-autocompletion"
 +#define PREF_COMMENT_LEADING_ASTERISK "cpp-multiline-leading-asterisk"
  
  #define TAB_SIZE (ianjuta_editor_get_tabsize (editor, NULL))
  
@@@ -2048,10 -2009,12 +2051,11 @@@ cpp_java_plugin_class_init (GObjectClas
  	klass->dispose = cpp_java_plugin_dispose;
  }
  
 -#define PREF_WIDGET_SPACE "preferences_toggle:bool:1:1:language.cpp.code.completion.space.after.func"
 -#define PREF_WIDGET_BRACE "preferences_toggle:bool:1:1:language.cpp.code.completion.brace.after.func"
 -#define PREF_WIDGET_AUTO "preferences_toggle:bool:1:1:language.cpp.code.completion.enable"
 +#define PREF_WIDGET_SPACE "preferences_toggle:bool:1:1:cpp-completion-space-after-func"
 +#define PREF_WIDGET_BRACE "preferences_toggle:bool:1:1:cpp-completion-brace-after-func"
 +#define PREF_WIDGET_AUTO "preferences_toggle:bool:1:1:cpp-completion-enable"
+ #define PREF_WIDGET_PKG_CONFIG "pkg_config_chooser1"
  
 -
  static void
  on_autocompletion_toggled (GtkToggleButton* button,
                             GtkBuilder* bxml)
diff --cc plugins/symbol-db/anjuta-symbol-db.ui
index c9c6163,7c35e9d..36eb8a4
--- a/plugins/symbol-db/anjuta-symbol-db.ui
+++ b/plugins/symbol-db/anjuta-symbol-db.ui
@@@ -27,28 -28,9 +28,6 @@@
                        <placeholder/>
                      </child>
                      <child>
-                       <object class="GtkHBox" id="hbox2">
-                         <property name="visible">True</property>
-                         <child>
-                           <object class="GtkCheckButton" id="preferences_toggle:bool:1:1:symboldb-scan-prj-pkgs">
-                             <property name="label" translatable="yes">Automatically scan project's packages</property>
-                             <property name="visible">True</property>
-                             <property name="can_focus">True</property>
-                             <property name="receives_default">False</property>
-                             <property name="has_tooltip">True</property>
-                             <property name="tooltip_text" translatable="yes">This option enables the default packages required by your opened project, e.g. Glib and GTK+ if you create a GTK+ project (may require more CPU work)</property>
-                             <property name="draw_indicator">True</property>
-                           </object>
-                           <packing>
-                             <property name="position">0</property>
-                           </packing>
-                         </child>
-                       </object>
-                       <packing>
-                         <property name="position">1</property>
-                       </packing>
-                     </child>
-                     <child>
 -                      <placeholder/>
 -                    </child>
 -                    <child>
                        <object class="GtkHBox" id="hbox4">
                          <property name="visible">True</property>
                          <child>
diff --cc plugins/symbol-db/plugin.c
index 87f2d77,d0fbc0e..1421722
--- a/plugins/symbol-db/plugin.c
+++ b/plugins/symbol-db/plugin.c
@@@ -49,6 -48,12 +48,14 @@@
  #define ICON_FILE "anjuta-symbol-db-plugin-48.png"
  #define UI_FILE PACKAGE_DATA_DIR"/ui/anjuta-symbol-db-plugin.xml"
  
+ #define BUILDER_FILE PACKAGE_DATA_DIR"/glade/anjuta-symbol-db.ui"
+ #define BUILDER_ROOT "symbol_prefs"
+ #define ICON_FILE "anjuta-symbol-db-plugin-48.png"
 -#define PREFS_BUFFER_UPDATE "preferences_toggle:bool:1:1:symboldb.buffer_update"
 -#define PREFS_PARALLEL_SCAN "preferences_toggle:bool:1:1:symboldb.parallel_scan"
++#define BUFFER_UPDATE "symboldb-buffer-update"
++#define PARALLEL_SCAN "symboldb-parallel-scan"
++#define PREFS_BUFFER_UPDATE "preferences_toggle:bool:1:1:symboldb-buffer-update"
++#define PREFS_PARALLEL_SCAN "preferences_toggle:bool:1:1:symboldb-parallel-scan"
+ 
  #define TIMEOUT_INTERVAL_SYMBOLS_UPDATE		10
  #define TIMEOUT_SECONDS_AFTER_LAST_TIP		5
  
@@@ -506,7 -508,7 +512,7 @@@ on_editor_buffer_symbol_update_scan_en
  		}	
  
  		/* add a default timeout to the updating of buffer symbols */	
- 		tags_update = g_settings_get_boolean (sdb_plugin->settings, BUFFER_AUTOSCAN);
 -		tags_update = anjuta_preferences_get_bool (sdb_plugin->prefs, PREFS_BUFFER_UPDATE);
++		tags_update = g_settings_get_boolean (sdb_plugin->settings, BUFFER_UPDATE);
  		
  		if (tags_update)
  		{
@@@ -683,7 -685,7 +689,8 @@@ value_added_current_editor (AnjutaPlugi
  		g_object_set (sdb_plugin->file_model, "file-path", local_path, NULL);
  		
  		/* add a default timeout to the updating of buffer symbols */	
- 		tags_update = g_settings_get_boolean (sdb_plugin->settings, BUFFER_AUTOSCAN);
 -		tags_update = anjuta_preferences_get_bool (sdb_plugin->prefs, PREFS_BUFFER_UPDATE);
++		tags_update = g_settings_get_boolean (sdb_plugin->settings, BUFFER_UPDATE);
++
  				
  		if (tags_update)
  		{
@@@ -1465,10 -1449,9 +1448,10 @@@ do_check_offline_files_changed (SymbolD
  		}
  	}
  	
 +	/*if (it != NULL) g_object_unref (it);*/
  	g_object_unref (it);
  	g_object_unref (model);
- 	g_ptr_array_free (to_add_files, TRUE);
+ 	g_ptr_array_unref (to_add_files);
  	g_hash_table_destroy (prj_elements_hash);
  	
  	return real_added > 0 ? TRUE : FALSE;	
@@@ -1509,21 -1577,9 +1577,9 @@@ on_session_load (AnjutaShell *shell, An
  					 anjuta_session_get_session_directory (session));
  		sdb_plugin->session_loading = TRUE;
  		
- 		if (sdb_plugin->session_packages == NULL)
- 		{
- 			/* hey, does user want to import system sources for this project? */
- 			gboolean automatic_scan = g_settings_get_boolean (sdb_plugin->settings,
- 			                                                  PROJECT_AUTOSCAN);
- 			
- 			if (automatic_scan == TRUE)
- 			{
- 				sdb_plugin->session_packages = ianjuta_project_manager_get_packages (pm, NULL);
- 			}
- 		}
- 		
  		/* get preferences about the parallel scan */
 -		gboolean parallel_scan = anjuta_preferences_get_bool (sdb_plugin->prefs, 
 -															 PREFS_PARALLEL_SCAN); 
 +		gboolean parallel_scan = g_settings_get_boolean (sdb_plugin->settings,
- 															 PARALLEL_SCAN); 
++															 PARALLEL_SCAN);  
  		
  		if (parallel_scan == TRUE && 
  			symbol_db_engine_is_connected (sdb_plugin->sdbe_globals) == TRUE)
@@@ -1752,7 -1742,7 +1805,7 @@@ on_project_root_added (AnjutaPlugin *pl
  		if (needs_sources_scan == TRUE)
  		{
  			DEBUG_PRINT ("Importing sources.");
--			do_import_project_sources (plugin, pm, root_dir);
++			do_import_project_sources (ANJUTA_PLUGIN_SYMBOL_DB(plugin), pm, root_dir);
  		}
  		else	
  		{
@@@ -1770,10 -1760,8 +1823,9 @@@
  
  			if (sources_array != NULL && sources_array->len > 0) 
  			{				
- 				do_import_project_sources_after_abort (plugin, sources_array);
- 				
- 				g_ptr_array_foreach (sources_array, (GFunc)g_free, NULL);
- 				g_ptr_array_free (sources_array, TRUE);
 -				do_import_project_sources_after_abort (plugin, sources_array);				
++				do_import_project_sources_after_abort (ANJUTA_PLUGIN_SYMBOL_DB (plugin), 
++				                                       sources_array);				
+ 				g_ptr_array_unref (sources_array);
  			}
  
  			/* check for offline changes */				
@@@ -1885,8 -1869,8 +1935,9 @@@ on_scan_end_manager (SymbolDBEngine *db
  										  sdb_plugin);
  			
  			/* get preferences about the parallel scan */
 -			gboolean parallel_scan = anjuta_preferences_get_bool (sdb_plugin->prefs, 
 -														 PREFS_PARALLEL_SCAN); 
 +			gboolean parallel_scan = g_settings_get_boolean (sdb_plugin->settings,
- 														 PARALLEL_SCAN); 
++														     PARALLEL_SCAN); 
++
  			
  			/* check the system population has a parallel fashion or not. */			 
  			if (parallel_scan == FALSE)
@@@ -2512,28 -2448,34 +2519,35 @@@ ipreferences_merge(IAnjutaPreferences* 
  {
  	DEBUG_PRINT ("%s", "SymbolDB: ipreferences_merge");	
  	SymbolDBPlugin *sdb_plugin;
+ 	GtkWidget *buf_up_widget;
++	GError* error = NULL;
  	
  	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (ipref);
- 	
- 	if (sdb_plugin->sdbp == NULL)
- 	{
- 		sdb_plugin->sdbp = symbol_db_prefs_new (sdb_plugin->sdbs, 
- 												sdb_plugin->sdbe_project,
- 												sdb_plugin->sdbe_globals,
- 												sdb_plugin->settings,
- 												sdb_plugin->session_packages);
- 		
- 		/* connect the signals to retrieve package modifications */
- 		g_signal_connect (G_OBJECT (sdb_plugin->sdbp), "package-add",
- 						  G_CALLBACK (on_prefs_package_add),
- 						  sdb_plugin);
- 		g_signal_connect (G_OBJECT (sdb_plugin->sdbp), "package-remove",
- 						  G_CALLBACK (on_prefs_package_remove),
- 						  sdb_plugin);		
- 		g_signal_connect (G_OBJECT (sdb_plugin->sdbp), "buffer-update-toggled",
- 						  G_CALLBACK (on_prefs_buffer_update_toggled),
- 						  sdb_plugin);				
+ 
+ 	if (sdb_plugin->prefs_bxml == NULL)
 -	{
 -		GError* error = NULL;
++	{	
+ 		/* Create the preferences page */
+ 		sdb_plugin->prefs_bxml = gtk_builder_new ();
+ 		if (!gtk_builder_add_from_file (sdb_plugin->prefs_bxml, BUILDER_FILE, &error))
+ 		{
+ 			g_warning ("Couldn't load builder file: %s", error->message);
+ 			g_error_free(error);
+ 		}		
  	}
+ 
+ 	anjuta_preferences_add_from_builder (prefs,
 -									 sdb_plugin->prefs_bxml, 
 -									 BUILDER_ROOT, 
 -									 _("Symbol Database"),  
 -									 ICON_FILE);
++	                                     sdb_plugin->prefs_bxml,
++	                                     sdb_plugin->settings,
++	                                     BUILDER_ROOT, 
++	                                     _("Symbol Database"),  
++	                                     ICON_FILE);
+ 
+ 	buf_up_widget = GTK_WIDGET (gtk_builder_get_object (sdb_plugin->prefs_bxml, 
+ 	    PREFS_BUFFER_UPDATE));
+ 	
+ 	g_signal_connect (buf_up_widget, "toggled",
+ 					  G_CALLBACK (on_prefs_buffer_update_toggled),
+ 					  sdb_plugin);
  }
  
  static void
@@@ -2574,6 -2517,190 +2589,118 @@@ isymbol_manager_create_query (IAnjutaSy
  	return IANJUTA_SYMBOL_QUERY (query);
  }
  
+ static gboolean
+ isymbol_manager_add_package (IAnjutaSymbolManager *isymbol_manager,
+     						 const gchar* pkg_name, 
+     						 const gchar* pkg_version, 
+     						 GList* files,
+     						 GError *err)
+ {
+ 	SymbolDBPlugin *sdb_plugin;
+ 	IAnjutaLanguage *lang_manager;
+ 	GPtrArray *files_array;
+ 	GList *node;
+ 
+ 	g_return_val_if_fail (isymbol_manager != NULL, FALSE);
+ 	
+ 	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (isymbol_manager);
+ 	lang_manager = anjuta_shell_get_interface (ANJUTA_PLUGIN (sdb_plugin)->shell, IAnjutaLanguage, 
+ 										NULL);	
+ 	
+ 	if (symbol_db_engine_add_new_project (sdb_plugin->sdbe_globals, NULL, pkg_name, 
+ 	    pkg_version) == FALSE)
+ 	{
+ 		return FALSE;
+ 	}
+ 
+ 	files_array = g_ptr_array_sized_new (g_list_length (files));
+ 	g_ptr_array_set_free_func (files_array, g_free);
+ 
+ 	node = files;
+ 	while (node != NULL)
+ 	{
+ 		g_ptr_array_add (files_array, g_strdup (node->data));
+ 
+ 		node = node->next;
+ 	}
+ 	
+ 	symbol_db_engine_add_new_files_async (sdb_plugin->sdbe_globals, lang_manager, 
+ 	    pkg_name, pkg_version, files_array);	
+ 
+ 	g_ptr_array_unref (files_array);
+ 	
+ 	return TRUE;
+ }
+ 
+ static gboolean
+ isymbol_manager_activate_package (IAnjutaSymbolManager *isymbol_manager,
+     							  const gchar *pkg_name, 
+     							  const gchar *pkg_version,
+     							  GError *err)
+ {
+ 	SymbolDBPlugin *sdb_plugin;
+ 	GList *versions;
+ 
+ 	g_return_val_if_fail (isymbol_manager != NULL, FALSE);
+ 	
+ 	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (isymbol_manager);
+ 
+ 	/* check whether the package already exists in the session packages. */
+ 	if ((versions = g_hash_table_lookup (sdb_plugin->session_packages, pkg_name)) != NULL)
+ 	{
+ 		GList *node;
+ 		
+ 		/* if the package is already activated return true */
+ 		node = versions;
+ 		while (node != NULL)
+ 		{
+ 			if (g_strcmp0 (node->data, pkg_version) == 0)
+ 				return TRUE;
+ 
+ 			node = g_list_next (node);
+ 		}
+ 
+ 		/* check in the db: it may have a different version from the one already activated */
+ 		if (symbol_db_engine_project_exists (sdb_plugin->sdbe_globals, pkg_name, 
+ 		    								 pkg_version) == TRUE)
+ 		{
+ 			GList *new_versions;
+ 
+ 			/* this is a rare case so the performance playing with glist should not be
+ 			 taken into consideration */			
+ 			new_versions = anjuta_util_glist_strings_dup (versions);
+ 			
+ 			/* ok, the package version exists in db. Append it to the versions glist */
+ 			new_versions = g_list_prepend (new_versions, g_strdup (pkg_version));
+ 
+ 			/* go ahead and insert it, replacing the old one */
+ 			g_hash_table_insert (sdb_plugin->session_packages, g_strdup (pkg_name), 
+ 			    new_versions);
+ 			
+ 			return TRUE;
+ 		}
+ 
+ 		/* nothing found on db. This is hopeless */
+ 		return FALSE;
+ 	}
+ 
+ 	if (symbol_db_engine_project_exists (sdb_plugin->sdbe_globals, pkg_name, 
+ 	    								 pkg_version) == TRUE)
+ 	{
+ 		GList *versions = NULL;
+ 
+ 		versions = g_list_append (versions, g_strdup (pkg_version));
+ 		/* ok, package exists in db. Add it to session packages */
+ 		g_hash_table_insert (sdb_plugin->session_packages, 
+ 		    				 g_strdup (pkg_name), 
+ 		    				 versions);
+ 		return TRUE;
+ 	}
+ 
+ 	/* user should add a package before activating it. */
+ 	return FALSE;
+ }
+ 
 -static gboolean
 -isymbol_manager_add_and_activate_package (IAnjutaSymbolManager *isymbol_manager,
 -    							  const gchar *pkg_name, 
 -    							  const gchar *pkg_version,
 -    							  GList *files,
 -    							  GError *err)
 -{
 -	SymbolDBPlugin *sdb_plugin;
 -
 -	g_return_val_if_fail (isymbol_manager != NULL, FALSE);
 -	
 -	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (isymbol_manager);
 -
 -	if (isymbol_manager_add_package (isymbol_manager, pkg_name, pkg_version, 
 -	    files, err) == FALSE)
 -		return FALSE;
 -	
 -	if (isymbol_manager_activate_package (isymbol_manager, pkg_name, pkg_version,
 -    							  err) == FALSE)
 -	{
 -		return FALSE;
 -	}
 -		
 -	return TRUE;
 -}
 -
 -static gboolean
 -isymbol_manager_deactivate_package (IAnjutaSymbolManager *isymbol_manager,
 -        							const gchar *pkg_name, 
 -    							  	const gchar *pkg_version,
 -    							  	GError *err)
 -{
 -	SymbolDBPlugin *sdb_plugin;
 -	GList *versions;
 -	GList *node;
 -
 -	g_return_val_if_fail (isymbol_manager != NULL, FALSE);
 -	
 -	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (isymbol_manager);
 -
 -	if ((versions = g_hash_table_lookup (sdb_plugin->session_packages, pkg_name)) == NULL)
 -	    return FALSE;
 -
 -	/* we can safely remove the whole list if it's composed by just one element */
 -	if (g_list_length (versions) == 1)	
 -	{
 -		g_hash_table_remove (sdb_plugin->session_packages, pkg_name);
 -		return TRUE;
 -	}
 -
 -	/* ok, if we reach this point we have a list with more than an element.
 -	 * Remove one and replace the item in the hash table.
 -	 */
 -	node = versions;
 -	while (node != NULL)
 -	{
 -		if (g_strcmp0 (node->data, pkg_version) == 0)
 -		{
 -			versions = g_list_remove_link (versions, node);
 -			g_free (node->data);
 -			g_list_free (node);
 -
 -			node = versions;
 -			continue;
 -		}
 -		
 -		node = g_list_next (node);
 -    }
 -	
 -	return TRUE;
 -}
 -
  static void
  isymbol_manager_iface_init (IAnjutaSymbolManagerIface *iface)
  {



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