Author: jtn
Date: Tue May 12 09:25:44 2015
New Revision: 29069

URL: http://svn.gna.org/viewcvs/freeciv?rev=29069&view=rev
Log:
Show the current settings in force on the multipliers dialog.

See gna patch #6079.

Modified:
    branches/S2_6/INSTALL
    branches/S2_6/client/gui-gtk-2.0/gamedlgs.c
    branches/S2_6/client/gui-gtk-3.0/gamedlgs.c

Modified: branches/S2_6/INSTALL
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/INSTALL?rev=29069&r1=29068&r2=29069&view=diff
==============================================================================
--- branches/S2_6/INSTALL       (original)
+++ branches/S2_6/INSTALL       Tue May 12 09:25:44 2015
@@ -170,6 +170,8 @@
        Provides image loading/saving facilities.
 
    Freeciv requires a version of "Gtk+" greater or equal to 2.12.0.
+   At least 2.16.0 is recommended; some minor UI features will be
+   missing with earlier versions.
 
    If the Freeciv configure process tells you that you don't have the
    Gtk+ library installed, then it may be obtained from here:

Modified: branches/S2_6/client/gui-gtk-2.0/gamedlgs.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/gui-gtk-2.0/gamedlgs.c?rev=29069&r1=29068&r2=29069&view=diff
==============================================================================
--- branches/S2_6/client/gui-gtk-2.0/gamedlgs.c (original)
+++ branches/S2_6/client/gui-gtk-2.0/gamedlgs.c Tue May 12 09:25:44 2015
@@ -264,7 +264,37 @@
 }
 
 /**************************************************************************
-  Update multipliers dialog (for player observers)
+  Update values in multipliers dialog
+**************************************************************************/
+static void multiplier_dialog_update_values(bool set_positions)
+{
+  multipliers_iterate(pmul) {
+    Multiplier_type_id multiplier = multiplier_index(pmul);
+    int val = player_multiplier_value(client_player(), pmul);
+    int target = player_multiplier_target_value(client_player(), pmul);
+
+    fc_assert(multiplier < ARRAY_SIZE(multipliers_scale));
+    fc_assert(scale_to_mult(pmul, mult_to_scale(pmul, val)) == val);
+    fc_assert(scale_to_mult(pmul, mult_to_scale(pmul, target)) == target);
+
+    /* XXX: if building against ancient Gtk, manage without this bit of UI. */
+#if GTK_CHECK_VERSION(2,16,0)
+    gtk_scale_clear_marks(GTK_SCALE(multipliers_scale[multiplier]));
+    gtk_scale_add_mark(GTK_SCALE(multipliers_scale[multiplier]),
+                       mult_to_scale(pmul, val), GTK_POS_BOTTOM,
+                       /* TRANS: current value of policy in force */
+                       Q_("?multiplier:Cur"));
+#endif
+
+    if (set_positions) {
+      gtk_range_set_value(GTK_RANGE(multipliers_scale[multiplier]),
+                          mult_to_scale(pmul, target));
+    }
+  } multipliers_iterate_end;
+}
+
+/**************************************************************************
+  Callback when server indicates multiplier values have changed
 **************************************************************************/
 void real_multipliers_dialog_update(void)
 {
@@ -272,19 +302,10 @@
     return;
   }
 
