SF.net SVN: geany-plugins:[1655] trunk/geany-plugins/treebrowser

dimitrov-adrian at users.sourceforge.net dimitrov-adrian at xxxxx
Sat Oct 16 14:53:15 UTC 2010


Revision: 1655
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=1655&view=rev
Author:   dimitrov-adrian
Date:     2010-10-16 14:53:15 +0000 (Sat, 16 Oct 2010)

Log Message:
-----------
Treebrowser: Added new option to show mime-type icons (Idea from Colomban Wendling`s mail)

Modified Paths:
--------------
    trunk/geany-plugins/treebrowser/ChangeLog
    trunk/geany-plugins/treebrowser/src/treebrowser.c

Modified: trunk/geany-plugins/treebrowser/ChangeLog
===================================================================
--- trunk/geany-plugins/treebrowser/ChangeLog	2010-10-13 16:28:15 UTC (rev 1654)
+++ trunk/geany-plugins/treebrowser/ChangeLog	2010-10-16 14:53:15 UTC (rev 1655)
@@ -38,6 +38,13 @@
 +-------------------------------+
 
 
+16-10-2010 	Adrian Dimitrov 		<dimitrov.adrian at gmail.com>
+
+	* src/treebrowser.c
+		Added new option to show mime-type icons (can be configured by the preferences)
+			(Idea from Colomban Wendling`s mail)
+
+
 09-10-2010 	Adrian Dimitrov 		<dimitrov.adrian at gmail.com>
 
 	* src/treebrowser.c

Modified: trunk/geany-plugins/treebrowser/src/treebrowser.c
===================================================================
--- trunk/geany-plugins/treebrowser/src/treebrowser.c	2010-10-13 16:28:15 UTC (rev 1654)
+++ trunk/geany-plugins/treebrowser/src/treebrowser.c	2010-10-16 14:53:15 UTC (rev 1655)
@@ -59,6 +59,7 @@
 static gboolean 			CONFIG_ON_DELETE_CLOSE_FILE = TRUE;
 static gboolean 			CONFIG_SHOW_TREE_LINES 		= TRUE;
 static gboolean 			CONFIG_SHOW_BOOKMARKS 		= FALSE;
+static gint 				CONFIG_SHOW_ICONS 			= 2;
 
 /* ------------------
  * TREEVIEW STRUCT
@@ -149,6 +150,45 @@
 };
 
 
+static GdkPixbuf *
+utils_pixbuf_from_path(gchar *path)
+{
+	GIcon 		*icon;
+	GdkPixbuf *ret = NULL;
+	GtkIconInfo *info;
+	gint width;
+
+	icon = g_content_type_get_icon(g_content_type_guess(path, NULL, 0, NULL));
+
+	if (icon != NULL)
+	{
+		gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, NULL);
+		info = gtk_icon_theme_lookup_by_gicon (gtk_icon_theme_get_default(), icon, width, GTK_ICON_LOOKUP_USE_BUILTIN);
+		if (!info)
+			return NULL;
+		ret = gtk_icon_info_load_icon (info, NULL);
+		gtk_icon_info_free (info);
+	}
+
+	return ret;
+}
+
+static GdkPixbuf *
+utils_pixbuf_from_stock(const gchar *stock_id)
+{
+	GtkIconSet *icon_set;
+
+	icon_set = gtk_icon_factory_lookup_default(stock_id);
+
+	if (icon_set)
+		return gtk_icon_set_render_icon(icon_set, gtk_widget_get_default_style(),
+										gtk_widget_get_default_direction(),
+										GTK_STATE_NORMAL, GTK_ICON_SIZE_MENU, NULL, NULL);
+
+	return NULL;
+}
+
+
 /* ------------------
  * TREEBROWSER CORE FUNCTIONS
  * ------------------ */
@@ -311,8 +351,8 @@
 	gchar 			*utf8_name;
 	GSList 			*list, *node;
 
-	gchar *fname;
-	gchar *uri;
+	gchar 			*fname;
+	gchar 			*uri;
 
 	directory = g_strconcat(directory, G_DIR_SEPARATOR_S, NULL);
 
@@ -356,7 +396,7 @@
 					}
 					last_dir_iter = gtk_tree_iter_copy(&iter);
 					gtk_tree_store_set(treestore, &iter,
-										TREEBROWSER_COLUMN_ICON, 	GTK_STOCK_DIRECTORY,
+										TREEBROWSER_COLUMN_ICON, 	CONFIG_SHOW_ICONS ? utils_pixbuf_from_stock(GTK_STOCK_DIRECTORY) : NULL,
 										TREEBROWSER_COLUMN_NAME, 	fname,
 										TREEBROWSER_COLUMN_URI, 	uri,
 										-1);
