Changeset - r28463:8a2d650ec60e
[Not reviewed]
master
0 3 0
Loïc Guilloux - 9 months ago 2024-01-15 20:41:44
glx22@users.noreply.github.com
Change: Redesign script debug window (#11782)
3 files changed with 15 insertions and 12 deletions:
0 comments (0 inline, 0 general)
src/script/script_gui.cpp
Show inline comments
 
@@ -1224,44 +1224,46 @@ struct ScriptDebugWindow : public Window
 
		Hotkey('0', "game_script", WID_SCRD_SCRIPT_GAME),
 
		Hotkey(0, "reload", WID_SCRD_RELOAD_TOGGLE),
 
		Hotkey('B', "break_toggle", WID_SCRD_BREAK_STR_ON_OFF_BTN),
 
		Hotkey('F', "break_string", WID_SCRD_BREAK_STR_EDIT_BOX),
 
		Hotkey('C', "match_case", WID_SCRD_MATCH_CASE_BTN),
 
		Hotkey(WKC_RETURN, "continue", WID_SCRD_CONTINUE_BTN),
 
	}, ScriptDebugGlobalHotkeys};
 
};
 

	
 
/** Make a number of rows with buttons for each company for the Script debug window. */
 
std::unique_ptr<NWidgetBase> MakeCompanyButtonRowsScriptDebug()
 
{
 
	return MakeCompanyButtonRows(WID_SCRD_COMPANY_BUTTON_START, WID_SCRD_COMPANY_BUTTON_END, COLOUR_GREY, 8, STR_AI_DEBUG_SELECT_AI_TOOLTIP);
 
	return MakeCompanyButtonRows(WID_SCRD_COMPANY_BUTTON_START, WID_SCRD_COMPANY_BUTTON_END, COLOUR_GREY, 5, STR_AI_DEBUG_SELECT_AI_TOOLTIP, false);
 
}
 

	
 
/** Widgets for the Script debug window. */
 
static const NWidgetPart _nested_script_debug_widgets[] = {
 
	NWidget(NWID_HORIZONTAL),
 
		NWidget(WWT_CLOSEBOX, COLOUR_GREY),
 
		NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_AI_DEBUG, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
 
		NWidget(WWT_SHADEBOX, COLOUR_GREY),
 
		NWidget(WWT_DEFSIZEBOX, COLOUR_GREY),
 
		NWidget(WWT_STICKYBOX, COLOUR_GREY),
 
	EndContainer(),
 
	NWidget(WWT_PANEL, COLOUR_GREY, WID_SCRD_VIEW),
 
		NWidgetFunction(MakeCompanyButtonRowsScriptDebug), SetPadding(0, 2, 1, 2),
 
	EndContainer(),
 
	NWidget(NWID_HORIZONTAL),
 
		NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCRD_SCRIPT_GAME), SetMinimalSize(100, 20), SetResize(1, 0), SetDataTip(STR_AI_GAME_SCRIPT, STR_AI_GAME_SCRIPT_TOOLTIP),
 
		NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCRD_NAME_TEXT), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_STRING2, STR_AI_DEBUG_NAME_TOOLTIP),
 
		NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCRD_SETTINGS), SetMinimalSize(100, 20), SetDataTip(STR_AI_DEBUG_SETTINGS, STR_AI_DEBUG_SETTINGS_TOOLTIP),
 
		NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCRD_RELOAD_TOGGLE), SetMinimalSize(100, 20), SetDataTip(STR_AI_DEBUG_RELOAD, STR_AI_DEBUG_RELOAD_TOOLTIP),
 
		NWidget(WWT_PANEL, COLOUR_GREY, WID_SCRD_VIEW),
 
			NWidgetFunction(MakeCompanyButtonRowsScriptDebug), SetPadding(0, 2, 1, 2),
 
		EndContainer(),
 
		NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCRD_SCRIPT_GAME), SetMinimalSize(100, 20), SetDataTip(STR_AI_GAME_SCRIPT, STR_AI_GAME_SCRIPT_TOOLTIP),
 
		NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCRD_NAME_TEXT), SetResize(1, 0), SetDataTip(STR_JUST_STRING2, STR_AI_DEBUG_NAME_TOOLTIP),
 
		NWidget(NWID_VERTICAL),
 
			NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCRD_SETTINGS), SetMinimalSize(100, 20), SetFill(0, 1), SetDataTip(STR_AI_DEBUG_SETTINGS, STR_AI_DEBUG_SETTINGS_TOOLTIP),
 
			NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCRD_RELOAD_TOGGLE), SetMinimalSize(100, 20), SetFill(0, 1), SetDataTip(STR_AI_DEBUG_RELOAD, STR_AI_DEBUG_RELOAD_TOOLTIP),
 
		EndContainer(),
 
	EndContainer(),
 
	NWidget(NWID_HORIZONTAL),
 
		NWidget(NWID_VERTICAL),
 
		/* Log panel */
 
		NWidget(WWT_PANEL, COLOUR_GREY, WID_SCRD_LOG_PANEL), SetMinimalSize(287, 180), SetResize(1, 1), SetScrollbar(WID_SCRD_VSCROLLBAR),
 
		EndContainer(),
 
		/* Break string widgets */
 
		NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCRD_BREAK_STRING_WIDGETS),
 
			NWidget(NWID_HORIZONTAL),
 
				NWidget(WWT_IMGBTN_2, COLOUR_GREY, WID_SCRD_BREAK_STR_ON_OFF_BTN), SetFill(0, 1), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP),
 
				NWidget(WWT_PANEL, COLOUR_GREY),
 
					NWidget(NWID_HORIZONTAL),
