SF.net SVN: geany-plugins:[2020] trunk/geany-plugins/addons/src

eht16 at users.sourceforge.net eht16 at xxxxx
Sun Apr 10 17:05:46 UTC 2011


Revision: 2020
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=2020&view=rev
Author:   eht16
Date:     2011-04-10 17:05:45 +0000 (Sun, 10 Apr 2011)

Log Message:
-----------
Add preference for the DocList addon to define the order of the documents in the list (closes #3204573)

Modified Paths:
--------------
    trunk/geany-plugins/addons/src/addons.c
    trunk/geany-plugins/addons/src/ao_doclist.c
    trunk/geany-plugins/addons/src/ao_doclist.h

Modified: trunk/geany-plugins/addons/src/addons.c
===================================================================
--- trunk/geany-plugins/addons/src/addons.c	2011-04-10 16:18:37 UTC (rev 2019)
+++ trunk/geany-plugins/addons/src/addons.c	2011-04-10 17:05:45 UTC (rev 2020)
@@ -40,7 +40,7 @@
 GeanyFunctions	*geany_functions;
 
 
-PLUGIN_VERSION_CHECK(206)
+PLUGIN_VERSION_CHECK(207)
 PLUGIN_SET_TRANSLATABLE_INFO(
 	LOCALEDIR,
 	GETTEXT_PACKAGE,
@@ -61,12 +61,11 @@
 };
 
 
-
 typedef struct
 {
 	/* general settings */
 	gchar *config_file;
-	gboolean show_toolbar_doclist_item;
+	gboolean enable_doclist;
 	gboolean enable_openuri;
 	gboolean enable_tasks;
 	gboolean enable_systray;
@@ -78,6 +77,8 @@
 	gchar *tasks_token_list;
 	gboolean tasks_scan_all_documents;
 
+	DocListSortMode doclist_sort_mode;
+
 	/* instances and variables of components */
 	AoDocList *doclist;
 	AoOpenUri *openuri;
@@ -243,8 +244,10 @@
 		"plugins", G_DIR_SEPARATOR_S, "addons", G_DIR_SEPARATOR_S, "addons.conf", NULL);
 
 	g_key_file_load_from_file(config, ao_info->config_file, G_KEY_FILE_NONE, NULL);
-	ao_info->show_toolbar_doclist_item = utils_get_setting_boolean(config,
+	ao_info->enable_doclist = utils_get_setting_boolean(config,
 		"addons", "show_toolbar_doclist_item", TRUE);
+	ao_info->doclist_sort_mode = utils_get_setting_integer(config,
+		"addons", "doclist_sort_mode", DOCLIST_SORT_BY_OCCURRENCE);
 	ao_info->enable_openuri = utils_get_setting_boolean(config,
 		"addons", "enable_openuri", FALSE);
 	ao_info->enable_tasks = utils_get_setting_boolean(config,
@@ -266,7 +269,7 @@
 
 	plugin_module_make_resident(geany_plugin);
 
-	ao_info->doclist = ao_doc_list_new(ao_info->show_toolbar_doclist_item);
+	ao_info->doclist = ao_doc_list_new(ao_info->enable_doclist, ao_info->doclist_sort_mode);
 	ao_info->openuri = ao_open_uri_new(ao_info->enable_openuri);
 	ao_info->systray = ao_systray_new(ao_info->enable_systray);
 	ao_info->bookmarklist = ao_bookmark_list_new(ao_info->enable_bookmarklist);
@@ -298,6 +301,15 @@
 }
 
 
+static void ao_configure_doclist_toggled_cb(GtkToggleButton *togglebutton, gpointer data)
+{
+	gboolean sens = gtk_toggle_button_get_active(togglebutton);
+
+	gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), "radio_doclist_name"), sens);
+	gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), "radio_doclist_occurrence"), sens);
+}
+
+
 static void ao_configure_response_cb(GtkDialog *dialog, gint response, gpointer user_data)
 {
 	if (response == GTK_RESPONSE_OK || response == GTK_RESPONSE_APPLY)
@@ -306,8 +318,14 @@
 		gchar *data;
 		gchar *config_dir = g_path_get_dirname(ao_info->config_file);
 
-		ao_info->show_toolbar_doclist_item = (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
+		ao_info->enable_doclist = (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
 			g_object_get_data(G_OBJECT(dialog), "check_doclist"))));
+		if (gtk_toggle_button_get_active(
+				GTK_TOGGLE_BUTTON(g_object_get_data(G_OBJECT(dialog), "radio_doclist_name"))))
+			ao_info->doclist_sort_mode = DOCLIST_SORT_BY_NAME;
+		else
+			ao_info->doclist_sort_mode = DOCLIST_SORT_BY_OCCURRENCE;
+
 		ao_info->enable_openuri = (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
 			g_object_get_data(G_OBJECT(dialog), "check_openuri"))));
 		ao_info->enable_tasks = (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
@@ -330,7 +348,8 @@
 
 		g_key_file_load_from_file(config, ao_info->config_file, G_KEY_FILE_NONE, NULL);
 		g_key_file_set_boolean(config, "addons",
-			"show_toolbar_doclist_item", ao_info->show_toolbar_doclist_item);
+			"show_toolbar_doclist_item", ao_info->enable_doclist);
+		g_key_file_set_integer(config, "addons", "doclist_sort_mode", ao_info->doclist_sort_mode);
 		g_key_file_set_boolean(config, "addons", "enable_openuri", ao_info->enable_openuri);
 		g_key_file_set_boolean(config, "addons", "enable_tasks", ao_info->enable_tasks);
 		g_key_file_set_string(config, "addons", "tasks_token_list", ao_info->tasks_token_list);
