summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralberth <alberth@openttd.org>2009-09-11 18:52:56 +0000
committeralberth <alberth@openttd.org>2009-09-11 18:52:56 +0000
commit669b7d01acb603ebea3071b347f7b0cec8b9f505 (patch)
tree9bd9e851b4f2301fe2a880f229e76a0f63781d77
parent4cb6451507a4ec63a7efc356ee0843f1a952e7b4 (diff)
downloadopenttd-669b7d01acb603ebea3071b347f7b0cec8b9f505.tar.xz
(svn r17502) -Codechange [FS#3184]: Extend QueryStringBaseWindow to support windows with nested widgets (by Terkhen with a few tweaks).
-rw-r--r--src/misc_gui.cpp40
-rw-r--r--src/osk_gui.cpp8
-rw-r--r--src/querystring_gui.h6
3 files changed, 38 insertions, 16 deletions
diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp
index 79ae4b70f..5017b31f9 100644
--- a/src/misc_gui.cpp
+++ b/src/misc_gui.cpp
@@ -1182,23 +1182,35 @@ void QueryString::HandleEditBox(Window *w, int wid)
void QueryString::DrawEditBox(Window *w, int wid)
{
- const Widget *wi = &w->widget[wid];
+ int left;
+ int right;
+ int top;
+ int bottom;
+ if (w->widget == NULL) {
+ const NWidgetCore *wi = w->nested_array[wid];
+
+ assert((wi->type & WWT_MASK) == WWT_EDITBOX);
+
+ left = wi->pos_x;
+ right = wi->pos_x + wi->current_x - 1;
+ top = wi->pos_y;
+ bottom = wi->pos_y + wi->current_y - 1;
+ } else {
+ const Widget *wi = &w->widget[wid];
- assert((wi->type & WWT_MASK) == WWT_EDITBOX);
+ assert((wi->type & WWT_MASK) == WWT_EDITBOX);
- GfxFillRect(wi->left + 1, wi->top + 1, wi->right - 1, wi->bottom - 1, 215);
+ left = wi->left;
+ right = wi->right;
+ top = wi->top;
+ bottom = wi->bottom;
+ }
- DrawPixelInfo dpi;
- int delta;
+ GfxFillRect(left + 1, top + 1, right - 1, bottom - 1, 215);
/* Limit the drawing of the string inside the widget boundaries */
- if (!FillDrawPixelInfo(&dpi,
- wi->left + 4,
- wi->top + 1,
- wi->right - wi->left - 4,
- wi->bottom - wi->top - 1)) {
- return;
- }
+ DrawPixelInfo dpi;
+ if (!FillDrawPixelInfo(&dpi, left + WD_FRAMETEXT_LEFT, top + WD_FRAMERECT_TOP, right - left - WD_FRAMETEXT_RIGHT, bottom - top - WD_FRAMERECT_BOTTOM)) return;
DrawPixelInfo *old_dpi = _cur_dpi;
_cur_dpi = &dpi;
@@ -1206,9 +1218,7 @@ void QueryString::DrawEditBox(Window *w, int wid)
/* We will take the current widget length as maximum width, with a small
* space reserved at the end for the caret to show */
const Textbuf *tb = &this->text;
-
- delta = (wi->right - wi->left) - tb->width - 10;
- if (delta > 0) delta = 0;
+ int delta = min(0, (right - left) - tb->width - 10);
if (tb->caretxoffs + delta < 0) delta = -tb->caretxoffs;
diff --git a/src/osk_gui.cpp b/src/osk_gui.cpp
index 7858c7f46..4aa4285f7 100644
--- a/src/osk_gui.cpp
+++ b/src/osk_gui.cpp
@@ -75,7 +75,13 @@ struct OskWindow : public Window {
this->parent = parent;
assert(parent != NULL);
- this->caption = (parent->widget[button].data != STR_NULL) ? parent->widget[button].data : parent->caption;
+ if (parent->widget != NULL) {
+ this->caption = (parent->widget[button].data != STR_NULL) ? parent->widget[button].data : parent->caption;
+ }
+ if (parent->nested_array != NULL) {
+ assert(parent->nested_array[button] != NULL);
+ this->caption = (parent->nested_array[button]->widget_data != STR_NULL) ? parent->nested_array[button]->widget_data : parent->caption;
+ }
this->qs = parent;
this->text_btn = button;
diff --git a/src/querystring_gui.h b/src/querystring_gui.h
index d77e4b827..c23b4a08c 100644
--- a/src/querystring_gui.h
+++ b/src/querystring_gui.h
@@ -62,6 +62,12 @@ struct QueryStringBaseWindow : public Window, public QueryString {
char *orig_str_buf;
const uint16 edit_str_size; ///< maximum length of string (in bytes), including terminating '\0'
+ QueryStringBaseWindow(uint16 size) : Window(), edit_str_size(size)
+ {
+ assert(size != 0);
+ this->edit_str_buf = CallocT<char>(size);
+ }
+
QueryStringBaseWindow(uint16 size, const WindowDesc *desc, WindowNumber window_number = 0) : Window(desc, window_number), edit_str_size(size)
{
assert(size != 0);