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