diff --git a/src/lang/english.txt b/src/lang/english.txt index b1246fe658..4a0711c1ef 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -972,6 +972,8 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Sound effects STR_GAME_OPTIONS_MUSIC_VOLUME :Music +STR_GAME_OPTIONS_SETTING :{STRING}: {ORANGE}{STRING} + STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :Currency units diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 3680747305..62d9366952 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -590,6 +590,11 @@ struct GameOptionsWindow : Window { return list; } + std::string GetToggleString(StringID stringid, WidgetID state_widget) const + { + return GetString(STR_GAME_OPTIONS_SETTING, stringid, this->IsWidgetLowered(state_widget) ? STR_CONFIG_SETTING_ON : STR_CONFIG_SETTING_OFF); + } + std::string GetWidgetString(WidgetID widget, StringID stringid) const override { switch (widget) { @@ -643,6 +648,30 @@ struct GameOptionsWindow : Window { } break; + case WID_GO_SURVEY_PARTICIPATE_TEXT: + return GetToggleString(STR_GAME_OPTIONS_PARTICIPATE_SURVEY, WID_GO_SURVEY_PARTICIPATE_BUTTON); + + case WID_GO_GUI_SCALE_AUTO_TEXT: + return GetToggleString(STR_GAME_OPTIONS_GUI_SCALE_AUTO, WID_GO_GUI_SCALE_AUTO); + + case WID_GO_GUI_SCALE_BEVEL_TEXT: + return GetToggleString(STR_GAME_OPTIONS_GUI_SCALE_BEVELS, WID_GO_GUI_SCALE_BEVEL_BUTTON); + + case WID_GO_GUI_FONT_SPRITE_TEXT: + return GetToggleString(STR_GAME_OPTIONS_GUI_FONT_SPRITE, WID_GO_GUI_FONT_SPRITE); + + case WID_GO_GUI_FONT_AA_TEXT: + return GetToggleString(STR_GAME_OPTIONS_GUI_FONT_AA, WID_GO_GUI_FONT_AA); + + case WID_GO_FULLSCREEN_TEXT: + return GetToggleString(STR_GAME_OPTIONS_FULLSCREEN, WID_GO_FULLSCREEN_BUTTON); + + case WID_GO_VIDEO_ACCEL_TEXT: + return GetToggleString(STR_GAME_OPTIONS_VIDEO_ACCELERATION, WID_GO_VIDEO_ACCEL_BUTTON); + + case WID_GO_VIDEO_VSYNC_TEXT: + return GetToggleString(STR_GAME_OPTIONS_VIDEO_VSYNC, WID_GO_VIDEO_VSYNC_BUTTON); + default: return this->Window::GetWidgetString(widget, stringid); } @@ -941,6 +970,7 @@ struct GameOptionsWindow : Window { } this->SetWidgetLoweredState(WID_GO_FULLSCREEN_BUTTON, _fullscreen); this->SetWidgetDirty(WID_GO_FULLSCREEN_BUTTON); + this->SetWidgetDirty(WID_GO_FULLSCREEN_TEXT); break; case WID_GO_VIDEO_ACCEL_BUTTON: @@ -948,10 +978,12 @@ struct GameOptionsWindow : Window { ShowErrorMessage(GetEncodedString(STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART), {}, WL_INFO); this->SetWidgetLoweredState(WID_GO_VIDEO_ACCEL_BUTTON, _video_hw_accel); this->SetWidgetDirty(WID_GO_VIDEO_ACCEL_BUTTON); + this->SetWidgetDirty(WID_GO_VIDEO_ACCEL_TEXT); #ifndef __APPLE__ this->SetWidgetLoweredState(WID_GO_VIDEO_VSYNC_BUTTON, _video_hw_accel && _video_vsync); this->SetWidgetDisabledState(WID_GO_VIDEO_VSYNC_BUTTON, !_video_hw_accel); this->SetWidgetDirty(WID_GO_VIDEO_VSYNC_BUTTON); + this->SetWidgetDirty(WID_GO_VIDEO_VSYNC_TEXT); #endif break; @@ -963,6 +995,7 @@ struct GameOptionsWindow : Window { this->SetWidgetLoweredState(WID_GO_VIDEO_VSYNC_BUTTON, _video_vsync); this->SetWidgetDirty(WID_GO_VIDEO_VSYNC_BUTTON); + this->SetWidgetDirty(WID_GO_VIDEO_VSYNC_TEXT); this->SetWidgetDisabledState(WID_GO_REFRESH_RATE_DROPDOWN, _video_vsync); this->SetWidgetDirty(WID_GO_REFRESH_RATE_DROPDOWN); break; @@ -1025,6 +1058,7 @@ struct GameOptionsWindow : Window { this->gui_scale = _gui_scale; } this->SetWidgetDirty(widget); + this->SetWidgetDirty(WID_GO_GUI_SCALE_AUTO_TEXT); break; } @@ -1569,9 +1603,9 @@ static constexpr NWidgetPart _nested_game_options_widgets[] = { NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GO_SURVEY_SEL), NWidget(WWT_FRAME, GAME_OPTIONS_BACKGROUND), SetStringTip(STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME), SetTextStyle(GAME_OPTIONS_FRAME), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_TEXT, INVALID_COLOUR), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_GAME_OPTIONS_PARTICIPATE_SURVEY), SetTextStyle(GAME_OPTIONS_LABEL), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), NWidget(WWT_BOOLBTN, GAME_OPTIONS_BACKGROUND, WID_GO_SURVEY_PARTICIPATE_BUTTON), SetAlternateColourTip(GAME_OPTIONS_BUTTON, STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP), + NWidget(WWT_TEXT, INVALID_COLOUR, WID_GO_SURVEY_PARTICIPATE_TEXT), SetFill(1, 0), SetResize(1, 0), SetTextStyle(GAME_OPTIONS_LABEL), EndContainer(), NWidget(NWID_HORIZONTAL, NWidContainerFlag::EqualSize), NWidget(WWT_TEXTBTN, GAME_OPTIONS_BUTTON, WID_GO_SURVEY_PREVIEW_BUTTON), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW, STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP), @@ -1592,22 +1626,22 @@ static constexpr NWidgetPart _nested_game_options_widgets[] = { NWidget(WWT_TEXT, INVALID_COLOUR), SetStringTip(STR_GAME_OPTIONS_GUI_SCALE_FRAME), SetTextStyle(GAME_OPTIONS_LABEL), NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GO_GUI_SCALE), SetMinimalTextLines(1, 12 + WidgetDimensions::unscaled.vsep_normal, FS_SMALL), SetFill(1, 0), SetResize(1, 0), SetToolTip(STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP), EndContainer(), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_TEXT, INVALID_COLOUR), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_GAME_OPTIONS_GUI_SCALE_AUTO), SetTextStyle(GAME_OPTIONS_LABEL), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), NWidget(WWT_BOOLBTN, GAME_OPTIONS_BACKGROUND, WID_GO_GUI_SCALE_AUTO), SetAlternateColourTip(GAME_OPTIONS_BUTTON, STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP), + NWidget(WWT_TEXT, INVALID_COLOUR, WID_GO_GUI_SCALE_AUTO_TEXT), SetFill(1, 0), SetResize(1, 0), SetTextStyle(GAME_OPTIONS_LABEL), EndContainer(), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_TEXT, INVALID_COLOUR), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_GAME_OPTIONS_GUI_SCALE_BEVELS), SetTextStyle(GAME_OPTIONS_LABEL), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), NWidget(WWT_BOOLBTN, GAME_OPTIONS_BACKGROUND, WID_GO_GUI_SCALE_BEVEL_BUTTON), SetAlternateColourTip(GAME_OPTIONS_BUTTON, STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP), + NWidget(WWT_TEXT, INVALID_COLOUR, WID_GO_GUI_SCALE_BEVEL_TEXT), SetFill(1, 0), SetResize(1, 0), SetTextStyle(GAME_OPTIONS_LABEL), EndContainer(), #ifdef HAS_TRUETYPE_FONT - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_TEXT, INVALID_COLOUR), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_GAME_OPTIONS_GUI_FONT_SPRITE), SetTextStyle(GAME_OPTIONS_LABEL), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), NWidget(WWT_BOOLBTN, GAME_OPTIONS_BACKGROUND, WID_GO_GUI_FONT_SPRITE), SetAlternateColourTip(GAME_OPTIONS_BUTTON, STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP), + NWidget(WWT_TEXT, INVALID_COLOUR, WID_GO_GUI_FONT_SPRITE_TEXT), SetFill(1, 0), SetResize(1, 0), SetTextStyle(GAME_OPTIONS_LABEL), EndContainer(), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_TEXT, INVALID_COLOUR), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_GAME_OPTIONS_GUI_FONT_AA), SetTextStyle(GAME_OPTIONS_LABEL), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), NWidget(WWT_BOOLBTN, GAME_OPTIONS_BACKGROUND, WID_GO_GUI_FONT_AA), SetAlternateColourTip(GAME_OPTIONS_BUTTON, STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP), + NWidget(WWT_TEXT, INVALID_COLOUR, WID_GO_GUI_FONT_AA_TEXT), SetFill(1, 0), SetResize(1, 0), SetTextStyle(GAME_OPTIONS_LABEL), EndContainer(), #endif /* HAS_TRUETYPE_FONT */ EndContainer(), @@ -1623,18 +1657,18 @@ static constexpr NWidgetPart _nested_game_options_widgets[] = { NWidget(WWT_TEXT, INVALID_COLOUR), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_GAME_OPTIONS_REFRESH_RATE), SetTextStyle(GAME_OPTIONS_LABEL), NWidget(WWT_DROPDOWN, GAME_OPTIONS_BUTTON, WID_GO_REFRESH_RATE_DROPDOWN), SetFill(1, 0), SetToolTip(STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP), EndContainer(), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_TEXT, INVALID_COLOUR), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_GAME_OPTIONS_FULLSCREEN), SetTextStyle(GAME_OPTIONS_LABEL), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), NWidget(WWT_BOOLBTN, GAME_OPTIONS_BACKGROUND, WID_GO_FULLSCREEN_BUTTON), SetAlternateColourTip(GAME_OPTIONS_BUTTON, STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP), + NWidget(WWT_TEXT, INVALID_COLOUR, WID_GO_FULLSCREEN_TEXT), SetFill(1, 0), SetResize(1, 0), SetTextStyle(GAME_OPTIONS_LABEL), EndContainer(), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_TEXT, INVALID_COLOUR), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_GAME_OPTIONS_VIDEO_ACCELERATION), SetTextStyle(GAME_OPTIONS_LABEL), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), NWidget(WWT_BOOLBTN, GAME_OPTIONS_BACKGROUND, WID_GO_VIDEO_ACCEL_BUTTON), SetAlternateColourTip(GAME_OPTIONS_BUTTON, STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP), + NWidget(WWT_TEXT, INVALID_COLOUR,WID_GO_VIDEO_ACCEL_TEXT), SetFill(1, 0), SetResize(1, 0), SetTextStyle(GAME_OPTIONS_LABEL), EndContainer(), #ifndef __APPLE__ - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_TEXT, INVALID_COLOUR), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_GAME_OPTIONS_VIDEO_VSYNC), SetTextStyle(GAME_OPTIONS_LABEL), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), NWidget(WWT_BOOLBTN, GAME_OPTIONS_BACKGROUND, WID_GO_VIDEO_VSYNC_BUTTON), SetAlternateColourTip(GAME_OPTIONS_BUTTON, STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP), + NWidget(WWT_TEXT, INVALID_COLOUR, WID_GO_VIDEO_VSYNC_TEXT), SetFill(1, 0), SetResize(1, 0), SetTextStyle(GAME_OPTIONS_LABEL), EndContainer(), #endif NWidget(NWID_HORIZONTAL), diff --git a/src/widgets/settings_widget.h b/src/widgets/settings_widget.h index a4d88669a4..bda883e4f3 100644 --- a/src/widgets/settings_widget.h +++ b/src/widgets/settings_widget.h @@ -24,11 +24,16 @@ enum GameOptionsWidgets : WidgetID { WID_GO_LANG_DROPDOWN, ///< Language dropdown. WID_GO_RESOLUTION_DROPDOWN, ///< Dropdown for the resolution. WID_GO_FULLSCREEN_BUTTON, ///< Toggle fullscreen. + WID_GO_FULLSCREEN_TEXT, ///< Text for toggle fullscreen. WID_GO_GUI_SCALE, ///< GUI Scale slider. WID_GO_GUI_SCALE_AUTO, ///< Autodetect GUI scale button. + WID_GO_GUI_SCALE_AUTO_TEXT, ///< Text for Autodetect GUI scale. WID_GO_GUI_SCALE_BEVEL_BUTTON, ///< Toggle for chunky bevels. + WID_GO_GUI_SCALE_BEVEL_TEXT, ///< Text for chunky bevels. WID_GO_GUI_FONT_SPRITE, ///< Toggle whether to prefer the sprite font over TTF fonts. + WID_GO_GUI_FONT_SPRITE_TEXT, ///< Text for sprite font toggle. WID_GO_GUI_FONT_AA, ///< Toggle whether to anti-alias fonts. + WID_GO_GUI_FONT_AA_TEXT, ///< Text for anti-alias toggle. WID_GO_BASE_GRF_DROPDOWN, ///< Use to select a base GRF. WID_GO_BASE_GRF_PARAMETERS, ///< Base GRF parameters. WID_GO_BASE_GRF_CONTENT_DOWNLOAD, ///< 'Get Content' button for base GRF. @@ -51,11 +56,14 @@ enum GameOptionsWidgets : WidgetID { WID_GO_BASE_MUSIC_TEXTFILE, ///< Open base music readme, changelog (+1) or license (+2). WID_GO_BASE_MUSIC_DESCRIPTION = WID_GO_BASE_MUSIC_TEXTFILE + TFT_CONTENT_END, ///< Description of selected base music set. WID_GO_VIDEO_ACCEL_BUTTON, ///< Toggle for video acceleration. + WID_GO_VIDEO_ACCEL_TEXT, ///< Text for video acceleration toggle. WID_GO_VIDEO_VSYNC_BUTTON, ///< Toggle for video vsync. + WID_GO_VIDEO_VSYNC_TEXT, ///< Text for video vsync toggle. WID_GO_REFRESH_RATE_DROPDOWN, ///< Dropdown for all available refresh rates. WID_GO_VIDEO_DRIVER_INFO, ///< Label showing details about the current video driver. WID_GO_SURVEY_SEL, ///< Selection to hide survey if no JSON library is compiled in. WID_GO_SURVEY_PARTICIPATE_BUTTON, ///< Toggle for participating in the automated survey. + WID_GO_SURVEY_PARTICIPATE_TEXT, ///< Text for automated survey toggle. WID_GO_SURVEY_LINK_BUTTON, ///< Button to open browser to go to the survey website. WID_GO_SURVEY_PREVIEW_BUTTON, ///< Button to open a preview window with the survey results WID_GO_SOCIAL_PLUGINS, ///< Main widget handling the social plugins.