From 24512d3da5ffef6e741c4ebf4e381a2ecab56dc1 Mon Sep 17 00:00:00 2001 From: darkvater Date: Sun, 12 Sep 2004 14:12:33 +0000 Subject: (svn r212) -Fix: Network-gui fixes (sign_de) -Fix: any disabled button in a window doesn't receive WE_CLICK events -Added network.h --- network_gui.c | 104 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 81 insertions(+), 23 deletions(-) (limited to 'network_gui.c') diff --git a/network_gui.c b/network_gui.c index 200c924b1..005fe5069 100644 --- a/network_gui.c +++ b/network_gui.c @@ -4,6 +4,7 @@ #include "gui.h" #include "gfx.h" #include "command.h" +#include "network.h" #define BGC 5 #define BTC 15 @@ -33,15 +34,16 @@ static byte _players_max; static byte _network_connection; static uint16 _network_game_count_last; +enum { + NET_PRC__OFFSET_TOP_WIDGET = 93, + NET_PRC__SIZE_OF_ROW = 14, +}; + +static NetworkGameList *selected_item = NULL; + static void NetworkGameWindowWndProc(Window *w, WindowEvent *e) { switch(e->event) { - case WE_TICK: { - if (_network_game_count_last != _network_game_count) { - SetWindowDirty(w); - } - } - break; case WE_PAINT: { SET_DPARAM16(0, 0x00); @@ -57,6 +59,26 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e) DrawString(238, 82, STR_NETWORK_PLAYERS, 2); DrawString(288, 82, STR_NETWORK_MAP_SIZE, 2); + { // draw list of games + uint16 y = NET_PRC__OFFSET_TOP_WIDGET + 3; + int32 n = 0; + NetworkGameList *cur_item = _network_game_list; + while (cur_item != NULL) { + if (cur_item == selected_item) + GfxFillRect(11, y - 2, 380, y + 9, 10); // show highlighted item with a different colour + + DoDrawString(cur_item->item.server_name, 15, y, 16); // server name + + SET_DPARAM8(0, cur_item->item.players_on); + SET_DPARAM8(1, cur_item->item.players_max); + DrawString(238, y, STR_NETWORK_PLAYERS_VAL, 2); // #/# + + DoDrawString(cur_item->item.map_name, 288, y, 16); // map size + cur_item = cur_item->_next; + y += NET_PRC__SIZE_OF_ROW; + if (++n == w->vscroll.cap) { break;} // max number of games in the window + } + } } break; case WE_CLICK: @@ -88,23 +110,48 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e) case 7: case 8: /* Connection type */ ShowDropDownMenu(w, _connection_types_dropdown, _network_connection, 8, 0); // do it for widget 8 return; + case 14: { /* Matrix to show networkgames */ + uint32 id_v = (e->click.pt.y - NET_PRC__OFFSET_TOP_WIDGET) / NET_PRC__SIZE_OF_ROW; + + if (id_v >= w->vscroll.cap) { return;} // click out of bounds + + id_v += w->vscroll.pos; + + { + NetworkGameList *cur_item = _network_game_list; + int32 n = 0; + while (cur_item != NULL) { + if (n++ == id_v) { break;} // found clicked item + + cur_item = cur_item->_next; + } + + if (cur_item == NULL) { return;} // click out of vehicle bounds + + selected_item = cur_item; + } + } break; + case 16: /* Join Game */ + if (selected_item != NULL) + NetworkCoreConnectGameStruct(selected_item); + break; } break; case WE_DROPDOWN_SELECT: /* we have selected a dropdown item in the list */ _network_connection = e->dropdown.index; switch (_network_connection) { - case 0: + case 0: /* LAN */ NetworkGameListFromLAN(); - _network_game_count_last = _network_game_count; - SetWindowDirty(w); break; - case 1: + case 1: /* Internet */ NetworkGameListFromInternet(); - _network_game_count_last = _network_game_count; - SetWindowDirty(w); break; } + + _network_game_count_last = _network_game_count; + SetWindowDirty(w); + break; case WE_MOUSELOOP: @@ -126,16 +173,20 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e) case WE_ON_EDIT_TEXT: { const byte *b = e->edittext.str; - if (*b == 0) - return; - NetworkCoreConnectGame(b,_network_server_port); + if (*b != 0) + NetworkCoreConnectGame(b, _network_server_port); + } break; + + case WE_TICK: { + if (_network_game_count_last != _network_game_count) + SetWindowDirty(w); } break; } } static const Widget _network_game_window_widgets[] = { -{ WWT_PUSHTXTBTN, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, +{ WWT_CLOSEBOX, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, { WWT_CAPTION, BGC, 10, 399, 0, 13, STR_NETWORK_MULTIPLAYER, STR_NULL}, { WWT_IMGBTN, BGC, 0, 399, 14, 199, 0x0, STR_NULL}, @@ -148,14 +199,14 @@ static const Widget _network_game_window_widgets[] = { { WWT_6, BGC, 250, 393, 62, 73, STR_NETWORK_COMBO1, STR_NETWORK_CONNECTION_TYPE_TIP}, { WWT_CLOSEBOX, BGC, 382, 392, 63, 72, STR_0225, STR_NETWORK_CONNECTION_TYPE_TIP}, -{ WWT_SCROLLBAR, BGC, 382, 392, 81, 175, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, +{ WWT_SCROLLBAR, BGC, 382, 392, 81, 176, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, { WWT_IMGBTN, BTC, 10, 231, 81, 92, 0x0, STR_NETWORK_GAME_NAME_TIP }, { WWT_IMGBTN, BTC, 232, 281, 81, 92, 0x0, STR_NETWORK_PLAYERS_TIP }, { WWT_IMGBTN, BTC, 282, 331, 81, 92, 0x0, STR_NETWORK_MAP_SIZE_TIP }, { WWT_IMGBTN, BTC, 332, 381, 81, 92, 0x0, STR_NETWORK_INFO_ICONS_TIP }, -{ WWT_MATRIX, BGC, 10, 381, 93, 175, 0x601, STR_NETWORK_CLICK_GAME_TO_SELECT}, +{ WWT_MATRIX, BGC, 10, 381, 93, 176, 0x601, STR_NETWORK_CLICK_GAME_TO_SELECT}, { WWT_PUSHTXTBTN, BTC, 145, 255, 180, 191, STR_012E_CANCEL, STR_NULL}, { WWT_PUSHTXTBTN, BTC, 270, 392, 180, 191, STR_NETWORK_JOIN_GAME, STR_NULL}, @@ -180,6 +231,9 @@ void ShowNetworkGameWindow() w = AllocateWindowDesc(&_network_game_window_desc); strcpy(_edit_str_buf, "Your name"); + w->vscroll.cap = 6; + w->disabled_state = (1<<6) | (1<<7) | (1<<8); // disable buttons not yet working + NetworkGameListFromLAN(); // default dropdown item is LAN, so fill that array _network_game_count_last = _network_game_count; @@ -232,18 +286,21 @@ static void NetworkStartServerWindowWndProc(Window *w, WindowEvent *e) return; case 9: /* Start game */ NetworkCoreStartGame(); + strcpy(_network_game.server_name, WP(w,querystr_d).buf); //ShowNetworkLobbyWindow(); DoCommandP(0, 0, 0, NULL, CMD_START_NEW_GAME); break; case 10: /* Load game */ NetworkCoreStartGame(); + strcpy(_network_game.server_name, WP(w,querystr_d).buf); //ShowNetworkLobbyWindow(); ShowSaveLoadDialog(SLD_LOAD_GAME); break; case 11: /* Load scenario */ NetworkCoreStartGame(); + strcpy(_network_game.server_name, WP(w,querystr_d).buf); //ShowNetworkLobbyWindow(); - ShowSaveLoadDialog(SLD_LOAD_SCENARIO);; + ShowSaveLoadDialog(SLD_LOAD_SCENARIO); break; } break; @@ -287,9 +344,9 @@ static const Widget _network_start_server_window_widgets[] = { { WWT_6, BGC, 260, 390, 81, 92, STR_NETWORK_COMBO2, STR_NETWORK_NUMBER_OF_PLAYERS_TIP}, { WWT_CLOSEBOX, BGC, 379, 389, 82, 91, STR_0225, STR_NETWORK_NUMBER_OF_PLAYERS_TIP}, -{ WWT_PUSHTXTBTN, BTC, 10, 100, 180, 191, STR_NETWORK_START_GAME, STR_NULL}, -{ WWT_PUSHTXTBTN, BTC, 110, 200, 180, 191, STR_NETWORK_LOAD_GAME, STR_NULL}, -{ WWT_PUSHTXTBTN, BTC, 210, 300, 180, 191, STR_NETWORK_LOAD_SCENARIO, STR_NULL}, +{ WWT_PUSHTXTBTN, BTC, 10, 100, 180, 191, STR_NETWORK_START_GAME, STR_NETWORK_START_GAME_TIP}, +{ WWT_PUSHTXTBTN, BTC, 110, 200, 180, 191, STR_NETWORK_LOAD_GAME, STR_NETWORK_LOAD_GAME_TIP}, +{ WWT_PUSHTXTBTN, BTC, 210, 300, 180, 191, STR_NETWORK_LOAD_SCENARIO, STR_NETWORK_LOAD_SCENARIO_TIP}, { WWT_PUSHTXTBTN, BTC, 310, 390, 180, 191, STR_012E_CANCEL, STR_NULL}, { WIDGETS_END}, }; @@ -309,6 +366,7 @@ static void ShowNetworkStartServerWindow() w = AllocateWindowDesc(&_network_start_server_window_desc); strcpy(_edit_str_buf, ""); + w->disabled_state = (1<<4) | (1<<5) | (1<<6) | (1<<7) | (1<<8); // disable buttons not yet working WP(w,querystr_d).caret = 1; WP(w,querystr_d).maxlen = MAX_QUERYSTR_LEN; @@ -375,7 +433,7 @@ static void NetworkLobbyWindowWndProc(Window *w, WindowEvent *e) } static const Widget _network_lobby_window_widgets[] = { -{ WWT_PUSHTXTBTN, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW }, +{ WWT_CLOSEBOX, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW }, { WWT_CAPTION, BGC, 10, 399, 0, 13, STR_NETWORK_GAME_LOBBY, STR_NULL}, { WWT_IMGBTN, BGC, 0, 399, 14, 299, 0x0, STR_NULL}, -- cgit v1.2.3-54-g00ecf