[Frugalware-git] gfpm: Simplified (un)compressed size columns hide/show logic

Priyank priyank at frugalware.org
Wed Feb 4 09:45:35 CET 2009


Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=gfpm.git;a=commitdiff;h=35cd4522f476316ea79899522f4bf4c846ae41f9

commit 35cd4522f476316ea79899522f4bf4c846ae41f9
Author: Priyank <priyank at frugalware.org>
Date:   Wed Feb 4 14:15:13 2009 +0530

Simplified (un)compressed size columns hide/show logic
* documented functions in gfpm-interface.h

diff --git a/src/gfpm-interface.c b/src/gfpm-interface.c
index 4c177cd..ecf0059 100644
--- a/src/gfpm-interface.c
+++ b/src/gfpm-interface.c
@@ -69,6 +69,16 @@ GtkWidget *gfpm_pkgs_tvw = NULL;
/* indicates that the repos were initied atleast once */
gboolean init = FALSE;

+enum gfpm_cols {
+	COL_PKG_STATUS,
+	COL_PKG_ICON,
+	COL_PKG_NAME,
+	COL_PKG_VER_INSTALLED,
+	COL_PKG_VER_LATEST,
+	COL_PKG_SIZE_COMPRESSED,
+	COL_PKG_SIZE_UNCOMPRESSED
+};
+
static GtkWidget *gfpm_statusbar = NULL;
static GtkWidget *gfpm_groups_tvw = NULL;
static GtkWidget *gfpm_info_tvw = NULL;
@@ -86,6 +96,8 @@ static GtkWidget *gfpm_apply_inst_dwocheck;
static GtkWidget *gfpm_apply_rem_depcheck;
static GtkWidget *gfpm_search_combo;
static GtkWidget *gfpm_repos_combo;
+static GtkWidget *gfpm_compressed_size_col;
+static GtkWidget *gfpm_uncompressed_size_col;

