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; |