File diff r6282:fab9db73ce8f → r6283:91e7bd5c3b9a
src/settings.cpp
Show inline comments
 
@@ -41,6 +41,7 @@
 
#include "date.h"
 
#include "rail.h"
 
#include "helpers.hpp"
 
#include "news.h"
 
#ifdef WITH_FREETYPE
 
#include "gfx.h"
 
#include "fontcache.h"
 
@@ -1183,7 +1184,6 @@ static const SettingDescGlobVarList _win
 

	
 
static const SettingDescGlobVarList _misc_settings[] = {
 
	SDTG_MMANY("display_opt",     SLE_UINT8, S, 0, _display_opt,       (DO_SHOW_TOWN_NAMES|DO_SHOW_STATION_NAMES|DO_SHOW_SIGNS|DO_FULL_ANIMATION|DO_FULL_DETAIL|DO_TRANS_BUILDINGS|DO_WAYPOINTS), "SHOW_TOWN_NAMES|SHOW_STATION_NAMES|SHOW_SIGNS|FULL_ANIMATION|TRANS_BUILDINGS|FULL_DETAIL|WAYPOINTS", STR_NULL, NULL),
 
	  SDTG_VAR("news_display_opt", SLE_UINT, S, 0, _news_display_opt,0xAAAAAAAA,0,0xAAAAAAAA,0,STR_NULL, NULL), // default to all full messages: 10101010101010101010 = 0xAAAAAAAA
 
	 SDTG_BOOL("news_ticker_sound",          S, 0, _news_ticker_sound,     true,    STR_NULL, NULL),
 
	 SDTG_BOOL("fullscreen",                 S, 0, _fullscreen,           false,    STR_NULL, NULL),
 
	  SDTG_STR("videodriver",      SLE_STRB,C|S,0, _ini_videodriver,       NULL,    STR_NULL, NULL),
 
@@ -1502,6 +1502,43 @@ static const SettingDesc _currency_setti
 
#undef NO
 
#undef CR
 

	
 
static uint NewsDisplayLoadConfig(IniFile *ini, const char *grpname)
 
{
 
	IniGroup *group = ini_getgroup(ini, grpname, -1);
 
	IniItem *item;
 
	/* By default, set everything to full (0xAAAAAAAA = 1010101010101010) */
 
	uint res = 0xAAAAAAAA;
 

	
 
	/* If no group exists, return everything full */
 
	if (group == NULL) return res;
 

	
 
	for (item = group->item; item != NULL; item = item->next) {
 
		int news_item = -1;
 
		for (int i = 0; i < NT_END; i++) {
 
			if (strcasecmp(item->name, _news_display_name[i]) == 0) {
 
				news_item = i;
 
				break;
 
			}
 
		}
 
		if (news_item == -1) {
 
			DEBUG(misc, 0, "Invalid display option: %s", item->name);
 
			continue;
 
		}
 

	
 
		if (strcasecmp(item->value, "full") == 0) {
 
			SB(res, news_item * 2, 2, 2);
 
		} else if (strcasecmp(item->value, "off") == 0) {
 
			SB(res, news_item * 2, 2, 0);
 
		} else if (strcasecmp(item->value, "summarized") == 0) {
 
			SB(res, news_item * 2, 2, 1);
 
		} else {
 
			DEBUG(misc, 0, "Invalid display value: %s", item->value);
 
			continue;
 
		}
 
	}
 

	
 
	return res;
 
}
 

	
 
/* Load a GRF configuration from the given group name */
 
static GRFConfig *GRFLoadConfig(IniFile *ini, const char *grpname, bool is_static)
 
@@ -1556,6 +1593,26 @@ static GRFConfig *GRFLoadConfig(IniFile 
 
	return first;
 
}
 

	
 
static void NewsDisplaySaveConfig(IniFile *ini, const char *grpname, uint news_display)
 
{
 
	IniGroup *group = ini_getgroup(ini, grpname, -1);
 
	IniItem **item;
 

	
 
	if (group == NULL) return;
 
	group->item = NULL;
 
	item = &group->item;
 

	
 
	for (int i = 0; i < NT_END; i++) {
 
		const char *value;
 
		int v = GB(news_display, i * 2, 2);
 

	
 
		value = (v == 0 ? "off" : (v == 1 ? "summarized" : "full"));
 

	
 
		*item = ini_item_alloc(group, _news_display_name[i], strlen(_news_display_name[i]));
 
		(*item)->value = (char*)pool_strdup(&ini->pool, value, strlen(value));
 
		item = &(*item)->next;
 
	}
 
}
 

	
 
/* Save a GRF configuration to the given group name */
 
static void GRFSaveConfig(IniFile *ini, const char *grpname, const GRFConfig *list)
 
@@ -1605,6 +1662,7 @@ void LoadFromConfig()
 
	HandleSettingDescs(ini, ini_load_settings, ini_load_setting_list);
 
	_grfconfig_newgame = GRFLoadConfig(ini, "newgrf", false);
 
	_grfconfig_static  = GRFLoadConfig(ini, "newgrf-static", true);
 
	_news_display_opt  = NewsDisplayLoadConfig(ini, "news_display");
 
	ini_free(ini);
 
}
 

	
 
@@ -1615,6 +1673,7 @@ void SaveToConfig()
 
	HandleSettingDescs(ini, ini_save_settings, ini_save_setting_list);
 
	GRFSaveConfig(ini, "newgrf", _grfconfig_newgame);
 
	GRFSaveConfig(ini, "newgrf-static", _grfconfig_static);
 
	NewsDisplaySaveConfig(ini, "news_display", _news_display_opt);
 
	ini_save(_config_file, ini);
 
	ini_free(ini);
 
}
 
@@ -1824,16 +1883,6 @@ static void Save_PATS()
 

	
 
void CheckConfig()
 
{
 
	// fix up news_display_opt from old to new
 
	int i;
 
	uint32 tmp;
 
	for (i = 0, tmp = _news_display_opt; i != 10; i++, tmp >>= 2) {
 
		if ((tmp & 0x3) == 0x3) { // old settings
 
			_news_display_opt = 0xAAAAAAAA; // set all news-messages to full 1010101010...
 
			break;
 
		}
 
	}
 

	
 
	// Increase old default values for pf_maxdepth and pf_maxlength
 
	// to support big networks.
 
	if (_patches_newgame.pf_maxdepth == 16 && _patches_newgame.pf_maxlength == 512) {