diff --git a/src/widget.cpp b/src/widget.cpp --- a/src/widget.cpp +++ b/src/widget.cpp @@ -862,6 +862,22 @@ void NWidgetContainer::Add(NWidgetBase * } } +/** + * Set additional pre/inter/post space for the container. + * + * @param pip_pre Additional space in front of the first child widget (above + * for the vertical container, at the left for the horizontal container). + * @param pip_inter Additional space between two child widgets. + * @param pip_post Additional space after the last child widget (below for the + * vertical container, at the right for the horizontal container). + */ +void NWidgetContainer::SetPIP(uint8 pip_pre, uint8 pip_inter, uint8 pip_post) +{ + this->pip_pre = pip_pre; + this->pip_inter = pip_inter; + this->pip_post = pip_post; +} + NWidgetHorizontal::NWidgetHorizontal() : NWidgetContainer(NWID_HORIZONTAL) { } @@ -1145,6 +1161,24 @@ void NWidgetBackground::Add(NWidgetBase this->child->Add(nwid); } +/** + * Set additional pre/inter/post space for the background widget. + * + * @param pip_pre Additional space in front of the first child widget (above + * for the vertical container, at the left for the horizontal container). + * @param pip_inter Additional space between two child widgets. + * @param 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. + */ +void NWidgetBackground::SetPIP(uint8 pip_pre, uint8 pip_inter, uint8 pip_post) +{ + if (this->child == NULL) { + this->child = new NWidgetVertical(); + } + this->child->SetPIP(pip_pre, pip_inter, pip_post); +} + int NWidgetBackground::ComputeMinimalSize() { int biggest_index = this->index; @@ -1476,11 +1510,10 @@ static int MakeNWidget(const NWidgetPart case WPT_PIPSPACE: { NWidgetContainer *nwc = dynamic_cast(*dest); - if (nwc != NULL) { - nwc->pip_pre = parts->u.pip.pre; - nwc->pip_inter = parts->u.pip.inter; - nwc->pip_post = parts->u.pip.post; - } + if (nwc != NULL) nwc->SetPIP(parts->u.pip.pre, parts->u.pip.inter, parts->u.pip.post); + + NWidgetBackground *nwb = dynamic_cast(*dest); + if (nwb != NULL) nwb->SetPIP(parts->u.pip.pre, parts->u.pip.inter, parts->u.pip.post); break; } diff --git a/src/widget_type.h b/src/widget_type.h --- a/src/widget_type.h +++ b/src/widget_type.h @@ -209,11 +209,13 @@ public: ~NWidgetContainer(); void Add(NWidgetBase *wid); + void SetPIP(uint8 pip_pre, uint8 pip_inter, uint8 pip_post); +protected: uint8 pip_pre; ///< Amount of space before first widget. uint8 pip_inter; ///< Amount of space between widgets. uint8 pip_post; ///< Amount of space after last widget. -protected: + NWidgetBase *head; ///< Pointer to first widget in container. NWidgetBase *tail; ///< Pointer to last widget in container. }; @@ -267,6 +269,7 @@ public: ~NWidgetBackground(); void Add(NWidgetBase *nwid); + void SetPIP(uint8 pip_pre, uint8 pip_inter, uint8 pip_post); int ComputeMinimalSize(); void AssignMinimalPosition(uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl);