Implement bisecting
[anjuta-git-plugin.git] / plugins / git / git-reset-dialog.c
blob43142561dae04de26faa133f1b4bc94063db81df
1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
2 /*
3 * anjuta
4 * Copyright (C) James Liggett 2008 <jrliggett@cox.net>
5 *
6 * anjuta is free software.
7 *
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)
11 * any later version.
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 copy 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 "git-reset-dialog.h"
27 static void
28 on_reset_dialog_response (GtkDialog *dialog, gint response_id,
29 GitUIData *data)
31 GtkWidget *reset_revision_radio;
32 GtkWidget *reset_revision_entry;
33 GtkWidget *reset_soft_radio;
34 GtkWidget *reset_hard_radio;
35 gchar *revision;
36 GitResetTreeMode mode;
37 GitResetTreeCommand *reset_command;
39 if (response_id == GTK_RESPONSE_OK)
41 reset_revision_radio = glade_xml_get_widget (data->gxml,
42 "reset_revision_radio");
43 reset_revision_entry = glade_xml_get_widget (data->gxml,
44 "reset_revision_entry");
45 reset_soft_radio = glade_xml_get_widget (data->gxml,
46 "reset_soft_radio");
47 reset_hard_radio = glade_xml_get_widget (data->gxml,
48 "reset_hard_radio");
49 revision = NULL;
50 mode = GIT_RESET_TREE_MODE_MIXED;
52 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (reset_revision_radio)))
54 revision = gtk_editable_get_chars (GTK_EDITABLE (reset_revision_entry),
55 0, -1);
56 if (!check_input (GTK_WIDGET (dialog), reset_revision_entry,
57 revision, _("Please enter a revision.")))
59 g_free (revision);
60 return;
64 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (reset_soft_radio)))
65 mode = GIT_RESET_TREE_MODE_SOFT;
66 else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (reset_hard_radio)))
67 mode = GIT_RESET_TREE_MODE_HARD;
69 if (revision)
71 reset_command = git_reset_tree_command_new (data->plugin->project_root_directory,
72 revision, mode);
74 else
76 reset_command = git_reset_tree_command_new (data->plugin->project_root_directory,
77 GIT_RESET_TREE_PREVIOUS,
78 mode);
83 create_message_view (data->plugin);
85 g_signal_connect (G_OBJECT (reset_command), "command-finished",
86 G_CALLBACK (on_command_finished),
87 data->plugin);
89 g_signal_connect (G_OBJECT (reset_command), "data-arrived",
90 G_CALLBACK (on_command_info_arrived),
91 data->plugin);
93 anjuta_command_start (ANJUTA_COMMAND (reset_command));
96 gtk_widget_destroy (GTK_WIDGET (dialog));
97 git_ui_data_free (data);
100 static void
101 on_reset_revision_radio_toggled (GtkToggleButton *toggle_button,
102 GitUIData *data)
104 GtkWidget *reset_dialog;
105 GtkWidget *reset_revision_entry;
106 gboolean active;
108 reset_dialog = glade_xml_get_widget (data->gxml,
109 "reset_dialog");
110 reset_revision_entry = glade_xml_get_widget (data->gxml,
111 "reset_revision_entry");
113 active = gtk_toggle_button_get_active (toggle_button);
114 gtk_widget_set_sensitive (reset_revision_entry, active);
116 if (active)
118 gtk_window_set_focus (GTK_WINDOW (reset_dialog),
119 reset_revision_entry);
124 static void
125 reset_dialog (Git *plugin, const gchar *revision)
127 GladeXML *gxml;
128 GtkWidget *dialog;
129 GtkWidget *reset_revision_radio;
130 GtkWidget *reset_revision_entry;
131 GitUIData *data;
133 gxml = glade_xml_new (GLADE_FILE, "reset_dialog", NULL);
134 dialog = glade_xml_get_widget (gxml, "reset_dialog");
135 reset_revision_radio = glade_xml_get_widget (gxml,
136 "reset_revision_radio");
137 reset_revision_entry = glade_xml_get_widget (gxml,
138 "reset_revision_entry");
139 data = git_ui_data_new (plugin, gxml);
141 g_signal_connect (G_OBJECT (dialog), "response",
142 G_CALLBACK (on_reset_dialog_response),
143 data);
145 g_signal_connect (G_OBJECT (reset_revision_radio), "toggled",
146 G_CALLBACK (on_reset_revision_radio_toggled),
147 data);
149 if (revision)
151 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (reset_revision_radio), TRUE);
152 gtk_entry_set_text (GTK_ENTRY (reset_revision_entry), revision);
155 gtk_widget_show_all (dialog);
158 void
159 on_menu_git_reset (GtkAction *action, Git *plugin)
161 reset_dialog (plugin, NULL);
164 void
165 on_log_menu_git_reset (GtkAction *action, Git *plugin)
167 GitRevision *revision;
168 gchar *sha;
170 revision = git_log_get_selected_revision (plugin);
172 if (revision)
174 sha = git_revision_get_sha (revision);
176 reset_dialog (plugin, sha);
177 g_free (sha);