75 switch(e->event) { |
73 switch(e->event) { |
76 case WE_PAINT: { |
74 case WE_PAINT: { |
77 w->disabled_state = 0; |
75 w->disabled_state = 0; |
78 |
76 |
79 if (_selected_item == NULL) { |
77 if (_selected_item == NULL) { |
80 SETBIT(w->disabled_state, 17); SETBIT(w->disabled_state, 18); |
78 SETBIT(w->disabled_state, 15); SETBIT(w->disabled_state, 16); |
81 } else if (!_selected_item->online) { |
79 } else if (!_selected_item->online) { |
82 SETBIT(w->disabled_state, 17); // Server offline, join button disabled |
80 SETBIT(w->disabled_state, 15); // Server offline, join button disabled |
83 } else if (_selected_item->info.clients_on == _selected_item->info.clients_max) { |
81 } else if (_selected_item->info.clients_on == _selected_item->info.clients_max) { |
84 SETBIT(w->disabled_state, 17); // Server full, join button disabled |
82 SETBIT(w->disabled_state, 15); // Server full, join button disabled |
85 |
83 |
86 // revisions don't match, check if server has no revision; then allow connection |
84 // revisions don't match, check if server has no revision; then allow connection |
87 } else if (strncmp(_selected_item->info.server_revision, _openttd_revision, NETWORK_REVISION_LENGTH - 1) != 0) { |
85 } else if (strncmp(_selected_item->info.server_revision, _openttd_revision, NETWORK_REVISION_LENGTH - 1) != 0) { |
88 if (strncmp(_selected_item->info.server_revision, NOREV_STRING, sizeof(_selected_item->info.server_revision)) != 0) |
86 if (strncmp(_selected_item->info.server_revision, NOREV_STRING, sizeof(_selected_item->info.server_revision)) != 0) |
89 SETBIT(w->disabled_state, 17); // Revision mismatch, join button disabled |
87 SETBIT(w->disabled_state, 15); // Revision mismatch, join button disabled |
90 } |
88 } |
91 |
89 |
92 SetDParam(0, 0x00); |
90 SetDParam(0, 0x00); |
93 SetDParam(2, STR_NETWORK_LAN + _network_connection); |
|
94 DrawWindowWidgets(w); |
91 DrawWindowWidgets(w); |
95 |
92 |
96 DrawEditBox(w, 3); |
93 DrawEditBox(w, 3); |
97 |
94 |
98 DrawString(9, 23, STR_NETWORK_PLAYER_NAME, 2); |
95 DrawString(9, 23, STR_NETWORK_PLAYER_NAME, 2); |
99 DrawString(9, 43, STR_NETWORK_CONNECTION, 2); |
|
100 |
96 |
101 DrawString(15, 63, STR_NETWORK_GAME_NAME, 2); |
97 DrawString(15, 63, STR_NETWORK_GAME_NAME, 2); |
102 DrawString(135, 63, STR_NETWORK_CLIENTS_CAPTION, 2); |
98 DrawString(135, 63, STR_NETWORK_CLIENTS_CAPTION, 2); |
103 |
99 |
104 { // draw list of games |
100 { // draw list of games |
212 } break; |
208 } break; |
213 |
209 |
214 case WE_CLICK: |
210 case WE_CLICK: |
215 _selected_field = e->click.widget; |
211 _selected_field = e->click.widget; |
216 switch(e->click.widget) { |
212 switch(e->click.widget) { |
217 case 0: case 14: /* Close 'X' | Cancel button */ |
213 case 0: case 12: /* Close 'X' | Cancel button */ |
218 DeleteWindowById(WC_NETWORK_WINDOW, 0); |
214 DeleteWindowById(WC_NETWORK_WINDOW, 0); |
219 break; |
215 break; |
220 case 4: case 5: /* Connection type */ |
216 case 8: { /* Matrix to show networkgames */ |
221 ShowDropDownMenu(w, _connection_types_dropdown, _network_connection, 5, 0); // do it for widget 5 |
|
222 return; |
|
223 case 10: { /* Matrix to show networkgames */ |
|
224 uint32 id_v = (e->click.pt.y - NET_PRC__OFFSET_TOP_WIDGET) / NET_PRC__SIZE_OF_ROW; |
217 uint32 id_v = (e->click.pt.y - NET_PRC__OFFSET_TOP_WIDGET) / NET_PRC__SIZE_OF_ROW; |
225 |
218 |
226 if (id_v >= w->vscroll.cap) { return;} // click out of bounds |
219 if (id_v >= w->vscroll.cap) { return;} // click out of bounds |
227 id_v += w->vscroll.pos; |
220 id_v += w->vscroll.pos; |
228 |
221 |
278 250, // characters up to this width pixels, whichever is satisfied first |
271 250, // characters up to this width pixels, whichever is satisfied first |
279 w->window_class, |
272 w->window_class, |
280 w->window_number); |
273 w->window_number); |
281 DeleteName(str); |
274 DeleteName(str); |
282 } break; |
275 } break; |
283 case 13: /* Start server */ |
276 case 11: /* Start server */ |
284 ShowNetworkStartServerWindow(); |
277 ShowNetworkStartServerWindow(); |
285 break; |
278 break; |
286 case 17: /* Join Game */ |
279 case 15: /* Join Game */ |
287 if (_selected_item != NULL) { |
280 if (_selected_item != NULL) { |
288 memcpy(&_network_game_info, &_selected_item->info, sizeof(NetworkGameInfo)); |
281 memcpy(&_network_game_info, &_selected_item->info, sizeof(NetworkGameInfo)); |
289 snprintf(_network_last_host, sizeof(_network_last_host), "%s", inet_ntoa(*(struct in_addr *)&_selected_item->ip)); |
282 snprintf(_network_last_host, sizeof(_network_last_host), "%s", inet_ntoa(*(struct in_addr *)&_selected_item->ip)); |
290 _network_last_port = _selected_item->port; |
283 _network_last_port = _selected_item->port; |
291 ShowNetworkLobbyWindow(); |
284 ShowNetworkLobbyWindow(); |
292 } |
285 } |
293 break; |
286 break; |
294 case 18: // Refresh |
287 case 16: // Refresh |
295 if (_selected_item != NULL) { |
288 if (_selected_item != NULL) { |
296 NetworkQueryServer(_selected_item->info.hostname, _selected_item->port, true); |
289 NetworkQueryServer(_selected_item->info.hostname, _selected_item->port, true); |
297 } |
290 } |
298 break; |
291 break; |
299 |
292 |
300 } break; |
293 } break; |
301 |
294 |
302 case WE_DROPDOWN_SELECT: /* we have selected a dropdown item in the list */ |
|
303 _network_connection = e->dropdown.index; |
|
304 switch (_network_connection) { |
|
305 case 0: /* LAN */ |
|
306 // NetworkGameListFromLAN(); |
|
307 break; |
|
308 case 1: /* Internet */ |
|
309 // NetworkGameListFromInternet(); |
|
310 break; |
|
311 } |
|
312 |
|
313 SetWindowDirty(w); |
|
314 break; |
|
315 |
|
316 case WE_MOUSELOOP: |
295 case WE_MOUSELOOP: |
317 if (_selected_field == 3) |
296 if (_selected_field == 3) |
318 HandleEditBox(w, 3); |
297 HandleEditBox(w, 3); |
319 |
298 |
320 break; |
299 break; |
368 { WWT_IMGBTN, BGC, 0, 479, 14, 214, 0x0, STR_NULL}, |
347 { WWT_IMGBTN, BGC, 0, 479, 14, 214, 0x0, STR_NULL}, |
369 |
348 |
370 /* LEFT SIDE */ |
349 /* LEFT SIDE */ |
371 { WWT_IMGBTN, BGC, 90, 230, 22, 33, 0x0, STR_NETWORK_ENTER_NAME_TIP}, |
350 { WWT_IMGBTN, BGC, 90, 230, 22, 33, 0x0, STR_NETWORK_ENTER_NAME_TIP}, |
372 |
351 |
373 { WWT_6, BGC, 90, 230, 42, 53, STR_NETWORK_COMBO1, STR_NETWORK_CONNECTION_TIP}, |
|
374 { WWT_CLOSEBOX, BGC, 219, 229, 43, 52, STR_0225, STR_NETWORK_CONNECTION_TIP}, |
|
375 |
|
376 { WWT_SCROLLBAR, BGC, 220, 230, 62, 185, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
352 { WWT_SCROLLBAR, BGC, 220, 230, 62, 185, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
377 |
353 |
378 { WWT_IMGBTN, BTC, 10, 130, 62, 73, 0x0, STR_NETWORK_GAME_NAME_TIP }, |
354 { WWT_IMGBTN, BTC, 10, 130, 62, 73, 0x0, STR_NETWORK_GAME_NAME_TIP }, |
379 { WWT_IMGBTN, BTC, 131, 180, 62, 73, 0x0, STR_NETWORK_CLIENTS_CAPTION_TIP }, |
355 { WWT_IMGBTN, BTC, 131, 180, 62, 73, 0x0, STR_NETWORK_CLIENTS_CAPTION_TIP }, |
380 { WWT_IMGBTN, BTC, 181, 219, 62, 73, 0x0, STR_NETWORK_INFO_ICONS_TIP }, |
356 { WWT_IMGBTN, BTC, 181, 219, 62, 73, 0x0, STR_NETWORK_INFO_ICONS_TIP }, |
413 |
389 |
414 // NetworkLobbyInit(); |
390 // NetworkLobbyInit(); |
415 w = AllocateWindowDesc(&_network_game_window_desc); |
391 w = AllocateWindowDesc(&_network_game_window_desc); |
416 ttd_strlcpy(_edit_str_buf, _network_player_name, MAX_QUERYSTR_LEN); |
392 ttd_strlcpy(_edit_str_buf, _network_player_name, MAX_QUERYSTR_LEN); |
417 w->vscroll.cap = 8; |
393 w->vscroll.cap = 8; |
418 w->disabled_state = (1<<4) | (1<<5); // disable buttons not yet working |
|
419 // NetworkGameListFromLAN(); // default dropdown item is LAN, so fill that array |
|
420 |
394 |
421 WP(w,querystr_d).caret = 1; |
395 WP(w,querystr_d).caret = 1; |
422 WP(w,querystr_d).maxlen = MAX_QUERYSTR_LEN; |
396 WP(w,querystr_d).maxlen = MAX_QUERYSTR_LEN; |
423 WP(w,querystr_d).maxwidth = 120; |
397 WP(w,querystr_d).maxwidth = 120; |
424 WP(w,querystr_d).buf = _edit_str_buf; |
398 WP(w,querystr_d).buf = _edit_str_buf; |
468 switch(e->event) { |
442 switch(e->event) { |
469 case WE_PAINT: { |
443 case WE_PAINT: { |
470 int y = NSSWND_START, pos; |
444 int y = NSSWND_START, pos; |
471 const FiosItem *item; |
445 const FiosItem *item; |
472 |
446 |
473 SetDParam(7, STR_NETWORK_2_CLIENTS + _network_game_info.clients_max - 2); |
447 SetDParam(7, STR_NETWORK_LAN_INTERNET + _network_advertise); |
474 SetDParam(9, STR_NETWORK_LANG_ANY + _network_game_info.server_lang); |
448 SetDParam(9, STR_NETWORK_2_CLIENTS + _network_game_info.clients_max - 2); |
|
449 SetDParam(11, STR_NETWORK_LANG_ANY + _network_game_info.server_lang); |
475 DrawWindowWidgets(w); |
450 DrawWindowWidgets(w); |
476 |
451 |
477 GfxFillRect(11, 63, 239, 165, 0xD7); |
452 GfxFillRect(11, 63, 239, 165, 0xD7); |
478 |
453 |
479 DrawEditBox(w, 3); |
454 DrawEditBox(w, 3); |
480 |
455 |
481 DrawString(10, 22, STR_NETWORK_NEW_GAME_NAME, 2); |
456 DrawString(10, 22, STR_NETWORK_NEW_GAME_NAME, 2); |
482 |
457 |
483 DrawString(10, 43, STR_NETWORK_SELECT_MAP, 2); |
458 DrawString(10, 43, STR_NETWORK_SELECT_MAP, 2); |
484 DrawString(260, 63, STR_NETWORK_NUMBER_OF_CLIENTS, 2); |
459 DrawString(260, 63, STR_NETWORK_CONNECTION, 2); |
485 DrawString(260, 105, STR_NETWORK_LANGUAGE_SPOKEN, 2); |
460 DrawString(260, 95, STR_NETWORK_NUMBER_OF_CLIENTS, 2); |
|
461 DrawString(260, 127, STR_NETWORK_LANGUAGE_SPOKEN, 2); |
486 |
462 |
487 // draw list of maps |
463 // draw list of maps |
488 pos = w->vscroll.pos; |
464 pos = w->vscroll.pos; |
489 while (pos < _fios_num + 1) { |
465 while (pos < _fios_num + 1) { |
490 item = _fios_list + pos - 1; |
466 item = _fios_list + pos - 1; |
518 return; |
494 return; |
519 if (y == 0) selected_map = NULL; |
495 if (y == 0) selected_map = NULL; |
520 else selected_map = _fios_list + y-1; |
496 else selected_map = _fios_list + y-1; |
521 SetWindowDirty(w); |
497 SetWindowDirty(w); |
522 } break; |
498 } break; |
523 case 7: case 8: /* Number of Players */ |
499 case 7: case 8: /* Connection type */ |
524 ShowDropDownMenu(w, _players_dropdown, _network_game_info.clients_max - 2, 8, 0); // do it for widget 8 |
500 ShowDropDownMenu(w, _connection_types_dropdown, _network_advertise, 8, 0); // do it for widget 8 |
|
501 break; |
|
502 case 9: case 10: /* Number of Players */ |
|
503 ShowDropDownMenu(w, _players_dropdown, _network_game_info.clients_max - 2, 10, 0); // do it for widget 10 |
525 return; |
504 return; |
526 case 9: case 10: /* Language */ |
505 case 11: case 12: /* Language */ |
527 ShowDropDownMenu(w, _language_dropdown, _network_game_info.server_lang, 10, 0); // do it for widget 10 |
506 ShowDropDownMenu(w, _language_dropdown, _network_game_info.server_lang, 12, 0); // do it for widget 12 |
528 return; |
507 return; |
529 case 11: /* Start game */ |
508 case 13: /* Start game */ |
530 _is_network_server = true; |
509 _is_network_server = true; |
531 ttd_strlcpy(_network_server_name, WP(w,querystr_d).buf, sizeof(_network_server_name)); |
510 ttd_strlcpy(_network_server_name, WP(w,querystr_d).buf, sizeof(_network_server_name)); |
532 if(selected_map==NULL) { // start random new game |
511 if(selected_map==NULL) { // start random new game |
533 DoCommandP(0, Random(), InteractiveRandom(), NULL, CMD_GEN_RANDOM_NEW_GAME); |
512 DoCommandP(0, Random(), InteractiveRandom(), NULL, CMD_GEN_RANDOM_NEW_GAME); |
534 } else { // load a scenario |
513 } else { // load a scenario |
540 DeleteWindow(w); |
519 DeleteWindow(w); |
541 DoCommandP(0, Random(), InteractiveRandom(), NULL, CMD_START_SCENARIO); |
520 DoCommandP(0, Random(), InteractiveRandom(), NULL, CMD_START_SCENARIO); |
542 } |
521 } |
543 } |
522 } |
544 break; |
523 break; |
545 case 12: /* Load game */ |
524 case 14: /* Load game */ |
546 _is_network_server = true; |
525 _is_network_server = true; |
547 ttd_strlcpy(_network_server_name, WP(w,querystr_d).buf, sizeof(_network_server_name)); |
526 ttd_strlcpy(_network_server_name, WP(w,querystr_d).buf, sizeof(_network_server_name)); |
548 snprintf(_network_game_info.map_name, sizeof(_network_game_info.map_name), "Loaded game"); |
527 snprintf(_network_game_info.map_name, sizeof(_network_game_info.map_name), "Loaded game"); |
549 /* XXX - WC_NETWORK_WINDOW should stay, but if it stays, it gets |
528 /* XXX - WC_NETWORK_WINDOW should stay, but if it stays, it gets |
550 * copied all the elements of 'load game' and upon closing that, it segfaults */ |
529 * copied all the elements of 'load game' and upon closing that, it segfaults */ |
604 { WWT_PUSHTXTBTN, BTC, 270, 380, 22, 33, STR_NETWORK_SET_PASSWORD, STR_NETWORK_PASSWORD_TIP}, |
586 { WWT_PUSHTXTBTN, BTC, 270, 380, 22, 33, STR_NETWORK_SET_PASSWORD, STR_NETWORK_PASSWORD_TIP}, |
605 |
587 |
606 { WWT_6, BGC, 10, 251, 62, 166, 0x0, STR_NETWORK_SELECT_MAP_TIP}, |
588 { WWT_6, BGC, 10, 251, 62, 166, 0x0, STR_NETWORK_SELECT_MAP_TIP}, |
607 { WWT_SCROLLBAR, BGC, 240, 250, 63, 165, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
589 { WWT_SCROLLBAR, BGC, 240, 250, 63, 165, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
608 |
590 |
609 { WWT_6, BGC, 260, 390, 77, 88, STR_NETWORK_COMBO2, STR_NETWORK_NUMBER_OF_CLIENTS_TIP}, |
591 { WWT_6, BGC, 260, 390, 77, 88, STR_NETWORK_COMBO1, STR_NETWORK_CONNECTION_TIP}, |
610 { WWT_CLOSEBOX, BGC, 379, 389, 78, 87, STR_0225, STR_NETWORK_NUMBER_OF_CLIENTS_TIP}, |
592 { WWT_CLOSEBOX, BGC, 379, 389, 78, 87, STR_0225, STR_NETWORK_CONNECTION_TIP}, |
611 |
593 |
612 { WWT_6, BGC, 260, 390, 119, 130, STR_NETWORK_COMBO3, STR_NETWORK_LANGUAGE_TIP}, |
594 { WWT_6, BGC, 260, 390, 109, 120, STR_NETWORK_COMBO2, STR_NETWORK_NUMBER_OF_CLIENTS_TIP}, |
613 { WWT_CLOSEBOX, BGC, 379, 389, 120, 129, STR_0225, STR_NETWORK_LANGUAGE_TIP}, |
595 { WWT_CLOSEBOX, BGC, 379, 389, 110, 119, STR_0225, STR_NETWORK_NUMBER_OF_CLIENTS_TIP}, |
|
596 |
|
597 { WWT_6, BGC, 260, 390, 141, 152, STR_NETWORK_COMBO3, STR_NETWORK_LANGUAGE_TIP}, |
|
598 { WWT_CLOSEBOX, BGC, 379, 389, 142, 151, STR_0225, STR_NETWORK_LANGUAGE_TIP}, |
614 |
599 |
615 { WWT_PUSHTXTBTN, BTC, 55, 145, 180, 191, STR_NETWORK_START_GAME, STR_NETWORK_START_GAME_TIP}, |
600 { WWT_PUSHTXTBTN, BTC, 55, 145, 180, 191, STR_NETWORK_START_GAME, STR_NETWORK_START_GAME_TIP}, |
616 { WWT_PUSHTXTBTN, BTC, 155, 245, 180, 191, STR_NETWORK_LOAD_GAME, STR_NETWORK_LOAD_GAME_TIP}, |
601 { WWT_PUSHTXTBTN, BTC, 155, 245, 180, 191, STR_NETWORK_LOAD_GAME, STR_NETWORK_LOAD_GAME_TIP}, |
617 { WWT_PUSHTXTBTN, BTC, 255, 345, 180, 191, STR_012E_CANCEL, STR_NULL}, |
602 { WWT_PUSHTXTBTN, BTC, 255, 345, 180, 191, STR_012E_CANCEL, STR_NULL}, |
618 { WIDGETS_END}, |
603 { WIDGETS_END}, |