src/genworld_gui.cpp
branchcpp_gui
changeset 6258 a2f86b8fd99b
parent 6251 cd413fa2e252
child 6263 19dab6a68886
equal deleted inserted replaced
6257:2ffe947969ca 6258:a2f86b8fd99b
    89 	GLAND_WATER_PULLDOWN,
    89 	GLAND_WATER_PULLDOWN,
    90 	GLAND_SMOOTHNESS_TEXT,
    90 	GLAND_SMOOTHNESS_TEXT,
    91 	GLAND_SMOOTHNESS_PULLDOWN
    91 	GLAND_SMOOTHNESS_PULLDOWN
    92 };
    92 };
    93 
    93 
    94 static const Widget _generate_landscape_widgets[] = {
    94 static const OldWidget _generate_landscape_widgets[] = {
    95 {  WWT_CLOSEBOX,  RESIZE_NONE, 13,   0,  10,   0,  13, STR_00C5,                     STR_018B_CLOSE_WINDOW},
    95 {  WWT_CLOSEBOX,  RESIZE_NONE, 13,   0,  10,   0,  13, STR_00C5,                     STR_018B_CLOSE_WINDOW},
    96 {    WWT_CAPTION, RESIZE_NONE, 13,  11, 337,   0,  13, STR_WORLD_GENERATION_CAPTION, STR_NULL},
    96 {    WWT_CAPTION, RESIZE_NONE, 13,  11, 337,   0,  13, STR_WORLD_GENERATION_CAPTION, STR_NULL},
    97 {      WWT_PANEL, RESIZE_NONE, 13,   0, 337,  14, 267, 0x0,                          STR_NULL},
    97 {      WWT_PANEL, RESIZE_NONE, 13,   0, 337,  14, 267, 0x0,                          STR_NULL},
    98 
    98 
    99 {   WWT_IMGBTN_2, RESIZE_NONE, 12,  10,  86,  24,  78, SPR_SELECT_TEMPERATE,         STR_030E_SELECT_TEMPERATE_LANDSCAPE},
    99 {   WWT_IMGBTN_2, RESIZE_NONE, 12,  10,  86,  24,  78, SPR_SELECT_TEMPERATE,         STR_030E_SELECT_TEMPERATE_LANDSCAPE},
   135 {      WWT_PANEL, RESIZE_NONE, 12, 113, 219, 246, 257, 0x0,                          STR_NULL},
   135 {      WWT_PANEL, RESIZE_NONE, 12, 113, 219, 246, 257, 0x0,                          STR_NULL},
   136 {    WWT_TEXTBTN, RESIZE_NONE, 12, 220, 231, 246, 257, STR_0225,                     STR_NULL}, // Map smoothness
   136 {    WWT_TEXTBTN, RESIZE_NONE, 12, 220, 231, 246, 257, STR_0225,                     STR_NULL}, // Map smoothness
   137 {   WIDGETS_END},
   137 {   WIDGETS_END},
   138 };
   138 };
   139 
   139 
   140 static const Widget _heightmap_load_widgets[] = {
   140 static const OldWidget _heightmap_load_widgets[] = {
   141 {   WWT_CLOSEBOX, RESIZE_NONE, 13,   0,  10,   0,  13, STR_00C5,                     STR_018B_CLOSE_WINDOW},
   141 {   WWT_CLOSEBOX, RESIZE_NONE, 13,   0,  10,   0,  13, STR_00C5,                     STR_018B_CLOSE_WINDOW},
   142 {    WWT_CAPTION, RESIZE_NONE, 13,  11, 337,   0,  13, STR_WORLD_GENERATION_CAPTION, STR_NULL},
   142 {    WWT_CAPTION, RESIZE_NONE, 13,  11, 337,   0,  13, STR_WORLD_GENERATION_CAPTION, STR_NULL},
   143 {      WWT_PANEL, RESIZE_NONE, 13,   0, 337,  14, 235, 0x0,                          STR_NULL},
   143 {      WWT_PANEL, RESIZE_NONE, 13,   0, 337,  14, 235, 0x0,                          STR_NULL},
   144 
   144 
   145 {   WWT_IMGBTN_2, RESIZE_NONE, 12,  10,  86,  24,  78, SPR_SELECT_TEMPERATE,        STR_030E_SELECT_TEMPERATE_LANDSCAPE},
   145 {   WWT_IMGBTN_2, RESIZE_NONE, 12,  10,  86,  24,  78, SPR_SELECT_TEMPERATE,        STR_030E_SELECT_TEMPERATE_LANDSCAPE},
   178 {   WIDGETS_END},
   178 {   WIDGETS_END},
   179 };
   179 };
   180 
   180 
   181 void StartGeneratingLandscape(glwp_modes mode)
   181 void StartGeneratingLandscape(glwp_modes mode)
   182 {
   182 {
   183 	Window::DeleteAllNonVitalWindows();
   183 	BaseWindow::DeleteAllNonVitalWindows();
   184 
   184 
   185 	/* Copy all XXX_newgame to XXX when coming from outside the editor */
   185 	/* Copy all XXX_newgame to XXX when coming from outside the editor */
   186 	UpdatePatches();
   186 	UpdatePatches();
   187 	_opt = _opt_newgame;
   187 	_opt = _opt_newgame;
   188 	_opt_ptr = &_opt;
   188 	_opt_ptr = &_opt;
   195 		case GLWP_SCENARIO:  _switch_mode = SM_EDITOR; break;
   195 		case GLWP_SCENARIO:  _switch_mode = SM_EDITOR; break;
   196 		default: NOT_REACHED();
   196 		default: NOT_REACHED();
   197 	}
   197 	}
   198 }
   198 }
   199 
   199 
   200 static void HeightmapScaledTooMuchCallback(Window *w, bool confirmed)
   200 static void HeightmapScaledTooMuchCallback(BaseWindow *w, bool confirmed)
   201 {
   201 {
   202 	if (confirmed) StartGeneratingLandscape((glwp_modes)w->window_number);
   202 	if (confirmed) StartGeneratingLandscape((glwp_modes)w->window_number);
   203 }
   203 }
   204 
   204 
   205 static void GenerateLandscapeWndProc(Window *w, WindowEvent *e)
   205 static void GenerateLandscapeWndProc(BaseWindow *w, WindowEvent *e)
   206 {
   206 {
   207 	static const StringID mapsizes[]    = {STR_64, STR_128, STR_256, STR_512, STR_1024, STR_2048, INVALID_STRING_ID};
   207 	static const StringID mapsizes[]    = {STR_64, STR_128, STR_256, STR_512, STR_1024, STR_2048, INVALID_STRING_ID};
   208 	static const StringID elevations[]  = {STR_682A_VERY_FLAT, STR_682B_FLAT, STR_682C_HILLY, STR_682D_MOUNTAINOUS, INVALID_STRING_ID};
   208 	static const StringID elevations[]  = {STR_682A_VERY_FLAT, STR_682B_FLAT, STR_682C_HILLY, STR_682D_MOUNTAINOUS, INVALID_STRING_ID};
   209 	static const StringID sea_lakes[]   = {STR_VERY_LOW, STR_6820_LOW, STR_6821_MEDIUM, STR_6822_HIGH, INVALID_STRING_ID};
   209 	static const StringID sea_lakes[]   = {STR_VERY_LOW, STR_6820_LOW, STR_6821_MEDIUM, STR_6822_HIGH, INVALID_STRING_ID};
   210 	static const StringID smoothness[]  = {STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH, STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_SMOOTH, STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_ROUGH, STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_ROUGH, INVALID_STRING_ID};
   210 	static const StringID smoothness[]  = {STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH, STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_SMOOTH, STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_ROUGH, STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_ROUGH, INVALID_STRING_ID};
   524 		/* If the function returns negative, it means there was a problem loading the heightmap */
   524 		/* If the function returns negative, it means there was a problem loading the heightmap */
   525 		if (!GetHeightmapDimensions(_file_to_saveload.name, &_heightmap_x, &_heightmap_y))
   525 		if (!GetHeightmapDimensions(_file_to_saveload.name, &_heightmap_x, &_heightmap_y))
   526 			return;
   526 			return;
   527 	}
   527 	}
   528 
   528 
   529 	Window *w = AllocateWindowDescFront((mode == GLWP_HEIGHTMAP) ? &_heightmap_load_desc : &_generate_landscape_desc, mode);
   529 	BaseWindow *w = BaseWindow::AllocateFront((mode == GLWP_HEIGHTMAP) ? &_heightmap_load_desc : &_generate_landscape_desc, mode);
   530 
   530 
   531 	if (w != NULL) InvalidateWindow(WC_GENERATE_LANDSCAPE, mode);
   531 	if (w != NULL) InvalidateWindow(WC_GENERATE_LANDSCAPE, mode);
   532 }
   532 }
   533 
   533 
   534 void ShowGenerateLandscape(void)
   534 void ShowGenerateLandscape(void)
   572 	CSCEN_FLAT_LAND_HEIGHT_TEXT,
   572 	CSCEN_FLAT_LAND_HEIGHT_TEXT,
   573 	CSCEN_FLAT_LAND_HEIGHT_UP
   573 	CSCEN_FLAT_LAND_HEIGHT_UP
   574 };
   574 };
   575 
   575 
   576 
   576 
   577 static void CreateScenarioWndProc(Window *w, WindowEvent *e)
   577 static void CreateScenarioWndProc(BaseWindow *w, WindowEvent *e)
   578 {
   578 {
   579 	static const StringID mapsizes[] = {STR_64, STR_128, STR_256, STR_512, STR_1024, STR_2048, INVALID_STRING_ID};
   579 	static const StringID mapsizes[] = {STR_64, STR_128, STR_256, STR_512, STR_1024, STR_2048, INVALID_STRING_ID};
   580 
   580 
   581 	switch (e->event) {
   581 	switch (e->event) {
   582 	case WE_CREATE: w->LowerWidget(_opt_newgame.landscape + CSCEN_TEMPERATE); break;
   582 	case WE_CREATE: w->LowerWidget(_opt_newgame.landscape + CSCEN_TEMPERATE); break;
   686 		break;
   686 		break;
   687 	}
   687 	}
   688 	}
   688 	}
   689 }
   689 }
   690 
   690 
   691 static const Widget _create_scenario_widgets[] = {
   691 static const OldWidget _create_scenario_widgets[] = {
   692 {   WWT_CLOSEBOX, RESIZE_NONE, 13,   0,  10,   0,  13, STR_00C5,                STR_018B_CLOSE_WINDOW},
   692 {   WWT_CLOSEBOX, RESIZE_NONE, 13,   0,  10,   0,  13, STR_00C5,                STR_018B_CLOSE_WINDOW},
   693 {    WWT_CAPTION, RESIZE_NONE, 13,  11, 337,   0,  13, STR_SE_CAPTION,          STR_NULL},
   693 {    WWT_CAPTION, RESIZE_NONE, 13,  11, 337,   0,  13, STR_SE_CAPTION,          STR_NULL},
   694 {      WWT_PANEL, RESIZE_NONE, 13,   0, 337,  14, 169, 0x0,                     STR_NULL},
   694 {      WWT_PANEL, RESIZE_NONE, 13,   0, 337,  14, 169, 0x0,                     STR_NULL},
   695 
   695 
   696 {   WWT_IMGBTN_2, RESIZE_NONE, 12,  10,  86,  24,  78, SPR_SELECT_TEMPERATE,    STR_030E_SELECT_TEMPERATE_LANDSCAPE},
   696 {   WWT_IMGBTN_2, RESIZE_NONE, 12,  10,  86,  24,  78, SPR_SELECT_TEMPERATE,    STR_030E_SELECT_TEMPERATE_LANDSCAPE},
   725 };
   725 };
   726 
   726 
   727 void ShowCreateScenario(void)
   727 void ShowCreateScenario(void)
   728 {
   728 {
   729 	DeleteWindowByClass(WC_GENERATE_LANDSCAPE);
   729 	DeleteWindowByClass(WC_GENERATE_LANDSCAPE);
   730 	AllocateWindowDescFront(&_create_scenario_desc, GLWP_SCENARIO);
   730 	BaseWindow::AllocateFront(&_create_scenario_desc, GLWP_SCENARIO);
   731 }
   731 }
   732 
   732 
   733 
   733 
   734 static const Widget _show_terrain_progress_widgets[] = {
   734 static const OldWidget _show_terrain_progress_widgets[] = {
   735 {    WWT_CAPTION,   RESIZE_NONE,    14,     0,   180,     0,    13, STR_GENERATION_WORLD,   STR_018C_WINDOW_TITLE_DRAG_THIS},
   735 {    WWT_CAPTION,   RESIZE_NONE,    14,     0,   180,     0,    13, STR_GENERATION_WORLD,   STR_018C_WINDOW_TITLE_DRAG_THIS},
   736 {      WWT_PANEL,   RESIZE_NONE,    14,     0,   180,    14,    96, 0x0,                    STR_NULL},
   736 {      WWT_PANEL,   RESIZE_NONE,    14,     0,   180,    14,    96, 0x0,                    STR_NULL},
   737 {    WWT_TEXTBTN,   RESIZE_NONE,    15,    20,   161,    74,    85, STR_GENERATION_ABORT,   STR_NULL}, // Abort button
   737 {    WWT_TEXTBTN,   RESIZE_NONE,    15,    20,   161,    74,    85, STR_GENERATION_ABORT,   STR_NULL}, // Abort button
   738 {   WIDGETS_END},
   738 {   WIDGETS_END},
   739 };
   739 };
   746 	int timer;
   746 	int timer;
   747 } tp_info;
   747 } tp_info;
   748 
   748 
   749 static tp_info _tp;
   749 static tp_info _tp;
   750 
   750 
   751 static void AbortGeneratingWorldCallback(Window *w, bool confirmed)
   751 static void AbortGeneratingWorldCallback(BaseWindow *w, bool confirmed)
   752 {
   752 {
   753 	if (confirmed) {
   753 	if (confirmed) {
   754 		AbortGeneratingWorld();
   754 		AbortGeneratingWorld();
   755 	} else if (IsGeneratingWorld() && !IsGeneratingWorldAborted()) {
   755 	} else if (IsGeneratingWorld() && !IsGeneratingWorldAborted()) {
   756 		SetMouseCursor(SPR_CURSOR_ZZZ, PAL_NONE);
   756 		SetMouseCursor(SPR_CURSOR_ZZZ, PAL_NONE);
   757 	}
   757 	}
   758 }
   758 }
   759 
   759 
   760 static void ShowTerrainProgressProc(Window* w, WindowEvent* e)
   760 static void ShowTerrainProgressProc(BaseWindow* w, WindowEvent* e)
   761 {
   761 {
   762 	switch (e->event) {
   762 	switch (e->event) {
   763 	case WE_CLICK:
   763 	case WE_CLICK:
   764 		switch (e->we.click.widget) {
   764 		switch (e->we.click.widget) {
   765 		case 2:
   765 		case 2:
   819 /**
   819 /**
   820  * Show the window where a user can follow the process of the map generation.
   820  * Show the window where a user can follow the process of the map generation.
   821  */
   821  */
   822 void ShowGenerateWorldProgress(void)
   822 void ShowGenerateWorldProgress(void)
   823 {
   823 {
   824 	AllocateWindowDescFront(&_show_terrain_progress_desc, 0);
   824 	BaseWindow::AllocateFront(&_show_terrain_progress_desc, 0);
   825 }
   825 }
   826 
   826 
   827 static void _SetGeneratingWorldProgress(gwp_class cls, uint progress, uint total)
   827 static void _SetGeneratingWorldProgress(gwp_class cls, uint progress, uint total)
   828 {
   828 {
   829 	static const int percent_table[GWP_CLASS_COUNT + 1] = {0, 5, 15, 20, 40, 60, 65, 80, 85, 99, 100 };
   829 	static const int percent_table[GWP_CLASS_COUNT + 1] = {0, 5, 15, 20, 40, 60, 65, 80, 85, 99, 100 };