[anjuta] project-manager: Use AnjutaPkgConfigChooser instead of a custom widget



commit 81f5555b2dc9cbe96c27a3bbf9a543c5fea6f520
Author: Johannes Schmid <jhs gnome org>
Date:   Thu Nov 18 11:51:18 2010 +0100

    project-manager: Use AnjutaPkgConfigChooser instead of a custom widget

 plugins/project-manager/Makefile.am   |    2 -
 plugins/project-manager/dialogs.c     |  192 ++++++++++++++------------------
 plugins/project-manager/pkg-config.c  |   87 ---------------
 plugins/project-manager/pkg-config.h  |   40 -------
 plugins/project-manager/pm_dialogs.ui |    2 +-
 5 files changed, 85 insertions(+), 238 deletions(-)
---
diff --git a/plugins/project-manager/Makefile.am b/plugins/project-manager/Makefile.am
index 3cdc002..9c29c19 100644
--- a/plugins/project-manager/Makefile.am
+++ b/plugins/project-manager/Makefile.am
@@ -63,8 +63,6 @@ libanjuta_project_manager_la_SOURCES = \
 	project-view.c		\
 	project-util.h		\
 	project-util.c		\
-	pkg-config.c		\
-	pkg-config.h		\
 	project.h		\
 	project.c		\
 	dialogs.c		\
diff --git a/plugins/project-manager/dialogs.c b/plugins/project-manager/dialogs.c
index ed8313b..25c9d66 100644
--- a/plugins/project-manager/dialogs.c
+++ b/plugins/project-manager/dialogs.c
@@ -30,10 +30,10 @@
 
 #include "project-model.h"
 #include "project-view.h"
-#include "pkg-config.h"
 
 #include <libanjuta/anjuta-debug.h>
 #include <libanjuta/anjuta-utils.h>
+#include <libanjuta/anjuta-pkg-config-chooser.h>
 
 #define ICON_SIZE 16
 
@@ -1273,7 +1273,7 @@ on_cursor_changed(GtkTreeView* view, gpointer data)
 {
 	GtkWidget* button = GTK_WIDGET(data);
 	GtkTreeSelection *selection = gtk_tree_view_get_selection(view);
-
+ 
 	if (gtk_tree_selection_count_selected_rows (selection) > 0)
 		gtk_widget_set_sensitive(button, TRUE);
 	else
@@ -1433,53 +1433,40 @@ static void
 on_cursor_changed_set_entry(GtkTreeView* view, gpointer data)
 {
     GtkWidget* entry = GTK_WIDGET(data);
-    GtkTreeSelection *selection = gtk_tree_view_get_selection(view);
-
-    if (gtk_tree_selection_count_selected_rows (selection) == 1)
+    AnjutaPkgConfigChooser* chooser = ANJUTA_PKG_CONFIG_CHOOSER (view);
+	GList* packages = anjuta_pkg_config_chooser_get_active_packages (chooser);
+	
+    if (packages)
     {
-        GtkTreeModel *model;
-        GList *list;
-        GtkTreeIter iter;
-
-        list = gtk_tree_selection_get_selected_rows (selection, &model);
-        if (gtk_tree_model_get_iter (model, &iter, (GtkTreePath *)(list->data)))
-        {
-            gchar *name;
-            gchar *ptr;
-            
-            gtk_tree_model_get (model, &iter, COL_PKG_PACKAGE, &name, -1);
-
-            /* Remove numeric suffix */
-            ptr = name + strlen(name) - 1;
-            while (g_ascii_isdigit (*ptr))
-            {
-                while (g_ascii_isdigit (*ptr)) ptr--;
-                if ((*ptr != '_') && (*ptr != '-') && (*ptr != '.')) break;
-                *ptr = '\0';
-                ptr--;
-            }
+		gchar* name = packages->data;
+		gchar* ptr;
+		/* Remove numeric suffix */
+		ptr = name + strlen(name) - 1;
+		while (g_ascii_isdigit (*ptr))
+		{
+			while (g_ascii_isdigit (*ptr)) ptr--;
+			if ((*ptr != '_') && (*ptr != '-') && (*ptr != '.')) break;
+			*ptr = '\0';
+			ptr--;
+		}
 
-            /* Convert to upper case and remove invalid characters */
-            for (ptr = name; *ptr != '\0'; ptr++)
-            {
-                if (g_ascii_isalnum (*ptr))
-                {
-                    *ptr = g_ascii_toupper (*ptr);
-                }
-                else
-                {
-                    *ptr = '_';
-                }
-            }
+		/* Convert to upper case and remove invalid characters */
+		for (ptr = name; *ptr != '\0'; ptr++)
+		{
+			if (g_ascii_isalnum (*ptr))
+			{
+				*ptr = g_ascii_toupper (*ptr);
+			}
+			else
+			{
+				*ptr = '_';
+			}
+		}
 
-            g_signal_handlers_block_by_func (G_OBJECT (entry), on_changed_disconnect, view);
-            gtk_entry_set_text (GTK_ENTRY (entry), name);
-            g_signal_handlers_unblock_by_func (G_OBJECT (entry), on_changed_disconnect, view);
-            g_free (name);
-        }
-        
-        g_list_foreach (list, (GFunc)gtk_tree_path_free, NULL);
-        g_list_free (list);
+		g_signal_handlers_block_by_func (G_OBJECT (entry), on_changed_disconnect, view);
+		gtk_entry_set_text (GTK_ENTRY (entry), name);
+		g_signal_handlers_unblock_by_func (G_OBJECT (entry), on_changed_disconnect, view);
+        anjuta_util_glist_strings_free (packages);
     }
 }
 
@@ -1489,6 +1476,22 @@ on_changed_disconnect (GtkEditable* entry, gpointer data)
     g_signal_handlers_block_by_func (G_OBJECT (data), on_cursor_changed_set_entry, entry);
 }
 
