Mercurial > hg > openttd
comparison src/genworld_gui.cpp @ 8355:73ad124db503 draft
(svn r11921) -Cleanup: correct indenting and switch case line spacing.
author | peter1138 <peter1138@openttd.org> |
---|---|
date | Fri, 18 Jan 2008 21:33:19 +0000 |
parents | 6fb24ab5c935 |
children | 17e30bf8f359 |
comparison
equal
deleted
inserted
replaced
8354:a91ff799f4d5 | 8355:73ad124db503 |
---|---|
257 static char _genseed_buffer[11]; | 257 static char _genseed_buffer[11]; |
258 | 258 |
259 glwp_modes mode = (glwp_modes)w->window_number; | 259 glwp_modes mode = (glwp_modes)w->window_number; |
260 | 260 |
261 switch (e->event) { | 261 switch (e->event) { |
262 case WE_CREATE: | 262 case WE_CREATE: |
263 w->LowerWidget(_opt_newgame.landscape + GLAND_TEMPERATE); | 263 w->LowerWidget(_opt_newgame.landscape + GLAND_TEMPERATE); |
264 | 264 |
265 snprintf(_genseed_buffer, sizeof(_genseed_buffer), "%u", _patches_newgame.generation_seed); | 265 snprintf(_genseed_buffer, sizeof(_genseed_buffer), "%u", _patches_newgame.generation_seed); |
266 InitializeTextBuffer(&_genseed_query.text, _genseed_buffer, lengthof(_genseed_buffer), 120); | 266 InitializeTextBuffer(&_genseed_query.text, _genseed_buffer, lengthof(_genseed_buffer), 120); |
267 _genseed_query.caption = STR_NULL; | 267 _genseed_query.caption = STR_NULL; |
268 _genseed_query.afilter = CS_NUMERAL; | 268 _genseed_query.afilter = CS_NUMERAL; |
269 break; | 269 break; |
270 | 270 |
271 case WE_PAINT: | 271 case WE_PAINT: |
272 /* You can't select smoothness if not terragenesis */ | 272 /* You can't select smoothness if not terragenesis */ |
273 if (mode == GLWP_GENERATE) { | 273 if (mode == GLWP_GENERATE) { |
274 w->SetWidgetDisabledState(GLAND_SMOOTHNESS_PULLDOWN, _patches_newgame.land_generator == 0); | 274 w->SetWidgetDisabledState(GLAND_SMOOTHNESS_PULLDOWN, _patches_newgame.land_generator == 0); |
275 } | 275 } |
276 /* Disable snowline if not hilly */ | 276 /* Disable snowline if not hilly */ |
277 w->SetWidgetDisabledState(GLAND_SNOW_LEVEL_TEXT, _opt_newgame.landscape != LT_ARCTIC); | 277 w->SetWidgetDisabledState(GLAND_SNOW_LEVEL_TEXT, _opt_newgame.landscape != LT_ARCTIC); |
278 /* Disable town, industry and trees in SE */ | 278 /* Disable town, industry and trees in SE */ |
279 w->SetWidgetDisabledState(GLAND_TOWN_PULLDOWN, _game_mode == GM_EDITOR); | 279 w->SetWidgetDisabledState(GLAND_TOWN_PULLDOWN, _game_mode == GM_EDITOR); |
280 w->SetWidgetDisabledState(GLAND_INDUSTRY_PULLDOWN, _game_mode == GM_EDITOR); | 280 w->SetWidgetDisabledState(GLAND_INDUSTRY_PULLDOWN, _game_mode == GM_EDITOR); |
281 w->SetWidgetDisabledState(GLAND_TREE_PULLDOWN, _game_mode == GM_EDITOR); | 281 w->SetWidgetDisabledState(GLAND_TREE_PULLDOWN, _game_mode == GM_EDITOR); |
282 | 282 |
283 w->SetWidgetDisabledState(GLAND_START_DATE_DOWN, _patches_newgame.starting_year <= MIN_YEAR); | 283 w->SetWidgetDisabledState(GLAND_START_DATE_DOWN, _patches_newgame.starting_year <= MIN_YEAR); |
284 w->SetWidgetDisabledState(GLAND_START_DATE_UP, _patches_newgame.starting_year >= MAX_YEAR); | 284 w->SetWidgetDisabledState(GLAND_START_DATE_UP, _patches_newgame.starting_year >= MAX_YEAR); |
285 w->SetWidgetDisabledState(GLAND_SNOW_LEVEL_DOWN, _patches_newgame.snow_line_height <= 2 || _opt_newgame.landscape != LT_ARCTIC); | 285 w->SetWidgetDisabledState(GLAND_SNOW_LEVEL_DOWN, _patches_newgame.snow_line_height <= 2 || _opt_newgame.landscape != LT_ARCTIC); |
286 w->SetWidgetDisabledState(GLAND_SNOW_LEVEL_UP, _patches_newgame.snow_line_height >= MAX_SNOWLINE_HEIGHT || _opt_newgame.landscape != LT_ARCTIC); | 286 w->SetWidgetDisabledState(GLAND_SNOW_LEVEL_UP, _patches_newgame.snow_line_height >= MAX_SNOWLINE_HEIGHT || _opt_newgame.landscape != LT_ARCTIC); |
287 | 287 |
288 w->SetWidgetLoweredState(GLAND_TEMPERATE, _opt_newgame.landscape == LT_TEMPERATE); | 288 w->SetWidgetLoweredState(GLAND_TEMPERATE, _opt_newgame.landscape == LT_TEMPERATE); |
289 w->SetWidgetLoweredState(GLAND_ARCTIC, _opt_newgame.landscape == LT_ARCTIC); | 289 w->SetWidgetLoweredState(GLAND_ARCTIC, _opt_newgame.landscape == LT_ARCTIC); |
290 w->SetWidgetLoweredState(GLAND_TROPICAL, _opt_newgame.landscape == LT_TROPIC); | 290 w->SetWidgetLoweredState(GLAND_TROPICAL, _opt_newgame.landscape == LT_TROPIC); |
291 w->SetWidgetLoweredState(GLAND_TOYLAND, _opt_newgame.landscape == LT_TOYLAND); | 291 w->SetWidgetLoweredState(GLAND_TOYLAND, _opt_newgame.landscape == LT_TOYLAND); |
292 | 292 |
293 if (_game_mode == GM_EDITOR) { | 293 if (_game_mode == GM_EDITOR) { |
294 w->widget[GLAND_TOWN_PULLDOWN].data = STR_6836_OFF; | 294 w->widget[GLAND_TOWN_PULLDOWN].data = STR_6836_OFF; |
295 w->widget[GLAND_INDUSTRY_PULLDOWN].data = STR_6836_OFF; | 295 w->widget[GLAND_INDUSTRY_PULLDOWN].data = STR_6836_OFF; |
296 } else { | |
297 w->widget[GLAND_TOWN_PULLDOWN].data = num_towns[_opt_newgame.diff.number_towns]; | |
298 w->widget[GLAND_INDUSTRY_PULLDOWN].data = num_inds[_opt_newgame.diff.number_industries]; | |
299 } | |
300 | |
301 if (mode == GLWP_GENERATE) { | |
302 w->widget[GLAND_LANDSCAPE_PULLDOWN].data = landscape[_patches_newgame.land_generator]; | |
303 w->widget[GLAND_TREE_PULLDOWN].data = tree_placer[_patches_newgame.tree_placer]; | |
304 w->widget[GLAND_TERRAIN_PULLDOWN].data = elevations[_opt_newgame.diff.terrain_type]; | |
305 w->widget[GLAND_WATER_PULLDOWN].data = sea_lakes[_opt_newgame.diff.quantity_sea_lakes]; | |
306 w->widget[GLAND_SMOOTHNESS_PULLDOWN].data = smoothness[_patches_newgame.tgen_smoothness]; | |
307 } else { | |
308 w->widget[GLAND_TREE_PULLDOWN].data = tree_placer[_patches_newgame.tree_placer]; | |
309 w->widget[GLAND_HEIGHTMAP_ROTATION_PULLDOWN].data = rotation[_patches_newgame.heightmap_rotation]; | |
310 } | |
311 | |
312 /* Set parameters for widget text that requires them. */ | |
313 SetDParam(0, ConvertYMDToDate(_patches_newgame.starting_year, 0, 1)); // GLAND_START_DATE_TEXT | |
314 SetDParam(1, 1 << _patches_newgame.map_x); // GLAND_MAPSIZE_X_PULLDOWN | |
315 SetDParam(2, 1 << _patches_newgame.map_y); // GLAND_MAPSIZE_Y_PULLDOWN | |
316 SetDParam(3, _patches_newgame.snow_line_height); // GLAND_SNOW_LEVEL_TEXT | |
317 | |
318 DrawWindowWidgets(w); | |
319 | |
320 DrawEditBox(w, &_genseed_query, GLAND_RANDOM_EDITBOX); | |
321 | |
322 if (mode != GLWP_GENERATE) { | |
323 char buffer[512]; | |
324 | |
325 if (_patches_newgame.heightmap_rotation == HM_CLOCKWISE) { | |
326 SetDParam(0, WP(w, generate_d).y); | |
327 SetDParam(1, WP(w, generate_d).x); | |
328 } else { | 296 } else { |
329 SetDParam(0, WP(w, generate_d).x); | 297 w->widget[GLAND_TOWN_PULLDOWN].data = num_towns[_opt_newgame.diff.number_towns]; |
330 SetDParam(1, WP(w, generate_d).y); | 298 w->widget[GLAND_INDUSTRY_PULLDOWN].data = num_inds[_opt_newgame.diff.number_industries]; |
331 } | 299 } |
332 GetString(buffer, STR_HEIGHTMAP_SIZE, lastof(buffer)); | 300 |
333 DrawStringRightAligned(326, 91, STR_HEIGHTMAP_SIZE, TC_BLACK); | 301 if (mode == GLWP_GENERATE) { |
334 | 302 w->widget[GLAND_LANDSCAPE_PULLDOWN].data = landscape[_patches_newgame.land_generator]; |
335 DrawString( 12, 91, STR_HEIGHTMAP_NAME, TC_BLACK); | 303 w->widget[GLAND_TREE_PULLDOWN].data = tree_placer[_patches_newgame.tree_placer]; |
336 SetDParamStr(0, WP(w, generate_d).name); | 304 w->widget[GLAND_TERRAIN_PULLDOWN].data = elevations[_opt_newgame.diff.terrain_type]; |
337 DrawStringTruncated(114, 91, STR_ORANGE, TC_BLACK, 326 - 114 - GetStringBoundingBox(buffer).width - 5); | 305 w->widget[GLAND_WATER_PULLDOWN].data = sea_lakes[_opt_newgame.diff.quantity_sea_lakes]; |
338 } | 306 w->widget[GLAND_SMOOTHNESS_PULLDOWN].data = smoothness[_patches_newgame.tgen_smoothness]; |
339 | 307 } else { |
340 break; | 308 w->widget[GLAND_TREE_PULLDOWN].data = tree_placer[_patches_newgame.tree_placer]; |
341 case WE_CLICK: | 309 w->widget[GLAND_HEIGHTMAP_ROTATION_PULLDOWN].data = rotation[_patches_newgame.heightmap_rotation]; |
342 switch (e->we.click.widget) { | 310 } |
343 case 0: DeleteWindow(w); break; | 311 |
344 case GLAND_TEMPERATE: case GLAND_ARCTIC: case GLAND_TROPICAL: case GLAND_TOYLAND: | 312 /* Set parameters for widget text that requires them. */ |
345 w->RaiseWidget(_opt_newgame.landscape + GLAND_TEMPERATE); | 313 SetDParam(0, ConvertYMDToDate(_patches_newgame.starting_year, 0, 1)); // GLAND_START_DATE_TEXT |
346 SetNewLandscapeType(e->we.click.widget - GLAND_TEMPERATE); | 314 SetDParam(1, 1 << _patches_newgame.map_x); // GLAND_MAPSIZE_X_PULLDOWN |
347 break; | 315 SetDParam(2, 1 << _patches_newgame.map_y); // GLAND_MAPSIZE_Y_PULLDOWN |
348 case GLAND_MAPSIZE_X_PULLDOWN: // Mapsize X | 316 SetDParam(3, _patches_newgame.snow_line_height); // GLAND_SNOW_LEVEL_TEXT |
349 ShowDropDownList(w, BuildMapsizeDropDown(), _patches_newgame.map_x, GLAND_MAPSIZE_X_PULLDOWN); | 317 |
350 break; | 318 DrawWindowWidgets(w); |
351 case GLAND_MAPSIZE_Y_PULLDOWN: // Mapsize Y | 319 |
352 ShowDropDownList(w, BuildMapsizeDropDown(), _patches_newgame.map_y, GLAND_MAPSIZE_Y_PULLDOWN); | 320 DrawEditBox(w, &_genseed_query, GLAND_RANDOM_EDITBOX); |
353 break; | 321 |
354 case GLAND_TOWN_PULLDOWN: // Number of towns | 322 if (mode != GLWP_GENERATE) { |
355 ShowDropDownMenu(w, num_towns, _opt_newgame.diff.number_towns, GLAND_TOWN_PULLDOWN, 0, 0); | 323 char buffer[512]; |
356 break; | 324 |
357 case GLAND_INDUSTRY_PULLDOWN: // Number of industries | 325 if (_patches_newgame.heightmap_rotation == HM_CLOCKWISE) { |
358 ShowDropDownMenu(w, num_inds, _opt_newgame.diff.number_industries, GLAND_INDUSTRY_PULLDOWN, 0, 0); | 326 SetDParam(0, WP(w, generate_d).y); |
359 break; | 327 SetDParam(1, WP(w, generate_d).x); |
360 case GLAND_RANDOM_BUTTON: // Random seed | 328 } else { |
361 _patches_newgame.generation_seed = InteractiveRandom(); | 329 SetDParam(0, WP(w, generate_d).x); |
362 snprintf(_genseed_buffer, lengthof(_genseed_buffer), "%u", _patches_newgame.generation_seed); | 330 SetDParam(1, WP(w, generate_d).y); |
363 UpdateTextBufferSize(&_genseed_query.text); | 331 } |
332 GetString(buffer, STR_HEIGHTMAP_SIZE, lastof(buffer)); | |
333 DrawStringRightAligned(326, 91, STR_HEIGHTMAP_SIZE, TC_BLACK); | |
334 | |
335 DrawString( 12, 91, STR_HEIGHTMAP_NAME, TC_BLACK); | |
336 SetDParamStr(0, WP(w, generate_d).name); | |
337 DrawStringTruncated(114, 91, STR_ORANGE, TC_BLACK, 326 - 114 - GetStringBoundingBox(buffer).width - 5); | |
338 } | |
339 break; | |
340 | |
341 case WE_CLICK: | |
342 switch (e->we.click.widget) { | |
343 case 0: DeleteWindow(w); break; | |
344 | |
345 case GLAND_TEMPERATE: | |
346 case GLAND_ARCTIC: | |
347 case GLAND_TROPICAL: | |
348 case GLAND_TOYLAND: | |
349 w->RaiseWidget(_opt_newgame.landscape + GLAND_TEMPERATE); | |
350 SetNewLandscapeType(e->we.click.widget - GLAND_TEMPERATE); | |
351 break; | |
352 | |
353 case GLAND_MAPSIZE_X_PULLDOWN: // Mapsize X | |
354 ShowDropDownList(w, BuildMapsizeDropDown(), _patches_newgame.map_x, GLAND_MAPSIZE_X_PULLDOWN); | |
355 break; | |
356 | |
357 case GLAND_MAPSIZE_Y_PULLDOWN: // Mapsize Y | |
358 ShowDropDownList(w, BuildMapsizeDropDown(), _patches_newgame.map_y, GLAND_MAPSIZE_Y_PULLDOWN); | |
359 break; | |
360 | |
361 case GLAND_TOWN_PULLDOWN: // Number of towns | |
362 ShowDropDownMenu(w, num_towns, _opt_newgame.diff.number_towns, GLAND_TOWN_PULLDOWN, 0, 0); | |
363 break; | |
364 | |
365 case GLAND_INDUSTRY_PULLDOWN: // Number of industries | |
366 ShowDropDownMenu(w, num_inds, _opt_newgame.diff.number_industries, GLAND_INDUSTRY_PULLDOWN, 0, 0); | |
367 break; | |
368 | |
369 case GLAND_RANDOM_BUTTON: // Random seed | |
370 _patches_newgame.generation_seed = InteractiveRandom(); | |
371 snprintf(_genseed_buffer, lengthof(_genseed_buffer), "%u", _patches_newgame.generation_seed); | |
372 UpdateTextBufferSize(&_genseed_query.text); | |
373 SetWindowDirty(w); | |
374 break; | |
375 | |
376 case GLAND_GENERATE_BUTTON: // Generate | |
377 | |
378 UpdatePatches(); | |
379 | |
380 if (_patches.town_layout == TL_NO_ROADS) { | |
381 ShowQuery( | |
382 STR_TOWN_LAYOUT_WARNING_CAPTION, | |
383 STR_TOWN_LAYOUT_WARNING_MESSAGE, | |
384 w, | |
385 LandscapeGenerationCallback); | |
386 } else if (mode == GLWP_HEIGHTMAP && | |
387 (WP(w, generate_d).x * 2 < (1U << _patches_newgame.map_x) || | |
388 WP(w, generate_d).x / 2 > (1U << _patches_newgame.map_x) || | |
389 WP(w, generate_d).y * 2 < (1U << _patches_newgame.map_y) || | |
390 WP(w, generate_d).y / 2 > (1U << _patches_newgame.map_y))) { | |
391 ShowQuery( | |
392 STR_HEIGHTMAP_SCALE_WARNING_CAPTION, | |
393 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE, | |
394 w, | |
395 LandscapeGenerationCallback); | |
396 } else { | |
397 StartGeneratingLandscape(mode); | |
398 } | |
399 break; | |
400 | |
401 case GLAND_START_DATE_DOWN: | |
402 case GLAND_START_DATE_UP: // Year buttons | |
403 /* Don't allow too fast scrolling */ | |
404 if ((w->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { | |
405 w->HandleButtonClick(e->we.click.widget); | |
406 SetWindowDirty(w); | |
407 | |
408 _patches_newgame.starting_year = Clamp(_patches_newgame.starting_year + e->we.click.widget - GLAND_START_DATE_TEXT, MIN_YEAR, MAX_YEAR); | |
409 } | |
410 _left_button_clicked = false; | |
411 break; | |
412 | |
413 case GLAND_START_DATE_TEXT: // Year text | |
414 WP(w, generate_d).widget_id = GLAND_START_DATE_TEXT; | |
415 SetDParam(0, _patches_newgame.starting_year); | |
416 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, w, CS_NUMERAL); | |
417 break; | |
418 | |
419 case GLAND_SNOW_LEVEL_DOWN: | |
420 case GLAND_SNOW_LEVEL_UP: // Snow line buttons | |
421 /* Don't allow too fast scrolling */ | |
422 if ((w->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { | |
423 w->HandleButtonClick(e->we.click.widget); | |
424 SetWindowDirty(w); | |
425 | |
426 _patches_newgame.snow_line_height = Clamp(_patches_newgame.snow_line_height + e->we.click.widget - GLAND_SNOW_LEVEL_TEXT, 2, MAX_SNOWLINE_HEIGHT); | |
427 } | |
428 _left_button_clicked = false; | |
429 break; | |
430 | |
431 case GLAND_SNOW_LEVEL_TEXT: // Snow line text | |
432 WP(w, generate_d).widget_id = GLAND_SNOW_LEVEL_TEXT; | |
433 SetDParam(0, _patches_newgame.snow_line_height); | |
434 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_SNOW_LINE_QUERY_CAPT, 3, 100, w, CS_NUMERAL); | |
435 break; | |
436 | |
437 case GLAND_TREE_PULLDOWN: // Tree placer | |
438 ShowDropDownMenu(w, tree_placer, _patches_newgame.tree_placer, GLAND_TREE_PULLDOWN, 0, 0); | |
439 break; | |
440 | |
441 case GLAND_LANDSCAPE_PULLDOWN: // Landscape generator OR Heightmap rotation | |
442 /* case GLAND_HEIGHTMAP_ROTATION_TEXT: case GLAND_HEIGHTMAP_ROTATION_PULLDOWN:*/ | |
443 if (mode == GLWP_HEIGHTMAP) { | |
444 ShowDropDownMenu(w, rotation, _patches_newgame.heightmap_rotation, GLAND_HEIGHTMAP_ROTATION_PULLDOWN, 0, 0); | |
445 } else { | |
446 ShowDropDownMenu(w, landscape, _patches_newgame.land_generator, GLAND_LANDSCAPE_PULLDOWN, 0, 0); | |
447 } | |
448 break; | |
449 | |
450 case GLAND_TERRAIN_PULLDOWN: // Terrain type | |
451 ShowDropDownMenu(w, elevations, _opt_newgame.diff.terrain_type, GLAND_TERRAIN_PULLDOWN, 0, 0); | |
452 break; | |
453 | |
454 case GLAND_WATER_PULLDOWN: // Water quantity | |
455 ShowDropDownMenu(w, sea_lakes, _opt_newgame.diff.quantity_sea_lakes, GLAND_WATER_PULLDOWN, 0, 0); | |
456 break; | |
457 | |
458 case GLAND_SMOOTHNESS_PULLDOWN: // Map smoothness | |
459 ShowDropDownMenu(w, smoothness, _patches_newgame.tgen_smoothness, GLAND_SMOOTHNESS_PULLDOWN, 0, 0); | |
460 break; | |
461 } | |
462 break; | |
463 | |
464 case WE_MOUSELOOP: | |
465 HandleEditBox(w, &_genseed_query, GLAND_RANDOM_EDITBOX); | |
466 break; | |
467 | |
468 case WE_KEYPRESS: | |
469 HandleEditBoxKey(w, &_genseed_query, GLAND_RANDOM_EDITBOX, e); | |
470 /* the seed is unsigned, therefore atoi cannot be used. | |
471 * As 2^32 - 1 (MAX_UVALUE(uint32)) is a 'magic' value | |
472 * (use random seed) it should not be possible to be | |
473 * entered into the input field; the generate seed | |
474 * button can be used instead. */ | |
475 _patches_newgame.generation_seed = minu(strtoul(_genseed_buffer, NULL, sizeof(_genseed_buffer) - 1), MAX_UVALUE(uint32) - 1); | |
476 break; | |
477 | |
478 case WE_DROPDOWN_SELECT: | |
479 switch (e->we.dropdown.button) { | |
480 case GLAND_MAPSIZE_X_PULLDOWN: _patches_newgame.map_x = e->we.dropdown.index; break; | |
481 case GLAND_MAPSIZE_Y_PULLDOWN: _patches_newgame.map_y = e->we.dropdown.index; break; | |
482 case GLAND_TREE_PULLDOWN: _patches_newgame.tree_placer = e->we.dropdown.index; break; | |
483 case GLAND_SMOOTHNESS_PULLDOWN: _patches_newgame.tgen_smoothness = e->we.dropdown.index; break; | |
484 | |
485 case GLAND_TOWN_PULLDOWN: | |
486 _opt_newgame.diff.number_towns = e->we.dropdown.index; | |
487 if (_opt_newgame.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); | |
488 DoCommandP(0, 2, _opt_newgame.diff.number_towns, NULL, CMD_CHANGE_DIFFICULTY_LEVEL); | |
489 break; | |
490 | |
491 case GLAND_INDUSTRY_PULLDOWN: | |
492 _opt_newgame.diff.number_industries = e->we.dropdown.index; | |
493 if (_opt_newgame.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); | |
494 DoCommandP(0, 3, _opt_newgame.diff.number_industries, NULL, CMD_CHANGE_DIFFICULTY_LEVEL); | |
495 break; | |
496 | |
497 case GLAND_LANDSCAPE_PULLDOWN: | |
498 /* case GLAND_HEIGHTMAP_PULLDOWN: */ | |
499 if (mode == GLWP_HEIGHTMAP) { | |
500 _patches_newgame.heightmap_rotation = e->we.dropdown.index; | |
501 } else { | |
502 _patches_newgame.land_generator = e->we.dropdown.index; | |
503 } | |
504 break; | |
505 | |
506 case GLAND_TERRAIN_PULLDOWN: | |
507 _opt_newgame.diff.terrain_type = e->we.dropdown.index; | |
508 if (_opt_newgame.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); | |
509 DoCommandP(0, 12, _opt_newgame.diff.terrain_type, NULL, CMD_CHANGE_DIFFICULTY_LEVEL); | |
510 break; | |
511 | |
512 case GLAND_WATER_PULLDOWN: | |
513 _opt_newgame.diff.quantity_sea_lakes = e->we.dropdown.index; | |
514 if (_opt_newgame.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); | |
515 DoCommandP(0, 13, _opt_newgame.diff.quantity_sea_lakes, NULL, CMD_CHANGE_DIFFICULTY_LEVEL); | |
516 break; | |
517 } | |
364 SetWindowDirty(w); | 518 SetWindowDirty(w); |
365 break; | 519 break; |
366 case GLAND_GENERATE_BUTTON: // Generate | 520 |
367 | 521 case WE_ON_EDIT_TEXT: |
368 UpdatePatches(); | 522 if (e->we.edittext.str != NULL) { |
369 | 523 int32 value = atoi(e->we.edittext.str); |
370 if (_patches.town_layout == TL_NO_ROADS) { | 524 |
371 ShowQuery( | 525 switch (WP(w, generate_d).widget_id) { |
372 STR_TOWN_LAYOUT_WARNING_CAPTION, | 526 case GLAND_START_DATE_TEXT: |
373 STR_TOWN_LAYOUT_WARNING_MESSAGE, | 527 w->InvalidateWidget(GLAND_START_DATE_TEXT); |
374 w, | 528 _patches_newgame.starting_year = Clamp(value, MIN_YEAR, MAX_YEAR); |
375 LandscapeGenerationCallback); | 529 break; |
376 } else if (mode == GLWP_HEIGHTMAP && | 530 |
377 (WP(w, generate_d).x * 2 < (1U << _patches_newgame.map_x) || | 531 case GLAND_SNOW_LEVEL_TEXT: |
378 WP(w, generate_d).x / 2 > (1U << _patches_newgame.map_x) || | 532 w->InvalidateWidget(GLAND_SNOW_LEVEL_TEXT); |
379 WP(w, generate_d).y * 2 < (1U << _patches_newgame.map_y) || | 533 _patches_newgame.snow_line_height = Clamp(value, 2, MAX_SNOWLINE_HEIGHT); |
380 WP(w, generate_d).y / 2 > (1U << _patches_newgame.map_y))) { | 534 break; |
381 ShowQuery( | 535 } |
382 STR_HEIGHTMAP_SCALE_WARNING_CAPTION, | 536 |
383 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE, | |
384 w, | |
385 LandscapeGenerationCallback); | |
386 | |
387 } else { | |
388 StartGeneratingLandscape(mode); | |
389 } | |
390 break; | |
391 case GLAND_START_DATE_DOWN: case GLAND_START_DATE_UP: // Year buttons | |
392 /* Don't allow too fast scrolling */ | |
393 if ((w->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { | |
394 w->HandleButtonClick(e->we.click.widget); | |
395 SetWindowDirty(w); | 537 SetWindowDirty(w); |
396 | 538 } |
397 _patches_newgame.starting_year = Clamp(_patches_newgame.starting_year + e->we.click.widget - GLAND_START_DATE_TEXT, MIN_YEAR, MAX_YEAR); | 539 break; |
398 } | |
399 _left_button_clicked = false; | |
400 break; | |
401 case GLAND_START_DATE_TEXT: // Year text | |
402 WP(w, generate_d).widget_id = GLAND_START_DATE_TEXT; | |
403 SetDParam(0, _patches_newgame.starting_year); | |
404 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, w, CS_NUMERAL); | |
405 break; | |
406 case GLAND_SNOW_LEVEL_DOWN: case GLAND_SNOW_LEVEL_UP: // Snow line buttons | |
407 /* Don't allow too fast scrolling */ | |
408 if ((w->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { | |
409 w->HandleButtonClick(e->we.click.widget); | |
410 SetWindowDirty(w); | |
411 | |
412 _patches_newgame.snow_line_height = Clamp(_patches_newgame.snow_line_height + e->we.click.widget - GLAND_SNOW_LEVEL_TEXT, 2, MAX_SNOWLINE_HEIGHT); | |
413 } | |
414 _left_button_clicked = false; | |
415 break; | |
416 case GLAND_SNOW_LEVEL_TEXT: // Snow line text | |
417 WP(w, generate_d).widget_id = GLAND_SNOW_LEVEL_TEXT; | |
418 SetDParam(0, _patches_newgame.snow_line_height); | |
419 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_SNOW_LINE_QUERY_CAPT, 3, 100, w, CS_NUMERAL); | |
420 break; | |
421 case GLAND_TREE_PULLDOWN: // Tree placer | |
422 ShowDropDownMenu(w, tree_placer, _patches_newgame.tree_placer, GLAND_TREE_PULLDOWN, 0, 0); | |
423 break; | |
424 case GLAND_LANDSCAPE_PULLDOWN: // Landscape generator OR Heightmap rotation | |
425 /* case GLAND_HEIGHTMAP_ROTATION_TEXT: case GLAND_HEIGHTMAP_ROTATION_PULLDOWN:*/ | |
426 if (mode == GLWP_HEIGHTMAP) { | |
427 ShowDropDownMenu(w, rotation, _patches_newgame.heightmap_rotation, GLAND_HEIGHTMAP_ROTATION_PULLDOWN, 0, 0); | |
428 } else { | |
429 ShowDropDownMenu(w, landscape, _patches_newgame.land_generator, GLAND_LANDSCAPE_PULLDOWN, 0, 0); | |
430 } | |
431 break; | |
432 case GLAND_TERRAIN_PULLDOWN: // Terrain type | |
433 ShowDropDownMenu(w, elevations, _opt_newgame.diff.terrain_type, GLAND_TERRAIN_PULLDOWN, 0, 0); | |
434 break; | |
435 case GLAND_WATER_PULLDOWN: // Water quantity | |
436 ShowDropDownMenu(w, sea_lakes, _opt_newgame.diff.quantity_sea_lakes, GLAND_WATER_PULLDOWN, 0, 0); | |
437 break; | |
438 case GLAND_SMOOTHNESS_PULLDOWN: // Map smoothness | |
439 ShowDropDownMenu(w, smoothness, _patches_newgame.tgen_smoothness, GLAND_SMOOTHNESS_PULLDOWN, 0, 0); | |
440 break; | |
441 } | |
442 break; | |
443 | |
444 case WE_MOUSELOOP: | |
445 HandleEditBox(w, &_genseed_query, GLAND_RANDOM_EDITBOX); | |
446 break; | |
447 | |
448 case WE_KEYPRESS: | |
449 HandleEditBoxKey(w, &_genseed_query, GLAND_RANDOM_EDITBOX, e); | |
450 /* the seed is unsigned, therefore atoi cannot be used. | |
451 * As 2^32 - 1 (MAX_UVALUE(uint32)) is a 'magic' value | |
452 * (use random seed) it should not be possible to be | |
453 * entered into the input field; the generate seed | |
454 * button can be used instead. */ | |
455 _patches_newgame.generation_seed = minu(strtoul(_genseed_buffer, NULL, sizeof(_genseed_buffer) - 1), MAX_UVALUE(uint32) - 1); | |
456 break; | |
457 | |
458 case WE_DROPDOWN_SELECT: | |
459 switch (e->we.dropdown.button) { | |
460 case GLAND_MAPSIZE_X_PULLDOWN: _patches_newgame.map_x = e->we.dropdown.index; break; | |
461 case GLAND_MAPSIZE_Y_PULLDOWN: _patches_newgame.map_y = e->we.dropdown.index; break; | |
462 case GLAND_TREE_PULLDOWN: _patches_newgame.tree_placer = e->we.dropdown.index; break; | |
463 case GLAND_SMOOTHNESS_PULLDOWN: _patches_newgame.tgen_smoothness = e->we.dropdown.index; break; | |
464 | |
465 case GLAND_TOWN_PULLDOWN: | |
466 _opt_newgame.diff.number_towns = e->we.dropdown.index; | |
467 if (_opt_newgame.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); | |
468 DoCommandP(0, 2, _opt_newgame.diff.number_towns, NULL, CMD_CHANGE_DIFFICULTY_LEVEL); | |
469 break; | |
470 case GLAND_INDUSTRY_PULLDOWN: | |
471 _opt_newgame.diff.number_industries = e->we.dropdown.index; | |
472 if (_opt_newgame.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); | |
473 DoCommandP(0, 3, _opt_newgame.diff.number_industries, NULL, CMD_CHANGE_DIFFICULTY_LEVEL); | |
474 break; | |
475 case GLAND_LANDSCAPE_PULLDOWN: | |
476 /* case GLAND_HEIGHTMAP_PULLDOWN: */ | |
477 if (mode == GLWP_HEIGHTMAP) { | |
478 _patches_newgame.heightmap_rotation = e->we.dropdown.index; | |
479 } else { | |
480 _patches_newgame.land_generator = e->we.dropdown.index; | |
481 } | |
482 break; | |
483 case GLAND_TERRAIN_PULLDOWN: | |
484 _opt_newgame.diff.terrain_type = e->we.dropdown.index; | |
485 if (_opt_newgame.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); | |
486 DoCommandP(0, 12, _opt_newgame.diff.terrain_type, NULL, CMD_CHANGE_DIFFICULTY_LEVEL); | |
487 break; | |
488 case GLAND_WATER_PULLDOWN: | |
489 _opt_newgame.diff.quantity_sea_lakes = e->we.dropdown.index; | |
490 if (_opt_newgame.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); | |
491 DoCommandP(0, 13, _opt_newgame.diff.quantity_sea_lakes, NULL, CMD_CHANGE_DIFFICULTY_LEVEL); | |
492 break; | |
493 } | |
494 SetWindowDirty(w); | |
495 break; | |
496 | |
497 case WE_ON_EDIT_TEXT: { | |
498 if (e->we.edittext.str != NULL) { | |
499 int32 value = atoi(e->we.edittext.str); | |
500 | |
501 switch (WP(w, generate_d).widget_id) { | |
502 case GLAND_START_DATE_TEXT: | |
503 w->InvalidateWidget(GLAND_START_DATE_TEXT); | |
504 _patches_newgame.starting_year = Clamp(value, MIN_YEAR, MAX_YEAR); | |
505 break; | |
506 case GLAND_SNOW_LEVEL_TEXT: | |
507 w->InvalidateWidget(GLAND_SNOW_LEVEL_TEXT); | |
508 _patches_newgame.snow_line_height = Clamp(value, 2, MAX_SNOWLINE_HEIGHT); | |
509 break; | |
510 } | |
511 | |
512 SetWindowDirty(w); | |
513 } | |
514 break; | |
515 } | |
516 } | 540 } |
517 } | 541 } |
518 | 542 |
519 static const WindowDesc _generate_landscape_desc = { | 543 static const WindowDesc _generate_landscape_desc = { |
520 WDP_CENTER, WDP_CENTER, 338, 268, 338, 268, | 544 WDP_CENTER, WDP_CENTER, 338, 268, 338, 268, |
610 | 634 |
611 | 635 |
612 static void CreateScenarioWndProc(Window *w, WindowEvent *e) | 636 static void CreateScenarioWndProc(Window *w, WindowEvent *e) |
613 { | 637 { |
614 switch (e->event) { | 638 switch (e->event) { |
615 case WE_CREATE: w->LowerWidget(_opt_newgame.landscape + CSCEN_TEMPERATE); break; | 639 case WE_CREATE: |
616 | 640 w->LowerWidget(_opt_newgame.landscape + CSCEN_TEMPERATE); |
617 case WE_PAINT: | 641 break; |
618 w->SetWidgetDisabledState(CSCEN_START_DATE_DOWN, _patches_newgame.starting_year <= MIN_YEAR); | 642 |
619 w->SetWidgetDisabledState(CSCEN_START_DATE_UP, _patches_newgame.starting_year >= MAX_YEAR); | 643 case WE_PAINT: |
620 w->SetWidgetDisabledState(CSCEN_FLAT_LAND_HEIGHT_DOWN, _patches_newgame.se_flat_world_height <= 0); | 644 w->SetWidgetDisabledState(CSCEN_START_DATE_DOWN, _patches_newgame.starting_year <= MIN_YEAR); |
621 w->SetWidgetDisabledState(CSCEN_FLAT_LAND_HEIGHT_UP, _patches_newgame.se_flat_world_height >= MAX_TILE_HEIGHT); | 645 w->SetWidgetDisabledState(CSCEN_START_DATE_UP, _patches_newgame.starting_year >= MAX_YEAR); |
622 | 646 w->SetWidgetDisabledState(CSCEN_FLAT_LAND_HEIGHT_DOWN, _patches_newgame.se_flat_world_height <= 0); |
623 w->SetWidgetLoweredState(CSCEN_TEMPERATE, _opt_newgame.landscape == LT_TEMPERATE); | 647 w->SetWidgetDisabledState(CSCEN_FLAT_LAND_HEIGHT_UP, _patches_newgame.se_flat_world_height >= MAX_TILE_HEIGHT); |
624 w->SetWidgetLoweredState(CSCEN_ARCTIC, _opt_newgame.landscape == LT_ARCTIC); | 648 |
625 w->SetWidgetLoweredState(CSCEN_TROPICAL, _opt_newgame.landscape == LT_TROPIC); | 649 w->SetWidgetLoweredState(CSCEN_TEMPERATE, _opt_newgame.landscape == LT_TEMPERATE); |
626 w->SetWidgetLoweredState(CSCEN_TOYLAND, _opt_newgame.landscape == LT_TOYLAND); | 650 w->SetWidgetLoweredState(CSCEN_ARCTIC, _opt_newgame.landscape == LT_ARCTIC); |
627 | 651 w->SetWidgetLoweredState(CSCEN_TROPICAL, _opt_newgame.landscape == LT_TROPIC); |
628 /* Set parameters for widget text that requires them */ | 652 w->SetWidgetLoweredState(CSCEN_TOYLAND, _opt_newgame.landscape == LT_TOYLAND); |
629 SetDParam(0, ConvertYMDToDate(_patches_newgame.starting_year, 0, 1)); // CSCEN_START_DATE_TEXT | 653 |
630 SetDParam(1, 1 << _patches_newgame.map_x); // CSCEN_MAPSIZE_X_PULLDOWN | 654 /* Set parameters for widget text that requires them */ |
631 SetDParam(2, 1 << _patches_newgame.map_y); // CSCEN_MAPSIZE_Y_PULLDOWN | 655 SetDParam(0, ConvertYMDToDate(_patches_newgame.starting_year, 0, 1)); // CSCEN_START_DATE_TEXT |
632 SetDParam(3, _patches_newgame.se_flat_world_height); // CSCEN_FLAT_LAND_HEIGHT_TEXT | 656 SetDParam(1, 1 << _patches_newgame.map_x); // CSCEN_MAPSIZE_X_PULLDOWN |
633 | 657 SetDParam(2, 1 << _patches_newgame.map_y); // CSCEN_MAPSIZE_Y_PULLDOWN |
634 DrawWindowWidgets(w); | 658 SetDParam(3, _patches_newgame.se_flat_world_height); // CSCEN_FLAT_LAND_HEIGHT_TEXT |
635 | 659 |
636 break; | 660 DrawWindowWidgets(w); |
637 case WE_CLICK: | 661 |
638 switch (e->we.click.widget) { | 662 break; |
639 case CSCEN_TEMPERATE: case CSCEN_ARCTIC: case CSCEN_TROPICAL: case CSCEN_TOYLAND: | 663 |
640 w->RaiseWidget(_opt_newgame.landscape + CSCEN_TEMPERATE); | 664 case WE_CLICK: |
641 SetNewLandscapeType(e->we.click.widget - CSCEN_TEMPERATE); | 665 switch (e->we.click.widget) { |
642 break; | 666 case CSCEN_TEMPERATE: |
643 case CSCEN_MAPSIZE_X_PULLDOWN: // Mapsize X | 667 case CSCEN_ARCTIC: |
644 ShowDropDownList(w, BuildMapsizeDropDown(), _patches_newgame.map_x, CSCEN_MAPSIZE_X_PULLDOWN); | 668 case CSCEN_TROPICAL: |
645 break; | 669 case CSCEN_TOYLAND: |
646 case CSCEN_MAPSIZE_Y_PULLDOWN: // Mapsize Y | 670 w->RaiseWidget(_opt_newgame.landscape + CSCEN_TEMPERATE); |
647 ShowDropDownList(w, BuildMapsizeDropDown(), _patches_newgame.map_y, CSCEN_MAPSIZE_Y_PULLDOWN); | 671 SetNewLandscapeType(e->we.click.widget - CSCEN_TEMPERATE); |
648 break; | 672 break; |
649 case CSCEN_EMPTY_WORLD: // Empty world / flat world | 673 |
650 StartGeneratingLandscape(GLWP_SCENARIO); | 674 case CSCEN_MAPSIZE_X_PULLDOWN: // Mapsize X |
651 break; | 675 ShowDropDownList(w, BuildMapsizeDropDown(), _patches_newgame.map_x, CSCEN_MAPSIZE_X_PULLDOWN); |
652 case CSCEN_RANDOM_WORLD: // Generate | 676 break; |
653 ShowGenerateLandscape(); | 677 |
654 break; | 678 case CSCEN_MAPSIZE_Y_PULLDOWN: // Mapsize Y |
655 case CSCEN_START_DATE_DOWN: case CSCEN_START_DATE_UP: // Year buttons | 679 ShowDropDownList(w, BuildMapsizeDropDown(), _patches_newgame.map_y, CSCEN_MAPSIZE_Y_PULLDOWN); |
656 /* Don't allow too fast scrolling */ | 680 break; |
657 if ((w->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { | 681 |
658 w->HandleButtonClick(e->we.click.widget); | 682 case CSCEN_EMPTY_WORLD: // Empty world / flat world |
683 StartGeneratingLandscape(GLWP_SCENARIO); | |
684 break; | |
685 | |
686 case CSCEN_RANDOM_WORLD: // Generate | |
687 ShowGenerateLandscape(); | |
688 break; | |
689 | |
690 case CSCEN_START_DATE_DOWN: | |
691 case CSCEN_START_DATE_UP: // Year buttons | |
692 /* Don't allow too fast scrolling */ | |
693 if ((w->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { | |
694 w->HandleButtonClick(e->we.click.widget); | |
695 SetWindowDirty(w); | |
696 | |
697 _patches_newgame.starting_year = Clamp(_patches_newgame.starting_year + e->we.click.widget - CSCEN_START_DATE_TEXT, MIN_YEAR, MAX_YEAR); | |
698 } | |
699 _left_button_clicked = false; | |
700 break; | |
701 | |
702 case CSCEN_START_DATE_TEXT: // Year text | |
703 WP(w, generate_d).widget_id = CSCEN_START_DATE_TEXT; | |
704 SetDParam(0, _patches_newgame.starting_year); | |
705 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, w, CS_NUMERAL); | |
706 break; | |
707 | |
708 case CSCEN_FLAT_LAND_HEIGHT_DOWN: | |
709 case CSCEN_FLAT_LAND_HEIGHT_UP: // Height level buttons | |
710 /* Don't allow too fast scrolling */ | |
711 if ((w->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { | |
712 w->HandleButtonClick(e->we.click.widget); | |
713 SetWindowDirty(w); | |
714 | |
715 _patches_newgame.se_flat_world_height = Clamp(_patches_newgame.se_flat_world_height + e->we.click.widget - CSCEN_FLAT_LAND_HEIGHT_TEXT, 0, MAX_TILE_HEIGHT); | |
716 } | |
717 _left_button_clicked = false; | |
718 break; | |
719 | |
720 case CSCEN_FLAT_LAND_HEIGHT_TEXT: // Height level text | |
721 WP(w, generate_d).widget_id = CSCEN_FLAT_LAND_HEIGHT_TEXT; | |
722 SetDParam(0, _patches_newgame.se_flat_world_height); | |
723 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_FLAT_WORLD_HEIGHT_QUERY_CAPT, 3, 100, w, CS_NUMERAL); | |
724 break; | |
725 } | |
726 break; | |
727 | |
728 case WE_DROPDOWN_SELECT: | |
729 switch (e->we.dropdown.button) { | |
730 case CSCEN_MAPSIZE_X_PULLDOWN: _patches_newgame.map_x = e->we.dropdown.index; break; | |
731 case CSCEN_MAPSIZE_Y_PULLDOWN: _patches_newgame.map_y = e->we.dropdown.index; break; | |
732 } | |
733 SetWindowDirty(w); | |
734 break; | |
735 | |
736 case WE_ON_EDIT_TEXT: | |
737 if (e->we.edittext.str != NULL) { | |
738 int32 value = atoi(e->we.edittext.str); | |
739 | |
740 switch (WP(w, generate_d).widget_id) { | |
741 case CSCEN_START_DATE_TEXT: | |
742 w->InvalidateWidget(CSCEN_START_DATE_TEXT); | |
743 _patches_newgame.starting_year = Clamp(value, MIN_YEAR, MAX_YEAR); | |
744 break; | |
745 | |
746 case CSCEN_FLAT_LAND_HEIGHT_TEXT: | |
747 w->InvalidateWidget(CSCEN_FLAT_LAND_HEIGHT_TEXT); | |
748 _patches_newgame.se_flat_world_height = Clamp(value, 0, MAX_TILE_HEIGHT); | |
749 break; | |
750 } | |
751 | |
659 SetWindowDirty(w); | 752 SetWindowDirty(w); |
660 | 753 } |
661 _patches_newgame.starting_year = Clamp(_patches_newgame.starting_year + e->we.click.widget - CSCEN_START_DATE_TEXT, MIN_YEAR, MAX_YEAR); | 754 break; |
662 } | |
663 _left_button_clicked = false; | |
664 break; | |
665 case CSCEN_START_DATE_TEXT: // Year text | |
666 WP(w, generate_d).widget_id = CSCEN_START_DATE_TEXT; | |
667 SetDParam(0, _patches_newgame.starting_year); | |
668 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, w, CS_NUMERAL); | |
669 break; | |
670 case CSCEN_FLAT_LAND_HEIGHT_DOWN: case CSCEN_FLAT_LAND_HEIGHT_UP: // Height level buttons | |
671 /* Don't allow too fast scrolling */ | |
672 if ((w->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { | |
673 w->HandleButtonClick(e->we.click.widget); | |
674 SetWindowDirty(w); | |
675 | |
676 _patches_newgame.se_flat_world_height = Clamp(_patches_newgame.se_flat_world_height + e->we.click.widget - CSCEN_FLAT_LAND_HEIGHT_TEXT, 0, MAX_TILE_HEIGHT); | |
677 } | |
678 _left_button_clicked = false; | |
679 break; | |
680 case CSCEN_FLAT_LAND_HEIGHT_TEXT: // Height level text | |
681 WP(w, generate_d).widget_id = CSCEN_FLAT_LAND_HEIGHT_TEXT; | |
682 SetDParam(0, _patches_newgame.se_flat_world_height); | |
683 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_FLAT_WORLD_HEIGHT_QUERY_CAPT, 3, 100, w, CS_NUMERAL); | |
684 break; | |
685 } | |
686 break; | |
687 | |
688 case WE_DROPDOWN_SELECT: | |
689 switch (e->we.dropdown.button) { | |
690 case CSCEN_MAPSIZE_X_PULLDOWN: _patches_newgame.map_x = e->we.dropdown.index; break; | |
691 case CSCEN_MAPSIZE_Y_PULLDOWN: _patches_newgame.map_y = e->we.dropdown.index; break; | |
692 } | |
693 SetWindowDirty(w); | |
694 break; | |
695 | |
696 case WE_ON_EDIT_TEXT: { | |
697 if (e->we.edittext.str != NULL) { | |
698 int32 value = atoi(e->we.edittext.str); | |
699 | |
700 switch (WP(w, generate_d).widget_id) { | |
701 case CSCEN_START_DATE_TEXT: | |
702 w->InvalidateWidget(CSCEN_START_DATE_TEXT); | |
703 _patches_newgame.starting_year = Clamp(value, MIN_YEAR, MAX_YEAR); | |
704 break; | |
705 case CSCEN_FLAT_LAND_HEIGHT_TEXT: | |
706 w->InvalidateWidget(CSCEN_FLAT_LAND_HEIGHT_TEXT); | |
707 _patches_newgame.se_flat_world_height = Clamp(value, 0, MAX_TILE_HEIGHT); | |
708 break; | |
709 } | |
710 | |
711 SetWindowDirty(w); | |
712 } | |
713 break; | |
714 } | |
715 } | 755 } |
716 } | 756 } |
717 | 757 |
718 static const Widget _create_scenario_widgets[] = { | 758 static const Widget _create_scenario_widgets[] = { |
719 { WWT_CLOSEBOX, RESIZE_NONE, 13, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, | 759 { WWT_CLOSEBOX, RESIZE_NONE, 13, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
787 } | 827 } |
788 | 828 |
789 static void ShowTerrainProgressProc(Window* w, WindowEvent* e) | 829 static void ShowTerrainProgressProc(Window* w, WindowEvent* e) |
790 { | 830 { |
791 switch (e->event) { | 831 switch (e->event) { |
792 case WE_CLICK: | 832 case WE_CLICK: |
793 switch (e->we.click.widget) { | 833 switch (e->we.click.widget) { |
794 case 2: | 834 case 2: |
795 if (_cursor.sprite == SPR_CURSOR_ZZZ) SetMouseCursor(SPR_CURSOR_MOUSE, PAL_NONE); | 835 if (_cursor.sprite == SPR_CURSOR_ZZZ) SetMouseCursor(SPR_CURSOR_MOUSE, PAL_NONE); |
796 ShowQuery( | 836 ShowQuery( |
797 STR_GENERATION_ABORT_CAPTION, | 837 STR_GENERATION_ABORT_CAPTION, |
798 STR_GENERATION_ABORT_MESSAGE, | 838 STR_GENERATION_ABORT_MESSAGE, |
799 w, | 839 w, |
800 AbortGeneratingWorldCallback | 840 AbortGeneratingWorldCallback |
801 ); | 841 ); |
802 break; | 842 break; |
803 } | 843 } |
804 break; | 844 break; |
805 | 845 |
806 case WE_PAINT: | 846 case WE_PAINT: |
807 DrawWindowWidgets(w); | 847 DrawWindowWidgets(w); |
808 | 848 |
809 /* Draw the % complete with a bar and a text */ | 849 /* Draw the % complete with a bar and a text */ |
810 DrawFrameRect(19, 20, (w->width - 18), 37, 14, FR_BORDERONLY); | 850 DrawFrameRect(19, 20, (w->width - 18), 37, 14, FR_BORDERONLY); |
811 DrawFrameRect(20, 21, (int)((w->width - 40) * _tp.percent / 100) + 20, 36, 10, FR_NONE); | 851 DrawFrameRect(20, 21, (int)((w->width - 40) * _tp.percent / 100) + 20, 36, 10, FR_NONE); |
812 SetDParam(0, _tp.percent); | 852 SetDParam(0, _tp.percent); |
813 DrawStringCentered(90, 25, STR_PROGRESS, TC_FROMSTRING); | 853 DrawStringCentered(90, 25, STR_PROGRESS, TC_FROMSTRING); |
814 | 854 |
815 /* Tell which class we are generating */ | 855 /* Tell which class we are generating */ |
816 DrawStringCentered(90, 46, _tp.cls, TC_FROMSTRING); | 856 DrawStringCentered(90, 46, _tp.cls, TC_FROMSTRING); |
817 | 857 |
818 /* And say where we are in that class */ | 858 /* And say where we are in that class */ |
819 SetDParam(0, _tp.current); | 859 SetDParam(0, _tp.current); |
820 SetDParam(1, _tp.total); | 860 SetDParam(1, _tp.total); |
821 DrawStringCentered(90, 58, STR_GENERATION_PROGRESS, TC_FROMSTRING); | 861 DrawStringCentered(90, 58, STR_GENERATION_PROGRESS, TC_FROMSTRING); |
822 | 862 |
823 SetWindowDirty(w); | 863 SetWindowDirty(w); |
824 break; | 864 break; |
825 } | 865 } |
826 } | 866 } |
827 | 867 |
828 static const WindowDesc _show_terrain_progress_desc = { | 868 static const WindowDesc _show_terrain_progress_desc = { |
829 WDP_CENTER, WDP_CENTER, 181, 97, 181, 97, | 869 WDP_CENTER, WDP_CENTER, 181, 97, 181, 97, |