SF.net SVN: geany-plugins:[404] branches/GeanyVC_menu_redesign/geanyvc.c

frlan at users.sourceforge.net frlan at xxxxx
Sat Jan 24 01:31:49 UTC 2009


Revision: 404
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=404&view=rev
Author:   frlan
Date:     2009-01-24 01:31:48 +0000 (Sat, 24 Jan 2009)

Log Message:
-----------
Applied original patch created by Thomas Martitz

Modified Paths:
--------------
    branches/GeanyVC_menu_redesign/geanyvc.c

Modified: branches/GeanyVC_menu_redesign/geanyvc.c
===================================================================
--- branches/GeanyVC_menu_redesign/geanyvc.c	2009-01-24 01:29:37 UTC (rev 403)
+++ branches/GeanyVC_menu_redesign/geanyvc.c	2009-01-24 01:31:48 UTC (rev 404)
@@ -1889,158 +1889,177 @@
 	REGISTER_VC(HG, enable_hg);
 }
 
-/* Called by Geany to initialize the plugin */
-void
-plugin_init(G_GNUC_UNUSED GeanyData * data)
+static void
+current_file_menu(GtkWidget **parent_menu, GtkTooltips **tooltips)
 {
-	GtkWidget *menu_vc = NULL;
-	GtkWidget *menu_vc_menu = NULL;
-	GtkTooltips *tooltips = NULL;
+	GtkWidget *cur_file_menu = NULL;
+    /* Menu which will hold the items in the current file menu */
+	cur_file_menu = gtk_menu_new();
 
-	main_locale_init(LOCALEDIR, GETTEXT_PACKAGE);
+	*parent_menu = gtk_image_menu_item_new_with_mnemonic(_("Current _File"));
+	g_signal_connect((gpointer) *parent_menu, "activate", G_CALLBACK(update_menu_items), NULL);
 
-	config_file =
-		g_strconcat(geany->app->configdir, G_DIR_SEPARATOR_S, "plugins", G_DIR_SEPARATOR_S,
-			    "VC", G_DIR_SEPARATOR_S, "VC.conf", NULL);
-
-	load_config();
-	registrate();
-
-	tooltips = gtk_tooltips_new();
-
-	menu_vc = gtk_image_menu_item_new_with_mnemonic(_("_VC"));
-	gtk_container_add(GTK_CONTAINER(geany->main_widgets->tools_menu), menu_vc);
-
-	g_signal_connect((gpointer) menu_vc, "activate", G_CALLBACK(update_menu_items), NULL);
-
-	menu_vc_menu = gtk_menu_new();
-	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_vc), menu_vc_menu);
-
-	// Single file
-	menu_vc_diff_file = gtk_menu_item_new_with_mnemonic(_("Diff From Current File"));
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), menu_vc_diff_file);
-	gtk_tooltips_set_tip(tooltips, menu_vc_diff_file,
+    /* Diff of current file */
+	menu_vc_diff_file = gtk_menu_item_new_with_mnemonic(_("_Diff"));
+	gtk_container_add(GTK_CONTAINER(cur_file_menu), menu_vc_diff_file);
+	gtk_tooltips_set_tip(*tooltips, menu_vc_diff_file,
 			     _("Make a diff from the current active file"), NULL);
 
 	g_signal_connect((gpointer) menu_vc_diff_file, "activate",
 			 G_CALLBACK(vcdiff_file_activated), NULL);
 
-	// Directory
-	menu_vc_diff_dir = gtk_menu_item_new_with_mnemonic(_("Diff From Current Directory"));
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), menu_vc_diff_dir);
-	gtk_tooltips_set_tip(tooltips, menu_vc_diff_dir,
-			     _("Make a diff from the directory of the current active file"), NULL);
+	/* Revert current file */
+	menu_vc_revert_file = gtk_menu_item_new_with_mnemonic(_("_Revert"));
+	gtk_container_add(GTK_CONTAINER(cur_file_menu), menu_vc_revert_file);
+	gtk_tooltips_set_tip(*tooltips, menu_vc_revert_file,
+			     _("Restore pristine working copy file (undo local edits)."), NULL);
 
-	g_signal_connect((gpointer) menu_vc_diff_dir, "activate",
-			 G_CALLBACK(vcdiff_dir_activated), NULL);
+	g_signal_connect((gpointer) menu_vc_revert_file, "activate",
+			 G_CALLBACK(vcrevert_activated), NULL);
 
-	// Base directory
-	menu_vc_diff_basedir = gtk_menu_item_new_with_mnemonic(_("Diff From Base Directory"));
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), menu_vc_diff_basedir);
-	gtk_tooltips_set_tip(tooltips, menu_vc_diff_basedir,
-			     _("Make a diff from the top VC directory"), NULL);
 
