changeset 7993:09537b6a75b5 draft

(svn r11551) -Codechange: Introduction of widget control members on struct Window. These "new" members have the exact same functionalities as their pure functions "genitors" Ex: "Window::SetWidgetLoweredState(byte widget_index, bool lowered_stat)" is the member corresponding to "SetWindowWidgetLoweredState(Window *w, byte widget_index, bool lowered_stat)"
author belugas <belugas@openttd.org>
date Sun, 02 Dec 2007 00:59:48 +0000
parents 543ad3579424
children 78dc3a1c02e8
files src/window.cpp src/window.h
diffstat 2 files changed, 216 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -80,6 +80,70 @@
 	}
 }
 
+void CDECL Window::SetWidgetsDisabledState(bool disab_stat, int widgets, ...)
+{
+	va_list wdg_list;
+
+	va_start(wdg_list, widgets);
+
+	while (widgets != WIDGET_LIST_END) {
+		SetWidgetDisabledState(widgets, disab_stat);
+		widgets = va_arg(wdg_list, int);
+	}
+
+	va_end(wdg_list);
+}
+
+void CDECL Window::SetWidgetsHiddenState(bool hidden_stat, int widgets, ...)
+{
+	va_list wdg_list;
+
+	va_start(wdg_list, widgets);
+
+	while (widgets != WIDGET_LIST_END) {
+		SetWidgetHiddenState(widgets, hidden_stat);
+		widgets = va_arg(wdg_list, int);
+	}
+
+	va_end(wdg_list);
+}
+
+void CDECL Window::SetWidgetsLoweredState(bool lowered_stat, int widgets, ...)
+{
+	va_list wdg_list;
+
+	va_start(wdg_list, widgets);
+
+	while (widgets != WIDGET_LIST_END) {
+		SetWidgetLoweredState(widgets, lowered_stat);
+		widgets = va_arg(wdg_list, int);
+	}
+
+	va_end(wdg_list);
+}
+
+void Window::RaiseButtons()
+{
+	uint i;
+
+	for (i = 0; i < this->widget_count; i++) {
+		if (IsWidgetLowered(i)) {
+			RaiseWidget(i);
+			InvalidateWidget(i);
+		}
+	}
+}
+
+void Window::InvalidateWidget(byte widget_index)
+{
+	const Widget *wi = &this->widget[widget_index];
+
+	/* Don't redraw the window if the widget is invisible or of no-type */
+	if (wi->type == WWT_EMPTY || IsWidgetHidden(widget_index)) return;
+
+	SetDirtyBlocks(this->left + wi->left, this->top + wi->top, this->left + wi->right + 1, this->top + wi->bottom + 1);
+}
+
 void HandleButtonClick(Window *w, byte widget)
 {
 	LowerWindowWidget(w, widget);
--- a/src/window.h
+++ b/src/window.h
@@ -278,6 +278,26 @@
 	WindowMessage message;
 	Window *parent;
 	byte custom[WINDOW_CUSTOM_SIZE];
+
+	void SetWidgetDisabledState(byte widget_index, bool disab_stat);
+	void DisableWidget(byte widget_index);
+	void EnableWidget(byte widget_index);
+	bool IsWidgetDisabled(byte widget_index);
+	void SetWidgetHiddenState(byte widget_index, bool hidden_stat);
+	void HideWidget(byte widget_index);
+	void ShowWidget(byte widget_index);
+	bool IsWidgetHidden(byte widget_index);
+	void SetWidgetLoweredState(byte widget_index, bool lowered_stat);
+	void ToggleLoweredState(byte widget_index);
+	void LowerWidget(byte widget_index);
+	void RaiseWidget(byte widget_index);
+	bool IsWidgetLowered(byte widget_index);
+
+	void RaiseButtons();
+	void CDECL SetWidgetsDisabledState(bool disab_stat, int widgets, ...);
+	void CDECL SetWidgetsHiddenState(bool hidden_stat, int widgets, ...);
+	void CDECL SetWidgetsLoweredState(bool lowered_stat, int widgets, ...);
+	void InvalidateWidget(byte widget_index);
 };
 
 struct querystr_d {
@@ -818,4 +838,136 @@
  */
 void ResizeButtons(Window *w, byte left, byte right);
 
+
+/**
+ * Sets the enabled/disabled status of a widget.
+ * By default, widgets are enabled.
+ * On certain conditions, they have to be disabled.
+ * @param widget_index : index of this widget in the window
+ * @param disab_stat : status to use ie: disabled = true, enabled = false
+ */
+inline void Window::SetWidgetDisabledState(byte widget_index, bool disab_stat)
+{
+	assert(widget_index < this->widget_count);
+	SB(this->widget[widget_index].display_flags, WIDG_DISABLED, 1, !!disab_stat);
+}
+
+/**
+ * Sets a widget to disabled.
+ * @param widget_index : index of this widget in the window
+ */
+inline void Window::DisableWidget(byte widget_index)
+{
+	SetWidgetDisabledState(widget_index, true);
+}
+
+/**
+ * Sets a widget to Enabled.
+ * @param widget_index : index of this widget in the window
+ */
+inline void Window::EnableWidget(byte widget_index) { SetWidgetDisabledState(widget_index, false); }
+
+/**
+ * Gets the enabled/disabled status of a widget.
+ * @param widget_index : index of this widget in the window
+ * @return status of the widget ie: disabled = true, enabled = false
+ */
+inline bool Window::IsWidgetDisabled(byte widget_index)
+{
+	assert(widget_index < this->widget_count);
+	return HasBit(this->widget[widget_index].display_flags, WIDG_DISABLED);
+}
+
+/**
+ * Sets the hidden/shown status of a widget.
+ * By default, widgets are visible.
+ * On certain conditions, they have to be hidden.
+ * @param widget_index index of this widget in the window
+ * @param hidden_stat status to use ie. hidden = true, visible = false
+ */
+inline void Window::SetWidgetHiddenState(byte widget_index, bool hidden_stat)
+{
+	assert(widget_index < this->widget_count);
+	SB(this->widget[widget_index].display_flags, WIDG_HIDDEN, 1, !!hidden_stat);
+}
+
+/**
+ * Sets a widget hidden.
+ * @param widget_index : index of this widget in the window
+ */
+inline void Window::HideWidget(byte widget_index)
+{
+	SetWidgetHiddenState(widget_index, true);
+}
+
+/**
+ * Sets a widget visible.
+ * @param widget_index : index of this widget in the window
+ */
+inline void Window::ShowWidget(byte widget_index)
+{
+	SetWidgetHiddenState(widget_index, false);
+}
+
+/**
+ * Gets the visibility of a widget.
+ * @param widget_index : index of this widget in the window
+ * @return status of the widget ie: hidden = true, visible = false
+ */
+inline bool Window::IsWidgetHidden(byte widget_index)
+{
+	assert(widget_index < this->widget_count);
+	return HasBit(this->widget[widget_index].display_flags, WIDG_HIDDEN);
+}
+
+/**
+ * Sets the lowered/raised status of a widget.
+ * @param widget_index : index of this widget in the window
+ * @param lowered_stat : status to use ie: lowered = true, raised = false
+ */
+inline void Window::SetWidgetLoweredState(byte widget_index, bool lowered_stat)
+{
+	assert(widget_index < this->widget_count);
+	SB(this->widget[widget_index].display_flags, WIDG_LOWERED, 1, !!lowered_stat);
+}
+
+/**
+ * Invert the lowered/raised  status of a widget.
+ * @param widget_index : index of this widget in the window
+ */
+inline void Window::ToggleLoweredState(byte widget_index)
+{
+	assert(widget_index < this->widget_count);
+	ToggleBit(this->widget[widget_index].display_flags, WIDG_LOWERED);
+}
+
+/**
+ * Marks a widget as lowered.
+ * @param widget_index : index of this widget in the window
+ */
+inline void Window::LowerWidget(byte widget_index)
+{
+	SetWidgetLoweredState(widget_index, true);
+}
+
+/**
+ * Marks a widget as raised.
+ * @param widget_index : index of this widget in the window
+ */
+inline void Window::RaiseWidget(byte widget_index)
+{
+	SetWidgetLoweredState(widget_index, false);
+}
+
+/**
+ * Gets the lowered state of a widget.
+ * @param widget_index : index of this widget in the window
+ * @return status of the widget ie: lowered = true, raised= false
+ */
+inline bool Window::IsWidgetLowered(byte widget_index)
+{
+	assert(widget_index < this->widget_count);
+	return HasBit(this->widget[widget_index].display_flags, WIDG_LOWERED);
+}
+
 #endif /* WINDOW_H */