1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
4 * Copyright (C) James Liggett 2007 <jrliggett@cox.net>
6 * anjuta is free software.
8 * You may redistribute it and/or modify it under the terms of the
9 * GNU General Public License, as published by the Free Software
10 * Foundation; either version 2 of the License, or (at your option)
13 * anjuta is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16 * See the GNU General Public License for more details.
18 * You should have received a switch of the GNU General Public License
19 * along with anjuta. If not, write to:
20 * The Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor
22 * Boston, MA 02110-1301, USA.
25 #include "subversion-switch-dialog.h"
27 #define BROWSE_BUTTON_SWITCH_DIALOG "browse_button_switch_dialog"
30 on_switch_other_revision_radio_toggled (GtkToggleButton
*toggle_button
,
33 GtkWidget
*switch_revision_entry
;
34 GtkWidget
*subversion_switch
;
37 switch_revision_entry
= GTK_WIDGET (gtk_builder_get_object (data
->bxml
,
38 "switch_revision_entry"));
39 subversion_switch
= GTK_WIDGET (gtk_builder_get_object (data
->bxml
,
40 "subversion_switch"));
41 active
= gtk_toggle_button_get_active (toggle_button
);
42 gtk_widget_set_sensitive (switch_revision_entry
, active
);
46 gtk_window_set_focus (GTK_WINDOW (subversion_switch
),
47 switch_revision_entry
);
52 on_switch_command_finished (AnjutaCommand
*command
, guint return_code
,
57 status
= anjuta_shell_get_status (ANJUTA_PLUGIN (plugin
)->shell
,
60 anjuta_status (status
, _("Subversion: Switch complete."), 5);
62 report_errors (command
, return_code
);
64 svn_switch_command_destroy (SVN_SWITCH_COMMAND (command
));
68 on_subversion_switch_response (GtkDialog
*dialog
, gint response
,
71 GtkWidget
*switch_working_copy_entry
;
72 GtkWidget
*switch_url_entry
;
73 GtkWidget
*switch_head_revision_radio
;
74 GtkWidget
*switch_other_revision_radio
;
75 GtkWidget
*switch_revision_entry
;
76 GtkWidget
*switch_no_recursive_check
;
77 gchar
*working_copy_path
;
81 SvnSwitchCommand
*switch_command
;
83 if (response
== GTK_RESPONSE_OK
)
85 switch_working_copy_entry
= GTK_WIDGET (gtk_builder_get_object (data
->bxml
,
86 "switch_working_copy_entry"));
87 switch_url_entry
= GTK_WIDGET (gtk_builder_get_object (data
->bxml
,
89 switch_head_revision_radio
= GTK_WIDGET (gtk_builder_get_object (data
->bxml
,
90 "switch_head_revision_radio"));
91 switch_other_revision_radio
= GTK_WIDGET (gtk_builder_get_object (data
->bxml
,
92 "switch_other_revision_radio"));
93 switch_no_recursive_check
= GTK_WIDGET (gtk_builder_get_object (data
->bxml
,
94 "switch_no_recursive_check"));
96 working_copy_path
= gtk_editable_get_chars (GTK_EDITABLE (switch_working_copy_entry
),
98 branch_url
= gtk_editable_get_chars (GTK_EDITABLE (switch_url_entry
),
101 if (!check_input (GTK_WIDGET (dialog
), switch_working_copy_entry
,
102 _("Please enter a working copy path.")))
107 if (!check_input (GTK_WIDGET (dialog
), switch_url_entry
,
108 _("Please enter a branch/tag URL.")))
113 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (switch_head_revision_radio
)))
114 revision
= SVN_SWITCH_REVISION_HEAD
;
116 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (switch_other_revision_radio
)))
118 switch_revision_entry
= GTK_WIDGET (gtk_builder_get_object (data
->bxml
,
119 "switch_revision_entry"));
121 if (!check_input (GTK_WIDGET (dialog
), switch_revision_entry
,
122 _("Please enter a revision.")))
127 revision_text
= gtk_editable_get_chars (GTK_EDITABLE (switch_revision_entry
),
129 revision
= atol (revision_text
);
131 g_free (revision_text
);
134 create_message_view (data
->plugin
);
136 switch_command
= svn_switch_command_new (working_copy_path
, branch_url
,
138 !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (switch_no_recursive_check
)));
140 g_signal_connect (G_OBJECT (switch_command
), "command-finished",
141 G_CALLBACK (on_switch_command_finished
),
144 g_signal_connect (G_OBJECT (switch_command
), "data-arrived",
145 G_CALLBACK (on_command_info_arrived
),
148 anjuta_command_start (ANJUTA_COMMAND (switch_command
));
151 gtk_widget_destroy (GTK_WIDGET (dialog
));
152 subversion_data_free (data
);
156 subversion_switch_dialog (GtkAction
*action
, Subversion
*plugin
)
158 GtkBuilder
*bxml
= gtk_builder_new ();
159 GtkWidget
*subversion_switch
;
160 GtkWidget
*switch_working_copy_entry
;
161 GtkWidget
*switch_other_revision_radio
;
163 SubversionData
*data
;
164 GError
* error
= NULL
;
166 if (!gtk_builder_add_from_file (bxml
, GLADE_FILE
, &error
))
168 g_warning ("Couldn't load builder file: %s", error
->message
);
169 g_error_free (error
);
172 subversion_switch
= GTK_WIDGET (gtk_builder_get_object (bxml
, "subversion_switch"));
173 switch_working_copy_entry
= GTK_WIDGET (gtk_builder_get_object (bxml
,
174 "switch_working_copy_entry"));
175 switch_other_revision_radio
= GTK_WIDGET (gtk_builder_get_object (bxml
,
176 "switch_other_revision_radio"));
178 data
= subversion_data_new (plugin
, bxml
);
180 button
= GTK_WIDGET (gtk_builder_get_object (bxml
, BROWSE_BUTTON_SWITCH_DIALOG
));
181 g_signal_connect(G_OBJECT(button
), "clicked",
182 G_CALLBACK(on_subversion_browse_button_clicked
), switch_working_copy_entry
);
184 g_signal_connect (G_OBJECT (subversion_switch
), "response",
185 G_CALLBACK (on_subversion_switch_response
),
188 g_signal_connect (G_OBJECT (switch_other_revision_radio
), "toggled",
189 G_CALLBACK (on_switch_other_revision_radio_toggled
),
192 if (plugin
->project_root_dir
)
194 gtk_entry_set_text (GTK_ENTRY (switch_working_copy_entry
),
195 plugin
->project_root_dir
);
198 gtk_widget_show (subversion_switch
);
202 on_menu_subversion_switch (GtkAction
*action
, Subversion
*plugin
)
204 subversion_switch_dialog (action
, plugin
);