[nautilus] list-model: use GEmblemedIcon



commit a187f8a4cdcc46f56c0cb03c31b9b7c92c747a88
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Thu Aug 19 19:51:45 2010 +0200

    list-model: use GEmblemedIcon
    
    Use GEmblemedIcon instead of other columns to render emblems.

 src/file-manager/fm-list-model.c |  142 +++++++++++++-------------------------
 src/file-manager/fm-list-model.h |    9 ---
 2 files changed, 49 insertions(+), 102 deletions(-)
---
diff --git a/src/file-manager/fm-list-model.c b/src/file-manager/fm-list-model.c
index d666f7f..6cb4eec 100644
--- a/src/file-manager/fm-list-model.c
+++ b/src/file-manager/fm-list-model.c
@@ -156,13 +156,6 @@ fm_list_model_get_column_type (GtkTreeModel *tree_model, int index)
 	case FM_LIST_MODEL_LARGE_ICON_COLUMN:
 	case FM_LIST_MODEL_LARGER_ICON_COLUMN:
 	case FM_LIST_MODEL_LARGEST_ICON_COLUMN:
-	case FM_LIST_MODEL_SMALLEST_EMBLEM_COLUMN:
-	case FM_LIST_MODEL_SMALLER_EMBLEM_COLUMN:
-	case FM_LIST_MODEL_SMALL_EMBLEM_COLUMN:
-	case FM_LIST_MODEL_STANDARD_EMBLEM_COLUMN:
-	case FM_LIST_MODEL_LARGE_EMBLEM_COLUMN:
-	case FM_LIST_MODEL_LARGER_EMBLEM_COLUMN:
-	case FM_LIST_MODEL_LARGEST_EMBLEM_COLUMN:
 		return GDK_TYPE_PIXBUF;
 	case FM_LIST_MODEL_FILE_NAME_IS_EDITABLE_COLUMN:
 		return G_TYPE_BOOLEAN;
@@ -256,10 +249,12 @@ fm_list_model_get_value (GtkTreeModel *tree_model, GtkTreeIter *iter, int column
 	NautilusFile *file;
 	char *str;
 	GdkPixbuf *icon, *rendered_icon;
+	GIcon *gicon, *emblemed_icon, *emblem_icon;
+	NautilusIconInfo *icon_info;
+	GEmblem *emblem;
+	GList *emblem_icons, *l;
 	int icon_size;
-	guint emblem_size;
 	NautilusZoomLevel zoom_level;
-	GList *emblem_pixbufs;
 	NautilusFile *parent_file;
 	char *emblems_to_ignore[3];
 	int i;
@@ -318,7 +313,51 @@ fm_list_model_get_value (GtkTreeModel *tree_model, GtkTreeIter *iter, int column
 				}
 			}
 
