39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
-
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
|
}
void refreshservers();
bool
rendermenu()
{
@autoreleasepool {
if (vmenu < 0) {
[menuStack removeAllObjects];
return false;
}
if (vmenu < 0) {
[menuStack removeAllObjects];
return false;
}
if (vmenu == 1)
refreshservers();
if (vmenu == 1)
refreshservers();
Menu *m = menus[vmenu];
OFString *title;
if (vmenu > 1)
Menu *m = menus[vmenu];
OFString *title;
if (vmenu > 1)
title =
[OFString stringWithFormat:@"[ %@ menu ]", m.name];
else
title = m.name;
int mdisp = m.items.count;
int w = 0;
loopi(mdisp)
{
int x = text_width(m.items[i].text);
if (x > w)
w = x;
}
int tw = text_width(title);
if (tw > w)
w = tw;
int step = FONTH / 4 * 5;
int h = (mdisp + 2) * step;
int y = (VIRTH - h) / 2;
int x = (VIRTW - w) / 2;
blendbox(x - FONTH / 2 * 3, y - FONTH, x + w + FONTH / 2 * 3,
y + h + FONTH, true);
draw_text(title, x, y, 2);
y += FONTH * 2;
if (vmenu) {
int bh = y + m.menusel * step;
blendbox(x - FONTH, bh - 10, x + w + FONTH,
bh + FONTH + 10, false);
}
loopj(mdisp)
{
draw_text(m.items[j].text, x, y, 2);
y += step;
}
return true;
title = [OFString stringWithFormat:@"[ %@ menu ]", m.name];
else
title = m.name;
int mdisp = m.items.count;
int w = 0;
loopi(mdisp)
{
int x = text_width(m.items[i].text);
if (x > w)
w = x;
}
int tw = text_width(title);
if (tw > w)
w = tw;
int step = FONTH / 4 * 5;
int h = (mdisp + 2) * step;
int y = (VIRTH - h) / 2;
int x = (VIRTW - w) / 2;
blendbox(x - FONTH / 2 * 3, y - FONTH, x + w + FONTH / 2 * 3,
y + h + FONTH, true);
draw_text(title, x, y, 2);
y += FONTH * 2;
if (vmenu) {
int bh = y + m.menusel * step;
blendbox(
x - FONTH, bh - 10, x + w + FONTH, bh + FONTH + 10, false);
}
loopj(mdisp)
{
draw_text(m.items[j].text, x, y, 2);
y += step;
}
return true;
}
}
void
newmenu(OFString *name)
{
if (menus == nil)
menus = [[OFMutableArray alloc] init];
|
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
-
+
-
-
+
-
-
|
menusel = n - 1;
else if (menusel >= n)
menusel = 0;
menus[vmenu].menusel = menusel;
} else {
if (code == SDLK_RETURN || code == -2) {
OFString *action = menus[vmenu].items[menusel].action;
if (vmenu == 1) {
if (vmenu == 1)
@autoreleasepool {
connects(getservername(menusel));
connects(getservername(menusel));
}
}
if (menuStack == nil)
menuStack = [[OFMutableArray alloc] init];
[menuStack addObject:@(vmenu)];
menuset(-1);
execute(action, true);
}
}
return true;
}
|