NWidgetBackground Class Reference
[Hierarchical widgets]

Nested widget with a child. More...

#include <widget_type.h>

Inheritance diagram for NWidgetBackground:
NWidgetCore NWidgetResizeBase NWidgetBase ZeroedMemoryAllocator

Public Member Functions

 NWidgetBackground (WidgetType tp, Colours colour, int index, NWidgetPIPContainer *child=NULL)
 Constructor parent nested widgets.
void Add (NWidgetBase *nwid)
 Add a child to the parent.
void SetPIP (uint8 pip_pre, uint8 pip_inter, uint8 pip_post)
 Set additional pre/inter/post space for the background widget.
void SetupSmallestSize (Window *w, bool init_array)
 Compute smallest size needed by the widget.
void AssignSizePosition (SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl)
 Assign size and position to the widget.
void FillNestedArray (NWidgetBase **array, uint length)
void Draw (const Window *w)
 Draw the widgets of the tree.
NWidgetCoreGetWidgetFromPos (int x, int y)
 Retrieve a widget by its position.
NWidgetBaseGetWidgetOfType (WidgetType tp)
 Retrieve a widget by its type.
ScrollbarFindScrollbar (Window *w, bool allow_next=true) const
 Find the scrollbar of the widget through the Window::nested_array.

Private Attributes

NWidgetPIPContainerchild
 Child widget.

Detailed Description

Nested widget with a child.

Definition at line 426 of file widget_type.h.


Constructor & Destructor Documentation

NWidgetBackground::NWidgetBackground ( WidgetType  tp,
Colours  colour,
int  index,
NWidgetPIPContainer child = NULL 
)

Constructor parent nested widgets.

Parameters:
tp Type of parent widget.
colour Colour of the parent widget.
index Index in the widget array used by the window system.
child Child container widget (if supplied). If not supplied, a vertical container will be inserted while adding the first child widget.

Definition at line 1433 of file widget.cpp.

References NWidgetCore::SetIndex(), WWT_FRAME, WWT_INSET, and WWT_PANEL.


Member Function Documentation

void NWidgetBackground::Add ( NWidgetBase nwid  ) 

Add a child to the parent.

Parameters:
nwid Nested widget to add to the background widget.

Unless a child container has been given in the constructor, a parent behaves as a vertical container. You can add several childs to it, and they are put underneath each other.

Definition at line 1452 of file widget.cpp.

References NWidgetContainer::Add(), and child.

Referenced by MakeWidgetTree().

void NWidgetBackground::AssignSizePosition ( SizingType  sizing,
uint  x,
uint  y,
uint  given_width,
uint  given_height,
bool  rtl 
) [virtual]

Assign size and position to the widget.

Parameters:
sizing Type of resizing to perform.
x Horizontal offset of the widget relative to the left edge of the window.
y Vertical offset of the widget relative to the top edge of the window.
given_width Width allocated to the widget.
given_height Height allocated to the widget.
rtl Adapt for right-to-left languages (position contents of horizontal containers backwards).

Afterwards, pos_x and pos_y contain the top-left position of the widget, smallest_x and smallest_y contain the smallest size such that all widgets of the window are consistent, and current_x and current_y contain the current size.

Reimplemented from NWidgetResizeBase.

Definition at line 1532 of file widget.cpp.

References NWidgetBase::AssignSizePosition(), child, NWidgetBase::padding_bottom, NWidgetBase::padding_left, NWidgetBase::padding_right, NWidgetBase::padding_top, and NWidgetBase::StoreSizePosition().

void NWidgetBackground::Draw ( const Window w  )  [virtual]
Scrollbar * NWidgetBackground::FindScrollbar ( Window w,
bool  allow_next = true 
) const [virtual]

Find the scrollbar of the widget through the Window::nested_array.

Parameters:
w Window containing the widgets and the scrollbar,
allow_next Search may be extended to the next widget.
Todo:
This implementation uses the constraint that a scrollbar must be the next item in the Window::nested_array, and the scrollbar data is stored in the Window structure (Window::vscroll, Window::vscroll2, and Window::hscroll). Alternative light-weight implementations may be considered, eg by sub-classing a canvas-like widget, and/or by having an explicit link between the scrollbar and the widget being scrolled.

