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,