static guint gfpm_populate_repos_combobox (GtkComboBox *combo);
static void cb_gfpm_repos_combo_changed (GtkComboBox *combo, gpointer data);
@@ -187,28 +199,23 @@ gfpm_get_widget (const char *wname)
void
gfpm_setup_pkgs_tvw (void)
{
-	guint			cols = 5;
+	guint			cols = 7;
gboolean		show_compressed = FALSE;
gboolean		show_uncompressed = FALSE;
GtkListStore		*store = NULL;
GtkTreeViewColumn	*column = NULL;
GtkCellRenderer		*renderer = NULL;
-	gboolean		flag = FALSE;
GList			*columns = NULL;

if (gfpm_config_get_value_bool("show_compressed_size"))
{
show_compressed = TRUE;
-		cols++;
}
if (gfpm_config_get_value_bool("show_uncompressed_size"))
{
show_uncompressed = TRUE;
-		cols++;
}
-	if (show_compressed && show_uncompressed)
-	{
-		store = gtk_list_store_new (cols,
+	store = gtk_list_store_new (cols,
G_TYPE_BOOLEAN,  /* Install status */
GDK_TYPE_PIXBUF, /* Status icon */
G_TYPE_STRING,   /* Package name */
@@ -216,49 +223,13 @@ gfpm_setup_pkgs_tvw (void)
G_TYPE_STRING,	 /* Latest version */
G_TYPE_STRING,	 /* Compressed size */
G_TYPE_STRING);	 /* Uncompressed size */
-		flag = TRUE;
-	}
-	else
-	if (show_compressed || show_uncompressed)
-	{
-		if (!flag)
-		{
-			store = gtk_list_store_new (cols,
-					G_TYPE_BOOLEAN,  /* Install status */
-					GDK_TYPE_PIXBUF, /* Status icon */
-					G_TYPE_STRING,   /* Package name */
-					G_TYPE_STRING,   /* Installed version */
-					G_TYPE_STRING,	 /* Latest version */
-					G_TYPE_STRING);	 /* (Un)Compressed size */
-		}
-	}
-	else
-	{
-		store = gtk_list_store_new (cols,
-				G_TYPE_BOOLEAN,  /* Install status */
-				GDK_TYPE_PIXBUF, /* Status icon */
-				G_TYPE_STRING,   /* Package name */
-				G_TYPE_STRING,   /* Installed version */
-				G_TYPE_STRING);   /* Latest version */
-	}
-
-	/* reset previous columns */
-	/* TODO: Fix a memleak here */
-	gtk_list_store_clear (GTK_LIST_STORE(gtk_tree_view_get_model(gfpm_pkgs_tvw)));
-	columns = gtk_tree_view_get_columns (GTK_TREE_VIEW(gfpm_pkgs_tvw));
-	while (columns != NULL)
-	{
-		column = columns->data;
-		gtk_tree_view_remove_column (GTK_TREE_VIEW(gfpm_pkgs_tvw), GTK_TREE_VIEW_COLUMN(column));
-		columns = g_list_next (columns);
-	}

renderer = gtk_cell_renderer_toggle_new ();
g_object_set (G_OBJECT(renderer), "activatable", TRUE, NULL);
g_signal_connect (renderer, "toggled", G_CALLBACK(cb_gfpm_pkg_selection_toggled), store);
column = gtk_tree_view_column_new_with_attributes (_("S"),
renderer,
-							"active", 0,
+							"active", COL_PKG_STATUS,
NULL);
gtk_tree_view_column_set_resizable (column, FALSE);
gtk_tree_view_append_column (GTK_TREE_VIEW(gfpm_pkgs_tvw), column);
@@ -266,7 +237,7 @@ gfpm_setup_pkgs_tvw (void)
renderer = gtk_cell_renderer_pixbuf_new ();
column = gtk_tree_view_column_new_with_attributes (_("Status"),
renderer,
-							"pixbuf", 1,
+							"pixbuf", COL_PKG_ICON,
NULL);
gtk_tree_view_column_set_resizable (column, FALSE);
gtk_tree_view_append_column (GTK_TREE_VIEW(gfpm_pkgs_tvw), column);
@@ -274,18 +245,18 @@ gfpm_setup_pkgs_tvw (void)
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes (_("Package Name"),
renderer,
-							"text", 2,
+							"text", COL_PKG_NAME,
NULL);
gtk_tree_view_column_set_resizable (column, FALSE);
gtk_tree_view_column_set_expand (column, TRUE);
gtk_tree_view_column_set_min_width (column, 140);
gtk_tree_view_append_column (GTK_TREE_VIEW(gfpm_pkgs_tvw), column);
-	gtk_tree_view_column_set_sort_column_id (column, 2);
+	gtk_tree_view_column_set_sort_column_id (column, COL_PKG_NAME);

renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes (_("Installed Version"),
renderer,
-							"text", 3,
+							"text", COL_PKG_VER_INSTALLED,
NULL);
gtk_tree_view_column_set_resizable (column, FALSE);
gtk_tree_view_append_column (GTK_TREE_VIEW(gfpm_pkgs_tvw), column);
@@ -293,33 +264,32 @@ gfpm_setup_pkgs_tvw (void)
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes (_("Latest Version"),
renderer,
-							"text", 4,
+							"text", COL_PKG_VER_LATEST,
+							NULL);
+	gtk_tree_view_column_set_resizable (column, FALSE);
+	gtk_tree_view_append_column (GTK_TREE_VIEW(gfpm_pkgs_tvw), column);
+
+	renderer = gtk_cell_renderer_text_new ();
+	column = gtk_tree_view_column_new_with_attributes (_("Compressed Size"),
+							renderer,
+							"text", COL_PKG_SIZE_COMPRESSED,
NULL);
gtk_tree_view_column_set_resizable (column, FALSE);
+	gtk_tree_view_column_set_sort_column_id (column, COL_PKG_SIZE_COMPRESSED);
gtk_tree_view_append_column (GTK_TREE_VIEW(gfpm_pkgs_tvw), column);
+	gfpm_compressed_size_col = column;
+	gfpm_pkgs_show_compressed_size (show_compressed);

-	if (show_compressed)
-	{
-		renderer = gtk_cell_renderer_text_new ();
-		column = gtk_tree_view_column_new_with_attributes (_("Compressed Size"),
-								renderer,
-								"text", 5,
-								NULL);
-		gtk_tree_view_column_set_resizable (column, FALSE);
-		gtk_tree_view_column_set_sort_column_id (column, 5);
-		gtk_tree_view_append_column (GTK_TREE_VIEW(gfpm_pkgs_tvw), column);
-	}
-	if (show_uncompressed)
-	{
-		renderer = gtk_cell_renderer_text_new ();
-		column = gtk_tree_view_column_new_with_attributes (_("Uncompressed Size"),
-								renderer,
-								"text", (show_compressed)?6:5,
-								NULL);
-		gtk_tree_view_column_set_resizable (column, FALSE);
-		gtk_tree_view_column_set_sort_column_id (column, (show_compressed)?6:5);
-		gtk_tree_view_append_column (GTK_TREE_VIEW(gfpm_pkgs_tvw), column);
-	}
+	renderer = gtk_cell_renderer_text_new ();
+	column = gtk_tree_view_column_new_with_attributes (_("Uncompressed Size"),
+							renderer,
+							"text", COL_PKG_SIZE_UNCOMPRESSED,
+							NULL);
+	gtk_tree_view_column_set_resizable (column, FALSE);
+//	gtk_tree_view_column_set_sort_column_id (column, (show_compressed)?6:5);
+	gtk_tree_view_append_column (GTK_TREE_VIEW(gfpm_pkgs_tvw), column);
+	gfpm_uncompressed_size_col = column;
+	gfpm_pkgs_show_uncompressed_size (show_uncompressed);

gtk_tree_view_set_model (GTK_TREE_VIEW(gfpm_pkgs_tvw), GTK_TREE_MODEL(store));

@@ -800,24 +770,21 @@ gfpm_load_pkgs_tvw (const char *group_name)
-1);
}
pm_pkg = pacman_db_readpkg (sync_db, g_strstrip((char*)pacman_list_getdata(i)));
-		if (show_compressed)
-		{
-			size = (float)((long)pacman_pkg_getinfo (pm_pkg, PM_PKG_SIZE)/1024)/1024;
-			asprintf (&tmp, "%0.2f MB", size);
-			gtk_list_store_set (GTK_LIST_STORE(model), &iter,
-						5, tmp,
-						-1);
-			g_free (tmp);
-		}
-		if (show_uncompressed)
-		{
-			size = (float)((long)pacman_pkg_getinfo (pm_pkg, PM_PKG_USIZE)/1024)/1024,
-			asprintf (&tmp, "%0.2f MB", size);
-			gtk_list_store_set (GTK_LIST_STORE(model), &iter,
-						(show_compressed)?6:5, tmp,
+
+		size = (float)((long)pacman_pkg_getinfo (pm_pkg, PM_PKG_SIZE)/1024)/1024;
+		asprintf (&tmp, "%0.2f MB", size);
+		gtk_list_store_set (GTK_LIST_STORE(model), &iter,
+							COL_PKG_SIZE_COMPRESSED, tmp,
-1);
-			g_free (tmp);
-		}
+		g_free (tmp);
+
+		size = (float)((long)pacman_pkg_getinfo (pm_pkg, PM_PKG_USIZE)/1024)/1024,
+		asprintf (&tmp, "%0.2f MB", size);
+		gtk_list_store_set (GTK_LIST_STORE(model), &iter,
+					COL_PKG_SIZE_UNCOMPRESSED, tmp,
+					-1);
+		g_free (tmp);
+
pacman_pkg_free (pm_pkg);
pacman_pkg_free (pm_lpkg);
while (gtk_events_pending()) gtk_main_iteration ();
@@ -1334,6 +1301,20 @@ gfpm_trans_commit (PM_LIST **list)
}
}