@@ -345,7 +364,8 @@
 		g_key_file_set_boolean(config, "addons", "enable_xmltagging",
 			ao_info->enable_xmltagging);
 
-		g_object_set(ao_info->doclist, "enable-doclist", ao_info->show_toolbar_doclist_item, NULL);
+		g_object_set(ao_info->doclist, "enable-doclist", ao_info->enable_doclist, NULL);
+		g_object_set(ao_info->doclist, "sort-mode", ao_info->doclist_sort_mode, NULL);
 		g_object_set(ao_info->openuri, "enable-openuri", ao_info->enable_openuri, NULL);
 		g_object_set(ao_info->systray, "enable-systray", ao_info->enable_systray, NULL);
 		g_object_set(ao_info->bookmarklist, "enable-bookmarklist",
@@ -378,7 +398,9 @@
 
 GtkWidget *plugin_configure(GtkDialog *dialog)
 {
-	GtkWidget *vbox, *check_doclist, *check_openuri, *check_tasks, *check_systray;
+	GtkWidget *vbox, *check_openuri, *check_tasks, *check_systray;
+	GtkWidget *check_doclist, *vbox_doclist, *frame_doclist;
+	GtkWidget *radio_doclist_name, *radio_doclist_occurrence;
 	GtkWidget *check_bookmarklist, *check_markword, *frame_tasks, *vbox_tasks;
 	GtkWidget *check_tasks_scan_mode, *entry_tasks_tokens, *label_tasks_tokens, *tokens_hbox;
 	GtkWidget *check_blanklines, *check_xmltagging;
@@ -387,10 +409,32 @@
 
 	check_doclist = gtk_check_button_new_with_label(
 		_("Show toolbar item to show a list of currently open documents"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_doclist),
-		ao_info->show_toolbar_doclist_item);
-	gtk_box_pack_start(GTK_BOX(vbox), check_doclist, FALSE, FALSE, 3);
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_doclist), ao_info->enable_doclist);
+	g_signal_connect(check_doclist, "toggled", G_CALLBACK(ao_configure_doclist_toggled_cb), dialog);
 
+	radio_doclist_name = gtk_radio_button_new_with_mnemonic(NULL, _("Sort documents by _name"));
+	ui_widget_set_tooltip_text(radio_doclist_name,
+		_("Sort the documents in the list by their filename"));
+
+	radio_doclist_occurrence = gtk_radio_button_new_with_mnemonic_from_widget(
+		GTK_RADIO_BUTTON(radio_doclist_name), _("Sort documents by _occurrence"));
+	ui_widget_set_tooltip_text(radio_doclist_name,
+		_("Sort the documents in the order of the document tabs"));
+
+	if (ao_info->doclist_sort_mode == DOCLIST_SORT_BY_NAME)
+		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_doclist_name), TRUE);
+	else
+		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_doclist_occurrence), TRUE);
+
+	vbox_doclist = gtk_vbox_new(FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(vbox_doclist), radio_doclist_name, FALSE, FALSE, 3);
+	gtk_box_pack_start(GTK_BOX(vbox_doclist), radio_doclist_occurrence, TRUE, TRUE, 3);
+
+	frame_doclist = gtk_frame_new(NULL);
+	gtk_frame_set_label_widget(GTK_FRAME(frame_doclist), check_doclist);
+	gtk_container_add(GTK_CONTAINER(frame_doclist), vbox_doclist);
+	gtk_box_pack_start(GTK_BOX(vbox), frame_doclist, FALSE, FALSE, 3);
+
 	check_openuri = gtk_check_button_new_with_label(
 		/* TODO fix the string */
 		_("Show a 'Open URI' menu item in the editor menu"));
@@ -465,6 +509,8 @@
 	gtk_box_pack_start(GTK_BOX(vbox), check_xmltagging, FALSE, FALSE, 3);
 
 	g_object_set_data(G_OBJECT(dialog), "check_doclist", check_doclist);
+	g_object_set_data(G_OBJECT(dialog), "radio_doclist_name", radio_doclist_name);
+	g_object_set_data(G_OBJECT(dialog), "radio_doclist_occurrence", radio_doclist_occurrence);
 	g_object_set_data(G_OBJECT(dialog), "check_openuri", check_openuri);
 	g_object_set_data(G_OBJECT(dialog), "check_tasks", check_tasks);
 	g_object_set_data(G_OBJECT(dialog), "entry_tasks_tokens", entry_tasks_tokens);