-	g_signal_connect((gpointer) menu_vc_diff_basedir, "activate",
-			 G_CALLBACK(vcdiff_basedir_activated), NULL);
+	gtk_container_add(GTK_CONTAINER(cur_file_menu), gtk_separator_menu_item_new());
 
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), gtk_separator_menu_item_new());
 
-	// Blame for current file
-	menu_vc_blame = gtk_menu_item_new_with_mnemonic(_("Blame From Current File"));
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), menu_vc_blame);
-	gtk_tooltips_set_tip(tooltips, menu_vc_blame,
+	/* Blame for current file */
+	menu_vc_blame = gtk_menu_item_new_with_mnemonic(_("_Blame"));
+	gtk_container_add(GTK_CONTAINER(cur_file_menu), menu_vc_blame);
+	gtk_tooltips_set_tip(*tooltips, menu_vc_blame,
 			     _("Shows the changes made at one file per revision and author."),
 			     NULL);
 
 	g_signal_connect((gpointer) menu_vc_blame, "activate", G_CALLBACK(vcblame_activated), NULL);
 
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), gtk_separator_menu_item_new());
+	gtk_container_add(GTK_CONTAINER(cur_file_menu), gtk_separator_menu_item_new());
 
-	// Log
-	menu_vc_log_file = gtk_menu_item_new_with_mnemonic(_("Log Of Current File"));
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), menu_vc_log_file);
-	gtk_tooltips_set_tip(tooltips, menu_vc_log_file,
+	/* History/log of current file */
+	menu_vc_log_file = gtk_menu_item_new_with_mnemonic(_("_History"));
+	gtk_container_add(GTK_CONTAINER(cur_file_menu), menu_vc_log_file);
+	gtk_tooltips_set_tip(*tooltips, menu_vc_log_file,
 			     _("Shows the log of the current file"), NULL);
 
 	g_signal_connect((gpointer) menu_vc_log_file, "activate",
 			 G_CALLBACK(vclog_file_activated), NULL);
 
-	menu_vc_log_dir = gtk_menu_item_new_with_mnemonic(_("Log Of Current Directory"));
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), menu_vc_log_dir);
-	gtk_tooltips_set_tip(tooltips, menu_vc_log_dir,
+
+	gtk_container_add(GTK_CONTAINER(cur_file_menu), gtk_separator_menu_item_new());
+
+	/* add current file */
+	menu_vc_add_file = gtk_menu_item_new_with_mnemonic(_("_Add to Version Control"));
+	gtk_container_add(GTK_CONTAINER(cur_file_menu), menu_vc_add_file);
+	gtk_tooltips_set_tip(*tooltips, menu_vc_add_file, _("Add file to repository."), NULL);
+
+	g_signal_connect((gpointer) menu_vc_add_file, "activate",
+			 G_CALLBACK(vcadd_activated), NULL);
+
+	/* revert current file */
+	menu_vc_remove_file = gtk_menu_item_new_with_mnemonic(_("_Remove from Version Control"));
+	gtk_container_add(GTK_CONTAINER(cur_file_menu), menu_vc_remove_file);
+	gtk_tooltips_set_tip(*tooltips, menu_vc_remove_file,
+			     _("Remove file from repository."), NULL);
+
+	g_signal_connect((gpointer) menu_vc_remove_file, "activate",
+			 G_CALLBACK(vcremove_activated), NULL);
+
+    /* connect to parent menu */
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(*parent_menu), cur_file_menu);
+}
+
+static void
+current_dir_menu(GtkWidget **parent_menu, GtkTooltips **tooltips)
+{
+    GtkWidget *cur_dir_menu = NULL;
+    /* Menu which will hold the items in the current file menu */
+	cur_dir_menu = gtk_menu_new();
+
+	*parent_menu = gtk_image_menu_item_new_with_mnemonic(_("Current _Directory"));
+	g_signal_connect((gpointer) *parent_menu, "activate", G_CALLBACK(update_menu_items), NULL);
+	/* Diff of the current dir */
+	menu_vc_diff_dir = gtk_menu_item_new_with_mnemonic(_("_Diff"));
+	gtk_container_add(GTK_CONTAINER(cur_dir_menu), menu_vc_diff_dir);
+	gtk_tooltips_set_tip(*tooltips, menu_vc_diff_dir,
+			     _("Make a diff from the directory of the current active file"), NULL);
+
+	g_signal_connect((gpointer) menu_vc_diff_dir, "activate",
+			 G_CALLBACK(vcdiff_dir_activated), NULL);
+
+	gtk_container_add(GTK_CONTAINER(cur_dir_menu), gtk_separator_menu_item_new());
+    /* History/log of the current dir */
+	menu_vc_log_dir = gtk_menu_item_new_with_mnemonic(_("_History"));
+	gtk_container_add(GTK_CONTAINER(cur_dir_menu), menu_vc_log_dir);
+	gtk_tooltips_set_tip(*tooltips, menu_vc_log_dir,
 			     _("Shows the log of the current directory"), NULL);
 
+
+    /* connect to parent menu */
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(*parent_menu), cur_dir_menu);
+}
+
+static void
+basedir_menu(GtkWidget **parent_menu, GtkTooltips **tooltips)
+{
+    GtkWidget *basedir_menu = NULL;
+    /* Menu which will hold the items in the current file menu */
+	basedir_menu = gtk_menu_new();
+
+	*parent_menu = gtk_image_menu_item_new_with_mnemonic(_("Current _Basedirectory"));
+	g_signal_connect((gpointer) *parent_menu, "activate", G_CALLBACK(update_menu_items), NULL);
+
+	/* Complete diff of base directory */
+	menu_vc_diff_basedir = gtk_menu_item_new_with_mnemonic(_("_Diff"));
+	gtk_container_add(GTK_CONTAINER(basedir_menu), menu_vc_diff_basedir);
+	gtk_tooltips_set_tip(*tooltips, menu_vc_diff_basedir,
+			     _("Make a diff from the top VC directory"), NULL);
+
+	g_signal_connect((gpointer) menu_vc_diff_basedir, "activate",
+			 G_CALLBACK(vcdiff_basedir_activated), NULL);
+
+	gtk_container_add(GTK_CONTAINER(basedir_menu), gtk_separator_menu_item_new());
 	g_signal_connect((gpointer) menu_vc_log_dir, "activate",
 			 G_CALLBACK(vclog_dir_activated), NULL);
 
-	menu_vc_log_basedir = gtk_menu_item_new_with_mnemonic(_("Log Of Base Directory"));
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), menu_vc_log_basedir);
-	gtk_tooltips_set_tip(tooltips, menu_vc_log_basedir,
+    /* Complete History/Log of base directory */
+	menu_vc_log_basedir = gtk_menu_item_new_with_mnemonic(_("_History"));
+	gtk_container_add(GTK_CONTAINER(basedir_menu), menu_vc_log_basedir);
+	gtk_tooltips_set_tip(*tooltips, menu_vc_log_basedir,
 			     _("Shows the log of the top VC directory"), NULL);
 
 	g_signal_connect((gpointer) menu_vc_log_basedir, "activate",
 			 G_CALLBACK(vclog_basedir_activated), NULL);
 
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), gtk_separator_menu_item_new());
-
-	// Status
+	gtk_container_add(GTK_CONTAINER(basedir_menu), gtk_separator_menu_item_new());
+    /* Status of basedir */
 	menu_vc_status = gtk_menu_item_new_with_mnemonic(_("_Status"));
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), menu_vc_status);
-	gtk_tooltips_set_tip(tooltips, menu_vc_status, _("Show status."), NULL);
+	gtk_container_add(GTK_CONTAINER(basedir_menu), menu_vc_status);
+	gtk_tooltips_set_tip(*tooltips, menu_vc_status, _("Show status."), NULL);
 
 	g_signal_connect((gpointer) menu_vc_status, "activate",
 			 G_CALLBACK(vcstatus_activated), NULL);
 
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), gtk_separator_menu_item_new());
 
