Changeset - r13280:b9ec79f27dac
[Not reviewed]
master
0 1 0
alberth - 15 years ago 2009-10-18 14:10:59
alberth@openttd.org
(svn r17799) -Codechange: industry view window uses pure nested widgets.
1 file changed with 38 insertions and 42 deletions:
0 comments (0 inline, 0 general)
src/industry_gui.cpp
Show inline comments
 
@@ -470,6 +470,7 @@ enum IndustryViewWidgets {
 
	IVW_CAPTION,
 
	IVW_STICKY,
 
	IVW_BACKGROUND,
 
	IVW_INSET,
 
	IVW_VIEWPORT,
 
	IVW_INFO,
 
	IVW_GOTO,
 
@@ -483,16 +484,33 @@ class IndustryViewWindow : public Window
 
	byte clicked_line;        ///< The line of the button that has been clicked
 
	byte clicked_button;      ///< The button that has been clicked (to raise)
 
	byte production_offset_y; ///< The offset of the production texts/buttons
 
	int info_height;          ///< Height needed for the #IVW_INFO panel
 

	
 
public:
 
	IndustryViewWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
 
	IndustryViewWindow(const WindowDesc *desc, WindowNumber window_number) : Window()
 
	{
 
		this->flags4 |= WF_DISABLE_VP_SCROLL;
 
		this->editbox_line = 0;
 
		this->clicked_line = 0;
 
		this->clicked_button = 0;
 
		InitializeWindowViewport(this, 3, 17, 254, 86, Industry::Get(window_number)->xy + TileDiffXY(1, 1), ZOOM_LVL_INDUSTRY);
 
		this->FindWindowPlacementAndResize(desc);
 
		this->info_height = WD_FRAMERECT_TOP + 2 * FONT_HEIGHT_NORMAL + WD_FRAMERECT_BOTTOM + 1; // Info panel has at least two lines text.
 

	
 
		this->InitNested(desc, window_number);
 
		NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(IVW_VIEWPORT);
 
		nvp->InitializeViewport(this, Industry::Get(window_number)->xy + TileDiffXY(1, 1), ZOOM_LVL_INDUSTRY);
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 

	
 
		NWidgetCore *nwi = this->GetWidget<NWidgetCore>(IVW_INFO);
 
		uint expected = this->DrawInfo(nwi->pos_x, nwi->pos_x + nwi->current_x - 1, nwi->pos_y) - nwi->pos_y;
 
		if (expected > nwi->current_y - 1) {
 
			this->info_height = expected + 1;
 
			this->ReInit();
 
			return;
 
		}
 
	}
 

	
 
	/** Draw the text in the #IVW_INFO panel.
 
@@ -583,24 +601,17 @@ public:
 
				}
 
			}
 
		}
 
		return y;
 
		return y + WD_FRAMERECT_BOTTOM;
 
	}
 

	
 
	virtual void OnPaint()
 
	virtual void SetStringParameters(int widget) const
 
	{
 
		SetDParam(0, this->window_number);
 
		this->DrawWidgets();
 

	
 
		int y = this->DrawInfo(this->widget[IVW_INFO].left, this->widget[IVW_INFO].right, this->widget[IVW_INFO].top);
 
		if (widget== IVW_CAPTION) SetDParam(0, this->window_number);
 
	}
 

	
 
		if (y > this->widget[IVW_INFO].bottom) {
 
			this->SetDirty();
 
			ResizeWindowForWidget(this, IVW_INFO, 0, y - this->widget[IVW_INFO].top);
 
			this->SetDirty();
 
			return;
 
		}
 

	
 
		this->DrawViewport();
 
	virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *resize)
 
	{
 
		if (widget == IVW_INFO) size->height = this->info_height;
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
@@ -616,9 +627,9 @@ public:
 
				uint x = pt.x;
 
				int line = (pt.y - this->production_offset_y) / FONT_HEIGHT_NORMAL;
 
				if (pt.y >= this->production_offset_y && IsInsideMM(line, 0, 2) && i->produced_cargo[line] != CT_INVALID) {
 
					Widget *wi = &this->widget[widget];
 
					uint left = wi->left + WD_FRAMETEXT_LEFT;
 
					uint right = wi->right - WD_FRAMERECT_RIGHT;
 
					NWidgetCore *nwi = this->GetWidget<NWidgetCore>(widget);
 
					uint left = nwi->pos_x + WD_FRAMETEXT_LEFT;
 
					uint right = nwi->pos_x + nwi->current_x - 1 - WD_FRAMERECT_RIGHT;
 
					if (IsInsideMM(x, left, left + 20) ) {
 
						/* Clicked buttons, decrease or increase production */
 
						if (x < left + 10) {
 
@@ -665,13 +676,10 @@ public:
 

	
 
	virtual void OnResize(Point delta)
 
	{
 
		this->viewport->width            += delta.x;
 
		this->viewport->height           += delta.y;
 
		this->viewport->virtual_width    += delta.x;
 
		this->viewport->virtual_height   += delta.y;
 
		this->viewport->dest_scrollpos_x -= delta.x;
 
		this->viewport->dest_scrollpos_y -= delta.y;
 
		UpdateViewportPosition(this);
 
		if (this->viewport != NULL) {
 
			NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(IVW_VIEWPORT);
 
			nvp->UpdateViewportCoordinates(this);
 
		}
 
	}
 

	
 
	virtual void OnQueryTextFinished(char *str)
 
@@ -697,19 +705,6 @@ static void UpdateIndustryProduction(Ind
 
}
 

	
 
/** Widget definition of the view industy gui */
 
static const Widget _industry_view_widgets[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,  COLOUR_CREAM,     0,    10,     0,    13, STR_BLACK_CROSS,           STR_TOOLTIP_CLOSE_WINDOW},           // IVW_CLOSEBOX
 
{    WWT_CAPTION,  RESIZE_RIGHT,  COLOUR_CREAM,    11,   247,     0,    13, STR_INDUSTRY_VIEW_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS}, // IVW_CAPTION
 
{  WWT_STICKYBOX,     RESIZE_LR,  COLOUR_CREAM,   248,   259,     0,    13, 0x0,                       STR_TOOLTIP_STICKY},                  // IVW_STICKY
 
{      WWT_PANEL,     RESIZE_RB,  COLOUR_CREAM,     0,   259,    14,   105, 0x0,                       STR_NULL},                           // IVW_BACKGROUND
 
{      WWT_INSET,     RESIZE_RB,  COLOUR_CREAM,     2,   257,    16,   103, 0x0,                       STR_NULL},                           // IVW_VIEWPORT
 
{      WWT_PANEL,    RESIZE_RTB,  COLOUR_CREAM,     0,   259,   106,   107, 0x0,                       STR_NULL},                           // IVW_INFO
 
{ WWT_PUSHTXTBTN,     RESIZE_TB,  COLOUR_CREAM,     0,   129,   108,   119, STR_BUTTON_LOCATION,       STR_INDUSTRY_VIEW_LOCATION_TOOLTIP}, // IVW_GOTO
 
{      WWT_PANEL,    RESIZE_RTB,  COLOUR_CREAM,   130,   247,   108,   119, 0x0,                       STR_NULL},                           // IVW_SPACER
 
{  WWT_RESIZEBOX,   RESIZE_LRTB,  COLOUR_CREAM,   248,   259,   108,   119, 0x0,                       STR_TOOLTIP_RESIZE},                  // IVW_RESIZE
 
{   WIDGETS_END},
 
};
 

	
 
static const NWidgetPart _nested_industry_view_widgets[] = {
 
	NWidget(NWID_HORIZONTAL),
 
		NWidget(WWT_CLOSEBOX, COLOUR_CREAM, IVW_CLOSEBOX),
 
@@ -717,7 +712,8 @@ static const NWidgetPart _nested_industr
 
		NWidget(WWT_STICKYBOX, COLOUR_CREAM, IVW_STICKY),
 
	EndContainer(),
 
	NWidget(WWT_PANEL, COLOUR_CREAM, IVW_BACKGROUND),
 
		NWidget(WWT_INSET, COLOUR_CREAM, IVW_VIEWPORT), SetMinimalSize(256, 88), SetPadding(2, 2, 2, 2), SetResize(1, 1),
 
		NWidget(WWT_INSET, COLOUR_CREAM, IVW_INSET), SetPadding(2, 2, 2, 2),
 
			NWidget(NWID_VIEWPORT, INVALID_COLOUR, IVW_VIEWPORT), SetMinimalSize(254, 86), SetFill(true, false), SetPadding(1, 1, 1, 1), SetResize(1, 1),
 
		EndContainer(),
 
	EndContainer(),
 
	NWidget(WWT_PANEL, COLOUR_CREAM, IVW_INFO), SetMinimalSize(260, 2), SetResize(1, 0),
 
@@ -734,7 +730,7 @@ static const WindowDesc _industry_view_d
 
	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,
 
	_industry_view_widgets, _nested_industry_view_widgets, lengthof(_nested_industry_view_widgets)
 
	NULL, _nested_industry_view_widgets, lengthof(_nested_industry_view_widgets)
 
);
 

	
 
void ShowIndustryViewWindow(int industry)
0 comments (0 inline, 0 general)