summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2005-11-14 08:42:45 +0000
committerpeter1138 <peter1138@openttd.org>2005-11-14 08:42:45 +0000
commit6124ee09747fdac32a0b3af8616fd7813e0fe746 (patch)
tree6695093fe1be95b4b91e1fd2e19786b52a21a114
parent833032adc09ce95c68d4a4b412221a0b3f88e670 (diff)
downloadopenttd-6124ee09747fdac32a0b3af8616fd7813e0fe746.tar.xz
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
-rw-r--r--widget.c72
-rw-r--r--window.h12
2 files changed, 43 insertions, 41 deletions
diff --git a/widget.c b/widget.c
index 7861275d8..3d84bf2ac 100644
--- a/widget.c
+++ b/widget.c
@@ -436,15 +436,6 @@ draw_default:;
}
-static uint _dropdown_item_count;
-static const StringID *_dropdown_items;
-static int _dropdown_selindex;
-static byte _dropdown_button;
-static WindowClass _dropdown_windowclass;
-static WindowNumber _dropdown_windownum;
-static byte _dropdown_var1;
-static byte _dropdown_var2;
-
static const Widget _dropdown_menu_widgets[] = {
{ WWT_IMGBTN, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_NULL},
{ WIDGETS_END},
@@ -464,7 +455,7 @@ static int GetDropdownItem(const Window *w)
return - 1;
item = y / 10;
- if (item >= _dropdown_item_count || (HASBIT(w->disabled_state, item) && !HASBIT(w->hidden_state, item)) || _dropdown_items[item] == 0)
+ if (item >= WP(w,dropdown_d).num_items || (HASBIT(w->disabled_state, item) && !HASBIT(w->hidden_state, item)) || WP(w,dropdown_d).items[item] == 0)
return - 1;
// Skip hidden items -- +1 for each hidden item before the clicked item.
@@ -486,18 +477,18 @@ static void DropdownMenuWndProc(Window *w, WindowEvent *e)
x = 1;
y = 2;
- sel = _dropdown_selindex;
+ sel = WP(w,dropdown_d).selected_index;
- for(i=0; _dropdown_items[i] != INVALID_STRING_ID; i++) {
+ for (i = 0; WP(w,dropdown_d).items[i] != INVALID_STRING_ID; i++) {
if (HASBIT(w->hidden_state, i)) {
sel--;
continue;
}
- if (_dropdown_items[i] != 0) {
+ if (WP(w,dropdown_d).items[i] != 0) {
if (sel == 0) {
GfxFillRect(x+1, y, x+w->width-4, y + 9, 0);
}
- DrawString(x+2, y, _dropdown_items[i], sel==0 ? 12 : 16);
+ DrawString(x+2, y, WP(w,dropdown_d).items[i], sel==0 ? 12 : 16);
if (HASBIT(w->disabled_state, i)) {
GfxFillRect(x, y, x+w->width-3, y + 9, PALETTE_MODIFIER_GREYOUT |
@@ -517,52 +508,52 @@ static void DropdownMenuWndProc(Window *w, WindowEvent *e)
case WE_CLICK: {
item = GetDropdownItem(w);
if (item >= 0) {
- _dropdown_var1 = 4;
- _dropdown_selindex = item;
+ WP(w,dropdown_d).click_delay = 4;
+ WP(w,dropdown_d).selected_index = item;
SetWindowDirty(w);
}
} break;
case WE_MOUSELOOP: {
- Window *w2 = FindWindowById(_dropdown_windowclass, _dropdown_windownum);
+ Window *w2 = FindWindowById(WP(w,dropdown_d).parent_wnd_class, WP(w,dropdown_d).parent_wnd_num);
if (w2 == NULL) {
DeleteWindow(w);
return;
}
- if (_dropdown_var1 != 0 && --_dropdown_var1 == 0) {
+ if (WP(w,dropdown_d).click_delay != 0 && --WP(w,dropdown_d).click_delay == 0) {
WindowEvent e;
e.event = WE_DROPDOWN_SELECT;
- e.dropdown.button = _dropdown_button;
- e.dropdown.index = _dropdown_selindex;
+ e.dropdown.button = WP(w,dropdown_d).parent_button;
+ e.dropdown.index = WP(w,dropdown_d).selected_index;
w2->wndproc(w2, &e);
DeleteWindow(w);
return;
}
- if (_dropdown_var2 != 0) {
+ if (WP(w,dropdown_d).drag_mode) {
item = GetDropdownItem(w);
if (!_left_button_clicked) {
- _dropdown_var2 = 0;
+ WP(w,dropdown_d).drag_mode = false;
if (item < 0)
return;
- _dropdown_var1 = 2;
+ WP(w,dropdown_d).click_delay = 2;
} else {
if (item < 0)
return;
}
- _dropdown_selindex = item;
+ WP(w,dropdown_d).selected_index = item;
SetWindowDirty(w);
}
} break;
case WE_DESTROY: {
- Window *w2 = FindWindowById(_dropdown_windowclass, _dropdown_windownum);
+ Window *w2 = FindWindowById(WP(w,dropdown_d).parent_wnd_class, WP(w,dropdown_d).parent_wnd_num);
if (w2 != NULL) {
- CLRBIT(w2->click_state, _dropdown_button);
- InvalidateWidget(w2, _dropdown_button);
+ CLRBIT(w2->click_state, WP(w,dropdown_d).parent_button);
+ InvalidateWidget(w2, WP(w,dropdown_d).parent_button);
}
} break;
}
@@ -589,33 +580,21 @@ void ShowDropDownMenu(Window *w, const StringID *strings, int selected, int butt
InvalidateWidget(w, button);
- for(i=0;strings[i] != INVALID_STRING_ID;i++);
+ for (i = 0; strings[i] != INVALID_STRING_ID; i++);
if (i == 0)
return;
- _dropdown_items = strings;
- _dropdown_selindex = selected;
-
- _dropdown_windowclass = w->window_class;
- _dropdown_windownum = w->window_number;
- _dropdown_button = button;
-
- _dropdown_var1 = 0;
- _dropdown_var2 = 1;
-
wi = &w->widget[button];
if (hidden_mask != 0) {
int j;
- for(j=0; _dropdown_items[j] != INVALID_STRING_ID; j++) {
+ for (j = 0; strings[j] != INVALID_STRING_ID; j++) {
if (HASBIT(hidden_mask, j)) {
i--;
}
}
}
- _dropdown_item_count = i;
-
w2 = AllocateWindow(
w->left + wi[-1].left + 1,
w->top + wi->bottom + 2,
@@ -633,4 +612,15 @@ void ShowDropDownMenu(Window *w, const StringID *strings, int selected, int butt
w2->disabled_state = disabled_mask;
w2->hidden_state = hidden_mask;
+
+ WP(w2,dropdown_d).parent_wnd_class = w->window_class;
+ WP(w2,dropdown_d).parent_wnd_num = w->window_number;
+ WP(w2,dropdown_d).parent_button = button;
+
+ WP(w2,dropdown_d).num_items = i;
+ WP(w2,dropdown_d).selected_index = selected;
+ WP(w2,dropdown_d).items = strings;
+
+ WP(w2,dropdown_d).click_delay = 0;
+ WP(w2,dropdown_d).drag_mode = true;
}
diff --git a/window.h b/window.h
index 6c0a60793..72886b369 100644
--- a/window.h
+++ b/window.h
@@ -452,6 +452,18 @@ typedef struct message_d {
} message_d;
assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(message_d));
+typedef struct dropdown_d {
+ WindowClass parent_wnd_class;
+ WindowNumber parent_wnd_num;
+ byte parent_button;
+ byte num_items;
+ byte selected_index;
+ const StringID *items;
+ byte click_delay;
+ bool drag_mode;
+} dropdown_d;
+assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(dropdown_d));
+
enum WindowEvents {
WE_CLICK = 0,
WE_PAINT = 1,