-  if (can_client_issue_orders()) {
-    /* We don't want to lose the player's local changes. This dialog
-     * should be the only way the values can change, anyway. */
-    return;
-  }
-
-  multipliers_iterate(pmul) {
-    Multiplier_type_id multiplier = multiplier_index(pmul);
-    int val = player_multiplier_target_value(client_player(), pmul);
-
-    gtk_range_set_value(GTK_RANGE(multipliers_scale[multiplier]),
-                        mult_to_scale(pmul, val));
-  } multipliers_iterate_end;
+  /* If dialog belongs to a player rather than an observer, we don't
+   * want to lose any local changes made by the player.
+   * This dialog should be the only way the values can change, anyway. */
+  multiplier_dialog_update_values(!can_client_issue_orders());
 }
 
 /****************************************************************
@@ -294,7 +315,6 @@
 {
   GtkWidget     *shell, *content;
   GtkWidget     *label, *scale;
-  struct player *pplayer = client_player();
 
   if (can_client_issue_orders()) {
     shell = gtk_dialog_new_with_buttons(_("Change policies"),
@@ -317,6 +337,11 @@
   gtk_window_set_position(GTK_WINDOW(shell), GTK_WIN_POS_MOUSE);
   content = gtk_dialog_get_content_area(GTK_DIALOG(shell));
 
+  if (can_client_issue_orders()) {
+    label = gtk_label_new(_("Changes will not take effect until next turn."));
+    gtk_box_pack_start( GTK_BOX( content ), label, FALSE, FALSE, 0);
+  }
+
   multipliers_iterate(pmul) {
     Multiplier_type_id multiplier = multiplier_index(pmul);
 
@@ -329,13 +354,6 @@
     multipliers_scale[multiplier] = scale;
     gtk_range_set_increments(GTK_RANGE(multipliers_scale[multiplier]),
                              1, MAX(2, mult_to_scale(pmul, pmul->stop) / 10));
-    {
-      int val = player_multiplier_target_value(pplayer, pmul);
-
-      fc_assert(scale_to_mult(pmul, mult_to_scale(pmul, val)) == val);
-      gtk_range_set_value(GTK_RANGE(multipliers_scale[multiplier]),
-                          mult_to_scale(pmul, val));
-    }
     g_signal_connect(multipliers_scale[multiplier], "format-value",
                      G_CALLBACK(multiplier_value_callback), pmul);
     g_signal_connect(multipliers_scale[multiplier], "destroy",
@@ -346,6 +364,8 @@
     gtk_widget_set_sensitive(multipliers_scale[multiplier],
                              can_client_issue_orders());
   } multipliers_iterate_end;
+
+  multiplier_dialog_update_values(TRUE);
 
   g_signal_connect(shell, "destroy",
                    G_CALLBACK(gtk_widget_destroyed), &multiplier_dialog_shell);

Modified: branches/S2_6/client/gui-gtk-3.0/gamedlgs.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/gui-gtk-3.0/gamedlgs.c?rev=29069&r1=29068&r2=29069&view=diff
==============================================================================
--- branches/S2_6/client/gui-gtk-3.0/gamedlgs.c (original)
+++ branches/S2_6/client/gui-gtk-3.0/gamedlgs.c Tue May 12 09:25:44 2015
@@ -262,7 +262,34 @@
 }
 
 /**************************************************************************
-  Update multipliers dialog (for player observers)
+  Update values in multipliers dialog
+**************************************************************************/
+static void multiplier_dialog_update_values(bool set_positions)
+{
+  multipliers_iterate(pmul) {
+    Multiplier_type_id multiplier = multiplier_index(pmul);
+    int val = player_multiplier_value(client_player(), pmul);
+    int target = player_multiplier_target_value(client_player(), pmul);
+
+    fc_assert(multiplier < ARRAY_SIZE(multipliers_scale));
+    fc_assert(scale_to_mult(pmul, mult_to_scale(pmul, val)) == val);
+    fc_assert(scale_to_mult(pmul, mult_to_scale(pmul, target)) == target);
+
+    gtk_scale_clear_marks(GTK_SCALE(multipliers_scale[multiplier]));
+    gtk_scale_add_mark(GTK_SCALE(multipliers_scale[multiplier]),
+                       mult_to_scale(pmul, val), GTK_POS_BOTTOM,
+                       /* TRANS: current value of policy in force */
+                       Q_("?multiplier:Cur"));
+
+    if (set_positions) {
+      gtk_range_set_value(GTK_RANGE(multipliers_scale[multiplier]),
+                          mult_to_scale(pmul, target));
+    }
+  } multipliers_iterate_end;
+}
+
+/**************************************************************************
+  Callback when server indicates multiplier values have changed
 **************************************************************************/
 void real_multipliers_dialog_update(void)
 {
@@ -270,19 +297,10 @@
     return;
   }
 
-  if (can_client_issue_orders()) {
-    /* We don't want to lose the player's local changes. This dialog
-     * should be the only way the values can change, anyway. */
-    return;
-  }
-
-  multipliers_iterate(pmul) {
-    Multiplier_type_id multiplier = multiplier_index(pmul);
-    int val = player_multiplier_target_value(client_player(), pmul);
-
-    gtk_range_set_value(GTK_RANGE(multipliers_scale[multiplier]),
-                        mult_to_scale(pmul, val));
-  } multipliers_iterate_end;
+  /* If dialog belongs to a player rather than an observer, we don't
+   * want to lose any local changes made by the player.
+   * This dialog should be the only way the values can change, anyway. */
+  multiplier_dialog_update_values(!can_client_issue_orders());
 }
 
 /****************************************************************
@@ -292,7 +310,6 @@
 {
   GtkWidget     *shell, *content;
   GtkWidget     *label, *scale;
-  struct player *pplayer = client_player();
 
   if (can_client_issue_orders()) {
     shell = gtk_dialog_new_with_buttons(_("Change policies"),
@@ -315,6 +332,11 @@
   gtk_window_set_position(GTK_WINDOW(shell), GTK_WIN_POS_MOUSE);
   content = gtk_dialog_get_content_area(GTK_DIALOG(shell));
 
+  if (can_client_issue_orders()) {
+    label = gtk_label_new(_("Changes will not take effect until next turn."));
+    gtk_box_pack_start( GTK_BOX( content ), label, FALSE, FALSE, 0);
+  }
+
   multipliers_iterate(pmul) {
     Multiplier_type_id multiplier = multiplier_index(pmul);
 
@@ -328,13 +350,6 @@
     multipliers_scale[multiplier] = scale;
     gtk_range_set_increments(GTK_RANGE(multipliers_scale[multiplier]),
                              1, MAX(2, mult_to_scale(pmul, pmul->stop) / 10));
-    {
-      int val = player_multiplier_target_value(pplayer, pmul);
-
-      fc_assert(scale_to_mult(pmul, mult_to_scale(pmul, val)) == val);
-      gtk_range_set_value(GTK_RANGE(multipliers_scale[multiplier]),
-                          mult_to_scale(pmul, val));
-    }
     g_signal_connect(multipliers_scale[multiplier], "format-value",
                      G_CALLBACK(multiplier_value_callback), pmul);
     g_signal_connect(multipliers_scale[multiplier], "destroy",
@@ -345,6 +360,8 @@
     gtk_widget_set_sensitive(multipliers_scale[multiplier],
                              can_client_issue_orders());
   } multipliers_iterate_end;
+
+  multiplier_dialog_update_values(TRUE);
 
   g_signal_connect(shell, "destroy",
                    G_CALLBACK(gtk_widget_destroyed), &multiplier_dialog_shell);


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to