Author: mir3x
Date: Sun Dec 20 20:04:30 2015
New Revision: 31118

URL: http://svn.gna.org/viewcvs/freeciv?rev=31118&view=rev
Log:
Disband message box has been made non-modal.

See bug #24188


Modified:
    branches/S2_6/client/gui-qt/citydlg.cpp
    branches/S2_6/client/gui-qt/dialogs.cpp
    branches/S2_6/client/gui-qt/dialogs.h

Modified: branches/S2_6/client/gui-qt/citydlg.cpp
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/gui-qt/citydlg.cpp?rev=31118&r1=31117&r2=31118&view=diff
==============================================================================
--- branches/S2_6/client/gui-qt/citydlg.cpp     (original)
+++ branches/S2_6/client/gui-qt/citydlg.cpp     Sun Dec 20 20:04:30 2015
@@ -243,26 +243,17 @@
 ****************************************************************************/
 void unit_item::disband()
 {
-  QMessageBox ask(gui()->central_wdg);
-  int ret;
-
-  ask.setText(_("Are you sure you want to disband that unit?"));
-  ask.setStandardButtons(QMessageBox::Cancel | QMessageBox::Ok);
-  ask.setDefaultButton(QMessageBox::Cancel);
-  ask.setIcon(QMessageBox::Critical);
-  ask.setWindowTitle(_("Disband unit"));
-  ret = ask.exec();
-
-  switch (ret) {
-  case QMessageBox::Cancel:
-    return;
-    break;
-  case QMessageBox::Ok:
-    if (!unit_has_type_flag(qunit, UTYF_UNDISBANDABLE) && qunit) {
-      request_unit_disband(qunit);
-      break;
-    }
-  }
+  struct unit_list *punits;
+  struct unit *punit = player_unit_by_number(client_player(), qunit->id);
+
+  if (punit == nullptr) {
+    return;
+  }
+
+  punits = unit_list_new();
+  unit_list_append(punits, punit);
+  popup_disband_dialog(punits);
+  unit_list_destroy(punits);
 }
 
 /****************************************************************************

Modified: branches/S2_6/client/gui-qt/dialogs.cpp
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/gui-qt/dialogs.cpp?rev=31118&r1=31117&r2=31118&view=diff
==============================================================================
--- branches/S2_6/client/gui-qt/dialogs.cpp     (original)
+++ branches/S2_6/client/gui-qt/dialogs.cpp     Sun Dec 20 20:04:30 2015
@@ -1954,40 +1954,61 @@
   cd->show_me();
 }
 
+/***************************************************************************
+  Disband Message box contructor
+***************************************************************************/
+disband_box::disband_box(struct unit_list *punits,
+                         QWidget *parent) : QMessageBox(parent)
+{
+  QString str;
+  QPushButton *pb;
+
+  setAttribute(Qt::WA_DeleteOnClose);
+  setModal(false);
+  cpunits = unit_list_new();
+  unit_list_iterate(punits, punit) {
+    unit_list_append(cpunits, punit);
+  } unit_list_iterate_end;
+
+  str = QString(PL_("Are you sure you want to disband that %1 unit?",
+                  "Are you sure you want to disband those %1 units?",
+                  unit_list_size(punits))).arg(unit_list_size(punits));
+  setText(str);
+  pb = addButton(_("Yes"), QMessageBox::AcceptRole);
+  addButton(_("No"), QMessageBox::RejectRole);
+  setDefaultButton(QMessageBox::Cancel);
+  setIcon(QMessageBox::Question);
+  setWindowTitle(_("Disband units"));
+  connect(pb, SIGNAL(clicked()), this, SLOT(disband_clicked()));
+}
+
+/***************************************************************************
+  Clicked Yes in disband box
+***************************************************************************/
+void disband_box::disband_clicked()
+{
+  unit_list_iterate(cpunits, punit) {
+    if (!unit_has_type_flag(punit, UTYF_UNDISBANDABLE)) {
+      request_unit_disband(punit);
+    }
+  } unit_list_iterate_end;
+}
+
+/***************************************************************************
+  Destructor for disband box
+***************************************************************************/
+disband_box::~disband_box()
+{
+  unit_list_destroy(cpunits);
+}
+
 /****************************************************************************
   Pops up a dialog to confirm disband of the unit(s).
 ****************************************************************************/
 void popup_disband_dialog(struct unit_list *punits)
 {
-  QMessageBox ask(gui()->central_wdg);
-  int ret;
-  QString str;
-
-  if (!punits || unit_list_size(punits) == 0) {
-    return;
-  }
-  str = QString(PL_("Are you sure you want to disband that %1 unit?",
-                  "Are you sure you want to disband those %1 units?",
-                  unit_list_size(punits))).arg(unit_list_size(punits));
-  ask.setText(str);
-  ask.setStandardButtons(QMessageBox::Cancel | QMessageBox::Ok);
-  ask.setDefaultButton(QMessageBox::Cancel);
-  ask.setIcon(QMessageBox::Question);
-  ask.setWindowTitle(_("Disband units"));
-  ret = ask.exec();
-
-  switch (ret) {
-  case QMessageBox::Cancel:
-    return;
-    break;
-  case QMessageBox::Ok:
-    unit_list_iterate(punits, punit) {
-      if (!unit_has_type_flag(punit, UTYF_UNDISBANDABLE)) {
-        request_unit_disband(punit);
-      }
-    } unit_list_iterate_end;
-    break;
-  }
+  disband_box *ask = new disband_box(punits, gui()->central_wdg);
+  ask->show();
 }
 
 /**************************************************************************

Modified: branches/S2_6/client/gui-qt/dialogs.h
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/gui-qt/dialogs.h?rev=31118&r1=31117&r2=31118&view=diff
==============================================================================
--- branches/S2_6/client/gui-qt/dialogs.h       (original)
+++ branches/S2_6/client/gui-qt/dialogs.h       Sun Dec 20 20:04:30 2015
@@ -44,6 +44,20 @@
 typedef void (*pfcn_void)(QVariant, QVariant);
 void update_nationset_combo();
 void popup_races_dialog(struct player *pplayer);
+
+/***************************************************************************
+  Nonmodal message box for disbanding units
+***************************************************************************/
+class disband_box : public QMessageBox
+{
+  Q_OBJECT
+  struct unit_list *cpunits;
+public:
+  explicit disband_box(struct unit_list *punits, QWidget *parent = 0);
+  ~disband_box();
+private slots:
+  void disband_clicked();
+};
 
 /***************************************************************************
  Dialog for goto popup


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

Reply via email to