1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
4 * Copyright (C) James Liggett 2008 <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 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"
28 on_merge_command_finished (AnjutaCommand
*command
, guint return_code
,
33 status
= anjuta_shell_get_status (ANJUTA_PLUGIN (plugin
)->shell
,
36 anjuta_status (status
, _("Git: Merge complete."), 5);
38 git_report_errors (command
, return_code
);
40 g_object_unref (command
);
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
;
54 GtkWidget
*log_prompt_dialog
;
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");
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
,
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
)
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
,
97 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (no_commit_check
)),
98 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (squash_check
)));
102 git_create_message_view (data
->plugin
);
104 g_signal_connect (G_OBJECT (merge_command
), "command-finished",
105 G_CALLBACK (on_merge_command_finished
),
108 g_signal_connect (G_OBJECT (merge_command
), "data-arrived",
109 G_CALLBACK (on_git_command_info_arrived
),
112 anjuta_command_start (ANJUTA_COMMAND (merge_command
));
115 gtk_widget_destroy (GTK_WIDGET (dialog
));
116 git_branch_combo_data_free (data
);
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
));
127 merge_dialog (Git
*plugin
)
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
,
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
),
162 g_signal_connect (G_OBJECT (list_command
), "command-finished",
163 G_CALLBACK (on_git_list_branch_command_finished
),
166 anjuta_command_start (ANJUTA_COMMAND (list_command
));
168 g_signal_connect (G_OBJECT (dialog
), "response",
169 G_CALLBACK (on_merge_dialog_response
),
172 g_signal_connect (G_OBJECT (use_custom_log_check
), "toggled",
173 G_CALLBACK (on_use_custom_log_check_toggled
),
176 gtk_widget_show_all (dialog
);
180 on_menu_git_merge (GtkAction
*action
, Git
*plugin
)
182 merge_dialog (plugin
);