Bug 3103

Summary: Improving category view
Product: [Maemo Official Applications] Settings and Maintenance Reporter: Ryan Abel <rabelg5>
Component: Application managerAssignee: unassigned <nobody>
Status: RESOLVED FIXED QA Contact: application-manager-bugs
Severity: enhancement    
Priority: Medium CC: andrew, andre_klapper, bugzilla770, maemo, marius.vollmer, tjb
Version: 4.1.2 (4.2008.36-5)Keywords: community-diablo, patch
Target Milestone: 4.1+   
Hardware: All   
OS: Maemo   
Attachments: Mock-up of the category grid view
Mock-up of the category column view
Mock-up of the category tree view
Patch against branches/2.1.x to give category grid

Description Ryan Abel (reporter) maemo.org 2008-04-17 13:52:54 UTC
I was having a discussion with X-Fade today on the repository category mess,
and the possibility of having usable categories besides "All" (sadly, I haven't
even looked at anything but "All" since at least OS2005 :\) made me consider
some of the issues with the current category setup in Application manager.

The current category view has an awful lot of wasted whitespace. My initial
reaction here was that a grid view in place of a the current list-view would
make better use of space and improve the thumb-ability (ordering is badly
messed-up in my mock-up—it should be left-to-right rather than
top-to-bottom). The number of packages in each category should be noted
parenthetically for each category (shown in the tree-view mock-up).*

The grid-view is probably the most straightforward and immediate solution, but
some extra options wouldn't hurt. Some sort of tree view (while mildly
ungainly) could give a nice overview alternative to "All" while reducing the
number of screens the user needs to click through. Show all the categories as
collapsible branches, and indicate the number of packages in each category
parenthetically.†

Finally a column view could be another useful alternative for reducing the
number of screens to click through and providing a better overview. Put a
column of categories on the left (again, with the number of packages in each
category indicated parenthetically) and display the packages in that category
in the right column.††

User-Agent:       Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US)
AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613.0.93354
Comment 1 Ryan Abel (reporter) maemo.org 2008-04-17 13:53:59 UTC
Created an attachment (id=751) [details]
Mock-up of the category grid view
Comment 2 Ryan Abel (reporter) maemo.org 2008-04-17 13:54:49 UTC
Created an attachment (id=752) [details]
Mock-up of the category column view
Comment 3 Ryan Abel (reporter) maemo.org 2008-04-17 13:57:42 UTC
Created an attachment (id=753) [details]
Mock-up of the category tree view
Comment 4 Andrew Flegg maemo.org 2008-04-17 15:14:18 UTC
There was talk many moons ago of having the category list be a tag cloud; which
could be cool.

However, something hierarchical will probably be necessary to support things
like Multimedia/Canola or Communications/Pidgin - where I don't want all their
plugins filling up my limited screen estate when I don't care about them.
Comment 5 Thomas J. Baker 2008-04-17 18:18:27 UTC
One really nice (relatively easy?) fix would be to have the app manager
remember the category you were just in and set the scroll back to the same area
like it now does with the package lists. As of now, you go into a category and
when you go back, it puts you back at the top of the list of categories, even
if you were way down in the middle of the list. I just submitted this in a
separate bug #3104.
Comment 6 Andre Klapper maemo.org 2008-10-08 14:50:16 UTC
(Removing deprecated "Future" Target Milestone.)
Comment 7 Andrew Flegg maemo.org 2008-10-26 18:22:31 UTC
Created an attachment (id=997) [details]
Patch against branches/2.1.x to give category grid

The attached patch (h-a-m-grid.patch) against branches/2.1.x (the current
diablo branch) gives a grid view:

http://bleb.org/software/maemo/h-a-m-grid.png

However, with the talk of sub-categories[1], I think the category list should
be the same GtkTreeView as the package list. This will give consistency, then,
with the user selecting subcategories. The "version" column should be
hidden/empty, but "Size" for a category should contain the number of packages
it contains.

Given we're talking about the Application Manager forcing everything[2] to be
in one of the i18n'ed categories, there can also be i18n descriptions for them,
and maybe even section-specific icons.

[1] http://wiki.maemo.org/Task:Package_categories
[2]
http://wiki.maemo.org/Task:Package_categories#Defined_top-level_categories_.26_application-specific_subcategories
Comment 8 Neil MacLeod maemo.org 2008-10-27 14:57:33 UTC
How relevant to the average user is version and size in the category column
view (comment 2) - these extra columns make the screen look very "busy" and
crowded and this information is in the details section if the user wants to
view it.

I think the mock-up in comment 2 might be more usable than the mock up in
comment 3. I like the grid view (comment 7) for categories, but would
icons/glyphs be possible in place of plain buttons?

Good to see the App Manager getting a makeover, it's about time - nice one
Ryan!
Comment 9 Marius Vollmer nokia 2008-10-27 16:22:04 UTC
This is what I ultimately applied to the Diablo branch.  The columns are now
homogenous and there is no empty row at the bottom when the categories exactly
fill the last row.

Will be in hildon-application-manager 2.1.20.

Index: src/util.cc
===================================================================
--- src/util.cc    (revision 1431)
+++ src/util.cc    (working copy)
@@ -2036,6 +2036,8 @@ unref_section_info (gpointer data, GClos
   si->unref();
 }

+#define GRID_COLUMNS 3
+
 GtkWidget *
 make_global_section_list (GList *sections, section_activated *act)
 {
@@ -2048,24 +2050,33 @@ make_global_section_list (GList *section
       return label;
     }

-  GtkWidget *hbox = gtk_hbox_new (FALSE, 0);
-  GtkWidget *vbox = gtk_vbox_new (FALSE, 5);
+  GtkWidget *table = gtk_table_new (1, GRID_COLUMNS, TRUE);
   GtkWidget *scroller;

-  gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 10);
-
   bool first_button = true;

   scroller = gtk_scrolled_window_new (NULL, NULL);

+  int row = 0;
+  int col = 0;
   for (GList *s = sections; s; s = s ->next)
     {
       section_info *si = (section_info *)s->data;
       GtkWidget *label = gtk_label_new (si->name);
-      gtk_misc_set_padding (GTK_MISC (label), 15, 15);
+      gtk_misc_set_padding (GTK_MISC (label), 0, 14);
+      gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
       GtkWidget *btn = gtk_button_new ();
       gtk_container_add (GTK_CONTAINER (btn), label);
-      gtk_box_pack_start (GTK_BOX (vbox), btn, FALSE, FALSE, 0);
+      gtk_table_attach_defaults (GTK_TABLE (table), btn,
+                 col, col+1,
+                 row, row+1);
+
+      col += 1;
+      if (col >= GRID_COLUMNS)
+    {
+      col = 0;
+      row++;
+    }

       si->ref(); 
       g_signal_connect_data (btn, "clicked",
@@ -2084,7 +2095,7 @@ make_global_section_list (GList *section
                   GTK_POLICY_NEVER,
                   GTK_POLICY_AUTOMATIC);
   gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scroller),
-                     hbox);
+                     table);

   global_section_list = scroller;
   g_object_ref (scroller);
Comment 10 Ryan Abel (reporter) maemo.org 2008-10-27 16:43:47 UTC
Does it remember the scroll position now? and any word on what we might expect
for Fremantle? Hopefully a slightly improved grid up giant buttons isn't it. ;)
Comment 11 Andre Klapper maemo.org 2008-12-17 20:11:40 UTC
(Fix not included in today's 5.2008.43-7 SSU update)
Comment 12 Lucas Maneos 2009-10-22 07:57:12 UTC
Marking patches of interest to Diablo (Maemo4) community updates, please excuse
the noise.