Implements NWidgetCore.

Definition at line 1601 of file widget.cpp.

References child, NWidgetCore::FindScrollbar(), Window::GetWidget(), NWidgetCore::index, and Window::nested_array_size.

NWidgetCore * NWidgetBackground::GetWidgetFromPos ( int  x,
int  y 
) [virtual]

Retrieve a widget by its position.

Parameters:
x Horizontal position relative to the left edge of the window.
y Vertical position relative to the top edge of the window.
Returns:
Returns the deepest nested widget that covers the given position, or NULL if no widget can be found.

Reimplemented from NWidgetCore.

Definition at line 1591 of file widget.cpp.

References child, NWidgetBase::current_x, NWidgetBase::current_y, NWidgetPIPContainer::GetWidgetFromPos(), IsInsideBS(), NWidgetBase::pos_x, and NWidgetBase::pos_y.

NWidgetBase * NWidgetBackground::GetWidgetOfType ( WidgetType  tp  )  [virtual]

Retrieve a widget by its type.

Parameters:
tp Widget type to search for.
Returns:
Returns the first widget of the specified type, or NULL if no widget can be found.

Reimplemented from NWidgetBase.

Definition at line 1614 of file widget.cpp.

References child, NWidgetContainer::GetWidgetOfType(), and NWidgetBase::type.

void NWidgetBackground::SetPIP ( uint8  pip_pre,
uint8  pip_inter,
uint8  pip_post 
)

Set additional pre/inter/post space for the background widget.

Parameters:
pip_pre Additional space in front of the first child widget (above for the vertical container, at the left for the horizontal container).
pip_inter Additional space between two child widgets.
pip_post Additional space after the last child widget (below for the vertical container, at the right for the horizontal container).
Note:
Using this function implies that the widget has (or will have) child widgets.

Definition at line 1470 of file widget.cpp.

References child, and NWidgetPIPContainer::SetPIP().

Referenced by MakeNWidget().

void NWidgetBackground::SetupSmallestSize ( Window w,
bool  init_array 
) [virtual]

Compute smallest size needed by the widget.

The smallest size of a widget is the smallest size that a widget needs to display itself properly. In addition, filling and resizing of the widget are computed. The function calls Window::UpdateWidgetSize for each leaf widget and background widget without child with a non-negative index.

Parameters:
w Window owning the widget.
init_array Initialize the w->nested_array.
Note:
After the computation, the results can be queried by accessing the smallest_x and smallest_y data members of the widget.

Implements NWidgetBase.

Definition at line 1478 of file widget.cpp.

References child, NWidgetBase::fill_x, NWidgetBase::fill_y, FONT_HEIGHT_NORMAL, GetStringBoundingBox(), NWidgetCore::index, max(), maxdim(), NWidgetResizeBase::min_x, NWidgetResizeBase::min_y, Window::nested_array, Window::nested_array_size, NWidgetBase::padding_bottom, NWidgetBase::padding_left, NWidgetBase::padding_right, NWidgetBase::padding_top, NWidgetBase::resize_x, NWidgetBase::resize_y, Window::SetStringParameters(), NWidgetBase::SetupSmallestSize(), NWidgetBase::smallest_x, NWidgetBase::smallest_y, NWidgetBase::type, Window::UpdateWidgetSize(), WD_FRAMERECT_RIGHT, WD_FRAMETEXT_BOTTOM, WD_FRAMETEXT_LEFT, WD_FRAMETEXT_RIGHT, WD_FRAMETEXT_TOP, WD_INSET_LEFT, WD_INSET_RIGHT, NWidgetCore::widget_data, WWT_FRAME, and WWT_INSET.


The documentation for this class was generated from the following files:

Generated on Wed Mar 3 23:33:21 2010 for OpenTTD by  doxygen 1.6.1