Qt client - remove right click menu from end turn sidebar
[freeciv.git] / client / gui-gtk-3.0 / messagedlg.c
blob268ec2b804e9ace232c2eb7f92b2dd5040b06aa3
1 /**********************************************************************
2 Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2, or (at your option)
6 any later version.
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12 ***********************************************************************/
14 #ifdef HAVE_CONFIG_H
15 #include <fc_config.h>
16 #endif
18 #include <gtk/gtk.h>
20 /* utility */
21 #include "fcintl.h"
23 /* common */
24 #include "events.h"
26 /* client */
27 #include "options.h"
29 /* client/gui-gtk-3.0 */
30 #include "colors.h"
31 #include "gui_main.h"
32 #include "gui_stuff.h"
34 #include "messagedlg.h"
36 #define NUM_LISTS 1
38 /*************************************************************************/
39 static struct gui_dialog *shell;
40 static GtkListStore *models[NUM_LISTS];
42 static void create_messageopt_dialog(void);
43 static void messageopt_response(struct gui_dialog *dlg, int response,
44 gpointer data);
45 static void item_toggled(GtkCellRendererToggle *cell,
46 gchar *spath, gpointer data);
48 /**************************************************************************
49 Open messageoptions dialog
50 **************************************************************************/
51 void popup_messageopt_dialog(void)
53 if (!shell)
54 create_messageopt_dialog();
56 gui_dialog_raise(shell);
59 /**************************************************************************
60 Create messageoptions dialog
61 **************************************************************************/
62 static void create_messageopt_dialog(void)
64 GtkWidget *form, *explanation;
65 int n, i = 0, j;
67 gui_dialog_new(&shell, GTK_NOTEBOOK(top_notebook), NULL, TRUE);
68 gui_dialog_set_title(shell, _("Message Options"));
70 gui_dialog_set_default_size(shell, -1, 450);
72 gui_dialog_add_button(shell, GTK_STOCK_OK, GTK_RESPONSE_OK);
73 gui_dialog_add_button(shell, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
75 explanation = gtk_label_new(NULL);
76 g_object_set(explanation, "margin", 4, NULL);
77 gtk_label_set_markup(GTK_LABEL(explanation),
78 _("Where to display messages?\n"
79 "<b>Out</b>put window ; "
80 "<b>Mes</b>sages window ; "
81 "<b>Pop</b>up individual window"));
82 gtk_widget_set_name(explanation, "comment_label");
83 gtk_container_add(GTK_CONTAINER(shell->vbox), explanation);
84 gtk_widget_show(explanation);
86 form = gtk_grid_new();
87 gtk_container_add(GTK_CONTAINER(shell->vbox), form);
89 for (n = 0; n < NUM_LISTS; n++) {
90 models[n] = gtk_list_store_new(5, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
91 G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_INT);
94 sorted_event_iterate(ev) {
95 GtkTreeIter it;
96 GValue value = { 0, };
98 n = (i++ % NUM_LISTS);
100 gtk_list_store_append(models[n], &it);
102 g_value_init(&value, G_TYPE_STRING);
103 g_value_set_static_string(&value, get_event_message_text(ev));
104 gtk_list_store_set_value(models[n], &it, 3, &value);
105 g_value_unset(&value);
107 gtk_list_store_set(models[n], &it, 4, ev, -1);
109 for (j = 0; j < NUM_MW; j++) {
110 gtk_list_store_set(models[n], &it, j, messages_where[ev] & (1<<j), -1);
112 } sorted_event_iterate_end;
114 for (n = 0; n < NUM_LISTS; n++) {
115 GtkWidget *view, *sw;
116 GtkCellRenderer *renderer;
117 GtkTreeViewColumn *column;
119 view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(models[n]));
120 gtk_widget_set_hexpand(view, TRUE);
121 gtk_widget_set_vexpand(view, TRUE);
122 g_object_unref(models[n]);
124 renderer = gtk_cell_renderer_text_new();
125 column = gtk_tree_view_column_new_with_attributes(_("Event"),
126 renderer, "text", 3, NULL);
127 gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);
128 gtk_tree_view_column_set_expand(column, TRUE);
130 renderer = gtk_cell_renderer_toggle_new();
131 g_object_set_data(G_OBJECT(renderer), "column", GINT_TO_POINTER(0));
132 g_signal_connect(renderer, "toggled", G_CALLBACK(item_toggled), models[n]);
134 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),
135 -1, _("Out"), renderer,
136 "active", 0, NULL);
138 renderer = gtk_cell_renderer_toggle_new();
139 g_object_set_data(G_OBJECT(renderer), "column", GINT_TO_POINTER(1));
140 g_signal_connect(renderer, "toggled", G_CALLBACK(item_toggled), models[n]);
142 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),
143 -1, _("Mes"), renderer,
144 "active", 1, NULL);
146 renderer = gtk_cell_renderer_toggle_new();
147 g_object_set_data(G_OBJECT(renderer), "column", GINT_TO_POINTER(2));
148 g_signal_connect(renderer, "toggled", G_CALLBACK(item_toggled), models[n]);
150 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),
151 -1, _("Pop"), renderer,
152 "active", 2, NULL);
154 sw = gtk_scrolled_window_new(NULL, NULL);
155 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw),
156 GTK_SHADOW_ETCHED_IN);
157 gtk_container_add(GTK_CONTAINER(sw), view);
159 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
160 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
161 gtk_container_add(GTK_CONTAINER(form), sw);
163 gtk_tree_view_focus(GTK_TREE_VIEW(view));
166 gui_dialog_response_set_callback(shell, messageopt_response);
167 gui_dialog_show_all(shell);
170 /**************************************************************************
171 Use responded to messageoptions dialog
172 **************************************************************************/
173 static void messageopt_response(struct gui_dialog *dlg, int response,
174 gpointer data)
176 if (response == GTK_RESPONSE_OK) {
177 ITree it;
178 gint n, j, i;
179 gboolean toggle;
181 for (i = 0; i <= event_type_max(); i++) {
182 /* Include possible undefined messages. */
183 messages_where[i] = 0;
186 for (n = 0; n < NUM_LISTS; n++) {
187 GtkTreeModel *pmodel = GTK_TREE_MODEL(models[n]);
189 for (itree_begin(pmodel, &it); !itree_end(&it); itree_next(&it)) {
190 for (j = 0; j < NUM_MW; j++) {
191 itree_get(&it, j, &toggle, 4, &i, -1);
193 if (toggle)
194 messages_where[i] |= (1<<j);
199 gui_dialog_destroy(dlg);
202 /**************************************************************************
203 User toggled item
204 **************************************************************************/
205 static void item_toggled(GtkCellRendererToggle *cell,
206 gchar *spath, gpointer data)
208 GtkTreeModel *model = GTK_TREE_MODEL(data);
209 GtkTreePath *path;
210 GtkTreeIter it;
211 gboolean toggle;
212 gint column;
214 path = gtk_tree_path_new_from_string(spath);
216 column = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cell), "column"));
218 gtk_tree_model_get_iter(model, &it, path);
219 gtk_tree_model_get(model, &it, column, &toggle, -1);
220 toggle ^= 1;
221 gtk_list_store_set(GTK_LIST_STORE(model), &it, column, toggle, -1);
223 gtk_tree_path_free(path);