Changeset - r12969:5e7f0342aa53
[Not reviewed]
master
0 3 0
rubidium - 15 years ago 2009-09-08 12:27:27
rubidium@openttd.org
(svn r17473) -Codechange: use the post destructor for destroying companies too instead of complicating the graph GUI invalidate code.
3 files changed with 14 insertions and 5 deletions:
0 comments (0 inline, 0 general)
src/company_base.h
Show inline comments
 
@@ -100,12 +100,14 @@ struct Company : CompanyPool::PoolItem<&
 
	}
 

	
 
	static FORCEINLINE bool IsHumanID(size_t index)
 
	{
 
		return !Company::Get(index)->is_ai;
 
	}
 

	
 
	static void PostDestructor(size_t index);
 
};
 

	
 
#define FOR_ALL_COMPANIES_FROM(var, start) FOR_ALL_ITEMS_FROM(Company, company_index, var, start)
 
#define FOR_ALL_COMPANIES(var) FOR_ALL_COMPANIES_FROM(var, 0)
 

	
 
Money CalculateCompanyValue(const Company *c);
src/company_cmd.cpp
Show inline comments
 
@@ -66,14 +66,22 @@ Company::~Company()
 
	free(this->president_name);
 
	free(this->num_engines);
 

	
 
	if (CleaningPool()) return;
 

	
 
	DeleteCompanyWindows(this->index);
 
	InvalidateWindowData(WC_GRAPH_LEGEND, 0, this->index);
 
	InvalidateWindowData(WC_PERFORMANCE_DETAIL, 0, this->index);
 
}
 

	
 
/**
 
 * Invalidating some stuff after removing item from the pool.
 
 * @param index index of deleted item
 
 */
 
void Company::PostDestructor(size_t index)
 
{
 
	InvalidateWindowData(WC_GRAPH_LEGEND, 0, index);
 
	InvalidateWindowData(WC_PERFORMANCE_DETAIL, 0, index);
 
}
 

	
 
/**
 
 * Sets the local company and updates the settings that are set on a
 
 * per-company basis to reflect the core's state in the GUI.
 
 * @param new_company the new company
src/graph_gui.cpp
Show inline comments
 
@@ -1195,26 +1195,25 @@ struct PerformanceRatingDetailWindow : W
 
	 * @param data the company ID of the company that is going to be removed
 
	 */
 
	virtual void OnInvalidateData(int data)
 
	{
 
		/* Disable the companies who are not active */
 
		for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
 
			this->SetWidgetDisabledState(i + PRW_COMPANY_FIRST, !Company::IsValidID(i) || i == data);
 
			this->SetWidgetDisabledState(i + PRW_COMPANY_FIRST, !Company::IsValidID(i));
 
		}
 

	
 
		/* Check if the currently selected company is still active. */
 
		if (this->company == data || (this->company != INVALID_COMPANY && !Company::IsValidID(this->company))) {
 
		if (this->company != INVALID_COMPANY && !Company::IsValidID(this->company)) {
 
			/* Raise the widget for the previous selection. */
 
			this->RaiseWidget(this->company + PRW_COMPANY_FIRST);
 
			this->company = INVALID_COMPANY;
 
		}
 

	
 
		if (this->company == INVALID_COMPANY) {
 
			const Company *c;
 
			FOR_ALL_COMPANIES(c) {
 
				if (c->index == data) continue; // Ignore to-be-removed company
 
				this->company = c->index;
 
				break;
 
			}
 
		}
 

	
 
		/* Make sure the widget is lowered */
0 comments (0 inline, 0 general)