mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-08-22 05:59:10 +00:00
(svn r212) -Fix: Network-gui fixes (sign_de)
-Fix: any disabled button in a window doesn't receive WE_CLICK events -Added network.h
This commit is contained in:
104
network_gui.c
104
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},
|
||||
|
||||
|
Reference in New Issue
Block a user