changeset 17981:229a21b21d27 draft

(svn r22790) -Codechange: add callback for when NewGRF scanning is complete
author rubidium <rubidium@openttd.org>
date Sun, 21 Aug 2011 12:49:51 +0000
parents 6c4dd98f3490
children ad0c8dce1699
files src/newgrf_config.cpp src/newgrf_config.h
diffstat 2 files changed, 15 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/newgrf_config.cpp
+++ b/src/newgrf_config.cpp
@@ -594,8 +594,11 @@
 	return strcasecmp(c1->GetName(), c2->GetName());
 }
 
-/** Scan for all NewGRFs. */
-void ScanNewGRFFiles()
+/**
+ * Scan for all NewGRFs.
+ * @param callback The callback to call after the scanning is complete.
+ */
+void ScanNewGRFFiles(NewGRFScanCallback *callback)
 {
 	ClearGRFConfigList(&_all_grfs);
 
@@ -636,6 +639,7 @@
 	/* Yes... these are the NewGRF windows */
 	InvalidateWindowClassesData(WC_SAVELOAD);
 	InvalidateWindowData(WC_GAME_OPTIONS, 0, GOID_NEWGRF_RESCANNED);
+	if (callback != NULL) callback->OnNewGRFsScanned();
 }
 
 
--- a/src/newgrf_config.h
+++ b/src/newgrf_config.h
@@ -188,7 +188,15 @@
 extern GRFConfig *_grfconfig_newgame; ///< First item in list of default GRF set up
 extern GRFConfig *_grfconfig_static;  ///< First item in list of static GRF set up
 
-void ScanNewGRFFiles();
+/** Callback for NewGRF scanning. */
+struct NewGRFScanCallback {
+	/** Make sure the right destructor gets called. */
+	virtual ~NewGRFScanCallback() {}
+	/** Called whenever the NewGRF scan completed. */
+	virtual void OnNewGRFsScanned() = 0;
+};
+
+void ScanNewGRFFiles(NewGRFScanCallback *callback = NULL);
 void CheckForMissingSprites();
 const GRFConfig *FindGRFConfig(uint32 grfid, FindGRFConfigMode mode, const uint8 *md5sum = NULL, uint32 desired_version = 0);
 GRFConfig *GetGRFConfig(uint32 grfid, uint32 mask = 0xFFFFFFFF);