1
0
Fork 0

(svn r12426) -Cleanup: sprinkle some coding style over a few files.

release/0.7
rubidium 2008-03-26 10:38:31 +00:00
parent 327e870962
commit f241b0acd4
2 changed files with 1263 additions and 1245 deletions

View File

@ -92,26 +92,20 @@ static const WindowDesc _land_info_desc = {
static void Place_LandInfo(TileIndex tile) static void Place_LandInfo(TileIndex tile)
{ {
Player *p;
Window *w;
Town *t;
Money old_money;
CommandCost costclear;
AcceptedCargo ac; AcceptedCargo ac;
TileDesc td; TileDesc td;
StringID str;
DeleteWindowById(WC_LAND_INFO, 0); DeleteWindowById(WC_LAND_INFO, 0);
w = AllocateWindowDesc(&_land_info_desc); Window *w = AllocateWindowDesc(&_land_info_desc);
WP(w, void_d).data = &_landinfo_data; WP(w, void_d).data = &_landinfo_data;
p = GetPlayer(IsValidPlayer(_local_player) ? _local_player : PLAYER_FIRST); Player *p = GetPlayer(IsValidPlayer(_local_player) ? _local_player : PLAYER_FIRST);
t = ClosestTownFromTile(tile, _patches.dist_local_authority); Town *t = ClosestTownFromTile(tile, _patches.dist_local_authority);
old_money = p->player_money; Money old_money = p->player_money;
p->player_money = INT64_MAX; p->player_money = INT64_MAX;
costclear = DoCommand(tile, 0, 0, 0, CMD_LANDSCAPE_CLEAR); CommandCost costclear = DoCommand(tile, 0, 0, 0, CMD_LANDSCAPE_CLEAR);
p->player_money = old_money; p->player_money = old_money;
/* Because build_date is not set yet in every TileDesc, we make sure it is empty */ /* Because build_date is not set yet in every TileDesc, we make sure it is empty */
@ -126,7 +120,7 @@ static void Place_LandInfo(TileIndex tile)
if (td.owner != OWNER_NONE && td.owner != OWNER_WATER) GetNameOfOwner(td.owner, tile); if (td.owner != OWNER_NONE && td.owner != OWNER_WATER) GetNameOfOwner(td.owner, tile);
GetString(_landinfo_data[1], STR_01A7_OWNER, lastof(_landinfo_data[1])); GetString(_landinfo_data[1], STR_01A7_OWNER, lastof(_landinfo_data[1]));
str = STR_01A4_COST_TO_CLEAR_N_A; StringID str = STR_01A4_COST_TO_CLEAR_N_A;
if (CmdSucceeded(costclear)) { if (CmdSucceeded(costclear)) {
SetDParam(0, costclear.GetCost()); SetDParam(0, costclear.GetCost());
str = STR_01A5_COST_TO_CLEAR; str = STR_01A5_COST_TO_CLEAR;
@ -147,16 +141,15 @@ static void Place_LandInfo(TileIndex tile)
} }
GetString(_landinfo_data[4], STR_01A8_LOCAL_AUTHORITY, lastof(_landinfo_data[4])); GetString(_landinfo_data[4], STR_01A8_LOCAL_AUTHORITY, lastof(_landinfo_data[4]));
{ char *strp = GetString(_landinfo_data[5], STR_01CE_CARGO_ACCEPTED, lastof(_landinfo_data[5]));
char *p = GetString(_landinfo_data[5], STR_01CE_CARGO_ACCEPTED, lastof(_landinfo_data[5]));
bool found = false; bool found = false;
for (CargoID i = 0; i < NUM_CARGO; ++i) { for (CargoID i = 0; i < NUM_CARGO; ++i) {
if (ac[i] > 0) { if (ac[i] > 0) {
/* Add a comma between each item. */ /* Add a comma between each item. */
if (found) { if (found) {
*p++ = ','; *strp++ = ',';
*p++ = ' '; *strp++ = ' ';
} }
found = true; found = true;
@ -164,15 +157,13 @@ static void Place_LandInfo(TileIndex tile)
if (ac[i] < 8) { if (ac[i] < 8) {
SetDParam(0, ac[i]); SetDParam(0, ac[i]);
SetDParam(1, GetCargo(i)->name); SetDParam(1, GetCargo(i)->name);
p = GetString(p, STR_01D1_8, lastof(_landinfo_data[5])); strp = GetString(strp, STR_01D1_8, lastof(_landinfo_data[5]));
} else { } else {
p = GetString(p, GetCargo(i)->name, lastof(_landinfo_data[5])); strp = GetString(strp, GetCargo(i)->name, lastof(_landinfo_data[5]));
} }
} }
} }
if (!found) _landinfo_data[5][0] = '\0'; if (!found) _landinfo_data[5][0] = '\0';
}
if (td.build_date != 0) { if (td.build_date != 0) {
SetDParam(0, td.build_date); SetDParam(0, td.build_date);
@ -269,8 +260,8 @@ static void AboutWindowProc(Window *w, WindowEvent *e)
WP(w, scroller_d).counter = 5; WP(w, scroller_d).counter = 5;
WP(w, scroller_d).height = w->height - 40; WP(w, scroller_d).height = w->height - 40;
break; break;
case WE_PAINT: { case WE_PAINT: {
uint i;
int y = WP(w, scroller_d).height; int y = WP(w, scroller_d).height;
DrawWindowWidgets(w); DrawWindowWidgets(w);
@ -279,7 +270,7 @@ static void AboutWindowProc(Window *w, WindowEvent *e)
DrawStringCentered(210, 17 + 10, STR_00B7_VERSION, TC_FROMSTRING); DrawStringCentered(210, 17 + 10, STR_00B7_VERSION, TC_FROMSTRING);
/* Show all scrolling credits */ /* Show all scrolling credits */
for (i = 0; i < lengthof(credits); i++) { for (uint i = 0; i < lengthof(credits); i++) {
if (y >= 50 && y < (w->height - 40)) { if (y >= 50 && y < (w->height - 40)) {
DoDrawString(credits[i], 10, y, TC_BLACK); DoDrawString(credits[i], 10, y, TC_BLACK);
} }
@ -292,6 +283,7 @@ static void AboutWindowProc(Window *w, WindowEvent *e)
DoDrawStringCentered(210, w->height - 25, "Website: http://www.openttd.org", TC_BLACK); DoDrawStringCentered(210, w->height - 25, "Website: http://www.openttd.org", TC_BLACK);
DrawStringCentered(210, w->height - 15, STR_00BA_COPYRIGHT_OPENTTD, TC_FROMSTRING); DrawStringCentered(210, w->height - 15, STR_00BA_COPYRIGHT_OPENTTD, TC_FROMSTRING);
} break; } break;
case WE_TICK: // Timer to scroll the text and adjust the new top case WE_TICK: // Timer to scroll the text and adjust the new top
if (--WP(w, scroller_d).counter == 0) { if (--WP(w, scroller_d).counter == 0) {
WP(w, scroller_d).counter = 5; WP(w, scroller_d).counter = 5;
@ -344,7 +336,6 @@ static void BuildTreesWndProc(Window *w, WindowEvent *e)
{ {
switch (e->event) { switch (e->event) {
case WE_PAINT: { case WE_PAINT: {
int x,y;
int i, count; int i, count;
DrawWindowWidgets(w); DrawWindowWidgets(w);
@ -352,8 +343,8 @@ static void BuildTreesWndProc(Window *w, WindowEvent *e)
WP(w, tree_d).base = i = _tree_base_by_landscape[_opt.landscape]; WP(w, tree_d).base = i = _tree_base_by_landscape[_opt.landscape];
WP(w, tree_d).count = count = _tree_count_by_landscape[_opt.landscape]; WP(w, tree_d).count = count = _tree_count_by_landscape[_opt.landscape];
x = 18; int x = 18;
y = 54; int y = 54;
do { do {
DrawSprite(_tree_sprites[i].sprite, _tree_sprites[i].pal, x, y); DrawSprite(_tree_sprites[i].sprite, _tree_sprites[i].pal, x, y);
x += 35; x += 35;
@ -377,13 +368,15 @@ static void BuildTreesWndProc(Window *w, WindowEvent *e)
case 11:case 12: case 13: case 14: case 11:case 12: case 13: case 14:
if (wid - 3 >= WP(w, tree_d).count) break; if (wid - 3 >= WP(w, tree_d).count) break;
if (HandlePlacePushButton(w, wid, SPR_CURSOR_TREE, VHM_RECT, NULL)) if (HandlePlacePushButton(w, wid, SPR_CURSOR_TREE, VHM_RECT, NULL)) {
_tree_to_plant = WP(w, tree_d).base + wid - 3; _tree_to_plant = WP(w, tree_d).base + wid - 3;
}
break; break;
case 15: // tree of random type. case 15: // tree of random type.
if (HandlePlacePushButton(w, 15, SPR_CURSOR_TREE, VHM_RECT, NULL)) if (HandlePlacePushButton(w, 15, SPR_CURSOR_TREE, VHM_RECT, NULL)) {
_tree_to_plant = -1; _tree_to_plant = -1;
}
break; break;
case 16: // place trees randomly over the landscape case 16: // place trees randomly over the landscape
@ -530,12 +523,13 @@ static void ErrmsgWndProc(Window *w, WindowEvent *e)
(_errmsg_message_1 == INVALID_STRING_ID ? 25 : 15), (_errmsg_message_1 == INVALID_STRING_ID ? 25 : 15),
_errmsg_message_2, _errmsg_message_2,
w->width - 2); w->width - 2);
if (_errmsg_message_1 != INVALID_STRING_ID) if (_errmsg_message_1 != INVALID_STRING_ID) {
DrawStringMultiCenter( DrawStringMultiCenter(
120, 120,
30, 30,
_errmsg_message_1, _errmsg_message_1,
w->width - 2); w->width - 2);
}
} else { } else {
const Player *p = GetPlayer((PlayerID)GetDParamX(_errmsg_decode_params,2)); const Player *p = GetPlayer((PlayerID)GetDParamX(_errmsg_decode_params,2));
DrawPlayerFace(p->face, p->player_color, 2, 16); DrawPlayerFace(p->face, p->player_color, 2, 16);
@ -545,13 +539,14 @@ static void ErrmsgWndProc(Window *w, WindowEvent *e)
(_errmsg_message_1 == INVALID_STRING_ID ? 65 : 45), (_errmsg_message_1 == INVALID_STRING_ID ? 65 : 45),
_errmsg_message_2, _errmsg_message_2,
w->width - 2); w->width - 2);
if (_errmsg_message_1 != INVALID_STRING_ID) if (_errmsg_message_1 != INVALID_STRING_ID) {
DrawStringMultiCenter( DrawStringMultiCenter(
214, 214,
90, 90,
_errmsg_message_1, _errmsg_message_1,
w->width - 2); w->width - 2);
} }
}
/* Switch back to the normal text ref. stack for NewGRF texts */ /* Switch back to the normal text ref. stack for NewGRF texts */
SwitchToNormalRefStack(); SwitchToNormalRefStack();
@ -588,8 +583,7 @@ void ShowErrorMessage(StringID msg_1, StringID msg_2, int x, int y)
DeleteWindowById(WC_ERRMSG, 0); DeleteWindowById(WC_ERRMSG, 0);
//assert(msg_2); if (msg_2 == STR_NULL) msg_2 = STR_EMPTY;
if (msg_2 == 0) msg_2 = STR_EMPTY;
_errmsg_message_1 = msg_1; _errmsg_message_1 = msg_1;
_errmsg_message_2 = msg_2; _errmsg_message_2 = msg_2;
@ -598,7 +592,6 @@ void ShowErrorMessage(StringID msg_1, StringID msg_2, int x, int y)
if (!_errmsg_duration) return; if (!_errmsg_duration) return;
if (_errmsg_message_1 != STR_013B_OWNED_BY || GetDParamX(_errmsg_decode_params,2) >= 8) { if (_errmsg_message_1 != STR_013B_OWNED_BY || GetDParamX(_errmsg_decode_params,2) >= 8) {
if ((x | y) != 0) { if ((x | y) != 0) {
pt = RemapCoords2(x, y); pt = RemapCoords2(x, y);
vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport;
@ -699,17 +692,15 @@ static const Widget _tooltips_widgets[] = {
static void TooltipsWndProc(Window *w, WindowEvent *e) static void TooltipsWndProc(Window *w, WindowEvent *e)
{ {
switch (e->event) { switch (e->event) {
case WE_PAINT: { case WE_PAINT:
uint arg;
GfxFillRect(0, 0, w->width - 1, w->height - 1, 0); GfxFillRect(0, 0, w->width - 1, w->height - 1, 0);
GfxFillRect(1, 1, w->width - 2, w->height - 2, 0x44); GfxFillRect(1, 1, w->width - 2, w->height - 2, 0x44);
for (arg = 0; arg < WP(w, tooltips_d).paramcount; arg++) { for (uint arg = 0; arg < WP(w, tooltips_d).paramcount; arg++) {
SetDParam(arg, WP(w, tooltips_d).params[arg]); SetDParam(arg, WP(w, tooltips_d).params[arg]);
} }
DrawStringMultiCenter((w->width >> 1), (w->height >> 1) - 5, WP(w, tooltips_d).string_id, w->width - 2); DrawStringMultiCenter((w->width >> 1), (w->height >> 1) - 5, WP(w, tooltips_d).string_id, w->width - 2);
break; break;
}
case WE_MOUSELOOP: case WE_MOUSELOOP:
/* We can show tooltips while dragging tools. These are shown as long as /* We can show tooltips while dragging tools. These are shown as long as
@ -731,21 +722,16 @@ static void TooltipsWndProc(Window *w, WindowEvent *e)
* added to a tooltip; currently only supports parameters of {NUM} (integer) */ * added to a tooltip; currently only supports parameters of {NUM} (integer) */
void GuiShowTooltipsWithArgs(StringID str, uint paramcount, const uint64 params[]) void GuiShowTooltipsWithArgs(StringID str, uint paramcount, const uint64 params[])
{ {
char buffer[512];
Dimension br;
Window *w;
uint i;
int x, y;
DeleteWindowById(WC_TOOLTIPS, 0); DeleteWindowById(WC_TOOLTIPS, 0);
/* We only show measurement tooltips with patch setting on */ /* We only show measurement tooltips with patch setting on */
if (str == STR_NULL || (paramcount != 0 && !_patches.measure_tooltip)) return; if (str == STR_NULL || (paramcount != 0 && !_patches.measure_tooltip)) return;
for (i = 0; i != paramcount; i++) SetDParam(i, params[i]); for (uint i = 0; i != paramcount; i++) SetDParam(i, params[i]);
char buffer[512];
GetString(buffer, str, lastof(buffer)); GetString(buffer, str, lastof(buffer));
br = GetStringBoundingBox(buffer); Dimension br = GetStringBoundingBox(buffer);
br.width += 6; br.height += 4; // increase slightly to have some space around the box br.width += 6; br.height += 4; // increase slightly to have some space around the box
/* Cut tooltip length to 200 pixels max, wrap to new line if longer */ /* Cut tooltip length to 200 pixels max, wrap to new line if longer */
@ -757,11 +743,11 @@ void GuiShowTooltipsWithArgs(StringID str, uint paramcount, const uint64 params[
/* Correctly position the tooltip position, watch out for window and cursor size /* Correctly position the tooltip position, watch out for window and cursor size
* Clamp value to below main toolbar and above statusbar. If tooltip would * Clamp value to below main toolbar and above statusbar. If tooltip would
* go below window, flip it so it is shown above the cursor */ * go below window, flip it so it is shown above the cursor */
y = Clamp(_cursor.pos.y + _cursor.size.y + _cursor.offs.y + 5, 22, _screen.height - 12); int y = Clamp(_cursor.pos.y + _cursor.size.y + _cursor.offs.y + 5, 22, _screen.height - 12);
if (y + br.height > _screen.height - 12) y = _cursor.pos.y + _cursor.offs.y - br.height - 5; if (y + br.height > _screen.height - 12) y = _cursor.pos.y + _cursor.offs.y - br.height - 5;
x = Clamp(_cursor.pos.x - (br.width >> 1), 0, _screen.width - br.width); int x = Clamp(_cursor.pos.x - (br.width >> 1), 0, _screen.width - br.width);
w = AllocateWindow(x, y, br.width, br.height, TooltipsWndProc, WC_TOOLTIPS, _tooltips_widgets); Window *w = AllocateWindow(x, y, br.width, br.height, TooltipsWndProc, WC_TOOLTIPS, _tooltips_widgets);
WP(w, tooltips_d).string_id = str; WP(w, tooltips_d).string_id = str;
assert(sizeof(WP(w, tooltips_d).params[0]) == sizeof(params[0])); assert(sizeof(WP(w, tooltips_d).params[0]) == sizeof(params[0]));
@ -863,14 +849,12 @@ void SetHScrollCount(Window *w, int num)
static void DelChar(Textbuf *tb, bool backspace) static void DelChar(Textbuf *tb, bool backspace)
{ {
WChar c; WChar c;
uint width;
size_t len;
char *s = tb->buf + tb->caretpos; char *s = tb->buf + tb->caretpos;
if (backspace) s = Utf8PrevChar(s); if (backspace) s = Utf8PrevChar(s);
len = Utf8Decode(&c, s); size_t len = Utf8Decode(&c, s);
width = GetCharacterWidth(FS_NORMAL, c); uint width = GetCharacterWidth(FS_NORMAL, c);
tb->width -= width; tb->width -= width;
if (backspace) { if (backspace) {
@ -960,6 +944,7 @@ bool MoveTextBufferPos(Textbuf *tb, int navmode)
return true; return true;
} }
break; break;
case WKC_RIGHT: case WKC_RIGHT:
if (tb->caretpos < tb->length) { if (tb->caretpos < tb->length) {
WChar c; WChar c;
@ -970,10 +955,12 @@ bool MoveTextBufferPos(Textbuf *tb, int navmode)
return true; return true;
} }
break; break;
case WKC_HOME: case WKC_HOME:
tb->caretpos = 0; tb->caretpos = 0;
tb->caretxoffs = 0; tb->caretxoffs = 0;
return true; return true;
case WKC_END: case WKC_END:
tb->caretpos = tb->length; tb->caretpos = tb->length;
tb->caretxoffs = tb->width; tb->caretxoffs = tb->width;
@ -1030,28 +1017,29 @@ int HandleEditBoxKey(Window *w, querystr_d *string, int wid, WindowEvent *e)
switch (e->we.keypress.keycode) { switch (e->we.keypress.keycode) {
case WKC_ESC: return 2; case WKC_ESC: return 2;
case WKC_RETURN: case WKC_NUM_ENTER: return 1; case WKC_RETURN: case WKC_NUM_ENTER: return 1;
case (WKC_CTRL | 'V'): case (WKC_CTRL | 'V'):
if (InsertTextBufferClipboard(&string->text)) if (InsertTextBufferClipboard(&string->text)) w->InvalidateWidget(wid);
w->InvalidateWidget(wid);
break; break;
case (WKC_CTRL | 'U'): case (WKC_CTRL | 'U'):
DeleteTextBufferAll(&string->text); DeleteTextBufferAll(&string->text);
w->InvalidateWidget(wid); w->InvalidateWidget(wid);
break; break;
case WKC_BACKSPACE: case WKC_DELETE: case WKC_BACKSPACE: case WKC_DELETE:
if (DeleteTextBufferChar(&string->text, e->we.keypress.keycode)) if (DeleteTextBufferChar(&string->text, e->we.keypress.keycode)) w->InvalidateWidget(wid);
w->InvalidateWidget(wid);
break; break;
case WKC_LEFT: case WKC_RIGHT: case WKC_END: case WKC_HOME: case WKC_LEFT: case WKC_RIGHT: case WKC_END: case WKC_HOME:
if (MoveTextBufferPos(&string->text, e->we.keypress.keycode)) if (MoveTextBufferPos(&string->text, e->we.keypress.keycode)) w->InvalidateWidget(wid);
w->InvalidateWidget(wid);
break; break;
default: default:
if (IsValidChar(e->we.keypress.key, string->afilter)) { if (IsValidChar(e->we.keypress.key, string->afilter)) {
if (InsertTextBufferChar(&string->text, e->we.keypress.key)) { if (InsertTextBufferChar(&string->text, e->we.keypress.key)) w->InvalidateWidget(wid);
w->InvalidateWidget(wid);
}
} else { // key wasn't caught. Continue only if standard entry specified } else { // key wasn't caught. Continue only if standard entry specified
e->we.keypress.cont = (string->afilter == CS_ALPHANUMERAL); e->we.keypress.cont = (string->afilter == CS_ALPHANUMERAL);
} }
@ -1093,8 +1081,9 @@ void DrawEditBox(Window *w, querystr_d *string, int wid)
wi->left + 4, wi->left + 4,
wi->top + 1, wi->top + 1,
wi->right - wi->left - 4, wi->right - wi->left - 4,
wi->bottom - wi->top - 1) wi->bottom - wi->top - 1)) {
) return; return;
}
old_dpi = _cur_dpi; old_dpi = _cur_dpi;
_cur_dpi = &dpi; _cur_dpi = &dpi;
@ -1222,7 +1211,6 @@ char _orig_str_buf[lengthof(_edit_str_buf)];
* @param afilter filters out unwanted character input */ * @param afilter filters out unwanted character input */
void ShowQueryString(StringID str, StringID caption, uint maxlen, uint maxwidth, Window *parent, CharSetFilter afilter) void ShowQueryString(StringID str, StringID caption, uint maxlen, uint maxwidth, Window *parent, CharSetFilter afilter)
{ {
Window *w;
uint realmaxlen = maxlen & ~0x1000; uint realmaxlen = maxlen & ~0x1000;
assert(realmaxlen < lengthof(_edit_str_buf)); assert(realmaxlen < lengthof(_edit_str_buf));
@ -1230,7 +1218,7 @@ void ShowQueryString(StringID str, StringID caption, uint maxlen, uint maxwidth,
DeleteWindowById(WC_QUERY_STRING, 0); DeleteWindowById(WC_QUERY_STRING, 0);
DeleteWindowById(WC_SAVELOAD, 0); DeleteWindowById(WC_SAVELOAD, 0);
w = AllocateWindowDesc(&_query_string_desc); Window *w = AllocateWindowDesc(&_query_string_desc);
w->parent = parent; w->parent = parent;
GetString(_edit_str_buf, str, lastof(_edit_str_buf)); GetString(_edit_str_buf, str, lastof(_edit_str_buf));
@ -1601,22 +1589,25 @@ static void SaveLoadDlgWndProc(Window *w, WindowEvent *e)
break; break;
} }
break; break;
case WE_MOUSELOOP: case WE_MOUSELOOP:
if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) { if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) {
HandleEditBox(w, &WP(w, querystr_d), 10); HandleEditBox(w, &WP(w, querystr_d), 10);
} }
break; break;
case WE_KEYPRESS: case WE_KEYPRESS:
if (e->we.keypress.keycode == WKC_ESC) { if (e->we.keypress.keycode == WKC_ESC) {
DeleteWindow(w); DeleteWindow(w);
return; return;
} }
if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) { if ((_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) &&
if (HandleEditBoxKey(w, &WP(w, querystr_d), 10, e) == 1) // Press Enter HandleEditBoxKey(w, &WP(w, querystr_d), 10, e) == 1) { // Press Enter
w->HandleButtonClick(12); w->HandleButtonClick(12);
} }
break; break;
case WE_TIMEOUT: case WE_TIMEOUT:
/* This test protects against using widgets 11 and 12 which are only available /* This test protects against using widgets 11 and 12 which are only available
* in those two saveload mode */ * in those two saveload mode */
@ -1641,6 +1632,7 @@ static void SaveLoadDlgWndProc(Window *w, WindowEvent *e)
if (_game_mode == GM_EDITOR) StartupEngines(); if (_game_mode == GM_EDITOR) StartupEngines();
} }
break; break;
case WE_DESTROY: case WE_DESTROY:
/* pause is only used in single-player, non-editor mode, non menu mode */ /* pause is only used in single-player, non-editor mode, non menu mode */
if (!_networking && _game_mode != GM_EDITOR && _game_mode != GM_MENU) { if (!_networking && _game_mode != GM_EDITOR && _game_mode != GM_MENU) {
@ -1649,6 +1641,7 @@ static void SaveLoadDlgWndProc(Window *w, WindowEvent *e)
FiosFreeSavegameList(); FiosFreeSavegameList();
ClrBit(_no_scroll, SCROLL_SAVE); ClrBit(_no_scroll, SCROLL_SAVE);
break; break;
case WE_RESIZE: { case WE_RESIZE: {
/* Widget 2 and 3 have to go with halve speed, make it so obiwan */ /* Widget 2 and 3 have to go with halve speed, make it so obiwan */
uint diff = e->we.sizing.diff.x / 2; uint diff = e->we.sizing.diff.x / 2;

View File

@ -306,7 +306,6 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e)
case NGWW_INFO - NGWW_NAME: DrawSortButtonState(w, NGWW_INFO, arrow); break; case NGWW_INFO - NGWW_NAME: DrawSortButtonState(w, NGWW_INFO, arrow); break;
} }
{ // draw list of games
uint16 y = NET_PRC__OFFSET_TOP_WIDGET + 3; uint16 y = NET_PRC__OFFSET_TOP_WIDGET + 3;
int32 n = 0; int32 n = 0;
int32 pos = w->vscroll.pos; int32 pos = w->vscroll.pos;
@ -347,7 +346,6 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e)
y += NET_PRC__SIZE_OF_ROW; y += NET_PRC__SIZE_OF_ROW;
if (++n == w->vscroll.cap) break; // max number of games in the window if (++n == w->vscroll.cap) break; // max number of games in the window
} }
}
/* Draw the right menu */ /* Draw the right menu */
GfxFillRect(w->widget[NGWW_DETAILS].left + 1, 43, w->widget[NGWW_DETAILS].right - 1, 92, 157); GfxFillRect(w->widget[NGWW_DETAILS].left + 1, 43, w->widget[NGWW_DETAILS].right - 1, 92, 157);
@ -429,12 +427,15 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e)
case NGWW_PLAYER: case NGWW_PLAYER:
ShowOnScreenKeyboard(w, &WP(w, network_ql_d).q, NGWW_PLAYER, 0, 0); ShowOnScreenKeyboard(w, &WP(w, network_ql_d).q, NGWW_PLAYER, 0, 0);
break; break;
case NGWW_CANCEL: // Cancel button case NGWW_CANCEL: // Cancel button
DeleteWindowById(WC_NETWORK_WINDOW, 0); DeleteWindowById(WC_NETWORK_WINDOW, 0);
break; break;
case NGWW_CONN_BTN: // 'Connection' droplist case NGWW_CONN_BTN: // 'Connection' droplist
ShowDropDownMenu(w, _lan_internet_types_dropdown, _network_lan_internet, NGWW_CONN_BTN, 0, 0); // do it for widget NSSW_CONN_BTN ShowDropDownMenu(w, _lan_internet_types_dropdown, _network_lan_internet, NGWW_CONN_BTN, 0, 0); // do it for widget NSSW_CONN_BTN
break; break;
case NGWW_NAME: // Sort by name case NGWW_NAME: // Sort by name
case NGWW_CLIENTS: // Sort by connected clients case NGWW_CLIENTS: // Sort by connected clients
case NGWW_INFO: // Connectivity (green dot) case NGWW_INFO: // Connectivity (green dot)
@ -446,6 +447,7 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e)
_ng_sorting.criteria = ld->sort_type; _ng_sorting.criteria = ld->sort_type;
SetWindowDirty(w); SetWindowDirty(w);
break; break;
case NGWW_MATRIX: { // Matrix to show networkgames case NGWW_MATRIX: { // Matrix to show networkgames
NetworkGameList *cur_item; NetworkGameList *cur_item;
uint32 id_v = (e->we.click.pt.y - NET_PRC__OFFSET_TOP_WIDGET) / NET_PRC__SIZE_OF_ROW; uint32 id_v = (e->we.click.pt.y - NET_PRC__OFFSET_TOP_WIDGET) / NET_PRC__SIZE_OF_ROW;
@ -459,23 +461,27 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e)
nd->server = cur_item; nd->server = cur_item;
SetWindowDirty(w); SetWindowDirty(w);
} break; } break;
case NGWW_FIND: // Find server automatically case NGWW_FIND: // Find server automatically
switch (_network_lan_internet) { switch (_network_lan_internet) {
case 0: NetworkUDPSearchGame(); break; case 0: NetworkUDPSearchGame(); break;
case 1: NetworkUDPQueryMasterServer(); break; case 1: NetworkUDPQueryMasterServer(); break;
} }
break; break;
case NGWW_ADD: { // Add a server
case NGWW_ADD: // Add a server
ShowQueryString( ShowQueryString(
BindCString(_network_default_ip), BindCString(_network_default_ip),
STR_NETWORK_ENTER_IP, STR_NETWORK_ENTER_IP,
31 | 0x1000, // maximum number of characters OR 31 | 0x1000, // maximum number of characters OR
250, // characters up to this width pixels, whichever is satisfied first 250, // characters up to this width pixels, whichever is satisfied first
w, CS_ALPHANUMERAL); w, CS_ALPHANUMERAL);
} break; break;
case NGWW_START: // Start server case NGWW_START: // Start server
ShowNetworkStartServerWindow(); ShowNetworkStartServerWindow();
break; break;
case NGWW_JOIN: // Join Game case NGWW_JOIN: // Join Game
if (nd->server != NULL) { if (nd->server != NULL) {
snprintf(_network_last_host, sizeof(_network_last_host), "%s", inet_ntoa(*(struct in_addr *)&nd->server->ip)); snprintf(_network_last_host, sizeof(_network_last_host), "%s", inet_ntoa(*(struct in_addr *)&nd->server->ip));
@ -483,21 +489,23 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e)
ShowNetworkLobbyWindow(nd->server); ShowNetworkLobbyWindow(nd->server);
} }
break; break;
case NGWW_REFRESH: // Refresh case NGWW_REFRESH: // Refresh
if (nd->server != NULL) if (nd->server != NULL) NetworkUDPQueryServer(nd->server->info.hostname, nd->server->port);
NetworkUDPQueryServer(nd->server->info.hostname, nd->server->port);
break; break;
case NGWW_NEWGRF: // NewGRF Settings case NGWW_NEWGRF: // NewGRF Settings
if (nd->server != NULL) ShowNewGRFSettings(false, false, false, &nd->server->info.grfconfig); if (nd->server != NULL) ShowNewGRFSettings(false, false, false, &nd->server->info.grfconfig);
break; break;
}
} break; break;
case WE_DROPDOWN_SELECT: // we have selected a dropdown item in the list case WE_DROPDOWN_SELECT: // we have selected a dropdown item in the list
switch (e->we.dropdown.button) { switch (e->we.dropdown.button) {
case NGWW_CONN_BTN: case NGWW_CONN_BTN:
_network_lan_internet = e->we.dropdown.index; _network_lan_internet = e->we.dropdown.index;
break; break;
default: default:
NOT_REACHED(); NOT_REACHED();
} }
@ -617,7 +625,6 @@ static const WindowDesc _network_game_window_desc = {
void ShowNetworkGameWindow() void ShowNetworkGameWindow()
{ {
static bool first = true; static bool first = true;
Window *w;
DeleteWindowById(WC_NETWORK_WINDOW, 0); DeleteWindowById(WC_NETWORK_WINDOW, 0);
/* Only show once */ /* Only show once */
@ -634,7 +641,7 @@ void ShowNetworkGameWindow()
_ng_sorting.order = 0; // sort ascending by default _ng_sorting.order = 0; // sort ascending by default
} }
w = AllocateWindowDesc(&_network_game_window_desc); Window *w = AllocateWindowDesc(&_network_game_window_desc);
if (w != NULL) { if (w != NULL) {
querystr_d *querystr = &WP(w, network_ql_d).q; querystr_d *querystr = &WP(w, network_ql_d).q;
@ -739,9 +746,11 @@ static void NetworkStartServerWindowWndProc(Window *w, WindowEvent *e)
case NSSW_CANCEL: // Cancel button case NSSW_CANCEL: // Cancel button
ShowNetworkGameWindow(); ShowNetworkGameWindow();
break; break;
case NSSW_GAMENAME: case NSSW_GAMENAME:
ShowOnScreenKeyboard(w, &WP(w, network_ql_d).q, NSSW_GAMENAME, 0, 0); ShowOnScreenKeyboard(w, &WP(w, network_ql_d).q, NSSW_GAMENAME, 0, 0);
break; break;
case NSSW_SETPWD: // Set password button case NSSW_SETPWD: // Set password button
nd->widget_id = NSSW_SETPWD; nd->widget_id = NSSW_SETPWD;
ShowQueryString(BindCString(_network_server_password), STR_NETWORK_SET_PASSWORD, 20, 250, w, CS_ALPHANUMERAL); ShowQueryString(BindCString(_network_server_password), STR_NETWORK_SET_PASSWORD, 20, 250, w, CS_ALPHANUMERAL);
@ -756,9 +765,11 @@ static void NetworkStartServerWindowWndProc(Window *w, WindowEvent *e)
nd->map = (y == 0) ? NULL : _fios_list + y - 1; nd->map = (y == 0) ? NULL : _fios_list + y - 1;
SetWindowDirty(w); SetWindowDirty(w);
} break; } break;
case NSSW_CONNTYPE_BTN: // Connection type case NSSW_CONNTYPE_BTN: // Connection type
ShowDropDownMenu(w, _connection_types_dropdown, _network_advertise, NSSW_CONNTYPE_BTN, 0, 0); // do it for widget NSSW_CONNTYPE_BTN ShowDropDownMenu(w, _connection_types_dropdown, _network_advertise, NSSW_CONNTYPE_BTN, 0, 0); // do it for widget NSSW_CONNTYPE_BTN
break; break;
case NSSW_CLIENTS_BTND: case NSSW_CLIENTS_BTNU: // Click on up/down button for number of clients case NSSW_CLIENTS_BTND: case NSSW_CLIENTS_BTNU: // Click on up/down button for number of clients
case NSSW_COMPANIES_BTND: case NSSW_COMPANIES_BTNU: // Click on up/down button for number of companies case NSSW_COMPANIES_BTND: case NSSW_COMPANIES_BTNU: // Click on up/down button for number of companies
case NSSW_SPECTATORS_BTND: case NSSW_SPECTATORS_BTNU: // Click on up/down button for number of spectators case NSSW_SPECTATORS_BTND: case NSSW_SPECTATORS_BTNU: // Click on up/down button for number of spectators
@ -781,21 +792,25 @@ static void NetworkStartServerWindowWndProc(Window *w, WindowEvent *e)
} }
_left_button_clicked = false; _left_button_clicked = false;
break; break;
case NSSW_CLIENTS_TXT: // Click on number of players case NSSW_CLIENTS_TXT: // Click on number of players
nd->widget_id = NSSW_CLIENTS_TXT; nd->widget_id = NSSW_CLIENTS_TXT;
SetDParam(0, _network_game_info.clients_max); SetDParam(0, _network_game_info.clients_max);
ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_CLIENTS, 3, 50, w, CS_NUMERAL); ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_CLIENTS, 3, 50, w, CS_NUMERAL);
break; break;
case NSSW_COMPANIES_TXT: // Click on number of companies case NSSW_COMPANIES_TXT: // Click on number of companies
nd->widget_id = NSSW_COMPANIES_TXT; nd->widget_id = NSSW_COMPANIES_TXT;
SetDParam(0, _network_game_info.companies_max); SetDParam(0, _network_game_info.companies_max);
ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_COMPANIES, 3, 50, w, CS_NUMERAL); ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_COMPANIES, 3, 50, w, CS_NUMERAL);
break; break;
case NSSW_SPECTATORS_TXT: // Click on number of spectators case NSSW_SPECTATORS_TXT: // Click on number of spectators
nd->widget_id = NSSW_SPECTATORS_TXT; nd->widget_id = NSSW_SPECTATORS_TXT;
SetDParam(0, _network_game_info.spectators_max); SetDParam(0, _network_game_info.spectators_max);
ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_SPECTATORS, 3, 50, w, CS_NUMERAL); ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_SPECTATORS, 3, 50, w, CS_NUMERAL);
break; break;
case NSSW_LANGUAGE_BTN: { // Language case NSSW_LANGUAGE_BTN: { // Language
uint sel = 0; uint sel = 0;
for (uint i = 0; i < lengthof(_language_dropdown) - 1; i++) { for (uint i = 0; i < lengthof(_language_dropdown) - 1; i++) {
@ -805,8 +820,8 @@ static void NetworkStartServerWindowWndProc(Window *w, WindowEvent *e)
} }
} }
ShowDropDownMenu(w, _language_dropdown, sel, NSSW_LANGUAGE_BTN, 0, 0); ShowDropDownMenu(w, _language_dropdown, sel, NSSW_LANGUAGE_BTN, 0, 0);
break; } break;
}
case NSSW_START: // Start game case NSSW_START: // Start game
_is_network_server = true; _is_network_server = true;
@ -825,6 +840,7 @@ static void NetworkStartServerWindowWndProc(Window *w, WindowEvent *e)
} }
} }
break; break;
case NSSW_LOAD: // Load game case NSSW_LOAD: // Load game
_is_network_server = true; _is_network_server = true;
/* XXX - WC_NETWORK_WINDOW (this window) should stay, but if it stays, it gets /* XXX - WC_NETWORK_WINDOW (this window) should stay, but if it stays, it gets
@ -940,10 +956,9 @@ static const WindowDesc _network_start_server_window_desc = {
static void ShowNetworkStartServerWindow() static void ShowNetworkStartServerWindow()
{ {
Window *w;
DeleteWindowById(WC_NETWORK_WINDOW, 0); DeleteWindowById(WC_NETWORK_WINDOW, 0);
w = AllocateWindowDesc(&_network_start_server_window_desc); Window *w = AllocateWindowDesc(&_network_start_server_window_desc);
ttd_strlcpy(_edit_str_net_buf, _network_server_name, lengthof(_edit_str_net_buf)); ttd_strlcpy(_edit_str_net_buf, _network_server_name, lengthof(_edit_str_net_buf));
_saveload_mode = SLD_NEW_GAME; _saveload_mode = SLD_NEW_GAME;
@ -957,11 +972,8 @@ static void ShowNetworkStartServerWindow()
static PlayerID NetworkLobbyFindCompanyIndex(byte pos) static PlayerID NetworkLobbyFindCompanyIndex(byte pos)
{ {
PlayerID i; /* Scroll through all _network_player_info and get the 'pos' item that is not empty */
for (PlayerID i = PLAYER_FIRST; i < MAX_PLAYERS; i++) {
/* Scroll through all _network_player_info and get the 'pos' item
that is not empty */
for (i = PLAYER_FIRST; i < MAX_PLAYERS; i++) {
if (_network_player_info[i].company_name[0] != '\0') { if (_network_player_info[i].company_name[0] != '\0') {
if (pos-- == 0) return i; if (pos-- == 0) return i;
} }
@ -1101,6 +1113,7 @@ static void NetworkLobbyWindowWndProc(Window *w, WindowEvent *e)
case NLWW_CANCEL: // Cancel button case NLWW_CANCEL: // Cancel button
ShowNetworkGameWindow(); ShowNetworkGameWindow();
break; break;
case NLWW_MATRIX: { // Company list case NLWW_MATRIX: { // Company list
uint32 id_v = (e->we.click.pt.y - NET_PRC__OFFSET_TOP_WIDGET_COMPANY) / NET_PRC__SIZE_OF_ROW; uint32 id_v = (e->we.click.pt.y - NET_PRC__OFFSET_TOP_WIDGET_COMPANY) / NET_PRC__SIZE_OF_ROW;
@ -1110,24 +1123,29 @@ static void NetworkLobbyWindowWndProc(Window *w, WindowEvent *e)
nd->company = (id_v >= nd->server->info.companies_on) ? INVALID_PLAYER : NetworkLobbyFindCompanyIndex(id_v); nd->company = (id_v >= nd->server->info.companies_on) ? INVALID_PLAYER : NetworkLobbyFindCompanyIndex(id_v);
SetWindowDirty(w); SetWindowDirty(w);
} break; } break;
case NLWW_JOIN: // Join company case NLWW_JOIN: // Join company
/* Button can be clicked only when it is enabled */ /* Button can be clicked only when it is enabled */
_network_playas = nd->company; _network_playas = nd->company;
NetworkClientConnectGame(_network_last_host, _network_last_port); NetworkClientConnectGame(_network_last_host, _network_last_port);
break; break;
case NLWW_NEW: // New company case NLWW_NEW: // New company
_network_playas = PLAYER_NEW_COMPANY; _network_playas = PLAYER_NEW_COMPANY;
NetworkClientConnectGame(_network_last_host, _network_last_port); NetworkClientConnectGame(_network_last_host, _network_last_port);
break; break;
case NLWW_SPECTATE: // Spectate game case NLWW_SPECTATE: // Spectate game
_network_playas = PLAYER_SPECTATOR; _network_playas = PLAYER_SPECTATOR;
NetworkClientConnectGame(_network_last_host, _network_last_port); NetworkClientConnectGame(_network_last_host, _network_last_port);
break; break;
case NLWW_REFRESH: // Refresh case NLWW_REFRESH: // Refresh
NetworkTCPQueryServer(_network_last_host, _network_last_port); // company info NetworkTCPQueryServer(_network_last_host, _network_last_port); // company info
NetworkUDPQueryServer(_network_last_host, _network_last_port); // general data NetworkUDPQueryServer(_network_last_host, _network_last_port); // general data
break; break;
} break; }
break;
case WE_MESSAGE: case WE_MESSAGE:
SetWindowDirty(w); SetWindowDirty(w);
@ -1171,13 +1189,12 @@ static const WindowDesc _network_lobby_window_desc = {
* @param ngl Selected game pointer which is passed to the new window */ * @param ngl Selected game pointer which is passed to the new window */
static void ShowNetworkLobbyWindow(NetworkGameList *ngl) static void ShowNetworkLobbyWindow(NetworkGameList *ngl)
{ {
Window *w;
DeleteWindowById(WC_NETWORK_WINDOW, 0); DeleteWindowById(WC_NETWORK_WINDOW, 0);
NetworkTCPQueryServer(_network_last_host, _network_last_port); // company info NetworkTCPQueryServer(_network_last_host, _network_last_port); // company info
NetworkUDPQueryServer(_network_last_host, _network_last_port); // general data NetworkUDPQueryServer(_network_last_host, _network_last_port); // general data
w = AllocateWindowDesc(&_network_lobby_window_desc); Window *w = AllocateWindowDesc(&_network_lobby_window_desc);
if (w != NULL) { if (w != NULL) {
WP(w, network_ql_d).n.server = ngl; WP(w, network_ql_d).n.server = ngl;
strcpy(_edit_str_net_buf, ""); strcpy(_edit_str_net_buf, "");
@ -1254,37 +1271,40 @@ static void ClientList_Kick(byte client_no)
static void ClientList_Ban(byte client_no) static void ClientList_Ban(byte client_no)
{ {
uint i;
uint32 ip = NetworkFindClientInfo(client_no)->client_ip; uint32 ip = NetworkFindClientInfo(client_no)->client_ip;
for (i = 0; i < lengthof(_network_ban_list); i++) { for (uint i = 0; i < lengthof(_network_ban_list); i++) {
if (_network_ban_list[i] == NULL) { if (_network_ban_list[i] == NULL) {
_network_ban_list[i] = strdup(inet_ntoa(*(struct in_addr *)&ip)); _network_ban_list[i] = strdup(inet_ntoa(*(struct in_addr *)&ip));
break; break;
} }
} }
if (client_no < MAX_PLAYERS) if (client_no < MAX_PLAYERS) {
SEND_COMMAND(PACKET_SERVER_ERROR)(DEREF_CLIENT(client_no), NETWORK_ERROR_KICKED); SEND_COMMAND(PACKET_SERVER_ERROR)(DEREF_CLIENT(client_no), NETWORK_ERROR_KICKED);
} }
}
static void ClientList_GiveMoney(byte client_no) static void ClientList_GiveMoney(byte client_no)
{ {
if (NetworkFindClientInfo(client_no) != NULL) if (NetworkFindClientInfo(client_no) != NULL) {
ShowNetworkGiveMoneyWindow(NetworkFindClientInfo(client_no)->client_playas); ShowNetworkGiveMoneyWindow(NetworkFindClientInfo(client_no)->client_playas);
} }
}
static void ClientList_SpeakToClient(byte client_no) static void ClientList_SpeakToClient(byte client_no)
{ {
if (NetworkFindClientInfo(client_no) != NULL) if (NetworkFindClientInfo(client_no) != NULL) {
ShowNetworkChatQueryWindow(DESTTYPE_CLIENT, NetworkFindClientInfo(client_no)->client_index); ShowNetworkChatQueryWindow(DESTTYPE_CLIENT, NetworkFindClientInfo(client_no)->client_index);
} }
}
static void ClientList_SpeakToCompany(byte client_no) static void ClientList_SpeakToCompany(byte client_no)
{ {
if (NetworkFindClientInfo(client_no) != NULL) if (NetworkFindClientInfo(client_no) != NULL) {
ShowNetworkChatQueryWindow(DESTTYPE_TEAM, NetworkFindClientInfo(client_no)->client_playas); ShowNetworkChatQueryWindow(DESTTYPE_TEAM, NetworkFindClientInfo(client_no)->client_playas);
} }
}
static void ClientList_SpeakToAll(byte client_no) static void ClientList_SpeakToAll(byte client_no)
{ {
@ -1293,34 +1313,38 @@ static void ClientList_SpeakToAll(byte client_no)
static void ClientList_None(byte client_no) static void ClientList_None(byte client_no)
{ {
// No action ;) /* No action ;) */
} }
// Help, a action is clicked! What do we do? /**
* An action is clicked! What do we do?
*/
static void HandleClientListPopupClick(byte index, byte clientno) static void HandleClientListPopupClick(byte index, byte clientno)
{ {
// A click on the Popup of the ClientList.. handle the command /* A click on the Popup of the ClientList.. handle the command */
if (index < MAX_CLIENTLIST_ACTION && _clientlist_proc[index] != NULL) { if (index < MAX_CLIENTLIST_ACTION && _clientlist_proc[index] != NULL) {
_clientlist_proc[index](clientno); _clientlist_proc[index](clientno);
} }
} }
// Finds the amount of clients and set the height correct /**
* Finds the amount of clients and set the height correct
*/
static bool CheckClientListHeight(Window *w) static bool CheckClientListHeight(Window *w)
{ {
int num = 0; int num = 0;
const NetworkClientInfo *ci; const NetworkClientInfo *ci;
// Should be replaced with a loop through all clients /* Should be replaced with a loop through all clients */
FOR_ALL_ACTIVE_CLIENT_INFOS(ci) { FOR_ALL_ACTIVE_CLIENT_INFOS(ci) {
num++; num++;
} }
num *= CLNWND_ROWSIZE; num *= CLNWND_ROWSIZE;
// If height is changed /* If height is changed */
if (w->height != CLNWND_OFFSET + num + 1) { if (w->height != CLNWND_OFFSET + num + 1) {
// XXX - magic unfortunately; (num + 2) has to be one bigger than heigh (num + 1) // XXX - magic unfortunately; (num + 2) has to be one bigger than heigh (num + 1)
SetWindowDirty(w); SetWindowDirty(w);
@ -1332,13 +1356,15 @@ static bool CheckClientListHeight(Window *w)
return true; return true;
} }
// Finds the amount of actions in the popup and set the height correct /**
* Finds the amount of actions in the popup and set the height correct
*/
static uint ClientListPopupHeight() static uint ClientListPopupHeight()
{ {
int i, num = 0; int num = 0;
// Find the amount of actions // Find the amount of actions
for (i = 0; i < MAX_CLIENTLIST_ACTION; i++) { for (int i = 0; i < MAX_CLIENTLIST_ACTION; i++) {
if (_clientlist_action[i][0] == '\0') continue; if (_clientlist_action[i][0] == '\0') continue;
if (_clientlist_proc[i] == NULL) continue; if (_clientlist_proc[i] == NULL) continue;
num++; num++;
@ -1349,21 +1375,25 @@ static uint ClientListPopupHeight()
return num + 1; return num + 1;
} }
// Show the popup (action list) /**
* Show the popup (action list)
*/
static Window *PopupClientList(Window *w, int client_no, int x, int y) static Window *PopupClientList(Window *w, int client_no, int x, int y)
{ {
int i, h; int i;
const NetworkClientInfo *ci; const NetworkClientInfo *ci;
DeleteWindowById(WC_TOOLBAR_MENU, 0); DeleteWindowById(WC_TOOLBAR_MENU, 0);
// Clean the current actions /* Clean the current actions */
for (i = 0; i < MAX_CLIENTLIST_ACTION; i++) { for (i = 0; i < MAX_CLIENTLIST_ACTION; i++) {
_clientlist_action[i][0] = '\0'; _clientlist_action[i][0] = '\0';
_clientlist_proc[i] = NULL; _clientlist_proc[i] = NULL;
} }
// Fill the actions this client has /*
// Watch is, max 50 chars long! * Fill the actions this client has.
* Watch is, max 50 chars long!
*/
ci = NetworkFindClientInfo(client_no); ci = NetworkFindClientInfo(client_no);
if (ci == NULL) return NULL; if (ci == NULL) return NULL;
@ -1389,7 +1419,7 @@ static Window *PopupClientList(Window *w, int client_no, int x, int y)
} }
} }
// A server can kick clients (but not himself) /* A server can kick clients (but not himself) */
if (_network_server && _network_own_client_index != ci->client_index) { if (_network_server && _network_own_client_index != ci->client_index) {
GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_KICK, lastof(_clientlist_action[i])); GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_KICK, lastof(_clientlist_action[i]));
_clientlist_proc[i++] = &ClientList_Kick; _clientlist_proc[i++] = &ClientList_Kick;
@ -1404,9 +1434,9 @@ static Window *PopupClientList(Window *w, int client_no, int x, int y)
} }
/* Calculate the height */ /* Calculate the height */
h = ClientListPopupHeight(); int h = ClientListPopupHeight();
// Allocate the popup /* Allocate the popup */
w = AllocateWindow(x, y, 150, h + 1, ClientListPopupWndProc, WC_TOOLBAR_MENU, _client_list_popup_widgets); w = AllocateWindow(x, y, 150, h + 1, ClientListPopupWndProc, WC_TOOLBAR_MENU, _client_list_popup_widgets);
w->widget[0].bottom = w->widget[0].top + h; w->widget[0].bottom = w->widget[0].top + h;
w->widget[0].right = w->widget[0].left + 150; w->widget[0].right = w->widget[0].left + 150;
@ -1428,17 +1458,16 @@ static void ClientListPopupWndProc(Window *w, WindowEvent *e)
{ {
switch (e->event) { switch (e->event) {
case WE_PAINT: { case WE_PAINT: {
int i, y, sel;
TextColour colour;
DrawWindowWidgets(w); DrawWindowWidgets(w);
// Draw the actions /* Draw the actions */
sel = WP(w, menu_d).sel_index; int sel = WP(w, menu_d).sel_index;
y = 1; int y = 1;
for (i = 0; i < MAX_CLIENTLIST_ACTION; i++, y += CLNWND_ROWSIZE) { for (int i = 0; i < MAX_CLIENTLIST_ACTION; i++, y += CLNWND_ROWSIZE) {
if (_clientlist_action[i][0] == '\0') continue; if (_clientlist_action[i][0] == '\0') continue;
if (_clientlist_proc[i] == NULL) continue; if (_clientlist_proc[i] == NULL) continue;
TextColour colour;
if (sel-- == 0) { // Selected item, highlight it if (sel-- == 0) { // Selected item, highlight it
GfxFillRect(1, y, 150 - 2, y + CLNWND_ROWSIZE - 1, 0); GfxFillRect(1, y, 150 - 2, y + CLNWND_ROWSIZE - 1, 0);
colour = TC_WHITE; colour = TC_WHITE;
@ -1451,17 +1480,18 @@ static void ClientListPopupWndProc(Window *w, WindowEvent *e)
} break; } break;
case WE_POPUPMENU_SELECT: { case WE_POPUPMENU_SELECT: {
// We selected an action /* We selected an action */
int index = (e->we.popupmenu.pt.y - w->top) / CLNWND_ROWSIZE; int index = (e->we.popupmenu.pt.y - w->top) / CLNWND_ROWSIZE;
if (index >= 0 && e->we.popupmenu.pt.y >= w->top) if (index >= 0 && e->we.popupmenu.pt.y >= w->top) {
HandleClientListPopupClick(index, WP(w, menu_d).main_button); HandleClientListPopupClick(index, WP(w, menu_d).main_button);
}
DeleteWindowById(WC_TOOLBAR_MENU, 0); DeleteWindowById(WC_TOOLBAR_MENU, 0);
} break; } break;
case WE_POPUPMENU_OVER: { case WE_POPUPMENU_OVER: {
// Our mouse hoovers over an action? Select it! /* Our mouse hoovers over an action? Select it! */
int index = (e->we.popupmenu.pt.y - w->top) / CLNWND_ROWSIZE; int index = (e->we.popupmenu.pt.y - w->top) / CLNWND_ROWSIZE;
if (index == -1 || index == WP(w, menu_d).sel_index) return; if (index == -1 || index == WP(w, menu_d).sel_index) return;
@ -1469,27 +1499,28 @@ static void ClientListPopupWndProc(Window *w, WindowEvent *e)
WP(w, menu_d).sel_index = index; WP(w, menu_d).sel_index = index;
SetWindowDirty(w); SetWindowDirty(w);
} break; } break;
} }
} }
// Main handle for clientlist /**
* Main handle for clientlist
*/
static void ClientListWndProc(Window *w, WindowEvent *e) static void ClientListWndProc(Window *w, WindowEvent *e)
{ {
switch (e->event) { switch (e->event) {
case WE_PAINT: { case WE_PAINT: {
NetworkClientInfo *ci; NetworkClientInfo *ci;
int y, i = 0; int i = 0;
TextColour colour;
// Check if we need to reset the height /* Check if we need to reset the height */
if (!CheckClientListHeight(w)) break; if (!CheckClientListHeight(w)) break;
DrawWindowWidgets(w); DrawWindowWidgets(w);
y = CLNWND_OFFSET; int y = CLNWND_OFFSET;
FOR_ALL_ACTIVE_CLIENT_INFOS(ci) { FOR_ALL_ACTIVE_CLIENT_INFOS(ci) {
TextColour colour;
if (_selected_clientlist_item == i++) { // Selected item, highlight it if (_selected_clientlist_item == i++) { // Selected item, highlight it
GfxFillRect(1, y, 248, y + CLNWND_ROWSIZE - 1, 0); GfxFillRect(1, y, 248, y + CLNWND_ROWSIZE - 1, 0);
colour = TC_WHITE; colour = TC_WHITE;
@ -1503,7 +1534,7 @@ static void ClientListWndProc(Window *w, WindowEvent *e)
DrawString(4, y, STR_NETWORK_CLIENT, colour); DrawString(4, y, STR_NETWORK_CLIENT, colour);
} }
// Filter out spectators /* Filter out spectators */
if (IsValidPlayer(ci->client_playas)) DrawPlayerIcon(ci->client_playas, 64, y + 1); if (IsValidPlayer(ci->client_playas)) DrawPlayerIcon(ci->client_playas, 64, y + 1);
DoDrawString(ci->client_name, 81, y, colour); DoDrawString(ci->client_name, 81, y, colour);
@ -1513,25 +1544,24 @@ static void ClientListWndProc(Window *w, WindowEvent *e)
} break; } break;
case WE_CLICK: case WE_CLICK:
// Show the popup with option /* Show the popup with option */
if (_selected_clientlist_item != 255) { if (_selected_clientlist_item != 255) {
PopupClientList(w, _selected_clientlist_item, e->we.click.pt.x + w->left, e->we.click.pt.y + w->top); PopupClientList(w, _selected_clientlist_item, e->we.click.pt.x + w->left, e->we.click.pt.y + w->top);
} }
break; break;
case WE_MOUSEOVER: case WE_MOUSEOVER:
// -1 means we left the current window /* -1 means we left the current window */
if (e->we.mouseover.pt.y == -1) { if (e->we.mouseover.pt.y == -1) {
_selected_clientlist_y = 0; _selected_clientlist_y = 0;
_selected_clientlist_item = 255; _selected_clientlist_item = 255;
SetWindowDirty(w); SetWindowDirty(w);
break; break;
} }
// It did not change.. no update! /* It did not change.. no update! */
if (e->we.mouseover.pt.y == _selected_clientlist_y) break; if (e->we.mouseover.pt.y == _selected_clientlist_y) break;
// Find the new selected item (if any) /* Find the new selected item (if any) */
_selected_clientlist_y = e->we.mouseover.pt.y; _selected_clientlist_y = e->we.mouseover.pt.y;
if (e->we.mouseover.pt.y > CLNWND_OFFSET) { if (e->we.mouseover.pt.y > CLNWND_OFFSET) {
_selected_clientlist_item = (e->we.mouseover.pt.y - CLNWND_OFFSET) / CLNWND_ROWSIZE; _selected_clientlist_item = (e->we.mouseover.pt.y - CLNWND_OFFSET) / CLNWND_ROWSIZE;
@ -1539,12 +1569,12 @@ static void ClientListWndProc(Window *w, WindowEvent *e)
_selected_clientlist_item = 255; _selected_clientlist_item = 255;
} }
// Repaint /* Repaint */
SetWindowDirty(w); SetWindowDirty(w);
break; break;
case WE_DESTROY: case WE_CREATE: case WE_DESTROY: case WE_CREATE:
// When created or destroyed, data is reset /* When created or destroyed, data is reset */
_selected_clientlist_item = 255; _selected_clientlist_item = 255;
_selected_clientlist_y = 0; _selected_clientlist_y = 0;
break; break;
@ -1606,13 +1636,11 @@ static void NetworkJoinStatusWindowWndProc(Window *w, WindowEvent *e)
} break; } break;
case WE_CLICK: case WE_CLICK:
switch (e->we.click.widget) { if (e->we.click.widget == 2) { //Disconnect button
case 2: /* Disconnect button */
NetworkDisconnect(); NetworkDisconnect();
DeleteWindow(w); DeleteWindow(w);
SwitchMode(SM_MENU); SwitchMode(SM_MENU);
ShowNetworkGameWindow(); ShowNetworkGameWindow();
break;
} }
break; break;
@ -1645,9 +1673,8 @@ static const WindowDesc _network_join_status_window_desc = {
void ShowJoinStatusWindow() void ShowJoinStatusWindow()
{ {
Window *w;
DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0); DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
w = AllocateWindowDesc(&_network_join_status_window_desc); Window *w = AllocateWindowDesc(&_network_join_status_window_desc);
/* Parent the status window to the lobby */ /* Parent the status window to the lobby */
if (w != NULL) w->parent = FindWindowById(WC_NETWORK_WINDOW, 0); if (w != NULL) w->parent = FindWindowById(WC_NETWORK_WINDOW, 0);
} }
@ -1877,14 +1904,12 @@ static const WindowDesc _chat_window_desc = {
void ShowNetworkChatQueryWindow(DestType type, int dest) void ShowNetworkChatQueryWindow(DestType type, int dest)
{ {
Window *w;
DeleteWindowById(WC_SEND_NETWORK_MSG, 0); DeleteWindowById(WC_SEND_NETWORK_MSG, 0);
_edit_str_net_buf[0] = '\0'; _edit_str_net_buf[0] = '\0';
_chat_tab_completion_active = false; _chat_tab_completion_active = false;
w = AllocateWindowDesc(&_chat_window_desc); Window *w = AllocateWindowDesc(&_chat_window_desc);
w->LowerWidget(2); w->LowerWidget(2);
WP(w, chatquerystr_d).dtype = type; WP(w, chatquerystr_d).dtype = type;