network_gui.c
changeset 5339 96ac3f4933bb
parent 5247 1f982de55b88
child 5343 fb6c70256464
equal deleted inserted replaced
5338:a78592405640 5339:96ac3f4933bb
    24 #include "network_server.h"
    24 #include "network_server.h"
    25 #include "network_udp.h"
    25 #include "network_udp.h"
    26 #include "settings.h"
    26 #include "settings.h"
    27 #include "string.h"
    27 #include "string.h"
    28 #include "town.h"
    28 #include "town.h"
       
    29 #include "newgrf.h"
    29 
    30 
    30 #define BGC 5
    31 #define BGC 5
    31 #define BTC 15
    32 #define BTC 15
    32 
    33 
    33 typedef struct network_d {
    34 typedef struct network_d {
   239 		SetWindowWidgetDisabledState(w, 16, sel == NULL || // no Selected Server
   240 		SetWindowWidgetDisabledState(w, 16, sel == NULL || // no Selected Server
   240 				!sel->online || // Server offline
   241 				!sel->online || // Server offline
   241 				sel->info.clients_on >= sel->info.clients_max || // Server full
   242 				sel->info.clients_on >= sel->info.clients_max || // Server full
   242 				!sel->info.compatible); // Revision mismatch
   243 				!sel->info.compatible); // Revision mismatch
   243 
   244 
       
   245 		SetWindowWidgetHiddenState(w, 18, sel == NULL ||
       
   246 				!sel->online ||
       
   247 				sel->info.grfconfig == NULL);
       
   248 
   244 		SetDParam(0, 0x00);
   249 		SetDParam(0, 0x00);
   245 		SetDParam(7, _lan_internet_types_dropdown[_network_lan_internet]);
   250 		SetDParam(7, _lan_internet_types_dropdown[_network_lan_internet]);
   246 		DrawWindowWidgets(w);
   251 		DrawWindowWidgets(w);
   247 
   252 
   248 		DrawEditBox(w, &WP(w, network_ql_d).q, 3);
   253 		DrawEditBox(w, &WP(w, network_ql_d).q, 3);
   286 				if (cur_item->online) {
   291 				if (cur_item->online) {
   287 					// draw a lock if the server is password protected.
   292 					// draw a lock if the server is password protected.
   288 					if (cur_item->info.use_password) DrawSprite(SPR_LOCK, w->widget[8].left + 5, y - 1);
   293 					if (cur_item->info.use_password) DrawSprite(SPR_LOCK, w->widget[8].left + 5, y - 1);
   289 
   294 
   290 					// draw red or green icon, depending on compatibility with server.
   295 					// draw red or green icon, depending on compatibility with server.
   291 					DrawSprite(SPR_BLOT | (cur_item->info.compatible ? PALETTE_TO_GREEN : PALETTE_TO_RED), w->widget[8].left + 15, y);
   296 					DrawSprite(SPR_BLOT | (cur_item->info.compatible ? PALETTE_TO_GREEN : (cur_item->info.version_compatible ? PALETTE_TO_YELLOW : PALETTE_TO_RED)), w->widget[8].left + 15, y);
   292 
   297 
   293 					// draw flag according to server language
   298 					// draw flag according to server language
   294 					DrawSprite(SPR_FLAGS_BASE + cur_item->info.server_lang, w->widget[8].left + 25, y);
   299 					DrawSprite(SPR_FLAGS_BASE + cur_item->info.server_lang, w->widget[8].left + 25, y);
   295 				}
   300 				}
   296 
   301 
   360 			y += 10;
   365 			y += 10;
   361 
   366 
   362 			y += 2;
   367 			y += 2;
   363 
   368 
   364 			if (!sel->info.compatible) {
   369 			if (!sel->info.compatible) {
   365 				DrawStringCentered(425, y, STR_NETWORK_VERSION_MISMATCH, 0); // server mismatch
   370 				DrawStringCentered(425, y, sel->info.version_compatible ? STR_NETWORK_GRF_MISMATCH : STR_NETWORK_VERSION_MISMATCH, 0); // server mismatch
   366 			} else if (sel->info.clients_on == sel->info.clients_max) {
   371 			} else if (sel->info.clients_on == sel->info.clients_max) {
   367 				// Show: server full, when clients_on == clients_max
   372 				// Show: server full, when clients_on == clients_max
   368 				DrawStringCentered(425, y, STR_NETWORK_SERVER_FULL, 0); // server full
   373 				DrawStringCentered(425, y, STR_NETWORK_SERVER_FULL, 0); // server full
   369 			} else if (sel->info.use_password) {
   374 			} else if (sel->info.use_password) {
   370 				DrawStringCentered(425, y, STR_NETWORK_PASSWORD, 0); // password warning
   375 				DrawStringCentered(425, y, STR_NETWORK_PASSWORD, 0); // password warning
   434 			break;
   439 			break;
   435 		case 17: // Refresh
   440 		case 17: // Refresh
   436 			if (nd->server != NULL)
   441 			if (nd->server != NULL)
   437 				NetworkQueryServer(nd->server->info.hostname, nd->server->port, true);
   442 				NetworkQueryServer(nd->server->info.hostname, nd->server->port, true);
   438 			break;
   443 			break;
       
   444 		case 18: // NewGRF Settings
       
   445 			if (nd->server != NULL) ShowNewGRFSettings(false, false, &nd->server->info.grfconfig);
       
   446 			break;
   439 
   447 
   440 	}	break;
   448 	}	break;
   441 
   449 
   442 	case WE_DROPDOWN_SELECT: /* we have selected a dropdown item in the list */
   450 	case WE_DROPDOWN_SELECT: /* we have selected a dropdown item in the list */
   443 		switch (e->we.dropdown.button) {
   451 		switch (e->we.dropdown.button) {
   494 }
   502 }
   495 
   503 
   496 static const Widget _network_game_window_widgets[] = {
   504 static const Widget _network_game_window_widgets[] = {
   497 {   WWT_CLOSEBOX,   RESIZE_NONE,   BGC,     0,    10,     0,    13, STR_00C5,                    STR_018B_CLOSE_WINDOW},
   505 {   WWT_CLOSEBOX,   RESIZE_NONE,   BGC,     0,    10,     0,    13, STR_00C5,                    STR_018B_CLOSE_WINDOW},
   498 {    WWT_CAPTION,   RESIZE_NONE,   BGC,    11,   549,     0,    13, STR_NETWORK_MULTIPLAYER,     STR_NULL},
   506 {    WWT_CAPTION,   RESIZE_NONE,   BGC,    11,   549,     0,    13, STR_NETWORK_MULTIPLAYER,     STR_NULL},
   499 {      WWT_PANEL,   RESIZE_NONE,   BGC,     0,   549,    14,   249, 0x0,                         STR_NULL},
   507 {      WWT_PANEL,   RESIZE_NONE,   BGC,     0,   549,    14,   261, 0x0,                         STR_NULL},
   500 
   508 
   501 /* LEFT SIDE */
   509 /* LEFT SIDE */
   502 {      WWT_PANEL,   RESIZE_NONE,   BGC,   310,   461,    22,    33, 0x0,                         STR_NETWORK_ENTER_NAME_TIP},
   510 {      WWT_PANEL,   RESIZE_NONE,   BGC,   310,   461,    22,    33, 0x0,                         STR_NETWORK_ENTER_NAME_TIP},
   503 
   511 
   504 {      WWT_INSET,   RESIZE_NONE,   BGC,    90,   181,    22,    33, STR_NETWORK_COMBO1,          STR_NETWORK_CONNECTION_TIP},
   512 {      WWT_INSET,   RESIZE_NONE,   BGC,    90,   181,    22,    33, STR_NETWORK_COMBO1,          STR_NETWORK_CONNECTION_TIP},
   506 
   514 
   507 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,    10,   170,    42,    53, STR_NETWORK_GAME_NAME,       STR_NETWORK_GAME_NAME_TIP},
   515 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,    10,   170,    42,    53, STR_NETWORK_GAME_NAME,       STR_NETWORK_GAME_NAME_TIP},
   508 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,   171,   250,    42,    53, STR_NETWORK_CLIENTS_CAPTION, STR_NETWORK_CLIENTS_CAPTION_TIP},
   516 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,   171,   250,    42,    53, STR_NETWORK_CLIENTS_CAPTION, STR_NETWORK_CLIENTS_CAPTION_TIP},
   509 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,   251,   290,    42,    53, STR_EMPTY,                   STR_NETWORK_INFO_ICONS_TIP},
   517 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,   251,   290,    42,    53, STR_EMPTY,                   STR_NETWORK_INFO_ICONS_TIP},
   510 
   518 
   511 {     WWT_MATRIX,   RESIZE_NONE,   BGC,    10,   290,    54,   222, (12 << 8) + 1,               STR_NETWORK_CLICK_GAME_TO_SELECT},
   519 {     WWT_MATRIX,   RESIZE_NONE,   BGC,    10,   290,    54,   234, (12 << 8) + 1,               STR_NETWORK_CLICK_GAME_TO_SELECT},
   512 {  WWT_SCROLLBAR,   RESIZE_NONE,   BGC,   291,   302,    42,   222, STR_NULL,                    STR_0190_SCROLL_BAR_SCROLLS_LIST},
   520 {  WWT_SCROLLBAR,   RESIZE_NONE,   BGC,   291,   302,    42,   234, STR_NULL,                    STR_0190_SCROLL_BAR_SCROLLS_LIST},
   513 
   521 
   514 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,    30,   130,   232,   243, STR_NETWORK_FIND_SERVER,     STR_NETWORK_FIND_SERVER_TIP},
   522 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,    30,   130,   244,   255, STR_NETWORK_FIND_SERVER,     STR_NETWORK_FIND_SERVER_TIP},
   515 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,   180,   280,   232,   243, STR_NETWORK_ADD_SERVER,      STR_NETWORK_ADD_SERVER_TIP},
   523 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,   180,   280,   244,   255, STR_NETWORK_ADD_SERVER,      STR_NETWORK_ADD_SERVER_TIP},
   516 
   524 
   517 /* RIGHT SIDE */
   525 /* RIGHT SIDE */
   518 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,   315,   415,   232,   243, STR_NETWORK_START_SERVER,    STR_NETWORK_START_SERVER_TIP},
   526 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,   315,   415,   244,   255, STR_NETWORK_START_SERVER,    STR_NETWORK_START_SERVER_TIP},
   519 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,   430,   535,   232,   243, STR_012E_CANCEL,             STR_NULL},
   527 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,   430,   535,   244,   255, STR_012E_CANCEL,             STR_NULL},
   520 
   528 
   521 {      WWT_PANEL,   RESIZE_NONE,   BGC,   310,   540,    42,   222, 0x0,                         STR_NULL},
   529 {      WWT_PANEL,   RESIZE_NONE,   BGC,   310,   540,    42,   234, 0x0,                         STR_NULL},
   522 
   530 
   523 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,   315,   415,   201,   212, STR_NETWORK_JOIN_GAME,       STR_NULL},
   531 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,   315,   415,   213,   224, STR_NETWORK_JOIN_GAME,       STR_NULL},
   524 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,   430,   535,   201,   212, STR_NETWORK_REFRESH,         STR_NETWORK_REFRESH_TIP},
   532 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,   430,   535,   213,   224, STR_NETWORK_REFRESH,         STR_NETWORK_REFRESH_TIP},
       
   533 
       
   534 { WWT_PUSHTXTBTN,   RESIZE_NONE,   BTC,   430,   535,   195,   206, STR_NEWGRF_SETTINGS_BUTTON,  STR_NULL},
   525 
   535 
   526 {   WIDGETS_END},
   536 {   WIDGETS_END},
   527 };
   537 };
   528 
   538 
   529 static const WindowDesc _network_game_window_desc = {
   539 static const WindowDesc _network_game_window_desc = {
   530 	WDP_CENTER, WDP_CENTER, 550, 250,
   540 	WDP_CENTER, WDP_CENTER, 550, 262,
   531 	WC_NETWORK_WINDOW,0,
   541 	WC_NETWORK_WINDOW,0,
   532 	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
   542 	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
   533 	_network_game_window_widgets,
   543 	_network_game_window_widgets,
   534 	NetworkGameWindowWndProc,
   544 	NetworkGameWindowWndProc,
   535 };
   545 };