diff options
-rw-r--r-- | src/industry_gui.cpp | 84 |
1 files changed, 14 insertions, 70 deletions
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 255dec932..ccb333187 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -418,7 +418,6 @@ enum IndustryViewWidgets { IVW_INFO, IVW_GOTO, IVW_SPACER, - IVW_RESIZE_WIDGET, }; /** Information to store about the industry window */ @@ -434,71 +433,10 @@ assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(indview_d)); static void IndustryViewWndProc(Window *w, WindowEvent *e) { switch (e->event) { - case WE_CREATE: { - /* Count the number of lines that we need to resize the GUI with */ - const Industry *i = GetIndustry(w->window_number); - const IndustrySpec *ind = GetIndustrySpec(i->type); - int lines = -3; - bool first = true; - bool has_accept = false; - - if (HasBit(ind->callback_flags, CBM_IND_PRODUCTION_CARGO_ARRIVAL) || HasBit(ind->callback_flags, CBM_IND_PRODUCTION_256_TICKS)) { - for (byte j = 0; j < lengthof(i->accepts_cargo); j++) { - if (i->accepts_cargo[j] == CT_INVALID) continue; - has_accept = true; - if (first) { - lines++; - first = false; - } - lines++; - } - } else { - for (byte j = 0; j < lengthof(i->accepts_cargo); j++) { - if (i->accepts_cargo[j] == CT_INVALID) continue; - has_accept = true; - lines++; - break; - } - } - - first = true; - for (byte j = 0; j < lengthof(i->produced_cargo); j++) { - if (i->produced_cargo[j] == CT_INVALID) continue; - if (first) { - if (has_accept) lines++; - lines++; - first = false; - } - lines++; - } - - 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; - - /* 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; - w->resize.height += lines; - } break; - case WE_PAINT: { Industry *i = GetIndustry(w->window_number); const IndustrySpec *ind = GetIndustrySpec(i->type); - int y = 111; + int y = w->widget[IVW_INFO].top + 1; bool first = true; bool has_accept = false; @@ -572,12 +510,19 @@ static void IndustryViewWndProc(Window *w, WindowEvent *e) PrepareTextRefStackUsage(6); /* 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); + y += DrawStringMultiLine(2, y, message, wi->right - wi->left - 4, -1); StopTextRefStackUsage(); } } } + if (y > w->widget[IVW_INFO].bottom) { + SetWindowDirty(w); + ResizeWindowForWidget(w, IVW_INFO, 0, y - w->widget[IVW_INFO].top); + SetWindowDirty(w); + return; + } + DrawWindowViewport(w); } break; @@ -661,18 +606,17 @@ 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_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 +{ WWT_PANEL, RESIZE_BOTTOM, 9, 0, 259, 106, 107, 0x0, STR_NULL}, // IVW_INFO +{ WWT_PUSHTXTBTN, RESIZE_TB, 9, 0, 129, 108, 119, STR_00E4_LOCATION, STR_482C_CENTER_THE_MAIN_VIEW_ON}, // IVW_GOTO +{ WWT_PANEL, RESIZE_TB, 9, 130, 259, 108, 119, 0x0, STR_NULL}, // IVW_SPACER { WIDGETS_END}, }; /** Window definition of the view industy gui */ static const WindowDesc _industry_view_desc = { - WDP_AUTO, WDP_AUTO, 260, 160, 260, 160, + WDP_AUTO, WDP_AUTO, 260, 120, 260, 120, WC_INDUSTRY_VIEW, WC_NONE, - WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE, + WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON, _industry_view_widgets, IndustryViewWndProc }; |