Put all of the UI utility functions into the "git" namespace.
[anjuta-git-plugin.git] / plugins / git / git-merge-dialog.c
blobc1fb142b985caed835750dcdcafeed0ead4422f4
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-merge-dialog.h"
27 static void
28 on_merge_command_finished (AnjutaCommand *command, guint return_code,
29 Git *plugin)
31 AnjutaStatus *status;
33 status = anjuta_shell_get_status (ANJUTA_PLUGIN (plugin)->shell,
34 NULL);
36 anjuta_status (status, _("Git: Merge complete."), 5);
38 git_report_errors (command, return_code);
40 g_object_unref (command);
44 static void
45 on_merge_dialog_response (GtkDialog *dialog, gint response_id,
46 GitBranchComboData *data)
48 GtkWidget *merge_branch_combo;
49 GtkWidget *no_commit_check;
50 GtkWidget *squash_check;
51 GtkWidget *use_custom_log_check;
52 GtkWidget *merge_log_view;
53 gchar *log;
54 GtkWidget *log_prompt_dialog;
55 gint prompt_response;
56 GtkTreeIter iter;
57 gchar *branch;
58 GitMergeCommand *merge_command;
60 if (response_id == GTK_RESPONSE_OK)
62 merge_branch_combo = glade_xml_get_widget (data->gxml, "merge_branch_combo");
63 no_commit_check = glade_xml_get_widget (data->gxml, "no_commit_check");
64 squash_check = glade_xml_get_widget (data->gxml, "squash_check");
65 use_custom_log_check = glade_xml_get_widget (data->gxml,
66 "use_custom_log_check");
67 merge_log_view = glade_xml_get_widget (data->gxml, "merge_log_view");
68 log = NULL;
70 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (use_custom_log_check)))
72 log = git_get_log_from_textview (merge_log_view);
74 if (!g_utf8_strlen (log, -1))
76 log_prompt_dialog = gtk_message_dialog_new (GTK_WINDOW(dialog),
77 GTK_DIALOG_DESTROY_WITH_PARENT,
78 GTK_MESSAGE_INFO,
79 GTK_BUTTONS_YES_NO,
80 _("Are you sure that you want to pass an empty log message?"));
82 prompt_response = gtk_dialog_run(GTK_DIALOG (log_prompt_dialog));
83 gtk_widget_destroy (log_prompt_dialog);
85 if (prompt_response == GTK_RESPONSE_NO)
86 return;
89 g_free (log);
92 gtk_combo_box_get_active_iter (GTK_COMBO_BOX (merge_branch_combo), &iter);
93 branch = git_branch_combo_model_get_branch (data->model, &iter);
95 merge_command = git_merge_command_new (data->plugin->project_root_directory,
96 branch, log,
97 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (no_commit_check)),
98 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (squash_check)));
100 g_free (branch);
102 git_create_message_view (data->plugin);
104 g_signal_connect (G_OBJECT (merge_command), "command-finished",
105 G_CALLBACK (on_merge_command_finished),
106 data->plugin);
108 g_signal_connect (G_OBJECT (merge_command), "data-arrived",
109 G_CALLBACK (on_git_command_info_arrived),
110 data->plugin);
112 anjuta_command_start (ANJUTA_COMMAND (merge_command));
115 gtk_widget_destroy (GTK_WIDGET (dialog));
116 git_branch_combo_data_free (data);
119 static void
120 on_use_custom_log_check_toggled (GtkToggleButton *toggle_button, GtkWidget *merge_log_view)
122 gtk_widget_set_sensitive (merge_log_view,
123 gtk_toggle_button_get_active (toggle_button));
126 static void
127 merge_dialog (Git *plugin)
129 GladeXML *gxml;
130 GtkWidget *dialog;
131 GtkWidget *merge_branch_combo;
132 GtkWidget *use_custom_log_check;
133 GtkWidget *merge_log_view;
134 GtkListStore *branch_list_store;
135 GitBranchComboData *data;
136 GitBranchListCommand *list_command;
138 gxml = glade_xml_new (GLADE_FILE, "merge_dialog", NULL);
140 dialog = glade_xml_get_widget (gxml, "merge_dialog");
141 merge_branch_combo = glade_xml_get_widget (gxml, "merge_branch_combo");
142 use_custom_log_check = glade_xml_get_widget (gxml,
143 "use_custom_log_check");
144 merge_log_view = glade_xml_get_widget (gxml, "merge_log_view");
145 branch_list_store = git_branch_combo_model_new ();
147 gtk_combo_box_set_model (GTK_COMBO_BOX (merge_branch_combo),
148 GTK_TREE_MODEL (branch_list_store));
149 git_branch_combo_model_setup_widget (merge_branch_combo);
151 data = git_branch_combo_data_new (branch_list_store,
152 GTK_COMBO_BOX (merge_branch_combo), gxml,
153 plugin);
155 list_command = git_branch_list_command_new (plugin->project_root_directory,
156 GIT_BRANCH_TYPE_ALL);
158 g_signal_connect (G_OBJECT (list_command), "data-arrived",
159 G_CALLBACK (on_git_list_branch_command_data_arrived),
160 data);
162 g_signal_connect (G_OBJECT (list_command), "command-finished",
163 G_CALLBACK (on_git_list_branch_command_finished),
164 data);
166 anjuta_command_start (ANJUTA_COMMAND (list_command));
168 g_signal_connect (G_OBJECT (dialog), "response",
169 G_CALLBACK (on_merge_dialog_response),
170 data);
172 g_signal_connect (G_OBJECT (use_custom_log_check), "toggled",
173 G_CALLBACK (on_use_custom_log_check_toggled),
174 merge_log_view);
176 gtk_widget_show_all (dialog);
179 void
180 on_menu_git_merge (GtkAction *action, Git *plugin)
182 merge_dialog (plugin);