Feature #1031 ยป 0053-Add-comment-field-for-enablers.patch
| common/actions.c | ||
|---|---|---|
|
struct action_enabler *enabler;
|
||
|
enabler = fc_malloc(sizeof(*enabler));
|
||
|
enabler->ruledit_disabled = FALSE;
|
||
|
enabler->rulesave.ruledit_disabled = FALSE;
|
||
|
enabler->rulesave.comment = nullptr;
|
||
|
requirement_vector_init(&enabler->actor_reqs);
|
||
|
requirement_vector_init(&enabler->target_reqs);
|
||
| ... | ... | |
|
**************************************************************************/
|
||
|
void action_enabler_free(struct action_enabler *enabler)
|
||
|
{
|
||
|
if (enabler->rulesave.comment != nullptr) {
|
||
|
free(enabler->rulesave.comment);
|
||
|
}
|
||
|
requirement_vector_free(&enabler->actor_reqs);
|
||
|
requirement_vector_free(&enabler->target_reqs);
|
||
| common/actions.h | ||
|---|---|---|
|
struct requirement_vector actor_reqs;
|
||
|
struct requirement_vector target_reqs;
|
||
|
/* Only relevant for ruledit and other rulesave users. Indicates that
|
||
|
* this action enabler is deleted and shouldn't be saved. */
|
||
|
bool ruledit_disabled;
|
||
|
struct {
|
||
|
/* Only relevant for ruledit and other rulesave users. Indicates that
|
||
|
* this action enabler is deleted and shouldn't be saved. */
|
||
|
bool ruledit_disabled;
|
||
|
char *comment;
|
||
|
} rulesave;
|
||
|
};
|
||
|
#define action_has_result(_act_, _res_) ((_act_)->result == (_res_))
|
||
| ... | ... | |
|
#define action_enabler_list_re_iterate(action_enabler_list, aenabler) \
|
||
|
action_enabler_list_iterate(action_enabler_list, aenabler) { \
|
||
|
if (!aenabler->ruledit_disabled) {
|
||
|
if (!aenabler->rulesave.ruledit_disabled) {
|
||
|
#define action_enabler_list_re_iterate_end \
|
||
|
} \
|
||
| data/alien/actions.ruleset | ||
|---|---|---|
|
; action = the action to enable.
|
||
|
; actor_reqs = requirements that apply to the actor.
|
||
|
; target_reqs = requirements that apply to the target.
|
||
|
; comment = Comment for the benefit to someone examining the ruleset
|
||
|
; Not used by freeciv any other way.
|
||
|
;
|
||
|
; README.actions lists the possible actions and their hard coded
|
||
|
; requirements.
|
||
| data/civ1/actions.ruleset | ||
|---|---|---|
|
; action = the action to enable.
|
||
|
; actor_reqs = requirements that apply to the actor.
|
||
|
; target_reqs = requirements that apply to the target.
|
||
|
; comment = Comment for the benefit to someone examining the ruleset
|
||
|
; Not used by freeciv any other way.
|
||
|
;
|
||
|
; README.actions lists the possible actions and their hard coded
|
||
|
; requirements.
|
||
| data/civ2/actions.ruleset | ||
|---|---|---|
|
; action = the action to enable.
|
||
|
; actor_reqs = requirements that apply to the actor.
|
||
|
; target_reqs = requirements that apply to the target.
|
||
|
; comment = Comment for the benefit to someone examining the ruleset
|
||
|
; Not used by freeciv any other way.
|
||
|
;
|
||
|
; README.actions lists the possible actions and their hard coded
|
||
|
; requirements.
|
||
| data/civ2civ3/actions.ruleset | ||
|---|---|---|
|
; action = the action to enable.
|
||
|
; actor_reqs = requirements that apply to the actor.
|
||
|
; target_reqs = requirements that apply to the target.
|
||
|
; comment = Comment for the benefit to someone examining the ruleset
|
||
|
; Not used by freeciv any other way.
|
||
|
;
|
||
|
; README.actions lists the possible actions and their hard coded
|
||
|
; requirements.
|
||
| data/classic/actions.ruleset | ||
|---|---|---|
|
; action = the action to enable.
|
||
|
; actor_reqs = requirements that apply to the actor.
|
||
|
; target_reqs = requirements that apply to the target.
|
||
|
; comment = Comment for the benefit to someone examining the ruleset
|
||
|
; Not used by freeciv any other way.
|
||
|
;
|
||
|
; README.actions lists the possible actions and their hard coded
|
||
|
; requirements.
|
||
| data/goldkeep/actions.ruleset | ||
|---|---|---|
|
; action = the action to enable.
|
||
|
; actor_reqs = requirements that apply to the actor.
|
||
|
; target_reqs = requirements that apply to the target.
|
||
|
; comment = Comment for the benefit to someone examining the ruleset
|
||
|
; Not used by freeciv any other way.
|
||
|
;
|
||
|
; README.actions lists the possible actions and their hard coded
|
||
|
; requirements.
|
||
| data/granularity/actions.ruleset | ||
|---|---|---|
|
; action = the action to enable.
|
||
|
; actor_reqs = requirements that apply to the actor.
|
||
|
; target_reqs = requirements that apply to the target.
|
||
|
; comment = Comment for the benefit to someone examining the ruleset
|
||
|
; Not used by freeciv any other way.
|
||
|
;
|
||
|
; README.actions lists the possible actions and their hard coded
|
||
|
; requirements.
|
||
| data/multiplayer/actions.ruleset | ||
|---|---|---|
|
; action = the action to enable.
|
||
|
; actor_reqs = requirements that apply to the actor.
|
||
|
; target_reqs = requirements that apply to the target.
|
||
|
; comment = Comment for the benefit to someone examining the ruleset
|
||
|
; Not used by freeciv any other way.
|
||
|
;
|
||
|
; README.actions lists the possible actions and their hard coded
|
||
|
; requirements.
|
||
| data/ruledit/comments-3.3.txt | ||
|---|---|---|
|
; action = the action to enable.\n\
|
||
|
; actor_reqs = requirements that apply to the actor.\n\
|
||
|
; target_reqs = requirements that apply to the target.\n\
|
||
|
; comment = Comment for the benefit to someone examining the ruleset\n\
|
||
|
; Not used by freeciv any other way.\n\
|
||
|
;\n\
|
||
|
; README.actions lists the possible actions and their hard coded\n\
|
||
|
; requirements.\n\
|
||
| data/sandbox/actions.ruleset | ||
|---|---|---|
|
; action = the action to enable.
|
||
|
; actor_reqs = requirements that apply to the actor.
|
||
|
; target_reqs = requirements that apply to the target.
|
||
|
; comment = Comment for the benefit to someone examining the ruleset
|
||
|
; Not used by freeciv any other way.
|
||
|
;
|
||
|
; README.actions lists the possible actions and their hard coded
|
||
|
; requirements.
|
||
| data/stub/actions.ruleset | ||
|---|---|---|
|
; action = the action to enable.
|
||
|
; actor_reqs = requirements that apply to the actor.
|
||
|
; target_reqs = requirements that apply to the target.
|
||
|
; comment = Comment for the benefit to someone examining the ruleset
|
||
|
; Not used by freeciv any other way.
|
||
|
;
|
||
|
; README.actions lists the possible actions and their hard coded
|
||
|
; requirements.
|
||
| data/webperimental/actions.ruleset | ||
|---|---|---|
|
; action = the action to enable.
|
||
|
; actor_reqs = requirements that apply to the actor.
|
||
|
; target_reqs = requirements that apply to the target.
|
||
|
; comment = Comment for the benefit to someone examining the ruleset
|
||
|
; Not used by freeciv any other way.
|
||
|
;
|
||
|
; README.actions lists the possible actions and their hard coded
|
||
|
; requirements.
|
||
| server/ruleset/rscompat.c | ||
|---|---|---|
|
" Don't know how to fix it."
|
||
|
" Dropping it.",
|
||
|
action_rule_name(paction), problem->description);
|
||
|
ae->ruledit_disabled = TRUE;
|
||
|
ae->rulesave.ruledit_disabled = TRUE;
|
||
|
req_vec_problem_free(problem);
|
||
|
return TRUE;
|
||
| ... | ... | |
|
" for %s: %s"
|
||
|
" Dropping it.",
|
||
|
action_rule_name(paction), problem->description);
|
||
|
ae->ruledit_disabled = TRUE;
|
||
|
ae->rulesave.ruledit_disabled = TRUE;
|
||
|
req_vec_problem_free(problem);
|
||
|
return TRUE;
|
||
|
}
|
||
| ... | ... | |
|
req_vec_change_translation(
|
||
|
&problem->suggested_solutions[i],
|
||
|
action_enabler_vector_by_number_name));
|
||
|
new_enabler->ruledit_disabled = TRUE;
|
||
|
new_enabler->rulesave.ruledit_disabled = TRUE;
|
||
|
req_vec_problem_free(problem);
|
||
|
return TRUE;
|
||
|
}
|
||
| ... | ... | |
|
if (problem->num_suggested_solutions - 1 == i) {
|
||
|
/* The last modification is to the original enabler. */
|
||
|
ae->action = new_enabler->action;
|
||
|
ae->ruledit_disabled = new_enabler->ruledit_disabled;
|
||
|
ae->rulesave.ruledit_disabled = new_enabler->rulesave.ruledit_disabled;
|
||
|
requirement_vector_copy(&ae->actor_reqs,
|
||
|
&new_enabler->actor_reqs);
|
||
|
requirement_vector_copy(&ae->target_reqs,
|
||
| ... | ... | |
|
do {
|
||
|
restart_enablers_for_action = FALSE;
|
||
|
action_enabler_list_iterate(action_enablers_for_action(act_id), ae) {
|
||
|
if (ae->ruledit_disabled) {
|
||
|
if (ae->rulesave.ruledit_disabled) {
|
||
|
/* Ignore disabled enablers */
|
||
|
continue;
|
||
|
}
|
||
| server/ruleset/ruleload.c | ||
|---|---|---|
|
/* Make sure that all action enablers are disabled. */
|
||
|
action_enabler_list_iterate(action_enablers_for_action(paction->id),
|
||
|
ae) {
|
||
|
ae->ruledit_disabled = TRUE;
|
||
|
ae->rulesave.ruledit_disabled = TRUE;
|
||
|
purged++;
|
||
|
} action_enabler_list_iterate_end;
|
||
| ... | ... | |
|
/* Impossible requirement vector requirement. */
|
||
|
action_enabler_list_iterate(action_enablers_for_action(paction->id),
|
||
|
ae) {
|
||
|
if (!ae->ruledit_disabled
|
||
|
if (!ae->rulesave.ruledit_disabled
|
||
|
&& (!action_enabler_possible_actor(ae)
|
||
|
|| req_vec_is_impossible_to_fulfill(&ae->target_reqs))) {
|
||
|
ae->ruledit_disabled = TRUE;
|
||
|
ae->rulesave.ruledit_disabled = TRUE;
|
||
|
purged++;
|
||
|
log_normal("Purged unused action enabler for %s",
|
||
|
action_rule_name(paction));
|
||
| ... | ... | |
|
/* Do the purging. */
|
||
|
action_enabler_list_iterate(action_enablers_for_action(paction->id),
|
||
|
ae) {
|
||
|
while (!ae->ruledit_disabled
|
||
|
while (!ae->rulesave.ruledit_disabled
|
||
|
&& (purge_redundant_req_vec(&ae->actor_reqs, actor_reqs)
|
||
|
|| purge_redundant_req_vec(&ae->target_reqs,
|
||
|
target_reqs))) {
|
||
| ... | ... | |
|
struct requirement_vector *actor_reqs;
|
||
|
struct requirement_vector *target_reqs;
|
||
|
const char *action_text;
|
||
|
const char *comment;
|
||
|
enabler = action_enabler_new();
|
||
| ... | ... | |
|
requirement_vector_copy(&enabler->target_reqs, target_reqs);
|
||
|
comment = secfile_lookup_str(file, "%s.comment", sec_name);
|
||
|
if (comment != nullptr) {
|
||
|
enabler->rulesave.comment = fc_strdup(comment);
|
||
|
}
|
||
|
action_enabler_add(enabler);
|
||
|
} section_list_iterate_end;
|
||
| tools/ruledit/tab_enablers.cpp | ||
|---|---|---|
|
enabler_list->clear();
|
||
|
action_enablers_iterate(enabler) {
|
||
|
if (!enabler->ruledit_disabled) {
|
||
|
if (!enabler->rulesave.ruledit_disabled) {
|
||
|
char buffer[512];
|
||
|
QListWidgetItem *item;
|
||
| ... | ... | |
|
void tab_enabler::delete_now()
|
||
|
{
|
||
|
if (selected != nullptr) {
|
||
|
selected->ruledit_disabled = true;
|
||
|
selected->rulesave.ruledit_disabled = true;
|
||
|
refresh();
|
||
|
update_enabler_info(nullptr);
|
||
| ... | ... | |
|
// Try to reuse freed enabler slot
|
||
|
action_enablers_iterate(enabler) {
|
||
|
if (enabler->ruledit_disabled) {
|
||
|
if (enabler->rulesave.ruledit_disabled) {
|
||
|
if (initialize_new_enabler(enabler)) {
|
||
|
enabler->ruledit_disabled = false;
|
||
|
enabler->rulesave.ruledit_disabled = false;
|
||
|
update_enabler_info(enabler);
|
||
|
refresh();
|
||
|
}
|
||
| tools/ruleutil/rulesave.c | ||
|---|---|---|
|
action_enablers_iterate(pae) {
|
||
|
char path[512];
|
||
|
if (pae->ruledit_disabled) {
|
||
|
if (pae->rulesave.ruledit_disabled) {
|
||
|
continue;
|
||
|
}
|
||
| ... | ... | |
|
save_reqs_vector(sfile, &(pae->actor_reqs), path, "actor_reqs");
|
||
|
save_reqs_vector(sfile, &(pae->target_reqs), path, "target_reqs");
|
||
|
if (pae->rulesave.comment != nullptr) {
|
||
|
secfile_insert_str(sfile, pae->rulesave.comment, "%s.comment", path);
|
||
|
}
|
||
|
} action_enablers_iterate_end;
|
||
|
return save_ruleset_file(sfile, filename);
|
||