Changeset - r8779:32efa5e6e6f6
[Not reviewed]
master
0 1 0
peter1138 - 16 years ago 2008-03-28 19:37:12
peter1138@openttd.org
(svn r12479) -Codechange [FS#1723]: Simplify the method used to resize the industry view window. The window is now shown the correct size so the resize button is also removed.
1 file changed with 14 insertions and 70 deletions:
0 comments (0 inline, 0 general)
src/industry_gui.cpp
Show inline comments
 
@@ -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 >= siz
 
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 *
 

	
 
					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_widge
 
{  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
 
};
0 comments (0 inline, 0 general)