mirror of https://github.com/OpenTTD/OpenTTD
Fix: if bootstrap failed, it could end with an empty screen instead of error
There are various of ways bootstrap can fail: - Failing network connection - Incomplete download - No write permissions - Disk full - (others I forgot) They all result in a screen with no windows. To ensure we at least always show something when anything bad happens, if the bootstrap is not successful, show a screen what the next step for the human should be.pull/8862/head
parent
13011e00c6
commit
22a9d921ef
|
@ -14,6 +14,7 @@
|
|||
#if defined(WITH_FREETYPE) || defined(WITH_UNISCRIBE) || defined(WITH_COCOA)
|
||||
|
||||
#include "core/geometry_func.hpp"
|
||||
#include "error.h"
|
||||
#include "fontcache.h"
|
||||
#include "gfx_func.h"
|
||||
#include "network/network.h"
|
||||
|
@ -61,6 +62,63 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
/** Nested widgets for the error window. */
|
||||
static const NWidgetPart _nested_bootstrap_errmsg_widgets[] = {
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_CAPTION, COLOUR_GREY, WID_BEM_CAPTION), SetDataTip(STR_MISSING_GRAPHICS_ERROR_TITLE, STR_NULL),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_BEM_MESSAGE), EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_BEM_QUIT), SetDataTip(STR_MISSING_GRAPHICS_ERROR_QUIT, STR_NULL), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
};
|
||||
|
||||
/** Window description for the error window. */
|
||||
static WindowDesc _bootstrap_errmsg_desc(
|
||||
WDP_CENTER, nullptr, 0, 0,
|
||||
WC_BOOTSTRAP, WC_NONE,
|
||||
WDF_MODAL,
|
||||
_nested_bootstrap_errmsg_widgets, lengthof(_nested_bootstrap_errmsg_widgets)
|
||||
);
|
||||
|
||||
/** The window for a failed bootstrap. */
|
||||
class BootstrapErrorWindow : public Window {
|
||||
public:
|
||||
BootstrapErrorWindow() : Window(&_bootstrap_errmsg_desc)
|
||||
{
|
||||
this->InitNested(1);
|
||||
}
|
||||
|
||||
~BootstrapErrorWindow()
|
||||
{
|
||||
_exit_game = true;
|
||||
}
|
||||
|
||||
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
|
||||
{
|
||||
if (widget == WID_BEM_MESSAGE) {
|
||||
*size = GetStringBoundingBox(STR_MISSING_GRAPHICS_ERROR);
|
||||
size->height = GetStringHeight(STR_MISSING_GRAPHICS_ERROR, size->width - WD_FRAMETEXT_LEFT - WD_FRAMETEXT_RIGHT) + WD_FRAMETEXT_BOTTOM + WD_FRAMETEXT_TOP;
|
||||
}
|
||||
}
|
||||
|
||||
void DrawWidget(const Rect &r, int widget) const override
|
||||
{
|
||||
if (widget == WID_BEM_MESSAGE) {
|
||||
DrawStringMultiLine(r.left + WD_FRAMETEXT_LEFT, r.right - WD_FRAMETEXT_RIGHT, r.top + WD_FRAMETEXT_TOP, r.bottom - WD_FRAMETEXT_BOTTOM, STR_MISSING_GRAPHICS_ERROR, TC_FROMSTRING, SA_CENTER);
|
||||
}
|
||||
}
|
||||
|
||||
void OnClick(Point pt, int widget, int click_count) override
|
||||
{
|
||||
if (widget == WID_BEM_QUIT) {
|
||||
_exit_game = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/** Nested widgets for the download window. */
|
||||
static const NWidgetPart _nested_boostrap_download_status_window_widgets[] = {
|
||||
NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_CONTENT_DOWNLOAD_TITLE, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
|
||||
|
@ -86,6 +144,14 @@ public:
|
|||
{
|
||||
}
|
||||
|
||||
~BootstrapContentDownloadStatusWindow()
|
||||
{
|
||||
/* If we are not set to exit the game, it means the bootstrap failed. */
|
||||
if (!_exit_game) {
|
||||
new BootstrapErrorWindow();
|
||||
}
|
||||
}
|
||||
|
||||
void OnDownloadComplete(ContentID cid) override
|
||||
{
|
||||
/* We have completed downloading. We can trigger finding the right set now. */
|
||||
|
|
|
@ -2339,6 +2339,10 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD
|
|||
STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Yes, download the graphics
|
||||
STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}No, exit OpenTTD
|
||||
|
||||
STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}Downloading failed
|
||||
STR_MISSING_GRAPHICS_ERROR :{BLACK}Downloading graphics failed.{}Please download graphics manually.
|
||||
STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Exit OpenTTD
|
||||
|
||||
# Transparency settings window
|
||||
STR_TRANSPARENCY_CAPTION :{WHITE}Transparency Options
|
||||
STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Toggle transparency for signs. Ctrl+Click to lock
|
||||
|
|
|
@ -15,6 +15,13 @@ enum BootstrapBackgroundWidgets {
|
|||
WID_BB_BACKGROUND, ///< Background of the window.
|
||||
};
|
||||
|
||||
/** Widgets of the #BootstrapErrmsgWindow class. */
|
||||
enum BootstrapErrorMessageWidgets {
|
||||
WID_BEM_CAPTION, ///< Caption of the window.
|
||||
WID_BEM_MESSAGE, ///< Error message.
|
||||
WID_BEM_QUIT, ///< Quit button.
|
||||
};
|
||||
|
||||
/** Widgets of the #BootstrapContentDownloadStatusWindow class. */
|
||||
enum BootstrapAskForDownloadWidgets {
|
||||
WID_BAFD_QUESTION, ///< The question whether to download.
|
||||
|
|
Loading…
Reference in New Issue