Author: sveinung
Date: Wed Jan 20 19:35:54 2016
New Revision: 31517

URL: http://svn.gna.org/viewcvs/freeciv?rev=31517&view=rev
Log:
act sel dlg: "Home City" button.

A button in the action selection dialog communicates the uncertainty if a
rule depends on information the player doesn't have.

See patch #6824

Modified:
    trunk/client/gui-gtk-2.0/action_dialog.c
    trunk/client/gui-gtk-3.0/action_dialog.c
    trunk/client/gui-gtk-3.x/action_dialog.c
    trunk/client/gui-qt/dialogs.cpp
    trunk/client/gui-sdl2/action_dialog.c

Modified: trunk/client/gui-gtk-2.0/action_dialog.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-gtk-2.0/action_dialog.c?rev=31517&r1=31516&r2=31517&view=diff
==============================================================================
--- trunk/client/gui-gtk-2.0/action_dialog.c    (original)
+++ trunk/client/gui-gtk-2.0/action_dialog.c    Wed Jan 20 19:35:54 2016
@@ -230,6 +230,23 @@
 
   request_do_action(ACTION_RECYCLE_UNIT, args->actor_unit_id,
                     args->target_city_id, 0, "");
+
+  gtk_widget_destroy(act_sel_dialog);
+  free(args);
+}
+
+/****************************************************************
+  User selected set home city from choice dialog.
+*****************************************************************/
+static void home_city_callback(GtkWidget *w, gpointer data)
+{
+  struct action_data *args = (struct action_data *)data;
+
+  if (NULL != game_unit_by_number(args->actor_unit_id)
+      && NULL != game_city_by_number(args->target_city_id)) {
+    request_do_action(ACTION_HOME_CITY, args->actor_unit_id,
+                      args->target_city_id, 0, "");
+  }
 
   gtk_widget_destroy(act_sel_dialog);
   free(args);
@@ -1137,6 +1154,7 @@
   [ACTION_SPY_NUKE] = (GCallback)spy_nuke_city_callback,
   [ACTION_DESTROY_CITY] = (GCallback)destroy_city_callback,
   [ACTION_RECYCLE_UNIT] = (GCallback)recycle_unit_callback,
+  [ACTION_HOME_CITY] = (GCallback)home_city_callback,
 
   /* Unit acting against a unit target. */
   [ACTION_SPY_BRIBE_UNIT] = (GCallback)diplomat_bribe_callback,

Modified: trunk/client/gui-gtk-3.0/action_dialog.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-gtk-3.0/action_dialog.c?rev=31517&r1=31516&r2=31517&view=diff
==============================================================================
--- trunk/client/gui-gtk-3.0/action_dialog.c    (original)
+++ trunk/client/gui-gtk-3.0/action_dialog.c    Wed Jan 20 19:35:54 2016
@@ -230,6 +230,23 @@
 
   request_do_action(ACTION_RECYCLE_UNIT, args->actor_unit_id,
                     args->target_city_id, 0, "");
+
+  gtk_widget_destroy(act_sel_dialog);
+  free(args);
+}
+
+/****************************************************************
+  User selected set home city from choice dialog.
+*****************************************************************/
+static void home_city_callback(GtkWidget *w, gpointer data)
+{
+  struct action_data *args = (struct action_data *)data;
+
+  if (NULL != game_unit_by_number(args->actor_unit_id)
+      && NULL != game_city_by_number(args->target_city_id)) {
+    request_do_action(ACTION_HOME_CITY, args->actor_unit_id,
+                      args->target_city_id, 0, "");
+  }
 
   gtk_widget_destroy(act_sel_dialog);
   free(args);
@@ -1147,6 +1164,7 @@
   [ACTION_SPY_NUKE] = (GCallback)spy_nuke_city_callback,
   [ACTION_DESTROY_CITY] = (GCallback)destroy_city_callback,
   [ACTION_RECYCLE_UNIT] = (GCallback)recycle_unit_callback,
+  [ACTION_HOME_CITY] = (GCallback)home_city_callback,
 
   /* Unit acting against a unit target. */
   [ACTION_SPY_BRIBE_UNIT] = (GCallback)diplomat_bribe_callback,

Modified: trunk/client/gui-gtk-3.x/action_dialog.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-gtk-3.x/action_dialog.c?rev=31517&r1=31516&r2=31517&view=diff
==============================================================================
--- trunk/client/gui-gtk-3.x/action_dialog.c    (original)
+++ trunk/client/gui-gtk-3.x/action_dialog.c    Wed Jan 20 19:35:54 2016
@@ -230,6 +230,23 @@
 
   request_do_action(ACTION_RECYCLE_UNIT, args->actor_unit_id,
                     args->target_city_id, 0, "");
+
+  gtk_widget_destroy(act_sel_dialog);
+  free(args);
+}
+
+/****************************************************************
+  User selected set home city from choice dialog.
+*****************************************************************/
+static void home_city_callback(GtkWidget *w, gpointer data)
+{
+  struct action_data *args = (struct action_data *)data;
+
+  if (NULL != game_unit_by_number(args->actor_unit_id)
+      && NULL != game_city_by_number(args->target_city_id)) {
+    request_do_action(ACTION_HOME_CITY, args->actor_unit_id,
+                      args->target_city_id, 0, "");
+  }
 
   gtk_widget_destroy(act_sel_dialog);
   free(args);
@@ -1141,6 +1158,7 @@
   [ACTION_SPY_NUKE] = (GCallback)spy_nuke_city_callback,
   [ACTION_DESTROY_CITY] = (GCallback)destroy_city_callback,
   [ACTION_RECYCLE_UNIT] = (GCallback)recycle_unit_callback,
+  [ACTION_HOME_CITY] = (GCallback)home_city_callback,
 
   /* Unit acting against a unit target. */
   [ACTION_SPY_BRIBE_UNIT] = (GCallback)diplomat_bribe_callback,

Modified: trunk/client/gui-qt/dialogs.cpp
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-qt/dialogs.cpp?rev=31517&r1=31516&r2=31517&view=diff
==============================================================================
--- trunk/client/gui-qt/dialogs.cpp     (original)
+++ trunk/client/gui-qt/dialogs.cpp     Wed Jan 20 19:35:54 2016
@@ -90,6 +90,7 @@
 static void nuke(QVariant data1, QVariant data2);
 static void disband_unit(QVariant data1, QVariant data2);
 static void join_city(QVariant data1, QVariant data2);
+static void unit_home_city(QVariant data1, QVariant data2);
 static void keep_moving(QVariant data1, QVariant data2);
 static void pillage_something(QVariant data1, QVariant data2);
 static void action_entry(choice_dialog *cd,
@@ -136,6 +137,7 @@
   action_function[ACTION_SPY_NUKE] = spy_nuke_city;
   action_function[ACTION_DESTROY_CITY] = destroy_city;
   action_function[ACTION_RECYCLE_UNIT] = unit_recycle;
+  action_function[ACTION_HOME_CITY] = unit_home_city;
 
   /* Unit acting against a unit target. */
   action_function[ACTION_SPY_BRIBE_UNIT] = diplomat_bribe;
@@ -1230,11 +1232,27 @@
 }
 
 /***************************************************************************
+  Action Home City for choice dialog
+***************************************************************************/
+static void unit_home_city(QVariant data1, QVariant data2)
+{
+  int actor_id = data1.toInt();
+  int tgt_city_id = data2.toInt();
+
+  if (NULL != game_unit_by_number(actor_id)
+      && NULL != game_city_by_number(tgt_city_id)) {
+    request_do_action(ACTION_HOME_CITY,
+                      actor_id, tgt_city_id, 0, "");
+  }
+}
+
+/***************************************************************************
   Empty action for choice dialog (just do nothing)
 ***************************************************************************/
 static void keep_moving(QVariant data1, QVariant data2)
 {
 }
+
 /***************************************************************************
   Starts revolution with targeted government as target or anarchy otherwise
 ***************************************************************************/

Modified: trunk/client/gui-sdl2/action_dialog.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-sdl2/action_dialog.c?rev=31517&r1=31516&r2=31517&view=diff
==============================================================================
--- trunk/client/gui-sdl2/action_dialog.c       (original)
+++ trunk/client/gui-sdl2/action_dialog.c       Wed Jan 20 19:35:54 2016
@@ -906,6 +906,28 @@
                       actor_id, target_id, 0, "");
 
     action_decision_taken(actor_id);
