Updated Spanish translation
[anjuta-git-plugin.git] / plugins / subversion / subversion-callbacks.c
blob0527d592fdfcff08f5671e2aadf9c4597b9a2586
1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
2 /*
3 * subversion-callbacks.c (c) 2005 Johannes Schmid
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Library General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 #include "subversion-callbacks.h"
20 #include "svn-backend.h"
21 #include "glade/glade.h"
22 #include <libgnomevfs/gnome-vfs.h>
24 #include <libanjuta/interfaces/ianjuta-document-manager.h>
25 #include <libanjuta/interfaces/ianjuta-editor.h>
27 static void on_editor_destroy(Subversion* plugin, GObject* editor)
29 plugin->diff_editor = NULL;
32 static gchar* get_log_from_textview(GtkWidget* textview)
34 gchar* log;
35 GtkTextBuffer* textbuf;
36 GtkTextIter iterbegin, iterend;
37 gchar* escaped_log;
39 textbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
40 gtk_text_buffer_get_start_iter(textbuf, &iterbegin);
41 gtk_text_buffer_get_end_iter(textbuf, &iterend) ;
42 log = gtk_text_buffer_get_text(textbuf, &iterbegin, &iterend, FALSE);
43 /* #warning FIXME: Check for escape chars in log */
44 /* Fixed. -naba*/
45 escaped_log = anjuta_util_escape_quotes (log);
46 return escaped_log;
50 static gboolean check_filename(GtkDialog* dialog, const gchar* filename)
52 if (!strlen(filename))
54 GtkWidget* dlg = gtk_message_dialog_new(GTK_WINDOW(dialog),
55 GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO,
56 GTK_BUTTONS_CLOSE, _("Please enter a filename!"));
57 gtk_dialog_run(GTK_DIALOG(dlg));
58 gtk_widget_destroy(dlg);
59 return FALSE;
61 return TRUE;
64 static gboolean
65 is_busy (GtkDialog* dialog, Subversion* plugin)
67 if (svn_backend_busy(plugin->backend))
69 GtkWidget* dlg = gtk_message_dialog_new(GTK_WINDOW(dialog),
70 GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO,
71 GTK_BUTTONS_CLOSE,
72 _("Subversion command is running! Please wait until it is finished!"));
73 gtk_dialog_run(GTK_DIALOG(dlg));
74 gtk_widget_destroy(dlg);
75 return TRUE;
77 return FALSE;
80 /* static gboolean check_entry(GtkDialog* dialog, GtkWidget* entry,
81 const gchar* stringname)
83 if (!strlen(gtk_entry_get_text(GTK_ENTRY(entry))))
85 gchar* message = g_strdup_printf(_("Please fill field: %s"), stringname);
86 GtkWidget* dlg = gtk_message_dialog_new(GTK_WINDOW(dialog),
87 GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO,
88 GTK_BUTTONS_CLOSE, message);
89 gtk_dialog_run(GTK_DIALOG(dlg));
90 gtk_widget_destroy(dlg);
91 return FALSE;
93 return TRUE;
94 return FALSE;
95 }*/
97 SubversionData* subversion_data_new(Subversion* plugin, GladeXML* gxml)
99 SubversionData* data = g_new0(SubversionData, 1);
100 data->plugin = plugin;
101 data->gxml = gxml;
103 return data;
106 void subversion_data_free(SubversionData* data)
108 g_free(data);
111 void
112 on_subversion_add_response(GtkDialog* dialog, gint response, SubversionData* data)
115 switch (response)
117 case GTK_RESPONSE_OK:
119 GtkWidget* fileentry = glade_xml_get_widget(data->gxml, "subversion_filename");
120 GtkWidget* force = glade_xml_get_widget(data->gxml, "subversion_force");
121 GtkWidget* recurse = glade_xml_get_widget(data->gxml, "subversion_recurse");
123 const gchar* filename = gtk_entry_get_text(GTK_ENTRY(fileentry));
125 if (is_busy(dialog, data->plugin))
126 return;
128 if (!check_filename(dialog, filename))
129 break;
131 svn_backend_add(data->plugin->backend, filename,
132 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(force)),
133 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(recurse)));
135 gtk_widget_destroy(GTK_WIDGET(dialog));
136 subversion_data_free(data);
137 break;
139 default:
141 gtk_widget_destroy (GTK_WIDGET(dialog));
142 subversion_data_free(data);
147 void
148 on_subversion_remove_response(GtkDialog* dialog, gint response, SubversionData* data)
150 switch (response)
152 case GTK_RESPONSE_OK:
154 GtkWidget* fileentry = glade_xml_get_widget(data->gxml, "subversion_filename");
155 GtkWidget* force = glade_xml_get_widget(data->gxml, "subversion_force");
156 const gchar* filename = gtk_entry_get_text(GTK_ENTRY(fileentry));
158 if (is_busy(dialog, data->plugin))
159 return;
161 if (!check_filename(dialog, filename))
162 break;
165 svn_backend_remove(data->plugin->backend, filename,
166 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(force)));
167 subversion_data_free(data);
168 gtk_widget_destroy (GTK_WIDGET(dialog));
169 break;
171 default:
173 subversion_data_free(data);
174 gtk_widget_destroy (GTK_WIDGET(dialog));
179 void
180 on_subversion_update_response(GtkDialog* dialog, gint response, SubversionData* data)
182 switch (response)
184 case GTK_RESPONSE_OK:
186 const gchar* revision;
188 GtkWidget* norecurse;
189 GtkWidget* revisionentry;
190 GtkWidget* fileentry = glade_xml_get_widget(data->gxml, "subversion_filename");
191 const gchar* filename = g_strdup(gtk_entry_get_text(GTK_ENTRY(fileentry)));
193 if (is_busy(dialog, data->plugin))
194 return;
196 norecurse = glade_xml_get_widget(data->gxml, "subversion_norecurse");
197 revisionentry = glade_xml_get_widget(data->gxml, "subversion_revision");
198 revision = gtk_entry_get_text(GTK_ENTRY(revisionentry));
200 if (!check_filename(dialog, filename))
201 break;
203 svn_backend_update(data->plugin->backend, filename, revision,
204 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(norecurse)));
206 subversion_data_free(data);
207 gtk_widget_destroy(GTK_WIDGET(dialog));
208 break;
210 default:
212 gtk_widget_destroy(GTK_WIDGET(dialog));
213 subversion_data_free(data);
214 break;
219 void
220 on_subversion_commit_response(GtkDialog* dialog, gint response, SubversionData* data)
222 switch (response)
224 case GTK_RESPONSE_OK:
226 gchar* log;
227 GtkWidget* logtext;
228 GtkWidget* norecurse;
229 GtkWidget* fileentry = glade_xml_get_widget(data->gxml, "subversion_filename");
230 const gchar* filename = gtk_entry_get_text(GTK_ENTRY(fileentry));
232 if (is_busy(dialog, data->plugin))
233 return;
235 logtext = glade_xml_get_widget(data->gxml, "subversion_log");
236 log = get_log_from_textview(logtext);
237 if (!g_utf8_strlen(log, -1))
239 gint result;
240 GtkWidget* dlg = gtk_message_dialog_new(GTK_WINDOW(dialog),
241 GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO,
242 GTK_BUTTONS_YES_NO,
243 _("Are you sure that you do not want a log message?"));
244 result = gtk_dialog_run(GTK_DIALOG(dlg));
245 gtk_widget_destroy(dlg);
246 if (result == GTK_RESPONSE_NO)
247 break;
250 norecurse = glade_xml_get_widget(data->gxml, "subversion_norecurse");
252 if (!check_filename(dialog, filename))
253 break;
255 svn_backend_commit(data->plugin->backend, filename, log,
256 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(norecurse)));
257 subversion_data_free(data);
258 gtk_widget_destroy(GTK_WIDGET(dialog));
259 break;
261 default:
263 subversion_data_free(data);
264 gtk_widget_destroy(GTK_WIDGET(dialog));
265 break;
270 void
271 on_subversion_diff_response(GtkDialog* dialog, gint response, SubversionData* data)
273 switch (response)
275 case GTK_RESPONSE_OK:
277 IAnjutaDocumentManager *docman;
278 const gchar* revision;
280 GtkWidget* norecurse;
281 GtkWidget* revisionentry;
282 GtkWidget* fileentry = glade_xml_get_widget(data->gxml, "subversion_filename");
283 const gchar* filename = g_strdup(gtk_entry_get_text(GTK_ENTRY(fileentry)));
285 if (is_busy(dialog, data->plugin))
286 return;
288 norecurse = glade_xml_get_widget(data->gxml, "subversion_norecurse");
289 revisionentry = glade_xml_get_widget(data->gxml, "subversion_revision");
290 revision = gtk_entry_get_text(GTK_ENTRY(revisionentry));
292 if (!check_filename(dialog, filename))
293 break;
295 docman = anjuta_shell_get_interface (ANJUTA_PLUGIN (data->plugin)->shell,
296 IAnjutaDocumentManager, NULL);
297 data->plugin->diff_editor = ianjuta_document_manager_add_buffer(docman, _("svn.diff"), "", NULL);
298 g_object_weak_ref(G_OBJECT(data->plugin->diff_editor),
299 (GWeakNotify)(on_editor_destroy), data->plugin);
301 svn_backend_diff(data->plugin->backend, filename, revision,
302 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(norecurse)));
304 subversion_data_free(data);
305 gtk_widget_destroy(GTK_WIDGET(dialog));
306 break;
308 default:
310 gtk_widget_destroy(GTK_WIDGET(dialog));
311 subversion_data_free(data);
312 break;