Integrate removing files with the file manager
[anjuta-git-plugin.git] / plugins / subversion / subversion-commit-dialog.c
blobb32136aa7c9b5b108921cbfd6afca877dba3f997
1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
2 /*
3 * anjuta
4 * Copyright (C) James Liggett 2007 <jrliggett@cox.net>
6 * Portions based on the original Subversion plugin
7 * Copyright (C) Johannes Schmid 2005
8 *
9 * anjuta is free software.
11 * You may redistribute it and/or modify it under the terms of the
12 * GNU General Public License, as published by the Free Software
13 * Foundation; either version 2 of the License, or (at your option)
14 * any later version.
16 * anjuta is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19 * See the GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with anjuta. If not, write to:
23 * The Free Software Foundation, Inc.,
24 * 51 Franklin Street, Fifth Floor
25 * Boston, MA 02110-1301, USA.
28 #include "subversion-commit-dialog.h"
30 static void
31 on_commit_command_finished (AnjutaCommand *command, guint return_code,
32 Subversion *plugin)
34 AnjutaStatus *status;
36 status = anjuta_shell_get_status (ANJUTA_PLUGIN (plugin)->shell,
37 NULL);
39 anjuta_status (status, _("Subversion: Commit complete."), 5);
41 report_errors (command, return_code);
43 svn_commit_command_destroy (SVN_COMMIT_COMMAND (command));
46 static void
47 on_subversion_commit_response(GtkDialog* dialog, gint response,
48 SubversionData* data)
50 switch (response)
52 case GTK_RESPONSE_OK:
54 gchar* log;
55 GtkWidget* logtext;
56 GtkWidget* norecurse;
57 GtkWidget *commit_status_view;
58 GList *selected_paths;
59 SvnCommitCommand *commit_command;
60 guint pulse_timer_id;
62 logtext = glade_xml_get_widget(data->gxml, "subversion_log_view");
63 log = get_log_from_textview(logtext);
64 if (!g_utf8_strlen(log, -1))
66 gint result;
67 GtkWidget* dlg = gtk_message_dialog_new(GTK_WINDOW(dialog),
68 GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO,
69 GTK_BUTTONS_YES_NO,
70 _("Are you sure that you want to pass an empty log message?"));
71 result = gtk_dialog_run(GTK_DIALOG(dlg));
72 gtk_widget_destroy(dlg);
73 if (result == GTK_RESPONSE_NO)
74 break;
77 norecurse = glade_xml_get_widget(data->gxml, "subversion_norecurse");
79 commit_status_view = glade_xml_get_widget (data->gxml,
80 "commit_status_view");
82 selected_paths = anjuta_vcs_status_tree_view_get_selected (ANJUTA_VCS_STATUS_TREE_VIEW (commit_status_view));
84 commit_command = svn_commit_command_new (selected_paths,
85 (gchar *) log,
86 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(norecurse)));
88 svn_command_free_path_list (selected_paths);
90 create_message_view (data->plugin);
92 pulse_timer_id = status_bar_progress_pulse (data->plugin,
93 _("Subversion: "
94 "Committing changes "
95 "to the "
96 "repository..."));
98 g_signal_connect (G_OBJECT (commit_command), "command-finished",
99 G_CALLBACK (stop_status_bar_progress_pulse),
100 GUINT_TO_POINTER (pulse_timer_id));
102 g_signal_connect (G_OBJECT (commit_command), "command-finished",
103 G_CALLBACK (on_commit_command_finished),
104 data->plugin);
106 g_signal_connect (G_OBJECT (commit_command), "data-arrived",
107 G_CALLBACK (on_command_info_arrived),
108 data->plugin);
110 anjuta_command_start (ANJUTA_COMMAND (commit_command));
112 subversion_data_free(data);
113 gtk_widget_destroy (GTK_WIDGET(dialog));
114 break;
116 default:
118 subversion_data_free(data);
119 gtk_widget_destroy(GTK_WIDGET(dialog));
120 break;
125 static void
126 select_all_files (AnjutaCommand *command, guint return_code,
127 AnjutaVcsStatusTreeView *status_view)
129 anjuta_vcs_status_tree_view_select_all (status_view);
132 static void
133 subversion_commit_dialog (GtkAction* action, Subversion* plugin,
134 gchar *filename)
136 GladeXML* gxml;
137 GtkWidget* dialog;
138 GtkWidget *commit_select_all_button;
139 GtkWidget *commit_clear_button;
140 GtkWidget *commit_status_view;
141 GtkWidget *commit_status_progress_bar;
142 SvnStatusCommand *status_command;
143 SubversionData* data;
145 gxml = glade_xml_new(GLADE_FILE, "subversion_commit", NULL);
147 dialog = glade_xml_get_widget(gxml, "subversion_commit");
148 commit_select_all_button = glade_xml_get_widget (gxml,
149 "commit_select_all_button");
150 commit_clear_button = glade_xml_get_widget (gxml,
151 "commit_clear_button");
152 commit_status_view = glade_xml_get_widget (gxml, "commit_status_view");
153 commit_status_progress_bar = glade_xml_get_widget (gxml,
154 "commit_status_progress_bar");
156 status_command = svn_status_command_new (plugin->project_root_dir,
157 TRUE, TRUE);
159 g_signal_connect (G_OBJECT (commit_select_all_button), "clicked",
160 G_CALLBACK (select_all_status_items),
161 commit_status_view);
163 g_signal_connect (G_OBJECT (commit_clear_button), "clicked",
164 G_CALLBACK (clear_all_status_selections),
165 commit_status_view);
167 g_signal_connect (G_OBJECT (status_command), "command-finished",
168 G_CALLBACK (select_all_files),
169 commit_status_view);
171 pulse_progress_bar (GTK_PROGRESS_BAR (commit_status_progress_bar));
173 g_signal_connect (G_OBJECT (status_command), "command-finished",
174 G_CALLBACK (cancel_data_arrived_signal_disconnect),
175 commit_status_view);
177 g_signal_connect (G_OBJECT (status_command), "command-finished",
178 G_CALLBACK (hide_pulse_progress_bar),
179 commit_status_progress_bar);
181 g_signal_connect (G_OBJECT (status_command), "command-finished",
182 G_CALLBACK (on_status_command_finished),
183 NULL);
185 g_signal_connect (G_OBJECT (status_command), "data-arrived",
186 G_CALLBACK (on_status_command_data_arrived),
187 commit_status_view);
189 g_object_weak_ref (G_OBJECT (commit_status_view),
190 (GWeakNotify) disconnect_data_arrived_signals,
191 status_command);
193 anjuta_command_start (ANJUTA_COMMAND (status_command));
195 data = subversion_data_new(plugin, gxml);
196 g_signal_connect(G_OBJECT(dialog), "response",
197 G_CALLBACK(on_subversion_commit_response), data);
199 gtk_widget_show_all (dialog);
203 void
204 on_menu_subversion_commit (GtkAction* action, Subversion* plugin)
206 subversion_commit_dialog(action, plugin, plugin->current_editor_filename);
209 void
210 on_fm_subversion_commit (GtkAction* action, Subversion* plugin)
212 subversion_commit_dialog(action, plugin, plugin->fm_current_filename);