From 67c0150fd3bce3b604dd20e26dbf9802bb8421ea Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 22 Jan 2025 21:51:27 +0000 Subject: [PATCH] Codechange: Pass GRFConfig by reference where feasible. In places where a GRFConfig is passed by pointer and not checked for nullptr, use a reference instead. --- src/gfxinit.cpp | 4 +- src/network/core/network_game_info.cpp | 20 ++--- src/newgrf.cpp | 40 ++++----- src/newgrf.h | 4 +- src/newgrf_config.cpp | 26 +++--- src/newgrf_config.h | 6 +- src/newgrf_gui.cpp | 114 ++++++++++++------------- src/settings.cpp | 6 +- src/settings_gui.cpp | 2 +- 9 files changed, 110 insertions(+), 112 deletions(-) diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index b30fbda3af..b1c32131c6 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -186,7 +186,7 @@ static void LoadSpriteTables() static const char *master_filename = "OPENTTD.GRF"; GRFConfig *master = new GRFConfig(master_filename); master->palette |= GRFP_GRF_DOS; - FillGRFDetails(master, false, BASESET_DIR); + FillGRFDetails(*master, false, BASESET_DIR); ClrBit(master->flags, GCF_INIT_ONLY); /* Baseset extra graphics */ @@ -381,7 +381,7 @@ GRFConfig &GraphicsSet::GetOrCreateExtraConfig() const case PAL_WINDOWS: this->extra_cfg->palette |= GRFP_GRF_WINDOWS; break; default: break; } - FillGRFDetails(this->extra_cfg.get(), false, BASESET_DIR); + FillGRFDetails(*this->extra_cfg, false, BASESET_DIR); } return *this->extra_cfg; } diff --git a/src/network/core/network_game_info.cpp b/src/network/core/network_game_info.cpp index 036ba412d4..7446e7e3d6 100644 --- a/src/network/core/network_game_info.cpp +++ b/src/network/core/network_game_info.cpp @@ -180,20 +180,20 @@ const NetworkServerGameInfo &GetCurrentNetworkServerGameInfo() * @param config The GRF to handle. * @param name The name of the NewGRF, empty when unknown. */ -static void HandleIncomingNetworkGameInfoGRFConfig(GRFConfig *config, std::string_view name) +static void HandleIncomingNetworkGameInfoGRFConfig(GRFConfig &config, std::string_view name) { /* Find the matching GRF file */ - const GRFConfig *f = FindGRFConfig(config->ident.grfid, FGCM_EXACT, &config->ident.md5sum); + const GRFConfig *f = FindGRFConfig(config.ident.grfid, FGCM_EXACT, &config.ident.md5sum); if (f == nullptr) { - AddGRFTextToList(config->name, name.empty() ? GetString(STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN) : name); - config->status = GCS_NOT_FOUND; + AddGRFTextToList(config.name, name.empty() ? GetString(STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN) : name); + config.status = GCS_NOT_FOUND; } else { - config->filename = f->filename; - config->name = f->name; - config->info = f->info; - config->url = f->url; + config.filename = f->filename; + config.name = f->name; + config.info = f->info; + config.url = f->url; } - SetBit(config->flags, GCF_COPY); + SetBit(config.flags, GCF_COPY); } /** @@ -337,7 +337,7 @@ void DeserializeNetworkGameInfo(Packet &p, NetworkGameInfo &info, const GameInfo GRFConfig *c = new GRFConfig(); c->ident = grf.ident; - HandleIncomingNetworkGameInfoGRFConfig(c, grf.name); + HandleIncomingNetworkGameInfoGRFConfig(*c, grf.name); /* Append GRFConfig to the list */ *dst = c; diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 5f9af7926d..293a4df4e8 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -6862,9 +6862,9 @@ static void CfgApply(ByteReader &buf) * best result as no NewGRF author can complain about that. * @param c The NewGRF to disable. */ -static void DisableStaticNewGRFInfluencingNonStaticNewGRFs(GRFConfig *c) +static void DisableStaticNewGRFInfluencingNonStaticNewGRFs(GRFConfig &c) { - GRFError *error = DisableGrf(STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC, c); + GRFError *error = DisableGrf(STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC, &c); error->data = _cur.grfconfig->GetName(); } @@ -6949,7 +6949,7 @@ static void SkipIf(ByteReader &buf) GRFConfig *c = GetGRFConfig(cond_val, mask); if (c != nullptr && HasBit(c->flags, GCF_STATIC) && !HasBit(_cur.grfconfig->flags, GCF_STATIC) && _networking) { - DisableStaticNewGRFInfluencingNonStaticNewGRFs(c); + DisableStaticNewGRFInfluencingNonStaticNewGRFs(*c); c = nullptr; } @@ -7591,7 +7591,7 @@ static void ParamSet(ByteReader &buf) GRFConfig *c = GetGRFConfig(data); if (c != nullptr && HasBit(c->flags, GCF_STATIC) && !HasBit(_cur.grfconfig->flags, GCF_STATIC) && _networking) { /* Disable the read GRF if it is a static NewGRF. */ - DisableStaticNewGRFInfluencingNonStaticNewGRFs(c); + DisableStaticNewGRFInfluencingNonStaticNewGRFs(*c); src1 = 0; } else if (file == nullptr || c == nullptr || c->status == GCS_DISABLED) { src1 = 0; @@ -8905,9 +8905,9 @@ static void BuildCargoTranslationMap() * Prepare loading a NewGRF file with its config * @param config The NewGRF configuration struct with name, id, parameters and alike. */ -static void InitNewGRFFile(const GRFConfig *config) +static void InitNewGRFFile(const GRFConfig &config) { - GRFFile *newfile = GetFileByFilename(config->filename); + GRFFile *newfile = GetFileByFilename(config.filename); if (newfile != nullptr) { /* We already loaded it once. */ _cur.grffile = newfile; @@ -8922,10 +8922,10 @@ static void InitNewGRFFile(const GRFConfig *config) * Constructor for GRFFile * @param config GRFConfig to copy name, grfid and parameters from. */ -GRFFile::GRFFile(const GRFConfig *config) +GRFFile::GRFFile(const GRFConfig &config) { - this->filename = config->filename; - this->grfid = config->ident.grfid; + this->filename = config.filename; + this->grfid = config.ident.grfid; /* Initialise local settings to defaults */ this->traininfo_vehicle_pitch = 0; @@ -8952,7 +8952,7 @@ GRFFile::GRFFile(const GRFConfig *config) this->tramtype_map[0] = ROADTYPE_TRAM; /* Copy the initial parameter list */ - this->param = config->param; + this->param = config.param; } /** @@ -9620,12 +9620,12 @@ static void DecodeSpecialSprite(uint8_t *buf, uint num, GrfLoadingStage stage) * @param stage The loading stage of the NewGRF. * @param file The file to load the GRF data from. */ -static void LoadNewGRFFileFromFile(GRFConfig *config, GrfLoadingStage stage, SpriteFile &file) +static void LoadNewGRFFileFromFile(GRFConfig &config, GrfLoadingStage stage, SpriteFile &file) { _cur.file = &file; - _cur.grfconfig = config; + _cur.grfconfig = &config; - Debug(grf, 2, "LoadNewGRFFile: Reading NewGRF-file '{}'", config->filename); + Debug(grf, 2, "LoadNewGRFFile: Reading NewGRF-file '{}'", config.filename); uint8_t grf_container_version = file.GetContainerVersion(); if (grf_container_version == 0) { @@ -9709,9 +9709,9 @@ static void LoadNewGRFFileFromFile(GRFConfig *config, GrfLoadingStage stage, Spr * @param temporary The NewGRF/sprite file is to be loaded temporarily and should be closed immediately, * contrary to loading the SpriteFile and having it cached by the SpriteCache. */ -void LoadNewGRFFile(GRFConfig *config, GrfLoadingStage stage, Subdirectory subdir, bool temporary) +void LoadNewGRFFile(GRFConfig &config, GrfLoadingStage stage, Subdirectory subdir, bool temporary) { - const std::string &filename = config->filename; + const std::string &filename = config.filename; /* A .grf file is activated only if it was active when the game was * started. If a game is loaded, only its active .grfs will be @@ -9725,11 +9725,11 @@ void LoadNewGRFFile(GRFConfig *config, GrfLoadingStage stage, Subdirectory subdi if (stage != GLS_FILESCAN && stage != GLS_SAFETYSCAN && stage != GLS_LABELSCAN) { _cur.grffile = GetFileByFilename(filename); if (_cur.grffile == nullptr) UserError("File '{}' lost in cache.\n", filename); - if (stage == GLS_RESERVE && config->status != GCS_INITIALISED) return; - if (stage == GLS_ACTIVATION && !HasBit(config->flags, GCF_RESERVED)) return; + if (stage == GLS_RESERVE && config.status != GCS_INITIALISED) return; + if (stage == GLS_ACTIVATION && !HasBit(config.flags, GCF_RESERVED)) return; } - bool needs_palette_remap = config->palette & GRFP_USE_MASK; + bool needs_palette_remap = config.palette & GRFP_USE_MASK; if (temporary) { SpriteFile temporarySpriteFile(filename, subdir, needs_palette_remap); LoadNewGRFFileFromFile(config, stage, temporarySpriteFile); @@ -10119,7 +10119,7 @@ void LoadNewGRF(SpriteID load_index, uint num_baseset) continue; } - if (stage == GLS_LABELSCAN) InitNewGRFFile(c); + if (stage == GLS_LABELSCAN) InitNewGRFFile(*c); if (!HasBit(c->flags, GCF_STATIC) && !HasBit(c->flags, GCF_SYSTEM)) { if (num_non_static == NETWORK_MAX_GRF_COUNT) { @@ -10133,7 +10133,7 @@ void LoadNewGRF(SpriteID load_index, uint num_baseset) num_grfs++; - LoadNewGRFFile(c, stage, subdir, false); + LoadNewGRFFile(*c, stage, subdir, false); if (stage == GLS_RESERVE) { SetBit(c->flags, GCF_RESERVED); } else if (stage == GLS_ACTIVATION) { diff --git a/src/newgrf.h b/src/newgrf.h index 775a9373c5..7a4f1be93d 100644 --- a/src/newgrf.h +++ b/src/newgrf.h @@ -148,7 +148,7 @@ struct GRFFile : ZeroedMemoryAllocator { uint32_t grf_features; ///< Bitset of GrfSpecFeature the grf uses PriceMultipliers price_base_multipliers; ///< Price base multipliers as set by the grf. - GRFFile(const struct GRFConfig *config); + GRFFile(const struct GRFConfig &config); /** Get GRF Parameter with range checking */ uint32_t GetParam(uint number) const @@ -193,7 +193,7 @@ inline bool HasGrfMiscBit(GrfMiscBit bit) /* Indicates which are the newgrf features currently loaded ingame */ extern GRFLoadedFeatures _loaded_newgrf_features; -void LoadNewGRFFile(struct GRFConfig *config, GrfLoadingStage stage, Subdirectory subdir, bool temporary); +void LoadNewGRFFile(struct GRFConfig &config, GrfLoadingStage stage, Subdirectory subdir, bool temporary); void LoadNewGRF(SpriteID load_index, uint num_baseset); void ReloadNewGRFData(); // in saveload/afterload.cpp void ResetNewGRFData(); diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index 101e1d2912..88683a0bb1 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -258,14 +258,14 @@ size_t GRFGetSizeOfDataSection(FileHandle &f) * @param subdir The subdirectory to look in. * @return MD5 sum was successfully computed */ -static bool CalcGRFMD5Sum(GRFConfig *config, Subdirectory subdir) +static bool CalcGRFMD5Sum(GRFConfig &config, Subdirectory subdir) { Md5 checksum; uint8_t buffer[1024]; size_t len, size; /* open the file */ - auto f = FioFOpenFile(config->filename, "rb", subdir, &size); + auto f = FioFOpenFile(config.filename, "rb", subdir, &size); if (!f.has_value()) return false; long start = ftell(*f); @@ -280,7 +280,7 @@ static bool CalcGRFMD5Sum(GRFConfig *config, Subdirectory subdir) size -= len; checksum.Append(buffer, len); } - checksum.Finish(config->ident.md5sum); + checksum.Finish(config.ident.md5sum); return true; } @@ -293,27 +293,27 @@ static bool CalcGRFMD5Sum(GRFConfig *config, Subdirectory subdir) * @param subdir the subdirectory to search in. * @return Operation was successfully completed. */ -bool FillGRFDetails(GRFConfig *config, bool is_static, Subdirectory subdir) +bool FillGRFDetails(GRFConfig &config, bool is_static, Subdirectory subdir) { - if (!FioCheckFileExists(config->filename, subdir)) { - config->status = GCS_NOT_FOUND; + if (!FioCheckFileExists(config.filename, subdir)) { + config.status = GCS_NOT_FOUND; return false; } /* Find and load the Action 8 information */ LoadNewGRFFile(config, GLS_FILESCAN, subdir, true); - config->SetSuitablePalette(); - config->FinalizeParameterInfo(); + config.SetSuitablePalette(); + config.FinalizeParameterInfo(); /* Skip if the grfid is 0 (not read) or if it is an internal GRF */ - if (config->ident.grfid == 0 || HasBit(config->flags, GCF_SYSTEM)) return false; + if (config.ident.grfid == 0 || HasBit(config.flags, GCF_SYSTEM)) return false; if (is_static) { /* Perform a 'safety scan' for static GRFs */ LoadNewGRFFile(config, GLS_SAFETYSCAN, subdir, true); /* GCF_UNSAFE is set if GLS_SAFETYSCAN finds unsafe actions */ - if (HasBit(config->flags, GCF_UNSAFE)) return false; + if (HasBit(config.flags, GCF_UNSAFE)) return false; } return CalcGRFMD5Sum(config, subdir); @@ -540,7 +540,7 @@ bool GRFFileScanner::AddFile(const std::string &filename, size_t basepath_length GRFConfig *c = new GRFConfig(filename.c_str() + basepath_length); bool added = true; - if (FillGRFDetails(c, false)) { + if (FillGRFDetails(*c, false)) { if (_all_grfs == nullptr) { _all_grfs = c; } else { @@ -704,10 +704,10 @@ GRFConfig *GetGRFConfig(uint32_t grfid, uint32_t mask) /** Build a string containing space separated parameter values, and terminate */ -std::string GRFBuildParamList(const GRFConfig *c) +std::string GRFBuildParamList(const GRFConfig &c) { std::string result; - for (const uint32_t &value : c->param) { + for (const uint32_t &value : c.param) { if (!result.empty()) result += ' '; result += std::to_string(value); } diff --git a/src/newgrf_config.h b/src/newgrf_config.h index ac470da37d..5f8e10a9bd 100644 --- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -235,12 +235,12 @@ void AppendToGRFConfigList(GRFConfigList &dst, GRFConfig *el); void ClearGRFConfigList(GRFConfigList &config); void ResetGRFConfig(bool defaults); GRFListCompatibility IsGoodGRFConfigList(GRFConfigList &grfconfig); -bool FillGRFDetails(GRFConfig *config, bool is_static, Subdirectory subdir = NEWGRF_DIR); -std::string GRFBuildParamList(const GRFConfig *c); +bool FillGRFDetails(GRFConfig &config, bool is_static, Subdirectory subdir = NEWGRF_DIR); +std::string GRFBuildParamList(const GRFConfig &c); /* In newgrf_gui.cpp */ void ShowNewGRFSettings(bool editable, bool show_params, bool exec_changes, GRFConfigList &config); -void OpenGRFParameterWindow(bool is_baseset, GRFConfig *c, bool editable); +void OpenGRFParameterWindow(bool is_baseset, GRFConfig &c, bool editable); void UpdateNewGRFScanStatus(uint num, const char *name); void UpdateNewGRFConfigPalette(int32_t new_value = 0); diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 1af13d98d4..51f406a2f2 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -68,47 +68,47 @@ void ShowNewGRFError() } } -static void ShowNewGRFInfo(const GRFConfig *c, const Rect &r, bool show_params) +static void ShowNewGRFInfo(const GRFConfig &c, const Rect &r, bool show_params) { Rect tr = r.Shrink(WidgetDimensions::scaled.frametext); - if (c->error.has_value()) { - SetDParamStr(0, c->error->custom_message); // is skipped by built-in messages - SetDParamStr(1, c->filename); - SetDParamStr(2, c->error->data); - for (uint i = 0; i < c->error->param_value.size(); i++) { - SetDParam(3 + i, c->error->param_value[i]); + if (c.error.has_value()) { + SetDParamStr(0, c.error->custom_message); // is skipped by built-in messages + SetDParamStr(1, c.filename); + SetDParamStr(2, c.error->data); + for (uint i = 0; i < c.error->param_value.size(); i++) { + SetDParam(3 + i, c.error->param_value[i]); } - SetDParamStr(0, GetString(c->error->message != STR_NULL ? c->error->message : STR_JUST_RAW_STRING)); - tr.top = DrawStringMultiLine(tr, c->error->severity); + SetDParamStr(0, GetString(c.error->message != STR_NULL ? c.error->message : STR_JUST_RAW_STRING)); + tr.top = DrawStringMultiLine(tr, c.error->severity); } /* Draw filename or not if it is not known (GRF sent over internet) */ - if (!c->filename.empty()) { - SetDParamStr(0, c->filename); + if (!c.filename.empty()) { + SetDParamStr(0, c.filename); tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_FILENAME); } /* Prepare and draw GRF ID */ - SetDParamStr(0, fmt::format("{:08X}", BSWAP32(c->ident.grfid))); + SetDParamStr(0, fmt::format("{:08X}", BSWAP32(c.ident.grfid))); tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_GRF_ID); - if ((_settings_client.gui.newgrf_developer_tools || _settings_client.gui.newgrf_show_old_versions) && c->version != 0) { - SetDParam(0, c->version); + if ((_settings_client.gui.newgrf_developer_tools || _settings_client.gui.newgrf_show_old_versions) && c.version != 0) { + SetDParam(0, c.version); tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_VERSION); } - if ((_settings_client.gui.newgrf_developer_tools || _settings_client.gui.newgrf_show_old_versions) && c->min_loadable_version != 0) { - SetDParam(0, c->min_loadable_version); + if ((_settings_client.gui.newgrf_developer_tools || _settings_client.gui.newgrf_show_old_versions) && c.min_loadable_version != 0) { + SetDParam(0, c.min_loadable_version); tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_MIN_VERSION); } /* Prepare and draw MD5 sum */ - SetDParamStr(0, FormatArrayAsHex(c->ident.md5sum)); + SetDParamStr(0, FormatArrayAsHex(c.ident.md5sum)); tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_MD5SUM); /* Show GRF parameter list */ if (show_params) { - if (!c->param.empty()) { + if (!c.param.empty()) { SetDParam(0, STR_JUST_RAW_STRING); SetDParamStr(1, GRFBuildParamList(c)); } else { @@ -117,23 +117,23 @@ static void ShowNewGRFInfo(const GRFConfig *c, const Rect &r, bool show_params) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_PARAMETER); /* Draw the palette of the NewGRF */ - if (c->palette & GRFP_BLT_32BPP) { - SetDParam(0, (c->palette & GRFP_USE_WINDOWS) ? STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP : STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP); + if (c.palette & GRFP_BLT_32BPP) { + SetDParam(0, (c.palette & GRFP_USE_WINDOWS) ? STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP : STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP); } else { - SetDParam(0, (c->palette & GRFP_USE_WINDOWS) ? STR_NEWGRF_SETTINGS_PALETTE_LEGACY : STR_NEWGRF_SETTINGS_PALETTE_DEFAULT); + SetDParam(0, (c.palette & GRFP_USE_WINDOWS) ? STR_NEWGRF_SETTINGS_PALETTE_LEGACY : STR_NEWGRF_SETTINGS_PALETTE_DEFAULT); } tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_PALETTE); } /* Show flags */ - if (c->status == GCS_NOT_FOUND) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_NOT_FOUND); - if (c->status == GCS_DISABLED) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_DISABLED); - if (HasBit(c->flags, GCF_INVALID)) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_INCOMPATIBLE); - if (HasBit(c->flags, GCF_COMPATIBLE)) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_COMPATIBLE_LOADED); + if (c.status == GCS_NOT_FOUND) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_NOT_FOUND); + if (c.status == GCS_DISABLED) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_DISABLED); + if (HasBit(c.flags, GCF_INVALID)) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_INCOMPATIBLE); + if (HasBit(c.flags, GCF_COMPATIBLE)) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_COMPATIBLE_LOADED); /* Draw GRF info if it exists */ - if (!StrEmpty(c->GetDescription())) { - SetDParamStr(0, c->GetDescription()); + if (!StrEmpty(c.GetDescription())) { + SetDParamStr(0, c.GetDescription()); tr.top = DrawStringMultiLine(tr, STR_JUST_RAW_STRING, TC_BLACK); } else { tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_NO_INFO); @@ -145,7 +145,7 @@ static void ShowNewGRFInfo(const GRFConfig *c, const Rect &r, bool show_params) */ struct NewGRFParametersWindow : public Window { static GRFParameterInfo dummy_parameter_info; ///< Dummy info in case a newgrf didn't provide info about some parameter. - GRFConfig *grf_config; ///< Set the parameters of this GRFConfig. + GRFConfig &grf_config; ///< Set the parameters of this GRFConfig. int32_t clicked_button; ///< The row in which a button was clicked or INT_MAX when none is selected. bool clicked_increase; ///< True if the increase button was clicked, false for the decrease button. bool clicked_dropdown; ///< Whether the dropdown is open. @@ -156,7 +156,7 @@ struct NewGRFParametersWindow : public Window { bool action14present; ///< True if action14 information is present. bool editable; ///< Allow editing parameters. - NewGRFParametersWindow(WindowDesc &desc, bool is_baseset, GRFConfig *c, bool editable) : Window(desc), + NewGRFParametersWindow(WindowDesc &desc, bool is_baseset, GRFConfig &c, bool editable) : Window(desc), grf_config(c), clicked_button(INT32_MAX), clicked_dropdown(false), @@ -164,7 +164,7 @@ struct NewGRFParametersWindow : public Window { clicked_row(INT32_MAX), editable(editable) { - this->action14present = (c->num_valid_params != c->param.size() || !c->param_info.empty()); + this->action14present = (this->grf_config.num_valid_params != this->grf_config.param.size() || !this->grf_config.param_info.empty()); this->CreateNestedTree(); this->GetWidget(WID_NP_CAPTION)->SetStringTip(is_baseset ? STR_BASEGRF_PARAMETERS_CAPTION : STR_NEWGRF_PARAMETERS_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS); @@ -196,7 +196,7 @@ struct NewGRFParametersWindow : public Window { */ bool HasParameterInfo(uint nr) const { - return nr < this->grf_config->param_info.size() && this->grf_config->param_info[nr].has_value(); + return nr < this->grf_config.param_info.size() && this->grf_config.param_info[nr].has_value(); } /** @@ -207,7 +207,7 @@ struct NewGRFParametersWindow : public Window { */ GRFParameterInfo &GetParameterInfo(uint nr) const { - return this->HasParameterInfo(nr) ? this->grf_config->param_info[nr].value() : GetDummyParameterInfo(nr); + return this->HasParameterInfo(nr) ? this->grf_config.param_info[nr].value() : GetDummyParameterInfo(nr); } void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override @@ -240,7 +240,7 @@ struct NewGRFParametersWindow : public Window { case WID_NP_DESCRIPTION: /* Minimum size of 4 lines. The 500 is the default size of the window. */ Dimension suggestion = {500U - WidgetDimensions::scaled.frametext.Horizontal(), (uint)GetCharacterHeight(FS_NORMAL) * 4 + WidgetDimensions::scaled.frametext.Vertical()}; - for (const auto &par_info : this->grf_config->param_info) { + for (const auto &par_info : this->grf_config.param_info) { if (!par_info.has_value()) continue; const char *desc = GetGRFStringFromGRFText(par_info->desc); if (desc == nullptr) continue; @@ -284,12 +284,12 @@ struct NewGRFParametersWindow : public Window { int text_y_offset = (this->line_height - GetCharacterHeight(FS_NORMAL)) / 2; for (int32_t i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < this->vscroll->GetCount(); i++) { GRFParameterInfo &par_info = this->GetParameterInfo(i); - uint32_t current_value = this->grf_config->GetValue(par_info); + uint32_t current_value = this->grf_config.GetValue(par_info); bool selected = (i == this->clicked_row); if (par_info.type == PTYPE_BOOL) { DrawBoolButton(buttons_left, ir.top + button_y_offset, current_value != 0, this->editable); - SetDParam(2, this->grf_config->GetValue(par_info) == 0 ? STR_CONFIG_SETTING_OFF : STR_CONFIG_SETTING_ON); + SetDParam(2, this->grf_config.GetValue(par_info) == 0 ? STR_CONFIG_SETTING_OFF : STR_CONFIG_SETTING_ON); } else if (par_info.type == PTYPE_UINT_ENUM) { if (par_info.complete_labels) { DrawDropDownButton(buttons_left, ir.top + button_y_offset, COLOUR_YELLOW, this->clicked_row == i && this->clicked_dropdown, this->editable); @@ -335,22 +335,20 @@ struct NewGRFParametersWindow : public Window { { switch (widget) { case WID_NP_NUMPAR_DEC: - if (this->editable && !this->action14present && !this->grf_config->param.empty()) { - this->grf_config->param.pop_back(); + if (this->editable && !this->action14present && !this->grf_config.param.empty()) { + this->grf_config.param.pop_back(); this->InvalidateData(); SetWindowDirty(WC_GAME_OPTIONS, WN_GAME_OPTIONS_NEWGRF_STATE); } break; - case WID_NP_NUMPAR_INC: { - GRFConfig *c = this->grf_config; - if (this->editable && !this->action14present && c->param.size() < c->num_valid_params) { - this->grf_config->param.emplace_back(0); + case WID_NP_NUMPAR_INC: + if (this->editable && !this->action14present && this->grf_config.param.size() < this->grf_config.num_valid_params) { + this->grf_config.param.emplace_back(0); this->InvalidateData(); SetWindowDirty(WC_GAME_OPTIONS, WN_GAME_OPTIONS_NEWGRF_STATE); } break; - } case WID_NP_BACKGROUND: { if (!this->editable) break; @@ -371,7 +369,7 @@ struct NewGRFParametersWindow : public Window { GRFParameterInfo &par_info = this->GetParameterInfo(num); /* One of the arrows is clicked */ - uint32_t old_val = this->grf_config->GetValue(par_info); + uint32_t old_val = this->grf_config.GetValue(par_info); if (par_info.type != PTYPE_BOOL && IsInsideMM(x, 0, SETTING_BUTTON_WIDTH) && par_info.complete_labels) { if (this->clicked_dropdown) { /* unclick the dropdown */ @@ -416,7 +414,7 @@ struct NewGRFParametersWindow : public Window { } } if (val != old_val) { - this->grf_config->SetValue(par_info, val); + this->grf_config.SetValue(par_info, val); this->clicked_button = num; this->unclick_timeout.Reset(); @@ -432,7 +430,7 @@ struct NewGRFParametersWindow : public Window { case WID_NP_RESET: if (!this->editable) break; - this->grf_config->SetParameterDefaults(); + this->grf_config.SetParameterDefaults(); this->InvalidateData(); SetWindowDirty(WC_GAME_OPTIONS, WN_GAME_OPTIONS_NEWGRF_STATE); break; @@ -448,7 +446,7 @@ struct NewGRFParametersWindow : public Window { if (!str.has_value() || str->empty()) return; int32_t value = atoi(str->c_str()); GRFParameterInfo &par_info = this->GetParameterInfo(this->clicked_row); - this->grf_config->SetValue(par_info, value); + this->grf_config.SetValue(par_info, value); this->SetDirty(); } @@ -457,7 +455,7 @@ struct NewGRFParametersWindow : public Window { if (widget != WID_NP_SETTING_DROPDOWN) return; assert(this->clicked_dropdown); GRFParameterInfo &par_info = this->GetParameterInfo(this->clicked_row); - this->grf_config->SetValue(par_info, index); + this->grf_config.SetValue(par_info, index); this->SetDirty(); } @@ -487,11 +485,11 @@ struct NewGRFParametersWindow : public Window { { if (!gui_scope) return; if (!this->action14present) { - this->SetWidgetDisabledState(WID_NP_NUMPAR_DEC, !this->editable || this->grf_config->param.empty()); - this->SetWidgetDisabledState(WID_NP_NUMPAR_INC, !this->editable || std::size(this->grf_config->param) >= this->grf_config->num_valid_params); + this->SetWidgetDisabledState(WID_NP_NUMPAR_DEC, !this->editable || this->grf_config.param.empty()); + this->SetWidgetDisabledState(WID_NP_NUMPAR_INC, !this->editable || std::size(this->grf_config.param) >= this->grf_config.num_valid_params); } - this->vscroll->SetCount(this->action14present ? this->grf_config->num_valid_params : GRFConfig::MAX_NUM_PARAMS); + this->vscroll->SetCount(this->action14present ? this->grf_config.num_valid_params : GRFConfig::MAX_NUM_PARAMS); if (this->clicked_row != INT32_MAX && this->clicked_row >= this->vscroll->GetCount()) { this->clicked_row = INT32_MAX; this->CloseChildWindows(WC_QUERY_STRING); @@ -547,7 +545,7 @@ static WindowDesc _newgrf_parameters_desc( _nested_newgrf_parameter_widgets ); -void OpenGRFParameterWindow(bool is_baseset, GRFConfig *c, bool editable) +void OpenGRFParameterWindow(bool is_baseset, GRFConfig &c, bool editable) { CloseWindowByClass(WC_GRF_PARAMETERS); new NewGRFParametersWindow(_newgrf_parameters_desc, is_baseset, c, editable); @@ -818,12 +816,12 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { * @param c grf to display. * @return Palette for the sprite. */ - inline PaletteID GetPalette(const GRFConfig *c) const + inline PaletteID GetPalette(const GRFConfig &c) const { PaletteID pal; /* Pick a colour */ - switch (c->status) { + switch (c.status) { case GCS_NOT_FOUND: case GCS_DISABLED: pal = PALETTE_TO_RED; @@ -838,9 +836,9 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { /* Do not show a "not-failure" colour when it actually failed to load */ if (pal != PALETTE_TO_RED) { - if (HasBit(c->flags, GCF_STATIC)) { + if (HasBit(c.flags, GCF_STATIC)) { pal = PALETTE_TO_GREY; - } else if (HasBit(c->flags, GCF_COMPATIBLE)) { + } else if (HasBit(c.flags, GCF_COMPATIBLE)) { pal = PALETTE_TO_ORANGE; } } @@ -874,7 +872,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { if (this->vscroll->IsVisible(i)) { const char *text = c->GetName(); bool h = (this->active_sel == c); - PaletteID pal = this->GetPalette(c); + PaletteID pal = this->GetPalette(*c); if (h) { GfxFillRect(br.left, tr.top, br.right, tr.top + step_height - 1, PC_DARK_BLUE); @@ -932,7 +930,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { const GRFConfig *selected = this->active_sel; if (selected == nullptr) selected = this->avail_sel; if (selected != nullptr) { - ShowNewGRFInfo(selected, r, this->show_params); + ShowNewGRFInfo(*selected, r, this->show_params); } break; } @@ -1134,7 +1132,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { case WID_NS_SET_PARAMETERS: { // Edit parameters if (this->active_sel == nullptr || !this->show_params || this->active_sel->num_valid_params == 0) break; - OpenGRFParameterWindow(false, this->active_sel, this->editable); + OpenGRFParameterWindow(false, *this->active_sel, this->editable); this->InvalidateData(GOID_NEWGRF_CHANGES_MADE); break; } diff --git a/src/settings.cpp b/src/settings.cpp index 6665d171af..573bb89132 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1108,7 +1108,7 @@ static GRFConfig *GRFLoadConfig(const IniFile &ini, const char *grpname, bool is } /* Check if item is valid */ - if (!FillGRFDetails(c, is_static) || HasBit(c->flags, GCF_INVALID)) { + if (!FillGRFDetails(*c, is_static) || HasBit(c->flags, GCF_INVALID)) { if (c->status == GCS_NOT_FOUND) { SetDParam(1, STR_CONFIG_ERROR_INVALID_GRF_NOT_FOUND); } else if (HasBit(c->flags, GCF_UNSAFE)) { @@ -1242,7 +1242,7 @@ static void GraphicsSetSaveConfig(IniFile &ini) const GRFConfig *extra_cfg = used_set->GetExtraConfig(); if (extra_cfg != nullptr && !extra_cfg->param.empty()) { group.GetOrCreateItem("extra_version").SetValue(fmt::format("{}", extra_cfg->version)); - group.GetOrCreateItem("extra_params").SetValue(GRFBuildParamList(extra_cfg)); + group.GetOrCreateItem("extra_params").SetValue(GRFBuildParamList(*extra_cfg)); } } @@ -1256,7 +1256,7 @@ static void GRFSaveConfig(IniFile &ini, const char *grpname, const GRFConfig *li for (c = list; c != nullptr; c = c->next) { std::string key = fmt::format("{:08X}|{}|{}", BSWAP32(c->ident.grfid), FormatArrayAsHex(c->ident.md5sum), c->filename); - group.GetOrCreateItem(key).SetValue(GRFBuildParamList(c)); + group.GetOrCreateItem(key).SetValue(GRFBuildParamList(*c)); } } diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 5cac7581c2..227aa584fa 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -815,7 +815,7 @@ struct GameOptionsWindow : Window { if (used_set == nullptr || !used_set->IsConfigurable()) break; GRFConfig &extra_cfg = used_set->GetOrCreateExtraConfig(); if (extra_cfg.param.empty()) extra_cfg.SetParameterDefaults(); - OpenGRFParameterWindow(true, &extra_cfg, _game_mode == GM_MENU); + OpenGRFParameterWindow(true, extra_cfg, _game_mode == GM_MENU); if (_game_mode == GM_MENU) this->reload = true; break; }