Author: mir3x
Date: Sun Nov  6 22:08:57 2016
New Revision: 34411

URL: http://svn.gna.org/viewcvs/freeciv?rev=34411&view=rev
Log:
Qt client - added menu to choose default unit action bypassing choice dialog

See patch #7932

Modified:
    trunk/client/gui-qt/dialogs.cpp
    trunk/client/gui-qt/dialogs.h
    trunk/client/gui-qt/menu.cpp
    trunk/client/gui-qt/menu.h

Modified: trunk/client/gui-qt/dialogs.cpp
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-qt/dialogs.cpp?rev=34411&r1=34410&r2=34411&view=diff
==============================================================================
--- trunk/client/gui-qt/dialogs.cpp     (original)
+++ trunk/client/gui-qt/dialogs.cpp     Sun Nov  6 22:08:57 2016
@@ -121,6 +121,8 @@
  unit that wants a decision in the current unit selection. */
 static bool did_not_decide = false;
 
+qdef_act* qdef_act::m_instance = 0;
+
 /**********************************************************************
   Initialize a mapping between an action and the function to call if
   the action's button is pushed.
@@ -774,6 +776,68 @@
   destroy();
 }
 
+/****************************************************************************
+  Default actions provider constructor
+****************************************************************************/
+qdef_act::qdef_act()
+{
+  vs_city = -1;
+  vs_unit = -1;
+}
+
+/****************************************************************************
+  Returns instance of qdef_act
+****************************************************************************/
+qdef_act *qdef_act::action()
+{
+  if (!m_instance)
+    m_instance = new qdef_act;
+  return m_instance;
+}
+
+/****************************************************************************
+  Deletes qdef_act instance
+****************************************************************************/
+void qdef_act::drop()
+{
+  if (m_instance) {
+    delete m_instance;
+    m_instance = 0;
+  }
+}
+
+/****************************************************************************
+  Sets default action vs city
+****************************************************************************/
+void qdef_act::vs_city_set(int i)
+{
+  vs_city = i;
+}
+
+/****************************************************************************
+  Sets default action vs unit
+****************************************************************************/
+void qdef_act::vs_unit_set(int i)
+{
+  vs_unit = i;
+}
+
+/****************************************************************************
+  Returns default action vs city
+****************************************************************************/
+int qdef_act::vs_city_get()
+{
+  return vs_city;
+}
+
+/****************************************************************************
+  Returns default action vs unit
+****************************************************************************/
+int qdef_act::vs_unit_get()
+{
+  return vs_unit;
+}
+
 /***************************************************************************
   Button canceling all selections has been pressed. 
 ***************************************************************************/
@@ -1163,6 +1227,41 @@
 }
 
 /***************************************************************************
+  Try to pick up default unit action
+***************************************************************************/
+bool try_default_unit_action(QVariant q1, QVariant q2)
+{
+  int action;
+  pfcn_void func;
+
+  action = qdef_act::action()->vs_unit_get();
+  if (action == -1) {
+    return false;
+  }
+  func = af_map[static_cast<gen_action>(action)];
+
+  func(q1, q2);
+  return true;
+}
+
+/***************************************************************************
+  Try to pick up default city action
+***************************************************************************/
+bool try_default_city_action(QVariant q1, QVariant q2)
+{
+  int action;
+  pfcn_void func;
+
+  action = qdef_act::action()->vs_city_get();
+  if (action == -1) {
+    return false;
+  }
+  func = af_map[static_cast<gen_action>(action)];
+  func(q1, q2);
+  return true;
+}
+
+/***************************************************************************
   Run chosen action and close dialog
 ***************************************************************************/
 void choice_dialog::execute_action(const int action)
@@ -1431,7 +1530,25 @@
   QVariant qv1, qv2;
   pfcn_void func;
   struct city *actor_homecity;
