Author: cazfi
Date: Thu Apr  2 07:48:32 2015
New Revision: 28689

URL: http://svn.gna.org/viewcvs/freeciv?rev=28689&view=rev
Log:
Instead of reusing ruledit requirers singleton, support multiple requirers 
dialogs.

See patch #5966

Modified:
    trunk/tools/ruledit/requirers_dlg.cpp
    trunk/tools/ruledit/ruledit_qt.cpp
    trunk/tools/ruledit/ruledit_qt.h
    trunk/tools/ruledit/tab_building.cpp
    trunk/tools/ruledit/tab_tech.cpp
    trunk/tools/ruledit/tab_unit.cpp
    trunk/tools/ruledit/validity.c
    trunk/tools/ruledit/validity.h

Modified: trunk/tools/ruledit/requirers_dlg.cpp
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruledit/requirers_dlg.cpp?rev=28689&r1=28688&r2=28689&view=diff
==============================================================================
--- trunk/tools/ruledit/requirers_dlg.cpp       (original)
+++ trunk/tools/ruledit/requirers_dlg.cpp       Thu Apr  2 07:48:32 2015
@@ -52,7 +52,11 @@
 **************************************************************************/
 void requirers_dlg::clear(const char *title)
 {
-  setWindowTitle(QString::fromUtf8(title));
+  char buffer[256];
+
+  fc_snprintf(buffer, sizeof(buffer), R__("Removing %s"), title);
+
+  setWindowTitle(QString::fromUtf8(buffer));
   area->clear();
 }
 

Modified: trunk/tools/ruledit/ruledit_qt.cpp
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruledit/ruledit_qt.cpp?rev=28689&r1=28688&r2=28689&view=diff
==============================================================================
--- trunk/tools/ruledit/ruledit_qt.cpp  (original)
+++ trunk/tools/ruledit/ruledit_qt.cpp  Thu Apr  2 07:48:32 2015
@@ -92,9 +92,11 @@
 /**************************************************************************
   Display requirer list.
 **************************************************************************/
