Changeset - r8319:ed53804bb33f
[Not reviewed]
master
0 1 0
peter1138 - 17 years ago 2008-01-16 23:46:46
peter1138@openttd.org
(svn r11884) -Cleanup: leftover use of widget numbers instead of enum
1 file changed with 2 insertions and 2 deletions:
0 comments (0 inline, 0 general)
src/settings_gui.cpp
Show inline comments
 
@@ -73,194 +73,194 @@ static StringID *BuildDynamicDropdown(St
 
int _nb_orig_names = SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1;
 
static StringID *_town_names = NULL;
 
static StringID *_grf_names = NULL;
 
static int _nb_grf_names = 0;
 

	
 
void SortTownGeneratorNames()
 
{
 
	int n = 0;
 

	
 
	/* Get Newgrf generators' names */
 
	free(_grf_names);
 
	_grf_names = GetGRFTownNameList();
 
	_nb_grf_names = 0;
 
	for (StringID *s = _grf_names; *s != INVALID_STRING_ID; s++) _nb_grf_names++;
 

	
 
	/* Prepare the list */
 
	free(_town_names);
 
	_town_names = MallocT<StringID>(_nb_orig_names + _nb_grf_names + 1);
 

	
 
	/* Put the original strings */
 
	for (int i = 0; i < _nb_orig_names; i++) _town_names[n++] = STR_TOWNNAME_ORIGINAL_ENGLISH + i;
 

	
 
	/* Put the grf strings */
 
	for (int i = 0; i < _nb_grf_names; i++) _town_names[n++] = _grf_names[i];
 

	
 
	/* Put the terminator */
 
	_town_names[n] = INVALID_STRING_ID;
 

	
 
	/* Sort the strings */
 
	qsort(&_town_names[0], _nb_orig_names + _nb_grf_names, sizeof(StringID), &StringIDSorter);
 
}
 

	
 
static inline StringID TownName(int town_name)
 
{
 
	if (town_name < _nb_orig_names) return STR_TOWNNAME_ORIGINAL_ENGLISH + town_name;
 
	town_name -= _nb_orig_names;
 
	if (town_name < _nb_grf_names) return _grf_names[town_name];
 
	return STR_UNDEFINED;
 
}
 

	
 
static int GetCurRes()
 
{
 
	int i;
 

	
 
	for (i = 0; i != _num_resolutions; i++) {
 
		if (_resolutions[i][0] == _screen.width &&
 
				_resolutions[i][1] == _screen.height) {
 
			break;
 
		}
 
	}
 
	return i;
 
}
 

	
 
static inline bool RoadVehiclesAreBuilt()
 
{
 
	const Vehicle* v;
 

	
 
	FOR_ALL_VEHICLES(v) {
 
		if (v->type == VEH_ROAD) return true;
 
	}
 
	return false;
 
}
 

	
 

	
 
enum GameOptionsWidgets {
 
	GAMEOPT_CURRENCY_TXT    =  4,
 
	GAMEOPT_CURRENCY_BTN,
 
	GAMEOPT_DISTANCE_TXT    =  7,
 
	GAMEOPT_DISTANCE_BTN,
 
	GAMEOPT_ROADSIDE_TXT    = 10,
 
	GAMEOPT_ROADSIDE_BTN,
 
	GAMEOPT_TOWNNAME_TXT    = 13,
 
	GAMEOPT_TOWNNAME_BTN,
 
	GAMEOPT_AUTOSAVE_TXT    = 16,
 
	GAMEOPT_AUTOSAVE_BTN,
 
	GAMEOPT_VEHICLENAME_TXT = 19,
 
	GAMEOPT_VEHICLENAME_BTN,
 
	GAMEOPT_VEHICLENAME_SAVE,
 
	GAMEOPT_LANG_TXT        = 23,
 
	GAMEOPT_LANG_BTN,
 
	GAMEOPT_RESOLUTION_TXT  = 26,
 
	GAMEOPT_RESOLUTION_BTN,
 
	GAMEOPT_FULLSCREEN,
 
	GAMEOPT_SCREENSHOT_TXT  = 30,
 
	GAMEOPT_SCREENSHOT_BTN,
 
};
 

	
 
static void ShowCustCurrency();
 

	
 
static void GameOptionsWndProc(Window *w, WindowEvent *e)
 
{
 
	switch (e->event) {
 
		case WE_PAINT: {
 
			int i;
 
			StringID str = STR_02BE_DEFAULT;
 

	
 
			w->SetWidgetDisabledState(21, !(_vehicle_design_names & 1));
 
			if (!w->IsWidgetDisabled(21)) str = STR_02BF_CUSTOM;
 
			w->SetWidgetDisabledState(GAMEOPT_VEHICLENAME_SAVE, !(_vehicle_design_names & 1));
 
			if (!w->IsWidgetDisabled(GAMEOPT_VEHICLENAME_SAVE)) str = STR_02BF_CUSTOM;
 
			SetDParam(0, str);
 
			SetDParam(1, _currency_specs[_opt_ptr->currency].name);
 
			SetDParam(2, STR_UNITS_IMPERIAL + _opt_ptr->units);
 
			SetDParam(3, STR_02E9_DRIVE_ON_LEFT + _opt_ptr->road_side);
 
			SetDParam(4, TownName(_opt_ptr->town_name));
 
			SetDParam(5, _autosave_dropdown[_opt_ptr->autosave]);
 
			SetDParam(6, SPECSTR_LANGUAGE_START + _dynlang.curr);
 
			i = GetCurRes();
 
			SetDParam(7, i == _num_resolutions ? STR_RES_OTHER : SPECSTR_RESOLUTION_START + i);
 
			SetDParam(8, SPECSTR_SCREENSHOT_START + _cur_screenshot_format);
 
			w->SetWidgetLoweredState(GAMEOPT_FULLSCREEN, _fullscreen);
 

	
 
			DrawWindowWidgets(w);
 
			DrawString(20, 175, STR_OPTIONS_FULLSCREEN, TC_FROMSTRING); // fullscreen
 
		} break;
 

	
 
		case WE_CLICK:
 
			switch (e->we.click.widget) {
 
				case GAMEOPT_CURRENCY_TXT: case GAMEOPT_CURRENCY_BTN: /* Setup currencies dropdown */
 
					ShowDropDownMenu(w, BuildCurrencyDropdown(), _opt_ptr->currency, GAMEOPT_CURRENCY_BTN, _game_mode == GM_MENU ? 0 : ~GetMaskOfAllowedCurrencies(), 0);
 
					break;
 

	
 
				case GAMEOPT_DISTANCE_TXT: case GAMEOPT_DISTANCE_BTN: /* Setup distance unit dropdown */
 
					ShowDropDownMenu(w, _units_dropdown, _opt_ptr->units, GAMEOPT_DISTANCE_BTN, 0, 0);
 
					break;
 

	
 
				case GAMEOPT_ROADSIDE_TXT: case GAMEOPT_ROADSIDE_BTN: { /* Setup road-side dropdown */
 
					int i = 0;
 

	
 
					/* You can only change the drive side if you are in the menu or ingame with
 
					 * no vehicles present. In a networking game only the server can change it */
 
					if ((_game_mode != GM_MENU && RoadVehiclesAreBuilt()) || (_networking && !_network_server))
 
						i = (-1) ^ (1 << _opt_ptr->road_side); // disable the other value
 

	
 
					ShowDropDownMenu(w, _driveside_dropdown, _opt_ptr->road_side, GAMEOPT_ROADSIDE_BTN, i, 0);
 
				} break;
 

	
 
				case GAMEOPT_TOWNNAME_TXT: case GAMEOPT_TOWNNAME_BTN: { /* Setup townname dropdown */
 
					uint sel = 0;
 
					for (uint i = 0; _town_names[i] != INVALID_STRING_ID; i++) {
 
						if (_town_names[i] == TownName(_opt_ptr->town_name)) {
 
							sel = i;
 
							break;
 
						}
 
					}
 
					ShowDropDownMenu(w, _town_names, sel, GAMEOPT_TOWNNAME_BTN, (_game_mode == GM_MENU) ? 0 : (-1) ^ (1 << sel), 0);
 
				} break;
 

	
 
				case GAMEOPT_AUTOSAVE_TXT: case GAMEOPT_AUTOSAVE_BTN: /* Setup autosave dropdown */
 
					ShowDropDownMenu(w, _autosave_dropdown, _opt_ptr->autosave, GAMEOPT_AUTOSAVE_BTN, 0, 0);
 
					break;
 

	
 
				case GAMEOPT_VEHICLENAME_TXT: case GAMEOPT_VEHICLENAME_BTN: /* Setup customized vehicle-names dropdown */
 
					ShowDropDownMenu(w, _designnames_dropdown, (_vehicle_design_names & 1) ? 1 : 0, GAMEOPT_VEHICLENAME_BTN, (_vehicle_design_names & 2) ? 0 : 2, 0);
 
					break;
 

	
 
				case GAMEOPT_VEHICLENAME_SAVE: /* Save customized vehicle-names to disk */
 
					break;  // not implemented
 

	
 
				case GAMEOPT_LANG_TXT: case GAMEOPT_LANG_BTN: /* Setup interface language dropdown */
 
					ShowDropDownMenu(w, _dynlang.dropdown, _dynlang.curr, GAMEOPT_LANG_BTN, 0, 0);
 
					break;
 

	
 
				case GAMEOPT_RESOLUTION_TXT: case GAMEOPT_RESOLUTION_BTN: /* Setup resolution dropdown */
 
					ShowDropDownMenu(w, BuildDynamicDropdown(SPECSTR_RESOLUTION_START, _num_resolutions), GetCurRes(), GAMEOPT_RESOLUTION_BTN, 0, 0);
 
					break;
 

	
 
				case GAMEOPT_FULLSCREEN: /* Click fullscreen on/off */
 
					/* try to toggle full-screen on/off */
 
					if (!ToggleFullScreen(!_fullscreen)) {
 
						ShowErrorMessage(INVALID_STRING_ID, STR_FULLSCREEN_FAILED, 0, 0);
 
					}
 
					w->SetWidgetLoweredState(GAMEOPT_FULLSCREEN, _fullscreen);
 
					SetWindowDirty(w);
 
					break;
 

	
 
				case GAMEOPT_SCREENSHOT_TXT: case GAMEOPT_SCREENSHOT_BTN: /* Setup screenshot format dropdown */
 
					ShowDropDownMenu(w, BuildDynamicDropdown(SPECSTR_SCREENSHOT_START, _num_screenshot_formats), _cur_screenshot_format, GAMEOPT_SCREENSHOT_BTN, 0, 0);
 
					break;
 
			}
 
			break;
 

	
 
		case WE_DROPDOWN_SELECT:
 
			switch (e->we.dropdown.button) {
 
				case GAMEOPT_VEHICLENAME_BTN: /* Vehicle design names */
 
					if (e->we.dropdown.index == 0) {
 
						DeleteCustomEngineNames();
 
						MarkWholeScreenDirty();
 
					} else if (!(_vehicle_design_names & 1)) {
 
						LoadCustomEngineNames();
 
						MarkWholeScreenDirty();
 
					}
 
					break;
 

	
 
				case GAMEOPT_CURRENCY_BTN: /* Currency */
 
					if (e->we.dropdown.index == CUSTOM_CURRENCY_ID) ShowCustCurrency();
0 comments (0 inline, 0 general)