1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
4 * Copyright (C) James Liggett 2007 <jrliggett@cox.net>
6 * Portions based on the original Subversion plugin
7 * Copyright (C) Johannes Schmid 2005
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)
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-diff-dialog.h"
31 on_subversion_diff_response(GtkDialog
* dialog
, gint response
, SubversionData
* data
)
33 GtkWidget
*diff_path_entry
;
34 GtkWidget
*diff_no_recursive_check
;
35 GtkWidget
*diff_revision_entry
;
36 GtkWidget
*diff_save_open_files_check
;
38 const gchar
*revision_text
;
40 IAnjutaDocumentManager
*docman
;
43 IAnjutaEditor
*editor
;
44 SvnDiffCommand
*diff_command
;
51 diff_path_entry
= glade_xml_get_widget (data
->gxml
,
53 diff_no_recursive_check
= glade_xml_get_widget (data
->gxml
,
54 "diff_no_recursive_check");
55 diff_revision_entry
= glade_xml_get_widget (data
->gxml
,
56 "diff_revision_entry");
57 diff_save_open_files_check
= glade_xml_get_widget (data
->gxml
,
58 "diff_save_open_files_check");
59 path
= g_strdup (gtk_entry_get_text (GTK_ENTRY (diff_path_entry
)));
60 revision_text
= gtk_entry_get_text (GTK_ENTRY (diff_revision_entry
));
61 revision
= atol (revision_text
);
63 if (!check_input (GTK_WIDGET (dialog
), diff_path_entry
,
64 _("Please enter a path.")))
69 docman
= anjuta_shell_get_interface (ANJUTA_PLUGIN (data
->plugin
)->shell
,
70 IAnjutaDocumentManager
, NULL
);
71 filename
= get_filename_from_full_path ((gchar
*) path
);
72 editor_name
= g_strdup_printf ("[Head/Working Copy] %s.diff",
74 editor
= ianjuta_document_manager_add_buffer(docman
, editor_name
,
80 diff_command
= svn_diff_command_new ((gchar
*) path
,
81 SVN_DIFF_REVISION_NONE
,
82 SVN_DIFF_REVISION_NONE
,
83 !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (diff_no_recursive_check
)));
85 pulse_timer_id
= status_bar_progress_pulse (data
->plugin
,
90 g_signal_connect (G_OBJECT (diff_command
), "command-finished",
91 G_CALLBACK (stop_status_bar_progress_pulse
),
92 GUINT_TO_POINTER (pulse_timer_id
));
95 g_signal_connect (G_OBJECT (diff_command
), "command-finished",
96 G_CALLBACK (on_diff_command_finished
),
99 g_signal_connect (G_OBJECT (diff_command
), "data-arrived",
100 G_CALLBACK (send_diff_command_output_to_editor
),
103 g_object_weak_ref (G_OBJECT (editor
),
104 (GWeakNotify
) disconnect_data_arrived_signals
,
107 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (diff_save_open_files_check
)))
108 ianjuta_file_savable_save (IANJUTA_FILE_SAVABLE (docman
), NULL
);
110 anjuta_command_start (ANJUTA_COMMAND (diff_command
));
112 subversion_data_free(data
);
113 gtk_widget_destroy(GTK_WIDGET(dialog
));
118 gtk_widget_destroy(GTK_WIDGET(dialog
));
119 subversion_data_free(data
);
126 subversion_diff_dialog (GtkAction
*action
, Subversion
*plugin
, gchar
*filename
)
129 GtkWidget
*subversion_diff
;
130 GtkWidget
*diff_path_entry
;
131 GtkWidget
*diff_whole_project_check
;
132 SubversionData
*data
;
134 gxml
= glade_xml_new (GLADE_FILE
, "subversion_diff", NULL
);
135 subversion_diff
= glade_xml_get_widget(gxml
, "subversion_diff");
136 diff_path_entry
= glade_xml_get_widget(gxml
, "diff_path_entry");
137 diff_whole_project_check
= glade_xml_get_widget(gxml
,
138 "diff_whole_project_check");
139 data
= subversion_data_new (plugin
, gxml
);
141 g_object_set_data (G_OBJECT (diff_whole_project_check
), "fileentry",
145 gtk_entry_set_text (GTK_ENTRY (diff_path_entry
), filename
);
148 g_signal_connect(G_OBJECT (diff_whole_project_check
), "toggled",
149 G_CALLBACK (on_whole_project_toggled
),
151 init_whole_project (plugin
, diff_whole_project_check
, !filename
);
154 g_signal_connect (G_OBJECT (subversion_diff
), "response",
155 G_CALLBACK (on_subversion_diff_response
),
158 gtk_widget_show (subversion_diff
);
162 on_menu_subversion_diff (GtkAction
* action
, Subversion
* plugin
)
164 subversion_diff_dialog (action
, plugin
, NULL
);
168 on_fm_subversion_diff (GtkAction
*action
, Subversion
*plugin
)
170 subversion_diff_dialog (action
, plugin
, plugin
->fm_current_filename
);