+void
+gfpm_pkgs_show_compressed_size (gboolean check)
+{
+	gtk_tree_view_column_set_visible (GTK_TREE_VIEW_COLUMN(gfpm_compressed_size_col),
+					check);
+}
+
+void
+gfpm_pkgs_show_uncompressed_size (gboolean check)
+{
+	gtk_tree_view_column_set_visible (GTK_TREE_VIEW_COLUMN(gfpm_uncompressed_size_col),
+					check);
+}
+
/* CALLBACKS */

static void
diff --git a/src/gfpm-interface.h b/src/gfpm-interface.h
index b9c485b..f5dbd5f 100644
--- a/src/gfpm-interface.h
+++ b/src/gfpm-interface.h
@@ -10,16 +10,43 @@
#include <gtk/gtk.h>
#include "gfpm.h"

+/* a wrapper for glade_xml_get_widget(xml,"foo") */
GtkWidget * gfpm_get_widget (const char *);
+
+/* Initialize gfpm interface. Call this function before any other interface functions */
+void gfpm_interface_init (void);
+
+/* update status */
void gfpm_update_status (const char *);
+
+/* setup repository combobox */
+void gfpm_interface_setup_repo_combos (void);
+
+/* setup gfpm's package treeview */
void gfpm_setup_pkgs_tvw (void);
+
+/* populate gfpm's group treeview for a specified repo */
void gfpm_load_groups_tvw (const char *);
+
+/* populate gfpm's package treeview for a specified group */
void gfpm_load_pkgs_tvw (const char *);
+
+/* populate gfpm's info treeview for a specified package */
void gfpm_load_info_tvw (const char *);
+
+/* populate files textview for a specied package */
void gfpm_load_files_txtvw (const char *, gboolean);
+
+/* populate changelog textview for a specied package */
void gfpm_load_changelog_txtvw (const char *, gboolean);
-void gfpm_interface_init (void);
-void gfpm_interface_setup_repo_combos (void);
+
+/* apply button callback. this is public because it's been shared by other components */
void cb_gfpm_apply_btn_clicked (GtkButton *, gpointer);

