author | KUDr |
Fri, 20 Apr 2007 19:43:06 +0000 | |
changeset 6513 | 454347ca3dfb |
parent 6481 | 85ad87daf4b0 |
child 7824 | 5a63d41b59ea |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
3 |
/** @file widget.cpp */ |
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
4 |
|
0 | 5 |
#include "stdafx.h" |
1891
862800791170
(svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents:
1657
diff
changeset
|
6 |
#include "openttd.h" |
2163
b17b313113a0
(svn r2673) Include functions.h directly, not globally via openttd.h
tron
parents:
2154
diff
changeset
|
7 |
#include "functions.h" |
2154
f86c59e73a16
(svn r2664) Remove depedency on player.h from variables.h
tron
parents:
2064
diff
changeset
|
8 |
#include "player.h" |
1363
775a7ee52369
(svn r1867) Include tables/sprites.h only in files which need it
tron
parents:
1177
diff
changeset
|
9 |
#include "table/sprites.h" |
507
04b5403aaf6b
(svn r815) Include strings.h only in the files which need it.
tron
parents:
193
diff
changeset
|
10 |
#include "table/strings.h" |
0 | 11 |
#include "window.h" |
12 |
#include "gfx.h" |
|
13 |
#include "viewport.h" |
|
14 |
||
2436
7d5df545bd5d
(svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents:
2406
diff
changeset
|
15 |
static Point HandleScrollbarHittest(const Scrollbar *sb, int top, int bottom) |
0 | 16 |
{ |
17 |
Point pt; |
|
18 |
int height, count, pos, cap; |
|
19 |
||
20 |
top += 10; |
|
21 |
bottom -= 9; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
22 |
|
0 | 23 |
height = (bottom - top); |
24 |
||
25 |
pos = sb->pos; |
|
26 |
count = sb->count; |
|
27 |
cap = sb->cap; |
|
28 |
||
2026 | 29 |
if (count != 0) top += height * pos / count; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
30 |
|
0 | 31 |
if (cap > count) cap = count; |
2639 | 32 |
if (count != 0) bottom -= (count - pos - cap) * height / count; |
0 | 33 |
|
34 |
pt.x = top; |
|
35 |
pt.y = bottom - 1; |
|
36 |
return pt; |
|
37 |
} |
|
38 |
||
6481
85ad87daf4b0
(svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents:
6432
diff
changeset
|
39 |
/** Special handling for the scrollbar widget type. |
0 | 40 |
* Handles the special scrolling buttons and other |
41 |
* scrolling. |
|
6481
85ad87daf4b0
(svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents:
6432
diff
changeset
|
42 |
* @param w Window on which a scroll was performed. |
85ad87daf4b0
(svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents:
6432
diff
changeset
|
43 |
* @param wi Pointer to the scrollbar widget. |
85ad87daf4b0
(svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents:
6432
diff
changeset
|
44 |
* @param x The X coordinate of the mouse click. |
85ad87daf4b0
(svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents:
6432
diff
changeset
|
45 |
* @param y The Y coordinate of the mouse click. */ |
0 | 46 |
void ScrollbarClickHandler(Window *w, const Widget *wi, int x, int y) |
47 |
{ |
|
48 |
int mi, ma, pos; |
|
49 |
Scrollbar *sb; |
|
50 |
||
842 | 51 |
switch (wi->type) { |
52 |
case WWT_SCROLLBAR: { |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
53 |
/* vertical scroller */ |
842 | 54 |
w->flags4 &= ~WF_HSCROLL; |
55 |
w->flags4 &= ~WF_SCROLL2; |
|
56 |
mi = wi->top; |
|
57 |
ma = wi->bottom; |
|
58 |
pos = y; |
|
59 |
sb = &w->vscroll; |
|
60 |
break; |
|
61 |
} |
|
62 |
case WWT_SCROLL2BAR: { |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
63 |
/* 2nd vertical scroller */ |
842 | 64 |
w->flags4 &= ~WF_HSCROLL; |
65 |
w->flags4 |= WF_SCROLL2; |
|
66 |
mi = wi->top; |
|
67 |
ma = wi->bottom; |
|
68 |
pos = y; |
|
69 |
sb = &w->vscroll2; |
|
70 |
break; |
|
71 |
} |
|
72 |
case WWT_HSCROLLBAR: { |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
73 |
/* horizontal scroller */ |
867
dffd33233237
(svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
truelight
parents:
860
diff
changeset
|
74 |
w->flags4 &= ~WF_SCROLL2; |
842 | 75 |
w->flags4 |= WF_HSCROLL; |
76 |
mi = wi->left; |
|
77 |
ma = wi->right; |
|
78 |
pos = x; |
|
79 |
sb = &w->hscroll; |
|
867
dffd33233237
(svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
truelight
parents:
860
diff
changeset
|
80 |
break; |
842 | 81 |
} |
845
4960e265d25b
(svn r1326) fixed compiler warnings in vehicle_gui.c and widget.c
bjarni
parents:
842
diff
changeset
|
82 |
default: return; //this should never happen |
0 | 83 |
} |
84 |
if (pos <= mi+9) { |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
85 |
/* Pressing the upper button? */ |
2597 | 86 |
w->flags4 |= WF_SCROLL_UP; |
87 |
if (_scroller_click_timeout == 0) { |
|
88 |
_scroller_click_timeout = 6; |
|
89 |
if (sb->pos != 0) sb->pos--; |
|
0 | 90 |
} |
2597 | 91 |
_left_button_clicked = false; |
0 | 92 |
} else if (pos >= ma-10) { |
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
93 |
/* Pressing the lower button? */ |
2597 | 94 |
w->flags4 |= WF_SCROLL_DOWN; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
95 |
|
2597 | 96 |
if (_scroller_click_timeout == 0) { |
97 |
_scroller_click_timeout = 6; |
|
98 |
if ((byte)(sb->pos + sb->cap) < sb->count) |
|
99 |
sb->pos++; |
|
0 | 100 |
} |
2597 | 101 |
_left_button_clicked = false; |
0 | 102 |
} else { |
103 |
Point pt = HandleScrollbarHittest(sb, mi, ma); |
|
104 |
||
105 |
if (pos < pt.x) { |
|
106 |
sb->pos = max(sb->pos - sb->cap, 0); |
|
107 |
} else if (pos > pt.y) { |
|
108 |
sb->pos = min( |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
109 |
sb->pos + sb->cap, |
0 | 110 |
max(sb->count - sb->cap, 0) |
111 |
); |
|
112 |
} else { |
|
113 |
_scrollbar_start_pos = pt.x - mi - 9; |
|
114 |
_scrollbar_size = ma - mi - 23; |
|
115 |
w->flags4 |= WF_SCROLL_MIDDLE; |
|
116 |
_scrolling_scrollbar = true; |
|
117 |
_cursorpos_drag_start = _cursor.pos; |
|
118 |
} |
|
119 |
} |
|
120 |
||
121 |
SetWindowDirty(w); |
|
122 |
} |
|
123 |
||
2021
3a8c59ea3fbe
(svn r2530) - Fix: [ 1219829 ] Mouse-wheel crashes OTTD. Widget detection failed to detect the most-right and most-bottom pixels of a widget. If scrollwheel is used on a not-found widget (such as the background of the toolbar), it will now fail correctly (glx)
Darkvater
parents:
1938
diff
changeset
|
124 |
/** Returns the index for the widget located at the given position |
3a8c59ea3fbe
(svn r2530) - Fix: [ 1219829 ] Mouse-wheel crashes OTTD. Widget detection failed to detect the most-right and most-bottom pixels of a widget. If scrollwheel is used on a not-found widget (such as the background of the toolbar), it will now fail correctly (glx)
Darkvater
parents:
1938
diff
changeset
|
125 |
* relative to the window. It includes all widget-corner pixels as well. |
3a8c59ea3fbe
(svn r2530) - Fix: [ 1219829 ] Mouse-wheel crashes OTTD. Widget detection failed to detect the most-right and most-bottom pixels of a widget. If scrollwheel is used on a not-found widget (such as the background of the toolbar), it will now fail correctly (glx)
Darkvater
parents:
1938
diff
changeset
|
126 |
* @param *w Window to look inside |
6481
85ad87daf4b0
(svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents:
6432
diff
changeset
|
127 |
* @param x The Window client X coordinate |
85ad87daf4b0
(svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents:
6432
diff
changeset
|
128 |
* @param y The Window client y coordinate |
2021
3a8c59ea3fbe
(svn r2530) - Fix: [ 1219829 ] Mouse-wheel crashes OTTD. Widget detection failed to detect the most-right and most-bottom pixels of a widget. If scrollwheel is used on a not-found widget (such as the background of the toolbar), it will now fail correctly (glx)
Darkvater
parents:
1938
diff
changeset
|
129 |
* @return A widget index, or -1 if no widget was found. |
0 | 130 |
*/ |
2436
7d5df545bd5d
(svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents:
2406
diff
changeset
|
131 |
int GetWidgetFromPos(const Window *w, int x, int y) |
0 | 132 |
{ |
5236
4c1289d5e45a
(svn r7356) -Codechange: replace 'for (i = 0, wi = w->widget; wi->type != WWT_LAST; i++, wi++)' type for loops with 'for (i = 0; i < w->window_count; i++) { wi = &w->widget[i];'-type for loops for better readability.
rubidium
parents:
5196
diff
changeset
|
133 |
uint index; |
4c1289d5e45a
(svn r7356) -Codechange: replace 'for (i = 0, wi = w->widget; wi->type != WWT_LAST; i++, wi++)' type for loops with 'for (i = 0; i < w->window_count; i++) { wi = &w->widget[i];'-type for loops for better readability.
rubidium
parents:
5196
diff
changeset
|
134 |
int found_index = -1; |
0 | 135 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
136 |
/* Go through the widgets and check if we find the widget that the coordinate is |
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
137 |
* inside. */ |
5236
4c1289d5e45a
(svn r7356) -Codechange: replace 'for (i = 0, wi = w->widget; wi->type != WWT_LAST; i++, wi++)' type for loops with 'for (i = 0; i < w->window_count; i++) { wi = &w->widget[i];'-type for loops for better readability.
rubidium
parents:
5196
diff
changeset
|
138 |
for (index = 0; index < w->widget_count; index++) { |
4c1289d5e45a
(svn r7356) -Codechange: replace 'for (i = 0, wi = w->widget; wi->type != WWT_LAST; i++, wi++)' type for loops with 'for (i = 0; i < w->window_count; i++) { wi = &w->widget[i];'-type for loops for better readability.
rubidium
parents:
5196
diff
changeset
|
139 |
const Widget *wi = &w->widget[index]; |
2639 | 140 |
if (wi->type == WWT_EMPTY || wi->type == WWT_FRAME) continue; |
0 | 141 |
|
2021
3a8c59ea3fbe
(svn r2530) - Fix: [ 1219829 ] Mouse-wheel crashes OTTD. Widget detection failed to detect the most-right and most-bottom pixels of a widget. If scrollwheel is used on a not-found widget (such as the background of the toolbar), it will now fail correctly (glx)
Darkvater
parents:
1938
diff
changeset
|
142 |
if (x >= wi->left && x <= wi->right && y >= wi->top && y <= wi->bottom && |
5236
4c1289d5e45a
(svn r7356) -Codechange: replace 'for (i = 0, wi = w->widget; wi->type != WWT_LAST; i++, wi++)' type for loops with 'for (i = 0; i < w->window_count; i++) { wi = &w->widget[i];'-type for loops for better readability.
rubidium
parents:
5196
diff
changeset
|
143 |
!IsWindowWidgetHidden(w, index)) { |
2639 | 144 |
found_index = index; |
0 | 145 |
} |
146 |
} |
|
147 |
||
148 |
return found_index; |
|
149 |
} |
|
150 |
||
151 |
||
4437
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
152 |
void DrawFrameRect(int left, int top, int right, int bottom, int ctab, FrameFlags flags) |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
153 |
{ |
4444
8d40844e6755
(svn r6222) Remove struct ColorList, because the names of its attributes are plain confusing
tron
parents:
4438
diff
changeset
|
154 |
uint dark = _colour_gradient[ctab][3]; |
8d40844e6755
(svn r6222) Remove struct ColorList, because the names of its attributes are plain confusing
tron
parents:
4438
diff
changeset
|
155 |
uint medium_dark = _colour_gradient[ctab][5]; |
8d40844e6755
(svn r6222) Remove struct ColorList, because the names of its attributes are plain confusing
tron
parents:
4438
diff
changeset
|
156 |
uint medium_light = _colour_gradient[ctab][6]; |
8d40844e6755
(svn r6222) Remove struct ColorList, because the names of its attributes are plain confusing
tron
parents:
4438
diff
changeset
|
157 |
uint light = _colour_gradient[ctab][7]; |
4437
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
158 |
|
4438
c8b86504b83c
(svn r6210) Remove FR_NOBORDER, because it is exclusivly used in conjunction with FR_TRANSPARENT
tron
parents:
4437
diff
changeset
|
159 |
if (flags & FR_TRANSPARENT) { |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
160 |
GfxFillRect(left, top, right, bottom, PALETTE_TO_TRANSPARENT | (1 << USE_COLORTABLE)); |
4437
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
161 |
} else { |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
162 |
uint interior; |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
163 |
|
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
164 |
if (flags & FR_LOWERED) { |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
165 |
GfxFillRect(left, top, left, bottom, dark); |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
166 |
GfxFillRect(left + 1, top, right, top, dark); |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
167 |
GfxFillRect(right, top + 1, right, bottom - 1, light); |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
168 |
GfxFillRect(left + 1, bottom, right, bottom, light); |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
169 |
interior = (flags & FR_DARKENED ? medium_dark : medium_light); |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
170 |
} else { |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
171 |
GfxFillRect(left, top, left, bottom - 1, light); |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
172 |
GfxFillRect(left + 1, top, right - 1, top, light); |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
173 |
GfxFillRect(right, top, right, bottom - 1, dark); |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
174 |
GfxFillRect(left, bottom, right, bottom, dark); |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
175 |
interior = medium_dark; |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
176 |
} |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
177 |
if (!(flags & FR_BORDERONLY)) { |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
178 |
GfxFillRect(left + 1, top + 1, right - 1, bottom - 1, interior); |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
179 |
} |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
180 |
} |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
181 |
} |
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
182 |
|
49e79e135539
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
tron
parents:
4345
diff
changeset
|
183 |
|
2436
7d5df545bd5d
(svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents:
2406
diff
changeset
|
184 |
void DrawWindowWidgets(const Window *w) |
0 | 185 |
{ |
2548
49c8a096033f
(svn r3077) static, const, bracing, indentation, 0 -> '\0'/NULL, typos in comments, excess empty lines, minor other changes
tron
parents:
2448
diff
changeset
|
186 |
const DrawPixelInfo* dpi = _cur_dpi; |
0 | 187 |
Rect r; |
5236
4c1289d5e45a
(svn r7356) -Codechange: replace 'for (i = 0, wi = w->widget; wi->type != WWT_LAST; i++, wi++)' type for loops with 'for (i = 0; i < w->window_count; i++) { wi = &w->widget[i];'-type for loops for better readability.
rubidium
parents:
5196
diff
changeset
|
188 |
uint i; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
189 |
|
5236
4c1289d5e45a
(svn r7356) -Codechange: replace 'for (i = 0, wi = w->widget; wi->type != WWT_LAST; i++, wi++)' type for loops with 'for (i = 0; i < w->window_count; i++) { wi = &w->widget[i];'-type for loops for better readability.
rubidium
parents:
5196
diff
changeset
|
190 |
for (i = 0; i < w->widget_count; i++) { |
4c1289d5e45a
(svn r7356) -Codechange: replace 'for (i = 0, wi = w->widget; wi->type != WWT_LAST; i++, wi++)' type for loops with 'for (i = 0; i < w->window_count; i++) { wi = &w->widget[i];'-type for loops for better readability.
rubidium
parents:
5196
diff
changeset
|
191 |
const Widget *wi = &w->widget[i]; |
4c1289d5e45a
(svn r7356) -Codechange: replace 'for (i = 0, wi = w->widget; wi->type != WWT_LAST; i++, wi++)' type for loops with 'for (i = 0; i < w->window_count; i++) { wi = &w->widget[i];'-type for loops for better readability.
rubidium
parents:
5196
diff
changeset
|
192 |
bool clicked = IsWindowWidgetLowered(w, i); |
1657
af84fedacc6d
(svn r2161) - Fix: When resizing a window, the button is also visibly depressed
Darkvater
parents:
1363
diff
changeset
|
193 |
|
0 | 194 |
if (dpi->left > (r.right=/*w->left + */wi->right) || |
2639 | 195 |
dpi->left + dpi->width <= (r.left=wi->left/* + w->left*/) || |
0 | 196 |
dpi->top > (r.bottom=/*w->top +*/ wi->bottom) || |
197 |
dpi->top + dpi->height <= (r.top = /*w->top +*/ wi->top) || |
|
5236
4c1289d5e45a
(svn r7356) -Codechange: replace 'for (i = 0, wi = w->widget; wi->type != WWT_LAST; i++, wi++)' type for loops with 'for (i = 0; i < w->window_count; i++) { wi = &w->widget[i];'-type for loops for better readability.
rubidium
parents:
5196
diff
changeset
|
198 |
IsWindowWidgetHidden(w, i)) { |
2639 | 199 |
continue; |
200 |
} |
|
0 | 201 |
|
1657
af84fedacc6d
(svn r2161) - Fix: When resizing a window, the button is also visibly depressed
Darkvater
parents:
1363
diff
changeset
|
202 |
switch (wi->type & WWT_MASK) { |
4938
0447845fd1b3
(svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents:
4749
diff
changeset
|
203 |
case WWT_IMGBTN: |
0447845fd1b3
(svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents:
4749
diff
changeset
|
204 |
case WWT_IMGBTN_2: { |
4547
d37c2d172ad4
(svn r6379) -Codechange: cast 'remove babel' on widget's unkA and rename it to 'data'.
Darkvater
parents:
4444
diff
changeset
|
205 |
int img = wi->data; |
4938
0447845fd1b3
(svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents:
4749
diff
changeset
|
206 |
assert(img != 0); |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
207 |
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
0 | 208 |
|
4938
0447845fd1b3
(svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents:
4749
diff
changeset
|
209 |
/* show different image when clicked for WWT_IMGBTN_2 */ |
0447845fd1b3
(svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents:
4749
diff
changeset
|
210 |
if ((wi->type & WWT_MASK) == WWT_IMGBTN_2 && clicked) img++; |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
211 |
DrawSprite(img, PAL_NONE, r.left + 1 + clicked, r.top + 1 + clicked); |
4938
0447845fd1b3
(svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents:
4749
diff
changeset
|
212 |
goto draw_default; |
0447845fd1b3
(svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents:
4749
diff
changeset
|
213 |
} |
1657
af84fedacc6d
(svn r2161) - Fix: When resizing a window, the button is also visibly depressed
Darkvater
parents:
1363
diff
changeset
|
214 |
|
4938
0447845fd1b3
(svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents:
4749
diff
changeset
|
215 |
case WWT_PANEL: { |
0447845fd1b3
(svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents:
4749
diff
changeset
|
216 |
assert(wi->data == 0); |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
217 |
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
0 | 218 |
goto draw_default; |
219 |
} |
|
220 |
||
4939
bef7c24a6027
(svn r6926) -Codechange: Rename WWT_4 to WWT_TEXTBTN_2 and WWT_6 to WWT_INSET (credits to peter1138
Darkvater
parents:
4938
diff
changeset
|
221 |
case WWT_TEXTBTN: |
bef7c24a6027
(svn r6926) -Codechange: Rename WWT_4 to WWT_TEXTBTN_2 and WWT_6 to WWT_INSET (credits to peter1138
Darkvater
parents:
4938
diff
changeset
|
222 |
case WWT_TEXTBTN_2: { |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
223 |
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
0 | 224 |
} |
225 |
/* fall through */ |
|
226 |
||
4345
1da147230c79
(svn r6046) CodeChange : Rename WWT_5 Widget type to WWT_LABEL : a centered label
belugas
parents:
3762
diff
changeset
|
227 |
case WWT_LABEL: { |
4547
d37c2d172ad4
(svn r6379) -Codechange: cast 'remove babel' on widget's unkA and rename it to 'data'.
Darkvater
parents:
4444
diff
changeset
|
228 |
StringID str = wi->data; |
0 | 229 |
|
4939
bef7c24a6027
(svn r6926) -Codechange: Rename WWT_4 to WWT_TEXTBTN_2 and WWT_6 to WWT_INSET (credits to peter1138
Darkvater
parents:
4938
diff
changeset
|
230 |
if ((wi->type & WWT_MASK) == WWT_TEXTBTN_2 && clicked) str++; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
231 |
|
1657
af84fedacc6d
(svn r2161) - Fix: When resizing a window, the button is also visibly depressed
Darkvater
parents:
1363
diff
changeset
|
232 |
DrawStringCentered(((r.left + r.right + 1) >> 1) + clicked, ((r.top + r.bottom + 1) >> 1) - 5 + clicked, str, 0); |
2064
e6a2b42d0b15
(svn r2573) Codechange: Removed WDF_RESTORE_DPARAM, it's not needed with the new string system.
ludde
parents:
2026
diff
changeset
|
233 |
goto draw_default; |
0 | 234 |
} |
235 |
||
6278
f4d4b7c1c886
(svn r9088) -Add : a new type of widget, called WWT_TEXT. It is a simple truncated string. It will be usefull on windows where lot of simple text is always drawn on the WE_PAINT event, making the code clearer. For now, left, right (total size of the window), top, color and data are necessary to use it. Maybe more features will be available soon.
belugas
parents:
5824
diff
changeset
|
236 |
case WWT_TEXT: { |
f4d4b7c1c886
(svn r9088) -Add : a new type of widget, called WWT_TEXT. It is a simple truncated string. It will be usefull on windows where lot of simple text is always drawn on the WE_PAINT event, making the code clearer. For now, left, right (total size of the window), top, color and data are necessary to use it. Maybe more features will be available soon.
belugas
parents:
5824
diff
changeset
|
237 |
StringID str = wi->data; |
f4d4b7c1c886
(svn r9088) -Add : a new type of widget, called WWT_TEXT. It is a simple truncated string. It will be usefull on windows where lot of simple text is always drawn on the WE_PAINT event, making the code clearer. For now, left, right (total size of the window), top, color and data are necessary to use it. Maybe more features will be available soon.
belugas
parents:
5824
diff
changeset
|
238 |
|
f4d4b7c1c886
(svn r9088) -Add : a new type of widget, called WWT_TEXT. It is a simple truncated string. It will be usefull on windows where lot of simple text is always drawn on the WE_PAINT event, making the code clearer. For now, left, right (total size of the window), top, color and data are necessary to use it. Maybe more features will be available soon.
belugas
parents:
5824
diff
changeset
|
239 |
if (str != STR_NULL) DrawStringTruncated(r.left, r.top, str, wi->color, r.right - r.left); |
f4d4b7c1c886
(svn r9088) -Add : a new type of widget, called WWT_TEXT. It is a simple truncated string. It will be usefull on windows where lot of simple text is always drawn on the WE_PAINT event, making the code clearer. For now, left, right (total size of the window), top, color and data are necessary to use it. Maybe more features will be available soon.
belugas
parents:
5824
diff
changeset
|
240 |
break; |
f4d4b7c1c886
(svn r9088) -Add : a new type of widget, called WWT_TEXT. It is a simple truncated string. It will be usefull on windows where lot of simple text is always drawn on the WE_PAINT event, making the code clearer. For now, left, right (total size of the window), top, color and data are necessary to use it. Maybe more features will be available soon.
belugas
parents:
5824
diff
changeset
|
241 |
} |
f4d4b7c1c886
(svn r9088) -Add : a new type of widget, called WWT_TEXT. It is a simple truncated string. It will be usefull on windows where lot of simple text is always drawn on the WE_PAINT event, making the code clearer. For now, left, right (total size of the window), top, color and data are necessary to use it. Maybe more features will be available soon.
belugas
parents:
5824
diff
changeset
|
242 |
|
4939
bef7c24a6027
(svn r6926) -Codechange: Rename WWT_4 to WWT_TEXTBTN_2 and WWT_6 to WWT_INSET (credits to peter1138
Darkvater
parents:
4938
diff
changeset
|
243 |
case WWT_INSET: { |
4547
d37c2d172ad4
(svn r6379) -Codechange: cast 'remove babel' on widget's unkA and rename it to 'data'.
Darkvater
parents:
4444
diff
changeset
|
244 |
StringID str = wi->data; |
1938
70baf462aff1
(svn r2444) - CodeChange: Add an enum for demagicifying the values of the 'flags' parameter of DrawFrameRect(). (_Abraxa_)
hackykid
parents:
1891
diff
changeset
|
245 |
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, FR_LOWERED | FR_DARKENED); |
0 | 246 |
|
4547
d37c2d172ad4
(svn r6379) -Codechange: cast 'remove babel' on widget's unkA and rename it to 'data'.
Darkvater
parents:
4444
diff
changeset
|
247 |
if (str != STR_NULL) DrawStringTruncated(r.left + 2, r.top + 1, str, 0, r.right - r.left - 10); |
0 | 248 |
goto draw_default; |
249 |
} |
|
250 |
||
251 |
case WWT_MATRIX: { |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
252 |
int c, d, ctr; |
0 | 253 |
int x, amt1, amt2; |
254 |
int color; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
255 |
|
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
256 |
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
257 |
|
4547
d37c2d172ad4
(svn r6379) -Codechange: cast 'remove babel' on widget's unkA and rename it to 'data'.
Darkvater
parents:
4444
diff
changeset
|
258 |
c = GB(wi->data, 0, 8); |
0 | 259 |
amt1 = (wi->right - wi->left + 1) / c; |
260 |
||
4547
d37c2d172ad4
(svn r6379) -Codechange: cast 'remove babel' on widget's unkA and rename it to 'data'.
Darkvater
parents:
4444
diff
changeset
|
261 |
d = GB(wi->data, 8, 8); |
0 | 262 |
amt2 = (wi->bottom - wi->top + 1) / d; |
263 |
||
4444
8d40844e6755
(svn r6222) Remove struct ColorList, because the names of its attributes are plain confusing
tron
parents:
4438
diff
changeset
|
264 |
color = _colour_gradient[wi->color & 0xF][6]; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
265 |
|
0 | 266 |
x = r.left; |
2801
b9062d829629
(svn r3349) Fix off-by-one error in drawing matrix widget, from r3181.
peter1138
parents:
2757
diff
changeset
|
267 |
for (ctr = c; ctr > 1; ctr--) { |
0 | 268 |
x += amt1; |
2639 | 269 |
GfxFillRect(x, r.top + 1, x, r.bottom - 1, color); |
0 | 270 |
} |
271 |
||
272 |
x = r.top; |
|
2801
b9062d829629
(svn r3349) Fix off-by-one error in drawing matrix widget, from r3181.
peter1138
parents:
2757
diff
changeset
|
273 |
for (ctr = d; ctr > 1; ctr--) { |
0 | 274 |
x += amt2; |
2639 | 275 |
GfxFillRect(r.left + 1, x, r.right - 1, x, color); |
0 | 276 |
} |
277 |
||
4444
8d40844e6755
(svn r6222) Remove struct ColorList, because the names of its attributes are plain confusing
tron
parents:
4438
diff
changeset
|
278 |
color = _colour_gradient[wi->color&0xF][4]; |
0 | 279 |
|
2639 | 280 |
x = r.left - 1; |
2801
b9062d829629
(svn r3349) Fix off-by-one error in drawing matrix widget, from r3181.
peter1138
parents:
2757
diff
changeset
|
281 |
for (ctr = c; ctr > 1; ctr--) { |
0 | 282 |
x += amt1; |
2639 | 283 |
GfxFillRect(x, r.top + 1, x, r.bottom - 1, color); |
0 | 284 |
} |
285 |
||
2639 | 286 |
x = r.top - 1; |
2801
b9062d829629
(svn r3349) Fix off-by-one error in drawing matrix widget, from r3181.
peter1138
parents:
2757
diff
changeset
|
287 |
for (ctr = d; ctr > 1; ctr--) { |
0 | 288 |
x += amt2; |
289 |
GfxFillRect(r.left+1, x, r.right-1, x, color); |
|
290 |
} |
|
291 |
||
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
292 |
goto draw_default; |
0 | 293 |
} |
294 |
||
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
295 |
/* vertical scrollbar */ |
0 | 296 |
case WWT_SCROLLBAR: { |
297 |
Point pt; |
|
298 |
int c1,c2; |
|
299 |
||
893
f4698309dec7
(svn r1379) -Fix: various GUI glitches. Added default sizes to various widgets. Sticky/Resize- and Scrollbar must be 11 pixels wide, Horizontal scrollbar 11 pixels high, caption must be 13 pixels. I hope I didn't forget any widgets, the game will assert for that so report them to me!
darkvater
parents:
884
diff
changeset
|
300 |
assert(r.right - r.left == 11); // XXX - to ensure the same sizes are used everywhere! |
f4698309dec7
(svn r1379) -Fix: various GUI glitches. Added default sizes to various widgets. Sticky/Resize- and Scrollbar must be 11 pixels wide, Horizontal scrollbar 11 pixels high, caption must be 13 pixels. I hope I didn't forget any widgets, the game will assert for that so report them to me!
darkvater
parents:
884
diff
changeset
|
301 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
302 |
/* draw up/down buttons */ |
4940
d021a1285a5f
(svn r6927) -Codechange: No need to explicitly cast a boolean to a boolean and move draw_default
Darkvater
parents:
4939
diff
changeset
|
303 |
clicked = ((w->flags4 & (WF_SCROLL_UP | WF_HSCROLL | WF_SCROLL2)) == WF_SCROLL_UP); |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
304 |
DrawFrameRect(r.left, r.top, r.right, r.top + 9, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
2406
8c873205483a
(svn r2932) Give the strings consisting of an up/a down arrow symbolic names
tron
parents:
2218
diff
changeset
|
305 |
DoDrawString(UPARROW, r.left + 2 + clicked, r.top + clicked, 0x10); |
0 | 306 |
|
4940
d021a1285a5f
(svn r6927) -Codechange: No need to explicitly cast a boolean to a boolean and move draw_default
Darkvater
parents:
4939
diff
changeset
|
307 |
clicked = (((w->flags4 & (WF_SCROLL_DOWN | WF_HSCROLL | WF_SCROLL2)) == WF_SCROLL_DOWN)); |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
308 |
DrawFrameRect(r.left, r.bottom - 9, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
2406
8c873205483a
(svn r2932) Give the strings consisting of an up/a down arrow symbolic names
tron
parents:
2218
diff
changeset
|
309 |
DoDrawString(DOWNARROW, r.left + 2 + clicked, r.bottom - 9 + clicked, 0x10); |
0 | 310 |
|
4444
8d40844e6755
(svn r6222) Remove struct ColorList, because the names of its attributes are plain confusing
tron
parents:
4438
diff
changeset
|
311 |
c1 = _colour_gradient[wi->color&0xF][3]; |
8d40844e6755
(svn r6222) Remove struct ColorList, because the names of its attributes are plain confusing
tron
parents:
4438
diff
changeset
|
312 |
c2 = _colour_gradient[wi->color&0xF][7]; |
0 | 313 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
314 |
/* draw "shaded" background */ |
0 | 315 |
GfxFillRect(r.left, r.top+10, r.right, r.bottom-10, c2); |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
316 |
GfxFillRect(r.left, r.top+10, r.right, r.bottom-10, c1 | (1 << PALETTE_MODIFIER_GREYOUT)); |
0 | 317 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
318 |
/* draw shaded lines */ |
0 | 319 |
GfxFillRect(r.left+2, r.top+10, r.left+2, r.bottom-10, c1); |
320 |
GfxFillRect(r.left+3, r.top+10, r.left+3, r.bottom-10, c2); |
|
321 |
GfxFillRect(r.left+7, r.top+10, r.left+7, r.bottom-10, c1); |
|
322 |
GfxFillRect(r.left+8, r.top+10, r.left+8, r.bottom-10, c2); |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
323 |
|
0 | 324 |
pt = HandleScrollbarHittest(&w->vscroll, r.top, r.bottom); |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
325 |
DrawFrameRect(r.left, pt.x, r.right, pt.y, wi->color, (w->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL | WF_SCROLL2)) == WF_SCROLL_MIDDLE ? FR_LOWERED : FR_NONE); |
842 | 326 |
break; |
327 |
} |
|
328 |
case WWT_SCROLL2BAR: { |
|
329 |
Point pt; |
|
330 |
int c1,c2; |
|
331 |
||
893
f4698309dec7
(svn r1379) -Fix: various GUI glitches. Added default sizes to various widgets. Sticky/Resize- and Scrollbar must be 11 pixels wide, Horizontal scrollbar 11 pixels high, caption must be 13 pixels. I hope I didn't forget any widgets, the game will assert for that so report them to me!
darkvater
parents:
884
diff
changeset
|
332 |
assert(r.right - r.left == 11); // XXX - to ensure the same sizes are used everywhere! |
f4698309dec7
(svn r1379) -Fix: various GUI glitches. Added default sizes to various widgets. Sticky/Resize- and Scrollbar must be 11 pixels wide, Horizontal scrollbar 11 pixels high, caption must be 13 pixels. I hope I didn't forget any widgets, the game will assert for that so report them to me!
darkvater
parents:
884
diff
changeset
|
333 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
334 |
/* draw up/down buttons */ |
4940
d021a1285a5f
(svn r6927) -Codechange: No need to explicitly cast a boolean to a boolean and move draw_default
Darkvater
parents:
4939
diff
changeset
|
335 |
clicked = ((w->flags4 & (WF_SCROLL_UP | WF_HSCROLL | WF_SCROLL2)) == (WF_SCROLL_UP | WF_SCROLL2)); |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
336 |
DrawFrameRect(r.left, r.top, r.right, r.top + 9, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
2406
8c873205483a
(svn r2932) Give the strings consisting of an up/a down arrow symbolic names
tron
parents:
2218
diff
changeset
|
337 |
DoDrawString(UPARROW, r.left + 2 + clicked, r.top + clicked, 0x10); |
842 | 338 |
|
4940
d021a1285a5f
(svn r6927) -Codechange: No need to explicitly cast a boolean to a boolean and move draw_default
Darkvater
parents:
4939
diff
changeset
|
339 |
clicked = ((w->flags4 & (WF_SCROLL_DOWN | WF_HSCROLL | WF_SCROLL2)) == (WF_SCROLL_DOWN | WF_SCROLL2)); |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
340 |
DrawFrameRect(r.left, r.bottom - 9, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
2406
8c873205483a
(svn r2932) Give the strings consisting of an up/a down arrow symbolic names
tron
parents:
2218
diff
changeset
|
341 |
DoDrawString(DOWNARROW, r.left + 2 + clicked, r.bottom - 9 + clicked, 0x10); |
842 | 342 |
|
4444
8d40844e6755
(svn r6222) Remove struct ColorList, because the names of its attributes are plain confusing
tron
parents:
4438
diff
changeset
|
343 |
c1 = _colour_gradient[wi->color&0xF][3]; |
8d40844e6755
(svn r6222) Remove struct ColorList, because the names of its attributes are plain confusing
tron
parents:
4438
diff
changeset
|
344 |
c2 = _colour_gradient[wi->color&0xF][7]; |
842 | 345 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
346 |
/* draw "shaded" background */ |
842 | 347 |
GfxFillRect(r.left, r.top+10, r.right, r.bottom-10, c2); |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
348 |
GfxFillRect(r.left, r.top+10, r.right, r.bottom-10, c1 | (1 << PALETTE_MODIFIER_GREYOUT)); |
842 | 349 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
350 |
/* draw shaded lines */ |
842 | 351 |
GfxFillRect(r.left+2, r.top+10, r.left+2, r.bottom-10, c1); |
352 |
GfxFillRect(r.left+3, r.top+10, r.left+3, r.bottom-10, c2); |
|
353 |
GfxFillRect(r.left+7, r.top+10, r.left+7, r.bottom-10, c1); |
|
354 |
GfxFillRect(r.left+8, r.top+10, r.left+8, r.bottom-10, c2); |
|
355 |
||
356 |
pt = HandleScrollbarHittest(&w->vscroll2, r.top, r.bottom); |
|
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
357 |
DrawFrameRect(r.left, pt.x, r.right, pt.y, wi->color, (w->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL | WF_SCROLL2)) == (WF_SCROLL_MIDDLE | WF_SCROLL2) ? FR_LOWERED : FR_NONE); |
0 | 358 |
break; |
359 |
} |
|
360 |
||
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
361 |
/* horizontal scrollbar */ |
0 | 362 |
case WWT_HSCROLLBAR: { |
363 |
Point pt; |
|
364 |
int c1,c2; |
|
365 |
||
894
8b59c639837d
(svn r1380) -Fix: missed widget fixes; thanks Jango and TestMan57
darkvater
parents:
893
diff
changeset
|
366 |
assert(r.bottom - r.top == 11); // XXX - to ensure the same sizes are used everywhere! |
893
f4698309dec7
(svn r1379) -Fix: various GUI glitches. Added default sizes to various widgets. Sticky/Resize- and Scrollbar must be 11 pixels wide, Horizontal scrollbar 11 pixels high, caption must be 13 pixels. I hope I didn't forget any widgets, the game will assert for that so report them to me!
darkvater
parents:
884
diff
changeset
|
367 |
|
4940
d021a1285a5f
(svn r6927) -Codechange: No need to explicitly cast a boolean to a boolean and move draw_default
Darkvater
parents:
4939
diff
changeset
|
368 |
clicked = ((w->flags4 & (WF_SCROLL_UP | WF_HSCROLL)) == (WF_SCROLL_UP | WF_HSCROLL)); |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
369 |
DrawFrameRect(r.left, r.top, r.left + 9, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
370 |
DrawSprite(SPR_ARROW_LEFT, PAL_NONE, r.left + 1 + clicked, r.top + 1 + clicked); |
0 | 371 |
|
4940
d021a1285a5f
(svn r6927) -Codechange: No need to explicitly cast a boolean to a boolean and move draw_default
Darkvater
parents:
4939
diff
changeset
|
372 |
clicked = ((w->flags4 & (WF_SCROLL_DOWN | WF_HSCROLL)) == (WF_SCROLL_DOWN | WF_HSCROLL)); |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
373 |
DrawFrameRect(r.right-9, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
374 |
DrawSprite(SPR_ARROW_RIGHT, PAL_NONE, r.right - 8 + clicked, r.top + 1 + clicked); |
0 | 375 |
|
4444
8d40844e6755
(svn r6222) Remove struct ColorList, because the names of its attributes are plain confusing
tron
parents:
4438
diff
changeset
|
376 |
c1 = _colour_gradient[wi->color&0xF][3]; |
8d40844e6755
(svn r6222) Remove struct ColorList, because the names of its attributes are plain confusing
tron
parents:
4438
diff
changeset
|
377 |
c2 = _colour_gradient[wi->color&0xF][7]; |
0 | 378 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
379 |
/* draw "shaded" background */ |
0 | 380 |
GfxFillRect(r.left+10, r.top, r.right-10, r.bottom, c2); |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
381 |
GfxFillRect(r.left+10, r.top, r.right-10, r.bottom, c1 | (1 << PALETTE_MODIFIER_GREYOUT)); |
0 | 382 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
383 |
/* draw shaded lines */ |
0 | 384 |
GfxFillRect(r.left+10, r.top+2, r.right-10, r.top+2, c1); |
385 |
GfxFillRect(r.left+10, r.top+3, r.right-10, r.top+3, c2); |
|
386 |
GfxFillRect(r.left+10, r.top+7, r.right-10, r.top+7, c1); |
|
387 |
GfxFillRect(r.left+10, r.top+8, r.right-10, r.top+8, c2); |
|
388 |
||
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
389 |
/* draw actual scrollbar */ |
0 | 390 |
pt = HandleScrollbarHittest(&w->hscroll, r.left, r.right); |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
391 |
DrawFrameRect(pt.x, r.top, pt.y, r.bottom, wi->color, (w->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL)) == (WF_SCROLL_MIDDLE | WF_HSCROLL) ? FR_LOWERED : FR_NONE); |
0 | 392 |
|
393 |
break; |
|
394 |
} |
|
395 |
||
396 |
case WWT_FRAME: { |
|
397 |
int c1,c2; |
|
860
fad6642f6217
(svn r1341) -Fix: fix WWT_FRAME drawing when there is no text there (STR_NULL)
darkvater
parents:
845
diff
changeset
|
398 |
int x2 = r.left; // by default the left side is the left side of the widget |
0 | 399 |
|
4547
d37c2d172ad4
(svn r6379) -Codechange: cast 'remove babel' on widget's unkA and rename it to 'data'.
Darkvater
parents:
4444
diff
changeset
|
400 |
if (wi->data != 0) x2 = DrawString(r.left + 6, r.top, wi->data, 0); |
0 | 401 |
|
4444
8d40844e6755
(svn r6222) Remove struct ColorList, because the names of its attributes are plain confusing
tron
parents:
4438
diff
changeset
|
402 |
c1 = _colour_gradient[wi->color][3]; |
8d40844e6755
(svn r6222) Remove struct ColorList, because the names of its attributes are plain confusing
tron
parents:
4438
diff
changeset
|
403 |
c2 = _colour_gradient[wi->color][7]; |
0 | 404 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
405 |
/*Line from upper left corner to start of text */ |
0 | 406 |
GfxFillRect(r.left, r.top+4, r.left+4,r.top+4, c1); |
407 |
GfxFillRect(r.left+1, r.top+5, r.left+4,r.top+5, c2); |
|
408 |
||
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
409 |
/* Line from end of text to upper right corner */ |
0 | 410 |
GfxFillRect(x2, r.top+4, r.right-1,r.top+4,c1); |
411 |
GfxFillRect(x2, r.top+5, r.right-2,r.top+5,c2); |
|
412 |
||
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
413 |
/* Line from upper left corner to bottom left corner */ |
0 | 414 |
GfxFillRect(r.left, r.top+5, r.left, r.bottom-1, c1); |
415 |
GfxFillRect(r.left+1, r.top+6, r.left+1, r.bottom-2, c2); |
|
416 |
||
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
417 |
/*Line from upper right corner to bottom right corner */ |
0 | 418 |
GfxFillRect(r.right-1, r.top+5, r.right-1, r.bottom-2, c1); |
419 |
GfxFillRect(r.right, r.top+4, r.right, r.bottom-1, c2); |
|
420 |
||
421 |
GfxFillRect(r.left+1, r.bottom-1, r.right-1, r.bottom-1, c1); |
|
422 |
GfxFillRect(r.left, r.bottom, r.right, r.bottom, c2); |
|
423 |
||
2064
e6a2b42d0b15
(svn r2573) Codechange: Removed WDF_RESTORE_DPARAM, it's not needed with the new string system.
ludde
parents:
2026
diff
changeset
|
424 |
goto draw_default; |
0 | 425 |
} |
426 |
||
682
74c70f645d95
(svn r1121) -Feature: Added sticky windows feature. A small pin allows the user to set the window as undeletable and can only be closed by hand. As an example the viewport window has been stickied (thanks to Neko-San)
darkvater
parents:
674
diff
changeset
|
427 |
case WWT_STICKYBOX: { |
893
f4698309dec7
(svn r1379) -Fix: various GUI glitches. Added default sizes to various widgets. Sticky/Resize- and Scrollbar must be 11 pixels wide, Horizontal scrollbar 11 pixels high, caption must be 13 pixels. I hope I didn't forget any widgets, the game will assert for that so report them to me!
darkvater
parents:
884
diff
changeset
|
428 |
assert(r.right - r.left == 11); // XXX - to ensure the same sizes are used everywhere! |
2703
a969970a5245
(svn r3247) - Fix: "[ 1335580 ] sticky windows not sticky anymore"
peter1138
parents:
2683
diff
changeset
|
429 |
|
a969970a5245
(svn r3247) - Fix: "[ 1335580 ] sticky windows not sticky anymore"
peter1138
parents:
2683
diff
changeset
|
430 |
clicked = !!(w->flags4 & WF_STICKY); |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
431 |
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
432 |
DrawSprite((clicked) ? SPR_PIN_UP : SPR_PIN_DOWN, PAL_NONE, r.left + 2 + clicked, r.top + 3 + clicked); |
682
74c70f645d95
(svn r1121) -Feature: Added sticky windows feature. A small pin allows the user to set the window as undeletable and can only be closed by hand. As an example the viewport window has been stickied (thanks to Neko-San)
darkvater
parents:
674
diff
changeset
|
433 |
break; |
74c70f645d95
(svn r1121) -Feature: Added sticky windows feature. A small pin allows the user to set the window as undeletable and can only be closed by hand. As an example the viewport window has been stickied (thanks to Neko-San)
darkvater
parents:
674
diff
changeset
|
434 |
} |
867
dffd33233237
(svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
truelight
parents:
860
diff
changeset
|
435 |
|
dffd33233237
(svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
truelight
parents:
860
diff
changeset
|
436 |
case WWT_RESIZEBOX: { |
893
f4698309dec7
(svn r1379) -Fix: various GUI glitches. Added default sizes to various widgets. Sticky/Resize- and Scrollbar must be 11 pixels wide, Horizontal scrollbar 11 pixels high, caption must be 13 pixels. I hope I didn't forget any widgets, the game will assert for that so report them to me!
darkvater
parents:
884
diff
changeset
|
437 |
assert(r.right - r.left == 11); // XXX - to ensure the same sizes are used everywhere! |
915 | 438 |
|
1657
af84fedacc6d
(svn r2161) - Fix: When resizing a window, the button is also visibly depressed
Darkvater
parents:
1363
diff
changeset
|
439 |
clicked = !!(w->flags4 & WF_SIZING); |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
440 |
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
441 |
DrawSprite(SPR_WINDOW_RESIZE, PAL_NONE, r.left + 3 + clicked, r.top + 3 + clicked); |
867
dffd33233237
(svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
truelight
parents:
860
diff
changeset
|
442 |
break; |
dffd33233237
(svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
truelight
parents:
860
diff
changeset
|
443 |
} |
dffd33233237
(svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
truelight
parents:
860
diff
changeset
|
444 |
|
2757
d1ccb6600be3
(svn r3302) - Fix: split drawing of text buttons and the closebox, so the closebox symbol can be centred.
peter1138
parents:
2703
diff
changeset
|
445 |
case WWT_CLOSEBOX: { |
d1ccb6600be3
(svn r3302) - Fix: split drawing of text buttons and the closebox, so the closebox symbol can be centred.
peter1138
parents:
2703
diff
changeset
|
446 |
assert(r.right - r.left == 10); // ensure the same sizes are used everywhere |
d1ccb6600be3
(svn r3302) - Fix: split drawing of text buttons and the closebox, so the closebox symbol can be centred.
peter1138
parents:
2703
diff
changeset
|
447 |
|
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
448 |
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, FR_NONE); |
2757
d1ccb6600be3
(svn r3302) - Fix: split drawing of text buttons and the closebox, so the closebox symbol can be centred.
peter1138
parents:
2703
diff
changeset
|
449 |
DrawString(r.left + 2, r.top + 2, STR_00C5, 0); |
d1ccb6600be3
(svn r3302) - Fix: split drawing of text buttons and the closebox, so the closebox symbol can be centred.
peter1138
parents:
2703
diff
changeset
|
450 |
break; |
d1ccb6600be3
(svn r3302) - Fix: split drawing of text buttons and the closebox, so the closebox symbol can be centred.
peter1138
parents:
2703
diff
changeset
|
451 |
} |
d1ccb6600be3
(svn r3302) - Fix: split drawing of text buttons and the closebox, so the closebox symbol can be centred.
peter1138
parents:
2703
diff
changeset
|
452 |
|
0 | 453 |
case WWT_CAPTION: { |
893
f4698309dec7
(svn r1379) -Fix: various GUI glitches. Added default sizes to various widgets. Sticky/Resize- and Scrollbar must be 11 pixels wide, Horizontal scrollbar 11 pixels high, caption must be 13 pixels. I hope I didn't forget any widgets, the game will assert for that so report them to me!
darkvater
parents:
884
diff
changeset
|
454 |
assert(r.bottom - r.top == 13); // XXX - to ensure the same sizes are used everywhere! |
1938
70baf462aff1
(svn r2444) - CodeChange: Add an enum for demagicifying the values of the 'flags' parameter of DrawFrameRect(). (_Abraxa_)
hackykid
parents:
1891
diff
changeset
|
455 |
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, FR_BORDERONLY); |
70baf462aff1
(svn r2444) - CodeChange: Add an enum for demagicifying the values of the 'flags' parameter of DrawFrameRect(). (_Abraxa_)
hackykid
parents:
1891
diff
changeset
|
456 |
DrawFrameRect(r.left+1, r.top+1, r.right-1, r.bottom-1, wi->color, (w->caption_color == 0xFF) ? FR_LOWERED | FR_DARKENED : FR_LOWERED | FR_DARKENED | FR_BORDERONLY); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
457 |
|
0 | 458 |
if (w->caption_color != 0xFF) { |
4444
8d40844e6755
(svn r6222) Remove struct ColorList, because the names of its attributes are plain confusing
tron
parents:
4438
diff
changeset
|
459 |
GfxFillRect(r.left+2, r.top+2, r.right-2, r.bottom-2, _colour_gradient[_player_colors[w->caption_color]][4]); |
0 | 460 |
} |
461 |
||
5017
3df5ce293696
(svn r7058) -Codechange: Truncate text in window captions
peter1138
parents:
4940
diff
changeset
|
462 |
DrawStringCenteredTruncated(r.left + 2, r.right - 2, r.top+2, wi->data, 0x84); |
0 | 463 |
draw_default:; |
5236
4c1289d5e45a
(svn r7356) -Codechange: replace 'for (i = 0, wi = w->widget; wi->type != WWT_LAST; i++, wi++)' type for loops with 'for (i = 0; i < w->window_count; i++) { wi = &w->widget[i];'-type for loops for better readability.
rubidium
parents:
5196
diff
changeset
|
464 |
if (IsWindowWidgetDisabled(w, i)) { |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
465 |
GfxFillRect(r.left+1, r.top+1, r.right-1, r.bottom-1, _colour_gradient[wi->color&0xF][2] | (1 << PALETTE_MODIFIER_GREYOUT)); |
0 | 466 |
} |
467 |
} |
|
468 |
} |
|
5236
4c1289d5e45a
(svn r7356) -Codechange: replace 'for (i = 0, wi = w->widget; wi->type != WWT_LAST; i++, wi++)' type for loops with 'for (i = 0; i < w->window_count; i++) { wi = &w->widget[i];'-type for loops for better readability.
rubidium
parents:
5196
diff
changeset
|
469 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
470 |
|
0 | 471 |
|
472 |
if (w->flags4 & WF_WHITE_BORDER_MASK) { |
|
473 |
//DrawFrameRect(w->left, w->top, w->left + w->width-1, w->top+w->height-1, 0xF, 0x10); |
|
1938
70baf462aff1
(svn r2444) - CodeChange: Add an enum for demagicifying the values of the 'flags' parameter of DrawFrameRect(). (_Abraxa_)
hackykid
parents:
1891
diff
changeset
|
474 |
DrawFrameRect(0, 0, w->width-1, w->height-1, 0xF, FR_BORDERONLY); |
0 | 475 |
} |
476 |
||
477 |
} |
|
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
478 |
|
883
9bfde7bab1f9
(svn r1368) -Fix: Disabled dropdown menu options are gray again (instead of blue)
truelight
parents:
876
diff
changeset
|
479 |
static const Widget _dropdown_menu_widgets[] = { |
4938
0447845fd1b3
(svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents:
4749
diff
changeset
|
480 |
{ WWT_PANEL, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_NULL}, |
5041
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
481 |
{ WWT_SCROLLBAR, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
176
84990c4b9212
(svn r177) -Fix: padded out Widget code to solve warnings on C99 compiler (Tron)
darkvater
parents:
164
diff
changeset
|
482 |
{ WIDGETS_END}, |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
483 |
}; |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
484 |
|
2436
7d5df545bd5d
(svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents:
2406
diff
changeset
|
485 |
static int GetDropdownItem(const Window *w) |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
486 |
{ |
2448
1a07657c9f9a
(svn r2974) -Fix: Drag and drop selection on drop down boxes didn't select correct item when some items were hidden.
peter1138
parents:
2436
diff
changeset
|
487 |
byte item, counter; |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
488 |
int y; |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
489 |
|
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
490 |
if (GetWidgetFromPos(w, _cursor.pos.x - w->left, _cursor.pos.y - w->top) < 0) |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
491 |
return -1; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
492 |
|
5196
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
493 |
y = _cursor.pos.y - w->top - 2 + w->vscroll.pos * 10; |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
494 |
|
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
495 |
if (y < 0) |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
496 |
return - 1; |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
497 |
|
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
498 |
item = y / 10; |
2683
ca9645a21734
(svn r3225) - Fix for "[ 1359165 ] Autoreplace problem with r3171 and later" -- Move the disabled/hidden bits to custom data in window struct.
peter1138
parents:
2642
diff
changeset
|
499 |
if (item >= WP(w,dropdown_d).num_items || (HASBIT(WP(w,dropdown_d).disabled_state, item) && !HASBIT(WP(w,dropdown_d).hidden_state, item)) || WP(w,dropdown_d).items[item] == 0) |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
500 |
return - 1; |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
501 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6278
diff
changeset
|
502 |
/* Skip hidden items -- +1 for each hidden item before the clicked item. */ |
2448
1a07657c9f9a
(svn r2974) -Fix: Drag and drop selection on drop down boxes didn't select correct item when some items were hidden.
peter1138
parents:
2436
diff
changeset
|
503 |
for (counter = 0; item >= counter; ++counter) |
2683
ca9645a21734
(svn r3225) - Fix for "[ 1359165 ] Autoreplace problem with r3171 and later" -- Move the disabled/hidden bits to custom data in window struct.
peter1138
parents:
2642
diff
changeset
|
504 |
if (HASBIT(WP(w,dropdown_d).hidden_state, counter)) item++; |
2448
1a07657c9f9a
(svn r2974) -Fix: Drag and drop selection on drop down boxes didn't select correct item when some items were hidden.
peter1138
parents:
2436
diff
changeset
|
505 |
|
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
506 |
return item; |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
507 |
} |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
508 |
|
1095 | 509 |
static void DropdownMenuWndProc(Window *w, WindowEvent *e) |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
510 |
{ |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
511 |
int item; |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
512 |
|
2952 | 513 |
switch (e->event) { |
842 | 514 |
case WE_PAINT: { |
515 |
int x,y,i,sel; |
|
5196
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
516 |
int width, height; |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
517 |
|
842 | 518 |
DrawWindowWidgets(w); |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
519 |
|
842 | 520 |
x = 1; |
5196
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
521 |
y = 2 - w->vscroll.pos * 10; |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
522 |
|
5196
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
523 |
sel = WP(w,dropdown_d).selected_index; |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
524 |
width = w->widget[0].right - 3; |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
525 |
height = w->widget[0].bottom - 3; |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
526 |
|
5196
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
527 |
for (i = 0; WP(w,dropdown_d).items[i] != INVALID_STRING_ID; i++, sel--) { |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
528 |
if (HASBIT(WP(w,dropdown_d).hidden_state, i)) continue; |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
529 |
|
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
530 |
if (y >= 0 && y <= height) { |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
531 |
if (WP(w,dropdown_d).items[i] != STR_NULL) { |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
532 |
if (sel == 0) GfxFillRect(x + 1, y, x + width, y + 9, 0); |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
533 |
DrawStringTruncated(x + 2, y, WP(w,dropdown_d).items[i], sel == 0 ? 12 : 16, x + width); |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
534 |
|
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
535 |
if (HASBIT(WP(w,dropdown_d).disabled_state, i)) { |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
536 |
GfxFillRect(x, y, x + width, y + 9, |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
537 |
(1 << PALETTE_MODIFIER_GREYOUT) | _colour_gradient[_dropdown_menu_widgets[0].color][5] |
5196
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
538 |
); |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
539 |
} |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
540 |
} else { |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
541 |
int c1 = _colour_gradient[_dropdown_menu_widgets[0].color][3]; |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
542 |
int c2 = _colour_gradient[_dropdown_menu_widgets[0].color][7]; |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
543 |
|
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
544 |
GfxFillRect(x + 1, y + 3, x + w->width - 5, y + 3, c1); |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
545 |
GfxFillRect(x + 1, y + 4, x + w->width - 5, y + 4, c2); |
842 | 546 |
} |
547 |
} |
|
1177
9a250d8f0794
(svn r1679) Fix: dropdown menus now returns the index of the string that was clicked even if a previous item is hidden
bjarni
parents:
1095
diff
changeset
|
548 |
y += 10; |
842 | 549 |
} |
550 |
} break; |
|
551 |
||
552 |
case WE_CLICK: { |
|
5041
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
553 |
if (e->we.click.widget != 0) break; |
842 | 554 |
item = GetDropdownItem(w); |
555 |
if (item >= 0) { |
|
2636
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
556 |
WP(w,dropdown_d).click_delay = 4; |
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
557 |
WP(w,dropdown_d).selected_index = item; |
842 | 558 |
SetWindowDirty(w); |
559 |
} |
|
560 |
} break; |
|
561 |
||
562 |
case WE_MOUSELOOP: { |
|
2636
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
563 |
Window *w2 = FindWindowById(WP(w,dropdown_d).parent_wnd_class, WP(w,dropdown_d).parent_wnd_num); |
842 | 564 |
if (w2 == NULL) { |
565 |
DeleteWindow(w); |
|
566 |
return; |
|
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
567 |
} |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
568 |
|
2636
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
569 |
if (WP(w,dropdown_d).click_delay != 0 && --WP(w,dropdown_d).click_delay == 0) { |
842 | 570 |
WindowEvent e; |
571 |
e.event = WE_DROPDOWN_SELECT; |
|
4634
07699ac2bf37
(svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents:
4573
diff
changeset
|
572 |
e.we.dropdown.button = WP(w,dropdown_d).parent_button; |
07699ac2bf37
(svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents:
4573
diff
changeset
|
573 |
e.we.dropdown.index = WP(w,dropdown_d).selected_index; |
842 | 574 |
w2->wndproc(w2, &e); |
575 |
DeleteWindow(w); |
|
576 |
return; |
|
577 |
} |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
578 |
|
2636
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
579 |
if (WP(w,dropdown_d).drag_mode) { |
842 | 580 |
item = GetDropdownItem(w); |
581 |
||
582 |
if (!_left_button_clicked) { |
|
2636
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
583 |
WP(w,dropdown_d).drag_mode = false; |
2639 | 584 |
if (item < 0) return; |
2636
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
585 |
WP(w,dropdown_d).click_delay = 2; |
842 | 586 |
} else { |
2639 | 587 |
if (item < 0) return; |
842 | 588 |
} |
589 |
||
2636
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
590 |
WP(w,dropdown_d).selected_index = item; |
842 | 591 |
SetWindowDirty(w); |
592 |
} |
|
593 |
} break; |
|
594 |
||
595 |
case WE_DESTROY: { |
|
2636
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
596 |
Window *w2 = FindWindowById(WP(w,dropdown_d).parent_wnd_class, WP(w,dropdown_d).parent_wnd_num); |
842 | 597 |
if (w2 != NULL) { |
4719
fc6e14219f72
(svn r6631) -Codechange: Use accessors for click_state.
belugas
parents:
4634
diff
changeset
|
598 |
RaiseWindowWidget(w2, WP(w,dropdown_d).parent_button); |
2636
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
599 |
InvalidateWidget(w2, WP(w,dropdown_d).parent_button); |
842 | 600 |
} |
601 |
} break; |
|
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
602 |
} |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
603 |
} |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
604 |
|
2448
1a07657c9f9a
(svn r2974) -Fix: Drag and drop selection on drop down boxes didn't select correct item when some items were hidden.
peter1138
parents:
2436
diff
changeset
|
605 |
void ShowDropDownMenu(Window *w, const StringID *strings, int selected, int button, uint32 disabled_mask, uint32 hidden_mask) |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
606 |
{ |
867
dffd33233237
(svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
truelight
parents:
860
diff
changeset
|
607 |
int i; |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
608 |
const Widget *wi; |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
609 |
Window *w2; |
5041
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
610 |
const Window *w3; |
4719
fc6e14219f72
(svn r6631) -Codechange: Use accessors for click_state.
belugas
parents:
4634
diff
changeset
|
611 |
bool is_dropdown_menu_shown = IsWindowWidgetLowered(w, button); |
5041
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
612 |
int top, height; |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
613 |
int screen_top, screen_bottom; |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
614 |
bool scroll = false; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
615 |
|
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
616 |
DeleteWindowById(WC_DROPDOWN_MENU, 0); |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
617 |
|
4719
fc6e14219f72
(svn r6631) -Codechange: Use accessors for click_state.
belugas
parents:
4634
diff
changeset
|
618 |
if (is_dropdown_menu_shown) return; |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
619 |
|
4719
fc6e14219f72
(svn r6631) -Codechange: Use accessors for click_state.
belugas
parents:
4634
diff
changeset
|
620 |
LowerWindowWidget(w, button); |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
621 |
|
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
622 |
InvalidateWidget(w, button); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
623 |
|
2639 | 624 |
for (i = 0; strings[i] != INVALID_STRING_ID; i++) {} |
625 |
if (i == 0) return; |
|
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
626 |
|
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
627 |
wi = &w->widget[button]; |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
628 |
|
2448
1a07657c9f9a
(svn r2974) -Fix: Drag and drop selection on drop down boxes didn't select correct item when some items were hidden.
peter1138
parents:
2436
diff
changeset
|
629 |
if (hidden_mask != 0) { |
2639 | 630 |
uint j; |
631 |
||
2636
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
632 |
for (j = 0; strings[j] != INVALID_STRING_ID; j++) { |
2639 | 633 |
if (HASBIT(hidden_mask, j)) i--; |
842 | 634 |
} |
635 |
} |
|
636 |
||
5041
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
637 |
/* The preferred position is just below the dropdown calling widget */ |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
638 |
top = w->top + wi->bottom + 2; |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
639 |
height = i * 10 + 4; |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
640 |
|
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
641 |
w3 = FindWindowById(WC_STATUS_BAR, 0); |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
642 |
screen_bottom = w3 == NULL ? _screen.height : w3->top; |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
643 |
|
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
644 |
/* Check if the dropdown will fully fit below the widget */ |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
645 |
if (top + height >= screen_bottom) { |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
646 |
w3 = FindWindowById(WC_MAIN_TOOLBAR, 0); |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
647 |
screen_top = w3 == NULL ? 0 : w3->top + w3->height; |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
648 |
|
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
649 |
/* If not, check if it will fit above the widget */ |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
650 |
if (w->top + wi->top - height - 1 > screen_top) { |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
651 |
top = w->top + wi->top - height - 1; |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
652 |
} else { |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
653 |
/* ... and lastly if it won't, enable the scroll bar and fit the |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
654 |
* list in below the widget */ |
5196
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
655 |
int rows = (screen_bottom - 4 - top) / 10; |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
656 |
height = rows * 10 + 4; |
5041
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
657 |
scroll = true; |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
658 |
} |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
659 |
} |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
660 |
|
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
661 |
w2 = AllocateWindow( |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
662 |
w->left + wi[-1].left + 1, |
5041
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
663 |
top, |
867
dffd33233237
(svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
truelight
parents:
860
diff
changeset
|
664 |
wi->right - wi[-1].left + 1, |
5041
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
665 |
height, |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
666 |
DropdownMenuWndProc, |
4573
92032cec7021
(svn r6423) -Codechange: Replace two magic numbers by appropriate enum/define value
belugas
parents:
4547
diff
changeset
|
667 |
WC_DROPDOWN_MENU, |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
668 |
_dropdown_menu_widgets); |
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
669 |
|
867
dffd33233237
(svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
truelight
parents:
860
diff
changeset
|
670 |
w2->widget[0].color = wi->color; |
dffd33233237
(svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
truelight
parents:
860
diff
changeset
|
671 |
w2->widget[0].right = wi->right - wi[-1].left; |
5041
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
672 |
w2->widget[0].bottom = height - 1; |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
673 |
|
5041
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
674 |
SetWindowWidgetHiddenState(w2, 1, !scroll); |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
675 |
|
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
676 |
if (scroll) { |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
677 |
/* We're scrolling, so enable the scroll bar and shrink the list by |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
678 |
* the scrollbar's width */ |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
679 |
w2->widget[1].color = wi->color; |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
680 |
w2->widget[1].right = w2->widget[0].right; |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
681 |
w2->widget[1].left = w2->widget[1].right - 11; |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
682 |
w2->widget[1].bottom = height - 1; |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
683 |
w2->widget[0].right -= 12; |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
684 |
|
5196
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
685 |
w2->vscroll.cap = (height - 4) / 10; |
8a686679598b
(svn r7310) -Codechange: Change scrolling dropdown box to use 1 scroll unit = 1 line
peter1138
parents:
5125
diff
changeset
|
686 |
w2->vscroll.count = i; |
5041
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
687 |
} |
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
688 |
|
674e5e1b4ad4
(svn r7086) -Featurette: Add additional positioning for long dropdown lists: first, try to fit the dropdown below the calling widget, as before; second, try to fit it wholly above the calling widget; and lastly, fit the list below the widget and add a scrollbar.
peter1138
parents:
5017
diff
changeset
|
689 |
w2->desc_flags = WDF_DEF_WIDGET; |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
690 |
w2->flags4 &= ~WF_WHITE_BORDER_MASK; |
2629
78f87f273407
(svn r3171) - Codechange: remove static _dropdown_disabled/_dropdown_hidden variables, as a window already contains this information.
peter1138
parents:
2597
diff
changeset
|
691 |
|
2683
ca9645a21734
(svn r3225) - Fix for "[ 1359165 ] Autoreplace problem with r3171 and later" -- Move the disabled/hidden bits to custom data in window struct.
peter1138
parents:
2642
diff
changeset
|
692 |
WP(w2,dropdown_d).disabled_state = disabled_mask; |
ca9645a21734
(svn r3225) - Fix for "[ 1359165 ] Autoreplace problem with r3171 and later" -- Move the disabled/hidden bits to custom data in window struct.
peter1138
parents:
2642
diff
changeset
|
693 |
WP(w2,dropdown_d).hidden_state = hidden_mask; |
2636
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
694 |
|
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
695 |
WP(w2,dropdown_d).parent_wnd_class = w->window_class; |
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
696 |
WP(w2,dropdown_d).parent_wnd_num = w->window_number; |
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
697 |
WP(w2,dropdown_d).parent_button = button; |
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
698 |
|
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
699 |
WP(w2,dropdown_d).num_items = i; |
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
700 |
WP(w2,dropdown_d).selected_index = selected; |
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
701 |
WP(w2,dropdown_d).items = strings; |
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
702 |
|
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
703 |
WP(w2,dropdown_d).click_delay = 0; |
bdff7da76aa2
(svn r3178) - Codechange: move static _dropdown_* vars into the window custom data, giving var1 and var2 more meaningful names.
peter1138
parents:
2629
diff
changeset
|
704 |
WP(w2,dropdown_d).drag_mode = true; |
164
0cbdf3c9bde1
(svn r165) -Feature: Option to sort vehicles in vehicle-list window by different criteria. Total independent sort for all types and players. Periodic resort of list every 10 TTD days. Thank you for your graphical inspiration follow and buxo (since none of you provided any code).
darkvater
parents:
0
diff
changeset
|
705 |
} |
5822
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
706 |
|
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
707 |
|
5824
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
708 |
static void ResizeWidgets(Window *w, byte a, byte b) |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
709 |
{ |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
710 |
int16 offset = w->widget[a].left; |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
711 |
int16 length = w->widget[b].right - offset; |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
712 |
|
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
713 |
w->widget[a].right = (length / 2) + offset; |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
714 |
|
5822
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
715 |
w->widget[b].left = w->widget[a].right + 1; |
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
716 |
} |
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
717 |
|
5824
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
718 |
static void ResizeWidgets(Window *w, byte a, byte b, byte c) |
5822
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
719 |
{ |
5824
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
720 |
int16 offset = w->widget[a].left; |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
721 |
int16 length = w->widget[c].right - offset; |
5822
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
722 |
|
5824
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
723 |
w->widget[a].right = length / 3; |
5822
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
724 |
w->widget[b].right = w->widget[a].right * 2; |
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
725 |
|
5824
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
726 |
w->widget[a].right += offset; |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
727 |
w->widget[b].right += offset; |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
728 |
|
5822
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
729 |
/* Now the right side of the buttons are set. We will now set the left sides next to them */ |
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
730 |
w->widget[b].left = w->widget[a].right + 1; |
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
731 |
w->widget[c].left = w->widget[b].right + 1; |
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
732 |
} |
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
733 |
|
5824
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
734 |
/** Evenly distribute some widgets when resizing horizontally (often a button row) |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
735 |
* When only two arguments are given, the widgets are presumed to be on a line and only the ends are given |
6481
85ad87daf4b0
(svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents:
6432
diff
changeset
|
736 |
* @param w Window to modify |
5824
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
737 |
* @param left The leftmost widget to resize |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
738 |
* @param right The rightmost widget to resize. Since right side of it is used, remember to set it to RESIZE_RIGHT |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
739 |
*/ |
5822
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
740 |
void ResizeButtons(Window *w, byte left, byte right) |
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
741 |
{ |
5824
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
742 |
int16 num_widgets = right - left + 1; |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
743 |
|
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
744 |
if (num_widgets < 2) NOT_REACHED(); |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
745 |
|
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
746 |
switch (num_widgets) { |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
747 |
case 2: ResizeWidgets(w, left, right); break; |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
748 |
case 3: ResizeWidgets(w, left, left + 1, right); break; |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
749 |
default: { |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
750 |
/* Looks like we got more than 3 widgets to resize |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
751 |
* Now we will find the middle of the space desinated for the widgets |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
752 |
* and place half of the widgets on each side of it and call recursively. |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
753 |
* Eventually we will get down to blocks of 2-3 widgets and we got code to handle those cases */ |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
754 |
int16 offset = w->widget[left].left; |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
755 |
int16 length = w->widget[right].right - offset; |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
756 |
byte widget = ((num_widgets - 1)/ 2) + left; // rightmost widget of the left side |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
757 |
|
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
758 |
/* Now we need to find the middle of the widgets. |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
759 |
* It will not always be the middle because if we got an uneven number of widgets, |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
760 |
* we will need it to be 2/5, 3/7 and so on |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
761 |
* To get this, we multiply with num_widgets/num_widgets. Since we calculate in int, we will get: |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
762 |
* |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
763 |
* num_widgets/2 (rounding down) |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
764 |
* --------------- |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
765 |
* num_widgets |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
766 |
* |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
767 |
* as multiplier to length. We just multiply before divide to that we stay in the int area though */ |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
768 |
int16 middle = ((length * num_widgets) / (2 * num_widgets)) + offset; |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
769 |
|
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
770 |
/* Set left and right on the widgets, that's next to our "middle" */ |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
771 |
w->widget[widget].right = middle; |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
772 |
w->widget[widget + 1].left = w->widget[widget].right + 1; |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
773 |
/* Now resize the left and right of the middle */ |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
774 |
ResizeButtons(w, left, widget); |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
775 |
ResizeButtons(w, widget + 1, right); |
8398b44ad3bc
(svn r8390) -Codechange (r8384): Rewrote ResizeButtons()
bjarni
parents:
5822
diff
changeset
|
776 |
} |
5822
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
777 |
} |
f71317de4ab6
(svn r8384) -Codechange: [GUI] instead of writing a resize button function for each window, a global ResizeButtons() is added
bjarni
parents:
5668
diff
changeset
|
778 |
} |