Mercurial > hg > openttd
changeset 12583:1fd1aea7e009 draft
(svn r17023) -Revert (r16839): FillNestedArray() was less obsolete than anticipated.
author | alberth <alberth@openttd.org> |
---|---|
date | Sat, 01 Aug 2009 15:45:18 +0000 |
parents | e4e3a1de73b5 |
children | e61bd3d8e7b0 |
files | src/widget.cpp src/widget_type.h |
diffstat | 2 files changed, 34 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/widget.cpp +++ b/src/widget.cpp @@ -920,6 +920,13 @@ */ /** + * @fn void FillNestedArray(NWidgetCore **array, uint length) + * Fill the Window::nested_array array with pointers to nested widgets in the tree. + * @param array Base pointer of the array. + * @param length Length of the array. + */ + +/** * Store size and position. * @param sizing Type of resizing to perform. * @param x Horizontal offset of the widget relative to the left edge of the window. @@ -1080,6 +1087,11 @@ this->tool_tip = tool_tip; } +void NWidgetCore::FillNestedArray(NWidgetCore **array, uint length) +{ + if (this->index >= 0 && (uint)(this->index) < length) array[this->index] = this; +} + void NWidgetCore::StoreWidgets(Widget *widgets, int length, bool left_moving, bool top_moving, bool rtl) { if (this->index < 0) return; @@ -1182,6 +1194,13 @@ } } +void NWidgetContainer::FillNestedArray(NWidgetCore **array, uint length) +{ + for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + child_wid->FillNestedArray(array, length); + } +} + /** * Return the biggest possible size of a nested widget. * @param base Base size of the widget. @@ -1604,6 +1623,10 @@ this->smallest_y = this->min_y; } +void NWidgetSpacer::FillNestedArray(NWidgetCore **array, uint length) +{ +} + void NWidgetSpacer::StoreWidgets(Widget *widgets, int length, bool left_moving, bool top_moving, bool rtl) { /* Spacer widgets are never stored in the widget array. */ @@ -1732,6 +1755,12 @@ if (this->child != NULL) this->child->StoreWidgets(widgets, length, left_moving, top_moving, rtl); } +void NWidgetBackground::FillNestedArray(NWidgetCore **array, uint length) +{ + if (this->index >= 0 && (uint)(this->index) < length) array[this->index] = this; + if (this->child != NULL) this->child->FillNestedArray(array, length); +} + void NWidgetBackground::Draw(const Window *w) { if (this->current_x == 0 || this->current_y == 0) return;
--- a/src/widget_type.h +++ b/src/widget_type.h @@ -181,6 +181,7 @@ virtual void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl) = 0; virtual void StoreWidgets(Widget *widgets, int length, bool left_moving, bool top_moving, bool rtl) = 0; + virtual void FillNestedArray(NWidgetCore **array, uint length) = 0; virtual NWidgetCore *GetWidgetFromPos(int x, int y) = 0; virtual NWidgetBase *GetWidgetOfType(WidgetType tp); @@ -296,6 +297,7 @@ inline bool IsDisabled(); void StoreWidgets(Widget *widgets, int length, bool left_moving, bool top_moving, bool rtl); + /* virtual */ void FillNestedArray(NWidgetCore **array, uint length); /* virtual */ NWidgetCore *GetWidgetFromPos(int x, int y); virtual Scrollbar *FindScrollbar(Window *w, bool allow_next = true) = 0; @@ -346,6 +348,7 @@ ~NWidgetContainer(); void Add(NWidgetBase *wid); + /* virtual */ void FillNestedArray(NWidgetCore **array, uint length); /** Return whether the container is empty. */ inline bool IsEmpty() { return head == NULL; }; @@ -442,6 +445,7 @@ void SetupSmallestSize(Window *w, bool init_array); void StoreWidgets(Widget *widgets, int length, bool left_moving, bool top_moving, bool rtl); + /* virtual */ void FillNestedArray(NWidgetCore **array, uint length); /* virtual */ void Draw(const Window *w); /* virtual */ void Invalidate(const Window *w) const; @@ -462,6 +466,7 @@ void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl); void StoreWidgets(Widget *widgets, int length, bool left_moving, bool top_moving, bool rtl); + /* virtual */ void FillNestedArray(NWidgetCore **array, uint length); /* virtual */ void Draw(const Window *w); /* virtual */ NWidgetCore *GetWidgetFromPos(int x, int y);