From 5cc35fd33a2f83934d6ec4febd1b16c6842bf8f8 Mon Sep 17 00:00:00 2001 From: Sergii Pylypenko Date: Mon, 15 Mar 2021 18:06:32 +0200 Subject: [PATCH] Fixed NewGRF dialog crashing --- src/newgrf_gui.cpp | 101 ++++++--------------------------------------- 1 file changed, 12 insertions(+), 89 deletions(-) diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index bc88f14e8a..3c39d8b2cc 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -634,7 +634,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_NS_SCROLLBAR); - this->vscroll2 = this->editable ? this->GetScrollbar(WID_NS_SCROLL2BAR) : NULL; + this->vscroll2 = this->GetScrollbar(WID_NS_SCROLL2BAR); this->GetWidget(WID_NS_SHOW_REMOVE)->SetDisplayedPlane(this->editable ? 0 : 1); this->FinishInitNested(WN_GAME_OPTIONS_NEWGRF_STATE); @@ -770,7 +770,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_NS_FILE_LIST); - if (this->vscroll2) this->vscroll2->SetCapacityFromWidget(this, WID_NS_AVAIL_LIST); + this->vscroll2->SetCapacityFromWidget(this, WID_NS_AVAIL_LIST); } void SetStringParameters(int widget) const override @@ -1284,10 +1284,8 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { widget_data = STR_INTRO_ONLINE_CONTENT; tool_tip = STR_INTRO_TOOLTIP_ONLINE_CONTENT; } - if (this->editable) { - this->GetWidget(WID_NS_CONTENT_DOWNLOAD)->widget_data = widget_data; - this->GetWidget(WID_NS_CONTENT_DOWNLOAD)->tool_tip = tool_tip; - } + this->GetWidget(WID_NS_CONTENT_DOWNLOAD)->widget_data = widget_data; + this->GetWidget(WID_NS_CONTENT_DOWNLOAD)->tool_tip = tool_tip; this->GetWidget(WID_NS_CONTENT_DOWNLOAD2)->widget_data = widget_data; this->GetWidget(WID_NS_CONTENT_DOWNLOAD2)->tool_tip = tool_tip; @@ -1490,7 +1488,7 @@ private: } } - if (this->vscroll2) this->vscroll2->SetCount((uint)this->avails.size()); // Update the scrollbar + this->vscroll2->SetCount((uint)this->avails.size()); // Update the scrollbar } /** @@ -1903,88 +1901,19 @@ static const NWidgetPart _nested_newgrf_infopanel_widgets[] = { NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_TOGGLE_PALETTE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_NEWGRF_SETTINGS_TOGGLE_PALETTE, STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP), EndContainer(), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_APPLY_CHANGES), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_NEWGRF_SETTINGS_APPLY_CHANGES, STR_NULL), - EndContainer(), -}; - -static const NWidgetPart _nested_newgrf_actives_wide_widgets[] = { - /* Left side, presets. */ - NWidget(NWID_VERTICAL), - NWidget(WWT_LABEL, COLOUR_MAUVE), SetDataTip(STR_NEWGRF_SETTINGS_ACTIVE_LIST, STR_NULL), - SetFill(1, 0), SetResize(1, 0), SetPadding(3, WD_FRAMETEXT_RIGHT, 0, WD_FRAMETEXT_LEFT), - /* Left side, active grfs. */ - NWidget(NWID_HORIZONTAL), SetPadding(0, 2, 0, 2), - NWidget(WWT_PANEL, COLOUR_MAUVE), - NWidget(WWT_INSET, COLOUR_MAUVE, WID_NS_FILE_LIST), SetMinimalSize(100, 1), SetPadding(2, 2, 2, 2), - SetFill(1, 1), SetResize(1, 1), SetScrollbar(WID_NS_SCROLLBAR), SetDataTip(STR_NULL, STR_NEWGRF_SETTINGS_FILE_TOOLTIP), - EndContainer(), - EndContainer(), - NWidget(NWID_VSCROLLBAR, COLOUR_MAUVE, WID_NS_SCROLLBAR), - EndContainer(), - EndContainer(), -}; - -static const NWidgetPart _nested_newgrf_buttons_wide_widgets[] = { - NWidget(NWID_VERTICAL), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_TEXT, COLOUR_MAUVE), SetDataTip(STR_NEWGRF_SETTINGS_SELECT_PRESET, STR_NULL), - SetPadding(0, WD_FRAMETEXT_RIGHT, 0, 0), - NWidget(WWT_DROPDOWN, COLOUR_YELLOW, WID_NS_PRESET_LIST), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_JUST_STRING, STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP), - EndContainer(), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_PRESET_SAVE), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_NEWGRF_SETTINGS_PRESET_SAVE, STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_PRESET_DELETE), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_NEWGRF_SETTINGS_PRESET_DELETE, STR_NEWGRF_SETTINGS_PRESET_DELETE_TOOLTIP), - EndContainer(), - - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_NS_SHOW_REMOVE), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPadding(0, 2, 0, 2), SetPIP(0, WD_RESIZEBOX_WIDTH, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_REMOVE), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_NEWGRF_SETTINGS_REMOVE, STR_NEWGRF_SETTINGS_REMOVE_TOOLTIP), - NWidget(NWID_VERTICAL), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_MOVE_UP), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_NEWGRF_SETTINGS_MOVEUP, STR_NEWGRF_SETTINGS_MOVEUP_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_MOVE_DOWN), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_NEWGRF_SETTINGS_MOVEDOWN, STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP), - EndContainer(), - EndContainer(), - NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPadding(0, 0, 0, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_RESCAN_FILES2), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_NEWGRF_SETTINGS_RESCAN_FILES, STR_NEWGRF_SETTINGS_RESCAN_FILES_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_CONTENT_DOWNLOAD2), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), + NWidget(NWID_VERTICAL), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_APPLY_CHANGES), SetFill(1, 0), SetResize(1, 0), + SetDataTip(STR_NEWGRF_SETTINGS_APPLY_CHANGES, STR_NULL), + /* Resize button. */ + NWidget(NWID_HORIZONTAL), + NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_RESIZEBOX, COLOUR_MAUVE), EndContainer(), EndContainer(), - - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_OPEN_URL), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_CONTENT_OPEN_URL, STR_CONTENT_OPEN_URL_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_NEWGRF_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_NEWGRF_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_NEWGRF_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL), - EndContainer(), - - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_VIEW_PARAMETERS), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_NEWGRF_SETTINGS_SHOW_PARAMETERS, STR_NULL), - EndContainer(), -}; - -static const NWidgetPart _nested_newgrf_infopanel_wide_widgets[] = { - /* Right side, info panel. */ - NWidget(WWT_PANEL, COLOUR_MAUVE), - NWidget(WWT_EMPTY, COLOUR_MAUVE, WID_NS_NEWGRF_INFO_TITLE), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_EMPTY, COLOUR_MAUVE, WID_NS_NEWGRF_INFO), SetFill(1, 1), SetResize(1, 1), SetMinimalSize(100, 100), EndContainer(), }; /** Construct nested container widget for managing the lists and the info panel of the NewGRF GUI. */ -static bool _newgrf_display_editable = false; // Quick hack NWidgetBase* NewGRFDisplay(int *biggest_index) { NWidgetBase *avs = MakeNWidgets(_nested_newgrf_availables_widgets, lengthof(_nested_newgrf_availables_widgets), biggest_index, nullptr); @@ -2008,11 +1937,6 @@ static const NWidgetPart _nested_newgrf_widgets[] = { EndContainer(), NWidget(WWT_PANEL, COLOUR_MAUVE), NWidgetFunction(NewGRFDisplay), SetPadding(WD_RESIZEBOX_WIDTH, WD_RESIZEBOX_WIDTH, 2, WD_RESIZEBOX_WIDTH), - /* Resize button. */ - NWidget(NWID_HORIZONTAL), - NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_RESIZEBOX, COLOUR_MAUVE), - EndContainer(), EndContainer(), }; @@ -2071,7 +1995,6 @@ static void NewGRFConfirmationCallback(Window *w, bool confirmed) void ShowNewGRFSettings(bool editable, bool show_params, bool exec_changes, GRFConfig **config) { DeleteWindowByClass(WC_GAME_OPTIONS); - _newgrf_display_editable = editable; new NewGRFWindow(&_newgrf_desc, editable, show_params, exec_changes, config); }