changeset 11528:2ee677c87220 draft

(svn r15889) -Codechange: Add pre/inter/post space to nested background widgets
author alberth <alberth@openttd.org>
date Sun, 29 Mar 2009 13:25:01 +0000
parents e1495d47b9d5
children 536d28b21537
files src/widget.cpp src/widget_type.h
diffstat 2 files changed, 42 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/widget.cpp
+++ b/src/widget.cpp
@@ -862,6 +862,22 @@
 	}
 }
 
+/**
+ * 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 @@
 	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 @@
 
 			case WPT_PIPSPACE: {
 				NWidgetContainer *nwc = dynamic_cast<NWidgetContainer *>(*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<NWidgetBackground *>(*dest);
+				if (nwb != NULL) nwb->SetPIP(parts->u.pip.pre,  parts->u.pip.inter, parts->u.pip.post);
 				break;
 			}
 
--- a/src/widget_type.h
+++ b/src/widget_type.h
@@ -209,11 +209,13 @@
 	~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 @@
 	~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);