[gnome-packagekit] Split up the updates in the update viewer into sections to match the mockup
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-packagekit] Split up the updates in the update viewer into sections to match the mockup
- Date: Mon, 22 Aug 2011 20:01:45 +0000 (UTC)
commit 3898b4bec33d5a79dcae2362b50ab00cb9f68f3b
Author: Richard Hughes <richard hughsie com>
Date: Mon Aug 22 20:12:33 2011 +0100
Split up the updates in the update viewer into sections to match the mockup
src/gpk-update-viewer.c | 271 ++++++++++++++++++++++++++---------------------
1 files changed, 152 insertions(+), 119 deletions(-)
---
diff --git a/src/gpk-update-viewer.c b/src/gpk-update-viewer.c
index 919db70..cb73872 100644
--- a/src/gpk-update-viewer.c
+++ b/src/gpk-update-viewer.c
@@ -669,6 +669,8 @@ gpk_update_viewer_find_iter_model_cb (GtkTreeModel *model, GtkTreePath *path, Gt
gtk_tree_model_get (model, iter,
GPK_UPDATES_COLUMN_ID, &package_id_tmp,
-1);
+ if (package_id_tmp == NULL)
+ goto out;
/* only match on the name */
split = pk_package_id_split (package_id);
@@ -680,6 +682,7 @@ gpk_update_viewer_find_iter_model_cb (GtkTreeModel *model, GtkTreePath *path, Gt
g_free (package_id_tmp);
g_strfreev (split);
g_strfreev (split_tmp);
+out:
return ret;
}
@@ -698,18 +701,58 @@ gpk_update_viewer_model_get_path (GtkTreeModel *model, const gchar *package_id)
}
/**
- * gpk_update_viewer_find_parent_name:
+ * gpk_update_view_get_info_headers:
**/
-static gboolean
-gpk_update_viewer_find_parent_name (const gchar *package_name, GtkTreeIter *parent)
+static const gchar *
+gpk_update_view_get_info_headers (PkInfoEnum info)
+{
+ const gchar *text = NULL;
+ switch (info) {
+ case PK_INFO_ENUM_LOW:
+ /* TRANSLATORS: The type of update */
+ text = _("Trivial updates");
+ break;
+ case PK_INFO_ENUM_IMPORTANT:
+ /* TRANSLATORS: The type of update */
+ text = _("Important updates");
+ break;
+ case PK_INFO_ENUM_SECURITY:
+ /* TRANSLATORS: The type of update */
+ text = _("Security updates");
+ break;
+ case PK_INFO_ENUM_BUGFIX:
+ /* TRANSLATORS: The type of update */
+ text = _("Bug fix updates");
+ break;
+ case PK_INFO_ENUM_ENHANCEMENT:
+ /* TRANSLATORS: The type of update */
+ text = _("Enhancement updates");
+ break;
+ case PK_INFO_ENUM_BLOCKED:
+ /* TRANSLATORS: The type of update */
+ text = _("Blocked updates");
+ break;
+ default:
+ /* TRANSLATORS: The type of update, i.e. unspecified */
+ text = _("Other updates");
+ }
+ return text;
+}
+
+/**
+ * gpk_update_viewer_get_parent_for_info:
+ **/
+static void
+gpk_update_viewer_get_parent_for_info (PkInfoEnum info, GtkTreeIter *parent)
{
GtkTreeView *treeview;
GtkTreeModel *model;
GtkTreeIter iter;
- gchar **split_tmp;
gboolean valid;
gchar *package_id_tmp;
gboolean ret = FALSE;
+ PkInfoEnum info_tmp;
+ gchar *title;
treeview = GTK_TREE_VIEW(gtk_builder_get_object (builder, "treeview_updates"));
model = gtk_tree_view_get_model (treeview);
@@ -717,66 +760,62 @@ gpk_update_viewer_find_parent_name (const gchar *package_name, GtkTreeIter *pare
/* get the first iter in the array */
valid = gtk_tree_model_get_iter_first (model, &iter);
+ /* smush some update states together */
+ switch (info) {
+ case PK_INFO_ENUM_LOW:
+ info = PK_INFO_ENUM_NORMAL;
+ break;
+ default:
+ break;
+ }
+
/* find out how many we should update */
while (valid) {
gtk_tree_model_get (model, &iter,
- GPK_UPDATES_COLUMN_ID, &package_id_tmp, -1);
+ GPK_UPDATES_COLUMN_INFO, &info_tmp,
+ GPK_UPDATES_COLUMN_ID, &package_id_tmp,
+ -1);
- /* get the tmp name */
- split_tmp = pk_package_id_split (package_id_tmp);
+ if (package_id_tmp != NULL) {
+ g_free (package_id_tmp);
+ continue;
+ }
- /* does this equal our query */
- if (g_strcmp0 (split_tmp[PK_PACKAGE_ID_NAME], package_name) == 0) {
+ /* right section? */
+ if (info_tmp == info) {
*parent = iter;
ret = TRUE;
+ break;
}
- /* destroy our state */
- g_strfreev (split_tmp);
- g_free (package_id_tmp);
-
- /* escape */
- if (ret)
- break;
valid = gtk_tree_model_iter_next (model, &iter);
}
- return ret;
-}
-
-/**
- * gpk_update_viewer_find_parent:
- **/
-static gboolean
-gpk_update_viewer_find_parent (const gchar *package_id, GtkTreeIter *parent)
-{
- gchar **split = NULL;
- gchar *found;
- gchar *name;
- gboolean ret = FALSE;
-
- /* get the name */
- split = pk_package_id_split (package_id);
- name = g_strdup (split[PK_PACKAGE_ID_NAME]);
-
- /* does the package name exist in the list */
- do {
- /* the name doesn't contain any more of '-' */
- found = g_strrstr (name, "-");
- if (found == NULL)
- break;
-
- /* truncate */
- found[0] = '\0';
- /* search for existing */
- ret = gpk_update_viewer_find_parent_name (name, parent);
- } while (!ret);
-
- g_free (name);
- g_strfreev (split);
- return ret;
+ /* create */
+ if (!ret) {
+ title = g_strdup_printf ("<b>%s</b>",
+ gpk_update_view_get_info_headers (info));
+ gtk_tree_store_append (array_store_updates, &iter, NULL);
+ gtk_tree_store_set (array_store_updates, &iter,
+ GPK_UPDATES_COLUMN_TEXT, title,
+ GPK_UPDATES_COLUMN_ID, NULL,
+ GPK_UPDATES_COLUMN_INFO, info,
+ GPK_UPDATES_COLUMN_SELECT, TRUE,
+ GPK_UPDATES_COLUMN_VISIBLE, FALSE,
+ GPK_UPDATES_COLUMN_CLICKABLE, FALSE,
+ GPK_UPDATES_COLUMN_RESTART, PK_RESTART_ENUM_NONE,
+ GPK_UPDATES_COLUMN_STATUS, PK_INFO_ENUM_UNKNOWN,
+ GPK_UPDATES_COLUMN_SIZE, 0,
+ GPK_UPDATES_COLUMN_SIZE_DISPLAY, 0,
+ GPK_UPDATES_COLUMN_PERCENTAGE, 0,
+ GPK_UPDATES_COLUMN_PULSE, -1,
+ -1);
+ *parent = iter;
+ g_free (title);
+ }
}
+
/**
* gpk_update_viewer_progress_cb:
**/
@@ -808,12 +847,10 @@ gpk_update_viewer_progress_cb (PkProgress *progress, PkProgressType type, gpoint
GtkTreeView *treeview;
GtkTreeIter iter;
- GtkTreeIter parent;
GtkTreeModel *model;
GtkTreeViewColumn *column;
GtkTreePath *path;
gboolean scroll;
- gboolean ret;
/* add the results, not the progress */
if (role == PK_ROLE_ENUM_GET_UPDATES)
@@ -851,19 +888,14 @@ gpk_update_viewer_progress_cb (PkProgress *progress, PkProgressType type, gpoint
/* update icon */
path = gpk_update_viewer_model_get_path (model, package_id);
if (path == NULL) {
- /* find our parent */
- ret = gpk_update_viewer_find_parent (package_id, &parent);
text = gpk_package_id_format_twoline (gtk_widget_get_style_context (GTK_WIDGET (treeview)),
package_id,
summary);
g_debug ("adding: id=%s, text=%s", package_id, text);
- /* do we add to a parent? */
- if (ret)
- gtk_tree_store_append (array_store_updates, &iter, &parent);
- else
- gtk_tree_store_append (array_store_updates, &iter, NULL);
+ /* add to model */
+ gtk_tree_store_append (array_store_updates, &iter, NULL);
gtk_tree_store_set (array_store_updates, &iter,
GPK_UPDATES_COLUMN_TEXT, text,
GPK_UPDATES_COLUMN_ID, package_id,
@@ -1635,58 +1667,42 @@ gpk_update_viewer_treeview_add_columns_update (GtkTreeView *treeview)
{
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
-
- /* restart */
- renderer = gpk_cell_renderer_restart_new ();
- g_object_set (renderer,
- "stock-size", GTK_ICON_SIZE_BUTTON,
- NULL);
- column = gtk_tree_view_column_new_with_attributes ("", renderer,
- "value", GPK_UPDATES_COLUMN_RESTART, NULL);
- gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), FALSE);
- gtk_tree_view_append_column (treeview, column);
- g_object_set_data (G_OBJECT (column), "tooltip-id", GINT_TO_POINTER (GPK_UPDATES_COLUMN_RESTART));
+ GdkRGBA inactive;
/* --- column for image and toggle --- */
column = gtk_tree_view_column_new ();
- /* TRANSLATORS: if the update should be installed */
- gtk_tree_view_column_set_title (column, _("Install"));
- gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), FALSE);
+ gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE);
gtk_tree_view_column_set_sort_column_id (column, GPK_UPDATES_COLUMN_INFO);
- /* info */
- renderer = gpk_cell_renderer_info_new ();
- g_object_set (renderer,
- "stock-size", GTK_ICON_SIZE_BUTTON,
- "ignore-values", "unknown",
- NULL);
- gtk_tree_view_column_pack_start (column, renderer, TRUE);
- gtk_tree_view_column_add_attribute (column, renderer, "value", GPK_UPDATES_COLUMN_INFO);
-
/* select toggle */
renderer = gtk_cell_renderer_toggle_new ();
- g_signal_connect (renderer, "toggled", G_CALLBACK (gpk_update_viewer_treeview_update_toggled), NULL);
- gtk_tree_view_column_pack_start (column, renderer, TRUE);
- gtk_tree_view_column_add_attribute (column, renderer, "active", GPK_UPDATES_COLUMN_SELECT);
- gtk_tree_view_column_add_attribute (column, renderer, "activatable", GPK_UPDATES_COLUMN_CLICKABLE);
- gtk_tree_view_column_add_attribute (column, renderer, "sensitive", GPK_UPDATES_COLUMN_SENSITIVE);
-
- gtk_tree_view_append_column (treeview, column);
- g_object_set_data (G_OBJECT (column), "tooltip-id", GINT_TO_POINTER (GPK_UPDATES_COLUMN_INFO));
+ g_signal_connect (renderer, "toggled",
+ G_CALLBACK (gpk_update_viewer_treeview_update_toggled), NULL);
+ gtk_tree_view_column_pack_start (column, renderer, FALSE);
+ gtk_tree_view_column_add_attribute (column, renderer,
+ "active", GPK_UPDATES_COLUMN_SELECT);
+ gtk_tree_view_column_add_attribute (column, renderer,
+ "activatable", GPK_UPDATES_COLUMN_CLICKABLE);
+ gtk_tree_view_column_add_attribute (column, renderer,
+ "sensitive", GPK_UPDATES_COLUMN_SENSITIVE);
+ gtk_tree_view_column_add_attribute (column, renderer,
+ "visible", GPK_UPDATES_COLUMN_VISIBLE);
/* column for text */
renderer = gtk_cell_renderer_text_new ();
g_object_set (renderer,
"wrap-mode", PANGO_WRAP_WORD,
"ellipsize", PANGO_ELLIPSIZE_END,
+ "xpad", 3,
NULL);
- /* TRANSLATORS: a column that has name of the package that will be updated */
- column = gtk_tree_view_column_new_with_attributes (_("Software"), renderer,
- "markup", GPK_UPDATES_COLUMN_TEXT, NULL);
- gtk_tree_view_column_set_sort_column_id (column, GPK_UPDATES_COLUMN_ID);
- gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE);
+ gtk_tree_view_column_pack_start (column, renderer, TRUE);
+ gtk_tree_view_column_add_attribute (column, renderer,
+ "markup", GPK_UPDATES_COLUMN_TEXT);
+
gtk_tree_view_append_column (treeview, column);
- g_signal_connect (treeview, "size-allocate", G_CALLBACK (gpk_update_viewer_treeview_updates_size_allocate_cb), renderer);
+ g_signal_connect (treeview, "size-allocate",
+ G_CALLBACK (gpk_update_viewer_treeview_updates_size_allocate_cb),
+ renderer);
/* --- column for progress --- */
column = gtk_tree_view_column_new ();
@@ -1720,8 +1736,6 @@ gpk_update_viewer_treeview_add_columns_update (GtkTreeView *treeview)
/* --- column for size --- */
column = gtk_tree_view_column_new ();
- /* TRANSLATORS: a column that has size of each package */
- gtk_tree_view_column_set_title (column, _("Size"));
gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), FALSE);
gtk_tree_view_column_set_sort_column_id (column, GPK_UPDATES_COLUMN_SIZE_DISPLAY);
@@ -1741,6 +1755,18 @@ gpk_update_viewer_treeview_add_columns_update (GtkTreeView *treeview)
gtk_tree_view_column_add_attribute (column, renderer, "value", GPK_UPDATES_COLUMN_SIZE_DISPLAY);
gtk_tree_view_append_column (treeview, column);
+
+ /* restart */
+ renderer = gpk_cell_renderer_restart_new ();
+ g_object_set (renderer,
+ "stock-size", GTK_ICON_SIZE_BUTTON,
+ NULL);
+ column = gtk_tree_view_column_new_with_attributes ("", renderer,
+ "value", GPK_UPDATES_COLUMN_RESTART, NULL);
+ gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), FALSE);
+ gtk_tree_view_append_column (treeview, column);
+ g_object_set_data (G_OBJECT (column), "tooltip-id", GINT_TO_POINTER (GPK_UPDATES_COLUMN_RESTART));
+
g_object_set_data (G_OBJECT (column), "tooltip-id", GINT_TO_POINTER (GPK_UPDATES_COLUMN_SIZE_DISPLAY));
}
@@ -2033,27 +2059,36 @@ gpk_update_viewer_populate_details (PkUpdateDetail *item)
static void
gpk_packages_treeview_clicked_cb (GtkTreeSelection *selection, gpointer user_data)
{
- GtkTreeModel *model;
+ gboolean ret;
+ gchar *package_id = NULL;
GtkTreeIter iter;
- gchar *package_id;
+ GtkTreeModel *model;
+ GtkWidget *widget;
PkUpdateDetail *item = NULL;
/* This will only work in single or browse selection mode! */
- if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ ret = gtk_tree_selection_get_selected (selection, &model, &iter);
+ if (!ret)
+ goto out;
- /* set loading text */
- gtk_text_buffer_set_text (text_buffer, _("Loading..."), -1);
+ gtk_tree_model_get (model, &iter,
+ GPK_UPDATES_COLUMN_UPDATE_DETAIL_OBJ, &item,
+ GPK_UPDATES_COLUMN_ID, &package_id, -1);
- gtk_tree_model_get (model, &iter,
- GPK_UPDATES_COLUMN_UPDATE_DETAIL_OBJ, &item,
- GPK_UPDATES_COLUMN_ID, &package_id, -1);
+ /* make 'Details' insensitive' */
+ widget = GTK_WIDGET(gtk_builder_get_object (builder, "expander1"));
+ gtk_widget_set_sensitive (widget, package_id != NULL);
+
+ /* set loading text */
+ if (item != NULL) {
g_debug ("selected row is: %s, %p", package_id, item);
- g_free (package_id);
- if (item != NULL)
- gpk_update_viewer_populate_details (item);
+ gtk_text_buffer_set_text (text_buffer, _("Loading..."), -1);
+ gpk_update_viewer_populate_details (item);
} else {
- g_debug ("no row selected");
+ gtk_text_buffer_set_text (text_buffer, _("No update details available."), -1);
}
+out:
+ g_free (package_id);
}
/**
@@ -2562,7 +2597,6 @@ gpk_update_viewer_get_updates_cb (PkClient *client, GAsyncResult *res, gpointer
PkInfoEnum info;
gchar *package_id = NULL;
gchar *summary = NULL;
- gboolean ret;
/* get the results */
results = pk_client_generic_finish (client, res, &error);
@@ -2615,7 +2649,7 @@ gpk_update_viewer_get_updates_cb (PkClient *client, GAsyncResult *res, gpointer
NULL);
/* find our parent */
- ret = gpk_update_viewer_find_parent (package_id, &parent);
+ gpk_update_viewer_get_parent_for_info (info, &parent);
/* add to array store */
text = gpk_package_id_format_twoline (gtk_widget_get_style_context (widget),
@@ -2632,11 +2666,8 @@ gpk_update_viewer_get_updates_cb (PkClient *client, GAsyncResult *res, gpointer
if (!pk_bitfield_contain (roles, PK_ROLE_ENUM_UPDATE_PACKAGES))
sensitive = FALSE;
- /* do we add to a parent? */
- if (ret)
- gtk_tree_store_append (array_store_updates, &iter, &parent);
- else
- gtk_tree_store_append (array_store_updates, &iter, NULL);
+ /* add to model */
+ gtk_tree_store_append (array_store_updates, &iter, &parent);
gtk_tree_store_set (array_store_updates, &iter,
GPK_UPDATES_COLUMN_TEXT, text,
GPK_UPDATES_COLUMN_ID, package_id,
@@ -2666,6 +2697,7 @@ gpk_update_viewer_get_updates_cb (PkClient *client, GAsyncResult *res, gpointer
treeview = GTK_TREE_VIEW(gtk_builder_get_object (builder, "treeview_updates"));
model = gtk_tree_view_get_model (treeview);
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), GPK_UPDATES_COLUMN_ID, GTK_SORT_ASCENDING);
+ gtk_tree_view_expand_all (treeview);
/* get the download sizes */
if (update_array->len > 0) {
@@ -3192,8 +3224,9 @@ gpk_update_viewer_application_startup_cb (GtkApplication *_application, gpointer
widget = GTK_WIDGET(gtk_builder_get_object (builder, "treeview_updates"));
gtk_tree_view_set_search_column (GTK_TREE_VIEW(widget), GPK_UPDATES_COLUMN_TEXT);
gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW(widget), gpk_update_viewer_search_equal_func, NULL, NULL);
- gtk_tree_view_columns_autosize (GTK_TREE_VIEW(widget));
- gtk_tree_view_set_level_indentation (GTK_TREE_VIEW(widget), 0);
+ gtk_tree_view_set_level_indentation (GTK_TREE_VIEW(widget), 3);
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(widget), FALSE);
+ gtk_tree_view_set_show_expanders (GTK_TREE_VIEW(widget), FALSE);
gtk_tree_view_set_model (GTK_TREE_VIEW(widget),
GTK_TREE_MODEL (array_store_updates));
gpk_update_viewer_treeview_add_columns_update (GTK_TREE_VIEW(widget));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]