src/toolbar_gui.cpp
author rubidium
Fri, 04 Jul 2008 19:00:11 +0000
changeset 11118 f66e0a4ce878
parent 11114 36a38b287c05
permissions -rw-r--r--
(svn r13676) -Fix [FS#2126]: inactive companies from old (TTD) saves could be marked active in some cases, which then loads garbage in their statistics and such.
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     2
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
     3
/** @file toolbar_gui.cpp Code related to the (main) toolbar. */
6527
f584ab6d87f8 (svn r8987) -Cleanup: doxygen changes. Again. Mostly (still) @files missing tags and (more than just) a few comments style.
belugas
parents: 6145
diff changeset
     4
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     5
#include "stdafx.h"
1891
92a3b0aa0946 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1885
diff changeset
     6
#include "openttd.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     7
#include "gui.h"
8603
88c5ce6a5215 (svn r11668) -Codechange: more refactoring aimed at reducing compile time and making it more logic where function definitions can be found.
rubidium
parents: 8602
diff changeset
     8
#include "window_gui.h"
88c5ce6a5215 (svn r11668) -Codechange: more refactoring aimed at reducing compile time and making it more logic where function definitions can be found.
rubidium
parents: 8602
diff changeset
     9
#include "window_func.h"
8720
4e60c30e2006 (svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents: 8710
diff changeset
    10
#include "viewport_func.h"
8612
6414fc21c2f3 (svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents: 8610
diff changeset
    11
#include "command_func.h"
2159
3b634157c3b2 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2150
diff changeset
    12
#include "variables.h"
2676
2ba71e034d97 (svn r3218) -Feature: Multiheaded train engines will now stay in the same train
bjarni
parents: 2652
diff changeset
    13
#include "train.h"
7353
716c6dd9322a (svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents: 7343
diff changeset
    14
#include "roadveh.h"
4668
8b6035c51188 (svn r6562) -Codechange: merged the vehicle list window widget arrays
bjarni
parents: 4634
diff changeset
    15
#include "vehicle_gui.h"
8607
d16299e657ba (svn r11672) -Codechange: refactor some stuff out of gui.h.
rubidium
parents: 8604
diff changeset
    16
#include "rail_gui.h"
d16299e657ba (svn r11672) -Codechange: refactor some stuff out of gui.h.
rubidium
parents: 8604
diff changeset
    17
#include "road_gui.h"
8636
2b158acb649c (svn r11702) -Codechange: move all date related stuff to date*.
rubidium
parents: 8635
diff changeset
    18
#include "date_func.h"
8640
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
    19
#include "vehicle_func.h"
8653
a83f7a536919 (svn r11719) -Codechange: split sound.h in a header with types and one with functions.
rubidium
parents: 8645
diff changeset
    20
#include "sound_func.h"
8701
051036216675 (svn r11768) -Codechange: move some terraform related gui stuff from main_gui.cpp to terraform_gui.cpp (and introduce terraform_gui.h). Based on a patch by Roujin.
rubidium
parents: 8692
diff changeset
    21
#include "terraform_gui.h"
8345
6caa3fdb972c (svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas
parents: 8320
diff changeset
    22
#include "transparency.h"
8610
17cc343a23dd (svn r11675) -Codechange: split the string types from the string functions.
rubidium
parents: 8607
diff changeset
    23
#include "strings_func.h"
8750
fdd6054e7bae (svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents: 8720
diff changeset
    24
#include "player_base.h"
fdd6054e7bae (svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents: 8720
diff changeset
    25
#include "player_func.h"
fdd6054e7bae (svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents: 8720
diff changeset
    26
#include "player_gui.h"
8766
c86cfa3a7580 (svn r11834) -Codechange: only include settings_type.h if needed.
rubidium
parents: 8760
diff changeset
    27
#include "settings_type.h"
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
    28
#include "toolbar_gui.h"
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
    29
#include "vehicle_base.h"
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
    30
#include "gfx_func.h"
10225
8becb17444a7 (svn r12757) -Codechange: move all cheat related stuff from all over the place to a single location.
rubidium
parents: 9222
diff changeset
    31
#include "cheat_func.h"
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
    32
#include "transparency_gui.h"
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
    33
#include "screenshot.h"
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
    34
#include "newgrf_config.h"
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
    35
#include "signs_func.h"
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
    36
#include "fios.h"
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
    37
#include "functions.h"
10684
7cc2278c2ac0 (svn r13228) -Codechange: split console.h.
rubidium
parents: 10681
diff changeset
    38
#include "console_gui.h"
10237
f14be17a032a (svn r12769) -Codechange: some coding style cleanups.
rubidium
parents: 10235
diff changeset
    39
#include "news_gui.h"
10445
2dd7d9d0a957 (svn r12987) -Codechange: split viewport and tile selection.
rubidium
parents: 10434
diff changeset
    40
#include "tilehighlight_func.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    41
8760
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8750
diff changeset
    42
#include "network/network.h"
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
    43
#include "network/network_gui.h"
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 176
diff changeset
    44
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
    45
#include "table/strings.h"
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
    46
#include "table/sprites.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    47
10562
a9ba187756d8 (svn r13106) -Codechange: rework the toolbar code a little so functions do not have to return the Window they just created.
rubidium
parents: 10517
diff changeset
    48
static void PopupMainToolbMenu(Window *parent, uint16 parent_button, StringID base_string, byte item_count, byte disabled_mask = 0, int sel_index = 0, int checked_items = 0);
11030
928d49f5c913 (svn r13586) -Codechange: Using default parameter, for cases where there are few exceptions.
belugas
parents: 11006
diff changeset
    49
static void PopupMainPlayerToolbMenu(Window *parent, int main_button, int gray = 0);
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
    50
static void SplitToolbar(Window *w);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    51
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
    52
RailType _last_built_railtype;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
    53
RoadType _last_built_roadtype;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
    54
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
    55
/** This enum gathers properties of both toolbars */
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
    56
enum ToolBarProperties {
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
    57
	TBP_BUTTONWIDTH        =  22,  ///< width of a button
11089
21dfdfd9f70a (svn r13646) -Change: typos and miss-aligned enum values
belugas
parents: 11087
diff changeset
    58
	TBP_BUTTONHEIGHT       =  22,  ///< height of a button as well as the toolbars
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
    59
	TBP_DATEPANELWIDTH     = 130,  ///< used in scenario editor to calculate width of the toolbar.
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
    60
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
    61
	TBP_TOOLBAR_MINBUTTON  =  14,  ///< references both toolbars
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
    62
	TBP_NORMAL_MAXBUTTON   =  19,  ///< normal toolbar has this many buttons
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
    63
	TBP_SCENARIO_MAXBUTTON =  16,  ///< while the scenario has these
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
    64
};
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
    65
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
    66
enum ToolbarMode {
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
    67
	TB_NORMAL,
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
    68
	TB_UPPER,
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
    69
	TB_LOWER
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
    70
};
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
    71
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    72
enum ToolbarNormalWidgets {
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    73
	TBN_PAUSE         = 0,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    74
	TBN_FASTFORWARD,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    75
	TBN_SETTINGS,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    76
	TBN_SAVEGAME,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    77
	TBN_SMALLMAP,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    78
	TBN_TOWNDIRECTORY,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    79
	TBN_SUBSIDIES,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    80
	TBN_STATIONS,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    81
	TBN_FINANCES,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    82
	TBN_PLAYERS,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    83
	TBN_GRAPHICS,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    84
	TBN_LEAGUE,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    85
	TBN_INDUSTRIES,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    86
	TBN_VEHICLESTART,      ///< trains, actually.  So following are trucks, boats and planes
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    87
	TBN_TRAINS        = TBN_VEHICLESTART,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    88
	TBN_ROADVEHS,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    89
	TBN_SHIPS,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    90
	TBN_AIRCRAFTS,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    91
	TBN_ZOOMIN,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    92
	TBN_ZOOMOUT,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    93
	TBN_RAILS,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    94
	TBN_ROADS,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    95
	TBN_WATER,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    96
	TBN_AIR,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    97
	TBN_LANDSCAPE,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    98
	TBN_MUSICSOUND,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
    99
	TBN_NEWSREPORT,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   100
	TBN_HELP,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   101
	TBN_SWITCHBAR,         ///< only available when toolbar has been split
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   102
};
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   103
10961
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   104
enum ToolbarScenEditorWidgets {
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   105
	TBSE_PAUSE        = 0,
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   106
	TBSE_FASTFORWARD,
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   107
	TBSE_SAVESCENARIO = 3,
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   108
	TBSE_SPACERPANEL,
11084
718382a9cfbf (svn r13641) -Fix: Misleading enum name.
belugas
parents: 11071
diff changeset
   109
	TBSE_DATEPANEL,
11005
48b2f39c5e1b (svn r13561) -Codechange: two more enumifications of widgets
belugas
parents: 11004
diff changeset
   110
	TBSE_DATEBACKWARD,
10961
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   111
	TBSE_DATEFORWARD,
11006
a369d65b9f59 (svn r13562) -Codechange: Yet another enumification, which required a bit of explanation/documentation of a trickery some would call a hack
belugas
parents: 11005
diff changeset
   112
	TBSE_SMALLMAP,
a369d65b9f59 (svn r13562) -Codechange: Yet another enumification, which required a bit of explanation/documentation of a trickery some would call a hack
belugas
parents: 11005
diff changeset
   113
	TBSE_ZOOMIN,
10961
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   114
	TBSE_ZOOMOUT,
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   115
	TBSE_LANDGENERATE,
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   116
	TBSE_TOWNGENERATE,
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   117
	TBSE_INDUSTRYGENERATE,
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   118
	TBSE_BUILDROAD,
11071
91ac7664ad1e (svn r13628) -Feature: enable building of aqueducts in the scenario editor
skidd13
parents: 11041
diff changeset
   119
	TBSE_BUILDDOCKS,
10961
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   120
	TBSE_PLANTTREES,
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   121
	TBSE_PLACESIGNS,
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   122
};
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   123
11006
a369d65b9f59 (svn r13562) -Codechange: Yet another enumification, which required a bit of explanation/documentation of a trickery some would call a hack
belugas
parents: 11005
diff changeset
   124
/** The idea of this enum is to allow a separation between widget position
a369d65b9f59 (svn r13562) -Codechange: Yet another enumification, which required a bit of explanation/documentation of a trickery some would call a hack
belugas
parents: 11005
diff changeset
   125
 * and _menu_clicked_procs's entry.  By shifting, the "action" id is extracted and
11089
21dfdfd9f70a (svn r13646) -Change: typos and miss-aligned enum values
belugas
parents: 11087
diff changeset
   126
 * kept safe for usage when required.
11006
a369d65b9f59 (svn r13562) -Codechange: Yet another enumification, which required a bit of explanation/documentation of a trickery some would call a hack
belugas
parents: 11005
diff changeset
   127
 * @see ToolbarMenuWindow::OnMouseLoop */
a369d65b9f59 (svn r13562) -Codechange: Yet another enumification, which required a bit of explanation/documentation of a trickery some would call a hack
belugas
parents: 11005
diff changeset
   128
enum ScenarioEditorMenuActions {
a369d65b9f59 (svn r13562) -Codechange: Yet another enumification, which required a bit of explanation/documentation of a trickery some would call a hack
belugas
parents: 11005
diff changeset
   129
	SEMA_MAP_CLICK = 17 << 8,
a369d65b9f59 (svn r13562) -Codechange: Yet another enumification, which required a bit of explanation/documentation of a trickery some would call a hack
belugas
parents: 11005
diff changeset
   130
};
a369d65b9f59 (svn r13562) -Codechange: Yet another enumification, which required a bit of explanation/documentation of a trickery some would call a hack
belugas
parents: 11005
diff changeset
   131
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   132
static ToolbarMode _toolbar_mode;
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   133
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   134
static void SelectSignTool()
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   135
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   136
	if (_cursor.sprite == SPR_CURSOR_SIGN) {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   137
		ResetObjectToPlace();
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   138
	} else {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   139
		SetObjectToPlace(SPR_CURSOR_SIGN, PAL_NONE, VHM_RECT, WC_MAIN_TOOLBAR, 0);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   140
		_place_proc = PlaceProc_Sign;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   141
	}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   142
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   143
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   144
/** Returns the position where the toolbar wants the menu to appear.
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
   145
 * Make sure the dropdown is fully visible within the window.
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
   146
 * x + w->left because x is supposed to be the offset of the toolbar-button
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
   147
 * we clicked on and w->left the toolbar window itself. So meaning that
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
   148
 * the default position is aligned with the left side of the clicked button */
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   149
static Point GetToolbarDropdownPos(uint16 parent_button, int width, int height)
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
   150
{
10229
fba3f9fa44d7 (svn r12761) -Codechange: lots of minor whitespace coding style fixes around operators.
rubidium
parents: 10225
diff changeset
   151
	const Window *w = FindWindowById(WC_MAIN_TOOLBAR, 0);
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
   152
	Point pos;
9222
7e175d5a9b4e (svn r12402) -Fix: some toolbars didn't seem to show anymore.
rubidium
parents: 9219
diff changeset
   153
	pos.x = w->widget[GB(parent_button, 0, 8)].left;
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
   154
	pos.x = w->left + Clamp(pos.x, 0, w->width - width);
9222
7e175d5a9b4e (svn r12402) -Fix: some toolbars didn't seem to show anymore.
rubidium
parents: 9219
diff changeset
   155
	pos.y = w->height;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   156
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
   157
	return pos;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   158
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   159
10463
b7e820730f30 (svn r13006) -Codechange: GetMenuItemIndex is only used for the toolbar, so move it to there.
rubidium
parents: 10461
diff changeset
   160
/**
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
   161
 * Retrieve the menu item number from a position
10463
b7e820730f30 (svn r13006) -Codechange: GetMenuItemIndex is only used for the toolbar, so move it to there.
rubidium
parents: 10461
diff changeset
   162
 * @param w Window holding the menu items
b7e820730f30 (svn r13006) -Codechange: GetMenuItemIndex is only used for the toolbar, so move it to there.
rubidium
parents: 10461
diff changeset
   163
 * @param x X coordinate of the position
b7e820730f30 (svn r13006) -Codechange: GetMenuItemIndex is only used for the toolbar, so move it to there.
rubidium
parents: 10461
diff changeset
   164
 * @param y Y coordinate of the position
b7e820730f30 (svn r13006) -Codechange: GetMenuItemIndex is only used for the toolbar, so move it to there.
rubidium
parents: 10461
diff changeset
   165
 * @return Index number of the menu item, or \c -1 if no valid selection under position
b7e820730f30 (svn r13006) -Codechange: GetMenuItemIndex is only used for the toolbar, so move it to there.
rubidium
parents: 10461
diff changeset
   166
 */
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
   167
static int GetMenuItemIndex(const Window *w, int item_count, int disabled_items)
10463
b7e820730f30 (svn r13006) -Codechange: GetMenuItemIndex is only used for the toolbar, so move it to there.
rubidium
parents: 10461
diff changeset
   168
{
10482
260c05e63bf4 (svn r13025) -Codechange: remove the need for two WindowEvents.
rubidium
parents: 10481
diff changeset
   169
	int x = _cursor.pos.x;
260c05e63bf4 (svn r13025) -Codechange: remove the need for two WindowEvents.
rubidium
parents: 10481
diff changeset
   170
	int y = _cursor.pos.y;
260c05e63bf4 (svn r13025) -Codechange: remove the need for two WindowEvents.
rubidium
parents: 10481
diff changeset
   171
10463
b7e820730f30 (svn r13006) -Codechange: GetMenuItemIndex is only used for the toolbar, so move it to there.
rubidium
parents: 10461
diff changeset
   172
	if ((x -= w->left) >= 0 && x < w->width && (y -= w->top + 1) >= 0) {
b7e820730f30 (svn r13006) -Codechange: GetMenuItemIndex is only used for the toolbar, so move it to there.
rubidium
parents: 10461
diff changeset
   173
		y /= 10;
b7e820730f30 (svn r13006) -Codechange: GetMenuItemIndex is only used for the toolbar, so move it to there.
rubidium
parents: 10461
diff changeset
   174
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
   175
		if (y < item_count &&
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
   176
				!HasBit(disabled_items, y)) {
10463
b7e820730f30 (svn r13006) -Codechange: GetMenuItemIndex is only used for the toolbar, so move it to there.
rubidium
parents: 10461
diff changeset
   177
			return y;
b7e820730f30 (svn r13006) -Codechange: GetMenuItemIndex is only used for the toolbar, so move it to there.
rubidium
parents: 10461
diff changeset
   178
		}
b7e820730f30 (svn r13006) -Codechange: GetMenuItemIndex is only used for the toolbar, so move it to there.
rubidium
parents: 10461
diff changeset
   179
	}
b7e820730f30 (svn r13006) -Codechange: GetMenuItemIndex is only used for the toolbar, so move it to there.
rubidium
parents: 10461
diff changeset
   180
	return -1;
b7e820730f30 (svn r13006) -Codechange: GetMenuItemIndex is only used for the toolbar, so move it to there.
rubidium
parents: 10461
diff changeset
   181
}
b7e820730f30 (svn r13006) -Codechange: GetMenuItemIndex is only used for the toolbar, so move it to there.
rubidium
parents: 10461
diff changeset
   182
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   183
/* --- Pausing --- */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   184
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   185
static void ToolbarPauseClick(Window *w)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   186
{
2549
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2548
diff changeset
   187
	if (_networking && !_network_server) return; // only server can pause the game
213
770e504a6e51 (svn r214) -Feature: CMD_NET_INSTANT [just in time command handling over network] (sign_de)
darkvater
parents: 206
diff changeset
   188
6557
8381016f71f3 (svn r9034) -Codechange: renamed _pause to _pause_game, as some targets already have
truelight
parents: 6527
diff changeset
   189
	if (DoCommandP(0, _pause_game ? 0 : 1, 0, NULL, CMD_PAUSE)) SndPlayFx(SND_15_BEEP);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   190
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   191
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   192
/* --- Fast forwarding --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   193
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   194
static void ToolbarFastForwardClick(Window *w)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   195
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   196
	_fast_forward ^= true;
541
e1cd34389f79 (svn r925) Use sound enums
tron
parents: 534
diff changeset
   197
	SndPlayFx(SND_15_BEEP);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   198
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   199
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   200
/* --- Options button menu --- */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   201
11003
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   202
enum OptionMenuEntries {
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   203
	OME_GAMEOPTIONS    = 0,
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   204
	OME_DIFFICULTIES,
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   205
	OME_PATCHES,
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   206
	OME_NEWGRFSETTINGS,
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   207
	OME_TRANSPARENCIES,
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   208
	OME_SHOW_TOWNNAMES = 6,
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   209
	OME_SHOW_STATIONNAMES,
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   210
	OME_SHOW_SIGNS,
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   211
	OME_SHOW_WAYPOINTNAMES,
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   212
	OME_FULL_ANIMATION,
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   213
	OME_FULL_DETAILS,
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   214
	OME_TRANSPARENTBUILDINGS,
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   215
	OME_SHOW_STATIONSIGNS,
11034
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   216
	OME_MENUCOUNT,
11003
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   217
};
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   218
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   219
static void ToolbarOptionsClick(Window *w)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   220
{
4822
ff5230aeb132 (svn r6746) -Codechange: Remove the need for double strings in "checkmarked" items. While
Darkvater
parents: 4821
diff changeset
   221
	uint16 x = 0;
11003
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   222
	if (HasBit(_display_opt, DO_SHOW_TOWN_NAMES))    SetBit(x, OME_SHOW_TOWNNAMES);
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   223
	if (HasBit(_display_opt, DO_SHOW_STATION_NAMES)) SetBit(x, OME_SHOW_STATIONNAMES);
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   224
	if (HasBit(_display_opt, DO_SHOW_SIGNS))         SetBit(x, OME_SHOW_SIGNS);
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   225
	if (HasBit(_display_opt, DO_WAYPOINTS))          SetBit(x, OME_SHOW_WAYPOINTNAMES);
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   226
	if (HasBit(_display_opt, DO_FULL_ANIMATION))     SetBit(x, OME_FULL_ANIMATION);
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   227
	if (HasBit(_display_opt, DO_FULL_DETAIL))        SetBit(x, OME_FULL_DETAILS);
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   228
	if (IsTransparencySet(TO_HOUSES))                SetBit(x, OME_TRANSPARENTBUILDINGS);
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   229
	if (IsTransparencySet(TO_SIGNS))                 SetBit(x, OME_SHOW_STATIONSIGNS);
10562
a9ba187756d8 (svn r13106) -Codechange: rework the toolbar code a little so functions do not have to return the Window they just created.
rubidium
parents: 10517
diff changeset
   230
11034
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   231
	PopupMainToolbMenu(w, TBN_SETTINGS, STR_02C4_GAME_OPTIONS, OME_MENUCOUNT, 0, 0, x);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   232
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   233
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   234
static void MenuClickSettings(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   235
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   236
	switch (index) {
11003
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   237
		case OME_GAMEOPTIONS:          ShowGameOptions();                              return;
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   238
		case OME_DIFFICULTIES:         ShowGameDifficulty();                           return;
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   239
		case OME_PATCHES:              ShowPatchesSelection();                         return;
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   240
		case OME_NEWGRFSETTINGS:       ShowNewGRFSettings(!_networking, true, true, &_grfconfig);   return;
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   241
		case OME_TRANSPARENCIES:       ShowTransparencyToolbar();                      break;
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   242
11003
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   243
		case OME_SHOW_TOWNNAMES:       ToggleBit(_display_opt, DO_SHOW_TOWN_NAMES);    break;
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   244
		case OME_SHOW_STATIONNAMES:    ToggleBit(_display_opt, DO_SHOW_STATION_NAMES); break;
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   245
		case OME_SHOW_SIGNS:           ToggleBit(_display_opt, DO_SHOW_SIGNS);         break;
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   246
		case OME_SHOW_WAYPOINTNAMES:   ToggleBit(_display_opt, DO_WAYPOINTS);          break;
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   247
		case OME_FULL_ANIMATION:       ToggleBit(_display_opt, DO_FULL_ANIMATION);     break;
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   248
		case OME_FULL_DETAILS:         ToggleBit(_display_opt, DO_FULL_DETAIL);        break;
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   249
		case OME_TRANSPARENTBUILDINGS: ToggleTransparency(TO_HOUSES);                  break;
0cfeb1bc55a7 (svn r13559) -Codechange: Enumification of the Options menu items
belugas
parents: 10996
diff changeset
   250
		case OME_SHOW_STATIONSIGNS:    ToggleTransparency(TO_SIGNS);                   break;
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   251
	}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   252
	MarkWholeScreenDirty();
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   253
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   254
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   255
/* --- Saving/loading button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   256
11034
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   257
enum SaveLoadEditorMenuEntries {
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   258
	SLEME_SAVE_SCENARIO   = 0,
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   259
	SLEME_LOAD_SCENARIO,
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   260
	SLEME_LOAD_HEIGHTMAP,
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   261
	SLEME_EXIT_TOINTRO,
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   262
	SLEME_EXIT_GAME       = 5,
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   263
	SLEME_MENUCOUNT,
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   264
};
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   265
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   266
enum SaveLoadNormalMenuEntries {
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   267
	SLNME_SAVE_GAME   = 0,
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   268
	SLNME_LOAD_GAME,
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   269
	SLNME_EXIT_TOINTRO,
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   270
	SLNME_EXIT_GAME,
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   271
	SLNME_MENUCOUNT,
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   272
};
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   273
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   274
static void ToolbarSaveClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   275
{
11034
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   276
	PopupMainToolbMenu(w, TBN_SAVEGAME, STR_015C_SAVE_GAME, SLNME_MENUCOUNT);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   277
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   278
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   279
static void ToolbarScenSaveOrLoad(Window *w)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   280
{
11034
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   281
	PopupMainToolbMenu(w, TBSE_SAVESCENARIO, STR_0292_SAVE_SCENARIO, SLEME_MENUCOUNT);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   282
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   283
11105
bbcfdef0958e (svn r13663) -Codechange: Use a default parameter, hoping to reduce the different signatures of functions in menus
belugas
parents: 11092
diff changeset
   284
static void MenuClickSaveLoad(int index = 0)
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   285
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   286
	if (_game_mode == GM_EDITOR) {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   287
		switch (index) {
11034
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   288
			case SLEME_SAVE_SCENARIO:  ShowSaveLoadDialog(SLD_SAVE_SCENARIO);  break;
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   289
			case SLEME_LOAD_SCENARIO:  ShowSaveLoadDialog(SLD_LOAD_SCENARIO);  break;
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   290
			case SLEME_LOAD_HEIGHTMAP: ShowSaveLoadDialog(SLD_LOAD_HEIGHTMAP); break;
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   291
			case SLEME_EXIT_TOINTRO:   AskExitToGameMenu();                    break;
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   292
			case SLEME_EXIT_GAME:      HandleExitGameRequest();                break;
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   293
		}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   294
	} else {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   295
		switch (index) {
11034
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   296
			case SLNME_SAVE_GAME:      ShowSaveLoadDialog(SLD_SAVE_GAME); break;
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   297
			case SLNME_LOAD_GAME:      ShowSaveLoadDialog(SLD_LOAD_GAME); break;
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   298
			case SLNME_EXIT_TOINTRO:   AskExitToGameMenu();               break;
ce1dfcf91337 (svn r13590) -Codechange: Enumification of the Save/Load menu items
belugas
parents: 11032
diff changeset
   299
			case SLNME_EXIT_GAME:      HandleExitGameRequest();           break;
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   300
		}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   301
	}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   302
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   303
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   304
/* --- Map button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   305
11041
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   306
enum MapMenuEntries {
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   307
	MME_SHOW_SMALLMAP        = 0,
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   308
	MME_SHOW_EXTRAVIEWPORTS,
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   309
	MME_SHOW_SIGNLISTS,
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   310
	MME_SHOW_TOWNDIRECTORY,    ///< This entry is only used in Editor mode
11089
21dfdfd9f70a (svn r13646) -Change: typos and miss-aligned enum values
belugas
parents: 11087
diff changeset
   311
	MME_MENUCOUNT_NORMAL     = 3,
21dfdfd9f70a (svn r13646) -Change: typos and miss-aligned enum values
belugas
parents: 11087
diff changeset
   312
	MME_MENUCOUNT_EDITOR     = 4,
11041
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   313
};
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   314
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   315
static void ToolbarMapClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   316
{
11041
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   317
	PopupMainToolbMenu(w, TBN_SMALLMAP, STR_02DE_MAP_OF_WORLD, MME_MENUCOUNT_NORMAL);
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   318
}
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   319
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   320
static void ToolbarScenMapTownDir(Window *w)
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   321
{
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   322
	/* Scenario editor button, Use different button to activate.
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   323
	 * This scheme will allow to have an action (SEMA_MAP_CLICK, which is in fact
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   324
	 * an entry in _menu_clicked_procs) while at the same time having a start button
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   325
	 * who is not at the same index as its action
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   326
	 * @see ToolbarMenuWindow::OnMouseLoop */
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   327
	PopupMainToolbMenu(w, TBSE_SMALLMAP | SEMA_MAP_CLICK, STR_02DE_MAP_OF_WORLD, MME_MENUCOUNT_EDITOR);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   328
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   329
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   330
static void MenuClickMap(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   331
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   332
	switch (index) {
11041
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   333
		case MME_SHOW_SMALLMAP:       ShowSmallMap();            break;
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   334
		case MME_SHOW_EXTRAVIEWPORTS: ShowExtraViewPortWindow(); break;
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   335
		case MME_SHOW_SIGNLISTS:      ShowSignList();            break;
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
   336
		case MME_SHOW_TOWNDIRECTORY:  if (_game_mode == GM_EDITOR) ShowTownDirectory(); break;
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   337
	}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   338
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   339
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   340
/* --- Town button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   341
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   342
static void ToolbarTownClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   343
{
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   344
	PopupMainToolbMenu(w, TBN_TOWNDIRECTORY, STR_02BB_TOWN_DIRECTORY, 1);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   345
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   346
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   347
static void MenuClickTown(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   348
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   349
	ShowTownDirectory();
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   350
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   351
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   352
/* --- Subidies button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   353
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   354
static void ToolbarSubsidiesClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   355
{
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   356
	PopupMainToolbMenu(w, TBN_SUBSIDIES, STR_02DD_SUBSIDIES, 1);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   357
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   358
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   359
static void MenuClickSubsidies(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   360
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   361
	ShowSubsidiesList();
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   362
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   363
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   364
/* --- Stations button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   365
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   366
static void ToolbarStationsClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   367
{
11030
928d49f5c913 (svn r13586) -Codechange: Using default parameter, for cases where there are few exceptions.
belugas
parents: 11006
diff changeset
   368
	PopupMainPlayerToolbMenu(w, TBN_STATIONS);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   369
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   370
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   371
static void MenuClickStations(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   372
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   373
	ShowPlayerStations((PlayerID)index);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   374
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   375
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   376
/* --- Finances button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   377
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   378
static void ToolbarFinancesClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   379
{
11030
928d49f5c913 (svn r13586) -Codechange: Using default parameter, for cases where there are few exceptions.
belugas
parents: 11006
diff changeset
   380
	PopupMainPlayerToolbMenu(w, TBN_FINANCES);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   381
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   382
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   383
static void MenuClickFinances(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   384
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   385
	ShowPlayerFinances((PlayerID)index);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   386
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   387
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   388
/* --- Company's button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   389
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   390
static void ToolbarPlayersClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   391
{
11030
928d49f5c913 (svn r13586) -Codechange: Using default parameter, for cases where there are few exceptions.
belugas
parents: 11006
diff changeset
   392
	PopupMainPlayerToolbMenu(w, TBN_PLAYERS);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   393
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   394
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   395
static void MenuClickCompany(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   396
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   397
	if (_networking && index == 0) {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   398
		ShowClientList();
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   399
	} else {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   400
		if (_networking) index--;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   401
		ShowPlayerCompany((PlayerID)index);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   402
	}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   403
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   404
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   405
/* --- Graphs button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   406
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   407
static void ToolbarGraphsClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   408
{
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   409
	PopupMainToolbMenu(w, TBN_GRAPHICS, STR_0154_OPERATING_PROFIT_GRAPH, (_toolbar_mode == TB_NORMAL) ? 6 : 8);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   410
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   411
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   412
static void MenuClickGraphs(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   413
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   414
	switch (index) {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   415
		case 0: ShowOperatingProfitGraph();    break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   416
		case 1: ShowIncomeGraph();             break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   417
		case 2: ShowDeliveredCargoGraph();     break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   418
		case 3: ShowPerformanceHistoryGraph(); break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   419
		case 4: ShowCompanyValueGraph();       break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   420
		case 5: ShowCargoPaymentRates();       break;
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   421
		/* functions for combined graphs/league button */
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   422
		case 6: ShowCompanyLeagueTable();      break;
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   423
		case 7: ShowPerformanceRatingDetail(); break;
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   424
	}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   425
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   426
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   427
/* --- League button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   428
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   429
static void ToolbarLeagueClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   430
{
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   431
	PopupMainToolbMenu(w, TBN_LEAGUE, STR_015A_COMPANY_LEAGUE_TABLE, 2);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   432
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   433
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   434
static void MenuClickLeague(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   435
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   436
	switch (index) {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   437
		case 0: ShowCompanyLeagueTable();      break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   438
		case 1: ShowPerformanceRatingDetail(); break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   439
	}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   440
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   441
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   442
/* --- Industries button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   443
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   444
static void ToolbarIndustryClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   445
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   446
	/* Disable build-industry menu if we are a spectator */
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   447
	PopupMainToolbMenu(w, TBN_INDUSTRIES, STR_INDUSTRY_DIR, 2, (_current_player == PLAYER_SPECTATOR) ? 2 : 0);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   448
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   449
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   450
static void MenuClickIndustry(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   451
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   452
	switch (index) {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   453
		case 0: ShowIndustryDirectory();   break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   454
		case 1: ShowBuildIndustryWindow(); break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   455
	}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   456
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   457
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   458
/* --- Trains button menu + 1 helper function for all vehicles. --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   459
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   460
static void ToolbarVehicleClick(Window *w, VehicleType veh)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   461
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   462
	const Vehicle *v;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   463
	int dis = ~0;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   464
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   465
	FOR_ALL_VEHICLES(v) {
10350
e08d68483283 (svn r12892) -Fix: too many items in the vehicle toolbars were greyed out.
rubidium
parents: 10281
diff changeset
   466
		if (v->type == veh && v->IsPrimaryVehicle()) ClrBit(dis, v->owner);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   467
	}
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   468
	PopupMainPlayerToolbMenu(w, TBN_VEHICLESTART + veh, dis);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   469
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   470
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   471
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   472
static void ToolbarTrainClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   473
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   474
	ToolbarVehicleClick(w, VEH_TRAIN);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   475
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   476
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   477
static void MenuClickShowTrains(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   478
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   479
	ShowVehicleListWindow((PlayerID)index, VEH_TRAIN);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   480
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   481
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   482
/* --- Road vehicle button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   483
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   484
static void ToolbarRoadClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   485
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   486
	ToolbarVehicleClick(w, VEH_ROAD);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   487
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   488
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   489
static void MenuClickShowRoad(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   490
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   491
	ShowVehicleListWindow((PlayerID)index, VEH_ROAD);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   492
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   493
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   494
/* --- Ship button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   495
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   496
static void ToolbarShipClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   497
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   498
	ToolbarVehicleClick(w, VEH_SHIP);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   499
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   500
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   501
static void MenuClickShowShips(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   502
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   503
	ShowVehicleListWindow((PlayerID)index, VEH_SHIP);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   504
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   505
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   506
/* --- Aircraft button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   507
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   508
static void ToolbarAirClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   509
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   510
	ToolbarVehicleClick(w, VEH_AIRCRAFT);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   511
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   512
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   513
static void MenuClickShowAir(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   514
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   515
	ShowVehicleListWindow((PlayerID)index, VEH_AIRCRAFT);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   516
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   517
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   518
/* --- Zoom in button --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   519
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   520
static void ToolbarZoomInClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   521
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   522
	if (DoZoomInOutWindow(ZOOM_IN, FindWindowById(WC_MAIN_WINDOW, 0))) {
11114
36a38b287c05 (svn r13672) -Fix(r13670): silent warnings that MSVC did not raised. Looks like enums can not be easily matched :(
belugas
parents: 11112
diff changeset
   523
		w->HandleButtonClick((_game_mode == GM_EDITOR) ? (byte)TBSE_ZOOMIN : (byte)TBN_ZOOMIN);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   524
		SndPlayFx(SND_15_BEEP);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   525
	}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   526
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   527
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   528
/* --- Zoom out button --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   529
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   530
static void ToolbarZoomOutClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   531
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   532
	if (DoZoomInOutWindow(ZOOM_OUT, FindWindowById(WC_MAIN_WINDOW, 0))) {
11114
36a38b287c05 (svn r13672) -Fix(r13670): silent warnings that MSVC did not raised. Looks like enums can not be easily matched :(
belugas
parents: 11112
diff changeset
   533
		w->HandleButtonClick((_game_mode == GM_EDITOR) ? (byte)TBSE_ZOOMOUT : (byte)TBN_ZOOMOUT);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   534
		SndPlayFx(SND_15_BEEP);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   535
	}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   536
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   537
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   538
/* --- Rail button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   539
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   540
static void ToolbarBuildRailClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   541
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   542
	const Player *p = GetPlayer(_local_player);
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   543
	PopupMainToolbMenu(w, TBN_RAILS, STR_1015_RAILROAD_CONSTRUCTION, RAILTYPE_END, ~p->avail_railtypes, _last_built_railtype);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   544
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   545
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   546
static void MenuClickBuildRail(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   547
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   548
	_last_built_railtype = (RailType)index;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   549
	ShowBuildRailToolbar(_last_built_railtype, -1);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   550
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   551
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   552
/* --- Road button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   553
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   554
static void ToolbarBuildRoadClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   555
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   556
	const Player *p = GetPlayer(_local_player);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   557
	/* The standard road button is *always* available */
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   558
	PopupMainToolbMenu(w, TBN_ROADS, STR_180A_ROAD_CONSTRUCTION, 2, ~(p->avail_roadtypes | ROADTYPES_ROAD), _last_built_roadtype);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   559
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   560
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   561
static void MenuClickBuildRoad(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   562
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   563
	_last_built_roadtype = (RoadType)index;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   564
	ShowBuildRoadToolbar(_last_built_roadtype);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   565
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   566
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   567
/* --- Water button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   568
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   569
static void ToolbarBuildWaterClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   570
{
11071
91ac7664ad1e (svn r13628) -Feature: enable building of aqueducts in the scenario editor
skidd13
parents: 11041
diff changeset
   571
	PopupMainToolbMenu(w, TBN_WATER, STR_9800_WATERWAYS_CONSTRUCTION, 1);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   572
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   573
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   574
static void MenuClickBuildWater(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   575
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   576
	ShowBuildDocksToolbar();
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   577
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   578
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   579
/* --- Airport button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   580
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   581
static void ToolbarBuildAirClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   582
{
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   583
	PopupMainToolbMenu(w, TBN_AIR, STR_A01D_AIRPORT_CONSTRUCTION, 1);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   584
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   585
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   586
static void MenuClickBuildAir(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   587
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   588
	ShowBuildAirToolbar();
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   589
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   590
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   591
/* --- Forest button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   592
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   593
static void ToolbarForestClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   594
{
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   595
	PopupMainToolbMenu(w, TBN_LANDSCAPE, STR_LANDSCAPING, 3);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   596
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   597
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   598
static void MenuClickForest(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   599
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   600
	switch (index) {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   601
		case 0: ShowTerraformToolbar();  break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   602
		case 1: ShowBuildTreesToolbar(); break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   603
		case 2: SelectSignTool();        break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   604
	}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   605
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   606
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   607
/* --- Music button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   608
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   609
static void ToolbarMusicClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   610
{
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   611
	PopupMainToolbMenu(w, TBN_MUSICSOUND, STR_01D3_SOUND_MUSIC, 1);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   612
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   613
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   614
static void MenuClickMusicWindow(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   615
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   616
	ShowMusicWindow();
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   617
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   618
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   619
/* --- Newspaper button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   620
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   621
static void ToolbarNewspaperClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   622
{
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   623
	PopupMainToolbMenu(w, TBN_NEWSREPORT, STR_0200_LAST_MESSAGE_NEWS_REPORT, 3);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   624
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   625
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   626
static void MenuClickNewspaper(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   627
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   628
	switch (index) {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   629
		case 0: ShowLastNewsMessage(); break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   630
		case 1: ShowMessageOptions();  break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   631
		case 2: ShowMessageHistory();  break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   632
	}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   633
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   634
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   635
/* --- Help button menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   636
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   637
static void ToolbarHelpClick(Window *w)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   638
{
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   639
	PopupMainToolbMenu(w, TBN_HELP, STR_02D5_LAND_BLOCK_INFO, 6);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   640
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   641
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   642
static void MenuClickSmallScreenshot()
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   643
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   644
	SetScreenshotType(SC_VIEWPORT);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   645
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   646
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   647
static void MenuClickWorldScreenshot()
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   648
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   649
	SetScreenshotType(SC_WORLD);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   650
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   651
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   652
static void MenuClickHelp(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   653
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   654
	switch (index) {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   655
		case 0: PlaceLandBlockInfo();       break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   656
		case 2: IConsoleSwitch();           break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   657
		case 3: MenuClickSmallScreenshot(); break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   658
		case 4: MenuClickWorldScreenshot(); break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   659
		case 5: ShowAboutWindow();          break;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   660
	}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   661
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   662
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   663
/* --- Switch toolbar button --- */
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   664
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   665
static void ToolbarSwitchClick(Window *w)
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   666
{
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   667
	if (_toolbar_mode != TB_LOWER) {
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   668
		_toolbar_mode = TB_LOWER;
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   669
	} else {
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   670
		_toolbar_mode = TB_UPPER;
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   671
	}
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   672
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   673
	SplitToolbar(w);
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   674
	w->HandleButtonClick(TBN_SWITCHBAR);
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   675
	SetWindowDirty(w);
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   676
	SndPlayFx(SND_15_BEEP);
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   677
}
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   678
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   679
/* --- Scenario editor specific handlers. */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   680
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   681
static void ToolbarScenDateBackward(Window *w)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   682
{
6527
f584ab6d87f8 (svn r8987) -Cleanup: doxygen changes. Again. Mostly (still) @files missing tags and (more than just) a few comments style.
belugas
parents: 6145
diff changeset
   683
	/* don't allow too fast scrolling */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   684
	if ((w->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) {
10961
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   685
		w->HandleButtonClick(TBSE_DATEBACKWARD);
10434
d6accd017341 (svn r12976) -Codechange: use w->SetDirty() instead of SetWindowDirty(w) when it's certain that w != NULL.
rubidium
parents: 10433
diff changeset
   686
		w->SetDirty();
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 176
diff changeset
   687
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10684
diff changeset
   688
		_settings_newgame.game_creation.starting_year = Clamp(_settings_newgame.game_creation.starting_year - 1, MIN_YEAR, MAX_YEAR);
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10684
diff changeset
   689
		SetDate(ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1));
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   690
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   691
	_left_button_clicked = false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   692
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   693
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   694
static void ToolbarScenDateForward(Window *w)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   695
{
6527
f584ab6d87f8 (svn r8987) -Cleanup: doxygen changes. Again. Mostly (still) @files missing tags and (more than just) a few comments style.
belugas
parents: 6145
diff changeset
   696
	/* don't allow too fast scrolling */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   697
	if ((w->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) {
10961
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   698
		w->HandleButtonClick(TBSE_DATEFORWARD);
10434
d6accd017341 (svn r12976) -Codechange: use w->SetDirty() instead of SetWindowDirty(w) when it's certain that w != NULL.
rubidium
parents: 10433
diff changeset
   699
		w->SetDirty();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   700
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10684
diff changeset
   701
		_settings_newgame.game_creation.starting_year = Clamp(_settings_newgame.game_creation.starting_year + 1, MIN_YEAR, MAX_YEAR);
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10684
diff changeset
   702
		SetDate(ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1));
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   703
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   704
	_left_button_clicked = false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   705
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   706
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   707
static void ToolbarScenGenLand(Window *w)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   708
{
10961
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   709
	w->HandleButtonClick(TBSE_LANDGENERATE);
541
e1cd34389f79 (svn r925) Use sound enums
tron
parents: 534
diff changeset
   710
	SndPlayFx(SND_15_BEEP);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   711
8701
051036216675 (svn r11768) -Codechange: move some terraform related gui stuff from main_gui.cpp to terraform_gui.cpp (and introduce terraform_gui.h). Based on a patch by Roujin.
rubidium
parents: 8692
diff changeset
   712
	ShowEditorTerraformToolbar();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   713
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   714
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   715
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   716
static void ToolbarScenGenTown(Window *w)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   717
{
10961
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   718
	w->HandleButtonClick(TBSE_TOWNGENERATE);
541
e1cd34389f79 (svn r925) Use sound enums
tron
parents: 534
diff changeset
   719
	SndPlayFx(SND_15_BEEP);
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
   720
	ShowBuildTownWindow();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   721
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   722
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   723
static void ToolbarScenGenIndustry(Window *w)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   724
{
10961
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   725
	w->HandleButtonClick(TBSE_INDUSTRYGENERATE);
541
e1cd34389f79 (svn r925) Use sound enums
tron
parents: 534
diff changeset
   726
	SndPlayFx(SND_15_BEEP);
7714
d2060492ca03 (svn r10496) -Feature: Replace all the windows for Industry building by a more flexible one.
belugas
parents: 7698
diff changeset
   727
	ShowBuildIndustryWindow();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   728
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   729
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   730
static void ToolbarScenBuildRoad(Window *w)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   731
{
10961
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   732
	w->HandleButtonClick(TBSE_BUILDROAD);
541
e1cd34389f79 (svn r925) Use sound enums
tron
parents: 534
diff changeset
   733
	SndPlayFx(SND_15_BEEP);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   734
	ShowBuildRoadScenToolbar();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   735
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   736
11071
91ac7664ad1e (svn r13628) -Feature: enable building of aqueducts in the scenario editor
skidd13
parents: 11041
diff changeset
   737
static void ToolbarScenBuildDocks(Window *w)
91ac7664ad1e (svn r13628) -Feature: enable building of aqueducts in the scenario editor
skidd13
parents: 11041
diff changeset
   738
{
91ac7664ad1e (svn r13628) -Feature: enable building of aqueducts in the scenario editor
skidd13
parents: 11041
diff changeset
   739
	w->HandleButtonClick(TBSE_BUILDDOCKS);
91ac7664ad1e (svn r13628) -Feature: enable building of aqueducts in the scenario editor
skidd13
parents: 11041
diff changeset
   740
	SndPlayFx(SND_15_BEEP);
91ac7664ad1e (svn r13628) -Feature: enable building of aqueducts in the scenario editor
skidd13
parents: 11041
diff changeset
   741
	ShowBuildDocksScenToolbar();
91ac7664ad1e (svn r13628) -Feature: enable building of aqueducts in the scenario editor
skidd13
parents: 11041
diff changeset
   742
}
91ac7664ad1e (svn r13628) -Feature: enable building of aqueducts in the scenario editor
skidd13
parents: 11041
diff changeset
   743
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   744
static void ToolbarScenPlantTrees(Window *w)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   745
{
10961
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   746
	w->HandleButtonClick(TBSE_PLANTTREES);
541
e1cd34389f79 (svn r925) Use sound enums
tron
parents: 534
diff changeset
   747
	SndPlayFx(SND_15_BEEP);
10517
2e55d1418bd8 (svn r13061) -Codechange: make a class of the BuildTreesWindow.
glx
parents: 10485
diff changeset
   748
	ShowBuildTreesToolbar();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   749
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   750
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   751
static void ToolbarScenPlaceSign(Window *w)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   752
{
10961
7c4f84421dc5 (svn r13515) -Codechange: Widget enumification for scenario editor
belugas
parents: 10960
diff changeset
   753
	w->HandleButtonClick(TBSE_PLACESIGNS);
541
e1cd34389f79 (svn r925) Use sound enums
tron
parents: 534
diff changeset
   754
	SndPlayFx(SND_15_BEEP);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   755
	SelectSignTool();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   756
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   757
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   758
static void ToolbarBtn_NULL(Window *w)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   759
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   760
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   761
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   762
/* --- Resizing the toolbar */
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   763
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   764
static void ResizeToolbar(Window *w)
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   765
{
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   766
	/* There are 27 buttons plus some spacings if the space allows it */
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   767
	uint button_width;
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   768
	uint spacing;
10996
c0f85c0d7284 (svn r13550) -Fix(r13540, r13542): widget_count did not had the same value as 27. So, it has to be lowered by one, so it can be used as a widget "pointer"
belugas
parents: 10989
diff changeset
   769
	uint widgetcount = w->widget_count - 1;
c0f85c0d7284 (svn r13550) -Fix(r13540, r13542): widget_count did not had the same value as 27. So, it has to be lowered by one, so it can be used as a widget "pointer"
belugas
parents: 10989
diff changeset
   770
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
   771
	if (w->width >= (int)widgetcount * TBP_BUTTONWIDTH) {
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
   772
		button_width = TBP_BUTTONWIDTH;
10996
c0f85c0d7284 (svn r13550) -Fix(r13540, r13542): widget_count did not had the same value as 27. So, it has to be lowered by one, so it can be used as a widget "pointer"
belugas
parents: 10989
diff changeset
   773
		spacing = w->width - (widgetcount * button_width);
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   774
	} else {
10996
c0f85c0d7284 (svn r13550) -Fix(r13540, r13542): widget_count did not had the same value as 27. So, it has to be lowered by one, so it can be used as a widget "pointer"
belugas
parents: 10989
diff changeset
   775
		button_width = w->width / widgetcount;
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   776
		spacing = 0;
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   777
	}
10988
6c7b90b28b6a (svn r13542) -Codechange: Less a few more magic numbers and a code a bit more adaptable, still
belugas
parents: 10987
diff changeset
   778
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
   779
	static const uint extra_spacing_at[] = { 4, 8, 13, 17, 19, 24, 0 };
10988
6c7b90b28b6a (svn r13542) -Codechange: Less a few more magic numbers and a code a bit more adaptable, still
belugas
parents: 10987
diff changeset
   780
	uint i = 0;
10996
c0f85c0d7284 (svn r13550) -Fix(r13540, r13542): widget_count did not had the same value as 27. So, it has to be lowered by one, so it can be used as a widget "pointer"
belugas
parents: 10989
diff changeset
   781
	for (uint x = 0, j = 0; i < widgetcount; i++) {
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   782
		if (extra_spacing_at[j] == i) {
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   783
			j++;
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   784
			uint add = spacing / (lengthof(extra_spacing_at) - j);
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   785
			spacing -= add;
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   786
			x += add;
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   787
		}
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   788
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   789
		w->widget[i].type = WWT_IMGBTN;
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   790
		w->widget[i].left = x;
10996
c0f85c0d7284 (svn r13550) -Fix(r13540, r13542): widget_count did not had the same value as 27. So, it has to be lowered by one, so it can be used as a widget "pointer"
belugas
parents: 10989
diff changeset
   791
		x += (spacing != 0) ? button_width : (w->width - x) / (widgetcount - i);
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   792
		w->widget[i].right = x - 1;
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   793
	}
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   794
10988
6c7b90b28b6a (svn r13542) -Codechange: Less a few more magic numbers and a code a bit more adaptable, still
belugas
parents: 10987
diff changeset
   795
	w->widget[i].type = WWT_EMPTY; // i now points to the last item
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   796
	_toolbar_mode = TB_NORMAL;
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   797
}
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   798
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   799
/* --- Split the toolbar */
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   800
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   801
static void SplitToolbar(Window *w)
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   802
{
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   803
	static const byte arrange14[] = {
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   804
		0,  1, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 27,
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   805
		2,  3,  4,  5,  6,  7,  8,  9, 10, 12, 24, 25, 26, 27,
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   806
	};
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   807
	static const byte arrange15[] = {
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   808
		0,  1,  4, 13, 14, 15, 16, 19, 20, 21, 22, 23, 17, 18, 27,
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   809
		0,  2,  4,  3,  5,  6,  7,  8,  9, 10, 12, 24, 25, 26, 27,
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   810
	};
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   811
	static const byte arrange16[] = {
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   812
		0,  1,  2,  4, 13, 14, 15, 16, 19, 20, 21, 22, 23, 17, 18, 27,
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   813
		0,  1,  3,  5,  6,  7,  8,  9, 10, 12, 24, 25, 26, 17, 18, 27,
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   814
	};
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   815
	static const byte arrange17[] = {
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   816
		0,  1,  2,  4,  6, 13, 14, 15, 16, 19, 20, 21, 22, 23, 17, 18, 27,
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   817
		0,  1,  3,  4,  6,  5,  7,  8,  9, 10, 12, 24, 25, 26, 17, 18, 27,
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   818
	};
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   819
	static const byte arrange18[] = {
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   820
		0,  1,  2,  4,  5,  6,  7,  8,  9, 12, 19, 20, 21, 22, 23, 17, 18, 27,
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   821
		0,  1,  3,  4,  5,  6,  7, 10, 13, 14, 15, 16, 24, 25, 26, 17, 18, 27,
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   822
	};
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   823
	static const byte arrange19[] = {
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   824
		0,  1,  2,  4,  5,  6, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 17, 18, 27,
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   825
		0,  1,  3,  4,  7,  8,  9, 10, 12, 25, 19, 20, 21, 22, 23, 26, 17, 18, 27,
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   826
	};
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   827
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   828
	static const byte *arrangements[] = { arrange14, arrange15, arrange16, arrange17, arrange18, arrange19 };
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   829
11087
70767706681a (svn r13644) -Fix(r13643): compare an apple with an apple. MSVC seems to not care, but some other compilers do.
belugas
parents: 11086
diff changeset
   830
	uint max_icons = max(TBP_TOOLBAR_MINBUTTON, (ToolBarProperties)((w->width + TBP_BUTTONWIDTH / 2) / TBP_BUTTONWIDTH));
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   831
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
   832
	assert(max_icons >= TBP_TOOLBAR_MINBUTTON && max_icons <= TBP_NORMAL_MAXBUTTON);
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   833
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   834
	/* first hide all icons */
10996
c0f85c0d7284 (svn r13550) -Fix(r13540, r13542): widget_count did not had the same value as 27. So, it has to be lowered by one, so it can be used as a widget "pointer"
belugas
parents: 10989
diff changeset
   835
	for (uint i = 0; i < w->widget_count - 1; i++) {
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   836
		w->widget[i].type = WWT_EMPTY;
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   837
	}
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   838
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   839
	/* now activate them all on their proper positions */
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
   840
	for (uint i = 0, x = 0, n = max_icons - TBP_TOOLBAR_MINBUTTON; i < max_icons; i++) {
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   841
		uint icon = arrangements[n][i + ((_toolbar_mode == TB_LOWER) ? max_icons : 0)];
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   842
		w->widget[icon].type = WWT_IMGBTN;
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   843
		w->widget[icon].left = x;
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   844
		x += (w->width - x) / (max_icons - i);
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   845
		w->widget[icon].right = x - 1;
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   846
	}
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   847
}
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2635
diff changeset
   848
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   849
/* --- Toolbar handling for the 'normal' case */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   850
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2635
diff changeset
   851
typedef void ToolbarButtonProc(Window *w);
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2635
diff changeset
   852
4171
3fadda3afe70 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4077
diff changeset
   853
static ToolbarButtonProc * const _toolbar_button_procs[] = {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   854
	ToolbarPauseClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   855
	ToolbarFastForwardClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   856
	ToolbarOptionsClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   857
	ToolbarSaveClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   858
	ToolbarMapClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   859
	ToolbarTownClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   860
	ToolbarSubsidiesClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   861
	ToolbarStationsClick,
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
   862
	ToolbarFinancesClick,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   863
	ToolbarPlayersClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   864
	ToolbarGraphsClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   865
	ToolbarLeagueClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   866
	ToolbarIndustryClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   867
	ToolbarTrainClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   868
	ToolbarRoadClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   869
	ToolbarShipClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   870
	ToolbarAirClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   871
	ToolbarZoomInClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   872
	ToolbarZoomOutClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   873
	ToolbarBuildRailClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   874
	ToolbarBuildRoadClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   875
	ToolbarBuildWaterClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   876
	ToolbarBuildAirClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   877
	ToolbarForestClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   878
	ToolbarMusicClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   879
	ToolbarNewspaperClick,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   880
	ToolbarHelpClick,
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   881
	ToolbarSwitchClick,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   882
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   883
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   884
struct MainToolbarWindow : Window {
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   885
	MainToolbarWindow(const WindowDesc *desc) : Window(desc)
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   886
	{
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   887
		this->SetWidgetDisabledState(TBN_PAUSE, _networking && !_network_server); // if not server, disable pause button
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   888
		this->SetWidgetDisabledState(TBN_FASTFORWARD, _networking); // if networking, disable fast-forward button
7856
121ae75a45a0 (svn r10723) -Codechange: dynamically sized (width) main toolbars and status bar for when the window becomes less than 640 pixels in width.
rubidium
parents: 7855
diff changeset
   889
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   890
		CLRBITS(this->flags4, WF_WHITE_BORDER_MASK);
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
   891
10634
c455e2ec8cf6 (svn r13178) -Fix (r13173): the main toolbar didn't respect patch settings, it was always positioned on the right side
smatz
parents: 10629
diff changeset
   892
		this->FindWindowPlacementAndResize(desc);
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   893
		PositionMainToolbar(this);
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   894
		DoZoomInOutWindow(ZOOM_NONE, this);
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   895
	}
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
   896
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   897
	virtual void OnPaint()
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   898
	{
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   899
		/* Draw brown-red toolbar bg. */
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   900
		GfxFillRect(0, 0, this->width - 1, this->height - 1, 0xB2);
11092
e4fce2b3cded (svn r13649) -Codechange: Split the GfxFillRect() special flags from 'color' into their own parameter.
frosch
parents: 11089
diff changeset
   901
		GfxFillRect(0, 0, this->width - 1, this->height - 1, 0xB4, FILLRECT_CHECKER);
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
   902
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   903
		/* If spectator, disable all construction buttons
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   904
		* ie : Build road, rail, ships, airports and landscaping
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   905
		* Since enabled state is the default, just disable when needed */
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   906
		this->SetWidgetsDisabledState(_current_player == PLAYER_SPECTATOR, TBN_RAILS, TBN_ROADS, TBN_WATER, TBN_AIR, TBN_LANDSCAPE, WIDGET_LIST_END);
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   907
		/* disable company list drop downs, if there are no companies */
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   908
		this->SetWidgetsDisabledState(ActivePlayerCount() == TBN_PAUSE, TBN_STATIONS, TBN_FINANCES, TBN_TRAINS, TBN_ROADVEHS, TBN_SHIPS, TBN_AIRCRAFTS, WIDGET_LIST_END);
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   909
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   910
		this->SetWidgetDisabledState(TBN_RAILS, !CanBuildVehicleInfrastructure(VEH_TRAIN));
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   911
		this->SetWidgetDisabledState(TBN_AIR, !CanBuildVehicleInfrastructure(VEH_AIRCRAFT));
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   912
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   913
		this->DrawWidgets();
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   914
	}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   915
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   916
	virtual void OnClick(Point pt, int widget)
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   917
	{
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   918
		if (_game_mode != GM_MENU && !this->IsWidgetDisabled(widget)) _toolbar_button_procs[widget](this);
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   919
	}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   920
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   921
	virtual EventState OnKeyPress(uint16 key, uint16 keycode)
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   922
	{
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   923
		switch (keycode) {
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   924
			case WKC_F1: case WKC_PAUSE: ToolbarPauseClick(this); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   925
			case WKC_F2: ShowGameOptions(); break;
11105
bbcfdef0958e (svn r13663) -Codechange: Use a default parameter, hoping to reduce the different signatures of functions in menus
belugas
parents: 11092
diff changeset
   926
			case WKC_F3: MenuClickSaveLoad(); break;
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   927
			case WKC_F4: ShowSmallMap(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   928
			case WKC_F5: ShowTownDirectory(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   929
			case WKC_F6: ShowSubsidiesList(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   930
			case WKC_F7: ShowPlayerStations(_local_player); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   931
			case WKC_F8: ShowPlayerFinances(_local_player); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   932
			case WKC_F9: ShowPlayerCompany(_local_player); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   933
			case WKC_F10: ShowOperatingProfitGraph(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   934
			case WKC_F11: ShowCompanyLeagueTable(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   935
			case WKC_F12: ShowBuildIndustryWindow(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   936
			case WKC_SHIFT | WKC_F1: ShowVehicleListWindow(_local_player, VEH_TRAIN); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   937
			case WKC_SHIFT | WKC_F2: ShowVehicleListWindow(_local_player, VEH_ROAD); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   938
			case WKC_SHIFT | WKC_F3: ShowVehicleListWindow(_local_player, VEH_SHIP); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   939
			case WKC_SHIFT | WKC_F4: ShowVehicleListWindow(_local_player, VEH_AIRCRAFT); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   940
			case WKC_NUM_PLUS: // Fall through
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   941
			case WKC_EQUALS: // Fall through
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   942
			case WKC_SHIFT | WKC_EQUALS: // Fall through
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   943
			case WKC_SHIFT | WKC_F5: ToolbarZoomInClick(this); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   944
			case WKC_NUM_MINUS: // Fall through
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   945
			case WKC_MINUS: // Fall through
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   946
			case WKC_SHIFT | WKC_MINUS: // Fall through
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   947
			case WKC_SHIFT | WKC_F6: ToolbarZoomOutClick(this); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   948
			case WKC_SHIFT | WKC_F7: if (CanBuildVehicleInfrastructure(VEH_TRAIN)) ShowBuildRailToolbar(_last_built_railtype, -1); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   949
			case WKC_SHIFT | WKC_F8: ShowBuildRoadToolbar(_last_built_roadtype); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   950
			case WKC_SHIFT | WKC_F9: ShowBuildDocksToolbar(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   951
			case WKC_SHIFT | WKC_F10: if (CanBuildVehicleInfrastructure(VEH_AIRCRAFT)) ShowBuildAirToolbar(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   952
			case WKC_SHIFT | WKC_F11: ShowBuildTreesToolbar(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   953
			case WKC_SHIFT | WKC_F12: ShowMusicWindow(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   954
			case WKC_CTRL  | 'S': MenuClickSmallScreenshot(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   955
			case WKC_CTRL  | 'G': MenuClickWorldScreenshot(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   956
			case WKC_CTRL | WKC_ALT | 'C': if (!_networking) ShowCheatWindow(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   957
			case 'A': if (CanBuildVehicleInfrastructure(VEH_TRAIN)) ShowBuildRailToolbar(_last_built_railtype, 4); break; // Invoke Autorail
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   958
			case 'L': ShowTerraformToolbar(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   959
			case 'M': ShowSmallMap(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   960
			case 'V': ShowExtraViewPortWindow(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   961
			default: return ES_NOT_HANDLED;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   962
		}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   963
		return ES_HANDLED;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   964
	}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   965
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   966
	virtual void OnPlaceObject(Point pt, TileIndex tile)
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   967
	{
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   968
		_place_proc(tile);
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   969
	}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   970
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   971
	virtual void OnTick()
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   972
	{
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   973
		if (this->IsWidgetLowered(TBN_PAUSE) != !!_pause_game) {
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   974
			this->ToggleWidgetLoweredState(TBN_PAUSE);
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   975
			this->InvalidateWidget(TBN_PAUSE);
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   976
		}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   977
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   978
		if (this->IsWidgetLowered(TBN_FASTFORWARD) != !!_fast_forward) {
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   979
			this->ToggleWidgetLoweredState(TBN_FASTFORWARD);
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
   980
			this->InvalidateWidget(TBN_FASTFORWARD);
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   981
		}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   982
	}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   983
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   984
	virtual void OnResize(Point new_size, Point delta)
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   985
	{
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
   986
		if (this->width <= TBP_NORMAL_MAXBUTTON * TBP_BUTTONWIDTH) {
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   987
			SplitToolbar(this);
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   988
		} else {
10789
ea0c9cdc607b (svn r13339) -Feature: splitting of the main toolbar when the resolution becomes very low so the buttons are still visible and useable. Patch by Dominik.
rubidium
parents: 10703
diff changeset
   989
			ResizeToolbar(this);
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   990
		}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   991
	}
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
   992
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   993
	virtual void OnTimeout()
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   994
	{
10996
c0f85c0d7284 (svn r13550) -Fix(r13540, r13542): widget_count did not had the same value as 27. So, it has to be lowered by one, so it can be used as a widget "pointer"
belugas
parents: 10989
diff changeset
   995
		for (uint i = TBN_SETTINGS; i < this->widget_count - 1; i++) {
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   996
			if (this->IsWidgetLowered(i)) {
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   997
				this->RaiseWidget(i);
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
   998
				this->InvalidateWidget(i);
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
   999
			}
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1000
		}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1001
	}
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1002
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1003
	virtual void OnInvalidateData(int data)
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1004
	{
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
  1005
		if (FindWindowById(WC_MAIN_WINDOW, 0) != NULL) HandleZoomMessage(this, FindWindowById(WC_MAIN_WINDOW, 0)->viewport, TBN_ZOOMIN, TBN_ZOOMOUT);
4719
413b21513ef7 (svn r6631) -Codechange: Use accessors for click_state.
belugas
parents: 4709
diff changeset
  1006
	}
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1007
};
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1008
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1009
static const Widget _toolb_normal_widgets[] = {
11085
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1010
{     WWT_IMGBTN,   RESIZE_LEFT,    14,     0,     0,     0,    21, SPR_IMG_PAUSE,           STR_0171_PAUSE_GAME},               // TBN_PAUSE
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1011
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_FASTFORWARD,     STR_FAST_FORWARD},                  // TBN_FASTFORWARD
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1012
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SETTINGS,        STR_0187_OPTIONS},                  // TBN_SETTINGS
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1013
{   WWT_IMGBTN_2,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SAVE,            STR_0172_SAVE_GAME_ABANDON_GAME},   // TBN_SAVEGAME
4938
074f734a91ca (svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents: 4912
diff changeset
  1014
11085
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1015
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SMALLMAP,        STR_0174_DISPLAY_MAP},              // TBN_SMALLMAP
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1016
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_TOWN,            STR_0176_DISPLAY_TOWN_DIRECTORY},   // TBN_TOWNDIRECTORY
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1017
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SUBSIDIES,       STR_02DC_DISPLAY_SUBSIDIES},        // TBN_SUBSIDIES
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1018
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_COMPANY_LIST,    STR_0173_DISPLAY_LIST_OF_COMPANY},  // TBN_STATIONS
7856
121ae75a45a0 (svn r10723) -Codechange: dynamically sized (width) main toolbars and status bar for when the window becomes less than 640 pixels in width.
rubidium
parents: 7855
diff changeset
  1019
11085
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1020
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_COMPANY_FINANCE, STR_0177_DISPLAY_COMPANY_FINANCES}, // TBN_FINANCES
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1021
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_COMPANY_GENERAL, STR_0178_DISPLAY_COMPANY_GENERAL},  // TBN_PLAYERS
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1022
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_GRAPHS,          STR_0179_DISPLAY_GRAPHS},           // TBN_GRAPHICS
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1023
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_COMPANY_LEAGUE,  STR_017A_DISPLAY_COMPANY_LEAGUE},   // TBN_LEAGUE
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1024
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_INDUSTRY,        STR_0312_FUND_CONSTRUCTION_OF_NEW}, // TBN_INDUSTRIES
7856
121ae75a45a0 (svn r10723) -Codechange: dynamically sized (width) main toolbars and status bar for when the window becomes less than 640 pixels in width.
rubidium
parents: 7855
diff changeset
  1025
11085
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1026
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_TRAINLIST,       STR_017B_DISPLAY_LIST_OF_COMPANY},  // TBN_TRAINS
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1027
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_TRUCKLIST,       STR_017C_DISPLAY_LIST_OF_COMPANY},  // TBN_ROADVEHS
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1028
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SHIPLIST,        STR_017D_DISPLAY_LIST_OF_COMPANY},  // TBN_SHIPS
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1029
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_AIRPLANESLIST,   STR_017E_DISPLAY_LIST_OF_COMPANY},  // TBN_AIRCRAFTS
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1030
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1031
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_ZOOMIN,          STR_017F_ZOOM_THE_VIEW_IN},         // TBN_ZOOMIN
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1032
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_ZOOMOUT,         STR_0180_ZOOM_THE_VIEW_OUT},        // TBN_ZOOMOUT
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1033
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1034
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_BUILDRAIL,       STR_0181_BUILD_RAILROAD_TRACK},     // TBN_RAILS
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1035
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_BUILDROAD,       STR_0182_BUILD_ROADS},              // TBN_ROADS
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1036
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_BUILDWATER,      STR_0183_BUILD_SHIP_DOCKS},         // TBN_WATER
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1037
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_BUILDAIR,        STR_0184_BUILD_AIRPORTS},           // TBN_AIR
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1038
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_LANDSCAPING,     STR_LANDSCAPING_TOOLBAR_TIP},       // TBN_LANDSCAPE tree icon is SPR_IMG_PLANTTREES
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1039
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1040
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_MUSIC,           STR_01D4_SHOW_SOUND_MUSIC_WINDOW},  // TBN_MUSICSOUND
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1041
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_MESSAGES,        STR_0203_SHOW_LAST_MESSAGE_NEWS},   // TBN_NEWSREPORT
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1042
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_QUERY,           STR_0186_LAND_BLOCK_INFORMATION},   // TBN_HELP
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1043
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_SWITCH_TOOLBAR,      STR_EMPTY},                         // TBN_SWITCHBAR
176
84990c4b9212 (svn r177) -Fix: padded out Widget code to solve warnings on C99 compiler (Tron)
darkvater
parents: 168
diff changeset
  1044
{   WIDGETS_END},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1045
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1046
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1047
static const WindowDesc _toolb_normal_desc = {
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
  1048
	0, 0, 0, TBP_BUTTONHEIGHT, 640, TBP_BUTTONHEIGHT,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6141
diff changeset
  1049
	WC_MAIN_TOOLBAR, WC_NONE,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1050
	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1051
	_toolb_normal_widgets,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1052
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1053
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1054
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1055
/* --- Toolbar handling for the scenario editor */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1056
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1057
static ToolbarButtonProc * const _scen_toolbar_button_procs[] = {
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1058
	ToolbarPauseClick,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1059
	ToolbarFastForwardClick,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1060
	ToolbarOptionsClick,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1061
	ToolbarScenSaveOrLoad,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1062
	ToolbarBtn_NULL,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1063
	ToolbarBtn_NULL,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1064
	ToolbarScenDateBackward,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1065
	ToolbarScenDateForward,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1066
	ToolbarScenMapTownDir,
11112
98ea88b2b32b (svn r13670) -Codechange : Merge some very alike events handlers.
belugas
parents: 11105
diff changeset
  1067
	ToolbarZoomInClick,
98ea88b2b32b (svn r13670) -Codechange : Merge some very alike events handlers.
belugas
parents: 11105
diff changeset
  1068
	ToolbarZoomOutClick,
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1069
	ToolbarScenGenLand,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1070
	ToolbarScenGenTown,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1071
	ToolbarScenGenIndustry,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1072
	ToolbarScenBuildRoad,
11071
91ac7664ad1e (svn r13628) -Feature: enable building of aqueducts in the scenario editor
skidd13
parents: 11041
diff changeset
  1073
	ToolbarScenBuildDocks,
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1074
	ToolbarScenPlantTrees,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1075
	ToolbarScenPlaceSign,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1076
	NULL,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1077
	NULL,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1078
	NULL,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1079
	NULL,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1080
	NULL,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1081
	NULL,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1082
	ToolbarMusicClick,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1083
	NULL,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1084
	ToolbarHelpClick,
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1085
};
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1086
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1087
struct ScenarioEditorToolbarWindow : Window {
10950
36bf5bd16ebd (svn r13504) -Codechange: enumify some widgets for scenario editor. More work is required.
belugas
parents: 10949
diff changeset
  1088
public:
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1089
	ScenarioEditorToolbarWindow(const WindowDesc *desc) : Window(desc)
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1090
	{
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1091
		CLRBITS(this->flags4, WF_WHITE_BORDER_MASK);
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1092
10635
2230c5423279 (svn r13179) -Fix (r13173): r13178 applies to the main toolbar in Scenario Editor, too
smatz
parents: 10634
diff changeset
  1093
		this->FindWindowPlacementAndResize(desc);
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1094
		PositionMainToolbar(this);
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1095
		DoZoomInOutWindow(ZOOM_NONE, this);
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1096
	}
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1097
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1098
	virtual void OnPaint()
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1099
	{
10950
36bf5bd16ebd (svn r13504) -Codechange: enumify some widgets for scenario editor. More work is required.
belugas
parents: 10949
diff changeset
  1100
		this->SetWidgetDisabledState(TBSE_DATEBACKWARD, _settings_newgame.game_creation.starting_year <= MIN_YEAR);
36bf5bd16ebd (svn r13504) -Codechange: enumify some widgets for scenario editor. More work is required.
belugas
parents: 10949
diff changeset
  1101
		this->SetWidgetDisabledState(TBSE_DATEFORWARD, _settings_newgame.game_creation.starting_year >= MAX_YEAR);
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1102
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1103
		/* Draw brown-red toolbar bg. */
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1104
		GfxFillRect(0, 0, this->width - 1, this->height - 1, 0xB2);
11092
e4fce2b3cded (svn r13649) -Codechange: Split the GfxFillRect() special flags from 'color' into their own parameter.
frosch
parents: 11089
diff changeset
  1105
		GfxFillRect(0, 0, this->width - 1, this->height - 1, 0xB4, FILLRECT_CHECKER);
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1106
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1107
		this->DrawWidgets();
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1108
10703
2c998f3776d1 (svn r13251) -Codechange: rename _patches to _settings as that is more logic.
rubidium
parents: 10684
diff changeset
  1109
		SetDParam(0, ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1));
10950
36bf5bd16ebd (svn r13504) -Codechange: enumify some widgets for scenario editor. More work is required.
belugas
parents: 10949
diff changeset
  1110
		DrawStringCenteredTruncated(this->widget[TBSE_DATEBACKWARD].right, this->widget[TBSE_DATEFORWARD].left, 6, STR_00AF, TC_FROMSTRING);
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1111
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1112
		/* We hide this panel when the toolbar space gets too small */
10950
36bf5bd16ebd (svn r13504) -Codechange: enumify some widgets for scenario editor. More work is required.
belugas
parents: 10949
diff changeset
  1113
		const Widget *panel = &this->widget[TBSE_SPACERPANEL];
36bf5bd16ebd (svn r13504) -Codechange: enumify some widgets for scenario editor. More work is required.
belugas
parents: 10949
diff changeset
  1114
		if (panel->left != panel->right) {
36bf5bd16ebd (svn r13504) -Codechange: enumify some widgets for scenario editor. More work is required.
belugas
parents: 10949
diff changeset
  1115
			DrawStringCenteredTruncated(panel->left + 1, panel->right - 1,  1, STR_0221_OPENTTD, TC_FROMSTRING);
36bf5bd16ebd (svn r13504) -Codechange: enumify some widgets for scenario editor. More work is required.
belugas
parents: 10949
diff changeset
  1116
			DrawStringCenteredTruncated(panel->left + 1, panel->right - 1, 11, STR_0222_SCENARIO_EDITOR, TC_FROMSTRING);
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1117
		}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1118
	}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1119
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1120
	virtual void OnClick(Point pt, int widget)
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1121
	{
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1122
		if (_game_mode == GM_MENU) return;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1123
		_scen_toolbar_button_procs[widget](this);
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1124
	}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1125
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1126
	virtual EventState OnKeyPress(uint16 key, uint16 keycode)
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1127
	{
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1128
		switch (keycode) {
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1129
			case WKC_F1: case WKC_PAUSE: ToolbarPauseClick(this); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1130
			case WKC_F2: ShowGameOptions(); break;
11105
bbcfdef0958e (svn r13663) -Codechange: Use a default parameter, hoping to reduce the different signatures of functions in menus
belugas
parents: 11092
diff changeset
  1131
			case WKC_F3: MenuClickSaveLoad(); break;
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1132
			case WKC_F4: ToolbarScenGenLand(this); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1133
			case WKC_F5: ToolbarScenGenTown(this); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1134
			case WKC_F6: ToolbarScenGenIndustry(this); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1135
			case WKC_F7: ToolbarScenBuildRoad(this); break;
11071
91ac7664ad1e (svn r13628) -Feature: enable building of aqueducts in the scenario editor
skidd13
parents: 11041
diff changeset
  1136
			case WKC_F8: ToolbarScenBuildDocks(this); break;
91ac7664ad1e (svn r13628) -Feature: enable building of aqueducts in the scenario editor
skidd13
parents: 11041
diff changeset
  1137
			case WKC_F9: ToolbarScenPlantTrees(this); break;
91ac7664ad1e (svn r13628) -Feature: enable building of aqueducts in the scenario editor
skidd13
parents: 11041
diff changeset
  1138
			case WKC_F10: ToolbarScenPlaceSign(this); break;
91ac7664ad1e (svn r13628) -Feature: enable building of aqueducts in the scenario editor
skidd13
parents: 11041
diff changeset
  1139
			case WKC_F11: ShowMusicWindow(); break;
91ac7664ad1e (svn r13628) -Feature: enable building of aqueducts in the scenario editor
skidd13
parents: 11041
diff changeset
  1140
			case WKC_F12: PlaceLandBlockInfo(); break;
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1141
			case WKC_CTRL | 'S': MenuClickSmallScreenshot(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1142
			case WKC_CTRL | 'G': MenuClickWorldScreenshot(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1143
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1144
			/* those following are all fall through */
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1145
			case WKC_NUM_PLUS:
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1146
			case WKC_EQUALS:
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1147
			case WKC_SHIFT | WKC_EQUALS:
11112
98ea88b2b32b (svn r13670) -Codechange : Merge some very alike events handlers.
belugas
parents: 11105
diff changeset
  1148
			case WKC_SHIFT | WKC_F5: ToolbarZoomInClick(this); break;
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1149
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1150
			/* those following are all fall through */
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1151
			case WKC_NUM_MINUS:
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1152
			case WKC_MINUS:
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1153
			case WKC_SHIFT | WKC_MINUS:
11112
98ea88b2b32b (svn r13670) -Codechange : Merge some very alike events handlers.
belugas
parents: 11105
diff changeset
  1154
			case WKC_SHIFT | WKC_F6: ToolbarZoomOutClick(this); break;
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1155
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1156
			case 'L': ShowEditorTerraformToolbar(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1157
			case 'M': ShowSmallMap(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1158
			case 'V': ShowExtraViewPortWindow(); break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1159
			default: return ES_NOT_HANDLED;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1160
		}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1161
		return ES_HANDLED;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1162
	}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1163
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1164
	virtual void OnPlaceObject(Point pt, TileIndex tile)
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1165
	{
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1166
		_place_proc(tile);
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1167
	}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1168
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1169
	virtual void OnResize(Point new_size, Point delta)
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1170
	{
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
  1171
		/* There are 16 buttons plus some spacings if the space allows it.
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1172
		 * Furthermore there are two panels of which one is non - essential
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
  1173
		 * and that one can be removed if the space is too small. */
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1174
		uint buttons_width;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1175
		uint spacing;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1176
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
  1177
		static const int normal_min_width = (TBP_SCENARIO_MAXBUTTON * TBP_BUTTONWIDTH) + (2 * TBP_DATEPANELWIDTH);
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
  1178
		static const int one_less_panel_min_width = (TBP_SCENARIO_MAXBUTTON * TBP_BUTTONWIDTH) + TBP_DATEPANELWIDTH;
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1179
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1180
		if (this->width >= one_less_panel_min_width) {
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
  1181
			buttons_width = TBP_SCENARIO_MAXBUTTON * TBP_BUTTONWIDTH;
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1182
			spacing = this->width - ((this->width >= normal_min_width) ? normal_min_width : one_less_panel_min_width);
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1183
		} else {
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
  1184
			buttons_width = this->width - TBP_DATEPANELWIDTH;
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1185
			spacing = 0;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1186
		}
11071
91ac7664ad1e (svn r13628) -Feature: enable building of aqueducts in the scenario editor
skidd13
parents: 11041
diff changeset
  1187
		static const uint extra_spacing_at[] = { 3, 4, 7, 8, 10, 17, 0 };
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1188
11004
2304148338a4 (svn r13560) -Fix(r13550): This section widget_count did not required to be lowered. So small revert
belugas
parents: 11003
diff changeset
  1189
		for (uint i = 0, x = 0, j = 0, b = 0; i < this->widget_count; i++) {
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1190
			switch (i) {
11005
48b2f39c5e1b (svn r13561) -Codechange: two more enumifications of widgets
belugas
parents: 11004
diff changeset
  1191
				case TBSE_SPACERPANEL:
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1192
					this->widget[i].left = x;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1193
					if (this->width < normal_min_width) {
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1194
						this->widget[i].right = x;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1195
						j++;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1196
						continue;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1197
					}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1198
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
  1199
					x += TBP_DATEPANELWIDTH;
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1200
					this->widget[i].right = x - 1;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1201
					break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1202
11084
718382a9cfbf (svn r13641) -Fix: Misleading enum name.
belugas
parents: 11071
diff changeset
  1203
				case TBSE_DATEPANEL: {
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1204
					int offset = x - this->widget[i].left;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1205
					this->widget[i + 1].left  += offset;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1206
					this->widget[i + 1].right += offset;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1207
					this->widget[i + 2].left  += offset;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1208
					this->widget[i + 2].right += offset;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1209
					this->widget[i].left = x;
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
  1210
					x += TBP_DATEPANELWIDTH;
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1211
					this->widget[i].right = x - 1;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1212
					i += 2;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1213
				} break;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1214
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1215
				default:
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1216
					if (this->widget[i].bottom == 0) continue;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1217
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1218
					this->widget[i].left = x;
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
  1219
					x += buttons_width / (TBP_SCENARIO_MAXBUTTON - b);
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1220
					this->widget[i].right = x - 1;
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
  1221
					buttons_width -= buttons_width / (TBP_SCENARIO_MAXBUTTON - b);
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1222
					b++;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1223
					break;
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1224
			}
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1225
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1226
			if (extra_spacing_at[j] == i) {
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1227
				j++;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1228
				uint add = spacing / (lengthof(extra_spacing_at) - j);
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1229
				spacing -= add;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1230
				x += add;
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1231
			}
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1232
		}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1233
	}
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1234
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1235
	virtual void OnTick()
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1236
	{
10950
36bf5bd16ebd (svn r13504) -Codechange: enumify some widgets for scenario editor. More work is required.
belugas
parents: 10949
diff changeset
  1237
		if (this->IsWidgetLowered(TBSE_PAUSE) != !!_pause_game) {
36bf5bd16ebd (svn r13504) -Codechange: enumify some widgets for scenario editor. More work is required.
belugas
parents: 10949
diff changeset
  1238
			this->ToggleWidgetLoweredState(TBSE_PAUSE);
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1239
			this->SetDirty();
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1240
		}
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1241
10950
36bf5bd16ebd (svn r13504) -Codechange: enumify some widgets for scenario editor. More work is required.
belugas
parents: 10949
diff changeset
  1242
		if (this->IsWidgetLowered(TBSE_FASTFORWARD) != !!_fast_forward) {
36bf5bd16ebd (svn r13504) -Codechange: enumify some widgets for scenario editor. More work is required.
belugas
parents: 10949
diff changeset
  1243
			this->ToggleWidgetLoweredState(TBSE_FASTFORWARD);
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1244
			this->SetDirty();
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1245
		}
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1246
	}
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1247
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1248
	virtual void OnInvalidateData(int data)
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1249
	{
10950
36bf5bd16ebd (svn r13504) -Codechange: enumify some widgets for scenario editor. More work is required.
belugas
parents: 10949
diff changeset
  1250
		if (FindWindowById(WC_MAIN_WINDOW, 0) != NULL) HandleZoomMessage(this, FindWindowById(WC_MAIN_WINDOW, 0)->viewport, TBSE_ZOOMIN, TBSE_ZOOMOUT);
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1251
	}
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1252
};
9219
d232ad03c54c (svn r12398) -Codechange [FS#1770]: Move toolbar related code to it's own little neighbourhood. Based on a patch by Dominik.
rubidium
parents: 9111
diff changeset
  1253
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1254
static const Widget _toolb_scen_widgets[] = {
11085
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1255
{  WWT_IMGBTN, RESIZE_LEFT, 14,   0,   0,  0, 21, SPR_IMG_PAUSE,       STR_0171_PAUSE_GAME},                  // TBSE_PAUSE
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1256
{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_FASTFORWARD, STR_FAST_FORWARD},                     // TBSE_FASTFORWARD
7856
121ae75a45a0 (svn r10723) -Codechange: dynamically sized (width) main toolbars and status bar for when the window becomes less than 640 pixels in width.
rubidium
parents: 7855
diff changeset
  1257
{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_SETTINGS,    STR_0187_OPTIONS},
11085
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1258
{WWT_IMGBTN_2, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_SAVE,        STR_0297_SAVE_SCENARIO_LOAD_SCENARIO}, // TBSE_SAVESCENARIO
7856
121ae75a45a0 (svn r10723) -Codechange: dynamically sized (width) main toolbars and status bar for when the window becomes less than 640 pixels in width.
rubidium
parents: 7855
diff changeset
  1259
11085
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1260
{   WWT_PANEL, RESIZE_NONE, 14,   0,   0,  0, 21, 0x0,                 STR_NULL},                             // TBSE_SPACERPANEL
7856
121ae75a45a0 (svn r10723) -Codechange: dynamically sized (width) main toolbars and status bar for when the window becomes less than 640 pixels in width.
rubidium
parents: 7855
diff changeset
  1261
11085
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1262
{   WWT_PANEL, RESIZE_NONE, 14,   0, 129,  0, 21, 0x0,                 STR_NULL},                             // TBSE_DATEPANEL
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1263
{  WWT_IMGBTN, RESIZE_NONE, 14,   3,  14,  5, 16, SPR_ARROW_DOWN,      STR_029E_MOVE_THE_STARTING_DATE},      // TBSE_DATEBACKWARD
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1264
{  WWT_IMGBTN, RESIZE_NONE, 14, 113, 125,  5, 16, SPR_ARROW_UP,        STR_029F_MOVE_THE_STARTING_DATE},      // TBSE_DATEFORWARD
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1265
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1266
{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_SMALLMAP,    STR_0175_DISPLAY_MAP_TOWN_DIRECTORY},  // TBSE_SMALLMAP
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1267
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1268
{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_ZOOMIN,      STR_017F_ZOOM_THE_VIEW_IN},            // TBSE_ZOOMIN
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1269
{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_ZOOMOUT,     STR_0180_ZOOM_THE_VIEW_OUT},           // TBSE_ZOOMOUT
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1270
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1271
{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_LANDSCAPING, STR_022E_LANDSCAPE_GENERATION},        // TBSE_LANDGENERATE
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1272
{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_TOWN,        STR_022F_TOWN_GENERATION},             // TBSE_TOWNGENERATE
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1273
{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_INDUSTRY,    STR_0230_INDUSTRY_GENERATION},         // TBSE_INDUSTRYGENERATE
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1274
{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_BUILDROAD,   STR_0231_ROAD_CONSTRUCTION},           // TBSE_BUILDROAD
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1275
{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_BUILDWATER,  STR_0183_BUILD_SHIP_DOCKS},            // TBSE_BUILDDOCKS
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1276
{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_PLANTTREES,  STR_0288_PLANT_TREES},                 // TBSE_PLANTTREES
3239500a90b2 (svn r13642) -Documentation: Add the enum values to the widget arrays, in concordance with code style
belugas
parents: 11084
diff changeset
  1277
{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_SIGN,        STR_0289_PLACE_SIGN},                  // TBSE_PLACESIGNS
4938
074f734a91ca (svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents: 4912
diff changeset
  1278
074f734a91ca (svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents: 4912
diff changeset
  1279
{   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
074f734a91ca (svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents: 4912
diff changeset
  1280
{   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
074f734a91ca (svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents: 4912
diff changeset
  1281
{   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
074f734a91ca (svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents: 4912
diff changeset
  1282
{   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
074f734a91ca (svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents: 4912
diff changeset
  1283
{   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
074f734a91ca (svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents: 4912
diff changeset
  1284
{   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
7856
121ae75a45a0 (svn r10723) -Codechange: dynamically sized (width) main toolbars and status bar for when the window becomes less than 640 pixels in width.
rubidium
parents: 7855
diff changeset
  1285
{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_MUSIC,       STR_01D4_SHOW_SOUND_MUSIC_WINDOW},
4938
074f734a91ca (svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents: 4912
diff changeset
  1286
{   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
7856
121ae75a45a0 (svn r10723) -Codechange: dynamically sized (width) main toolbars and status bar for when the window becomes less than 640 pixels in width.
rubidium
parents: 7855
diff changeset
  1287
{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_QUERY,       STR_0186_LAND_BLOCK_INFORMATION},
3248
3efa415f68f1 (svn r3931) - [ 1451726 ] Use sprite names in main_gui.c instead of numbers (matthewwalton)
Darkvater
parents: 3182
diff changeset
  1288
{WIDGETS_END},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1289
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1290
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1291
static const WindowDesc _toolb_scen_desc = {
11086
64da2918edb5 (svn r13643) -Codechange: Enumify some loosely related values been used in the toolbar resizing processes
belugas
parents: 11085
diff changeset
  1292
	0, 0, 130, TBP_BUTTONHEIGHT, 640, TBP_BUTTONHEIGHT,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6141
diff changeset
  1293
	WC_MAIN_TOOLBAR, WC_NONE,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1294
	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1295
	_toolb_scen_widgets,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1296
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1297
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1298
/* --- Rendering/handling the drop down menus --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1299
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1300
typedef void MenuClickedProc(int index);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1301
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1302
static MenuClickedProc * const _menu_clicked_procs[] = {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1303
	NULL,                 /* 0 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1304
	NULL,                 /* 1 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1305
	MenuClickSettings,    /* 2 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1306
	MenuClickSaveLoad,    /* 3 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1307
	MenuClickMap,         /* 4 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1308
	MenuClickTown,        /* 5 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1309
	MenuClickSubsidies,   /* 6 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1310
	MenuClickStations,    /* 7 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1311
	MenuClickFinances,    /* 8 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1312
	MenuClickCompany,     /* 9 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1313
	MenuClickGraphs,      /* 10 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1314
	MenuClickLeague,      /* 11 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1315
	MenuClickIndustry,    /* 12 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1316
	MenuClickShowTrains,  /* 13 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1317
	MenuClickShowRoad,    /* 14 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1318
	MenuClickShowShips,   /* 15 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1319
	MenuClickShowAir,     /* 16 */
11041
5a7b939e6846 (svn r13597) -Codechange: Enumification of the Map menu items.
belugas
parents: 11034
diff changeset
  1320
	MenuClickMap,         /* 17 */
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1321
	NULL,                 /* 18 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1322
	MenuClickBuildRail,   /* 19 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1323
	MenuClickBuildRoad,   /* 20 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1324
	MenuClickBuildWater,  /* 21 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1325
	MenuClickBuildAir,    /* 22 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1326
	MenuClickForest,      /* 23 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1327
	MenuClickMusicWindow, /* 24 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1328
	MenuClickNewspaper,   /* 25 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1329
	MenuClickHelp,        /* 26 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1330
};
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1331
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1332
struct ToolbarMenuWindow : Window {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1333
	int item_count;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1334
	int sel_index;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1335
	int main_button;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1336
	int action_id;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1337
	int checked_items;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1338
	int disabled_items;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1339
	StringID base_string;
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1340
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1341
	ToolbarMenuWindow(int x, int y, int width, int height, const Widget *widgets, int item_count,
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1342
										int sel_index, int parent_button, StringID base_string, int checked_items,
10664
1c8991412bd9 (svn r13208) -Fix (r13173): it was possible to open invalid submenu from dropdowns
smatz
parents: 10641
diff changeset
  1343
										int disabled_items) :
10625
3c1f6a26db71 (svn r13169) -Codechange: remove a (now) unneeded parameter of one of the Window constructors.
rubidium
parents: 10595
diff changeset
  1344
			Window(x, y, width, height, WC_TOOLBAR_MENU, widgets),
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1345
			item_count(item_count), sel_index(sel_index), main_button(GB(parent_button, 0, 8)),
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1346
			action_id((GB(parent_button, 8, 8) != 0) ? GB(parent_button, 8, 8) : parent_button),
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1347
			checked_items(checked_items), disabled_items(disabled_items), base_string(base_string)
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1348
	{
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1349
		this->widget[0].bottom = item_count * 10 + 1;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1350
		this->widget[0].right = this->width - 1;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1351
		this->flags4 &= ~WF_WHITE_BORDER_MASK;
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1352
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1353
		this->FindWindowPlacementAndResize(width, height);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1354
	}
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1355
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1356
	~ToolbarMenuWindow()
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1357
	{
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1358
		Window *w = FindWindowById(WC_MAIN_TOOLBAR, 0);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1359
		w->RaiseWidget(this->main_button);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1360
		w->SetDirty();
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1361
	}
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1362
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1363
	virtual void OnPaint()
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1364
	{
10595
7957c71b0dfe (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents: 10564
diff changeset
  1365
		this->DrawWidgets();
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1366
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1367
		for (int i = 0, x = 1, y = 1; i != this->item_count; i++, y += 10) {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1368
			TextColour color = HasBit(this->disabled_items, i) ? TC_GREY : (this->sel_index == i) ? TC_WHITE : TC_BLACK;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1369
			if (this->sel_index == i) GfxFillRect(x, y, x + this->width - 3, y + 9, 0);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1370
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1371
			if (HasBit(this->checked_items, i)) DrawString(x + 2, y, STR_CHECKMARK, color);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1372
			DrawString(x + 2, y, this->base_string + i, color);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1373
		}
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1374
	}
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1375
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1376
	virtual void OnMouseLoop()
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1377
	{
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1378
		int index = GetMenuItemIndex(this, this->item_count, this->disabled_items);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1379
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1380
		if (_left_button_down) {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1381
			if (index == -1 || index == this->sel_index) return;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1382
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1383
			this->sel_index = index;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1384
			this->SetDirty();
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1385
		} else {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1386
			if (index < 0) {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1387
				Window *w = FindWindowById(WC_MAIN_TOOLBAR,0);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1388
				if (GetWidgetFromPos(w, _cursor.pos.x - w->left, _cursor.pos.y - w->top) == this->main_button) {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1389
					index = this->sel_index;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1390
				}
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1391
			}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1392
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1393
			int action_id = this->action_id;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1394
			delete this;
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1395
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1396
			if (index >= 0) {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1397
				assert((uint)index <= lengthof(_menu_clicked_procs));
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1398
				_menu_clicked_procs[action_id](index);
10482
260c05e63bf4 (svn r13025) -Codechange: remove the need for two WindowEvents.
rubidium
parents: 10481
diff changeset
  1399
			}
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1400
		}
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1401
	}
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1402
};
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1403
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1404
/* Dynamic widget length determined by toolbar-string length.
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1405
 * See PopupMainToolbMenu en MenuWndProc */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1406
static const Widget _menu_widgets[] = {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1407
{    WWT_PANEL, RESIZE_NONE, 14, 0,  0, 0, 0, 0x0, STR_NULL},
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1408
{ WIDGETS_END},
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1409
};
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1410
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1411
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1412
/**
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1413
 * Get the maximum length of a given string in a string-list. This is an
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1414
 * implicit string-list where the ID's are consecutive
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1415
 * @param base_string StringID of the first string in the list
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1416
 * @param count amount of StringID's in the list
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1417
 * @return the length of the longest string
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1418
 */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1419
static int GetStringListMaxWidth(StringID base_string, byte count)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1420
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1421
	char buffer[512];
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1422
	int width, max_width = 0;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1423
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1424
	for (byte i = 0; i != count; i++) {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1425
		GetString(buffer, base_string + i, lastof(buffer));
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1426
		width = GetStringBoundingBox(buffer).width;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1427
		if (width > max_width) max_width = width;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1428
	}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1429
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1430
	return max_width;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1431
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1432
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1433
/**
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1434
 * Show a general dropdown menu. The positioning of the dropdown menu
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1435
 * defaults to the left side of the parent_button, eg the button that caused
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1436
 * this window to appear. The only exceptions are when the right side of this
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1437
 * dropdown would fall outside the main toolbar window, in that case it is
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1438
 * aligned with the toolbar's right side.
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1439
 * Since the disable-mask is only 8 bits right now, these dropdowns are
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1440
 * restricted to 8 items max if any bits of disabled_mask are active.
10562
a9ba187756d8 (svn r13106) -Codechange: rework the toolbar code a little so functions do not have to return the Window they just created.
rubidium
parents: 10517
diff changeset
  1441
 * @param parent Pointer to a window this dropdown menu belongs to. Has no effect
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1442
 * whatsoever, only graphically for positioning.
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1443
 * @param parent_button The widget identifier of the button that was clicked for
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1444
 * this dropdown. The created dropdown then knows what button to raise (button) on
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1445
 * action and whose function to execute (action).
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1446
 * It is possible to appoint another button for an action event by setting the
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1447
 * upper 8 bits of this parameter. If non is set, action is presumed to be the same
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1448
 * as button. So<br>
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1449
 * button bits 0 -  7 - widget clicked to get dropdown
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1450
 * action bits 8 - 15 - function of widget to execute on select (defaults to bits 0 - 7)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1451
 * @param base_string The first StringID shown in the dropdown list. All others are
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1452
 * consecutive indeces from the language file. XXX - fix? Use ingame-string tables?
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1453
 * @param item_count Number of strings in the list, see previous parameter
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1454
 * @param disabled_mask Bitmask of disabled strings in the list
10562
a9ba187756d8 (svn r13106) -Codechange: rework the toolbar code a little so functions do not have to return the Window they just created.
rubidium
parents: 10517
diff changeset
  1455
 * @param sel_index The selected toolbar item
a9ba187756d8 (svn r13106) -Codechange: rework the toolbar code a little so functions do not have to return the Window they just created.
rubidium
parents: 10517
diff changeset
  1456
 * @param check_items The items to have a checked mark in front of them.
a9ba187756d8 (svn r13106) -Codechange: rework the toolbar code a little so functions do not have to return the Window they just created.
rubidium
parents: 10517
diff changeset
  1457
 * @return Return a pointer to the newly created dropdown window
a9ba187756d8 (svn r13106) -Codechange: rework the toolbar code a little so functions do not have to return the Window they just created.
rubidium
parents: 10517
diff changeset
  1458
 */
a9ba187756d8 (svn r13106) -Codechange: rework the toolbar code a little so functions do not have to return the Window they just created.
rubidium
parents: 10517
diff changeset
  1459
static void PopupMainToolbMenu(Window *parent, uint16 parent_button, StringID base_string, byte item_count, byte disabled_mask, int sel_index, int checked_items)
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1460
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1461
	assert(disabled_mask == 0 || item_count <= 8);
10562
a9ba187756d8 (svn r13106) -Codechange: rework the toolbar code a little so functions do not have to return the Window they just created.
rubidium
parents: 10517
diff changeset
  1462
	parent->LowerWidget(parent_button);
a9ba187756d8 (svn r13106) -Codechange: rework the toolbar code a little so functions do not have to return the Window they just created.
rubidium
parents: 10517
diff changeset
  1463
	parent->InvalidateWidget(parent_button);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1464
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1465
	DeleteWindowById(WC_TOOLBAR_MENU, 0);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1466
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1467
	/* Extend the dropdown toolbar to the longest string in the list */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1468
	int width = max(GetStringListMaxWidth(base_string, item_count) + 6, 140);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1469
	int height = item_count * 10 + 2;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1470
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1471
	Point pos = GetToolbarDropdownPos(parent_button, width, height);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1472
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1473
	new ToolbarMenuWindow(pos.x, pos.y, width, height, _menu_widgets, item_count, sel_index, parent_button, base_string, checked_items, disabled_mask);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1474
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1475
	SndPlayFx(SND_15_BEEP);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1476
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1477
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1478
/* --- Rendering/drawing the player menu --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1479
static int GetPlayerIndexFromMenu(int index)
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1480
{
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1481
	if (index >= 0) {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1482
		const Player *p;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1483
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1484
		FOR_ALL_PLAYERS(p) {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1485
			if (p->is_active && --index < 0) return p->index;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1486
		}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1487
	}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1488
	return -1;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1489
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1490
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1491
struct ToolbarPlayerMenuWindow : Window {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1492
	int item_count;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1493
	int sel_index;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1494
	int main_button;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1495
	int action_id;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1496
	int gray_items;
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1497
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1498
	ToolbarPlayerMenuWindow(int x, int y, int width, int height, const Widget *widgets, int main_button, int gray) :
10625
3c1f6a26db71 (svn r13169) -Codechange: remove a (now) unneeded parameter of one of the Window constructors.
rubidium
parents: 10595
diff changeset
  1499
			Window(x, y, width, height, WC_TOOLBAR_MENU, widgets),
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1500
			item_count(0), main_button(main_button), action_id(main_button), gray_items(gray)
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1501
	{
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1502
		this->flags4 &= ~WF_WHITE_BORDER_MASK;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1503
		this->sel_index = (_local_player != PLAYER_SPECTATOR) ? _local_player : GetPlayerIndexFromMenu(0);
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
  1504
		if (_networking && main_button == TBN_PLAYERS) {
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1505
			if (_local_player != PLAYER_SPECTATOR) {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1506
				this->sel_index++;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1507
			} else {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1508
				/* Select client list by default for spectators */
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1509
				this->sel_index = 0;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1510
			}
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1511
		}
10681
3aa3de4d448b (svn r13225) -Fix (r13041): Missing calls to FindWindowPlacementAndResize() from lots
peter1138
parents: 10664
diff changeset
  1512
3aa3de4d448b (svn r13225) -Fix (r13041): Missing calls to FindWindowPlacementAndResize() from lots
peter1138
parents: 10664
diff changeset
  1513
		this->FindWindowPlacementAndResize(width, height);
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1514
	}
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1515
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1516
	~ToolbarPlayerMenuWindow()
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1517
	{
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1518
		Window *w = FindWindowById(WC_MAIN_TOOLBAR, 0);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1519
		w->RaiseWidget(this->main_button);
10434
d6accd017341 (svn r12976) -Codechange: use w->SetDirty() instead of SetWindowDirty(w) when it's certain that w != NULL.
rubidium
parents: 10433
diff changeset
  1520
		w->SetDirty();
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1521
	}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1522
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1523
	void UpdatePlayerMenuHeight()
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1524
	{
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1525
		byte num = ActivePlayerCount();
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1526
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1527
		/* Increase one to fit in PlayerList in the menu when in network */
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
  1528
		if (_networking && this->main_button == TBN_PLAYERS) num++;
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1529
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1530
		if (this->item_count != num) {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1531
			this->item_count = num;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1532
			this->SetDirty();
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1533
			num = num * 10 + 2;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1534
			this->height = num;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1535
			this->widget[0].bottom = this->widget[0].top + num - 1;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1536
			this->top = GetToolbarDropdownPos(0, this->width, this->height).y;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1537
			this->SetDirty();
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1538
		}
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1539
	}
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1540
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1541
	virtual void OnPaint()
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1542
	{
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1543
		this->UpdatePlayerMenuHeight();
10595
7957c71b0dfe (svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium
parents: 10564
diff changeset
  1544
		this->DrawWidgets();
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1545
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1546
		int x = 1;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1547
		int y = 1;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1548
		int sel = this->sel_index;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1549
		int gray = this->gray_items;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1550
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1551
		/* 9 = playerlist */
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
  1552
		if (_networking && this->main_button == TBN_PLAYERS) {
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1553
			if (sel == 0) {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1554
				GfxFillRect(x, y, x + 238, y + 9, 0);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1555
			}
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1556
			DrawString(x + 19, y, STR_NETWORK_CLIENT_LIST, TC_FROMSTRING);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1557
			y += 10;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1558
			sel--;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1559
		}
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1560
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1561
		const Player *p;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1562
		FOR_ALL_PLAYERS(p) {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1563
			if (p->is_active) {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1564
				if (p->index == sel) {
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1565
					GfxFillRect(x, y, x + 238, y + 9, 0);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1566
				}
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1567
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1568
				DrawPlayerIcon(p->index, x + 2, y + 1);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1569
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1570
				SetDParam(0, p->index);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1571
				SetDParam(1, p->index);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1572
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1573
				TextColour color = (p->index == sel) ? TC_WHITE : TC_BLACK;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1574
				if (gray & 1) color = TC_GREY;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1575
				DrawString(x + 19, y, STR_7021, color);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1576
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1577
				y += 10;
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1578
			}
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1579
			gray >>= 1;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1580
		}
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1581
	}
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1582
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1583
	virtual void OnMouseLoop()
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1584
	{
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1585
		int index = GetMenuItemIndex(this, this->item_count, 0);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1586
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1587
		if (_left_button_down) {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1588
			this->UpdatePlayerMenuHeight();
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1589
			/* We have a new entry at the top of the list of menu 9 when networking
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1590
				* so keep that in count */
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
  1591
			if (_networking && this->main_button == TBN_PLAYERS) {
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1592
				if (index > 0) index = GetPlayerIndexFromMenu(index - 1) + 1;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1593
			} else {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1594
				index = GetPlayerIndexFromMenu(index);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1595
			}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1596
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1597
			if (index == -1 || index == this->sel_index) return;
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1598
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1599
			this->sel_index = index;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1600
			this->SetDirty();
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1601
		} else {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1602
			int action_id = this->action_id;
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1603
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1604
			/* We have a new entry at the top of the list of menu 9 when networking
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1605
				* so keep that in count */
10989
253dc7c191dd (svn r13543) -Codechange: Enumification of the InGame toolbar and some leftovers of scenario editor one.
belugas
parents: 10988
diff changeset
  1606
			if (_networking && this->main_button == TBN_PLAYERS) {
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1607
				if (index > 0) index = GetPlayerIndexFromMenu(index - 1) + 1;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1608
			} else {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1609
				index = GetPlayerIndexFromMenu(index);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1610
			}
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1611
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1612
			if (index < 0) {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1613
				Window *w = FindWindowById(WC_MAIN_TOOLBAR,0);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1614
				if (GetWidgetFromPos(w, _cursor.pos.x - w->left, _cursor.pos.y - w->top) == this->main_button) {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1615
					index = this->sel_index;
10482
260c05e63bf4 (svn r13025) -Codechange: remove the need for two WindowEvents.
rubidium
parents: 10481
diff changeset
  1616
				}
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1617
			}
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1618
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1619
			delete this;
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1620
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1621
			if (index >= 0) {
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1622
				assert(index >= 0 && index < 30);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1623
				_menu_clicked_procs[action_id](index);
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1624
			}
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1625
		}
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1626
	}
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1627
};
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1628
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1629
static const Widget _player_menu_widgets[] = {
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1630
{    WWT_PANEL, RESIZE_NONE, 14, 0, 240, 0, 81, 0x0, STR_NULL},
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1631
{ WIDGETS_END},
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1632
};
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1633
11032
09c3602e12e9 (svn r13588) -Documentation: Document the function PopupMainPlayerToolbMenu. Makes it a bit clearer, don't you think?
belugas
parents: 11030
diff changeset
  1634
/** Shows the list of players appearing under the buttons that are linked to options for
09c3602e12e9 (svn r13588) -Documentation: Document the function PopupMainPlayerToolbMenu. Makes it a bit clearer, don't you think?
belugas
parents: 11030
diff changeset
  1635
 * multiple players.
09c3602e12e9 (svn r13588) -Documentation: Document the function PopupMainPlayerToolbMenu. Makes it a bit clearer, don't you think?
belugas
parents: 11030
diff changeset
  1636
 * @param parent Window who triggered that action.  It's the toolbar, in fact
09c3602e12e9 (svn r13588) -Documentation: Document the function PopupMainPlayerToolbMenu. Makes it a bit clearer, don't you think?
belugas
parents: 11030
diff changeset
  1637
 * @param main_button widget which has been used
09c3602e12e9 (svn r13588) -Documentation: Document the function PopupMainPlayerToolbMenu. Makes it a bit clearer, don't you think?
belugas
parents: 11030
diff changeset
  1638
 * @param gray bit-mapping of the items that will need to be grayed out once displayed */
10562
a9ba187756d8 (svn r13106) -Codechange: rework the toolbar code a little so functions do not have to return the Window they just created.
rubidium
parents: 10517
diff changeset
  1639
static void PopupMainPlayerToolbMenu(Window *parent, int main_button, int gray)
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1640
{
10562
a9ba187756d8 (svn r13106) -Codechange: rework the toolbar code a little so functions do not have to return the Window they just created.
rubidium
parents: 10517
diff changeset
  1641
	parent->LowerWidget(main_button);
a9ba187756d8 (svn r13106) -Codechange: rework the toolbar code a little so functions do not have to return the Window they just created.
rubidium
parents: 10517
diff changeset
  1642
	parent->InvalidateWidget(main_button);
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1643
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1644
	DeleteWindowById(WC_TOOLBAR_MENU, 0);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1645
	Point pos = GetToolbarDropdownPos(main_button, 241, 82);
10564
9d79c5088048 (svn r13108) -Codechange: make a Window subclass of the main toolbars sub menus.
rubidium
parents: 10562
diff changeset
  1646
	new ToolbarPlayerMenuWindow(pos.x, pos.y, 241, 82, _player_menu_widgets, main_button, gray);
10482
260c05e63bf4 (svn r13025) -Codechange: remove the need for two WindowEvents.
rubidium
parents: 10481
diff changeset
  1647
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1648
	SndPlayFx(SND_15_BEEP);
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1649
}
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1650
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1651
/* --- Allocating the toolbar --- */
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1652
10562
a9ba187756d8 (svn r13106) -Codechange: rework the toolbar code a little so functions do not have to return the Window they just created.
rubidium
parents: 10517
diff changeset
  1653
void AllocateToolbar()
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4013
diff changeset
  1654
{
10281
85a77bfe5614 (svn r12813) -Fix [FS#1943]: the 'last built railtype' got reset too often.
rubidium
parents: 10237
diff changeset
  1655
	/* Clean old GUI values; railtype is (re)set by rail_gui.cpp */
10235
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1656
	_last_built_roadtype = ROADTYPE_ROAD;
684949ed0f03 (svn r12767) -Codechange: merge all main toolbar related functions into a single file instead of scattering the functionality over several files.
rubidium
parents: 10229
diff changeset
  1657
10629
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1658
	if (_game_mode == GM_EDITOR) {
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1659
		new ScenarioEditorToolbarWindow(&_toolb_scen_desc);;
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1660
	} else {
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1661
		new MainToolbarWindow(&_toolb_normal_desc);
0e8f3403b378 (svn r13173) -Codechange: make windows of the main toolbars.
rubidium
parents: 10625
diff changeset
  1662
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1663
}