summaryrefslogtreecommitdiff
path: root/src/widget_type.h
diff options
context:
space:
mode:
authoralberth <alberth@openttd.org>2009-04-30 19:21:51 +0000
committeralberth <alberth@openttd.org>2009-04-30 19:21:51 +0000
commit585440c38df15d04e5618351a0f256db5cc90622 (patch)
tree409b10a0ade26b3a9a4271c9c399012c1ddbbbb4 /src/widget_type.h
parent94bc498c429644ce5a26fee38bd78d57622fda3c (diff)
downloadopenttd-585440c38df15d04e5618351a0f256db5cc90622.tar.xz
(svn r16190) -Codechange: Allow stacking of nested widgets.
Diffstat (limited to 'src/widget_type.h')
-rw-r--r--src/widget_type.h44
1 files changed, 35 insertions, 9 deletions
diff --git a/src/widget_type.h b/src/widget_type.h
index 0a7772163..0128d510d 100644
--- a/src/widget_type.h
+++ b/src/widget_type.h
@@ -100,6 +100,8 @@ enum WidgetType {
NWID_HORIZONTAL_LTR, ///< Horizontal container that doesn't change the order of the widgets for RTL languages.
NWID_VERTICAL, ///< Vertical container.
NWID_SPACER, ///< Invisible widget that takes some space.
+ NWID_SELECTION, ///< Stacked widgets, only one visible at a time (eg in a panel with tabs).
+ NWID_LAYERED, ///< Widgets layered on top of each other, all visible at the same time.
/* Nested widget part types. */
WPT_RESIZE, ///< Widget part for specifying resizing.
@@ -214,23 +216,43 @@ public:
~NWidgetContainer();
void Add(NWidgetBase *wid);
- void SetPIP(uint8 pip_pre, uint8 pip_inter, uint8 pip_post);
/** Return whether the container is empty. */
inline bool IsEmpty() { return head == NULL; };
protected:
+ NWidgetBase *head; ///< Pointer to first widget in container.
+ NWidgetBase *tail; ///< Pointer to last widget in container.
+};
+
+/** Stacked widgets, widgets all occupying the same space in the window.
+ * @note the semantics difference between #NWID_SELECTION and #NWID_LAYERED is currently not used.
+ */
+class NWidgetStacked : public NWidgetContainer {
+public:
+ NWidgetStacked(WidgetType tp);
+
+ int ComputeMinimalSize();
+ void AssignMinimalPosition(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);
+};
+
+/** Container with pre/inter/post child space. */
+class NWidgetPIPContainer : public NWidgetContainer {
+public:
+ NWidgetPIPContainer(WidgetType tp);
+
+ 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.
-
- NWidgetBase *head; ///< Pointer to first widget in container.
- NWidgetBase *tail; ///< Pointer to last widget in container.
};
/** Horizontal container.
* @ingroup NestedWidgets */
-class NWidgetHorizontal : public NWidgetContainer {
+class NWidgetHorizontal : public NWidgetPIPContainer {
public:
NWidgetHorizontal();
@@ -253,7 +275,7 @@ public:
/** Vertical container.
* @ingroup NestedWidgets */
-class NWidgetVertical : public NWidgetContainer {
+class NWidgetVertical : public NWidgetPIPContainer {
public:
NWidgetVertical();
@@ -278,7 +300,7 @@ public:
* @ingroup NestedWidgets */
class NWidgetBackground : public NWidgetCore {
public:
- NWidgetBackground(WidgetType tp, Colours colour, int index, NWidgetContainer *child = NULL);
+ NWidgetBackground(WidgetType tp, Colours colour, int index, NWidgetPIPContainer *child = NULL);
~NWidgetBackground();
void Add(NWidgetBase *nwid);
@@ -289,7 +311,7 @@ public:
void StoreWidgets(Widget *widgets, int length, bool left_moving, bool top_moving, bool rtl);
private:
- NWidgetContainer *child; ///< Child widget.
+ NWidgetPIPContainer *child; ///< Child widget.
};
/** Leaf widget.
@@ -333,6 +355,10 @@ bool CompareWidgetArrays(const Widget *orig, const Widget *gen, bool report = tr
* the child widgets (it has no meaning for the compiler but it makes the widget parts easier to read).
* Below the last child widget, use an #EndContainer part. This part should be aligned with the #NWidget part that started the container.
*
+ * - Stacked widgets #NWidgetStacked map each of their childs onto the same space. It behaves like a container, except there is no pre/inter/post space,
+ * so the widget does not support #SetPIP. #SetPadding is allowed though.
+ * Like the other container widgets, below the last child widgets, a #EndContainer part should be used to denote the end of the stacked widget.
+ *
* - Background widgets #NWidgetBackground start with a #NWidget(WidgetType tp, Colours col, int16 idx) part.
* What follows depends on how the widget is used.
* - If the widget is used as a leaf widget, that is, to create some space in the window to display a viewport or some text, use the properties of the
@@ -589,7 +615,7 @@ static inline NWidgetPart NWidget(WidgetType tp, Colours col, int16 idx)
/**
* Widget part function for starting a new horizontal container, vertical container, or spacer widget.
- * @param tp Type of the new nested widget, #NWID_HORIZONTAL(_LTR), #NWID_VERTICAL, or #NWID_SPACER
+ * @param tp Type of the new nested widget, #NWID_HORIZONTAL(_LTR), #NWID_VERTICAL, #NWID_SPACER, #NWID_SELECTION, or #NWID_LAYERED.
* @ingroup NestedWidgetParts
*/
static inline NWidgetPart NWidget(WidgetType tp)