changeset 11500:d29f1358f95b draft

(svn r15861) -Codechange: Add NWID_HORIZONTAL_LTR that forces the ordering from left-to-right.
author yexo <yexo@openttd.org>
date Thu, 26 Mar 2009 20:39:04 +0000
parents 68618eceac70
children e19ae1fe26c0
files src/widget.cpp src/widget_type.h
diffstat 2 files changed, 36 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/widget.cpp
+++ b/src/widget.cpp
@@ -960,6 +960,21 @@
 	}
 }
 
+NWidgetHorizontalLTR::NWidgetHorizontalLTR() : NWidgetHorizontal()
+{
+	this->type = NWID_HORIZONTAL_LTR;
+}
+
+void NWidgetHorizontalLTR::AssignMinimalPosition(uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl)
+{
+	NWidgetHorizontal::AssignMinimalPosition(x, y, given_width, given_height, allow_resize_x, allow_resize_y, false);
+}
+
+void NWidgetHorizontalLTR::StoreWidgets(Widget *widgets, int length, bool left_moving, bool top_moving, bool rtl)
+{
+	NWidgetHorizontal::StoreWidgets(widgets, length, left_moving, top_moving, false);
+}
+
 NWidgetVertical::NWidgetVertical() : NWidgetContainer(NWID_VERTICAL)
 {
 }
@@ -1346,6 +1361,11 @@
 				*dest = new NWidgetHorizontal();
 				break;
 
+			case NWID_HORIZONTAL_LTR:
+				if (*dest != NULL) return num_used;
+				*dest = new NWidgetHorizontalLTR();
+				break;
+
 			case WWT_PANEL:
 			case WWT_INSET:
 			case WWT_FRAME:
@@ -1464,7 +1484,7 @@
 
 		/* If sub-widget is a container, recursively fill that container. */
 		WidgetType tp = sub_widget->type;
-		if (tp == NWID_HORIZONTAL || tp == NWID_VERTICAL || tp == WWT_PANEL || tp == WWT_FRAME || tp == WWT_INSET) {
+		if (tp == NWID_HORIZONTAL || tp == NWID_HORIZONTAL_LTR || tp == NWID_VERTICAL || tp == WWT_PANEL || tp == WWT_FRAME || tp == WWT_INSET) {
 			int num_used = MakeWidgetTree(parts, count - total_used, sub_widget);
 			parts += num_used;
 			total_used += num_used;
--- a/src/widget_type.h
+++ b/src/widget_type.h
@@ -96,9 +96,10 @@
 	WWT_LAST,       ///< Last Item. use WIDGETS_END to fill up padding!!
 
 	/* Nested widget types. */
-	NWID_HORIZONTAL,  ///< Horizontal container.
-	NWID_VERTICAL,    ///< Vertical container.
-	NWID_SPACER,      ///< Invisible widget that takes some space.
+	NWID_HORIZONTAL,     ///< Horizontal container.
+	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.
 
 	/* Nested widget part types. */
 	WPT_RESIZE,       ///< Widget part for specifying resizing.
@@ -217,6 +218,16 @@
 	void StoreWidgets(Widget *widgets, int length, bool left_moving, bool top_moving, bool rtl);
 };
 
+/** Horizontal container that doesn't change the direction of the widgets for RTL languages. */
+class NWidgetHorizontalLTR : public NWidgetHorizontal {
+public:
+	NWidgetHorizontalLTR();
+
+	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);
+};
+
 /** Vertical container */
 class NWidgetVertical : public NWidgetContainer {
 public:
@@ -428,7 +439,7 @@
 
 /**
  * Widget part function for starting a new horizontal container, vertical container, or spacer widget.
- * @param tp Type of the new nested widget, #NWID_HORIZONTAL, #NWID_VERTICAL, or #NWID_SPACER
+ * @param tp Type of the new nested widget, #NWID_HORIZONTAL(_LTR), #NWID_VERTICAL, or #NWID_SPACER
  */
 static inline NWidgetPart NWidget(WidgetType tp)
 {