changeset 16524:b341f0626692 draft

(svn r21250) -Fix [FS#3952]: Rescanning AIs didn't "forget" removed AIs
author rubidium <rubidium@openttd.org>
date Thu, 18 Nov 2010 23:31:06 +0000
parents e88b654f321e
children 141ebdd76921
files src/ai/ai_gui.cpp src/ai/ai_scanner.cpp src/ai/ai_scanner.hpp src/console_cmds.cpp
diffstat 4 files changed, 21 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/ai/ai_gui.cpp
+++ b/src/ai/ai_gui.cpp
@@ -191,6 +191,9 @@
 	virtual void OnInvalidateData(int data)
 	{
 		this->vscroll->SetCount((int)this->ai_info_list->size() + 1);
+
+		/* selected goes from -1 .. length of ai list - 1. */
+		this->selected = min(this->selected, this->vscroll->GetCount() - 2);
 	}
 };
 
--- a/src/ai/ai_scanner.cpp
+++ b/src/ai/ai_scanner.cpp
@@ -22,6 +22,8 @@
 
 void AIScanner::RescanAIDir()
 {
+	/* Get rid of information of old AIs. */
+	this->Reset();
 	this->ScanScriptDir("info.nut", AI_DIR);
 	this->ScanScriptDir("library.nut", AI_LIBRARY_DIR);
 }
@@ -59,7 +61,7 @@
 	AI_CreateAIInfoDummy(this->engine->GetVM());
 }
 
-AIScanner::~AIScanner()
+void AIScanner::Reset()
 {
 	AIInfoList::iterator it = this->info_list.begin();
 	for (; it != this->info_list.end(); it++) {
@@ -76,6 +78,15 @@
 		delete (*lit).second;
 	}
 
+	this->info_list.clear();
+	this->info_single_list.clear();
+	this->library_list.clear();
+}
+
+AIScanner::~AIScanner()
+{
+	this->Reset();
+
 	delete this->info_dummy;
 }
 
--- a/src/ai/ai_scanner.hpp
+++ b/src/ai/ai_scanner.hpp
@@ -84,6 +84,11 @@
 	 */
 	void ScanAIDir();
 
+	/**
+	 * Reset all allocated lists.
+	 */
+	void Reset();
+
 	AIInfo *info_dummy;
 	AIInfoList info_list;
 	AIInfoList info_single_list;
--- a/src/console_cmds.cpp
+++ b/src/console_cmds.cpp
@@ -1160,6 +1160,7 @@
 	TarScanner::DoScan();
 	AI::Rescan();
 	InvalidateWindowData(WC_AI_LIST, 0, 1);
+	SetWindowDirty(WC_AI_SETTINGS, 0);
 
 	return true;
 }