src/settings_gui.cpp
changeset 8336 432b85820441
parent 8323 d5531c7645a7
child 8408 cab5989c2ce2
equal deleted inserted replaced
8335:09a2e049b3a8 8336:432b85820441
   114 	return false;
   114 	return false;
   115 }
   115 }
   116 
   116 
   117 
   117 
   118 enum GameOptionsWidgets {
   118 enum GameOptionsWidgets {
   119 	GAMEOPT_CURRENCY_TXT    =  4,
   119 	GAMEOPT_CURRENCY_BTN    =  4,
   120 	GAMEOPT_CURRENCY_BTN,
   120 	GAMEOPT_DISTANCE_BTN    =  6,
   121 	GAMEOPT_DISTANCE_TXT    =  7,
   121 	GAMEOPT_ROADSIDE_BTN    =  8,
   122 	GAMEOPT_DISTANCE_BTN,
   122 	GAMEOPT_TOWNNAME_BTN    = 10,
   123 	GAMEOPT_ROADSIDE_TXT    = 10,
   123 	GAMEOPT_AUTOSAVE_BTN    = 12,
   124 	GAMEOPT_ROADSIDE_BTN,
   124 	GAMEOPT_VEHICLENAME_BTN = 14,
   125 	GAMEOPT_TOWNNAME_TXT    = 13,
       
   126 	GAMEOPT_TOWNNAME_BTN,
       
   127 	GAMEOPT_AUTOSAVE_TXT    = 16,
       
   128 	GAMEOPT_AUTOSAVE_BTN,
       
   129 	GAMEOPT_VEHICLENAME_TXT = 19,
       
   130 	GAMEOPT_VEHICLENAME_BTN,
       
   131 	GAMEOPT_VEHICLENAME_SAVE,
   125 	GAMEOPT_VEHICLENAME_SAVE,
   132 	GAMEOPT_LANG_TXT        = 23,
   126 	GAMEOPT_LANG_BTN        = 17,
   133 	GAMEOPT_LANG_BTN,
   127 	GAMEOPT_RESOLUTION_BTN  = 19,
   134 	GAMEOPT_RESOLUTION_TXT  = 26,
       
   135 	GAMEOPT_RESOLUTION_BTN,
       
   136 	GAMEOPT_FULLSCREEN,
   128 	GAMEOPT_FULLSCREEN,
   137 	GAMEOPT_SCREENSHOT_TXT  = 30,
   129 	GAMEOPT_SCREENSHOT_BTN  = 22,
   138 	GAMEOPT_SCREENSHOT_BTN,
       
   139 };
   130 };
   140 
   131 
   141 /**
   132 /**
   142  * Update/redraw the townnames dropdown
   133  * Update/redraw the townnames dropdown
   143  * @param w   the window the dropdown belongs to
   134  * @param w   the window the dropdown belongs to
   209 			DrawString(20, 175, STR_OPTIONS_FULLSCREEN, TC_FROMSTRING); // fullscreen
   200 			DrawString(20, 175, STR_OPTIONS_FULLSCREEN, TC_FROMSTRING); // fullscreen
   210 		} break;
   201 		} break;
   211 
   202 
   212 		case WE_CLICK:
   203 		case WE_CLICK:
   213 			switch (e->we.click.widget) {
   204 			switch (e->we.click.widget) {
   214 				case GAMEOPT_CURRENCY_TXT: case GAMEOPT_CURRENCY_BTN: /* Setup currencies dropdown */
   205 				case GAMEOPT_CURRENCY_BTN: /* Setup currencies dropdown */
   215 					ShowDropDownMenu(w, BuildCurrencyDropdown(), _opt_ptr->currency, GAMEOPT_CURRENCY_BTN, _game_mode == GM_MENU ? 0 : ~GetMaskOfAllowedCurrencies(), 0);
   206 					ShowDropDownMenu(w, BuildCurrencyDropdown(), _opt_ptr->currency, GAMEOPT_CURRENCY_BTN, _game_mode == GM_MENU ? 0 : ~GetMaskOfAllowedCurrencies(), 0);
   216 					break;
   207 					break;
   217 
   208 
   218 				case GAMEOPT_DISTANCE_TXT: case GAMEOPT_DISTANCE_BTN: /* Setup distance unit dropdown */
   209 				case GAMEOPT_DISTANCE_BTN: /* Setup distance unit dropdown */
   219 					ShowDropDownMenu(w, _units_dropdown, _opt_ptr->units, GAMEOPT_DISTANCE_BTN, 0, 0);
   210 					ShowDropDownMenu(w, _units_dropdown, _opt_ptr->units, GAMEOPT_DISTANCE_BTN, 0, 0);
   220 					break;
   211 					break;
   221 
   212 
   222 				case GAMEOPT_ROADSIDE_TXT: case GAMEOPT_ROADSIDE_BTN: { /* Setup road-side dropdown */
   213 				case GAMEOPT_ROADSIDE_BTN: { /* Setup road-side dropdown */
   223 					int i = 0;
   214 					int i = 0;
   224 
   215 
   225 					/* You can only change the drive side if you are in the menu or ingame with
   216 					/* You can only change the drive side if you are in the menu or ingame with
   226 					 * no vehicles present. In a networking game only the server can change it */
   217 					 * no vehicles present. In a networking game only the server can change it */
   227 					if ((_game_mode != GM_MENU && RoadVehiclesAreBuilt()) || (_networking && !_network_server))
   218 					if ((_game_mode != GM_MENU && RoadVehiclesAreBuilt()) || (_networking && !_network_server))
   228 						i = (-1) ^ (1 << _opt_ptr->road_side); // disable the other value
   219 						i = (-1) ^ (1 << _opt_ptr->road_side); // disable the other value
   229 
   220 
   230 					ShowDropDownMenu(w, _driveside_dropdown, _opt_ptr->road_side, GAMEOPT_ROADSIDE_BTN, i, 0);
   221 					ShowDropDownMenu(w, _driveside_dropdown, _opt_ptr->road_side, GAMEOPT_ROADSIDE_BTN, i, 0);
   231 				} break;
   222 				} break;
   232 
   223 
   233 				case GAMEOPT_TOWNNAME_TXT: case GAMEOPT_TOWNNAME_BTN: /* Setup townname dropdown */
   224 				case GAMEOPT_TOWNNAME_BTN: /* Setup townname dropdown */
   234 					ShowTownnameDropdown(w, _opt_ptr->town_name);
   225 					ShowTownnameDropdown(w, _opt_ptr->town_name);
   235 					break;
   226 					break;
   236 
   227 
   237 				case GAMEOPT_AUTOSAVE_TXT: case GAMEOPT_AUTOSAVE_BTN: /* Setup autosave dropdown */
   228 				case GAMEOPT_AUTOSAVE_BTN: /* Setup autosave dropdown */
   238 					ShowDropDownMenu(w, _autosave_dropdown, _opt_ptr->autosave, GAMEOPT_AUTOSAVE_BTN, 0, 0);
   229 					ShowDropDownMenu(w, _autosave_dropdown, _opt_ptr->autosave, GAMEOPT_AUTOSAVE_BTN, 0, 0);
   239 					break;
   230 					break;
   240 
   231 
   241 				case GAMEOPT_VEHICLENAME_TXT: case GAMEOPT_VEHICLENAME_BTN: /* Setup customized vehicle-names dropdown */
   232 				case GAMEOPT_VEHICLENAME_BTN: /* Setup customized vehicle-names dropdown */
   242 					ShowDropDownMenu(w, _designnames_dropdown, (_vehicle_design_names & 1) ? 1 : 0, GAMEOPT_VEHICLENAME_BTN, (_vehicle_design_names & 2) ? 0 : 2, 0);
   233 					ShowDropDownMenu(w, _designnames_dropdown, (_vehicle_design_names & 1) ? 1 : 0, GAMEOPT_VEHICLENAME_BTN, (_vehicle_design_names & 2) ? 0 : 2, 0);
   243 					break;
   234 					break;
   244 
   235 
   245 				case GAMEOPT_VEHICLENAME_SAVE: /* Save customized vehicle-names to disk */
   236 				case GAMEOPT_VEHICLENAME_SAVE: /* Save customized vehicle-names to disk */
   246 					break;  // not implemented
   237 					break;  // not implemented
   247 
   238 
   248 				case GAMEOPT_LANG_TXT: case GAMEOPT_LANG_BTN: /* Setup interface language dropdown */
   239 				case GAMEOPT_LANG_BTN: /* Setup interface language dropdown */
   249 					ShowLangDropdown(w);
   240 					ShowLangDropdown(w);
   250 					break;
   241 					break;
   251 
   242 
   252 				case GAMEOPT_RESOLUTION_TXT: case GAMEOPT_RESOLUTION_BTN: /* Setup resolution dropdown */
   243 				case GAMEOPT_RESOLUTION_BTN: /* Setup resolution dropdown */
   253 					ShowDropDownMenu(w, BuildDynamicDropdown(SPECSTR_RESOLUTION_START, _num_resolutions), GetCurRes(), GAMEOPT_RESOLUTION_BTN, 0, 0);
   244 					ShowDropDownMenu(w, BuildDynamicDropdown(SPECSTR_RESOLUTION_START, _num_resolutions), GetCurRes(), GAMEOPT_RESOLUTION_BTN, 0, 0);
   254 					break;
   245 					break;
   255 
   246 
   256 				case GAMEOPT_FULLSCREEN: /* Click fullscreen on/off */
   247 				case GAMEOPT_FULLSCREEN: /* Click fullscreen on/off */
   257 					/* try to toggle full-screen on/off */
   248 					/* try to toggle full-screen on/off */
   260 					}
   251 					}
   261 					w->SetWidgetLoweredState(GAMEOPT_FULLSCREEN, _fullscreen);
   252 					w->SetWidgetLoweredState(GAMEOPT_FULLSCREEN, _fullscreen);
   262 					SetWindowDirty(w);
   253 					SetWindowDirty(w);
   263 					break;
   254 					break;
   264 
   255 
   265 				case GAMEOPT_SCREENSHOT_TXT: case GAMEOPT_SCREENSHOT_BTN: /* Setup screenshot format dropdown */
   256 				case GAMEOPT_SCREENSHOT_BTN: /* Setup screenshot format dropdown */
   266 					ShowDropDownMenu(w, BuildDynamicDropdown(SPECSTR_SCREENSHOT_START, _num_screenshot_formats), _cur_screenshot_format, GAMEOPT_SCREENSHOT_BTN, 0, 0);
   257 					ShowDropDownMenu(w, BuildDynamicDropdown(SPECSTR_SCREENSHOT_START, _num_screenshot_formats), _cur_screenshot_format, GAMEOPT_SCREENSHOT_BTN, 0, 0);
   267 					break;
   258 					break;
   268 			}
   259 			}
   269 			break;
   260 			break;
   270 
   261 
   358 static const Widget _game_options_widgets[] = {
   349 static const Widget _game_options_widgets[] = {
   359 {   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                          STR_018B_CLOSE_WINDOW},
   350 {   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                          STR_018B_CLOSE_WINDOW},
   360 {    WWT_CAPTION,   RESIZE_NONE,    14,    11,   369,     0,    13, STR_00B1_GAME_OPTIONS,             STR_018C_WINDOW_TITLE_DRAG_THIS},
   351 {    WWT_CAPTION,   RESIZE_NONE,    14,    11,   369,     0,    13, STR_00B1_GAME_OPTIONS,             STR_018C_WINDOW_TITLE_DRAG_THIS},
   361 {      WWT_PANEL,   RESIZE_NONE,    14,     0,   369,    14,   238, 0x0,                               STR_NULL},
   352 {      WWT_PANEL,   RESIZE_NONE,    14,     0,   369,    14,   238, 0x0,                               STR_NULL},
   362 {      WWT_FRAME,   RESIZE_NONE,    14,    10,   179,    20,    55, STR_02E0_CURRENCY_UNITS,           STR_NULL},
   353 {      WWT_FRAME,   RESIZE_NONE,    14,    10,   179,    20,    55, STR_02E0_CURRENCY_UNITS,           STR_NULL},
   363 {      WWT_INSET,   RESIZE_NONE,    14,    20,   169,    34,    45, STR_02E1,                          STR_02E2_CURRENCY_UNITS_SELECTION},
   354 { WWT_DROPDOWNIN,   RESIZE_NONE,    14,    20,   169,    34,    45, STR_02E1,                          STR_02E2_CURRENCY_UNITS_SELECTION},
   364 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   158,   168,    35,    44, STR_0225,                          STR_02E2_CURRENCY_UNITS_SELECTION},
       
   365 {      WWT_FRAME,   RESIZE_NONE,    14,   190,   359,    20,    55, STR_MEASURING_UNITS,               STR_NULL},
   355 {      WWT_FRAME,   RESIZE_NONE,    14,   190,   359,    20,    55, STR_MEASURING_UNITS,               STR_NULL},
   366 {      WWT_INSET,   RESIZE_NONE,    14,   200,   349,    34,    45, STR_02E4,                          STR_MEASURING_UNITS_SELECTION},
   356 { WWT_DROPDOWNIN,   RESIZE_NONE,    14,   200,   349,    34,    45, STR_02E4,                          STR_MEASURING_UNITS_SELECTION},
   367 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   338,   348,    35,    44, STR_0225,                          STR_MEASURING_UNITS_SELECTION},
       
   368 {      WWT_FRAME,   RESIZE_NONE,    14,    10,   179,    62,    97, STR_02E6_ROAD_VEHICLES,            STR_NULL},
   357 {      WWT_FRAME,   RESIZE_NONE,    14,    10,   179,    62,    97, STR_02E6_ROAD_VEHICLES,            STR_NULL},
   369 {      WWT_INSET,   RESIZE_NONE,    14,    20,   169,    76,    87, STR_02E7,                          STR_02E8_SELECT_SIDE_OF_ROAD_FOR},
   358 { WWT_DROPDOWNIN,   RESIZE_NONE,    14,    20,   169,    76,    87, STR_02E7,                          STR_02E8_SELECT_SIDE_OF_ROAD_FOR},
   370 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   158,   168,    77,    86, STR_0225,                          STR_02E8_SELECT_SIDE_OF_ROAD_FOR},
       
   371 {      WWT_FRAME,   RESIZE_NONE,    14,   190,   359,    62,    97, STR_02EB_TOWN_NAMES,               STR_NULL},
   359 {      WWT_FRAME,   RESIZE_NONE,    14,   190,   359,    62,    97, STR_02EB_TOWN_NAMES,               STR_NULL},
   372 {      WWT_INSET,   RESIZE_NONE,    14,   200,   349,    76,    87, STR_02EC,                          STR_02ED_SELECT_STYLE_OF_TOWN_NAMES},
   360 { WWT_DROPDOWNIN,   RESIZE_NONE,    14,   200,   349,    76,    87, STR_02EC,                          STR_02ED_SELECT_STYLE_OF_TOWN_NAMES},
   373 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   338,   348,    77,    86, STR_0225,                          STR_02ED_SELECT_STYLE_OF_TOWN_NAMES},
       
   374 {      WWT_FRAME,   RESIZE_NONE,    14,    10,   179,   104,   139, STR_02F4_AUTOSAVE,                 STR_NULL},
   361 {      WWT_FRAME,   RESIZE_NONE,    14,    10,   179,   104,   139, STR_02F4_AUTOSAVE,                 STR_NULL},
   375 {      WWT_INSET,   RESIZE_NONE,    14,    20,   169,   118,   129, STR_02F5,                          STR_02F6_SELECT_INTERVAL_BETWEEN},
   362 { WWT_DROPDOWNIN,   RESIZE_NONE,    14,    20,   169,   118,   129, STR_02F5,                          STR_02F6_SELECT_INTERVAL_BETWEEN},
   376 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   158,   168,   119,   128, STR_0225,                          STR_02F6_SELECT_INTERVAL_BETWEEN},
       
   377 
   363 
   378 {      WWT_FRAME,   RESIZE_NONE,    14,    10,   359,   194,   228, STR_02BC_VEHICLE_DESIGN_NAMES,     STR_NULL},
   364 {      WWT_FRAME,   RESIZE_NONE,    14,    10,   359,   194,   228, STR_02BC_VEHICLE_DESIGN_NAMES,     STR_NULL},
   379 {      WWT_INSET,   RESIZE_NONE,    14,    20,   119,   207,   218, STR_02BD,                          STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION},
   365 { WWT_DROPDOWNIN,   RESIZE_NONE,    14,    20,   119,   207,   218, STR_02BD,                          STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION},
   380 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   108,   118,   208,   217, STR_0225,                          STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION},
       
   381 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   130,   349,   207,   218, STR_02C0_SAVE_CUSTOM_NAMES,        STR_02C2_SAVE_CUSTOMIZED_VEHICLE},
   366 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   130,   349,   207,   218, STR_02C0_SAVE_CUSTOM_NAMES,        STR_02C2_SAVE_CUSTOMIZED_VEHICLE},
   382 
   367 
   383 {      WWT_FRAME,   RESIZE_NONE,    14,   190,   359,   104,   139, STR_OPTIONS_LANG,                  STR_NULL},
   368 {      WWT_FRAME,   RESIZE_NONE,    14,   190,   359,   104,   139, STR_OPTIONS_LANG,                  STR_NULL},
   384 {      WWT_INSET,   RESIZE_NONE,    14,   200,   349,   118,   129, STR_OPTIONS_LANG_CBO,              STR_OPTIONS_LANG_TIP},
   369 { WWT_DROPDOWNIN,   RESIZE_NONE,    14,   200,   349,   118,   129, STR_OPTIONS_LANG_CBO,              STR_OPTIONS_LANG_TIP},
   385 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   338,   348,   119,   128, STR_0225,                          STR_OPTIONS_LANG_TIP},
       
   386 
   370 
   387 {      WWT_FRAME,   RESIZE_NONE,    14,    10,   179,   146,   190, STR_OPTIONS_RES,                   STR_NULL},
   371 {      WWT_FRAME,   RESIZE_NONE,    14,    10,   179,   146,   190, STR_OPTIONS_RES,                   STR_NULL},
   388 {      WWT_INSET,   RESIZE_NONE,    14,    20,   169,   160,   171, STR_OPTIONS_RES_CBO,               STR_OPTIONS_RES_TIP},
   372 { WWT_DROPDOWNIN,   RESIZE_NONE,    14,    20,   169,   160,   171, STR_OPTIONS_RES_CBO,               STR_OPTIONS_RES_TIP},
   389 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   158,   168,   161,   170, STR_0225,                          STR_OPTIONS_RES_TIP},
       
   390 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   149,   169,   176,   184, STR_EMPTY,                         STR_OPTIONS_FULLSCREEN_TIP},
   373 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   149,   169,   176,   184, STR_EMPTY,                         STR_OPTIONS_FULLSCREEN_TIP},
   391 
   374 
   392 {      WWT_FRAME,   RESIZE_NONE,    14,   190,   359,   146,   190, STR_OPTIONS_SCREENSHOT_FORMAT,     STR_NULL},
   375 {      WWT_FRAME,   RESIZE_NONE,    14,   190,   359,   146,   190, STR_OPTIONS_SCREENSHOT_FORMAT,     STR_NULL},
   393 {      WWT_INSET,   RESIZE_NONE,    14,   200,   349,   160,   171, STR_OPTIONS_SCREENSHOT_FORMAT_CBO, STR_OPTIONS_SCREENSHOT_FORMAT_TIP},
   376 { WWT_DROPDOWNIN,   RESIZE_NONE,    14,   200,   349,   160,   171, STR_OPTIONS_SCREENSHOT_FORMAT_CBO, STR_OPTIONS_SCREENSHOT_FORMAT_TIP},
   394 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   338,   348,   161,   170, STR_0225,                          STR_OPTIONS_SCREENSHOT_FORMAT_TIP},
       
   395 
   377 
   396 {   WIDGETS_END},
   378 {   WIDGETS_END},
   397 };
   379 };
   398 
   380 
   399 static const WindowDesc _game_options_desc = {
   381 static const WindowDesc _game_options_desc = {