OpenTTD
main_gui.cpp
Go to the documentation of this file.
1 /* $Id$ */
2 
3 /*
4  * This file is part of OpenTTD.
5  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
6  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
8  */
9 
12 #include "stdafx.h"
13 #include "currency.h"
14 #include "spritecache.h"
15 #include "window_gui.h"
16 #include "window_func.h"
17 #include "textbuf_gui.h"
18 #include "viewport_func.h"
19 #include "command_func.h"
20 #include "console_gui.h"
21 #include "progress.h"
22 #include "transparency_gui.h"
23 #include "map_func.h"
24 #include "sound_func.h"
25 #include "transparency.h"
26 #include "strings_func.h"
27 #include "zoom_func.h"
28 #include "company_base.h"
29 #include "company_func.h"
30 #include "toolbar_gui.h"
31 #include "statusbar_gui.h"
33 #include "tilehighlight_func.h"
34 #include "hotkeys.h"
35 #include "guitimer_func.h"
36 
37 #include "saveload/saveload.h"
38 
39 #include "widgets/main_widget.h"
40 
41 #include "network/network.h"
42 #include "network/network_func.h"
43 #include "network/network_gui.h"
44 #include "network/network_base.h"
45 
46 #include "table/sprites.h"
47 #include "table/strings.h"
48 
49 #include "safeguards.h"
50 
51 static int _rename_id = 1;
52 static int _rename_what = -1;
53 
54 void CcGiveMoney(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
55 {
56 #ifdef ENABLE_NETWORK
57  if (result.Failed() || !_settings_game.economy.give_money) return;
58 
59  /* Inform the company of the action of one of its clients (controllers). */
60  char msg[64];
61  SetDParam(0, p2);
62  GetString(msg, STR_COMPANY_NAME, lastof(msg));
63 
64  if (!_network_server) {
65  NetworkClientSendChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, p2, msg, p1);
66  } else {
67  NetworkServerSendChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, p2, msg, CLIENT_ID_SERVER, p1);
68  }
69 #endif /* ENABLE_NETWORK */
70 }
71 
72 void HandleOnEditText(const char *str)
73 {
74  switch (_rename_what) {
75 #ifdef ENABLE_NETWORK
76  case 3: { // Give money, you can only give money in excess of loan
78  if (c == NULL) break;
79  Money money = min(c->money - c->current_loan, (Money)(atoi(str) / _currency->rate));
80 
81  uint32 money_c = Clamp(ClampToI32(money), 0, 20000000); // Clamp between 20 million and 0
82 
83  /* Give 'id' the money, and subtract it from ourself */
84  DoCommandP(0, money_c, _rename_id, CMD_GIVE_MONEY | CMD_MSG(STR_ERROR_INSUFFICIENT_FUNDS), CcGiveMoney, str);
85  break;
86  }
87 #endif /* ENABLE_NETWORK */
88  default: NOT_REACHED();
89  }
90 
91  _rename_id = _rename_what = -1;
92 }
93 
104 bool HandlePlacePushButton(Window *w, int widget, CursorID cursor, HighLightStyle mode)
105 {
106  if (w->IsWidgetDisabled(widget)) return false;
107 
108  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
109  w->SetDirty();
110 
111  if (w->IsWidgetLowered(widget)) {
113  return false;
114  }
115 
116  SetObjectToPlace(cursor, PAL_NONE, mode, w->window_class, w->window_number);
117  w->LowerWidget(widget);
118  return true;
119 }
120 
121 
122 void CcPlaySound_EXPLOSION(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
123 {
124  if (result.Succeeded() && _settings_client.sound.confirm) SndPlayTileFx(SND_12_EXPLOSION, tile);
125 }
126 
127 #ifdef ENABLE_NETWORK
128 void ShowNetworkGiveMoneyWindow(CompanyID company)
129 {
130  _rename_id = company;
131  _rename_what = 3;
132  ShowQueryString(STR_EMPTY, STR_NETWORK_GIVE_MONEY_CAPTION, 30, NULL, CS_NUMERAL, QSF_NONE);
133 }
134 #endif /* ENABLE_NETWORK */
135 
136 
145 {
146  ViewPort *vp;
147 
148  assert(w != NULL);
149  vp = w->viewport;
150 
151  switch (how) {
152  case ZOOM_NONE:
153  /* On initialisation of the viewport we don't do anything. */
154  break;
155 
156  case ZOOM_IN:
157  if (vp->zoom <= _settings_client.gui.zoom_min) return false;
158  vp->zoom = (ZoomLevel)((int)vp->zoom - 1);
159  vp->virtual_width >>= 1;
160  vp->virtual_height >>= 1;
161 
162  w->viewport->scrollpos_x += vp->virtual_width >> 1;
163  w->viewport->scrollpos_y += vp->virtual_height >> 1;
167  break;
168  case ZOOM_OUT:
169  if (vp->zoom >= _settings_client.gui.zoom_max) return false;
170  vp->zoom = (ZoomLevel)((int)vp->zoom + 1);
171 
172  w->viewport->scrollpos_x -= vp->virtual_width >> 1;
173  w->viewport->scrollpos_y -= vp->virtual_height >> 1;
176 
177  vp->virtual_width <<= 1;
178  vp->virtual_height <<= 1;
180  break;
181  }
182  if (vp != NULL) { // the vp can be null when how == ZOOM_NONE
184  vp->virtual_top = w->viewport->scrollpos_y;
185  }
186  /* Update the windows that have zoom-buttons to perhaps disable their buttons */
187  w->InvalidateData();
188  return true;
189 }
190 
191 void ZoomInOrOutToCursorWindow(bool in, Window *w)
192 {
193  assert(w != NULL);
194 
195  if (_game_mode != GM_MENU) {
196  ViewPort *vp = w->viewport;
197  if ((in && vp->zoom <= _settings_client.gui.zoom_min) || (!in && vp->zoom >= _settings_client.gui.zoom_max)) return;
198 
199  Point pt = GetTileZoomCenterWindow(in, w);
200  if (pt.x != -1) {
201  ScrollWindowTo(pt.x, pt.y, -1, w, true);
202 
204  }
205  }
206 }
207 
208 static const struct NWidgetPart _nested_main_window_widgets[] = {
209  NWidget(NWID_VIEWPORT, INVALID_COLOUR, WID_M_VIEWPORT), SetResize(1, 1),
210 };
211 
212 enum {
213  GHK_QUIT,
214  GHK_ABANDON,
215  GHK_CONSOLE,
216  GHK_BOUNDING_BOXES,
217  GHK_DIRTY_BLOCKS,
218  GHK_CENTER,
219  GHK_CENTER_ZOOM,
220  GHK_RESET_OBJECT_TO_PLACE,
221  GHK_DELETE_WINDOWS,
222  GHK_DELETE_NONVITAL_WINDOWS,
223  GHK_REFRESH_SCREEN,
224  GHK_CRASH,
225  GHK_MONEY,
226  GHK_UPDATE_COORDS,
227  GHK_TOGGLE_TRANSPARENCY,
228  GHK_TOGGLE_INVISIBILITY = GHK_TOGGLE_TRANSPARENCY + 9,
229  GHK_TRANSPARENCY_TOOLBAR = GHK_TOGGLE_INVISIBILITY + 8,
230  GHK_TRANSPARANCY,
231  GHK_CHAT,
232  GHK_CHAT_ALL,
233  GHK_CHAT_COMPANY,
234  GHK_CHAT_SERVER,
235 };
236 
238 {
239  GUITimer refresh;
240 
241  /* Refresh times in milliseconds */
242  static const uint LINKGRAPH_REFRESH_PERIOD = 7650;
243  static const uint LINKGRAPH_DELAY = 450;
244 
245  MainWindow(WindowDesc *desc) : Window(desc)
246  {
247  this->InitNested(0);
248  CLRBITS(this->flags, WF_WHITE_BORDER);
249  ResizeWindow(this, _screen.width, _screen.height);
250 
251  NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_M_VIEWPORT);
252  nvp->InitializeViewport(this, TileXY(32, 32), ZOOM_LVL_VIEWPORT);
253 
254  this->viewport->overlay = new LinkGraphOverlay(this, WID_M_VIEWPORT, 0, 0, 3);
255  this->refresh.SetInterval(LINKGRAPH_DELAY);
256  }
257 
258  virtual void OnRealtimeTick(uint delta_ms)
259  {
260  if (!this->refresh.Elapsed(delta_ms)) return;
261 
262  this->refresh.SetInterval(LINKGRAPH_REFRESH_PERIOD);
263 
264  if (this->viewport->overlay->GetCargoMask() == 0 ||
265  this->viewport->overlay->GetCompanyMask() == 0) {
266  return;
267  }
268 
269  this->viewport->overlay->RebuildCache();
270  this->GetWidget<NWidgetBase>(WID_M_VIEWPORT)->SetDirty(this);
271  }
272 
273  virtual void OnPaint()
274  {
275  this->DrawWidgets();
276  if (_game_mode == GM_MENU) {
277  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};
278  static const uint LETTER_SPACING = 10;
279  int name_width = (lengthof(title_sprites) - 1) * LETTER_SPACING;
280 
281  for (uint i = 0; i < lengthof(title_sprites); i++) {
282  name_width += GetSpriteSize(title_sprites[i]).width;
283  }
284  int off_x = (this->width - name_width) / 2;
285 
286  for (uint i = 0; i < lengthof(title_sprites); i++) {
287  DrawSprite(title_sprites[i], PAL_NONE, off_x, 50);
288  off_x += GetSpriteSize(title_sprites[i]).width + LETTER_SPACING;
289  }
290  }
291  }
292 
293  virtual EventState OnHotkey(int hotkey)
294  {
295  if (hotkey == GHK_QUIT) {
296  HandleExitGameRequest();
297  return ES_HANDLED;
298  }
299 
300  /* Disable all key shortcuts, except quit shortcuts when
301  * generating the world, otherwise they create threading
302  * problem during the generating, resulting in random
303  * assertions that are hard to trigger and debug */
304  if (HasModalProgress()) return ES_NOT_HANDLED;
305 
306  switch (hotkey) {
307  case GHK_ABANDON:
308  /* No point returning from the main menu to itself */
309  if (_game_mode == GM_MENU) return ES_HANDLED;
311  DoExitSave();
313  } else {
314  AskExitToGameMenu();
315  }
316  return ES_HANDLED;
317 
318  case GHK_CONSOLE:
319  IConsoleSwitch();
320  return ES_HANDLED;
321 
322  case GHK_BOUNDING_BOXES:
324  return ES_HANDLED;
325 
326  case GHK_DIRTY_BLOCKS:
328  return ES_HANDLED;
329  }
330 
331  if (_game_mode == GM_MENU) return ES_NOT_HANDLED;
332 
333  switch (hotkey) {
334  case GHK_CENTER:
335  case GHK_CENTER_ZOOM: {
336  Point pt = GetTileBelowCursor();
337  if (pt.x != -1) {
338  bool instant = (hotkey == GHK_CENTER_ZOOM && this->viewport->zoom != _settings_client.gui.zoom_min);
339  if (hotkey == GHK_CENTER_ZOOM) MaxZoomInOut(ZOOM_IN, this);
340  ScrollMainWindowTo(pt.x, pt.y, -1, instant);
341  }
342  break;
343  }
344 
345  case GHK_RESET_OBJECT_TO_PLACE: ResetObjectToPlace(); break;
346  case GHK_DELETE_WINDOWS: DeleteNonVitalWindows(); break;
347  case GHK_DELETE_NONVITAL_WINDOWS: DeleteAllNonVitalWindows(); break;
348  case GHK_REFRESH_SCREEN: MarkWholeScreenDirty(); break;
349 
350  case GHK_CRASH: // Crash the game
351  *(volatile byte *)0 = 0;
352  break;
353 
354  case GHK_MONEY: // Gimme money
355  /* You can only cheat for money in single player. */
356  if (!_networking) DoCommandP(0, 10000000, 0, CMD_MONEY_CHEAT);
357  break;
358 
359  case GHK_UPDATE_COORDS: // Update the coordinates of all station signs
361  break;
362 
363  case GHK_TOGGLE_TRANSPARENCY:
364  case GHK_TOGGLE_TRANSPARENCY + 1:
365  case GHK_TOGGLE_TRANSPARENCY + 2:
366  case GHK_TOGGLE_TRANSPARENCY + 3:
367  case GHK_TOGGLE_TRANSPARENCY + 4:
368  case GHK_TOGGLE_TRANSPARENCY + 5:
369  case GHK_TOGGLE_TRANSPARENCY + 6:
370  case GHK_TOGGLE_TRANSPARENCY + 7:
371  case GHK_TOGGLE_TRANSPARENCY + 8:
372  /* Transparency toggle hot keys */
373  ToggleTransparency((TransparencyOption)(hotkey - GHK_TOGGLE_TRANSPARENCY));
375  break;
376 
377  case GHK_TOGGLE_INVISIBILITY:
378  case GHK_TOGGLE_INVISIBILITY + 1:
379  case GHK_TOGGLE_INVISIBILITY + 2:
380  case GHK_TOGGLE_INVISIBILITY + 3:
381  case GHK_TOGGLE_INVISIBILITY + 4:
382  case GHK_TOGGLE_INVISIBILITY + 5:
383  case GHK_TOGGLE_INVISIBILITY + 6:
384  case GHK_TOGGLE_INVISIBILITY + 7:
385  /* Invisibility toggle hot keys */
386  ToggleInvisibilityWithTransparency((TransparencyOption)(hotkey - GHK_TOGGLE_INVISIBILITY));
388  break;
389 
390  case GHK_TRANSPARENCY_TOOLBAR:
392  break;
393 
394  case GHK_TRANSPARANCY:
396  break;
397 
398 #ifdef ENABLE_NETWORK
399  case GHK_CHAT: // smart chat; send to team if any, otherwise to all
400  if (_networking) {
402  if (cio == NULL) break;
403 
405  }
406  break;
407 
408  case GHK_CHAT_ALL: // send text message to all clients
410  break;
411 
412  case GHK_CHAT_COMPANY: // send text to all team mates
413  if (_networking) {
415  if (cio == NULL) break;
416 
418  }
419  break;
420 
421  case GHK_CHAT_SERVER: // send text to the server
422  if (_networking && !_network_server) {
424  }
425  break;
426 #endif
427 
428  default: return ES_NOT_HANDLED;
429  }
430  return ES_HANDLED;
431  }
432 
433  virtual void OnScroll(Point delta)
434  {
435  this->viewport->scrollpos_x += ScaleByZoom(delta.x, this->viewport->zoom);
436  this->viewport->scrollpos_y += ScaleByZoom(delta.y, this->viewport->zoom);
439  this->refresh.SetInterval(LINKGRAPH_DELAY);
440  }
441 
442  virtual void OnMouseWheel(int wheel)
443  {
445  ZoomInOrOutToCursorWindow(wheel < 0, this);
446  }
447  }
448 
449  virtual void OnResize()
450  {
451  if (this->viewport != NULL) {
452  NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_M_VIEWPORT);
453  nvp->UpdateViewportCoordinates(this);
454  this->refresh.SetInterval(LINKGRAPH_DELAY);
455  }
456  }
457 
463  virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
464  {
465  if (!gui_scope) return;
466  /* Forward the message to the appropriate toolbar (ingame or scenario editor) */
467  InvalidateWindowData(WC_MAIN_TOOLBAR, 0, data, true);
468  }
469 
470  static HotkeyList hotkeys;
471 };
472 
473 const uint16 _ghk_quit_keys[] = {'Q' | WKC_CTRL, 'Q' | WKC_META, 0};
474 const uint16 _ghk_abandon_keys[] = {'W' | WKC_CTRL, 'W' | WKC_META, 0};
475 const uint16 _ghk_chat_keys[] = {WKC_RETURN, 'T', 0};
476 const uint16 _ghk_chat_all_keys[] = {WKC_SHIFT | WKC_RETURN, WKC_SHIFT | 'T', 0};
477 const uint16 _ghk_chat_company_keys[] = {WKC_CTRL | WKC_RETURN, WKC_CTRL | 'T', 0};
478 const uint16 _ghk_chat_server_keys[] = {WKC_CTRL | WKC_SHIFT | WKC_RETURN, WKC_CTRL | WKC_SHIFT | 'T', 0};
479 
480 static Hotkey global_hotkeys[] = {
481  Hotkey(_ghk_quit_keys, "quit", GHK_QUIT),
482  Hotkey(_ghk_abandon_keys, "abandon", GHK_ABANDON),
483  Hotkey(WKC_BACKQUOTE, "console", GHK_CONSOLE),
484  Hotkey('B' | WKC_CTRL, "bounding_boxes", GHK_BOUNDING_BOXES),
485  Hotkey('I' | WKC_CTRL, "dirty_blocks", GHK_DIRTY_BLOCKS),
486  Hotkey('C', "center", GHK_CENTER),
487  Hotkey('Z', "center_zoom", GHK_CENTER_ZOOM),
488  Hotkey(WKC_ESC, "reset_object_to_place", GHK_RESET_OBJECT_TO_PLACE),
489  Hotkey(WKC_DELETE, "delete_windows", GHK_DELETE_WINDOWS),
490  Hotkey(WKC_DELETE | WKC_SHIFT, "delete_all_windows", GHK_DELETE_NONVITAL_WINDOWS),
491  Hotkey('R' | WKC_CTRL, "refresh_screen", GHK_REFRESH_SCREEN),
492 #if defined(_DEBUG)
493  Hotkey('0' | WKC_ALT, "crash_game", GHK_CRASH),
494  Hotkey('1' | WKC_ALT, "money", GHK_MONEY),
495  Hotkey('2' | WKC_ALT, "update_coordinates", GHK_UPDATE_COORDS),
496 #endif
497  Hotkey('1' | WKC_CTRL, "transparency_signs", GHK_TOGGLE_TRANSPARENCY),
498  Hotkey('2' | WKC_CTRL, "transparency_trees", GHK_TOGGLE_TRANSPARENCY + 1),
499  Hotkey('3' | WKC_CTRL, "transparency_houses", GHK_TOGGLE_TRANSPARENCY + 2),
500  Hotkey('4' | WKC_CTRL, "transparency_industries", GHK_TOGGLE_TRANSPARENCY + 3),
501  Hotkey('5' | WKC_CTRL, "transparency_buildings", GHK_TOGGLE_TRANSPARENCY + 4),
502  Hotkey('6' | WKC_CTRL, "transparency_bridges", GHK_TOGGLE_TRANSPARENCY + 5),
503  Hotkey('7' | WKC_CTRL, "transparency_structures", GHK_TOGGLE_TRANSPARENCY + 6),
504  Hotkey('8' | WKC_CTRL, "transparency_catenary", GHK_TOGGLE_TRANSPARENCY + 7),
505  Hotkey('9' | WKC_CTRL, "transparency_loading", GHK_TOGGLE_TRANSPARENCY + 8),
506  Hotkey('1' | WKC_CTRL | WKC_SHIFT, "invisibility_signs", GHK_TOGGLE_INVISIBILITY),
507  Hotkey('2' | WKC_CTRL | WKC_SHIFT, "invisibility_trees", GHK_TOGGLE_INVISIBILITY + 1),
508  Hotkey('3' | WKC_CTRL | WKC_SHIFT, "invisibility_houses", GHK_TOGGLE_INVISIBILITY + 2),
509  Hotkey('4' | WKC_CTRL | WKC_SHIFT, "invisibility_industries", GHK_TOGGLE_INVISIBILITY + 3),
510  Hotkey('5' | WKC_CTRL | WKC_SHIFT, "invisibility_buildings", GHK_TOGGLE_INVISIBILITY + 4),
511  Hotkey('6' | WKC_CTRL | WKC_SHIFT, "invisibility_bridges", GHK_TOGGLE_INVISIBILITY + 5),
512  Hotkey('7' | WKC_CTRL | WKC_SHIFT, "invisibility_structures", GHK_TOGGLE_INVISIBILITY + 6),
513  Hotkey('8' | WKC_CTRL | WKC_SHIFT, "invisibility_catenary", GHK_TOGGLE_INVISIBILITY + 7),
514  Hotkey('X' | WKC_CTRL, "transparency_toolbar", GHK_TRANSPARENCY_TOOLBAR),
515  Hotkey('X', "toggle_transparency", GHK_TRANSPARANCY),
516 #ifdef ENABLE_NETWORK
517  Hotkey(_ghk_chat_keys, "chat", GHK_CHAT),
518  Hotkey(_ghk_chat_all_keys, "chat_all", GHK_CHAT_ALL),
519  Hotkey(_ghk_chat_company_keys, "chat_company", GHK_CHAT_COMPANY),
520  Hotkey(_ghk_chat_server_keys, "chat_server", GHK_CHAT_SERVER),
521 #endif
522  HOTKEY_LIST_END
523 };
524 HotkeyList MainWindow::hotkeys("global", global_hotkeys);
525 
526 static WindowDesc _main_window_desc(
527  WDP_MANUAL, NULL, 0, 0,
529  0,
530  _nested_main_window_widgets, lengthof(_nested_main_window_widgets),
531  &MainWindow::hotkeys
532 );
533 
539 bool IsQuitKey(uint16 keycode)
540 {
541  int num = MainWindow::hotkeys.CheckMatch(keycode);
542  return num == GHK_QUIT;
543 }
544 
545 
546 void ShowSelectGameWindow();
547 
552 {
553  for (uint i = 0; i != 16; i++) {
554  const byte *b = GetNonSprite(PALETTE_RECOLOUR_START + i, ST_RECOLOUR);
555 
556  assert(b);
557  memcpy(_colour_gradient[i], b + 0xC6, sizeof(_colour_gradient[i]));
558  }
559 
560  new MainWindow(&_main_window_desc);
561 
562  /* XXX: these are not done */
563  switch (_game_mode) {
564  default: NOT_REACHED();
565  case GM_MENU:
566  ShowSelectGameWindow();
567  break;
568 
569  case GM_NORMAL:
570  case GM_EDITOR:
572  break;
573  }
574 }
575 
580 {
581  AllocateToolbar();
582 
583  /* Status bad only for normal games */
584  if (_game_mode == GM_EDITOR) return;
585 
586  ShowStatusBar();
587 }
588 
594 {
595  _cur_resolution.width = _screen.width;
596  _cur_resolution.height = _screen.height;
597  ScreenSizeChanged();
598  RelocateAllWindows(_screen.width, _screen.height);
600 }
EventState
State of handling an event.
Definition: window_type.h:713
Nested widget containing a viewport.
Definition: widget_type.h:81
void SetupColoursAndInitialWindow()
Initialise the default colours (remaps and the likes), and load the main windows. ...
Definition: main_gui.cpp:551
bool DoZoomInOutWindow(ZoomStateChange how, Window *w)
Zooms a viewport in a window in or out.
Definition: main_gui.cpp:144
Functions related to OTTD&#39;s strings.
Send message/notice to all clients (All)
Definition: network_type.h:83
GameSettings _settings_game
Game settings of a running game or the scenario editor.
Definition: settings.cpp:77
Definition of stuff that is very close to a company, like the company struct itself.
static Titem * GetIfValid(size_t index)
Returns Titem with given index.
Definition: pool_type.hpp:257
bool _networking
are we in networking mode?
Definition: network.cpp:56
virtual void OnResize()
Called after the window got resized.
Definition: main_gui.cpp:449
int virtual_left
Virtual left coordinate.
Definition: viewport_type.h:30
Container for all information known about a client.
Definition: network_base.h:27
static NWidgetPart SetResize(int16 dx, int16 dy)
Widget part function for setting the resize step.
Definition: widget_type.h:930
Window(WindowDesc *desc)
Empty constructor, initialization has been moved to InitNested() called from the constructor of the d...
Definition: window.cpp:1848
ZoomLevelByte zoom_max
maximum zoom out level
All data for a single hotkey.
Definition: hotkeys.h:24
uint32 GetCompanyMask()
Get a bitmask of the currently shown companies.
Definition: linkgraph_gui.h:68
High level window description.
Definition: window_gui.h:168
EconomySettings economy
settings to change the economy
WindowFlags flags
Window flags.
Definition: window_gui.h:305
Zoom out (get helicopter view).
Definition: viewport_type.h:64
void DrawWidgets() const
Paint all widgets of a window.
Definition: widget.cpp:604
Switch to game intro menu.
Definition: openttd.h:32
Hotkey related functions.
GUIs related to networking.
Functions to handle different currencies.
void UpdateViewportCoordinates(Window *w)
Update the position and size of the viewport (after eg a resize).
Definition: widget.cpp:1936
bool IsQuitKey(uint16 keycode)
Does the given keycode match one of the keycodes bound to &#39;quit game&#39;?
Definition: main_gui.cpp:539
The passed event is not handled.
Definition: window_type.h:715
bool Elapsed(uint delta)
Test if a timer has elapsed.
Definition: guitimer_func.h:57
byte _colour_gradient[COLOUR_END][8]
All 16 colour gradients 8 colours per gradient from darkest (0) to lightest (7)
Definition: gfx.cpp:53
void ShowQueryString(StringID str, StringID caption, uint maxsize, Window *parent, CharSetFilter afilter, QueryStringFlags flags)
Show a query popup window with a textbox in it.
Definition: misc_gui.cpp:1064
int virtual_height
height << zoom
Definition: viewport_type.h:33
static int ScaleByZoom(int value, ZoomLevel zoom)
Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL) When shifting right...
Definition: zoom_func.h:24
bool give_money
allow giving other companies money
Send message/notice to only a certain client (Private)
Definition: network_type.h:85
Dimension _cur_resolution
The current resolution.
Definition: driver.cpp:24
Zoom in (get more detailed view).
Definition: viewport_type.h:63
void DoExitSave()
Do a save when exiting the game (_settings_client.gui.autosave_on_exit)
Definition: saveload.cpp:2787
void NetworkClientSendChat(NetworkAction action, DestType type, int dest, const char *msg, int64 data)
Send a chat message.
#define lastof(x)
Get the last element of an fixed size array.
Definition: depend.cpp:50
Stuff related to the text buffer GUI.
Base core network types and some helper functions to access them.
void InitializeViewport(Window *w, uint32 follow_flags, ZoomLevel zoom)
Initialize the viewport of the window.
Definition: widget.cpp:1927
#define CLRBITS(x, y)
Clears several bits in a variable.
Common return value for all commands.
Definition: command_type.h:25
static const VehicleID INVALID_VEHICLE
Constant representing a non-existing vehicle.
Definition: vehicle_type.h:59
void DeleteAllNonVitalWindows()
It is possible that a stickied window gets to a position where the &#39;close&#39; button is outside the gami...
Definition: window.cpp:3354
Nested widget to display a viewport in a window.
Definition: widget_type.h:575
void RebuildCache()
Rebuild the cache and recalculate which links and stations to be shown.
Functions related to maps.
Functions, definitions and such used only by the GUI.
Servers always have this ID.
Definition: network_type.h:45
void ToggleBoundingBoxes()
Toggle drawing of sprites&#39; bounding boxes.
CompanyByte _local_company
Company controlled by the human player at this client. Can also be COMPANY_SPECTATOR.
Definition: company_cmd.cpp:46
void AllocateToolbar()
Allocate the toolbar.
Partial widget specification to allow NWidgets to be written nested.
Definition: widget_type.h:910
Functions related to (drawing on) viewports.
static void ResetRestoreAllTransparency()
Set or clear all non-locked transparency options.
Definition: transparency.h:115
Declaration of linkgraph overlay GUI.
Data structure for an opened window.
Definition: window_gui.h:271
virtual void OnRealtimeTick(uint delta_ms)
Called periodically.
Definition: main_gui.cpp:258
void InitNested(WindowNumber number=0)
Perform complete initialization of the Window with nested widgets, to allow use.
Definition: window.cpp:1838
Main window; Window numbers:
Definition: window_type.h:46
Only numeric ones.
Definition: string_type.h:28
Functions/types related to saving and loading games.
CompanyID client_playas
As which company is this client playing (CompanyID)
Definition: network_base.h:31
GUI Timers.
Types related to the main widgets.
bool IsWidgetLowered(byte widget_index) const
Gets the lowered state of a widget.
Definition: window_gui.h:488
SoundSettings sound
sound effect settings
Main window viewport.
Definition: main_widget.h:17
void UpdateAllVirtCoords()
Update the viewport coordinates of all signs.
Definition: afterload.cpp:219
Money current_loan
Amount of money borrowed from the bank.
Definition: company_base.h:66
void RelocateAllWindows(int neww, int newh)
Relocate all windows to fit the new size of the game application screen.
Definition: window.cpp:3517
ClientID _network_own_client_id
Our client identifier.
Definition: network.cpp:63
ClientSettings _settings_client
The current settings for this game.
Definition: settings.cpp:76
uint8 scrollwheel_scrolling
scrolling using the scroll wheel?
Functions related to modal progress.
bool Succeeded() const
Did this command succeed?
Definition: command_type.h:152
Definition of base types and functions in a cross-platform compatible way.
A number of safeguards to prevent using unsafe methods.
List of hotkeys for a window.
Definition: hotkeys.h:42
bool IsWidgetDisabled(byte widget_index) const
Gets the enabled/disabled status of a widget.
Definition: window_gui.h:416
int32 scrollpos_x
Currently shown x coordinate (virtual screen coordinate of topleft corner of the viewport).
Definition: window_gui.h:260
GUI functions related to transparency.
void LowerWidget(byte widget_index)
Marks a widget as lowered.
Definition: window_gui.h:469
GUI related functions in the console.
int virtual_width
width << zoom
Definition: viewport_type.h:32
static NWidgetPart NWidget(WidgetType tp, Colours col, int16 idx=-1)
Widget part function for starting a new &#39;real&#39; widget.
Definition: widget_type.h:1114
bool autosave_on_exit
save an autosave when you quit the game, but do not ask "Do you really want to quit?"
Money money
Money owned by the company.
Definition: company_base.h:64
Basic functions/variables used all over the place.
give money to another company
Definition: command_type.h:305
bool DoCommandP(const CommandContainer *container, bool my_cmd)
Shortcut for the long DoCommandP when having a container with the data.
Definition: command.cpp:531
static void ToggleTransparency(TransparencyOption to)
Toggle the transparency option bit.
Definition: transparency.h:71
#define lengthof(x)
Return the length of an fixed size array.
Definition: depend.cpp:42
VehicleID follow_vehicle
VehicleID to follow if following a vehicle, INVALID_VEHICLE otherwise.
Definition: window_gui.h:259
static T min(const T a, const T b)
Returns the minimum of two values.
Definition: math_func.hpp:42
do the money cheat
Definition: command_type.h:274
virtual void OnInvalidateData(int data=0, bool gui_scope=true)
Some data on this window has become invalid.
Definition: main_gui.cpp:463
Functions related to sound.
Functions to cache sprites in memory.
bool Failed() const
Did this command fail?
Definition: command_type.h:161
static void MaxZoomInOut(ZoomStateChange how, Window *w)
Zoom a viewport as far as possible in the given direction.
Definition: viewport_func.h:45
Default zoom level for viewports.
Definition: zoom_type.h:35
int32 dest_scrollpos_y
Current destination y coordinate to display (virtual screen coordinate of topleft corner of the viewp...
Definition: window_gui.h:263
virtual void OnMouseWheel(int wheel)
The mouse wheel has been turned.
Definition: main_gui.cpp:442
void ToggleDirtyBlocks()
Toggle drawing of the dirty blocks.
bool NetworkClientPreferTeamChat(const NetworkClientInfo *cio)
Tell whether the client has team members where he/she can chat to.
static T Clamp(const T a, const T min, const T max)
Clamp a value between an interval.
Definition: math_func.hpp:139
void SetDirty() const
Mark entire window as dirty (in need of re-paint)
Definition: window.cpp:965
No window, redirects to WC_MAIN_WINDOW.
Definition: window_type.h:40
ZoomLevelByte zoom_min
minimum zoom out level
void DeleteNonVitalWindows()
Try to delete a non-vital window.
Definition: window.cpp:3325
ZoomLevel
All zoom levels we know.
Definition: zoom_type.h:21
static int32 ClampToI32(const int64 a)
Reduce a signed 64-bit int to a signed 32-bit one.
Definition: math_func.hpp:203
Functions related to companies.
bool ScrollMainWindowTo(int x, int y, int z, bool instant)
Scrolls the main window to given coordinates.
int32 dest_scrollpos_x
Current destination x coordinate to display (virtual screen coordinate of topleft corner of the viewp...
Definition: window_gui.h:262
static const PaletteID PALETTE_RECOLOUR_START
First recolour sprite for company colours.
Definition: sprites.h:1543
void NetworkServerSendChat(NetworkAction action, DestType type, int dest, const char *msg, ClientID from_id, int64 data=0, bool from_admin=false)
Send an actual chat message.
GUISettings gui
settings related to the GUI
Data structure for viewport, display of a part of the world.
Definition: viewport_type.h:24
uint32 SpriteID
The number of a sprite, without mapping bits and colourtables.
Definition: gfx_type.h:19
uint32 TileIndex
The index/ID of a Tile.
Definition: tile_type.h:80
bool HandlePlacePushButton(Window *w, int widget, CursorID cursor, HighLightStyle mode)
This code is shared for the majority of the pushbuttons.
Definition: main_gui.cpp:104
void GameSizeChanged()
Size of the application screen changed.
Definition: main_gui.cpp:593
Functions related to transparency.
Functions related to zooming.
SwitchMode _switch_mode
The next mainloop command.
Definition: gfx.cpp:47
bool confirm
Play sound effect on succesful constructions or other actions.
Functions related to commands.
Network functions used by other parts of OpenTTD.
bool _network_server
network-server is active
Definition: network.cpp:57
uint32 CursorID
The number of the cursor (sprite)
Definition: gfx_type.h:21
Main toolbar (the long bar at the top); Window numbers:
Definition: window_type.h:53
Coordinates of a point in 2D.
Dimension GetSpriteSize(SpriteID sprid, Point *offset, ZoomLevel zoom)
Get the size of a sprite.
Definition: gfx.cpp:768
void SetObjectToPlace(CursorID icon, PaletteID pal, HighLightStyle mode, WindowClass window_class, WindowNumber window_num)
Change the cursor and mouse click/drag handling to a mode for performing special operations like tile...
Definition: viewport.cpp:3030
HighLightStyle
Highlighting draw styles.
int CheckMatch(uint16 keycode, bool global_only=false) const
Check if a keycode is bound to something.
Definition: hotkeys.cpp:301
ZoomLevel zoom
The zoom level of the viewport.
Definition: viewport_type.h:35
ZoomStateChange
Directions of zooming.
Definition: viewport_type.h:62
int width
width of the window (number of pixels to the right in x direction)
Definition: window_gui.h:314
void ShowStatusBar()
Show our status bar.
int virtual_top
Virtual top coordinate.
Definition: viewport_type.h:31
#define CMD_MSG(x)
Used to combine a StringID with the command.
Definition: command_type.h:369
WindowClass window_class
Window class.
Definition: window_gui.h:306
void IConsoleSwitch()
Toggle in-game console between opened and closed.
void ResetObjectToPlace()
Reset the cursor and mouse mode handling back to default (normal cursor, only clicking in windows)...
Definition: viewport.cpp:3075
Recolour sprite.
Definition: gfx_type.h:301
The passed event is handled.
Definition: window_type.h:714
WindowNumber window_number
Window number within the window class.
Definition: window_gui.h:307
Functions related to tile highlights.
Owner
Enum for all companies/owners.
Definition: company_type.h:20
Window functions not directly related to making/drawing windows.
static NetworkClientInfo * GetByClientID(ClientID client_id)
Return the CI given it&#39;s client-identifier.
Definition: network.cpp:126
Manually align the window (so no automatic location finding)
Definition: window_gui.h:155
ViewportData * viewport
Pointer to viewport data, if present.
Definition: window_gui.h:321
Functions, definitions and such used only by the GUI.
void ResizeWindow(Window *w, int delta_x, int delta_y, bool clamp_to_screen)
Resize the window.
Definition: window.cpp:2123
CargoTypes GetCargoMask()
Get a bitmask of the currently shown cargoes.
Definition: linkgraph_gui.h:65
Window white border counter bit mask.
Definition: window_gui.h:242
void ShowVitalWindows()
Show the vital in-game windows.
Definition: main_gui.cpp:579
virtual void OnPaint()
The window must be repainted.
Definition: main_gui.cpp:273
int32 scrollpos_y
Currently shown y coordinate (virtual screen coordinate of topleft corner of the viewport).
Definition: window_gui.h:261
Send message/notice to everyone playing the same company (Team)
Definition: network_type.h:84
static void ToggleInvisibilityWithTransparency(TransparencyOption to)
Toggles between invisible and solid state.
Definition: transparency.h:93
Hack, used to update the button status.
Definition: viewport_type.h:65
bool ScrollWindowTo(int x, int y, int z, Window *w, bool instant)
Scrolls the viewport in a window to a given location.
Definition: viewport.cpp:2087
bool click_beep
Beep on a random selection of buttons.
void ShowTransparencyToolbar()
Show the transparency toolbar.
This file contains all sprite-related enums and defines.
static TileIndex TileXY(uint x, uint y)
Returns the TileIndex of a coordinate.
Definition: map_func.h:165
void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub, ZoomLevel zoom)
Draw a sprite, not in a viewport.
Definition: gfx.cpp:833
Handles drawing of links into some window.
Definition: linkgraph_gui.h:39
void ShowNetworkChatQueryWindow(DestType type, int dest)
Show the chat window.
void InvalidateData(int data=0, bool gui_scope=true)
Mark this window&#39;s data as invalid (in need of re-computing)
Definition: window.cpp:3220
static bool HasModalProgress()
Check if we are currently in a modal progress state.
Definition: progress.h:23
virtual EventState OnHotkey(int hotkey)
A hotkey has been pressed.
Definition: main_gui.cpp:293
void InvalidateWindowData(WindowClass cls, WindowNumber number, int data, bool gui_scope)
Mark window data of the window of a given class and specific window number as invalid (in need of re-...
Definition: window.cpp:3279
TransparencyOption
Transparency option bits: which position in _transparency_opt stands for which transparency.
Definition: transparency.h:24
void MarkWholeScreenDirty()
This function mark the whole screen as dirty.
Definition: gfx.cpp:1461
Stuff related to the (main) toolbar.
static void SetDParam(uint n, uint64 v)
Set a string parameter v at index n in the global string parameter array.
Definition: strings_func.h:201
virtual void OnScroll(Point delta)
Handle the request for (viewport) scrolling.
Definition: main_gui.cpp:433