src/intro_gui.cpp
changeset 9282 f8bcac5d5ae3
parent 9273 35e0224ea8f1
child 9317 f14eb8815829
equal deleted inserted replaced
9281:18200114be76 9282:f8bcac5d5ae3
    51 {
    51 {
    52 	_opt_newgame.landscape = landscape;
    52 	_opt_newgame.landscape = landscape;
    53 	InvalidateWindowClasses(WC_SELECT_GAME);
    53 	InvalidateWindowClasses(WC_SELECT_GAME);
    54 }
    54 }
    55 
    55 
    56 enum SelectGameIntroWidgets {
    56 struct SelectGameWindow : public Window {
    57 	SGI_GENERATE_GAME = 2,
    57 private:
    58 	SGI_LOAD_GAME,
    58 	enum SelectGameIntroWidgets {
    59 	SGI_PLAY_SCENARIO,
    59 		SGI_GENERATE_GAME = 2,
    60 	SGI_PLAY_HEIGHTMAP,
    60 		SGI_LOAD_GAME,
    61 	SGI_EDIT_SCENARIO,
    61 		SGI_PLAY_SCENARIO,
    62 	SGI_PLAY_NETWORK,
    62 		SGI_PLAY_HEIGHTMAP,
    63 	SGI_TEMPERATE_LANDSCAPE,
    63 		SGI_EDIT_SCENARIO,
    64 	SGI_ARCTIC_LANDSCAPE,
    64 		SGI_PLAY_NETWORK,
    65 	SGI_TROPIC_LANDSCAPE,
    65 		SGI_TEMPERATE_LANDSCAPE,
    66 	SGI_TOYLAND_LANDSCAPE,
    66 		SGI_ARCTIC_LANDSCAPE,
    67 	SGI_OPTIONS,
    67 		SGI_TROPIC_LANDSCAPE,
    68 	SGI_DIFFICULTIES,
    68 		SGI_TOYLAND_LANDSCAPE,
    69 	SGI_PATCHES_OPTIONS,
    69 		SGI_OPTIONS,
    70 	SGI_GRF_SETTINGS,
    70 		SGI_DIFFICULTIES,
    71 	SGI_EXIT,
    71 		SGI_PATCHES_OPTIONS,
    72 };
    72 		SGI_GRF_SETTINGS,
       
    73 		SGI_EXIT,
       
    74 	};
    73 
    75 
    74 static void SelectGameWndProc(Window *w, WindowEvent *e)
    76 public:
    75 {
    77 	SelectGameWindow(const WindowDesc *desc) : Window(desc)
    76 	switch (e->event) {
    78 	{
    77 		case WE_CREATE: w->LowerWidget(_opt_newgame.landscape + 8); break;
    79 		this->LowerWidget(_opt_newgame.landscape + SGI_TEMPERATE_LANDSCAPE);
       
    80 		this->FindWindowPlacementAndResize(desc);
       
    81 	}
    78 
    82 
    79 		case WE_PAINT:
    83 	virtual void OnPaint()
    80 			w->SetWidgetLoweredState(SGI_TEMPERATE_LANDSCAPE, _opt_newgame.landscape == LT_TEMPERATE);
    84 	{
    81 			w->SetWidgetLoweredState(SGI_ARCTIC_LANDSCAPE, _opt_newgame.landscape == LT_ARCTIC);
    85 		this->SetWidgetLoweredState(SGI_TEMPERATE_LANDSCAPE, _opt_newgame.landscape == LT_TEMPERATE);
    82 			w->SetWidgetLoweredState(SGI_TROPIC_LANDSCAPE, _opt_newgame.landscape == LT_TROPIC);
    86 		this->SetWidgetLoweredState(SGI_ARCTIC_LANDSCAPE, _opt_newgame.landscape == LT_ARCTIC);
    83 			w->SetWidgetLoweredState(SGI_TOYLAND_LANDSCAPE, _opt_newgame.landscape == LT_TOYLAND);
    87 		this->SetWidgetLoweredState(SGI_TROPIC_LANDSCAPE, _opt_newgame.landscape == LT_TROPIC);
    84 			SetDParam(0, STR_6801_EASY + _opt_newgame.diff_level);
    88 		this->SetWidgetLoweredState(SGI_TOYLAND_LANDSCAPE, _opt_newgame.landscape == LT_TOYLAND);
    85 			w->DrawWidgets();
    89 		SetDParam(0, STR_6801_EASY + _opt_newgame.diff_level);
    86 			break;
    90 		this->DrawWidgets();
       
    91 	}
    87 
    92 
    88 		case WE_CLICK:
    93 	virtual void OnClick(Point pt, int widget)
       
    94 	{
    89 #ifdef ENABLE_NETWORK
    95 #ifdef ENABLE_NETWORK
    90 			/* Do not create a network server when you (just) have closed one of the game
    96 		/* Do not create a network server when you (just) have closed one of the game
    91 			 * creation/load windows for the network server. */
    97 		 * creation/load windows for the network server. */
    92 			if (SGI_GENERATE_GAME <= e->we.click.widget && e->we.click.widget <= SGI_EDIT_SCENARIO) _is_network_server = false;
    98 		if (IsInsideMM(widget, SGI_GENERATE_GAME, SGI_EDIT_SCENARIO + 1)) _is_network_server = false;
    93 #endif /* ENABLE_NETWORK */
    99 #endif /* ENABLE_NETWORK */
    94 
   100 
    95 			switch (e->we.click.widget) {
   101 		switch (widget) {
    96 				case SGI_GENERATE_GAME:  ShowGenerateLandscape(); break;
   102 			case SGI_GENERATE_GAME:  ShowGenerateLandscape(); break;
    97 				case SGI_LOAD_GAME:      ShowSaveLoadDialog(SLD_LOAD_GAME); break;
   103 			case SGI_LOAD_GAME:      ShowSaveLoadDialog(SLD_LOAD_GAME); break;
    98 				case SGI_PLAY_SCENARIO:  ShowSaveLoadDialog(SLD_LOAD_SCENARIO); break;
   104 			case SGI_PLAY_SCENARIO:  ShowSaveLoadDialog(SLD_LOAD_SCENARIO); break;
    99 				case SGI_PLAY_HEIGHTMAP: ShowSaveLoadDialog(SLD_LOAD_HEIGHTMAP); break;
   105 			case SGI_PLAY_HEIGHTMAP: ShowSaveLoadDialog(SLD_LOAD_HEIGHTMAP); break;
   100 				case SGI_EDIT_SCENARIO:  StartScenarioEditor(); break;
   106 			case SGI_EDIT_SCENARIO:  StartScenarioEditor(); break;
   101 
   107 
   102 				case SGI_PLAY_NETWORK:
   108 			case SGI_PLAY_NETWORK:
   103 					if (!_network_available) {
   109 				if (!_network_available) {
   104 						ShowErrorMessage(INVALID_STRING_ID, STR_NETWORK_ERR_NOTAVAILABLE, 0, 0);
   110 					ShowErrorMessage(INVALID_STRING_ID, STR_NETWORK_ERR_NOTAVAILABLE, 0, 0);
   105 					} else {
   111 				} else {
   106 						ShowNetworkGameWindow();
   112 					ShowNetworkGameWindow();
   107 					}
   113 				}
   108 					break;
   114 				break;
   109 
   115 
   110 				case SGI_TEMPERATE_LANDSCAPE: case SGI_ARCTIC_LANDSCAPE:
   116 			case SGI_TEMPERATE_LANDSCAPE: case SGI_ARCTIC_LANDSCAPE:
   111 				case SGI_TROPIC_LANDSCAPE: case SGI_TOYLAND_LANDSCAPE:
   117 			case SGI_TROPIC_LANDSCAPE: case SGI_TOYLAND_LANDSCAPE:
   112 					w->RaiseWidget(_opt_newgame.landscape + SGI_TEMPERATE_LANDSCAPE);
   118 				this->RaiseWidget(_opt_newgame.landscape + SGI_TEMPERATE_LANDSCAPE);
   113 					SetNewLandscapeType(e->we.click.widget - SGI_TEMPERATE_LANDSCAPE);
   119 				SetNewLandscapeType(widget - SGI_TEMPERATE_LANDSCAPE);
   114 					break;
   120 				break;
   115 
   121 
   116 				case SGI_OPTIONS:         ShowGameOptions(); break;
   122 			case SGI_OPTIONS:         ShowGameOptions(); break;
   117 				case SGI_DIFFICULTIES:    ShowGameDifficulty(); break;
   123 			case SGI_DIFFICULTIES:    ShowGameDifficulty(); break;
   118 				case SGI_PATCHES_OPTIONS: ShowPatchesSelection(); break;
   124 			case SGI_PATCHES_OPTIONS: ShowPatchesSelection(); break;
   119 				case SGI_GRF_SETTINGS:    ShowNewGRFSettings(true, true, false, &_grfconfig_newgame); break;
   125 			case SGI_GRF_SETTINGS:    ShowNewGRFSettings(true, true, false, &_grfconfig_newgame); break;
   120 				case SGI_EXIT:            HandleExitGameRequest(); break;
   126 			case SGI_EXIT:            HandleExitGameRequest(); break;
   121 			}
   127 		}
   122 			break;
       
   123 	}
   128 	}
   124 }
   129 };
   125 
   130 
   126 static const WindowDesc _select_game_desc = {
   131 static const WindowDesc _select_game_desc = {
   127 	WDP_CENTER, WDP_CENTER, 336, 195, 336, 195,
   132 	WDP_CENTER, WDP_CENTER, 336, 195, 336, 195,
   128 	WC_SELECT_GAME, WC_NONE,
   133 	WC_SELECT_GAME, WC_NONE,
   129 	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
   134 	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
   130 	_select_game_widgets,
   135 	_select_game_widgets,
   131 	SelectGameWndProc
   136 	NULL
   132 };
   137 };
   133 
   138 
   134 void ShowSelectGameWindow()
   139 void ShowSelectGameWindow()
   135 {
   140 {
   136 	new Window(&_select_game_desc);
   141 	new SelectGameWindow(&_select_game_desc);
   137 }
   142 }
   138 
   143 
   139 static void AskExitGameCallback(Window *w, bool confirmed)
   144 static void AskExitGameCallback(Window *w, bool confirmed)
   140 {
   145 {
   141 	if (confirmed) _exit_game = true;
   146 	if (confirmed) _exit_game = true;