Freeciv-3.4
Loading...
Searching...
No Matches
diplodlg.c
Go to the documentation of this file.
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.
7
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***********************************************************************/
13
14#ifdef HAVE_CONFIG_H
15#include <fc_config.h>
16#endif
17
18#include <stdio.h>
19#include <stdlib.h>
20
21#include <gtk/gtk.h>
22
23/* utility */
24#include "log.h"
25#include "mem.h"
26#include "shared.h"
27#include "support.h"
28
29/* common */
30#include "diptreaty.h"
31#include "fcintl.h"
32#include "game.h"
33#include "government.h"
34#include "map.h"
35#include "nation.h"
36#include "packets.h"
37#include "player.h"
38#include "research.h"
39
40/* client */
41#include "chatline.h"
42#include "client_main.h"
43#include "climisc.h"
44#include "options.h"
45
46/* client/gui-gtk-4.0 */
47#include "diplodlg.h"
48#include "gui_main.h"
49#include "gui_stuff.h"
50#include "mapview.h"
51#include "plrdlg.h"
52
53struct Diplomacy_dialog {
54 struct treaty *treaty;
55 struct gui_dialog *dialog;
56
59
61};
62
63struct Diplomacy_notebook {
64 struct gui_dialog *dialog;
66};
67
68struct city_deal {
69 int giver;
70 int receiver;
71 int id;
72};
73
74#define SPECLIST_TAG dialog
75#define SPECLIST_TYPE struct Diplomacy_dialog
76#include "speclist.h"
77
78#define dialog_list_iterate(dialoglist, pdialog) \
79 TYPED_LIST_ITERATE(struct Diplomacy_dialog, dialoglist, pdialog)
80#define dialog_list_iterate_end LIST_ITERATE_END
81
82static struct dialog_list *dialog_list;
84
86 struct player *plr0,
87 struct player *plr1);
88
90static void popup_diplomacy_dialog(struct treaty *ptreaty, struct player *they,
91 struct player *initiator);
93 GVariant *parameter,
94 gpointer data);
96 GVariant *parameter,
97 gpointer data);
98
100 GVariant *parameter,
101 gpointer data);
103 GVariant *parameter,
104 gpointer data);
106 GVariant *parameter,
107 gpointer data);
109 GVariant *parameter,
110 gpointer data);
112 GVariant *parameter,
113 gpointer data);
115 GVariant *parameter,
116 gpointer data);
118 GVariant *parameter,
119 gpointer data);
121 GVariant *parameter,
122 gpointer data);
123
124static void close_diplomacy_dialog(struct Diplomacy_dialog *pdialog);
125static void update_diplomacy_dialog(struct Diplomacy_dialog *pdialog);
126static void diplo_dialog_returnkey(GtkWidget *w, gpointer data);
127
128static struct Diplomacy_notebook *diplomacy_main_create(void);
129static void diplomacy_main_destroy(void);
130static void diplomacy_main_response(struct gui_dialog *dlg, int response,
131 gpointer data);
132
133#define RESPONSE_CANCEL_MEETING 100
134#define RESPONSE_CANCEL_MEETING_ALL 101
135
136/************************************************************************/
140{
142
143 if (!pdialog) {
144 return;
145 }
146
147 fc_assert(pdialog->treaty == ptreaty);
148
150 gui_dialog_alert(pdialog->dialog);
151}
152
153/************************************************************************/
161
162/************************************************************************/
166 struct player *initiator)
167{
169
170 if (!pdialog) {
171 return;
172 }
173
174 fc_assert(pdialog->treaty == ptreaty);
175
176 close_diplomacy_dialog(pdialog);
177}
178
179/**********************************************************************/
183{
184 /* Not needed */
185}
186
187/************************************************************************/
191{
193
194 if (!pdialog) {
195 return;
196 }
197
198 fc_assert(pdialog->treaty == ptreaty);
199
201 gui_dialog_alert(pdialog->dialog);
202}
203
204/************************************************************************/
208{
210
211 if (!pdialog) {
212 return;
213 }
214
215 fc_assert(pdialog->treaty == ptreaty);
216
218 gui_dialog_alert(pdialog->dialog);
219}
220
221/************************************************************************/
224static void popup_diplomacy_dialog(struct treaty *ptreaty, struct player *they,
225 struct player *initiator)
226{
228
229 if (!is_human(client_player())) {
230 return; /* Don't show if we are not human controlled. */
231 }
232
233 if (!pdialog) {
235 }
236
237 gui_dialog_present(pdialog->dialog);
238 /* We initiated the meeting - Make the tab active */
239 if (initiator == client_player()) {
240 /* We have to raise the diplomacy meeting tab as well as the selected
241 * meeting. */
243
245 gui_dialog_raise(pdialog->dialog);
246
247 if (players_dialog_shell != NULL) {
249 }
250 }
251}
252
253/************************************************************************/
257{
258 const struct advance *padvance1 = (const struct advance *) a;
259 const struct advance *padvance2 = (const struct advance *) b;
260
263}
264
265/************************************************************************/
269 struct Diplomacy_dialog *pdialog,
270 struct player *partner, bool them)
271{
273 GSimpleAction *act;
274 bool any_map = FALSE;
275 char act_plr_part[20];
276 char act_name[60];
277 struct player *pgiver, *pother;
278
279 if (them) {
280 fc_strlcpy(act_plr_part, "_them", sizeof(act_plr_part));
281 pgiver = partner;
283 } else {
284 fc_strlcpy(act_plr_part, "_us", sizeof(act_plr_part));
286 pother = partner;
287 }
288
290
291 /* Maps. */
294
295 fc_snprintf(act_name, sizeof(act_name), "worldmap%s", act_plr_part);
297 g_object_set_data(G_OBJECT(act), "plr", pgiver);
300 pdialog);
301
302 fc_snprintf(act_name, sizeof(act_name), "win.worldmap%s", act_plr_part);
304
305 any_map = TRUE;
306 }
307
309 if (!any_map) {
311 }
312
313 fc_snprintf(act_name, sizeof(act_name), "seamap%s", act_plr_part);
315 g_object_set_data(G_OBJECT(act), "plr", pgiver);
318 pdialog);
319
320 fc_snprintf(act_name, sizeof(act_name), "win.seamap%s", act_plr_part);
322
323 any_map = TRUE;
324 }
325
326 if (any_map) {
328 }
329
330 /* Trading: advances */
332 const struct research *gresearch = research_get(pgiver);
333 const struct research *oresearch = research_get(pother);
336 int i;
337
339
342
344 && (!team_embassy /* We don't know what the other could actually receive */
349 == TECH_PREREQS_KNOWN)) {
351 }
353
354 if (NULL != sorting_list) {
356 const struct advance *padvance;
357
359
360 /* TRANS: All technologies menu item in the diplomatic dialog. */
361 fc_snprintf(act_name, sizeof(act_name), "advance%sall", act_plr_part);
363
364 g_object_set_data(G_OBJECT(act), "player_from",
366 g_object_set_data(G_OBJECT(act), "player_to",
369 g_signal_connect(act, "activate",
372
373 fc_snprintf(act_name, sizeof(act_name), "win.advance%sall", act_plr_part);
375
376 for (list_item = sorting_list, i = 0; NULL != list_item;
378
379 fc_snprintf(act_name, sizeof(act_name), "advance%s%d",
380 act_plr_part, i);
382
383 padvance = (const struct advance *) list_item->data;
384 g_object_set_data(G_OBJECT(act), "player_from",
386 g_object_set_data(G_OBJECT(act), "player_to",
389 g_signal_connect(act, "activate",
392
393 fc_snprintf(act_name, sizeof(act_name), "win.advance%s%d",
394 act_plr_part, i);
397 act_name));
398 }
399
401 }
402
404 }
405
406 /* Trading: cities. */
407
408 /****************************************************************
409 Creates a sorted list of plr0's cities, excluding the capital and
410 any cities not visible to plr1. This means that you can only trade
411 cities visible to requesting player.
412
413 - Kris Bubendorfer
414 *****************************************************************/
416 int i = 0;
417 int n = city_list_size(pgiver->cities);
418
420
421 if (n > 0) {
422 struct city **city_list_ptrs;
423
424 city_list_ptrs = fc_malloc(sizeof(struct city *) * n);
425
426 city_list_iterate(pgiver->cities, pcity) {
427 if (!is_capital(pcity)) {
429 i++;
430 }
432
433 if (i > 0) { /* Cities other than capitals */
434 int j;
435
436 qsort(city_list_ptrs, i, sizeof(struct city *), city_name_compare);
437
438 for (j = 0; j < i; j++) {
439 struct city_deal *deal = fc_malloc(sizeof(struct city_deal));
440
441 fc_snprintf(act_name, sizeof(act_name), "city%s%d", act_plr_part, j);
443
444 deal->giver = player_number(pgiver);
445 deal->receiver = player_number(pother);
446 deal->id = city_list_ptrs[j]->id;
447
449 g_signal_connect(act, "activate",
451 (gpointer)deal);
452
453 fc_snprintf(act_name, sizeof(act_name), "win.city%s%d",
454 act_plr_part, j);
457 act_name));
458 }
459 }
460
462 }
463
465 }
466
467 /* Give shared vision. */
469 fc_snprintf(act_name, sizeof(act_name), "vision%s", act_plr_part);
471 g_object_set_data(G_OBJECT(act), "plr", pgiver);
474 pdialog);
475
476 fc_snprintf(act_name, sizeof(act_name), "win.vision%s", act_plr_part);
477 menu_item_append_unref(topmenu, g_menu_item_new(_("_Give shared vision"), act_name));
478
481 }
482
483 /* Give embassy. */
485 fc_snprintf(act_name, sizeof(act_name), "embassy%s", act_plr_part);
487 g_object_set_data(G_OBJECT(act), "plr", pgiver);
490 pdialog);
491
492 fc_snprintf(act_name, sizeof(act_name), "win.embassy%s", act_plr_part);
494
495 /* Don't take in account the embassy effects. */
498 }
499
500 /* Shared tiles */
502 fc_snprintf(act_name, sizeof(act_name), "tiles%s", act_plr_part);
504 g_object_set_data(G_OBJECT(act), "plr", pgiver);
507 pdialog);
508
509 fc_snprintf(act_name, sizeof(act_name), "win.tiles%s", act_plr_part);
511 }
512
513 /* Pacts. */
514 if (pgiver == pdialog->treaty->plr0) {
515 enum diplstate_type ds;
516 int pact_clauses = 0;
517
519
521
523 fc_snprintf(act_name, sizeof(act_name), "ceasefire%s", act_plr_part);
526 g_signal_connect(act, "activate",
528
529 fc_snprintf(act_name, sizeof(act_name), "win.ceasefire%s", act_plr_part);
531 g_menu_item_new(Q_("?diplomatic_state:Cease-fire"),
532 act_name));
533
535 ds != DS_CEASEFIRE && ds != DS_TEAM);
536 pact_clauses++;
537 }
538
540 fc_snprintf(act_name, sizeof(act_name), "peace%s", act_plr_part);
543 g_signal_connect(act, "activate",
545
546 fc_snprintf(act_name, sizeof(act_name), "win.peace%s", act_plr_part);
547 menu_item_append_unref(submenu, g_menu_item_new(Q_("?diplomatic_state:Peace"),
548 act_name));
549
551 ds != DS_PEACE && ds != DS_TEAM);
552 pact_clauses++;
553 }
554
556 fc_snprintf(act_name, sizeof(act_name), "alliance%s", act_plr_part);
559 g_signal_connect(act, "activate",
561
562 fc_snprintf(act_name, sizeof(act_name), "win.alliance%s", act_plr_part);
564 g_menu_item_new(Q_("?diplomatic_state:Alliance"),
565 act_name));
566
568 ds != DS_ALLIANCE && ds != DS_TEAM);
569 pact_clauses++;
570 }
571
572 if (pact_clauses > 0) {
574 } else {
576 }
577 }
578
579 return topmenu;
580}
581
582/************************************************************************/
587{
588 struct Diplomacy_dialog *pdialog = (struct Diplomacy_dialog *)data;
589 gint i;
590 gint *index;
591
592 index = gtk_tree_path_get_indices(path);
593
594 i = 0;
596 if (i == index[0]) {
598 player_number(pdialog->treaty->plr1),
599 player_number(pclause->from),
600 pclause->type,
601 pclause->value);
602 return;
603 }
604 i++;
606}
607
608/************************************************************************/
653
654/************************************************************************/
657static void diplomacy_main_destroy(void)
658{
659 if (dipl_main->dialog) {
661 }
663 dipl_main = NULL;
664}
665
666/************************************************************************/
669static void diplomacy_main_response(struct gui_dialog *dlg, int response,
670 gpointer data)
671{
672 if (!dipl_main) {
673 return;
674 }
675
676 switch (response) {
677 default:
678 log_error("unhandled response in %s: %d", __FUNCTION__, response);
679 fc__fallthrough; /* No break. */
680 case GTK_RESPONSE_DELETE_EVENT: /* GTK: delete the widget. */
681 case RESPONSE_CANCEL_MEETING_ALL: /* Cancel all meetings. */
683 /* This will do a round trip to the server and close the dialog in the
684 * client. Closing the last dialog will also close the main tab.*/
687 adialog->treaty->plr1));
689 break;
690 }
691}
692
693/************************************************************************/
696static void diplomacy_destroy(struct Diplomacy_dialog *pdialog)
697{
698 if (NULL != pdialog->dialog) {
699 /* pdialog->dialog may be NULL if the tab has been destroyed
700 * by an other way. */
701 gui_dialog_destroy(pdialog->dialog);
702 pdialog->dialog = NULL;
703 }
705
706 if (dialog_list) {
707 /* Diplomatic meetings in one main tab. */
708 if (dialog_list_size(dialog_list) > 0) {
709 if (dipl_main && dipl_main->dialog) {
710 gchar *buf;
711
712 buf = g_strdup_printf(_("Diplomacy [%d]"), dialog_list_size(dialog_list));
714 g_free(buf);
715 }
716 } else if (dipl_main) {
717 /* No meeting left - destroy main tab. */
719 }
720 }
721
722 /* Last sub-tab must not be freed before diplomacy_main_destroy() call. */
723 free(pdialog);
724}
725
726/************************************************************************/
729static void diplomacy_response(struct gui_dialog *dlg, int response,
730 gpointer data)
731{
732 struct Diplomacy_dialog *pdialog = NULL;
733
734 fc_assert_ret(data);
735
736 pdialog = (struct Diplomacy_dialog *)data;
737
738 switch (response) {
739 case GTK_RESPONSE_ACCEPT: /* Accept treaty. */
742 pdialog->treaty->plr1));
743 break;
744
745 default:
746 log_error("unhandled response in %s: %d", __FUNCTION__, response);
747 fc__fallthrough; /* No break. */
748 case GTK_RESPONSE_DELETE_EVENT: /* GTK: delete the widget. */
749 case GTK_RESPONSE_CANCEL: /* GTK: cancel button. */
750 case RESPONSE_CANCEL_MEETING: /* Cancel meetings. */
753 pdialog->treaty->plr1));
754 break;
755 }
756}
757
758/************************************************************************/
762 struct player *plr0,
763 struct player *plr1)
764{
766 GtkWidget *vbox, *hgrid, *table, *mainbox;
767 GtkWidget *label, *sw, *view, *pic, *spin;
769 struct sprite *flag_spr;
770 GtkListStore *store;
772 int i;
773 struct Diplomacy_dialog *pdialog;
774 char plr_buf[4 * MAX_LEN_NAME];
775 gchar *buf;
776 int grid_col = 0;
777 int main_row = 0;
778 GActionGroup *group;
779 GMenu *menu;
780
781 pdialog = fc_malloc(sizeof(*pdialog));
782
784 pdialog->treaty = ptreaty;
785
786 /* Get main diplomacy tab. */
788
789 buf = g_strdup_printf(_("Diplomacy [%d]"), dialog_list_size(dialog_list));
791 g_free(buf);
792
793 notebook = dipl_dialog->notebook;
794
795 gui_dialog_new(&(pdialog->dialog), GTK_NOTEBOOK(notebook), pdialog, FALSE);
796
797 /* Buttons */
799 _("Accept treaty"), GTK_RESPONSE_ACCEPT);
801 _("Cancel meeting"), RESPONSE_CANCEL_MEETING);
802
803 /* Responses for one meeting. */
805
806 /* Label for the new meeting. */
809
810 /* Sort meeting tabs alphabetically by the tab label. */
811 for (i = 0; i < gtk_notebook_get_n_pages(GTK_NOTEBOOK(notebook)); i++) {
814 struct gui_dialog *prev_dialog
815 = g_object_get_data(G_OBJECT(prev_page), "gui-dialog-data");
816 const char *prev_label
818
819 if (fc_strcasecmp(buf, prev_label) < 0) {
821 pdialog->dialog->grid, i);
822 break;
823 }
824 }
825 g_free(buf);
826
827 /* Us. */
834
835 /* Our nation. */
839 buf = g_strdup_printf("<span size=\"large\"><u>%s</u></span>",
842 g_free(buf);
844
848
849 /* Our flag */
851
855
856 /* Our name. */
861 buf = g_strdup_printf("<span size=\"large\" weight=\"bold\">%s</span>",
862 ruler_title_for_player(plr0, plr_buf, sizeof(plr_buf)));
864 g_free(buf);
866
867 pdialog->pic0 = gtk_picture_new();
868 gtk_grid_attach(GTK_GRID(hgrid), pdialog->pic0, grid_col++, 0, 1, 1);
869
870 /* Menu for clauses: we. */
873
874 menu = create_clause_menu(group, pdialog, plr1, FALSE);
876
877 /* Main table for clauses and (if activated) gold trading: we. */
883
886 1.0);
889 gtk_grid_attach(GTK_GRID(table), spin, 1, 0, 1, 1);
890 g_object_set_data(G_OBJECT(spin), "plr", plr0);
891 g_signal_connect_after(spin, "value-changed",
893
894 label = g_object_new(GTK_TYPE_LABEL, "use-underline", TRUE,
895 "mnemonic-widget", spin, "label", _("Gold:"),
896 "xalign", 0.0, "yalign", 0.5, NULL);
897 gtk_grid_attach(GTK_GRID(table), label, 0, 0, 1, 1);
898
899 gtk_grid_attach(GTK_GRID(table), aux_menu, 2, 0, 1, 1);
900 } else {
901 gtk_grid_attach(GTK_GRID(table), aux_menu, 0, 0, 1, 1);
902 }
904
905 /* Them. */
912
913 /* Their nation. */
917 buf = g_strdup_printf("<span size=\"large\"><u>%s</u></span>",
920 g_free(buf);
922
924 grid_col = 0;
927
928 /* Their flag */
930
934
935 /* Their name. */
940 buf = g_strdup_printf("<span size=\"large\" weight=\"bold\">%s</span>",
941 title_for_player(plr1, plr_buf, sizeof(plr_buf)));
943 g_free(buf);
945
946 pdialog->pic1 = gtk_picture_new();
947 gtk_grid_attach(GTK_GRID(hgrid), pdialog->pic1, grid_col++, 0, 1, 1);
948
949 /* Menu for clauses: they. */
952
953 menu = create_clause_menu(group, pdialog, plr1, TRUE);
955
956 /* Main table for clauses and (if activated) gold trading: they. */
962
965 1.0);
968 gtk_grid_attach(GTK_GRID(table), spin, 1, 0, 1, 1);
969 g_object_set_data(G_OBJECT(spin), "plr", plr1);
970 g_signal_connect_after(spin, "value-changed",
972
973 label = g_object_new(GTK_TYPE_LABEL, "use-underline", TRUE,
974 "mnemonic-widget", spin, "label", _("Gold:"),
975 "xalign", 0.0, "yalign", 0.5, NULL);
976 gtk_grid_attach(GTK_GRID(table), label, 0, 0, 1, 1);
977
978 gtk_grid_attach(GTK_GRID(table), aux_menu, 2, 0, 1, 1);
979 } else {
980 gtk_grid_attach(GTK_GRID(table), aux_menu, 0, 0, 1, 1);
981 }
983
984 /* Clauses. */
989
991 pdialog->store = store;
992
997 g_object_unref(store);
999
1002 rend, "text", 0, NULL);
1003
1013
1015 "use-underline", TRUE,
1016 "mnemonic-widget", view,
1017 "label", _("C_lauses:"),
1018 "xalign", 0.0,
1019 "yalign", 0.5,
1020 NULL);
1021
1023
1027
1029
1030 g_signal_connect(view, "row_activated", G_CALLBACK(row_callback), pdialog);
1031
1032 update_diplomacy_dialog(pdialog);
1033 gui_dialog_show_all(pdialog->dialog);
1034
1035 return pdialog;
1036}
1037
1038/************************************************************************/
1041static void update_diplomacy_dialog(struct Diplomacy_dialog *pdialog)
1042{
1043 GtkListStore *store;
1044 GtkTreeIter it;
1045 bool blank = TRUE;
1047
1048 store = pdialog->store;
1049
1050 gtk_list_store_clear(store);
1052 char buf[128];
1053
1055
1056 gtk_list_store_append(store, &it);
1057 gtk_list_store_set(store, &it, 0, buf, -1);
1058 blank = FALSE;
1060
1061 if (blank) {
1062 gtk_list_store_append(store, &it);
1063 gtk_list_store_set(store, &it, 0,
1064 _("--- This treaty is blank. "
1065 "Please add some clauses. ---"), -1);
1066 }
1067
1074}
1075
1076/************************************************************************/
1080 GVariant *parameter,
1081 gpointer data)
1082{
1083 int giver, dest, other, tech;
1084
1085 giver = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(action), "player_from"));
1086 dest = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(action), "player_to"));
1087 tech = GPOINTER_TO_INT(data);
1088 if (player_by_number(giver) == client_player()) {
1089 other = dest;
1090 } else {
1091 other = giver;
1092 }
1093
1094 if (A_LAST == tech) {
1095 /* All techs. */
1096 struct player *pgiver = player_by_number(giver);
1097 struct player *pdest = player_by_number(dest);
1098 const struct research *dresearch, *gresearch;
1099
1102
1107
1113 == TECH_PREREQS_KNOWN)) {
1115 CLAUSE_ADVANCE, i);
1116 }
1118 } else {
1119 /* Only one tech. */
1121 CLAUSE_ADVANCE, tech);
1122 }
1123}
1124
1125/************************************************************************/
1130 GVariant *parameter,
1131 gpointer data)
1132{
1133 struct city_deal *deal_data = (struct city_deal *)data;
1134 int other;
1135
1136 if (player_by_number(deal_data->giver) == client.conn.playing) {
1138 } else {
1139 other = deal_data->giver;
1140 }
1141
1144
1145 free(deal_data);
1146}
1147
1148/************************************************************************/
1152 gpointer data)
1153{
1154 struct Diplomacy_dialog *pdialog = (struct Diplomacy_dialog *)data;
1155 struct player *pgiver;
1156
1157 pgiver = (struct player *)g_object_get_data(G_OBJECT(action), "plr");
1158
1160 player_number(pdialog->treaty->plr1),
1162}
1163
1164/************************************************************************/
1168 gpointer data)
1169{
1170 struct Diplomacy_dialog *pdialog = (struct Diplomacy_dialog *)data;
1171 struct player *pgiver;
1172
1173 pgiver = (struct player *)g_object_get_data(G_OBJECT(action), "plr");
1174
1176 player_number(pdialog->treaty->plr1),
1178 0);
1179}
1180
1181/************************************************************************/
1185{
1186 struct Diplomacy_dialog *pdialog = (struct Diplomacy_dialog *)data;
1187
1189 player_number(pdialog->treaty->plr1),
1190 player_number(pdialog->treaty->plr0),
1191 type, 0);
1192}
1193
1194/************************************************************************/
1203
1204/************************************************************************/
1213
1214/************************************************************************/
1223
1224/************************************************************************/
1228 GVariant *parameter,
1229 gpointer data)
1230{
1231 struct Diplomacy_dialog *pdialog = (struct Diplomacy_dialog *) data;
1232 struct player *pgiver;
1233
1234 pgiver = (struct player *)g_object_get_data(G_OBJECT(action), "plr");
1235
1237 player_number(pdialog->treaty->plr1),
1239 0);
1240}
1241
1242/************************************************************************/
1246 GVariant *parameter,
1247 gpointer data)
1248{
1249 struct Diplomacy_dialog *pdialog = (struct Diplomacy_dialog *) data;
1250 struct player *pgiver;
1251
1252 pgiver = (struct player *)g_object_get_data(G_OBJECT(action), "plr");
1253
1255 player_number(pdialog->treaty->plr1),
1257 0);
1258}
1259
1260/************************************************************************/
1264 GVariant *parameter,
1265 gpointer data)
1266{
1267 struct Diplomacy_dialog *pdialog = (struct Diplomacy_dialog *) data;
1268 struct player *pgiver;
1269
1270 pgiver = (struct player *)g_object_get_data(G_OBJECT(action), "plr");
1271
1273 player_number(pdialog->treaty->plr1),
1276 0);
1277}
1278
1279/************************************************************************/
1283{
1284 diplomacy_destroy(pdialog);
1285}
1286
1287/************************************************************************/
1291{
1293 dipl_main = NULL;
1294}
1295
1296/************************************************************************/
1303
1304/************************************************************************/
1308{
1309 struct player *plr0 = client.conn.playing;
1310
1312 if ((pdialog->treaty->plr0 == plr0 && pdialog->treaty->plr1 == they)
1313 || (pdialog->treaty->plr0 == they && pdialog->treaty->plr1 == plr0)) {
1314 return pdialog;
1315 }
1317
1318 return NULL;
1319}
1320
1321/************************************************************************/
1325{
1326 struct Diplomacy_dialog *pdialog = (struct Diplomacy_dialog *) data;
1327 struct player *pgiver =
1328 (struct player *) g_object_get_data(G_OBJECT(w), "plr");
1330
1333 player_number(pdialog->treaty->plr1),
1336 } else {
1337 output_window_append(ftc_client, _("Invalid amount of gold specified."));
1338 }
1339}
1340
1341/************************************************************************/
#define n
Definition astring.c:77
void output_window_append(const struct ft_color color, const char *featured_text)
bool is_capital(const struct city *pcity)
Definition city.c:1632
const char * city_name_get(const struct city *pcity)
Definition city.c:1157
int city_name_compare(const void *p1, const void *p2)
Definition city.c:1764
#define city_list_iterate(citylist, pcity)
Definition city.h:508
#define city_list_iterate_end
Definition city.h:510
struct civclient client
const char * title_for_player(const struct player *pplayer, char *buf, size_t buf_len)
#define client_player()
void client_diplomacy_clause_string(char *buf, int bufsiz, struct Clause *pclause)
Definition climisc.c:241
char * incite_cost
Definition comments.c:77
struct unit struct city struct unit struct tile struct extra_type const struct act_prob *act_probs int actor_unit_id struct unit struct unit int const struct action *paction struct unit struct city * pcity
Definition dialogs_g.h:77
struct treaty * ptreaty
Definition diplodlg_g.h:28
struct treaty struct player struct player *initiator gui_recv_create_clause
Definition diplodlg_g.h:32
gui_recv_cancel_meeting
Definition diplodlg_g.h:27
struct treaty struct player * they
Definition diplodlg_g.h:28
struct treaty struct player struct player *initiator struct treaty struct player *they gui_recv_accept_treaty
Definition diplodlg_g.h:36
bool clause_enabled(enum clause_type type)
Definition diptreaty.c:305
#define clause_list_iterate_end
Definition diptreaty.h:73
#define clause_list_iterate(clauselist, pclause)
Definition diptreaty.h:71
int Tech_type_id
Definition fc_types.h:238
#define MAX_LEN_NAME
Definition fc_types.h:68
#define Q_(String)
Definition fcintl.h:70
#define _(String)
Definition fcintl.h:67
const struct ft_color ftc_client
struct civ_game game
Definition game.c:62
const char * ruler_title_for_player(const struct player *pplayer, char *buf, size_t buf_len)
Definition government.c:398
static void diplomacy_dialog_add_pact_clause(GtkWidget *w, gpointer data, int type)
Definition diplodlg.c:1113
#define RESPONSE_CANCEL_MEETING
Definition diplodlg.c:114
void gui_init_meeting(struct treaty *ptreaty, struct player *they, struct player *initiator)
Definition diplodlg.c:137
static gint sort_advance_names(gconstpointer a, gconstpointer b)
Definition diplodlg.c:236
static void close_diplomacy_dialog(struct Diplomacy_dialog *pdialog)
Definition diplodlg.c:1198
static void diplomacy_dialog_tech_callback(GtkWidget *w, gpointer data)
Definition diplodlg.c:1014
static void row_callback(GtkTreeView *view, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data)
Definition diplodlg.c:515
static void diplomacy_dialog_ceasefire_callback(GtkWidget *w, gpointer data)
Definition diplodlg.c:1127
static void update_diplomacy_dialog(struct Diplomacy_dialog *pdialog)
Definition diplodlg.c:976
static void diplomacy_dialog_seamap_callback(GtkWidget *w, gpointer data)
Definition diplodlg.c:1097
static void diplomacy_dialog_city_callback(GtkWidget *w, gpointer data)
Definition diplodlg.c:1062
static void diplomacy_dialog_map_callback(GtkWidget *w, gpointer data)
Definition diplodlg.c:1082
void diplomacy_dialog_init(void)
Definition diplodlg.c:1206
static void diplomacy_destroy(struct Diplomacy_dialog *pdialog)
Definition diplodlg.c:625
static struct Diplomacy_dialog * create_diplomacy_dialog(struct treaty *ptreaty, struct player *plr0, struct player *plr1)
Definition diplodlg.c:689
#define dialog_list_iterate_end
Definition diplodlg.c:83
void gui_recv_remove_clause(struct treaty *ptreaty, struct player *they)
Definition diplodlg.c:188
static struct Diplomacy_notebook * diplomacy_main_create(void)
Definition diplodlg.c:541
static struct Diplomacy_dialog * find_diplomacy_dialog(struct player *they)
Definition diplodlg.c:1223
static void diplomacy_dialog_vision_callback(GtkWidget *w, gpointer data)
Definition diplodlg.c:1151
void close_all_diplomacy_dialogs(void)
Definition diplodlg.c:1260
#define RESPONSE_CANCEL_MEETING_ALL
Definition diplodlg.c:115
static void diplomacy_dialog_embassy_callback(GtkWidget *w, gpointer data)
Definition diplodlg.c:1166
static void diplomacy_dialog_shared_tiles_callback(GtkWidget *w, gpointer data)
Definition diplodlg.c:1181
static void diplomacy_response(struct gui_dialog *dlg, int response, gpointer data)
Definition diplodlg.c:658
#define dialog_list_iterate(dialoglist, pdialog)
Definition diplodlg.c:81
static struct dialog_list * dialog_list
Definition diplodlg.c:85
static void diplomacy_main_response(struct gui_dialog *dlg, int response, gpointer data)
Definition diplodlg.c:598
void gui_prepare_clause_updt(struct treaty *ptreaty, struct player *they)
Definition diplodlg.c:163
static void diplomacy_dialog_peace_callback(GtkWidget *w, gpointer data)
Definition diplodlg.c:1135
void diplomacy_dialog_done(void)
Definition diplodlg.c:1215
static void diplo_dialog_returnkey(GtkWidget *w, gpointer data)
Definition diplodlg.c:1240
static void popup_diplomacy_dialog(struct treaty *ptreaty, struct player *they, struct player *initiator)
Definition diplodlg.c:205
static void diplomacy_main_destroy(void)
Definition diplodlg.c:586
static void diplomacy_dialog_alliance_callback(GtkWidget *w, gpointer data)
Definition diplodlg.c:1143
static struct Diplomacy_notebook * dipl_main
Definition diplodlg.c:86
GtkWidget * top_notebook
Definition gui_main.c:130
void gui_dialog_destroy(struct gui_dialog *dlg)
Definition gui_stuff.c:954
void gui_dialog_present(struct gui_dialog *dlg)
Definition gui_stuff.c:835
void gui_dialog_raise(struct gui_dialog *dlg)
Definition gui_stuff.c:865
void gui_dialog_new(struct gui_dialog **pdlg, GtkNotebook *notebook, gpointer user_data, bool check_top)
Definition gui_stuff.c:517
void gui_dialog_set_return_dialog(struct gui_dialog *dlg, struct gui_dialog *return_dialog)
Definition gui_stuff.c:997
void gui_dialog_response_set_callback(struct gui_dialog *dlg, GUI_DIALOG_RESPONSE_FUN fun)
Definition gui_stuff.c:988
void gui_dialog_show_all(struct gui_dialog *dlg)
Definition gui_stuff.c:795
void gui_dialog_set_title(struct gui_dialog *dlg, const char *title)
Definition gui_stuff.c:935
void gui_dialog_alert(struct gui_dialog *dlg)
Definition gui_stuff.c:888
GtkWidget * gui_dialog_add_button(struct gui_dialog *dlg, const char *icon_name, const char *text, int response)
Definition gui_stuff.c:706
GdkPixbuf * get_thumb_pixbuf(int onoff)
Definition mapview.c:292
struct gui_dialog * players_dialog_shell
Definition plrdlg.c:58
GType type
Definition repodlgs.c:1313
static GMenu * create_clause_menu(GActionGroup *group, struct Diplomacy_dialog *pdialog, struct player *partner, bool them)
Definition diplodlg.c:268
GtkWidget * aux_menu_new(void)
Definition gui_stuff.c:244
void gui_dialog_add_content_widget(struct gui_dialog *dlg, GtkWidget *wdg)
Definition gui_stuff.c:1103
#define submenu_append_unref(menu, name, submenu)
Definition gui_stuff.h:165
#define menu_item_append_unref(menu, item)
Definition gui_stuff.h:149
void picture_set_from_surface(GtkPicture *pic, cairo_surface_t *surf)
Definition sprite.c:544
#define fc_assert_ret(condition)
Definition log.h:192
#define fc_assert(condition)
Definition log.h:177
#define log_error(message,...)
Definition log.h:104
int dsend_packet_diplomacy_create_clause_req(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
int dsend_packet_diplomacy_cancel_meeting_req(struct connection *pc, int counterpart)
int dsend_packet_diplomacy_remove_clause_req(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
int dsend_packet_diplomacy_accept_treaty_req(struct connection *pc, int counterpart)
#define fc_malloc(sz)
Definition mem.h:34
struct nation_type * nation_of_player(const struct player *pplayer)
Definition nation.c:443
const char * nation_plural_for_player(const struct player *pplayer)
Definition nation.c:178
struct player * player_by_number(const int player_id)
Definition player.c:837
int player_number(const struct player *pplayer)
Definition player.c:826
bool player_has_real_embassy(const struct player *pplayer, const struct player *pplayer2)
Definition player.c:245
bool team_has_embassy(const struct team *pteam, const struct player *tgt_player)
Definition player.c:225
struct player_diplstate * player_diplstate_get(const struct player *plr1, const struct player *plr2)
Definition player.c:325
bool gives_shared_vision(const struct player *me, const struct player *them)
Definition player.c:1477
#define is_human(plr)
Definition player.h:231
struct research * research_get(const struct player *pplayer)
Definition research.c:130
enum tech_state research_invention_state(const struct research *presearch, Tech_type_id tech)
Definition research.c:622
bool research_invention_gettable(const struct research *presearch, const Tech_type_id tech, bool allow_holes)
Definition research.c:696
struct treaty * treaty
Definition diplodlg.c:54
GtkWidget * pic1
Definition diplodlg.c:58
GtkWidget * pic0
Definition diplodlg.c:57
struct gui_dialog * dialog
Definition diplodlg.c:55
GtkListStore * store
Definition diplodlg.c:63
struct gui_dialog * dialog
Definition diplodlg.c:67
GtkWidget * notebook
Definition diplodlg.c:68
int giver
Definition diplodlg.c:72
int receiver
Definition diplodlg.c:73
Definition city.h:318
struct packet_game_info info
Definition game.h:89
struct connection conn
Definition client_main.h:96
struct player * playing
Definition connection.h:151
GtkWidget * vbox
Definition gui_stuff.h:72
GtkWidget * grid
Definition gui_stuff.h:71
GtkWidget * label
Definition gui_stuff.h:87
GtkWidget * notebook
Definition gui_stuff.h:88
bool tech_trade_allow_holes
enum diplstate_type type
Definition player.h:199
struct player_economic economic
Definition player.h:284
struct player * plr1
Definition diptreaty.h:82
struct clause_list * clauses
Definition diptreaty.h:84
bool accept1
Definition diptreaty.h:83
struct player * plr0
Definition diptreaty.h:82
bool accept0
Definition diptreaty.h:83
int fc_snprintf(char *str, size_t n, const char *format,...)
Definition support.c:925
size_t fc_strlcpy(char *dest, const char *src, size_t n)
Definition support.c:742
int fc_strcasecmp(const char *str0, const char *str1)
Definition support.c:186
int fc_strcoll(const char *str0, const char *str1)
Definition support.c:436
#define TRUE
Definition support.h:46
#define FALSE
Definition support.h:47
#define fc__fallthrough
Definition support.h:119
const char * advance_name_translation(const struct advance *padvance)
Definition tech.c:305
Tech_type_id advance_number(const struct advance *padvance)
Definition tech.c:100
#define advance_iterate(_p)
Definition tech.h:273
#define advance_iterate_end
Definition tech.h:274
#define A_LAST
Definition tech.h:45
struct sprite * get_nation_flag_sprite(const struct tileset *t, const struct nation_type *pnation)
Definition tilespec.c:7023