Freeciv-3.3
Loading...
Searching...
No Matches
client
gui-gtk-3.22
infradlg.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 <gtk/gtk.h>
19
20
/* utility */
21
#include "
fcintl.h
"
22
23
/* common */
24
#include "
extras.h
"
25
#include "
game.h
"
26
27
/* client */
28
#include "
client_main.h
"
29
#include "
dialogs_g.h
"
30
#include "
mapview_common.h
"
31
32
/* client/gui-gtk-3.22 */
33
#include "
gui_main.h
"
34
#include "
gui_stuff.h
"
35
36
#include "
infradlg.h
"
37
38
static
GtkWidget
*
infra_list_grid
=
NULL
;
39
static
GtkWidget
*
instruction_label
=
NULL
;
40
static
GtkWidget
*
points_label
=
NULL
;
41
static
int
infra_rows
= 0;
42
43
struct
infra_cb_data
{
44
struct
tile
*
ptile
;
45
struct
extra_type
*
pextra
;
46
};
47
48
/************************************************************************/
51
static
bool
infra_dialog_open
(
void
)
52
{
53
return
infra_list_grid
!=
NULL
;
54
}
55
56
/************************************************************************/
59
static
void
infra_response_callback
(
GtkWidget
*dlg,
gint
arg)
60
{
61
infra_list_grid
=
NULL
;
62
instruction_label
=
NULL
;
63
points_label
=
NULL
;
64
infra_rows
= 0;
65
66
client_infratile_set
(
NULL
);
67
68
gtk_widget_destroy
(dlg);
69
}
70
71
/************************************************************************/
74
static
void
infra_selected_callback
(
GtkButton
*
but
,
gpointer
userdata
)
75
{
76
struct
infra_cb_data
*
cbdata
= (
struct
infra_cb_data
*)
userdata
;
77
78
dsend_packet_player_place_infra
(&
client
.
conn
,
cbdata
->ptile->index,
79
cbdata
->pextra->
id
);
80
}
81
82
/************************************************************************/
85
void
infra_dialog_popup
(
void
)
86
{
87
GtkWidget
*dlg;
88
GtkWidget
*
main_box
;
89
GtkWidget
*
sep
;
90
91
if
(
infra_dialog_open
()) {
92
/* One infra dialog already open. */
93
return
;
94
}
95
96
dlg =
gtk_dialog_new_with_buttons
(
_
(
"Place infrastructure"
),
NULL
, 0,
97
_
(
"Close"
),
GTK_RESPONSE_NO
,
98
NULL
);
99
100
setup_dialog
(dlg,
toplevel
);
101
gtk_dialog_set_default_response
(
GTK_DIALOG
(dlg),
GTK_RESPONSE_NO
);
102
gtk_window_set_destroy_with_parent
(
GTK_WINDOW
(dlg),
TRUE
);
103
104
main_box
=
gtk_grid_new
();
105
gtk_orientable_set_orientation
(
GTK_ORIENTABLE
(
main_box
),
106
GTK_ORIENTATION_VERTICAL
);
107
108
instruction_label
=
gtk_label_new
(
_
(
"First click a tile."
));
109
gtk_container_add
(
GTK_CONTAINER
(
main_box
),
instruction_label
);
110
111
sep
=
gtk_separator_new
(
GTK_ORIENTATION_HORIZONTAL
);
112
gtk_container_add
(
GTK_CONTAINER
(
main_box
),
sep
);
113
114
points_label
=
gtk_label_new
(
_
(
"- infrapoints"
));
115
gtk_container_add
(
GTK_CONTAINER
(
main_box
),
points_label
);
116
117
sep
=
gtk_separator_new
(
GTK_ORIENTATION_HORIZONTAL
);
118
gtk_container_add
(
GTK_CONTAINER
(
main_box
),
sep
);
119
120
infra_list_grid
=
gtk_grid_new
();
121
gtk_container_add
(
GTK_CONTAINER
(
main_box
),
infra_list_grid
);
122
123
gtk_container_add
(
GTK_CONTAINER
(
gtk_dialog_get_content_area
(
GTK_DIALOG
(dlg))),
124
main_box
);
125
126
g_signal_connect
(dlg,
"destroy"
,
G_CALLBACK
(
infra_response_callback
),
NULL
);
127
g_signal_connect
(dlg,
"response"
,
G_CALLBACK
(
infra_response_callback
),
NULL
);
128
129
gtk_widget_show_all
(
gtk_dialog_get_content_area
(
GTK_DIALOG
(dlg)));
130
gtk_widget_show
(dlg);
131
132
update_infra_dialog
();
133
}
134
135
/************************************************************************/
138
void
update_infra_dialog
(
void
)
139
{
140
if
(
infra_dialog_open
()) {
141
char
buffer[100];
142
143
fc_snprintf
(buffer,
sizeof
(buffer),
144
PL_
(
"%d infrapoint"
,
"%d infrapoints"
,
145
client
.
conn
.
playing
->
economic
.
infra_points
),
146
client
.
conn
.
playing
->
economic
.
infra_points
);
147
148
gtk_label_set_text
(
GTK_LABEL
(
points_label
), buffer);
149
}
150
}
151
152
/************************************************************************/
155
bool
infra_placement_mode
(
void
)
156
{
157
return
infra_list_grid
!=
NULL
;
158
}
159
160
/************************************************************************/
163
void
infra_placement_set_tile
(
struct
tile
*
ptile
)
164
{
165
while
(
infra_rows
> 0) {
166
gtk_grid_remove_row
(
GTK_GRID
(
infra_list_grid
), --
infra_rows
);
167
}
168
169
if
(!
client_map_is_known_and_seen
(
ptile
,
client
.
conn
.
playing
,
V_MAIN
)) {
170
return
;
171
}
172
173
client_infratile_set
(
ptile
);
174
175
extra_type_iterate
(
pextra
) {
176
if
(
player_can_place_extra
(
pextra
,
client
.
conn
.
playing
,
ptile
)) {
177
GtkWidget
*
but
=
gtk_button_new_with_label
(
extra_name_translation
(
pextra
));
178
struct
infra_cb_data
*
cbdata
=
fc_malloc
(
sizeof
(
struct
infra_cb_data
));
179
180
cbdata
->ptile =
ptile
;
181
cbdata
->pextra =
pextra
;
182
183
g_signal_connect
(
but
,
"clicked"
,
184
G_CALLBACK
(
infra_selected_callback
),
cbdata
);
185
gtk_grid_attach
(
GTK_GRID
(
infra_list_grid
),
but
, 1,
infra_rows
++, 1, 1);
186
}
187
}
extra_type_iterate_end
;
188
189
if
(
infra_rows
<= 0) {
190
gtk_label_set_text
(
GTK_LABEL
(
instruction_label
),
191
_
(
"No infra possible. Select another tile."
));
192
}
else
{
193
gtk_label_set_text
(
GTK_LABEL
(
instruction_label
),
194
_
(
"Select infra for the tile, or another tile."
));
195
}
196
197
gtk_widget_show_all
(
infra_list_grid
);
198
}
client_map_is_known_and_seen
bool client_map_is_known_and_seen(const struct tile *ptile, const struct player *pplayer, enum vision_layer vlayer)
Definition
client_main.c:1390
client
struct civclient client
Definition
client_main.c:154
client_main.h
incite_cost
char * incite_cost
Definition
comments.c:76
dialogs_g.h
player_can_place_extra
bool player_can_place_extra(const struct extra_type *pextra, const struct player *pplayer, const struct tile *ptile)
Definition
extras.c:490
extra_name_translation
const char * extra_name_translation(const struct extra_type *pextra)
Definition
extras.c:194
extras.h
extra_type_iterate
#define extra_type_iterate(_p)
Definition
extras.h:315
extra_type_iterate_end
#define extra_type_iterate_end
Definition
extras.h:321
fcintl.h
PL_
#define PL_(String1, String2, n)
Definition
fcintl.h:71
_
#define _(String)
Definition
fcintl.h:67
game.h
toplevel
GtkWidget * toplevel
Definition
gui_main.c:126
setup_dialog
void setup_dialog(GtkWidget *shell, GtkWidget *parent)
Definition
gui_stuff.c:287
instruction_label
static GtkWidget * instruction_label
Definition
infradlg.c:39
infra_response_callback
static void infra_response_callback(GtkWidget *dlg, gint arg)
Definition
infradlg.c:59
infra_placement_mode
bool infra_placement_mode(void)
Definition
infradlg.c:155
infra_dialog_open
static bool infra_dialog_open(void)
Definition
infradlg.c:51
infra_selected_callback
static void infra_selected_callback(GtkButton *but, gpointer userdata)
Definition
infradlg.c:74
infra_placement_set_tile
void infra_placement_set_tile(struct tile *ptile)
Definition
infradlg.c:163
points_label
static GtkWidget * points_label
Definition
infradlg.c:40
infra_list_grid
static GtkWidget * infra_list_grid
Definition
infradlg.c:38
infra_rows
static int infra_rows
Definition
infradlg.c:41
update_infra_dialog
void update_infra_dialog(void)
Definition
infradlg.c:138
infra_dialog_popup
void infra_dialog_popup(void)
Definition
infradlg.c:85
gui_stuff.h
infradlg.h
gui_main.h
client_infratile_set
void client_infratile_set(struct tile *ptile)
Definition
mapview_common.c:4079
mapview_common.h
fc_malloc
#define fc_malloc(sz)
Definition
mem.h:34
dsend_packet_player_place_infra
int dsend_packet_player_place_infra(struct connection *pc, int tile, int extra)
Definition
packets_gen.c:29598
civclient::conn
struct connection conn
Definition
client_main.h:96
connection::playing
struct player * playing
Definition
connection.h:151
connection::id
int id
Definition
connection.h:137
extra_type
Definition
extras.h:88
infra_cb_data
Definition
infradlg.c:43
infra_cb_data::pextra
struct extra_type * pextra
Definition
infradlg.c:45
infra_cb_data::ptile
struct tile * ptile
Definition
infradlg.c:44
player_economic::infra_points
int infra_points
Definition
player.h:67
player::economic
struct player_economic economic
Definition
player.h:284
tile
Definition
tile.h:50
fc_snprintf
int fc_snprintf(char *str, size_t n, const char *format,...)
Definition
support.c:960
TRUE
#define TRUE
Definition
support.h:46
Generated on Sun Dec 22 2024 22:30:34 for Freeciv-3.3 by
1.9.8