-			icon = nautilus_file_get_icon_pixbuf (file, icon_size, TRUE, flags);
+			gicon = nautilus_file_get_gicon (file, flags);
+
+			/* render emblems with GEmblemedIcon */
+			parent_file = nautilus_file_get_parent (file);
+			i = 0;
+			emblems_to_ignore[i++] = NAUTILUS_FILE_EMBLEM_NAME_TRASH;
+			if (parent_file) {
+				if (!nautilus_file_can_write (parent_file)) {
+					emblems_to_ignore[i++] = NAUTILUS_FILE_EMBLEM_NAME_CANT_WRITE;
+				}
+				nautilus_file_unref (parent_file);
+			}
+			emblems_to_ignore[i++] = NULL;
+
+			emblem = NULL;
+			emblem_icons = nautilus_file_get_emblem_icons (file,
+								       emblems_to_ignore);
+
+			if (emblem_icons != NULL) {
+				emblem_icon = emblem_icons->data;
+				emblem = g_emblem_new (emblem_icon);
+				emblemed_icon = g_emblemed_icon_new (gicon, emblem);
+
+				g_object_unref (emblem);
+
+				for (l = emblem_icons->next; l != NULL; l = l->next) {
+					emblem_icon = l->data;
+					emblem = g_emblem_new (emblem_icon);
+					g_emblemed_icon_add_emblem
+						(G_EMBLEMED_ICON (emblemed_icon), emblem);
+
+					g_object_unref (emblem);
+				}
+
+				eel_g_object_list_free (emblem_icons);
+
+				g_object_unref (gicon);
+				gicon = emblemed_icon;
+			}
+
+			icon_info = nautilus_icon_info_lookup (gicon, icon_size);
+			icon = nautilus_icon_info_get_pixbuf_at_size (icon_info, icon_size);
+
+			g_object_unref (icon_info);
+			g_object_unref (gicon);
 
 			if (model->details->highlight_files != NULL &&
 			    g_list_find_custom (model->details->highlight_files,
@@ -336,43 +375,6 @@ fm_list_model_get_value (GtkTreeModel *tree_model, GtkTreeIter *iter, int column
 			g_object_unref (icon);
 		}
 		break;
-	case FM_LIST_MODEL_SMALLEST_EMBLEM_COLUMN:
-	case FM_LIST_MODEL_SMALLER_EMBLEM_COLUMN:
-	case FM_LIST_MODEL_SMALL_EMBLEM_COLUMN:
-	case FM_LIST_MODEL_STANDARD_EMBLEM_COLUMN:
-	case FM_LIST_MODEL_LARGE_EMBLEM_COLUMN:
-	case FM_LIST_MODEL_LARGER_EMBLEM_COLUMN:
-	case FM_LIST_MODEL_LARGEST_EMBLEM_COLUMN:
-		g_value_init (value, GDK_TYPE_PIXBUF);
-
-		if (file != NULL) {
-			parent_file = nautilus_file_get_parent (file);
-			i = 0;
-			emblems_to_ignore[i++] = NAUTILUS_FILE_EMBLEM_NAME_TRASH;
-			if (parent_file) {
-				if (!nautilus_file_can_write (parent_file)) {
-					emblems_to_ignore[i++] = NAUTILUS_FILE_EMBLEM_NAME_CANT_WRITE;
-				}
-				nautilus_file_unref (parent_file);
-			}
-			emblems_to_ignore[i++] = NULL;
-			
-			zoom_level = fm_list_model_get_zoom_level_from_emblem_column_id (column);
-			icon_size = nautilus_get_icon_size_for_zoom_level (zoom_level);
-			emblem_size = nautilus_icon_get_emblem_size_for_icon_size (icon_size);
-			if (emblem_size != 0) {
-				emblem_pixbufs = nautilus_file_get_emblem_pixbufs (file,
-										   emblem_size,
-										   TRUE,
-										   emblems_to_ignore);
-				if (emblem_pixbufs != NULL) {
-					icon = emblem_pixbufs->data;
-					g_value_set_object (value, icon);
-				}
-				eel_gdk_pixbuf_list_free (emblem_pixbufs);
-			}
-		}
-		break;
 	case FM_LIST_MODEL_FILE_NAME_IS_EDITABLE_COLUMN:
 		g_value_init (value, G_TYPE_BOOLEAN);
 		
@@ -1421,52 +1423,6 @@ fm_list_model_get_column_id_from_zoom_level (NautilusZoomLevel zoom_level)
 	g_return_val_if_reached (FM_LIST_MODEL_STANDARD_ICON_COLUMN);
 }
 
-NautilusZoomLevel
-fm_list_model_get_zoom_level_from_emblem_column_id (int column)
-{
-	switch (column) {
-	case FM_LIST_MODEL_SMALLEST_EMBLEM_COLUMN:
-		return NAUTILUS_ZOOM_LEVEL_SMALLEST;
-	case FM_LIST_MODEL_SMALLER_EMBLEM_COLUMN:
-		return NAUTILUS_ZOOM_LEVEL_SMALLER;
-	case FM_LIST_MODEL_SMALL_EMBLEM_COLUMN:
-		return NAUTILUS_ZOOM_LEVEL_SMALL;
-	case FM_LIST_MODEL_STANDARD_EMBLEM_COLUMN:
-		return NAUTILUS_ZOOM_LEVEL_STANDARD;
-	case FM_LIST_MODEL_LARGE_EMBLEM_COLUMN:
-		return NAUTILUS_ZOOM_LEVEL_LARGE;
-	case FM_LIST_MODEL_LARGER_EMBLEM_COLUMN:
-		return NAUTILUS_ZOOM_LEVEL_LARGER;
-	case FM_LIST_MODEL_LARGEST_EMBLEM_COLUMN:
-		return NAUTILUS_ZOOM_LEVEL_LARGEST;
-	}
-
-	g_return_val_if_reached (NAUTILUS_ZOOM_LEVEL_STANDARD);
-}
-
-int
-fm_list_model_get_emblem_column_id_from_zoom_level (NautilusZoomLevel zoom_level)
-{
-	switch (zoom_level) {
-	case NAUTILUS_ZOOM_LEVEL_SMALLEST:
-		return FM_LIST_MODEL_SMALLEST_EMBLEM_COLUMN;
-	case NAUTILUS_ZOOM_LEVEL_SMALLER:
-		return FM_LIST_MODEL_SMALLER_EMBLEM_COLUMN;
-	case NAUTILUS_ZOOM_LEVEL_SMALL:
-		return FM_LIST_MODEL_SMALL_EMBLEM_COLUMN;
-	case NAUTILUS_ZOOM_LEVEL_STANDARD:
-		return FM_LIST_MODEL_STANDARD_EMBLEM_COLUMN;
-	case NAUTILUS_ZOOM_LEVEL_LARGE:
-		return FM_LIST_MODEL_LARGE_EMBLEM_COLUMN;
-	case NAUTILUS_ZOOM_LEVEL_LARGER:
-		return FM_LIST_MODEL_LARGER_EMBLEM_COLUMN;
-	case NAUTILUS_ZOOM_LEVEL_LARGEST:
-		return FM_LIST_MODEL_LARGEST_EMBLEM_COLUMN;
-	}
-
-	g_return_val_if_reached (FM_LIST_MODEL_STANDARD_EMBLEM_COLUMN);
-}
-
 void
 fm_list_model_set_drag_view (FMListModel *model,
 			     GtkTreeView *view,
diff --git a/src/file-manager/fm-list-model.h b/src/file-manager/fm-list-model.h
index b01fee8..257459f 100644
--- a/src/file-manager/fm-list-model.h
+++ b/src/file-manager/fm-list-model.h
@@ -53,13 +53,6 @@ enum {
 	FM_LIST_MODEL_LARGE_ICON_COLUMN,
 	FM_LIST_MODEL_LARGER_ICON_COLUMN,
 	FM_LIST_MODEL_LARGEST_ICON_COLUMN,
-	FM_LIST_MODEL_SMALLEST_EMBLEM_COLUMN,
-	FM_LIST_MODEL_SMALLER_EMBLEM_COLUMN,
-	FM_LIST_MODEL_SMALL_EMBLEM_COLUMN,
-	FM_LIST_MODEL_STANDARD_EMBLEM_COLUMN,
-	FM_LIST_MODEL_LARGE_EMBLEM_COLUMN,
-	FM_LIST_MODEL_LARGER_EMBLEM_COLUMN,
-	FM_LIST_MODEL_LARGEST_EMBLEM_COLUMN,
 	FM_LIST_MODEL_FILE_NAME_IS_EDITABLE_COLUMN,
 	FM_LIST_MODEL_NUM_COLUMNS
 };
@@ -112,8 +105,6 @@ void     fm_list_model_sort_files                        (FMListModel *model,
 
 NautilusZoomLevel fm_list_model_get_zoom_level_from_column_id (int               column);
 int               fm_list_model_get_column_id_from_zoom_level (NautilusZoomLevel zoom_level);
-NautilusZoomLevel fm_list_model_get_zoom_level_from_emblem_column_id (int               column);
-int               fm_list_model_get_emblem_column_id_from_zoom_level (NautilusZoomLevel zoom_level);
 
 NautilusFile *    fm_list_model_file_for_path (FMListModel *model, GtkTreePath *path);
 gboolean          fm_list_model_load_subdirectory (FMListModel *model, GtkTreePath *path, NautilusDirectory **directory);



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