26 #include "table/strings.h"
113 int size = spec == NULL ? 0 : spec->
size;
127 for (uint i = 0; i < ObjectClass::GetClassCount(); i++) {
132 size->width += padding.width;
149 if (spec->
views >= 2) size->width += resize->width;
150 if (spec->
views >= 4) size->height += resize->height;
158 bool two_wide =
false;
165 two_wide |= spec->
views >= 2;
170 for (
size_t i = 0; i <
lengthof(height); i++) {
179 size->height =
max(height[0], height[1] * 2 + 2);
189 if (spec->
views >= 2) size->width = size->width / 2 - 1;
190 if (spec->
views >= 4) size->height = size->height / 2 - 1;
215 switch (
GB(widget, 0, 16)) {
219 for (uint i = 0; i < ObjectClass::GetClassCount(); i++) {
232 if (spec == NULL)
break;
243 if (
FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.right - r.left + 1, r.bottom - r.top + 1)) {
260 int obj_index = objclass->GetIndexFromUI(
GB(widget, 16, 16));
261 if (obj_index < 0)
break;
262 const ObjectSpec *spec = objclass->GetSpec(obj_index);
263 if (spec == NULL)
break;
270 if (
FillDrawPixelInfo(&tmp_dpi, r.left + 1, r.top, (r.right - 1) - (r.left + 1) + 1, r.bottom - r.top + 1)) {
288 if (spec == NULL)
break;
294 if (callback_res > 0x400) {
298 if (message != STR_NULL && message != STR_UNDEFINED) {
303 int y =
DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, message, TC_ORANGE) - r.top;
350 void UpdateSelectSize()
370 int view_number, object_number;
371 if (sel_index == -1) {
375 view_number = sel_view;
381 this->UpdateSelectSize();
392 switch (
GB(widget, 0, 16)) {
395 if (num_clicked >= (
int)ObjectClass::GetUIClassCount())
break;
404 int num_clicked = objclass->GetIndexFromUI(
GB(widget, 16, 16));
405 if (num_clicked >= 0 && objclass->GetSpec(num_clicked)->IsAvailable()) this->
SelectOtherObject(num_clicked);
438 for (uint i = 0; i < sel_objclass->
GetSpecCount(); i++) {
439 const ObjectSpec *spec = sel_objclass->GetSpec(i);
451 const ObjectSpec *spec = objclass->GetSpec(i);
474 static const NWidgetPart _nested_build_object_widgets[] = {
507 NWidget(
WWT_EMPTY, INVALID_COLOUR,
WID_BO_INFO),
SetPadding(2, 5, 0, 5),
SetFill(1, 0),
SetResize(1, 0),
520 _nested_build_object_widgets,
lengthof(_nested_build_object_widgets)
530 if (ObjectClass::GetUIClassCount() > 0) {
531 AllocateWindowDescFront<BuildObjectWindow>(&_build_object_desc, 0);