@@ -373,7 +413,11 @@
 					{
 						gtk_tree_store_append(treestore, &iter, parent);
 						gtk_tree_store_set(treestore, &iter,
-										TREEBROWSER_COLUMN_ICON, 	GTK_STOCK_FILE,
+										TREEBROWSER_COLUMN_ICON, 	CONFIG_SHOW_ICONS == 2
+																		? utils_pixbuf_from_path(uri)
+																		: CONFIG_SHOW_ICONS
+																			? utils_pixbuf_from_stock(GTK_STOCK_FILE)
+																			: NULL,
 										TREEBROWSER_COLUMN_NAME, 	fname,
 										TREEBROWSER_COLUMN_URI, 	uri,
 										-1);
@@ -422,8 +466,9 @@
 	gchar 		*contents, *path_full;
 	gchar 		**lines, **line;
 	GtkTreeIter iter;
-	gchar *pos;
-	gchar *name;
+	gchar 		*pos;
+	gchar 		*name;
+	GdkPixbuf 	*icon = NULL;
 
 	if (! CONFIG_SHOW_BOOKMARKS)
 		return;
@@ -440,7 +485,7 @@
 		{
 			gtk_tree_store_prepend(treestore, &bookmarks_iter, NULL);
 			gtk_tree_store_set(treestore, &bookmarks_iter,
-											TREEBROWSER_COLUMN_ICON, 	GTK_STOCK_ABOUT,
+											TREEBROWSER_COLUMN_ICON, 	CONFIG_SHOW_ICONS ? utils_pixbuf_from_stock(GTK_STOCK_DIRECTORY) : NULL,
 											TREEBROWSER_COLUMN_NAME, 	_("Bookmarks"),
 											TREEBROWSER_COLUMN_URI, 	NULL,
 											-1);
@@ -474,7 +519,7 @@
 				{
 					gtk_tree_store_append(treestore, &iter, &bookmarks_iter);
 					gtk_tree_store_set(treestore, &iter,
-												TREEBROWSER_COLUMN_ICON, 	GTK_STOCK_DIRECTORY,
+												TREEBROWSER_COLUMN_ICON, 	CONFIG_SHOW_ICONS ? utils_pixbuf_from_stock(GTK_STOCK_DIRECTORY) : NULL,
 												TREEBROWSER_COLUMN_NAME, 	g_basename(path_full),
 												TREEBROWSER_COLUMN_URI, 	path_full,
 												-1);
@@ -1169,8 +1214,8 @@
 		gtk_tree_view_expand_row(GTK_TREE_VIEW(treeview), path, FALSE);
 		flag_on_expand_refresh = FALSE;
 	}
-	gtk_tree_store_set(treestore, iter, TREEBROWSER_COLUMN_ICON, GTK_STOCK_OPEN, -1);
-
+	if (CONFIG_SHOW_ICONS)
+		gtk_tree_store_set(treestore, iter, TREEBROWSER_COLUMN_ICON, utils_pixbuf_from_stock(GTK_STOCK_OPEN), -1);
 }
 
 static void
@@ -1180,8 +1225,8 @@
 	gtk_tree_model_get(GTK_TREE_MODEL(treestore), iter, TREEBROWSER_COLUMN_URI, &uri, -1);
 	if (uri == FALSE)
 		return;
-
-	gtk_tree_store_set(treestore, iter, TREEBROWSER_COLUMN_ICON, GTK_STOCK_DIRECTORY, -1);
+	if (CONFIG_SHOW_ICONS)
+		gtk_tree_store_set(treestore, iter, TREEBROWSER_COLUMN_ICON, utils_pixbuf_from_stock(GTK_STOCK_DIRECTORY), -1);
 }
 
 static void
@@ -1267,7 +1312,7 @@
 	gtk_tree_view_append_column(GTK_TREE_VIEW(view), treeview_column_text);
 
 	gtk_tree_view_column_pack_start(treeview_column_text, render_icon, FALSE);
-	gtk_tree_view_column_set_attributes(treeview_column_text, render_icon, "stock-id", TREEBROWSER_RENDER_ICON, NULL);
+	gtk_tree_view_column_set_attributes(treeview_column_text, render_icon, "pixbuf", TREEBROWSER_RENDER_ICON, NULL);
 
 	gtk_tree_view_column_pack_start(treeview_column_text, render_text, TRUE);
 	gtk_tree_view_column_add_attribute(treeview_column_text, render_text, "text", TREEBROWSER_RENDER_TEXT);
@@ -1288,7 +1333,7 @@
 	gtk_tree_view_set_enable_tree_lines(GTK_TREE_VIEW(view), CONFIG_SHOW_TREE_LINES);
 #endif
 