+static void
+on_pkg_chooser_selection_changed (AnjutaPkgConfigChooser* chooser,
+                                  gchar* package,
+                                  gpointer data)
+{
+	GtkWidget* button = GTK_WIDGET(data);
+	GList* packages = anjuta_pkg_config_chooser_get_active_packages (chooser);
+
+	if (packages != NULL)
+		gtk_widget_set_sensitive(button, TRUE);
+	else
+		gtk_widget_set_sensitive(button, FALSE);
+
+	anjuta_util_glist_strings_free (packages);
+}
+
 GList* 
 anjuta_pm_project_new_package (AnjutaPmProject *project,
                               GtkWindow        *parent,
@@ -1500,13 +1503,10 @@ anjuta_pm_project_new_package (AnjutaPmProject *project,
     GtkWidget *ok_button;
     GtkWidget *module_entry;
     GtkWidget *packages_view;
-    GtkCellRenderer* renderer;
-    GtkListStore *store;
     GList *packages = NULL;
-    GtkTreeViewColumn *col;
     gint response;
     gboolean finished = FALSE;
-    GtkTreeSelection *package_selection;
+	GtkListStore *store;
     AnjutaProjectNode *root;
 	AnjutaProjectNode *node;
 	AnjutaProjectNode *module = NULL;
@@ -1539,7 +1539,7 @@ anjuta_pm_project_new_package (AnjutaPmProject *project,
 	}
 	
     /* Fill combo box with modules */
-    store = gtk_list_store_new(1, G_TYPE_STRING);
+    store = gtk_list_store_new(1, G_TYPE_STRING);	
     gtk_combo_box_set_entry_text_column (GTK_COMBO_BOX (module_entry), 0);
 
 	root = ianjuta_project_get_root (project->project, NULL);
@@ -1582,30 +1582,13 @@ anjuta_pm_project_new_package (AnjutaPmProject *project,
     }
     
     /* Fill package list */
-    renderer = gtk_cell_renderer_text_new ();
-    col = gtk_tree_view_column_new_with_attributes (_("Package"),
-                                                    renderer,
-                                                    "text", COL_PKG_PACKAGE,
-                                                    NULL);
-    gtk_tree_view_column_set_sort_column_id (col, COL_PKG_PACKAGE);
-    gtk_tree_view_append_column (GTK_TREE_VIEW (packages_view), col);
-    renderer = gtk_cell_renderer_text_new ();
-    col = gtk_tree_view_column_new_with_attributes (_("Description"),
-                                                    renderer,
-                                                    "text",
-                                                    COL_PKG_DESCRIPTION,
-                                                    NULL);
-    gtk_tree_view_append_column (GTK_TREE_VIEW (packages_view), col);
-    store = packages_get_pkgconfig_list ();
-    gtk_tree_view_set_model (GTK_TREE_VIEW (packages_view),
-                            GTK_TREE_MODEL (store));
-
-    on_cursor_changed (GTK_TREE_VIEW (packages_view), ok_button);
-    g_signal_connect (G_OBJECT(packages_view), "cursor-changed",
-        G_CALLBACK(on_cursor_changed), ok_button);
-    package_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (packages_view));
-    gtk_tree_selection_set_mode (package_selection, GTK_SELECTION_MULTIPLE);
-
+	anjuta_pkg_config_chooser_show_active_column (ANJUTA_PKG_CONFIG_CHOOSER (packages_view),
+	                                              TRUE);
+    g_signal_connect (G_OBJECT(packages_view), "package-activated",
+        G_CALLBACK(on_pkg_chooser_selection_changed), ok_button);
+    g_signal_connect (G_OBJECT(packages_view), "package-deactivated",
+        G_CALLBACK(on_pkg_chooser_selection_changed), ok_button);
+	
     if (parent) {
         gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
     }
@@ -1618,7 +1601,7 @@ anjuta_pm_project_new_package (AnjutaPmProject *project,
             case GTK_RESPONSE_OK: 
             {
                 gchar *name;
-				AnjutaProjectNode *module;
+				AnjutaProjectNode *module = NULL;
 				GString *error_message = g_string_new (NULL);
 
                 name = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (module_entry));
@@ -1658,41 +1641,34 @@ anjuta_pm_project_new_package (AnjutaPmProject *project,
                 {
                     GList *list;
                     GList *node;
-                    GtkTreeModel *model;
-                    GtkTreeIter iter;
                     
-                    list = gtk_tree_selection_get_selected_rows (package_selection, &model);
+                    list = anjuta_pkg_config_chooser_get_active_packages (ANJUTA_PKG_CONFIG_CHOOSER (packages_view));
                     for (node = list; node != NULL; node = g_list_next (node))
                     {
-                        if (gtk_tree_model_get_iter (model, &iter, (GtkTreePath *)(node->data)))
-                        {
-                            gchar *name;
-                            AnjutaProjectNode* new_package;
-                            GError *error = NULL;
-                            
-                            gtk_tree_model_get (model, &iter, COL_PKG_PACKAGE, &name, -1);
-
-							new_package = ianjuta_project_add_node_after (project->project, module, NULL, ANJUTA_PROJECT_PACKAGE, NULL, name, &error);
-                            if (error)
-                            {
-                                gchar *str = g_strdup_printf ("%s: %s\n",
-                                                                name,
-                                                                error->message);
-                                g_string_append (error_message, str);
-                                g_error_free (error);
-                                g_free (str);
-                            }
-                            else
-                            {
-                                packages = g_list_append (packages, new_package);
-								finished = TRUE;
-                            }
-                            g_free (name);
-                        }
-                    }
-                    g_list_foreach (list, (GFunc)gtk_tree_path_free, NULL);
-                    g_list_free (list);
-                }
+						gchar *name;
+						AnjutaProjectNode* new_package;
+						GError *error = NULL;
+
+						name = node->data;
+
+						new_package = ianjuta_project_add_node_after (project->project, module, NULL, ANJUTA_PROJECT_PACKAGE, NULL, name, &error);
+						if (error)
+						{
+							gchar *str = g_strdup_printf ("%s: %s\n",
+							                              name,
+							                              error->message);
+							g_string_append (error_message, str);
+							g_error_free (error);
+							g_free (str);
+						}
+						else
+						{
+							packages = g_list_append (packages, new_package);
+							finished = TRUE;
+						}
+					}
+					anjuta_util_glist_strings_free (list);
+				}
 					
                 if (error_message->len != 0)
                 {
diff --git a/plugins/project-manager/pm_dialogs.ui b/plugins/project-manager/pm_dialogs.ui
index 64cb895..9909934 100644
--- a/plugins/project-manager/pm_dialogs.ui
+++ b/plugins/project-manager/pm_dialogs.ui
@@ -760,7 +760,7 @@
                     <property name="vscrollbar_policy">automatic</property>
                     <property name="shadow_type">in</property>
                     <child>
-                      <object class="GtkTreeView" id="packages_view">
+                      <object class="AnjutaPkgConfigChooser" id="packages_view">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                       </object>



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