src/widget.cpp
Show inline comments
 
@@ -3320,27 +3320,28 @@ std::unique_ptr<NWidgetBase> MakeWindowN
 

	
 
	/* Load the remaining parts into 'root'. */
 
	return MakeNWidgets(nwid_begin, nwid_end, std::move(root));
 
}
 

	
 
/**
 
 * Make a number of rows with button-like graphics, for enabling/disabling each company.
 
 * @param widget_first The first widget index to use.
 
 * @param widget_last The last widget index to use.
 
 * @param colour The colour in which to draw the button.
 
 * @param max_length Maximal number of company buttons in one row.
 
 * @param button_tooltip The tooltip-string of every button.
 
 * @param resizable Whether the rows are resizable.
 
 * @return Panel with rows of company buttons.
 
 */
 
std::unique_ptr<NWidgetBase> MakeCompanyButtonRows(WidgetID widget_first, WidgetID widget_last, Colours button_colour, int max_length, StringID button_tooltip)
 
std::unique_ptr<NWidgetBase> MakeCompanyButtonRows(WidgetID widget_first, WidgetID widget_last, Colours button_colour, int max_length, StringID button_tooltip, bool resizable)
 
{
 
	assert(max_length >= 1);
 
	std::unique_ptr<NWidgetVertical> vert = nullptr; // Storage for all rows.
 
	std::unique_ptr<NWidgetHorizontal> hor = nullptr; // Storage for buttons in one row.
 
	int hor_length = 0;
 

	
 
	Dimension sprite_size = GetSpriteSize(SPR_COMPANY_ICON, nullptr, ZOOM_LVL_OUT_4X);
 
	sprite_size.width  += WidgetDimensions::unscaled.matrix.Horizontal();
 
	sprite_size.height += WidgetDimensions::unscaled.matrix.Vertical() + 1; // 1 for the 'offset' of being pressed
 

	
 
	for (WidgetID widnum = widget_first; widnum <= widget_last; widnum++) {
 
		/* Ensure there is room in 'hor' for another button. */
 
@@ -3349,29 +3350,29 @@ std::unique_ptr<NWidgetBase> MakeCompany
 
			vert->Add(std::move(hor));
 
			hor = nullptr;
 
			hor_length = 0;
 
		}
 
		if (hor == nullptr) {
 
			hor = std::make_unique<NWidgetHorizontal>();
 
			hor_length = 0;
 
		}
 

	
 
		auto panel = std::make_unique<NWidgetBackground>(WWT_PANEL, button_colour, widnum);
 
		panel->SetMinimalSize(sprite_size.width, sprite_size.height);
 
		panel->SetFill(1, 1);
 
		panel->SetResize(1, 0);
 
		if (resizable) panel->SetResize(1, 0);
 
		panel->SetDataTip(0x0, button_tooltip);
 
		hor->Add(std::move(panel));
 
		hor_length++;
 
	}
 
	if (vert == nullptr) return hor; // All buttons fit in a single row.
 

	
 
	if (hor_length > 0 && hor_length < max_length) {
 
		/* Last row is partial, add a spacer at the end to force all buttons to the left. */
 
		auto spc = std::make_unique<NWidgetSpacer>(sprite_size.width, sprite_size.height);
 
		spc->SetFill(1, 1);
 
		spc->SetResize(1, 0);
 
		if (resizable) spc->SetResize(1, 0);
 
		hor->Add(std::move(spc));
 
	}
 
	if (hor != nullptr) vert->Add(std::move(hor));
 
	return vert;
 
}
src/widget_type.h
Show inline comments
 
@@ -1347,17 +1347,17 @@ inline NWidgetPart NWidgetFunction(NWidg
 
	NWidgetPart part;
 

	
 
	part.type = WPT_FUNCTION;
 
	part.u.func_ptr = func_ptr;
 

	
 
	return part;
 
}
 

	
 
bool IsContainerWidgetType(WidgetType tp);
 
std::unique_ptr<NWidgetBase> MakeNWidgets(const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end, std::unique_ptr<NWidgetBase> &&container);
 
std::unique_ptr<NWidgetBase> MakeWindowNWidgetTree(const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end, NWidgetStacked **shade_select);
 

	
 
std::unique_ptr<NWidgetBase> MakeCompanyButtonRows(WidgetID widget_first, WidgetID widget_last, Colours button_colour, int max_length, StringID button_tooltip);
 
std::unique_ptr<NWidgetBase> MakeCompanyButtonRows(WidgetID widget_first, WidgetID widget_last, Colours button_colour, int max_length, StringID button_tooltip, bool resizable = true);
 

	
 
void SetupWidgetDimensions();
 

	
 
#endif /* WIDGET_TYPE_H */
0 comments (0 inline, 0 general)