SF.net SVN: geany:[3260] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Fri Nov 21 13:06:09 UTC 2008


Revision: 3260
          http://geany.svn.sourceforge.net/geany/?rev=3260&view=rev
Author:   ntrel
Date:     2008-11-21 13:06:09 +0000 (Fri, 21 Nov 2008)

Log Message:
-----------
Add Expand/Collapse All symbol list popup menu items.
Disable smybol list sort items when there are no tags.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/symbols.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2008-11-20 17:01:02 UTC (rev 3259)
+++ trunk/ChangeLog	2008-11-21 13:06:09 UTC (rev 3260)
@@ -1,3 +1,10 @@
+2008-11-21  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * src/symbols.c:
+   Add Expand/Collapse All symbol list popup menu items.
+   Disable smybol list sort items when there are no tags.
+
+
 2008-11-20  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
 
  * src/documentprivate.h, src/symbols.c:

Modified: trunk/src/symbols.c
===================================================================
--- trunk/src/symbols.c	2008-11-20 17:01:02 UTC (rev 3259)
+++ trunk/src/symbols.c	2008-11-21 13:06:09 UTC (rev 3260)
@@ -93,10 +93,12 @@
 
 static struct
 {
+	GtkWidget *expand_all;
+	GtkWidget *collapse_all;
 	GtkWidget *sort_by_name;
 	GtkWidget *sort_by_appearance;
 }
-symbol_menu = {NULL, NULL};
+symbol_menu = {NULL, NULL, NULL, NULL};
 
 
 static void html_tags_loaded(void);
@@ -1684,7 +1686,14 @@
 		gpointer user_data)
 {
 	GeanyDocument *doc = document_get_current();
+	gboolean enable;
 
+	enable = doc && doc->has_tags;
+	gtk_widget_set_sensitive(symbol_menu.sort_by_name, enable);
+	gtk_widget_set_sensitive(symbol_menu.sort_by_appearance, enable);
+	gtk_widget_set_sensitive(symbol_menu.expand_all, enable);
+	gtk_widget_set_sensitive(symbol_menu.collapse_all, enable);
+
 	if (!doc)
 		return;
 
@@ -1699,29 +1708,74 @@
 }
 
 
+static GtkWidget *
+ui_image_menu_item_new_with_stock(const gchar *label, const gchar *stock_id)
+{
+	GtkWidget *item = gtk_image_menu_item_new_with_mnemonic(label);
+	GtkWidget *image = gtk_image_new_from_stock(stock_id, GTK_ICON_SIZE_MENU);
+
+	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
+	gtk_widget_show(image);
+	return item;
+}
+
+
+static void on_expand_collapse(GtkWidget *widget, gpointer user_data)
+{
+	gboolean expand = utils_str_equal(user_data, GTK_STOCK_ADD);
+	GeanyDocument *doc = document_get_current();
+
+	if (!doc)
+		return;
+
+	g_return_if_fail(doc->priv->tag_tree);
+
+	if (expand)
+		gtk_tree_view_expand_all(GTK_TREE_VIEW(doc->priv->tag_tree));
+	else
+		gtk_tree_view_collapse_all(GTK_TREE_VIEW(doc->priv->tag_tree));
+}
+
+
 static void create_taglist_popup_menu(void)
 {
 	GtkWidget *item, *menu;
 
 	tv.popup_taglist = menu = gtk_menu_new();
 
+	symbol_menu.expand_all = item = ui_image_menu_item_new_with_stock(
+		_("_Expand All"), GTK_STOCK_ADD);
+	gtk_widget_show(item);
+	gtk_container_add(GTK_CONTAINER(menu), item);
+	g_signal_connect(item, "activate", G_CALLBACK(on_expand_collapse), GTK_STOCK_ADD);
+
+	symbol_menu.collapse_all = item = ui_image_menu_item_new_with_stock(
+		_("_Collapse All"), GTK_STOCK_REMOVE);
+	gtk_widget_show(item);
+	gtk_container_add(GTK_CONTAINER(menu), item);
+	g_signal_connect(item, "activate", G_CALLBACK(on_expand_collapse), GTK_STOCK_REMOVE);
+
+	item = gtk_separator_menu_item_new();
+	gtk_widget_show(item);
+	gtk_container_add(GTK_CONTAINER(menu), item);
+
 	symbol_menu.sort_by_name = item = gtk_radio_menu_item_new_with_mnemonic(NULL,
 		_("Sort by _Name"));
 	gtk_widget_show(item);
-	gtk_container_add(GTK_CONTAINER(tv.popup_taglist), item);
+	gtk_container_add(GTK_CONTAINER(menu), item);
 	g_signal_connect(item, "activate", G_CALLBACK(on_symbol_tree_sort_clicked),
 			GINT_TO_POINTER(SYMBOLS_SORT_BY_NAME));
 
 	symbol_menu.sort_by_appearance = item = gtk_radio_menu_item_new_with_mnemonic_from_widget(
 		GTK_RADIO_MENU_ITEM(item), _("Sort by _Appearance"));
 	gtk_widget_show(item);
-	gtk_container_add(GTK_CONTAINER(tv.popup_taglist), item);
+	gtk_container_add(GTK_CONTAINER(menu), item);
 	g_signal_connect(item, "activate", G_CALLBACK(on_symbol_tree_sort_clicked),
 			GINT_TO_POINTER(SYMBOLS_SORT_BY_APPEARANCE));
 
 	g_signal_connect(menu, "show", G_CALLBACK(on_symbol_tree_menu_show), NULL);
 
-	sidebar_add_common_menu_items(GTK_MENU(tv.popup_taglist));
+	sidebar_add_common_menu_items(GTK_MENU(menu));
 }
 
 


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



More information about the Commits mailing list