From 99570b390863cb09c11060ceb3eb7a8c676eef7e Mon Sep 17 00:00:00 2001 From: Marko Lindqvist Date: Sun, 6 Jun 2021 05:09:58 +0300 Subject: [PATCH 48/48] Ruledit: Add support for adding and deleting effects See osdn #42478 Signed-off-by: Marko Lindqvist --- common/effects.c | 9 ++++++ common/effects.h | 1 + tools/ruledit/effect_edit.cpp | 53 +++++++++++++++++++++++++++++++---- tools/ruledit/effect_edit.h | 2 ++ 4 files changed, 60 insertions(+), 5 deletions(-) diff --git a/common/effects.c b/common/effects.c index 183fc79432..c66ab6716f 100644 --- a/common/effects.c +++ b/common/effects.c @@ -191,6 +191,15 @@ struct effect *effect_new(enum effect_type type, int value, return peffect; } +/**********************************************************************//** + Remove effect from the caches. +**************************************************************************/ +void effect_remove(struct effect *peffect) +{ + effect_list_remove(ruleset_cache.tracker, peffect); + effect_list_remove(get_effects(peffect->type), peffect); +} + /**********************************************************************//** Return new copy of the effect **************************************************************************/ diff --git a/common/effects.h b/common/effects.h index fe2fd6b9a6..4cb5d84317 100644 --- a/common/effects.h +++ b/common/effects.h @@ -365,6 +365,7 @@ struct effect { struct effect *effect_new(enum effect_type type, int value, struct multiplier *pmul); struct effect *effect_copy(struct effect *old); +void effect_remove(struct effect *peffect); void effect_req_append(struct effect *peffect, struct requirement req); struct astring; diff --git a/tools/ruledit/effect_edit.cpp b/tools/ruledit/effect_edit.cpp index b435264876..ff128b4f43 100644 --- a/tools/ruledit/effect_edit.cpp +++ b/tools/ruledit/effect_edit.cpp @@ -47,10 +47,11 @@ effect_edit::effect_edit(ruledit_gui *ui_in, QString target, QGridLayout *effect_edit_layout = new QGridLayout(); QHBoxLayout *active_layout = new QHBoxLayout(); QPushButton *close_button; - QPushButton *reqs_button; + QPushButton *button; QMenu *menu; QLabel *lbl; enum effect_type eff; + int row; ui = ui_in; selected = nullptr; @@ -94,13 +95,22 @@ effect_edit::effect_edit(ruledit_gui *ui_in, QString target, main_layout->addLayout(active_layout); - reqs_button = new QPushButton(QString::fromUtf8(R__("Requirements")), this); - connect(reqs_button, SIGNAL(pressed()), this, SLOT(edit_reqs())); - effect_edit_layout->addWidget(reqs_button, 0, 0); + row = 0; + button = new QPushButton(QString::fromUtf8(R__("Requirements")), this); + connect(button, SIGNAL(pressed()), this, SLOT(edit_reqs())); + effect_edit_layout->addWidget(button, row++, 0); + + button = new QPushButton(QString::fromUtf8(R__("Add Effect")), this); + connect(button, SIGNAL(pressed()), this, SLOT(add_now())); + effect_edit_layout->addWidget(button, row++, 0); + + button = new QPushButton(QString::fromUtf8(R__("Delete Effect")), this); + connect(button, SIGNAL(pressed()), this, SLOT(delete_now())); + effect_edit_layout->addWidget(button, row++, 0); close_button = new QPushButton(QString::fromUtf8(R__("Close")), this); connect(close_button, SIGNAL(pressed()), this, SLOT(close_now())); - effect_edit_layout->addWidget(close_button, 1, 0); + effect_edit_layout->addWidget(close_button, row++, 0); refresh(); @@ -281,3 +291,36 @@ void effect_edit::closeEvent(QCloseEvent *event) { ui->unregister_effect_edit(this); } + +/**********************************************************************//** + User requested new effect +**************************************************************************/ +void effect_edit::add_now() +{ + struct effect *peffect = effect_new((enum effect_type)0, 0, NULL); + + if (filter.kind != VUT_NONE) { + struct requirement req; + + req = req_from_str(universal_type_rule_name(&filter), + nullptr, false, true, false, + universal_rule_name(&filter)); + effect_req_append(peffect, req); + } + + refresh(); +} + +/**********************************************************************//** + User requested effect deletion +**************************************************************************/ +void effect_edit::delete_now() +{ + if (selected != nullptr) { + effect_remove(selected); + + selected = nullptr; + + refresh(); + } +} diff --git a/tools/ruledit/effect_edit.h b/tools/ruledit/effect_edit.h index 4b62e05eb3..a80222b318 100644 --- a/tools/ruledit/effect_edit.h +++ b/tools/ruledit/effect_edit.h @@ -78,6 +78,8 @@ class effect_edit : public QDialog void select_effect(); void fill_active(); void edit_reqs(); + void add_now(); + void delete_now(); void close_now(); void effect_type_menu(QAction *action); -- 2.30.2