summaryrefslogtreecommitdiff
path: root/network_gui.c
diff options
context:
space:
mode:
authordarkvater <darkvater@openttd.org>2004-09-12 14:12:33 +0000
committerdarkvater <darkvater@openttd.org>2004-09-12 14:12:33 +0000
commit24512d3da5ffef6e741c4ebf4e381a2ecab56dc1 (patch)
tree939d8687576f1b23c0590d67aa154929e0b730d6 /network_gui.c
parent7a6512a6543feff0b551f3ac3cdfe356bc0e4daf (diff)
downloadopenttd-24512d3da5ffef6e741c4ebf4e381a2ecab56dc1.tar.xz
(svn r212) -Fix: Network-gui fixes (sign_de)
-Fix: any disabled button in a window doesn't receive WE_CLICK events -Added network.h
Diffstat (limited to 'network_gui.c')
-rw-r--r--network_gui.c104
1 files changed, 81 insertions, 23 deletions
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},