-	// Revert file
-	menu_vc_revert_file = gtk_menu_item_new_with_mnemonic(_("_Revert File"));
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), menu_vc_revert_file);
-	gtk_tooltips_set_tip(tooltips, menu_vc_revert_file,
-			     _("Restore pristine working copy file (undo local edits)."), NULL);
-
-	g_signal_connect((gpointer) menu_vc_revert_file, "activate",
-			 G_CALLBACK(vcrevert_activated), NULL);
-
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), gtk_separator_menu_item_new());
-
-	// Add file
-	menu_vc_add_file = gtk_menu_item_new_with_mnemonic(_("_Add File"));
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), menu_vc_add_file);
-	gtk_tooltips_set_tip(tooltips, menu_vc_add_file, _("Add file to repository."), NULL);
-
-	g_signal_connect((gpointer) menu_vc_add_file, "activate",
-			 G_CALLBACK(vcadd_activated), NULL);
-
-	// Remove file
-	menu_vc_remove_file = gtk_menu_item_new_with_mnemonic(_("Remove File"));
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), menu_vc_remove_file);
-	gtk_tooltips_set_tip(tooltips, menu_vc_remove_file,
-			     _("Remove file from repository."), NULL);
-
-	g_signal_connect((gpointer) menu_vc_remove_file, "activate",
-			 G_CALLBACK(vcremove_activated), NULL);
-
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), gtk_separator_menu_item_new());
-
-	// Update
+	/* complete update */
 	menu_vc_update = gtk_menu_item_new_with_mnemonic(_("Update"));
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), menu_vc_update);
-	gtk_tooltips_set_tip(tooltips, menu_vc_update, _("Update from remote repositary."), NULL);
+	gtk_container_add(GTK_CONTAINER(basedir_menu), menu_vc_update);
+	gtk_tooltips_set_tip(*tooltips, menu_vc_update, _("Update from remote repositary."), NULL);
 
 	g_signal_connect((gpointer) menu_vc_update, "activate",
 			 G_CALLBACK(vcupdate_activated), NULL);
 
