diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 393fd114cd..0d06451510 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -384,6 +384,7 @@ enum IndustryViewWidgets { IVW_INFO, IVW_GOTO, IVW_SPACER, + IVW_RESIZE_WIDGET, }; /** Information to store about the industry window */ @@ -437,13 +438,27 @@ static void IndustryViewWndProc(Window *w, WindowEvent *e) lines++; } - if (HasBit(ind->callback_flags, CBM_IND_WINDOW_MORE_TEXT)) lines += 2; + if (HasBit(ind->callback_flags, CBM_IND_WINDOW_MORE_TEXT)) { + lines += 2; + } else { + /* Remove the resizing option from the widgets. Do it before the Hiding since it will be overwritten */ + for (byte j = IVW_INFO; j <= IVW_RESIZE_WIDGET; j++) { + w->widget[j].display_flags = RESIZE_NONE; + } + /* Hide the resize button and enlarge the spacer so it will take its place */ + w->HideWidget(IVW_RESIZE_WIDGET); + w->widget[IVW_SPACER].right = w->widget[IVW_RESIZE_WIDGET].right; + } + + lines *= 10; - for (byte j = 5; j <= 7; j++) { - if (j != 5) w->widget[j].top += lines * 10; - w->widget[j].bottom += lines * 10; + /* Resize the widgets for the new size, given by the addition of cargos */ + for (byte j = IVW_INFO; j <= IVW_RESIZE_WIDGET; j++) { + if (j != IVW_INFO) w->widget[j].top += lines; + w->widget[j].bottom += lines; } - w->height += lines * 10; + w->height += lines; + w->resize.height += lines; } break; case WE_PAINT: { @@ -515,10 +530,12 @@ static void IndustryViewWndProc(Window *w, WindowEvent *e) if (callback_res != CALLBACK_FAILED) { StringID message = GetGRFStringID(ind->grf_prop.grffile->grfid, 0xD000 + callback_res); if (message != STR_NULL && message != STR_UNDEFINED) { + const Widget *wi = &w->widget[IVW_INFO]; y += 10; PrepareTextRefStackUsage(6); - DrawString(2, y, message, TC_FROMSTRING); + /* Use all the available space left from where we stand up to the end of the window */ + DrawStringMultiLine(2, y, message, wi->right - wi->left - 4, wi->bottom - y); StopTextRefStackUsage(); } } @@ -607,9 +624,10 @@ static const Widget _industry_view_widgets[] = { { WWT_STICKYBOX, RESIZE_NONE, 9, 248, 259, 0, 13, 0x0, STR_STICKY_BUTTON}, // IVW_STICKY { WWT_PANEL, RESIZE_NONE, 9, 0, 259, 14, 105, 0x0, STR_NULL}, // IVW_BACKGROUND { WWT_INSET, RESIZE_NONE, 9, 2, 257, 16, 103, 0x0, STR_NULL}, // IVW_VIEWPORT -{ WWT_PANEL, RESIZE_NONE, 9, 0, 259, 106, 147, 0x0, STR_NULL}, // IVW_INFO -{ WWT_PUSHTXTBTN, RESIZE_NONE, 9, 0, 129, 148, 159, STR_00E4_LOCATION, STR_482C_CENTER_THE_MAIN_VIEW_ON}, // IVW_GOTO -{ WWT_PANEL, RESIZE_NONE, 9, 130, 259, 148, 159, 0x0, STR_NULL}, // IVW_SPACER +{ WWT_PANEL, RESIZE_BOTTOM, 9, 0, 259, 106, 147, 0x0, STR_NULL}, // IVW_INFO +{ WWT_PUSHTXTBTN, RESIZE_TB, 9, 0, 129, 148, 159, STR_00E4_LOCATION, STR_482C_CENTER_THE_MAIN_VIEW_ON}, // IVW_GOTO +{ WWT_PANEL, RESIZE_TB, 9, 130, 247, 148, 159, 0x0, STR_NULL}, // IVW_SPACER +{ WWT_RESIZEBOX, RESIZE_TB, 9, 248, 259, 148, 159, 0x0, STR_RESIZE_BUTTON}, // IVW_RESIZE_WIDGET { WIDGETS_END}, }; @@ -617,7 +635,7 @@ static const Widget _industry_view_widgets[] = { static const WindowDesc _industry_view_desc = { WDP_AUTO, WDP_AUTO, 260, 160, 260, 160, WC_INDUSTRY_VIEW, WC_NONE, - WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON, + WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE, _industry_view_widgets, IndustryViewWndProc };