+/* show/hide 'compressed size' column in package treeview */
+void gfpm_pkgs_show_compressed_size (gboolean check);
+
+/* show/hide 'uncompressed size' column in package treeview */
+void gfpm_pkgs_show_uncompressed_size (gboolean check);
+
#endif
diff --git a/src/gfpm-prefs.c b/src/gfpm-prefs.c
index b53400f..eb09e14 100644
--- a/src/gfpm-prefs.c
+++ b/src/gfpm-prefs.c
@@ -551,10 +551,7 @@ cb_gfpm_prefs_compressed_size_toggled (GtkToggleButton *button, gpointer data)
/* write settings to config file */
gfpm_config_set_value_bool ("show_compressed_size", check);
gfpm_config_save ();
-
-	/* re-set package view */
-	gfpm_setup_pkgs_tvw ();
-	gfpm_load_pkgs_tvw (current_group);
+	gfpm_pkgs_show_compressed_size (check);

return;
}
@@ -569,10 +566,7 @@ cb_gfpm_prefs_uncompressed_size_toggled (GtkToggleButton *button, gpointer data)
/* write settings to config file */
gfpm_config_set_value_bool ("show_uncompressed_size", check);
gfpm_config_save ();
-
-	/* re-set package view */
-	gfpm_setup_pkgs_tvw ();
-	gfpm_load_pkgs_tvw (current_group);
+	gfpm_pkgs_show_uncompressed_size (check);

return;
}


More information about the Frugalware-git mailing list