-	treestore = gtk_tree_store_new(TREEBROWSER_COLUMNC, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
+	treestore = gtk_tree_store_new(TREEBROWSER_COLUMNC, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
 
 	gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(treestore));
 	g_signal_connect(G_OBJECT(render_text), "edited", G_CALLBACK(on_treeview_renamed), view);
@@ -1409,6 +1454,7 @@
 	GtkWidget *ON_DELETE_CLOSE_FILE;
 	GtkWidget *SHOW_TREE_LINES;
 	GtkWidget *SHOW_BOOKMARKS;
+	GtkWidget *SHOW_ICONS;
 
 } configure_widgets;
 
@@ -1430,6 +1476,7 @@
 	CONFIG_ON_DELETE_CLOSE_FILE 	= utils_get_setting_boolean(config, "treebrowser", "on_delete_close_file", 	CONFIG_ON_DELETE_CLOSE_FILE);
 	CONFIG_SHOW_TREE_LINES 			= utils_get_setting_boolean(config, "treebrowser", "show_tree_lines", 		CONFIG_SHOW_TREE_LINES);
 	CONFIG_SHOW_BOOKMARKS 			= utils_get_setting_boolean(config, "treebrowser", "show_bookmarks", 		CONFIG_SHOW_BOOKMARKS);
+	CONFIG_SHOW_ICONS 				= utils_get_setting_integer(config, "treebrowser", "show_icons", 			CONFIG_SHOW_ICONS);
 
 	g_key_file_free(config);
 }
@@ -1456,6 +1503,7 @@
 	g_key_file_set_boolean(config, 	"treebrowser", "on_delete_close_file", 	CONFIG_ON_DELETE_CLOSE_FILE);
 	g_key_file_set_boolean(config, 	"treebrowser", "show_tree_lines", 		CONFIG_SHOW_TREE_LINES);
 	g_key_file_set_boolean(config, 	"treebrowser", "show_bookmarks", 		CONFIG_SHOW_BOOKMARKS);
+	g_key_file_set_integer(config, 	"treebrowser", "show_icons", 			CONFIG_SHOW_ICONS);
 
 	data = g_key_file_to_data(config, NULL, NULL);
 	utils_write_file(CONFIG_FILE, data);
@@ -1482,6 +1530,7 @@
 	CONFIG_ON_DELETE_CLOSE_FILE = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configure_widgets.ON_DELETE_CLOSE_FILE));
 	CONFIG_SHOW_TREE_LINES 		= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configure_widgets.SHOW_TREE_LINES));
 	CONFIG_SHOW_BOOKMARKS 		= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configure_widgets.SHOW_BOOKMARKS));
+	CONFIG_SHOW_ICONS 			= gtk_combo_box_get_active(GTK_COMBO_BOX(configure_widgets.SHOW_ICONS));
 
 	if (save_settings() == TRUE)
 	{
@@ -1528,8 +1577,21 @@
 	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 6);
 	gtk_box_pack_start(GTK_BOX(hbox), configure_widgets.SHOW_BARS, FALSE, FALSE, 0);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 6);
+	ui_widget_set_tooltip_text(configure_widgets.SHOW_BARS,
+		_("If position is changed, the option require plugin restart."));
 	gtk_combo_box_set_active(GTK_COMBO_BOX(configure_widgets.SHOW_BARS), CONFIG_SHOW_BARS);
 
+	hbox = gtk_hbox_new(FALSE, 0);
+	label = gtk_label_new(_("Show icons"));
+	configure_widgets.SHOW_ICONS = gtk_combo_box_new_text();
+	gtk_combo_box_append_text( GTK_COMBO_BOX(configure_widgets.SHOW_ICONS), _("None"));
+	gtk_combo_box_append_text( GTK_COMBO_BOX(configure_widgets.SHOW_ICONS), _("Base"));
+	gtk_combo_box_append_text( GTK_COMBO_BOX(configure_widgets.SHOW_ICONS), _("Content-type"));
+	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 6);
+	gtk_box_pack_start(GTK_BOX(hbox), configure_widgets.SHOW_ICONS, FALSE, FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 6);
+	gtk_combo_box_set_active(GTK_COMBO_BOX(configure_widgets.SHOW_ICONS), CONFIG_SHOW_ICONS);
+
 	configure_widgets.SHOW_HIDDEN_FILES = gtk_check_button_new_with_label(_("Show hidden files"));
 	gtk_button_set_focus_on_click(GTK_BUTTON(configure_widgets.SHOW_HIDDEN_FILES), FALSE);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configure_widgets.SHOW_HIDDEN_FILES), CONFIG_SHOW_HIDDEN_FILES);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Plugins-Commits mailing list