summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2011-08-21 12:49:51 +0000
committerrubidium <rubidium@openttd.org>2011-08-21 12:49:51 +0000
commitd7593d881564183ceed5a99fc73154e89c3aa7e3 (patch)
tree18909ea024499bded5d75aef465a19d49c828b92
parente99aec39ef3a4c5f92cbfe6f40442499c836731e (diff)
downloadopenttd-d7593d881564183ceed5a99fc73154e89c3aa7e3.tar.xz
(svn r22790) -Codechange: add callback for when NewGRF scanning is complete
-rw-r--r--src/newgrf_config.cpp8
-rw-r--r--src/newgrf_config.h10
2 files changed, 15 insertions, 3 deletions
diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp
index 88d1c9128..f4974c144 100644
--- a/src/newgrf_config.cpp
+++ b/src/newgrf_config.cpp
@@ -594,8 +594,11 @@ static int CDECL GRFSorter(GRFConfig * const *p1, GRFConfig * const *p2)
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 @@ void ScanNewGRFFiles()
/* Yes... these are the NewGRF windows */
InvalidateWindowClassesData(WC_SAVELOAD);
InvalidateWindowData(WC_GAME_OPTIONS, 0, GOID_NEWGRF_RESCANNED);
+ if (callback != NULL) callback->OnNewGRFsScanned();
}
diff --git a/src/newgrf_config.h b/src/newgrf_config.h
index f06614848..2561af158 100644
--- a/src/newgrf_config.h
+++ b/src/newgrf_config.h
@@ -188,7 +188,15 @@ extern GRFConfig *_grfconfig; ///< First item in list of current GRF set
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);