46 #include "table/strings.h"
50 static int _rename_id = 1;
51 static int _rename_what = -1;
61 GetString(msg, STR_COMPANY_NAME,
lastof(msg));
71 void HandleOnEditText(
const char *str)
73 switch (_rename_what) {
87 default: NOT_REACHED();
90 _rename_id = _rename_what = -1;
126 #ifdef ENABLE_NETWORK
127 void ShowNetworkGiveMoneyWindow(
CompanyID company)
129 _rename_id = company;
190 void ZoomInOrOutToCursorWindow(
bool in,
Window *w)
194 if (_game_mode != GM_MENU) {
198 Point pt = GetTileZoomCenterWindow(in, w);
207 static const struct NWidgetPart _nested_main_window_widgets[] = {
219 GHK_RESET_OBJECT_TO_PLACE,
221 GHK_DELETE_NONVITAL_WINDOWS,
226 GHK_TOGGLE_TRANSPARENCY,
227 GHK_TOGGLE_INVISIBILITY = GHK_TOGGLE_TRANSPARENCY + 9,
228 GHK_TRANSPARENCY_TOOLBAR = GHK_TOGGLE_INVISIBILITY + 8,
240 static const uint LINKGRAPH_REFRESH_PERIOD = 0xff;
241 static const uint LINKGRAPH_DELAY = 0xf;
253 this->refresh = LINKGRAPH_DELAY;
258 if (--this->refresh > 0)
return;
260 this->refresh = LINKGRAPH_REFRESH_PERIOD;
274 if (_game_mode == GM_MENU) {
275 static const SpriteID title_sprites[] = {SPR_OTTD_O, SPR_OTTD_P, SPR_OTTD_E, SPR_OTTD_N, SPR_OTTD_T, SPR_OTTD_T, SPR_OTTD_D};
276 static const uint LETTER_SPACING = 10;
277 int name_width = (
lengthof(title_sprites) - 1) * LETTER_SPACING;
279 for (uint i = 0; i <
lengthof(title_sprites); i++) {
282 int off_x = (this->
width - name_width) / 2;
284 for (uint i = 0; i <
lengthof(title_sprites); i++) {
285 DrawSprite(title_sprites[i], PAL_NONE, off_x, 50);
286 off_x +=
GetSpriteSize(title_sprites[i]).width + LETTER_SPACING;
293 if (hotkey == GHK_QUIT) {
294 HandleExitGameRequest();
320 case GHK_BOUNDING_BOXES:
324 case GHK_DIRTY_BLOCKS:
333 case GHK_CENTER_ZOOM: {
334 Point pt = GetTileBelowCursor();
349 *(
volatile byte *)0 = 0;
357 case GHK_UPDATE_COORDS:
361 case GHK_TOGGLE_TRANSPARENCY:
362 case GHK_TOGGLE_TRANSPARENCY + 1:
363 case GHK_TOGGLE_TRANSPARENCY + 2:
364 case GHK_TOGGLE_TRANSPARENCY + 3:
365 case GHK_TOGGLE_TRANSPARENCY + 4:
366 case GHK_TOGGLE_TRANSPARENCY + 5:
367 case GHK_TOGGLE_TRANSPARENCY + 6:
368 case GHK_TOGGLE_TRANSPARENCY + 7:
369 case GHK_TOGGLE_TRANSPARENCY + 8:
375 case GHK_TOGGLE_INVISIBILITY:
376 case GHK_TOGGLE_INVISIBILITY + 1:
377 case GHK_TOGGLE_INVISIBILITY + 2:
378 case GHK_TOGGLE_INVISIBILITY + 3:
379 case GHK_TOGGLE_INVISIBILITY + 4:
380 case GHK_TOGGLE_INVISIBILITY + 5:
381 case GHK_TOGGLE_INVISIBILITY + 6:
382 case GHK_TOGGLE_INVISIBILITY + 7:
388 case GHK_TRANSPARENCY_TOOLBAR:
392 case GHK_TRANSPARANCY:
396 #ifdef ENABLE_NETWORK
400 if (cio == NULL)
break;
410 case GHK_CHAT_COMPANY:
413 if (cio == NULL)
break;
419 case GHK_CHAT_SERVER:
437 this->refresh = LINKGRAPH_DELAY;
443 ZoomInOrOutToCursorWindow(wheel < 0,
this);
452 this->refresh = LINKGRAPH_DELAY;
463 if (!gui_scope)
return;
471 const uint16 _ghk_quit_keys[] = {
'Q' | WKC_CTRL,
'Q' | WKC_META, 0};
472 const uint16 _ghk_abandon_keys[] = {
'W' | WKC_CTRL,
'W' | WKC_META, 0};
473 const uint16 _ghk_chat_keys[] = {WKC_RETURN,
'T', 0};
474 const uint16 _ghk_chat_all_keys[] = {WKC_SHIFT | WKC_RETURN, WKC_SHIFT |
'T', 0};
475 const uint16 _ghk_chat_company_keys[] = {WKC_CTRL | WKC_RETURN, WKC_CTRL |
'T', 0};
476 const uint16 _ghk_chat_server_keys[] = {WKC_CTRL | WKC_SHIFT | WKC_RETURN, WKC_CTRL | WKC_SHIFT |
'T', 0};
478 static Hotkey global_hotkeys[] = {
479 Hotkey(_ghk_quit_keys,
"quit", GHK_QUIT),
480 Hotkey(_ghk_abandon_keys,
"abandon", GHK_ABANDON),
481 Hotkey(WKC_BACKQUOTE,
"console", GHK_CONSOLE),
482 Hotkey(
'B' | WKC_CTRL,
"bounding_boxes", GHK_BOUNDING_BOXES),
483 Hotkey(
'I' | WKC_CTRL,
"dirty_blocks", GHK_DIRTY_BLOCKS),
484 Hotkey(
'C',
"center", GHK_CENTER),
485 Hotkey(
'Z',
"center_zoom", GHK_CENTER_ZOOM),
486 Hotkey(WKC_ESC,
"reset_object_to_place", GHK_RESET_OBJECT_TO_PLACE),
487 Hotkey(WKC_DELETE,
"delete_windows", GHK_DELETE_WINDOWS),
488 Hotkey(WKC_DELETE | WKC_SHIFT,
"delete_all_windows", GHK_DELETE_NONVITAL_WINDOWS),
489 Hotkey(
'R' | WKC_CTRL,
"refresh_screen", GHK_REFRESH_SCREEN),
491 Hotkey(
'0' | WKC_ALT,
"crash_game", GHK_CRASH),
492 Hotkey(
'1' | WKC_ALT,
"money", GHK_MONEY),
493 Hotkey(
'2' | WKC_ALT,
"update_coordinates", GHK_UPDATE_COORDS),
495 Hotkey(
'1' | WKC_CTRL,
"transparency_signs", GHK_TOGGLE_TRANSPARENCY),
496 Hotkey(
'2' | WKC_CTRL,
"transparency_trees", GHK_TOGGLE_TRANSPARENCY + 1),
497 Hotkey(
'3' | WKC_CTRL,
"transparency_houses", GHK_TOGGLE_TRANSPARENCY + 2),
498 Hotkey(
'4' | WKC_CTRL,
"transparency_industries", GHK_TOGGLE_TRANSPARENCY + 3),
499 Hotkey(
'5' | WKC_CTRL,
"transparency_buildings", GHK_TOGGLE_TRANSPARENCY + 4),
500 Hotkey(
'6' | WKC_CTRL,
"transparency_bridges", GHK_TOGGLE_TRANSPARENCY + 5),
501 Hotkey(
'7' | WKC_CTRL,
"transparency_structures", GHK_TOGGLE_TRANSPARENCY + 6),
502 Hotkey(
'8' | WKC_CTRL,
"transparency_catenary", GHK_TOGGLE_TRANSPARENCY + 7),
503 Hotkey(
'9' | WKC_CTRL,
"transparency_loading", GHK_TOGGLE_TRANSPARENCY + 8),
504 Hotkey(
'1' | WKC_CTRL | WKC_SHIFT,
"invisibility_signs", GHK_TOGGLE_INVISIBILITY),
505 Hotkey(
'2' | WKC_CTRL | WKC_SHIFT,
"invisibility_trees", GHK_TOGGLE_INVISIBILITY + 1),
506 Hotkey(
'3' | WKC_CTRL | WKC_SHIFT,
"invisibility_houses", GHK_TOGGLE_INVISIBILITY + 2),
507 Hotkey(
'4' | WKC_CTRL | WKC_SHIFT,
"invisibility_industries", GHK_TOGGLE_INVISIBILITY + 3),
508 Hotkey(
'5' | WKC_CTRL | WKC_SHIFT,
"invisibility_buildings", GHK_TOGGLE_INVISIBILITY + 4),
509 Hotkey(
'6' | WKC_CTRL | WKC_SHIFT,
"invisibility_bridges", GHK_TOGGLE_INVISIBILITY + 5),
510 Hotkey(
'7' | WKC_CTRL | WKC_SHIFT,
"invisibility_structures", GHK_TOGGLE_INVISIBILITY + 6),
511 Hotkey(
'8' | WKC_CTRL | WKC_SHIFT,
"invisibility_catenary", GHK_TOGGLE_INVISIBILITY + 7),
512 Hotkey(
'X' | WKC_CTRL,
"transparency_toolbar", GHK_TRANSPARENCY_TOOLBAR),
513 Hotkey(
'X',
"toggle_transparency", GHK_TRANSPARANCY),
514 #ifdef ENABLE_NETWORK
515 Hotkey(_ghk_chat_keys,
"chat", GHK_CHAT),
516 Hotkey(_ghk_chat_all_keys,
"chat_all", GHK_CHAT_ALL),
517 Hotkey(_ghk_chat_company_keys,
"chat_company", GHK_CHAT_COMPANY),
518 Hotkey(_ghk_chat_server_keys,
"chat_server", GHK_CHAT_SERVER),
522 HotkeyList MainWindow::hotkeys(
"global", global_hotkeys);
528 _nested_main_window_widgets,
lengthof(_nested_main_window_widgets),
539 int num = MainWindow::hotkeys.
CheckMatch(keycode);
540 return num == GHK_QUIT;
544 void ShowSelectGameWindow();
551 for (uint i = 0; i != 16; i++) {
561 switch (_game_mode) {
562 default: NOT_REACHED();
564 ShowSelectGameWindow();
582 if (_game_mode == GM_EDITOR)
return;