-	// Commit
+
+	/* Commit all changes */
 	menu_vc_commit = gtk_menu_item_new_with_mnemonic(_("_Commit"));
-	gtk_container_add(GTK_CONTAINER(menu_vc_menu), menu_vc_commit);
-	gtk_tooltips_set_tip(tooltips, menu_vc_commit, _("Commit changes."), NULL);
+	gtk_container_add(GTK_CONTAINER(basedir_menu), menu_vc_commit);
+	gtk_tooltips_set_tip(*tooltips, menu_vc_commit, _("Commit changes."), NULL);
 
 	g_signal_connect((gpointer) menu_vc_commit, "activate",
 			 G_CALLBACK(vccommit_activated), NULL);
+    /* connect to parent menu */
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(*parent_menu), basedir_menu);
+}
 
-	gtk_widget_show_all(menu_vc);
-
+static void
+init_keybindings(void)
+{
 	/* init keybindins */
 	keybindings_set_item(plugin_key_group, VC_DIFF_FILE, kbdiff_file,
 	0, 0, "vc_show_diff_of_file", _("Show diff of file"), menu_vc_diff_file);
@@ -2056,10 +2075,58 @@
 	0, 0, "vc_revert", _("Revert changes"), menu_vc_revert_file);
 	keybindings_set_item(plugin_key_group, VC_UPDATE, kbupdate,
 	0, 0, "vc_update", _("Update file"), menu_vc_update);
+}
 
+/* Called by Geany to initialize the plugin */
+void
+plugin_init(G_GNUC_UNUSED GeanyData * data)
+{
+	GtkWidget *menu_vc = NULL;
+	GtkWidget *menu_vc_menu = NULL;
+	GtkWidget *menu_vc_file = NULL;
+	GtkWidget *menu_vc_dir = NULL;
+	GtkWidget *menu_vc_basedir = NULL;
+	GtkTooltips *tooltips = NULL;
+
+	main_locale_init(LOCALEDIR, GETTEXT_PACKAGE);
+
+	config_file =
+		g_strconcat(geany->app->configdir, G_DIR_SEPARATOR_S, "plugins", G_DIR_SEPARATOR_S,
+			    "VC", G_DIR_SEPARATOR_S, "VC.conf", NULL);
+
+	load_config();
+	registrate();
+
+	tooltips = gtk_tooltips_new();
+
+	menu_vc = gtk_image_menu_item_new_with_mnemonic(_("_VC"));
+	gtk_container_add(GTK_CONTAINER(geany->main_widgets->tools_menu), menu_vc);
+
+	g_signal_connect((gpointer) menu_vc, "activate", G_CALLBACK(update_menu_items), NULL);
+
+	menu_vc_menu = gtk_menu_new();
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_vc), menu_vc_menu);
+
+    /* Create the current file Submenu */
+	current_file_menu(&menu_vc_file, &tooltips);
+	gtk_container_add(GTK_CONTAINER(menu_vc_menu), menu_vc_file);
+    /* Create the current directory Submenu */
+    current_dir_menu(&menu_vc_dir, &tooltips);
+	gtk_container_add(GTK_CONTAINER(menu_vc_menu), menu_vc_dir);
+    /* Create the current base directory Submenu */
+    basedir_menu(&menu_vc_basedir, &tooltips);
+	gtk_container_add(GTK_CONTAINER(menu_vc_menu), menu_vc_basedir);
+
+	gtk_widget_show_all(menu_vc);
+	gtk_widget_show_all(menu_vc_file);
+	gtk_widget_show_all(menu_vc_dir);
+	gtk_widget_show_all(menu_vc_basedir);
+
+    /* initialize keybindings */
+    init_keybindings();
+
 	plugin_fields->menu_item = menu_vc;
 	plugin_fields->flags = PLUGIN_IS_DOCUMENT_SENSITIVE;
-
 }
 
 


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