[Freeciv-Dev] (PR#7316) Remove government knowledge from clients
[Top] [All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
<URL: http://rt.freeciv.org/Ticket/Display.html?id=7316 >
> [i-freeciv-lists@xxxxxxxxxxxxx - Sun Jan 25 16:03:11 2004]:
>
>
> The clients know too much. Especially that you can't change to
> anarchy. This doesn't have to be duplicated over all clients.
>
> I have tested gtk1 and xaw. I have changed gtk2 but didn't compile it.
Two changes:
1. No alloc/free is needed; just use an array.
2. Fixed compile bug in gtk2 (g instead of government[i]).
Tested under gtk2 only.
jason
Index: client/packhand.c
===================================================================
RCS file: /home/freeciv/CVS/freeciv/client/packhand.c,v
retrieving revision 1.345
diff -u -r1.345 packhand.c
--- client/packhand.c 2004/01/20 21:52:07 1.345
+++ client/packhand.c 2004/01/27 06:27:33
@@ -1440,7 +1440,20 @@
government_selected = FALSE;
} else if (!client_is_observer()) {
- popup_government_dialog();
+ int i = 0, governments = game.government_count - 1;
+ struct government *government[governments];
+
+ assert(game.government_when_anarchy >= 0
+ && game.government_when_anarchy < game.government_count);
+
+ government_iterate(g) {
+ if (g->index != game.government_when_anarchy) {
+ government[i] = g;
+ i++;
+ }
+ } government_iterate_end;
+
+ popup_government_dialog(governments, government);
}
}
Index: client/gui-gtk/dialogs.c
===================================================================
RCS file: /home/freeciv/CVS/freeciv/client/gui-gtk/dialogs.c,v
retrieving revision 1.133
diff -u -r1.133 dialogs.c
--- client/gui-gtk/dialogs.c 2004/01/12 16:59:16 1.133
+++ client/gui-gtk/dialogs.c 2004/01/27 06:27:33
@@ -1188,40 +1188,29 @@
/****************************************************************
...
*****************************************************************/
-void popup_government_dialog(void)
+void popup_government_dialog(int governments,
+ struct government **government)
{
- int num, i, j;
+ int i;
struct button_descr *buttons;
if (government_dialog_is_open) {
return;
}
- assert(game.government_when_anarchy >= 0
- && game.government_when_anarchy < game.government_count);
- num = game.government_count - 1;
+ buttons = fc_malloc(sizeof(struct button_descr) * governments);
- buttons = fc_malloc(sizeof(struct button_descr) * num);
-
- j = 0;
- for (i = 0; i < game.government_count; i++) {
- struct government *g = &governments[i];
-
- if (i == game.government_when_anarchy) {
- continue;
- }
-
- buttons[j].text = g->name;
- buttons[j].callback = government_callback;
- buttons[j].data = GINT_TO_POINTER(i);
- buttons[j].sensitive = can_change_to_government(game.player_ptr, i);
- j++;
+ for (i = 0; i < governments; i++) {
+ buttons[i].text = government[i]->name;
+ buttons[i].callback = government_callback;
+ buttons[i].data = GINT_TO_POINTER(i);
+ buttons[i].sensitive = can_change_to_government(game.player_ptr, i);
}
government_dialog_is_open = TRUE;
base_popup_message_dialog(top_vbox, _("Choose Your New Government"),
_("Select government type:"), NULL, NULL,
- num, buttons);
+ governments, buttons);
}
/****************************************************************
Index: client/gui-gtk-2.0/dialogs.c
===================================================================
RCS file: /home/freeciv/CVS/freeciv/client/gui-gtk-2.0/dialogs.c,v
retrieving revision 1.57
diff -u -r1.57 dialogs.c
--- client/gui-gtk-2.0/dialogs.c 2004/01/12 16:59:16 1.57
+++ client/gui-gtk-2.0/dialogs.c 2004/01/27 06:27:33
@@ -1062,7 +1062,8 @@
/****************************************************************
...
*****************************************************************/
-void popup_government_dialog(void)
+void popup_government_dialog(int governments,
+ struct government **government)
{
int i;
GtkWidget *dshell, *dlabel, *vbox;
@@ -1092,50 +1093,38 @@
gtk_container_add(GTK_CONTAINER(dlabel), vbox);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
- for (i = 0; i < game.government_count; i++) {
- struct government *g = &governments[i];
-
- if (i != game.government_when_anarchy) {
- GtkWidget *label, *image, *hbox, *align, *button;
- struct Sprite *gsprite;
-
- /* create button. */
- button = gtk_button_new();
-
- label = gtk_label_new_with_mnemonic(g->name);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), button);
-
- gsprite = get_government(g->index)->sprite;
-
- image = gtk_image_new_from_pixmap(gsprite->pixmap, gsprite->mask);
- hbox = gtk_hbox_new(FALSE, 2);
-
- align = gtk_alignment_new(0.5, 0.5, 0.0, 0.0);
-
- gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(hbox), align, TRUE, FALSE, 5);
-
- gtk_container_add(GTK_CONTAINER(align), label);
- gtk_container_add(GTK_CONTAINER(button), hbox);
-
- /* tidy up. */
- gtk_container_add(GTK_CONTAINER(vbox), button);
- g_signal_connect(
- button,
- "clicked",
- G_CALLBACK(government_callback),
- GINT_TO_POINTER(g->index)
- );
- g_signal_connect_swapped(
- button,
- "clicked",
- G_CALLBACK(gtk_widget_destroy),
- dshell
- );
-
- if (!can_change_to_government(game.player_ptr, i))
- gtk_widget_set_sensitive(button, FALSE);
- }
+ for (i = 0; i < governments; i++) {
+ GtkWidget *label, *image, *hbox, *align, *button;
+ struct Sprite *gsprite = government[i]->sprite;
+
+ /* create button. */
+ button = gtk_button_new();
+
+ label = gtk_label_new_with_mnemonic(government[i]->name);
+ gtk_label_set_mnemonic_widget(GTK_LABEL(label), button);
+
+ image = gtk_image_new_from_pixmap(gsprite->pixmap, gsprite->mask);
+ hbox = gtk_hbox_new(FALSE, 2);
+
+ align = gtk_alignment_new(0.5, 0.5, 0.0, 0.0);
+
+ gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox), align, TRUE, FALSE, 5);
+
+ gtk_container_add(GTK_CONTAINER(align), label);
+ gtk_container_add(GTK_CONTAINER(button), hbox);
+
+ /* tidy up. */
+ gtk_container_add(GTK_CONTAINER(vbox), button);
+ g_signal_connect(button, "clicked", G_CALLBACK(government_callback),
+ GINT_TO_POINTER(government[i]->index));
+ g_signal_connect_swapped(button, "clicked",
+ G_CALLBACK(gtk_widget_destroy), dshell);
+
+ gtk_widget_set_sensitive(button,
+ can_change_to_government(game.player_ptr,
+ government[i]->
+ index));
}
gtk_widget_show_all(dlabel);
Index: client/gui-xaw/dialogs.c
===================================================================
RCS file: /home/freeciv/CVS/freeciv/client/gui-xaw/dialogs.c,v
retrieving revision 1.90
diff -u -r1.90 dialogs.c
--- client/gui-xaw/dialogs.c 2003/11/28 17:37:20 1.90
+++ client/gui-xaw/dialogs.c 2004/01/27 06:27:34
@@ -1231,10 +1231,11 @@
/****************************************************************
...
*****************************************************************/
-void popup_government_dialog(void)
+void popup_government_dialog(int governments,
+ struct government **government)
{
- Widget shell, form, dlabel, button, prev;
- int i, can_change;
+ Widget shell, form, dlabel, prev;
+ int i;
if(is_showing_government_dialog) {
return;
@@ -1249,23 +1250,23 @@
dlabel = I_L(XtVaCreateManagedWidget("dlabel", labelWidgetClass, form,
NULL));
prev = dlabel;
- for (i = 0; i < game.government_count; i++) {
- if (i == game.government_when_anarchy) continue;
- can_change = can_change_to_government(game.player_ptr, i);
- button = XtVaCreateManagedWidget("button", commandWidgetClass, form,
- XtNfromVert, prev,
- XtNlabel, (XtArgVal)governments[i].name,
- NULL);
+ for (i = 0; i < governments; i++) {
+ Widget button =
+ XtVaCreateManagedWidget("button", commandWidgetClass, form,
+ XtNfromVert, prev,
+ XtNlabel, (XtArgVal) government[i]->name,
+ NULL);
XtAddCallback(button, XtNcallback, government_callback,
- INT_TO_XTPOINTER(i));
- XtSetSensitive(button, can_change ? TRUE : FALSE);
+ INT_TO_XTPOINTER(government[i]->index));
+ XtSetSensitive(button,
+ can_change_to_government(game.player_ptr,
+ government[i]->index));
prev = button;
}
xaw_set_relative_position(toplevel, shell, 10, 0);
XtPopup(shell, XtGrabNone);
}
-
/****************************************************************
...
Index: client/include/dialogs_g.h
===================================================================
RCS file: /home/freeciv/CVS/freeciv/client/include/dialogs_g.h,v
retrieving revision 1.13
diff -u -r1.13 dialogs_g.h
--- client/include/dialogs_g.h 2003/11/28 17:37:20 1.13
+++ client/include/dialogs_g.h 2004/01/27 06:27:34
@@ -33,7 +33,8 @@
Nation_Type_id * nations_used);
void popup_revolution_dialog(void);
-void popup_government_dialog(void);
+void popup_government_dialog(int governments,
+ struct government **government);
void popup_caravan_dialog(struct unit *punit,
struct city *phomecity, struct city *pdestcity);
bool caravan_dialog_is_open(void);
|
|