+  }
+
+  return -1;
+}
+
+/****************************************************************
+  User clicked "Set Home City"
+*****************************************************************/
+static int home_city_callback(struct widget *pWidget)
+{
+  if (Main.event.button.button == SDL_BUTTON_LEFT) {
+    if (NULL != game_city_by_number(
+          pDiplomat_Dlg->target_ids[ATK_CITY])
+        && NULL != game_unit_by_number(pDiplomat_Dlg->actor_unit_id)) {
+      request_do_action(ACTION_HOME_CITY,
+                        pDiplomat_Dlg->actor_unit_id,
+                        pDiplomat_Dlg->target_ids[ATK_CITY],
+                        0, "");
+    }
+
+    action_decision_taken(pDiplomat_Dlg->actor_unit_id);
+    popdown_diplomat_dialog();
   }
 
   return -1;
@@ -962,6 +984,7 @@
   [ACTION_SPY_NUKE] = spy_nuke_city_callback,
   [ACTION_DESTROY_CITY] = destroy_city_callback,
   [ACTION_RECYCLE_UNIT] = unit_recycle_callback,
+  [ACTION_HOME_CITY] = home_city_callback,
 
   /* Unit acting against a unit target. */
   [ACTION_SPY_BRIBE_UNIT] = diplomat_bribe_callback,


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

Reply via email to