-void ruledit_qt_display_requirers(const char *msg)
-{
-  gui->show_required(msg);
+void ruledit_qt_display_requirers(const char *msg, void *data)
+{
+  requirers_dlg *requirers = (requirers_dlg *)data;
+
+  gui->show_required(requirers, msg);
 }
 
 /**************************************************************************
@@ -179,8 +181,6 @@
 
   full_layout->addWidget(msg_dspl);
 
-  requirers = new requirers_dlg(this);
-
   central->setLayout(full_layout);
 }
 
@@ -221,17 +221,23 @@
 }
 
 /**************************************************************************
-  Clear requirers dlg.
-**************************************************************************/
-void ruledit_gui::clear_required(const char *title)
-{
+  Create requirers dlg.
+**************************************************************************/
+requirers_dlg *ruledit_gui::create_requirers(const char *title)
+{
+  requirers_dlg *requirers;
+
+  requirers = new requirers_dlg(this);
+
   requirers->clear(title);
+
+  return requirers;
 }
 
 /**************************************************************************
   Add entry to requirers dlg.
 **************************************************************************/
-void ruledit_gui::show_required(const char *msg)
+void ruledit_gui::show_required(requirers_dlg *requirers, const char *msg)
 {
   requirers->add(msg);
 

Modified: trunk/tools/ruledit/ruledit_qt.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruledit/ruledit_qt.h?rev=28689&r1=28688&r2=28689&view=diff
==============================================================================
--- trunk/tools/ruledit/ruledit_qt.h    (original)
+++ trunk/tools/ruledit/ruledit_qt.h    Thu Apr  2 07:48:32 2015
@@ -40,8 +40,8 @@
   public:
     void setup(QWidget *central_in);
     void display_msg(const char *msg);
-    void clear_required(const char *title);
-    void show_required(const char *msg);
+    requirers_dlg *create_requirers(const char *title);
+    void show_required(requirers_dlg *requirers, const char *msg);
     void flush_widgets();
 
     struct rule_data data;
@@ -52,8 +52,6 @@
     QLineEdit *ruleset_select;
     QWidget *central;
     QStackedLayout *main_layout;
-
-    requirers_dlg *requirers;
 
     tab_building *bldg;
     tab_misc *misc;
@@ -68,6 +66,6 @@
 bool ruledit_qt_setup(int argc, char **argv);
 int ruledit_qt_run();
 void ruledit_qt_close();
-void ruledit_qt_display_requirers(const char *msg);
+void ruledit_qt_display_requirers(const char *msg, void *data);
 
 #endif // FC__RULEDIT_QT_H

Modified: trunk/tools/ruledit/tab_building.cpp
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruledit/tab_building.cpp?rev=28689&r1=28688&r2=28689&view=diff
==============================================================================
--- trunk/tools/ruledit/tab_building.cpp        (original)
+++ trunk/tools/ruledit/tab_building.cpp        Thu Apr  2 07:48:32 2015
@@ -162,8 +162,10 @@
 **************************************************************************/
 void tab_building::delete_now()
 {
-  ui->clear_required(improvement_rule_name(selected));
-  if (is_building_needed(selected, &ruledit_qt_display_requirers)) {
+  requirers_dlg *requirers;
+
+  requirers = ui->create_requirers(improvement_rule_name(selected));
+  if (is_building_needed(selected, &ruledit_qt_display_requirers, requirers)) {
     return;
   }
 

Modified: trunk/tools/ruledit/tab_tech.cpp
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruledit/tab_tech.cpp?rev=28689&r1=28688&r2=28689&view=diff
==============================================================================
--- trunk/tools/ruledit/tab_tech.cpp    (original)
+++ trunk/tools/ruledit/tab_tech.cpp    Thu Apr  2 07:48:32 2015
@@ -326,8 +326,10 @@
 **************************************************************************/
 void tab_tech::delete_now()
 {
-  ui->clear_required(advance_rule_name(selected));
-  if (is_tech_needed(selected, &ruledit_qt_display_requirers)) {
+  requirers_dlg *requirers;
+
+  requirers = ui->create_requirers(advance_rule_name(selected));
+  if (is_tech_needed(selected, &ruledit_qt_display_requirers, requirers)) {
     return;
   }
 

Modified: trunk/tools/ruledit/tab_unit.cpp
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruledit/tab_unit.cpp?rev=28689&r1=28688&r2=28689&view=diff
==============================================================================
--- trunk/tools/ruledit/tab_unit.cpp    (original)
+++ trunk/tools/ruledit/tab_unit.cpp    Thu Apr  2 07:48:32 2015
@@ -163,8 +163,10 @@
 **************************************************************************/
 void tab_unit::delete_now()
 {
-  ui->clear_required(utype_rule_name(selected));
-  if (is_utype_needed(selected, &ruledit_qt_display_requirers)) {
+  requirers_dlg *requirers;
+
+  requirers = ui->create_requirers(utype_rule_name(selected));
+  if (is_utype_needed(selected, &ruledit_qt_display_requirers, requirers)) {
     return;
   }
 

Modified: trunk/tools/ruledit/validity.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruledit/validity.c?rev=28689&r1=28688&r2=28689&view=diff
==============================================================================
--- trunk/tools/ruledit/validity.c      (original)
+++ trunk/tools/ruledit/validity.c      Thu Apr  2 07:48:32 2015
@@ -50,6 +50,7 @@
   bool needed;
   struct universal *uni;
   requirers_cb cb;
+  void *requirers_data;
 };
 
 /**************************************************************************
@@ -61,7 +62,7 @@
   struct effect_list_cb_data *cbdata = (struct effect_list_cb_data *)data;
 
   if (universal_in_req_vec(cbdata->uni, &peffect->reqs)) {
-    cbdata->cb(R__("Effect"));
+    cbdata->cb(R__("Effect"), cbdata->requirers_data);
     cbdata->needed = TRUE;
   }
 
@@ -72,7 +73,8 @@
 /**************************************************************************
   Check if anything in ruleset needs universal
 **************************************************************************/
-static bool is_universal_needed(struct universal *uni, requirers_cb cb)
+static bool is_universal_needed(struct universal *uni, requirers_cb cb,
+                                void *data)
 {
   bool needed = FALSE;
   bool needed_by_music_style = FALSE;
@@ -81,7 +83,7 @@
 
   disaster_type_iterate(pdis) {
     if (universal_in_req_vec(uni, &pdis->reqs)) {
-      cb(disaster_rule_name(pdis));
+      cb(disaster_rule_name(pdis), data);
       needed = TRUE;
     }
   } disaster_type_iterate_end;
@@ -89,14 +91,14 @@
   improvement_iterate(pimprove) {
     if (universal_in_req_vec(uni, &pimprove->reqs)
         || universal_in_req_vec(uni, &pimprove->obsolete_by)) {
-      cb(improvement_rule_name(pimprove));
+      cb(improvement_rule_name(pimprove), data);
       needed = TRUE;
     }
   } improvement_iterate_end;
 
   governments_iterate(pgov) {
     if (universal_in_req_vec(uni, &pgov->reqs)) {
-      cb(government_rule_name(pgov));
+      cb(government_rule_name(pgov), data);
       needed = TRUE;
     }
   } governments_iterate_end;
@@ -105,7 +107,7 @@
     struct specialist *psp = specialist_by_number(sp);
 
     if (universal_in_req_vec(uni, &psp->reqs)) {
-      cb(specialist_rule_name(psp));
+      cb(specialist_rule_name(psp), data);
       needed = TRUE;
     }
   } specialist_type_iterate_end;
@@ -113,7 +115,7 @@
   extra_type_iterate(pextra) {
     if (universal_in_req_vec(uni, &pextra->reqs)
         || universal_in_req_vec(uni, &pextra->rmreqs)) {
-      cb(extra_rule_name(pextra));
+      cb(extra_rule_name(pextra), data);
       needed = TRUE;
     }
   } extra_type_iterate_end;
@@ -122,7 +124,7 @@
     action_enabler_list_iterate(action_enablers_for_action(act), enabler) {
       if (universal_in_req_vec(uni, &(enabler->actor_reqs))
           || universal_in_req_vec(uni, &(enabler->target_reqs))) {
-        cb(R__("Action Enabler"));
+        cb(R__("Action Enabler"), data);
         needed = TRUE;
       }
     } action_enabler_list_iterate_end;
@@ -130,7 +132,7 @@
 
   for (i = 0; i < game.control.styles_count; i++) {
     if (universal_in_req_vec(uni, &city_styles[i].reqs)) {
-      cb(city_style_rule_name(i));
+      cb(city_style_rule_name(i), data);
       needed = TRUE;
     }
   }
@@ -142,13 +144,14 @@
   } music_styles_iterate_end;
 
   if (needed_by_music_style) {
-    cb(R__("Music Style"));
+    cb(R__("Music Style"), data);
     needed = TRUE;
   }
 
   cb_data.needed = FALSE;
   cb_data.uni = uni;
   cb_data.cb = cb;
+  cb_data.requirers_data = data;
 
   iterate_effect_cache(effect_list_universal_needed_cb, &cb_data);
   needed |= cb_data.needed;
@@ -159,7 +162,7 @@
 /**************************************************************************
   Check if anything in ruleset needs tech
 **************************************************************************/
-bool is_tech_needed(struct advance *padv, requirers_cb cb)
+bool is_tech_needed(struct advance *padv, requirers_cb cb, void *data)
 {
   struct universal uni = { .value.advance = padv, .kind = VUT_ADVANCE };
   bool needed = FALSE;
@@ -168,19 +171,19 @@
     if (pdependant->require[AR_ONE] == padv
         || pdependant->require[AR_TWO] == padv
         || pdependant->require[AR_ROOT] == padv) {
-      cb(advance_rule_name(pdependant));
+      cb(advance_rule_name(pdependant), data);
       needed = TRUE;
     }
   } advance_iterate_end;
 
   unit_type_iterate(ptype) {
     if (ptype->require_advance == padv) {
-      cb(utype_rule_name(ptype));
+      cb(utype_rule_name(ptype), data);
       needed = TRUE;
     }
   } unit_type_iterate_end;
 
-  needed |= is_universal_needed(&uni, cb);
+  needed |= is_universal_needed(&uni, cb, data);
 
   return needed;
 }
@@ -188,12 +191,13 @@
 /**************************************************************************
   Check if anything in ruleset needs building
 **************************************************************************/
-bool is_building_needed(struct impr_type *pimpr, requirers_cb cb)
+bool is_building_needed(struct impr_type *pimpr, requirers_cb cb,
+                        void *data)
 {
   struct universal uni = { .value.building = pimpr, .kind = VUT_IMPROVEMENT };
   bool needed = FALSE;
 
-  needed |= is_universal_needed(&uni, cb);
+  needed |= is_universal_needed(&uni, cb, data);
 
   return needed;
 }
@@ -201,12 +205,13 @@
 /**************************************************************************
   Check if anything in ruleset needs unit type
 **************************************************************************/
-bool is_utype_needed(struct unit_type *ptype, requirers_cb cb)
+bool is_utype_needed(struct unit_type *ptype, requirers_cb cb,
+                     void *data)
 {
   struct universal uni = { .value.utype = ptype, .kind = VUT_UTYPE };
   bool needed = FALSE;
 
-  needed |= is_universal_needed(&uni, cb);
-
-  return needed;
-}
+  needed |= is_universal_needed(&uni, cb, data);
+
+  return needed;
+}

Modified: trunk/tools/ruledit/validity.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruledit/validity.h?rev=28689&r1=28688&r2=28689&view=diff
==============================================================================
--- trunk/tools/ruledit/validity.h      (original)
+++ trunk/tools/ruledit/validity.h      Thu Apr  2 07:48:32 2015
@@ -17,11 +17,11 @@
 extern "C" {
 #endif /* __cplusplus */
 
-typedef void (*requirers_cb)(const char *msg);
+typedef void (*requirers_cb)(const char *msg, void *data);
 
-bool is_tech_needed(struct advance *padv, requirers_cb cb);
-bool is_building_needed(struct impr_type *pimpr, requirers_cb cb);
-bool is_utype_needed(struct unit_type *ptype, requirers_cb cb);
+bool is_tech_needed(struct advance *padv, requirers_cb cb, void *data);
+bool is_building_needed(struct impr_type *pimpr, requirers_cb cb, void *data);
+bool is_utype_needed(struct unit_type *ptype, requirers_cb cb, void *data);
 
 #ifdef __cplusplus
 }


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

Reply via email to