Debug: Add general mechanism to make lines in debug window clickable

This commit is contained in:
Jonathan G Rennison
2021-11-23 19:26:42 +00:00
parent 2b56ca2b62
commit b5521653e0

View File

@@ -115,6 +115,8 @@ struct NIVariable {
struct NIExtraInfoOutput {
std::function<void(const char *)> print;
std::function<void(uint)> register_next_line_click_flag_toggle;
uint32 flags;
};
/** Helper class to wrap some functionality/queries in. */
@@ -314,6 +316,9 @@ struct NewGRFInspectWindow : Window {
bool log_console = false;
bool sprite_dump = false;
uint32 extra_info_flags = 0;
btree::btree_map<int, uint> extra_info_click_flag_toggles;
/**
* Check whether the given variable has a parameter.
* @param variable the variable to check.
@@ -520,7 +525,12 @@ struct NewGRFInspectWindow : Window {
nih->SpriteDump(index, line_handler);
return;
} else {
NIExtraInfoOutput output { line_handler };
NewGRFInspectWindow *this_mutable = const_cast<NewGRFInspectWindow *>(this);
this_mutable->extra_info_click_flag_toggles.clear();
auto register_next_line_click_flag_toggle = [this_mutable, &i](uint flag) {
this_mutable->extra_info_click_flag_toggles[i] = flag;
};
NIExtraInfoOutput output { line_handler, register_next_line_click_flag_toggle, this->extra_info_flags };
nih->ExtraInfo(index, output);
}
@@ -666,13 +676,22 @@ struct NewGRFInspectWindow : Window {
case WID_NGRFI_MAINPANEL: {
if (this->sprite_dump) return;
/* Does this feature have variables? */
const NIFeature *nif = GetFeature(this->window_number);
if (nif->variables == nullptr) return;
/* Get the line, make sure it's within the boundaries. */
int line = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_NGRFI_MAINPANEL, TOP_OFFSET);
if (line == INT_MAX) return;
auto iter = this->extra_info_click_flag_toggles.find(line);
if (iter != this->extra_info_click_flag_toggles.end()) {
this->extra_info_flags ^= iter->second;
this->SetDirty();
return;
}
/* Does this feature have variables? */
const NIFeature *nif = GetFeature(this->window_number);
if (nif->variables == nullptr) return;
if (line < this->first_variable_line_index) return;
line -= this->first_variable_line_index;