mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-09 23:50:25 +00:00
(svn r17324) -Codechange: Land info window uses nested widget tree
This commit is contained in:
parent
0d3ab7c72d
commit
fe7ca1b3e3
@ -58,26 +58,19 @@ enum LandInfoWidgets {
|
|||||||
LIW_BACKGROUND, ///< Background to draw on
|
LIW_BACKGROUND, ///< Background to draw on
|
||||||
};
|
};
|
||||||
|
|
||||||
static const Widget _land_info_widgets[] = {
|
|
||||||
{ WWT_CLOSEBOX, RESIZE_NONE, COLOUR_GREY, 0, 10, 0, 13, STR_BLACK_CROSS, STR_TOOLTIP_CLOSE_WINDOW}, // LIW_CLOSE
|
|
||||||
{ WWT_CAPTION, RESIZE_NONE, COLOUR_GREY, 11, 299, 0, 13, STR_LAND_AREA_INFORMATION_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS}, // LIW_CAPTION
|
|
||||||
{ WWT_PANEL, RESIZE_BOTTOM, COLOUR_GREY, 0, 299, 14, 99, 0x0, STR_NULL}, // LIW_BACKGROUND
|
|
||||||
{ WIDGETS_END},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const NWidgetPart _nested_land_info_widgets[] = {
|
static const NWidgetPart _nested_land_info_widgets[] = {
|
||||||
NWidget(NWID_HORIZONTAL),
|
NWidget(NWID_HORIZONTAL),
|
||||||
NWidget(WWT_CLOSEBOX, COLOUR_GREY, LIW_CLOSE),
|
NWidget(WWT_CLOSEBOX, COLOUR_GREY, LIW_CLOSE),
|
||||||
NWidget(WWT_CAPTION, COLOUR_GREY, LIW_CAPTION), SetDataTip(STR_LAND_AREA_INFORMATION_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
|
NWidget(WWT_CAPTION, COLOUR_GREY, LIW_CAPTION), SetDataTip(STR_LAND_AREA_INFORMATION_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(WWT_PANEL, COLOUR_GREY, LIW_BACKGROUND), SetMinimalSize(300, 86), SetResize(0, 1), EndContainer(),
|
NWidget(WWT_PANEL, COLOUR_GREY, LIW_BACKGROUND), EndContainer(),
|
||||||
};
|
};
|
||||||
|
|
||||||
static const WindowDesc _land_info_desc(
|
static const WindowDesc _land_info_desc(
|
||||||
WDP_AUTO, WDP_AUTO, 300, 100, 300, 100,
|
WDP_AUTO, WDP_AUTO, 0, 0, 0, 0,
|
||||||
WC_LAND_INFO, WC_NONE,
|
WC_LAND_INFO, WC_NONE,
|
||||||
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
|
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
|
||||||
_land_info_widgets, _nested_land_info_widgets, lengthof(_nested_land_info_widgets)
|
NULL, _nested_land_info_widgets, lengthof(_nested_land_info_widgets)
|
||||||
);
|
);
|
||||||
|
|
||||||
class LandInfoWindow : public Window {
|
class LandInfoWindow : public Window {
|
||||||
@ -95,22 +88,51 @@ public:
|
|||||||
virtual void OnPaint()
|
virtual void OnPaint()
|
||||||
{
|
{
|
||||||
this->DrawWidgets();
|
this->DrawWidgets();
|
||||||
|
}
|
||||||
|
|
||||||
uint y = 21;
|
virtual void DrawWidget(const Rect &r, int widget) const
|
||||||
|
{
|
||||||
|
if (widget != LIW_BACKGROUND) return;
|
||||||
|
|
||||||
|
uint y = r.top + WD_TEXTPANEL_TOP;
|
||||||
for (uint i = 0; i < LAND_INFO_CENTERED_LINES; i++) {
|
for (uint i = 0; i < LAND_INFO_CENTERED_LINES; i++) {
|
||||||
if (StrEmpty(this->landinfo_data[i])) break;
|
if (StrEmpty(this->landinfo_data[i])) break;
|
||||||
|
|
||||||
DrawString(this->widget[LIW_BACKGROUND].left + 2, this->widget[LIW_BACKGROUND].right - 2, y, this->landinfo_data[i], i == 0 ? TC_LIGHT_BLUE : TC_FROMSTRING, SA_CENTER);
|
DrawString(r.left + WD_FRAMETEXT_LEFT, r.right - WD_FRAMETEXT_RIGHT, y, this->landinfo_data[i], i == 0 ? TC_LIGHT_BLUE : TC_FROMSTRING, SA_CENTER);
|
||||||
y += i == 0 ? 16 : 12;
|
y += FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL;
|
||||||
|
if (i == 0) y += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!StrEmpty(this->landinfo_data[LAND_INFO_MULTICENTER_LINE])) {
|
if (!StrEmpty(this->landinfo_data[LAND_INFO_MULTICENTER_LINE])) {
|
||||||
SetDParamStr(0, this->landinfo_data[LAND_INFO_MULTICENTER_LINE]);
|
SetDParamStr(0, this->landinfo_data[LAND_INFO_MULTICENTER_LINE]);
|
||||||
DrawStringMultiLine(this->widget[LIW_BACKGROUND].left + 2, this->widget[LIW_BACKGROUND].right - 2, y, y + 22, STR_JUST_RAW_STRING, TC_FROMSTRING, SA_CENTER);
|
DrawStringMultiLine(r.left + WD_FRAMETEXT_LEFT, r.right - WD_FRAMETEXT_RIGHT, y, r.bottom - WD_TEXTPANEL_BOTTOM, STR_JUST_RAW_STRING, TC_FROMSTRING, SA_CENTER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LandInfoWindow(TileIndex tile) : Window(&_land_info_desc) {
|
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *resize)
|
||||||
|
{
|
||||||
|
if (widget != LIW_BACKGROUND) return;
|
||||||
|
|
||||||
|
size->height = WD_TEXTPANEL_TOP + WD_TEXTPANEL_BOTTOM;
|
||||||
|
for (uint i = 0; i < LAND_INFO_CENTERED_LINES; i++) {
|
||||||
|
if (StrEmpty(this->landinfo_data[i])) break;
|
||||||
|
|
||||||
|
uint width = GetStringBoundingBox(this->landinfo_data[i]).width + WD_FRAMETEXT_LEFT + WD_FRAMETEXT_RIGHT;
|
||||||
|
size->width = max(size->width, width);
|
||||||
|
|
||||||
|
size->height += FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL;
|
||||||
|
if (i == 0) size->height += 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!StrEmpty(this->landinfo_data[LAND_INFO_MULTICENTER_LINE])) {
|
||||||
|
uint width = GetStringBoundingBox(this->landinfo_data[LAND_INFO_MULTICENTER_LINE]).width + WD_FRAMETEXT_LEFT + WD_FRAMETEXT_RIGHT;
|
||||||
|
size->width = max(size->width, min(300u, width));
|
||||||
|
SetDParamStr(0, this->landinfo_data[LAND_INFO_MULTICENTER_LINE]);
|
||||||
|
size->height += GetStringHeight(STR_JUST_RAW_STRING, size->width - WD_FRAMERECT_LEFT - WD_FRAMERECT_RIGHT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LandInfoWindow(TileIndex tile) : Window() {
|
||||||
Town *t = ClosestTownFromTile(tile, _settings_game.economy.dist_local_authority);
|
Town *t = ClosestTownFromTile(tile, _settings_game.economy.dist_local_authority);
|
||||||
|
|
||||||
/* Because build_date is not set yet in every TileDesc, we make sure it is empty */
|
/* Because build_date is not set yet in every TileDesc, we make sure it is empty */
|
||||||
@ -256,11 +278,7 @@ public:
|
|||||||
}
|
}
|
||||||
if (!found) this->landinfo_data[LAND_INFO_MULTICENTER_LINE][0] = '\0';
|
if (!found) this->landinfo_data[LAND_INFO_MULTICENTER_LINE][0] = '\0';
|
||||||
|
|
||||||
if (found) line_nr += 2;
|
this->InitNested(&_land_info_desc);
|
||||||
|
|
||||||
if (line_nr > 6) ResizeWindow(this, 0, 12 * (line_nr - 6));
|
|
||||||
|
|
||||||
this->FindWindowPlacementAndResize(&_land_info_desc);
|
|
||||||
|
|
||||||
#if defined(_DEBUG)
|
#if defined(_DEBUG)
|
||||||
# define LANDINFOD_LEVEL 0
|
# define LANDINFOD_LEVEL 0
|
||||||
|
@ -63,6 +63,10 @@ enum WidgetDrawDistances {
|
|||||||
WD_FRAMERECT_TOP = 1, ///< Offset at top to draw the frame rectangular area
|
WD_FRAMERECT_TOP = 1, ///< Offset at top to draw the frame rectangular area
|
||||||
WD_FRAMERECT_BOTTOM = 1, ///< Offset at bottom to draw the frame rectangular area
|
WD_FRAMERECT_BOTTOM = 1, ///< Offset at bottom to draw the frame rectangular area
|
||||||
|
|
||||||
|
/* Extra space at top/bottom of text panels */
|
||||||
|
WD_TEXTPANEL_TOP = 6, ///< Offset at top to draw above the text
|
||||||
|
WD_TEXTPANEL_BOTTOM = 6, ///< Offset at bottom to draw below the text
|
||||||
|
|
||||||
/* WWT_FRAME */
|
/* WWT_FRAME */
|
||||||
WD_FRAMETEXT_LEFT = 6, ///< Left offset of the text of the frame.
|
WD_FRAMETEXT_LEFT = 6, ///< Left offset of the text of the frame.
|
||||||
WD_FRAMETEXT_RIGHT = 6, ///< Right offset of the text of the frame.
|
WD_FRAMETEXT_RIGHT = 6, ///< Right offset of the text of the frame.
|
||||||
|
Loading…
Reference in New Issue
Block a user