Changeset - r9194:ee547ea2c897
[Not reviewed]
master
0 2 0
glx - 16 years ago 2008-05-12 14:54:33
glx@openttd.org
(svn r13060) -Codechange: update build industry window when raw_industry_construction setting is modified
2 files changed with 66 insertions and 38 deletions:
0 comments (0 inline, 0 general)
src/industry_gui.cpp
Show inline comments
 
@@ -100,71 +100,87 @@ class BuildIndustryWindow : public Windo
 
	bool timer_enabled;                         ///< timer can be used
 
	uint16 count;                               ///< How many industries are loaded
 
	IndustryType index[NUM_INDUSTRYTYPES + 1];  ///< Type of industry, in the order it was loaded
 
	StringID text[NUM_INDUSTRYTYPES + 1];       ///< Text coming from CBM_IND_FUND_MORE_TEXT (if ever)
 
	bool enabled[NUM_INDUSTRYTYPES + 1];        ///< availability state, coming from CBID_INDUSTRY_AVAILABLE (if ever)
 

	
 
public:
 
	BuildIndustryWindow() : Window(&_build_industry_desc)
 
	void SetupArrays()
 
	{
 
		IndustryType ind;
 
		const IndustrySpec *indsp;
 

	
 
		this->count = 0;
 

	
 
		for (uint i = 0; i < lengthof(this->index); i++) {
 
			this->index[i]   = INVALID_INDUSTRYTYPE;
 
			this->text[i]    = STR_NULL;
 
			this->enabled[i] = false;
 
		}
 

	
 
		if (_game_mode == GM_EDITOR) { // give room for the Many Random "button"
 
			this->index[this->count] = INVALID_INDUSTRYTYPE;
 
			this->count++;
 
			this->timer_enabled = false;
 
		}
 
		/* Fill the arrays with industries.
 
		 * The tests performed after the enabled allow to load the industries
 
		 * In the same way they are inserted by grf (if any)
 
		 */
 
		for (ind = 0; ind < NUM_INDUSTRYTYPES; ind++) {
 
			indsp = GetIndustrySpec(ind);
 
			if (indsp->enabled){
 
				/* Rule is that editor mode loads all industries.
 
				 * In game mode, all non raw industries are loaded too
 
				 * and raw ones are loaded only when setting allows it */
 
				if (_game_mode != GM_EDITOR && indsp->IsRawIndustry() && _patches.raw_industry_construction == 0) {
 
					/* Unselect if the industry is no longer in the list */
 
					if (this->selected_type == ind) this->selected_index = -1;
 
					continue;
 
				}
 
				this->index[this->count] = ind;
 
				this->enabled[this->count] = (_game_mode == GM_EDITOR) || CheckIfCallBackAllowsAvailability(ind, IACT_USERCREATION);
 
				/* Keep the selection to the correct line */
 
				if (this->selected_type == ind) this->selected_index = this->count;
 
				this->count++;
 
			}
 
		}
 

	
 
		/* first indutry type is selected if the current selection is invalid.
 
		 * I'll be damned if there are none available ;) */
 
		if (this->selected_index == -1) {
 
			this->selected_index = 0;
 
			this->selected_type = this->index[0];
 
		}
 
	}
 

	
 
public:
 
	BuildIndustryWindow() : Window(&_build_industry_desc)
 
	{
 
		/* Shorten the window to the equivalant of the additionnal purchase
 
		 * info coming from the callback.  SO it will only be available to tis full
 
		 * info coming from the callback.  SO it will only be available to its full
 
		 * height when newindistries are loaded */
 
		if (!_loaded_newgrf_features.has_newindustries) {
 
			this->widget[DPIW_INFOPANEL].bottom -= 44;
 
			this->widget[DPIW_FUND_WIDGET].bottom -= 44;
 
			this->widget[DPIW_FUND_WIDGET].top -= 44;
 
			this->widget[DPIW_RESIZE_WIDGET].bottom -= 44;
 
			this->widget[DPIW_RESIZE_WIDGET].top -= 44;
 
			this->resize.height = this->height -= 44;
 
		}
 

	
 
		this->timer_enabled = _loaded_newgrf_features.has_newindustries;
 

	
 
		/* Initialize structures */
 
		this->count = 0;
 

	
 
		for (uint i = 0; i < lengthof(this->index); i++) {
 
			this->index[i]   = 0xFF;
 
			this->text[i]    = STR_NULL;
 
			this->enabled[i] = false;
 
		}
 

	
 
		this->vscroll.cap = 8; // rows in grid, same in scroller
 
		this->resize.step_height = 13;
 

	
 
		if (_game_mode == GM_EDITOR) { // give room for the Many Random "button"
 
			this->index[this->count] = INVALID_INDUSTRYTYPE;
 
			this->count++;
 
			this->timer_enabled = false;
 
		}
 
		this->selected_index = -1;
 
		this->selected_type = INVALID_INDUSTRYTYPE;
 

	
 
		/* Fill the _fund_gui structure with industries.
 
		 * The tests performed after the enabled allow to load the industries
 
		 * In the same way they are inserted by grf (if any)
 
		 */
 
		for (ind = 0; ind < NUM_INDUSTRYTYPES; ind++) {
 
			indsp = GetIndustrySpec(ind);
 
			if (indsp->enabled){
 
				/* Rule is that editor mode loads all industries.
 
				 * In game mode, all non raw industries are loaded too
 
				 * and raw ones are loaded only when setting allows it */
 
				if (_game_mode != GM_EDITOR && indsp->IsRawIndustry() && _patches.raw_industry_construction == 0) continue;
 
				this->index[this->count] = ind;
 
				this->enabled[this->count] = (_game_mode == GM_EDITOR) || CheckIfCallBackAllowsAvailability(ind, IACT_USERCREATION);
 
				this->count++;
 
			}
 
		}
 
		/* Initialize arrays */
 
		this->SetupArrays();
 

	
 
		/* first indutry type is selected.
 
		 * I'll be damned if there are none available ;) */
 
		this->selected_index = 0;
 
		this->selected_type = this->index[0];
 
		this->callback_timer = DAY_TICKS;
 

	
 
		this->FindWindowPlacementAndResize(&_build_industry_desc);
 
	}
 

	
 
	virtual void OnPaint()
 