-
+  int unit_act;
+  int city_act;
+
+  unit_act = qdef_act::action()->vs_unit_get();
+  city_act = qdef_act::action()->vs_city_get();
+
+  if (target_city
+      && try_default_city_action(actor_unit->id, target_city->id)
+      && action_prob_possible(act_probs[static_cast<gen_action>(unit_act)])) {
+    diplomat_queue_handle_primary(actor_unit->id);
+    return;
+  }
+
+  if (target_unit
+      && try_default_unit_action(actor_unit->id, target_unit->id)
+      && action_prob_possible(act_probs[static_cast<gen_action>(city_act)])) {
+    diplomat_queue_handle_primary(actor_unit->id);
+    return;
+  }
   /* Could be caused by the server failing to reply to a request for more
    * information or a bug in the client code. */
   fc_assert_msg(!is_more_user_input_needed,

Modified: trunk/client/gui-qt/dialogs.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-qt/dialogs.h?rev=34411&r1=34410&r2=34411&view=diff
==============================================================================
--- trunk/client/gui-qt/dialogs.h       (original)
+++ trunk/client/gui-qt/dialogs.h       Sun Nov  6 22:08:57 2016
@@ -47,6 +47,25 @@
 void update_nationset_combo();
 void popup_races_dialog(struct player *pplayer);
 void restart_notify_dialogs();
+
+
+class qdef_act
+{
+  Q_DISABLE_COPY(qdef_act);
+
+private:
+  explicit qdef_act();
+  static qdef_act* m_instance;
+  int vs_city;
+  int vs_unit;
+public:
+  static qdef_act* action();
+  static void drop();
+  void vs_city_set(int i);
+  void vs_unit_set(int i);
+  int vs_city_get();
+  int vs_unit_get();
+};
 
 /***************************************************************************
   Nonmodal message box for disbanding units
@@ -247,5 +266,7 @@
 void revolution_response(struct government *government);
 void popup_upgrade_dialog(struct unit_list *punits);
 void popup_disband_dialog(struct unit_list *punits);
+bool try_default_unit_action(QVariant q1, QVariant q2);
+bool try_default_city_action(QVariant q1, QVariant q2);
 
 #endif /* FC__DIALOGS_H */

Modified: trunk/client/gui-qt/menu.cpp
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-qt/menu.cpp?rev=34411&r1=34410&r2=34411&view=diff
==============================================================================
--- trunk/client/gui-qt/menu.cpp        (original)
+++ trunk/client/gui-qt/menu.cpp        Sun Nov  6 22:08:57 2016
@@ -1332,6 +1332,75 @@
   airlift_type = new QActionGroup(this);
   airlift_menu = multiplayer_menu->addMenu(_("Unit type for quickairlifting"));
 
+  /* Default diplo */
+  action_vs_city = new QActionGroup(this);
+  action_vs_unit = new QActionGroup(this);
+  action_unit_menu = multiplayer_menu->addMenu(_("Default action vs unit"));
+
+  act = action_unit_menu->addAction(_("Ask"));
+  act->setCheckable(true);
+  act->setChecked(true);
+  act->setData(-1);
+  action_vs_unit->addAction(act);
+  connect(act, SIGNAL(triggered()), this, SLOT(slot_action_vs_unit()));
+
+  act = action_unit_menu->addAction(_("Bribe"));
+  act->setCheckable(true);
+  act->setChecked(false);
+  act->setData(ACTION_SPY_BRIBE_UNIT);
+  action_vs_unit->addAction(act);
+  connect(act, SIGNAL(triggered()), this, SLOT(slot_action_vs_unit()));
+
+  act = action_unit_menu->addAction(_("Sabotage"));
+  act->setCheckable(true);
+  act->setChecked(false);
+  act->setData(ACTION_SPY_SABOTAGE_UNIT);
+  action_vs_unit->addAction(act);
+  connect(act, SIGNAL(triggered()), this, SLOT(slot_action_vs_unit()));
+
+  action_city_menu = multiplayer_menu->addMenu(_("Default action vs city"));
+  act = action_city_menu->addAction(_("Ask"));
+  act->setCheckable(true);
+  act->setChecked(true);
+  act->setData(-1);
+  action_vs_city->addAction(act);
+  connect(act, SIGNAL(triggered()), this, SLOT(slot_action_vs_city()));
+
+  act = action_city_menu->addAction(_("Investigate city"));
+  act->setCheckable(true);
+  act->setChecked(false);
+  act->setData(ACTION_SPY_INVESTIGATE_CITY);
+  action_vs_city->addAction(act);
+  connect(act, SIGNAL(triggered()), this, SLOT(slot_action_vs_city()));
+
+  act = action_city_menu->addAction(_("Establish embassy"));
+  act->setCheckable(true);
+  act->setChecked(false);
+  act->setData(ACTION_ESTABLISH_EMBASSY);
+  action_vs_city->addAction(act);
+  connect(act, SIGNAL(triggered()), this, SLOT(slot_action_vs_city()));
+
+  act = action_city_menu->addAction(_("Steal technology"));
+  act->setCheckable(true);
+  act->setChecked(false);
+  act->setData(ACTION_SPY_STEAL_TECH);
+  action_vs_city->addAction(act);
+  connect(act, SIGNAL(triggered()), this, SLOT(slot_action_vs_city()));
+
+  act = action_city_menu->addAction(_("Incite a revolt"));
+  act->setCheckable(true);
+  act->setChecked(false);
+  act->setData(ACTION_SPY_INCITE_CITY);
+  action_vs_city->addAction(act);
+  connect(act, SIGNAL(triggered()), this, SLOT(slot_action_vs_city()));
+
+  act = action_city_menu->addAction(_("Poison city"));
+  act->setCheckable(true);
+  act->setChecked(false);
+  act->setData(ACTION_SPY_POISON);
+  action_vs_city->addAction(act);
+  connect(act, SIGNAL(triggered()), this, SLOT(slot_action_vs_city()));
+
   /* Civilization menu */
   menu = this->addMenu(_("Civilization"));
   act = menu->addAction(_("Tax Rates..."));
@@ -2405,6 +2474,29 @@
 }
 
 /**************************************************************************
+  Slot for choosing default action vs unit
+**************************************************************************/
+void mr_menu::slot_action_vs_unit()
+{
+  QAction *act;
+
+  act = qobject_cast<QAction *>(sender());
+  qdef_act::action()->vs_unit_set(act->data().toInt());
+}
+
+
+/**************************************************************************
+  Slot for choosing default action vs city
+**************************************************************************/
+void mr_menu::slot_action_vs_city()
+{
+  QAction *act;
+
+  act = qobject_cast<QAction *>(sender());
+  qdef_act::action()->vs_city_set(act->data().toInt());
+}
+
+/**************************************************************************
   Slot for quick airlifting
 **************************************************************************/
 void mr_menu::slot_quickairlift()

Modified: trunk/client/gui-qt/menu.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-qt/menu.h?rev=34411&r1=34410&r2=34411&view=diff
==============================================================================
--- trunk/client/gui-qt/menu.h  (original)
+++ trunk/client/gui-qt/menu.h  Sun Nov  6 22:08:57 2016
@@ -285,6 +285,10 @@
   QMenu *airlift_menu;
   QMenu *multiplayer_menu;
   QActionGroup *airlift_type;
+  QActionGroup *action_vs_city;
+  QActionGroup *action_vs_unit;
+  QMenu *action_unit_menu;
+  QMenu *action_city_menu;
   QHash<munit, QAction*> menu_list;
   qfc_units_list units_list;
 public:
@@ -392,6 +396,8 @@
   void slot_rally();
   void slot_quickairlift_set();
   void slot_quickairlift();
+  void slot_action_vs_unit();
+  void slot_action_vs_city();
 
   /*used by civilization menu */
   void slot_show_map();


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

Reply via email to