@@ -477,6 +523,7 @@
 	g_signal_connect(dialog, "response", G_CALLBACK(ao_configure_response_cb), NULL);
 
 	ao_configure_tasks_toggled_cb(GTK_TOGGLE_BUTTON(check_tasks), dialog);
+	ao_configure_doclist_toggled_cb(GTK_TOGGLE_BUTTON(check_doclist), dialog);
 
 	gtk_widget_show_all(vbox);
 

Modified: trunk/geany-plugins/addons/src/ao_doclist.c
===================================================================
--- trunk/geany-plugins/addons/src/ao_doclist.c	2011-04-10 16:18:37 UTC (rev 2019)
+++ trunk/geany-plugins/addons/src/ao_doclist.c	2011-04-10 17:05:45 UTC (rev 2020)
@@ -48,13 +48,15 @@
 struct _AoDocListPrivate
 {
 	gboolean enable_doclist;
+	DocListSortMode sort_mode;
 	GtkToolItem *toolbar_doclist_button;
 };
 
 enum
 {
 	PROP_0,
-	PROP_ENABLE_DOCLIST
+	PROP_ENABLE_DOCLIST,
+	PROP_SORT_MODE
 };
 enum
 {
@@ -87,6 +89,17 @@
 									"Whether to show a toolbar item to open a document list",
 									TRUE,
 									G_PARAM_WRITABLE));
+
+	g_object_class_install_property(g_object_class,
+									PROP_SORT_MODE,
+									g_param_spec_int(
+									"sort-mode",
+									"sort-mode",
+									"How to sort the documents in the list",
+									0,
+									G_MAXINT,
+									DOCLIST_SORT_BY_OCCURRENCE,
+									G_PARAM_WRITABLE));
 }
 
 
@@ -163,15 +176,22 @@
 	static GtkWidget *menu = NULL;
 	GtkWidget *menu_item;
 	GeanyDocument *current_doc = document_get_current();
+	GCompareFunc sort_func;
+	AoDocListPrivate *priv = AO_DOC_LIST_GET_PRIVATE(data);
 
 	if (menu != NULL)
 		gtk_widget_destroy(menu);
 
 	menu = gtk_menu_new();
 
-	ui_menu_add_document_items(GTK_MENU(menu), current_doc,
-		G_CALLBACK(ao_doclist_menu_item_activate_cb));
+	if (priv->sort_mode == DOCLIST_SORT_BY_NAME)
+		sort_func = document_sort_by_display_name;
+	else
+		sort_func = NULL;
 
+	ui_menu_add_document_items_sorted(GTK_MENU(menu), current_doc,
+		G_CALLBACK(ao_doclist_menu_item_activate_cb), sort_func);
+
 	menu_item = gtk_separator_menu_item_new();
 	gtk_widget_show(menu_item);
 	gtk_container_add(GTK_CONTAINER(menu), menu_item);
@@ -217,7 +237,7 @@
 			ui_add_document_sensitive(GTK_WIDGET(priv->toolbar_doclist_button));
 
 			g_signal_connect(priv->toolbar_doclist_button, "clicked",
-				G_CALLBACK(ao_toolbar_item_doclist_clicked_cb), NULL);
+				G_CALLBACK(ao_toolbar_item_doclist_clicked_cb), self);
 		}
 		gtk_widget_show(GTK_WIDGET(priv->toolbar_doclist_button));
 	}
@@ -235,6 +255,9 @@
 			priv->enable_doclist = g_value_get_boolean(value);
 			ao_toolbar_update(AO_DOC_LIST(object));
 			break;
+		case PROP_SORT_MODE:
+			priv->sort_mode = g_value_get_int(value);
+			break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
 			break;
@@ -250,9 +273,9 @@
 }
 
 
-AoDocList *ao_doc_list_new(gboolean enable)
+AoDocList *ao_doc_list_new(gboolean enable, DocListSortMode sort_mode)
 {
-	return g_object_new(AO_DOC_LIST_TYPE, "enable-doclist", enable, NULL);
+	return g_object_new(AO_DOC_LIST_TYPE, "enable-doclist", enable, "sort-mode", sort_mode, NULL);
 }
 
 

Modified: trunk/geany-plugins/addons/src/ao_doclist.h
===================================================================
--- trunk/geany-plugins/addons/src/ao_doclist.h	2011-04-10 16:18:37 UTC (rev 2019)
+++ trunk/geany-plugins/addons/src/ao_doclist.h	2011-04-10 17:05:45 UTC (rev 2020)
@@ -40,9 +40,16 @@
 typedef struct _AoDocList			AoDocList;
 typedef struct _AoDocListClass		AoDocListClass;
 
+typedef enum
+{
+	DOCLIST_SORT_BY_NAME = 1,
+	DOCLIST_SORT_BY_OCCURRENCE = 2
+} DocListSortMode;
 
+
+
 GType		ao_doc_list_get_type		(void);
-AoDocList*	ao_doc_list_new				(gboolean enable);
+AoDocList*	ao_doc_list_new				(gboolean enable, DocListSortMode sort_mode);
 
 G_END_DECLS
 


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