@@ -389,12 +405,18 @@ public:
 
	}
 

	
 
	virtual void OnPlaceObjectAbort()
 
	{
 
		this->RaiseButtons();
 
	}
 

	
 
	virtual void OnInvalidateData(int data = 0)
 
	{
 
		this->SetupArrays();
 
		this->SetDirty();
 
	}
 
};
 

	
 
void ShowBuildIndustryWindow()
 
{
 
	if (_game_mode != GM_EDITOR && !IsValidPlayer(_current_player)) return;
 
	if (BringWindowToFrontById(WC_BUILD_INDUSTRY, 0)) return;
src/settings.cpp
Show inline comments
 
@@ -1144,12 +1144,18 @@ static int32 InValidateDetailsWindow(int
 
static int32 InvalidateStationBuildWindow(int32 p1)
 
{
 
	InvalidateWindow(WC_BUILD_STATION, 0);
 
	return 0;
 
}
 

	
 
static int32 InvalidateBuildIndustryWindow(int32 p1)
 
{
 
	InvalidateWindowData(WC_BUILD_INDUSTRY, 0);
 
	return 0;
 
}
 

	
 
static int32 CloseSignalGUI(int32 p1)
 
{
 
	if (p1 == 0) {
 
		DeleteWindowByClass(WC_BUILD_SIGNAL);
 
	}
 
	return 0;
 
@@ -1485,13 +1491,13 @@ const SettingDesc _patch_settings[] = {
 
	SDT_CONDBOOL(Patches, road_stop_on_town_road, 47, SL_MAX_VERSION, 0, 0, false, STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD, NULL),
 
	SDT_CONDBOOL(Patches, adjacent_stations,      62, SL_MAX_VERSION, 0, 0, true,  STR_CONFIG_PATCHES_ADJACENT_STATIONS, NULL),
 

	
 
	/***************************************************************************/
 
	/* Economy section of the GUI-configure patches window */
 
	SDT_BOOL(Patches, inflation,                  0, 0,  true,            STR_CONFIG_PATCHES_INFLATION,        NULL),
 
	 SDT_VAR(Patches, raw_industry_construction,SLE_UINT8,0,MS,0,0, 2, 0, STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD, NULL),
 
	 SDT_VAR(Patches, raw_industry_construction,SLE_UINT8,0,MS,0,0, 2, 0, STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD, InvalidateBuildIndustryWindow),
 
	SDT_BOOL(Patches, multiple_industry_per_town, 0, 0, false,            STR_CONFIG_PATCHES_MULTIPINDTOWN,    NULL),
 
	SDT_BOOL(Patches, same_industry_close,        0, 0, false,            STR_CONFIG_PATCHES_SAMEINDCLOSE,     NULL),
 
	SDT_BOOL(Patches, bribe,                      0, 0,  true,            STR_CONFIG_PATCHES_BRIBE,            NULL),
 
	SDT_CONDBOOL(Patches, exclusive_rights,           79, SL_MAX_VERSION, 0, 0, true,           STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE, NULL),
 
	SDT_CONDBOOL(Patches, give_money,                 79, SL_MAX_VERSION, 0, 0, true,           STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY, NULL),
 
	 SDT_VAR(Patches, snow_line_height,SLE_UINT8, 0, 0,     7,  2, 13, 0, STR_CONFIG_PATCHES_SNOWLINE_HEIGHT,  NULL),
0 comments (0 inline, 0 general)