From 6728484cf748f563c28f8b8d4451bca6e0b3885a Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Tue, 18 Jun 2024 01:04:48 +0200 Subject: [PATCH] dialog items now use key_type for key, not int -- this fixes the bugs where char was used, causing search to fail --- config.cpp | 60 +++++++++++++++++++++++++++------------------------- dialogs.cpp | 26 +++++++++++------------ geom-exp.cpp | 11 +++++----- menus.cpp | 2 +- 4 files changed, 51 insertions(+), 48 deletions(-) diff --git a/config.cpp b/config.cpp index 25541394..d0fda2b3 100644 --- a/config.cpp +++ b/config.cpp @@ -29,6 +29,8 @@ EX void non_editable_post() { if(!delayed_start) start_game(); }; #if HDR +using key_type = int; + struct param_exception : hr_exception { struct parameter *which; param_exception() : hr_exception("param_exception"), which(nullptr) {} @@ -57,7 +59,7 @@ struct parameter : public std::enable_shared_from_this { virtual bool available() { if(restrict) return restrict(); return true; } virtual bool affects(void *v) { return false; } void show_edit_option() { show_edit_option(default_key); } - virtual void show_edit_option(int key) { + virtual void show_edit_option(key_type key) { println(hlog, "warning: no edit option defined for ", name); } virtual string search_key() { @@ -142,7 +144,7 @@ struct list_parameter : parameter { default_key = key; return this; } - void show_edit_option(int key) override; + void show_edit_option(key_type key) override; }; namespace anims { @@ -262,7 +264,7 @@ struct float_parameter : public val_parameter { } function modify_me; float_parameter *modif(const function& r) { modify_me = r; return this; } - void show_edit_option(int key) override; + void show_edit_option(key_type key) override; void load_from_raw(const string& s) override { *value = parseld(s); } cld get_cld() override { return *value; } void set_cld_raw(cld x) override { *value = real(x); } @@ -271,7 +273,7 @@ struct float_parameter : public val_parameter { }; struct float_parameter_dft : public float_parameter { - void show_edit_option(int key) override; + void show_edit_option(key_type key) override; function get_hint; float_parameter_dft* set_hint(const function& f) { get_hint = f; return this; } }; @@ -281,7 +283,7 @@ struct int_parameter : public val_parameter { ld step; function modify_me; int_parameter *modif(const function& r) { modify_me = r; return this; } - void show_edit_option(int key) override; + void show_edit_option(key_type key) override; int_parameter *editable(int min_value, int max_value, ld step, string menu_item_name, string help_text, char key) { this->is_editable = true; this->min_value = min_value; @@ -314,7 +316,7 @@ struct string_parameter: public val_parameter { reaction_t editor; string save() override { return *value; } void load_from_raw(const string& s) override { *value = s; } - void show_edit_option(int key) override; + void show_edit_option(key_type key) override; string_parameter* set_standard_editor(bool direct); string_parameter* set_file_editor(string ext); string_parameter* editable(string cap, string help, char key ) { @@ -329,7 +331,7 @@ struct string_parameter: public val_parameter { struct char_parameter : public val_parameter { string save() override { return "\\" + its(*value); } - void show_edit_option(int key) override; + void show_edit_option(key_type key) override; void load_from_raw(const string& s) override { if(s[0] == '\\' && s.size() > 1) *value = parseint(s.substr(1)); else sscanf(s.c_str(), "%c", value); @@ -349,7 +351,7 @@ struct bool_parameter : public val_parameter { help_text = help; return this; } - void show_edit_option(int key) override; + void show_edit_option(key_type key) override; void load_from_raw(const string& s) override { if(s == "yes") *value = true; @@ -363,7 +365,7 @@ struct bool_parameter : public val_parameter { struct color_parameter : public val_parameter { bool has_alpha; - void show_edit_option(int key) override; + void show_edit_option(key_type key) override; color_parameter *editable(string menu_item_name, string help_text, char key) { this->is_editable = true; this->menu_item_name = menu_item_name; @@ -402,7 +404,7 @@ struct matrix_parameter : public val_parameter { bool dosave() override { return !eqmatrix(*value, dft); } int dim; - void show_edit_option(int key) override; + void show_edit_option(key_type key) override; matrix_parameter *editable(string menu_item_name, string help_text, char key) { this->is_editable = true; this->menu_item_name = menu_item_name; @@ -432,7 +434,7 @@ struct matrix_parameter : public val_parameter { struct custom_parameter : public parameter { cld last_value, anim_value; - function custom_viewer; + function custom_viewer; function custom_value; function custom_affect; function custom_load; @@ -446,7 +448,7 @@ struct custom_parameter : public parameter { return parameter::clone(lps, value); } - void show_edit_option(int key) override { custom_viewer(key); } + void show_edit_option(key_type key) override { custom_viewer(key); } bool affects(void *v) override { return custom_affect(v); } void check_change() override { if(custom_value() != last_value) { @@ -489,7 +491,7 @@ void non_editable() { dialog::addHelp("Warning: editing this value through this menu may not work correctly"); } -void float_parameter::show_edit_option(int key) { +void float_parameter::show_edit_option(key_type key) { if(modify_me) modify_me(this); dialog::addSelItem(XLAT(menu_item_name), fts(*value) + unit, key); if(*value == use_the_default_value) dialog::lastItem().value = XLAT("default"); @@ -502,7 +504,7 @@ void float_parameter::show_edit_option(int key) { }); } -void float_parameter_dft::show_edit_option(int key) { +void float_parameter_dft::show_edit_option(key_type key) { if(modify_me) modify_me(this); dialog::addSelItem(XLAT(menu_item_name), fts(*value) + unit, key); if(*value == use_the_default_value) dialog::lastItem().value = XLAT("default: ") + fts(get_hint()); @@ -522,7 +524,7 @@ void float_parameter_dft::show_edit_option(int key) { }); } -void int_parameter::show_edit_option(int key) { +void int_parameter::show_edit_option(key_type key) { if(modify_me) modify_me(this); dialog::addSelItem(XLAT(menu_item_name), its(*value), key); dialog::add_action([this] () { @@ -534,7 +536,7 @@ void int_parameter::show_edit_option(int key) { }); } -void bool_parameter::show_edit_option(int key) { +void bool_parameter::show_edit_option(key_type key) { dialog::addBoolItem(XLAT(menu_item_name), *value, key); if(is_highlight(dialog::items.back()) && help_text != menu_item_name) mouseovers = XLAT(help_text); dialog::add_action([this] () { @@ -552,7 +554,7 @@ void bool_parameter::show_edit_option(int key) { }); } -void color_parameter::show_edit_option(int key) { +void color_parameter::show_edit_option(key_type key) { dialog::addColorItem(XLAT(menu_item_name), has_alpha ? *value : addalpha(*value), key); dialog::add_action([this] () { dialog::openColorDialog(*value); @@ -561,7 +563,7 @@ void color_parameter::show_edit_option(int key) { }); } -void matrix_parameter::show_edit_option(int key) { +void matrix_parameter::show_edit_option(key_type key) { dialog::addMatrixItem(XLAT(menu_item_name), *value, key, dim); dialog::add_action([this] () { dialog::editMatrix(*value, XLAT(menu_item_name), help_text, dim); @@ -570,12 +572,12 @@ void matrix_parameter::show_edit_option(int key) { }); } -void char_parameter::show_edit_option(int key) { +void char_parameter::show_edit_option(key_type key) { string s = s0; s += *(value); dialog::addSelItem(XLAT(menu_item_name), s, key); } -void string_parameter::show_edit_option(int key) { +void string_parameter::show_edit_option(key_type key) { dialog::addSelItem(XLAT(menu_item_name), *value, key); if(!editor) { if(is_highlight(dialog::items.back())) mouseovers = XLAT("not editable"); @@ -790,7 +792,7 @@ shared_ptr float_parameter::clone(struct local_parameter_set& lps, vo #if HDR template -shared_ptr param_custom_int(T& val, const parameter_names& n, function menuitem, char key) { +shared_ptr param_custom_int(T& val, const parameter_names& n, function menuitem, char key) { shared_ptr u ( new custom_parameter ); u->setup(n); int dft = (int) val; @@ -809,7 +811,7 @@ shared_ptr param_custom_int(T& val, const parameter_names& n, } #endif -EX shared_ptr param_custom_ld(ld& val, const parameter_names& n, function menuitem, char key) { +EX shared_ptr param_custom_ld(ld& val, const parameter_names& n, function menuitem, char key) { shared_ptr u ( new custom_parameter ); u->setup(n); ld dft = val; @@ -1245,8 +1247,8 @@ EX void initConfig() { param_b(vid.relative_window_size, "window_relative", true) ->editable("specify relative window size", 'g'); - param_custom_int(vid.xres, "xres", [] (char ch) {}, 0)->restrict = return_false; - param_custom_int(vid.yres, "yres", [] (char ch) {}, 0)->restrict = return_false; + param_custom_int(vid.xres, "xres", [] (key_type ch) {}, 0)->restrict = return_false; + param_custom_int(vid.yres, "yres", [] (key_type ch) {}, 0)->restrict = return_false; param_i(vid.fullscreen_x, "fullscreen_x", 1280) -> editable(640, 3840, 640, "fullscreen resolution to use (X)", "", 'x') @@ -1939,7 +1941,7 @@ string solhelp() { #endif } -EX void menuitem_sightrange_bonus(char c) { +EX void menuitem_sightrange_bonus(key_type c) { dialog::addSelItem(XLAT("sight range bonus"), its(sightrange_bonus), c); dialog::add_action([]{ dialog::editNumber(sightrange_bonus, -5, allowIncreasedSight() ? 3 : 0, 1, 0, XLAT("sight range"), @@ -2041,7 +2043,7 @@ EX void edit_sightrange() { dialog::display(); } -EX void menuitem_sightrange_style(char c IS('c')) { +EX void menuitem_sightrange_style(key_type c IS('c')) { dialog::addSelItem(XLAT("draw range based on"), vid.use_smart_range == 0 ? XLAT("distance") : vid.use_smart_range == 1 ? XLAT("size (no gen)") : @@ -2068,7 +2070,7 @@ EX void menuitem_sightrange_style(char c IS('c')) { }); } -EX void menuitem_sightrange(char c IS('c')) { +EX void menuitem_sightrange(key_type c IS('c')) { #if CAP_SOLV if(pmodel == mdGeodesic && sol) dialog::addSelItem(XLAT("sight range settings"), fts(sn::solrange_xy) + "x" + fts(sn::solrange_z), c); @@ -2559,7 +2561,7 @@ EX void projectionDialog() { }; } -EX void menuitem_projection_distance(char key) { +EX void menuitem_projection_distance(key_type key) { dialog::addSelItem(XLAT("projection distance"), fts(vpconf.alpha) + " (" + current_proj_name() + ")", key); dialog::add_action(projectionDialog); } @@ -3905,7 +3907,7 @@ EX void edit_all_parameters() { dialog::display(); } -void list_parameter::show_edit_option(int key) { +void list_parameter::show_edit_option(key_type key) { string opt; if(get_value() < 0 || get_value() >= isize(options)) opt = its(get_value()); else opt = options[get_value()].first; diff --git a/dialogs.cpp b/dialogs.cpp index db157fd0..9be9b940 100644 --- a/dialogs.cpp +++ b/dialogs.cpp @@ -23,7 +23,7 @@ EX namespace dialog { tDialogItem type; string body; string value; - int key; + key_type key; color_t color, colorv, colork, colors, colorc; int scale; double param; @@ -180,13 +180,13 @@ EX namespace dialog { EX item& titleItem() { return items[0]; } - EX map key_actions; + EX map key_actions; - EX void add_key_action(int key, const reaction_t& action) { + EX void add_key_action(key_type key, const reaction_t& action) { key_actions[key] = action; } - EX void add_key_action_adjust(int& key, const reaction_t& action) { + EX void add_key_action_adjust(key_type& key, const reaction_t& action) { while(key_actions.count(key)) key++; add_key_action(key, action); } @@ -220,7 +220,7 @@ EX namespace dialog { keyhandler = dialog::handler; } - EX string keyname(int k) { + EX string keyname(key_type k) { if(k == 0) return ""; if(k == SDLK_ESCAPE) return "Esc"; if(k == SDLK_F1) return "F1"; @@ -254,14 +254,14 @@ EX namespace dialog { scale = 100; } - EX void addSlider(double d1, double d2, double d3, int key) { + EX void addSlider(double d1, double d2, double d3, key_type key) { item it(diSlider); it.key = key; it.param = (d2-d1) / (d3-d1); items.push_back(it); } - EX void addIntSlider(int d1, int d2, int d3, int key) { + EX void addIntSlider(int d1, int d2, int d3, key_type key) { item it(diIntSlider); it.key = key; it.p1 = (d2-d1); @@ -269,7 +269,7 @@ EX namespace dialog { items.push_back(it); } - EX void addSelItem(string body, string value, int key) { + EX void addSelItem(string body, string value, key_type key) { item it(diItem); it.body = body; it.value = value; @@ -279,7 +279,7 @@ EX namespace dialog { items.push_back(it); } - EX void addBoolItem(string body, bool value, int key) { + EX void addBoolItem(string body, bool value, key_type key) { addSelItem(body, ONOFF(value), key); } @@ -303,7 +303,7 @@ EX namespace dialog { items.push_back(it); } - EX void addColorItem(string body, int value, int key) { + EX void addColorItem(string body, int value, key_type key) { addSelItem(body, COLORBAR, key); auto& it = items.back(); it.type = diColorItem; @@ -318,7 +318,7 @@ EX namespace dialog { return alpha / degree; } - EX void addMatrixItem(string body, transmatrix& value, int key, int dim IS(GDIM)) { + EX void addMatrixItem(string body, transmatrix& value, key_type key, int dim IS(GDIM)) { addSelItem(body, COLORBAR, key); auto& it = items.back(); it.type = diMatrixItem; @@ -360,14 +360,14 @@ EX namespace dialog { items.push_back(it); } - EX void addItem(string body, int key) { + EX void addItem(string body, key_type key) { item it(diItem); it.body = body; it.key = key; items.push_back(it); } - EX void addBigItem(string body, int key) { + EX void addBigItem(string body, key_type key) { item it(diBigItem); it.body = body; it.key = key; diff --git a/geom-exp.cpp b/geom-exp.cpp index f63420e3..9bb60813 100644 --- a/geom-exp.cpp +++ b/geom-exp.cpp @@ -680,22 +680,23 @@ void action_change_variation() { #endif } -EX void menuitem_change_variation(char key) { + +EX void menuitem_change_variation(key_type key) { dialog::addSelItem(XLAT("variations"), gp::operation_name(), key); dialog::add_action(action_change_variation); } -EX void menuitem_change_geometry(char key) { +EX void menuitem_change_geometry(key_type key) { dialog::addSelItem(XLAT("geometry/topology/tiling"), full_geometry_name(), key); dialog::add_action_push(current_filter ? ge_select_tiling : ge_select_filter); } -EX void menuitem_projection(char key) { +EX void menuitem_projection(key_type key) { dialog::addSelItem(XLAT("projection"), current_proj_name(), key); dialog::add_action_push(models::model_menu); } -EX void menuitem_binary_width(char key) { +EX void menuitem_binary_width(key_type key) { dialog::addSelItem(XLAT("binary tiling width"), fts(vid.binary_width), key); dialog::add_action([] { dialog::editNumber(vid.binary_width, 0, 2, 0.1, 1, XLAT("binary tiling width"), ""); @@ -710,7 +711,7 @@ EX void menuitem_binary_width(char key) { }); } -EX void menuitem_nilwidth(char key) { +EX void menuitem_nilwidth(key_type key) { dialog::addSelItem(XLAT("Nil width"), fts(nilv::nilwidth), key); dialog::add_action([] { dialog::editNumber(nilv::nilwidth, 0.01, 2, 0.1, 1, XLAT("Nil width"), ""); diff --git a/menus.cpp b/menus.cpp index 46e25166..0403b1c1 100644 --- a/menus.cpp +++ b/menus.cpp @@ -724,7 +724,7 @@ EX eLandStructure default_land_structure() { return lsNoWalls; } -EX void menuitem_land_structure(char key) { +EX void menuitem_land_structure(key_type key) { if(default_land_structure() == land_structure && !ineligible_starting_land) dialog::addBoolItem(XLAT("land structure"), false, key);