settings_gui.c
changeset 871 63d7f79199ec
parent 867 581154a08a78
child 893 d9e69e5060ba
equal deleted inserted replaced
870:1b8600157298 871:63d7f79199ec
    63 				_resolutions[i][1] == _screen.height)
    63 				_resolutions[i][1] == _screen.height)
    64 			break;
    64 			break;
    65 	return i;
    65 	return i;
    66 }
    66 }
    67 
    67 
       
    68 static inline bool RoadVehiclesAreBuilt(void)
       
    69 {
       
    70 	Vehicle *v;
       
    71 	FOR_ALL_VEHICLES(v) { 
       
    72 		if (v->type == VEH_Road) return true;
       
    73 	}
       
    74 	return false;
       
    75 }
       
    76 
    68 static void GameOptionsWndProc(Window *w, WindowEvent *e)
    77 static void GameOptionsWndProc(Window *w, WindowEvent *e)
    69 {
    78 {
    70 	int i;
       
    71 
       
    72 	switch(e->event) {
    79 	switch(e->event) {
    73 	case WE_PAINT: {
    80 	case WE_PAINT: {
       
    81 		int i;
    74 		StringID str = STR_02BE_DEFAULT;
    82 		StringID str = STR_02BE_DEFAULT;
    75 		w->disabled_state = (_vehicle_design_names & 1) ? (++str, 0) : (1 << 21);
    83 		w->disabled_state = (_vehicle_design_names & 1) ? (++str, 0) : (1 << 21);
    76 		SetDParam(0, str);
    84 		SetDParam(0, str);
    77 		SetDParam(1, _currency_string_list[_opt_mod_ptr->currency]);
    85 		SetDParam(1, _currency_string_list[_opt_mod_ptr->currency]);
    78 		SetDParam(2, _opt_mod_ptr->kilometers + STR_0139_IMPERIAL_MILES);
    86 		SetDParam(2, _opt_mod_ptr->kilometers + STR_0139_IMPERIAL_MILES);
    89 		DrawString(20, 175, STR_OPTIONS_FULLSCREEN, 0); // fullscreen
    97 		DrawString(20, 175, STR_OPTIONS_FULLSCREEN, 0); // fullscreen
    90 	}	break;
    98 	}	break;
    91 
    99 
    92 	case WE_CLICK:
   100 	case WE_CLICK:
    93 		switch(e->click.widget) {
   101 		switch(e->click.widget) {
    94 		case 5:
   102 		case 5: /* Setup currencies dropdown */
    95 			ShowDropDownMenu(w, _currency_string_list, _opt_mod_ptr->currency, e->click.widget, _game_mode == GM_MENU ? 0 : ~GetMaskOfAllowedCurrencies(), 0);
   103 			ShowDropDownMenu(w, _currency_string_list, _opt_mod_ptr->currency, e->click.widget, _game_mode == GM_MENU ? 0 : ~GetMaskOfAllowedCurrencies(), 0);
    96 			return;
   104 			return;
    97 		case 8:
   105 		case 8: /* Setup distance unit dropdown */
    98 			ShowDropDownMenu(w, _distances_dropdown, _opt_mod_ptr->kilometers, e->click.widget, 0, 0);
   106 			ShowDropDownMenu(w, _distances_dropdown, _opt_mod_ptr->kilometers, e->click.widget, 0, 0);
    99 			return;
   107 			return;
   100 		case 11: {
   108 		case 11: { /* Setup road-side dropdown */
   101 			int i = _opt_mod_ptr->road_side;
   109 			int i = 0;
   102 			ShowDropDownMenu(w, _driveside_dropdown, i, e->click.widget, (_game_mode == GM_MENU) ? 0 : (-1) ^ (1 << i), 0);
   110 
   103 			return;
   111 			/* You can only change the drive side if you are in the menu or ingame with
   104 		}
   112 			 * no vehicles present. In a networking game only the server can change it */
   105 		case 14: {
   113 			if ((_game_mode != GM_MENU && RoadVehiclesAreBuilt()) || (_networking && !_network_server))
       
   114 				i = (-1) ^ (1 << _opt_mod_ptr->road_side); // disable the other value
       
   115 
       
   116 			ShowDropDownMenu(w, _driveside_dropdown, _opt_mod_ptr->road_side, e->click.widget, i, 0);
       
   117 		} return;
       
   118 		case 14: { /* Setup townname dropdown */
   106 			int i = _opt_mod_ptr->town_name;
   119 			int i = _opt_mod_ptr->town_name;
   107 			ShowDropDownMenu(w, BuildDynamicDropdown(STR_TOWNNAME_ORIGINAL_ENGLISH, SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1), i, e->click.widget, (_game_mode == GM_MENU) ? 0 : (-1) ^ (1 << i), 0);
   120 			ShowDropDownMenu(w, BuildDynamicDropdown(STR_TOWNNAME_ORIGINAL_ENGLISH, SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1), i, e->click.widget, (_game_mode == GM_MENU) ? 0 : (-1) ^ (1 << i), 0);
   108 			return;
   121 			return;
   109 		}
   122 		}
   110 		case 17:
   123 		case 17: /* Setup autosave dropdown */
   111 			ShowDropDownMenu(w, _autosave_dropdown, _opt_mod_ptr->autosave, e->click.widget, 0, 0);
   124 			ShowDropDownMenu(w, _autosave_dropdown, _opt_mod_ptr->autosave, e->click.widget, 0, 0);
   112 			return;
   125 			return;
   113 		case 20:
   126 		case 20: /* Setup customized vehicle-names dropdown */
   114 			ShowDropDownMenu(w, _designnames_dropdown, (_vehicle_design_names&1)?1:0, e->click.widget, (_vehicle_design_names&2)?0:2, 0);
   127 			ShowDropDownMenu(w, _designnames_dropdown, (_vehicle_design_names&1)?1:0, e->click.widget, (_vehicle_design_names&2)?0:2, 0);
   115 			return;
   128 			return;
   116 		case 21:
   129 		case 21: /* Save customized vehicle-names to disk */
   117 			return;
   130 			return;
   118 		case 24:
   131 		case 24: /* Setup interface language dropdown */
   119 			ShowDropDownMenu(w, _dynlang.dropdown, _dynlang.curr, e->click.widget, 0, 0);
   132 			ShowDropDownMenu(w, _dynlang.dropdown, _dynlang.curr, e->click.widget, 0, 0);
   120 			return;
   133 			return;
   121 		case 27:
   134 		case 27: /* Setup resolution dropdown */
   122 			// setup resolution dropdown
       
   123 			ShowDropDownMenu(w, BuildDynamicDropdown(SPECSTR_RESOLUTION_START, _num_resolutions), GetCurRes(), e->click.widget, 0, 0);
   135 			ShowDropDownMenu(w, BuildDynamicDropdown(SPECSTR_RESOLUTION_START, _num_resolutions), GetCurRes(), e->click.widget, 0, 0);
   124 			return;
   136 			return;
   125 		case 28: /* Click fullscreen on/off */
   137 		case 28: /* Click fullscreen on/off */
   126 			(_fullscreen) ? CLRBIT(w->click_state, 28) : SETBIT(w->click_state, 28);
   138 			(_fullscreen) ? CLRBIT(w->click_state, 28) : SETBIT(w->click_state, 28);
   127 			ToggleFullScreen(!_fullscreen); // toggle full-screen on/off
   139 			ToggleFullScreen(!_fullscreen); // toggle full-screen on/off
   128 			SetWindowDirty(w);
   140 			SetWindowDirty(w);
   129 			return;
   141 			return;
   130 		case 31: /* Setup screenshot format dropdown */
   142 		case 31: /* Setup screenshot format dropdown */
   131 			ShowDropDownMenu(w, BuildDynamicDropdown(SPECSTR_SCREENSHOT_START, _num_screenshot_formats), _cur_screenshot_format, e->click.widget, 0, 0);
   143 			ShowDropDownMenu(w, BuildDynamicDropdown(SPECSTR_SCREENSHOT_START, _num_screenshot_formats), _cur_screenshot_format, e->click.widget, 0, 0);
   132 			return;
   144 			return;
   133 
       
   134 		}
   145 		}
   135 		break;
   146 		break;
   136 
   147 
   137 	case WE_DROPDOWN_SELECT:
   148 	case WE_DROPDOWN_SELECT:
   138 		switch(e->dropdown.button) {
   149 		switch(e->dropdown.button) {
   139 		case 20:
   150 		case 20: /* Vehicle design names */
   140 			if (e->dropdown.index == 0) {
   151 			if (e->dropdown.index == 0) {
   141 				DeleteCustomEngineNames();
   152 				DeleteCustomEngineNames();
   142 				MarkWholeScreenDirty();
   153 				MarkWholeScreenDirty();
   143 			} else if (!(_vehicle_design_names&1)) {
   154 			} else if (!(_vehicle_design_names&1)) {
   144 				LoadCustomEngineNames();
   155 				LoadCustomEngineNames();
   145 				MarkWholeScreenDirty();
   156 				MarkWholeScreenDirty();
   146 			}
   157 			}
   147 			break;
   158 			break;
   148 		case 5:
   159 		case 5: /* Currency */
   149 			if (e->dropdown.index == 23)
   160 			if (e->dropdown.index == 23)
   150 				ShowCustCurrency();
   161 				ShowCustCurrency();
   151 			_opt_mod_ptr->currency = _opt.currency = e->dropdown.index;
   162 			_opt_mod_ptr->currency = _opt.currency = e->dropdown.index;
   152 			MarkWholeScreenDirty();
   163 			MarkWholeScreenDirty();
   153 			break;
   164 			break;
   154 		case 8:
   165 		case 8: /* Distance units */
   155 			_opt_mod_ptr->kilometers = e->dropdown.index;
   166 			_opt_mod_ptr->kilometers = e->dropdown.index;
   156 			MarkWholeScreenDirty();
   167 			MarkWholeScreenDirty();
   157 			break;
   168 			break;
   158 		case 11:
   169 		case 11: /* Road side */
   159 			if (_game_mode == GM_MENU)
   170 			if (_opt_mod_ptr->road_side != e->dropdown.index) // only change if setting changed
   160 				DoCommandP(0, e->dropdown.index, 0, NULL, CMD_SET_ROAD_DRIVE_SIDE | CMD_MSG(STR_EMPTY));
   171 				DoCommandP(0, e->dropdown.index, 0, NULL, CMD_SET_ROAD_DRIVE_SIDE | CMD_MSG(STR_EMPTY));
   161 			break;
   172 			break;
   162 		case 14:
   173 		case 14: /* Town names */
   163 			if (_game_mode == GM_MENU)
   174 			if (_game_mode == GM_MENU)
   164 				DoCommandP(0, e->dropdown.index, 0, NULL, CMD_SET_TOWN_NAME_TYPE | CMD_MSG(STR_EMPTY));
   175 				DoCommandP(0, e->dropdown.index, 0, NULL, CMD_SET_TOWN_NAME_TYPE | CMD_MSG(STR_EMPTY));
   165 			break;
   176 			break;
   166 		case 17:
   177 		case 17: /* Autosave options */
   167 			_opt_mod_ptr->autosave = e->dropdown.index;
   178 			_opt_mod_ptr->autosave = e->dropdown.index;
   168 			SetWindowDirty(w);
   179 			SetWindowDirty(w);
   169 			break;
   180 			break;
   170 
   181 		case 24: /* Change interface language */
   171 		// change interface language
       
   172 		case 24:
       
   173 			ReadLanguagePack(e->dropdown.index);
   182 			ReadLanguagePack(e->dropdown.index);
   174 			MarkWholeScreenDirty();
   183 			MarkWholeScreenDirty();
   175 			break;
   184 			break;
   176 
   185 		case 27: /* Change resolution */
   177 		// change resolution
       
   178 		case 27:
       
   179 			if (e->dropdown.index < _num_resolutions && ChangeResInGame(_resolutions[e->dropdown.index][0],_resolutions[e->dropdown.index][1]))
   186 			if (e->dropdown.index < _num_resolutions && ChangeResInGame(_resolutions[e->dropdown.index][0],_resolutions[e->dropdown.index][1]))
   180 				SetWindowDirty(w);
   187 				SetWindowDirty(w);
   181 			break;
   188 			break;
   182 
   189 		case 31: /* Change screenshot format */
   183 		// change screenshot format
       
   184 		case 31:
       
   185 			SetScreenshotFormat(e->dropdown.index);
   190 			SetScreenshotFormat(e->dropdown.index);
   186 			SetWindowDirty(w);
   191 			SetWindowDirty(w);
   187 			break;
   192 			break;
   188 		}
   193 		}
   189 		break;
   194 		break;