Changeset - r17971:2adf1b724154
[Not reviewed]
master
0 2 0
rubidium - 13 years ago 2011-08-21 12:49:51
rubidium@openttd.org
(svn r22790) -Codechange: add callback for when NewGRF scanning is complete
2 files changed with 15 insertions and 3 deletions:
0 comments (0 inline, 0 general)
src/newgrf_config.cpp
Show inline comments
 
@@ -585,26 +585,29 @@ bool GRFFileScanner::AddFile(const char 
 
 * @param p1 the first GRFConfig *
 
 * @param p2 the second GRFConfig *
 
 * @return the same strcmp would return for the name of the NewGRF.
 
 */
 
static int CDECL GRFSorter(GRFConfig * const *p1, GRFConfig * const *p2)
 
{
 
	const GRFConfig *c1 = *p1;
 
	const GRFConfig *c2 = *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);
 

	
 
	TarScanner::DoScan();
 

	
 
	DEBUG(grf, 1, "Scanning for NewGRFs");
 
	uint num = GRFFileScanner::DoScan();
 

	
 
	DEBUG(grf, 1, "Scan complete, found %d files", num);
 
	if (num != 0 && _all_grfs != NULL) {
 
		/* Sort the linked list using quicksort.
 
		* For that we first have to make an array, then sort and
 
@@ -627,24 +630,25 @@ void ScanNewGRFFiles()
 
		_all_grfs = to_sort[0];
 

	
 
		free(to_sort);
 

	
 
#ifdef ENABLE_NETWORK
 
		NetworkAfterNewGRFScan();
 
#endif
 
	}
 

	
 
	/* Yes... these are the NewGRF windows */
 
	InvalidateWindowClassesData(WC_SAVELOAD);
 
	InvalidateWindowData(WC_GAME_OPTIONS, 0, GOID_NEWGRF_RESCANNED);
 
	if (callback != NULL) callback->OnNewGRFsScanned();
 
}
 

	
 

	
 
/**
 
 * Find a NewGRF in the scanned list.
 
 * @param grfid GRFID to look for,
 
 * @param mode Restrictions for matching grfs
 
 * @param md5sum Expected MD5 sum
 
 * @param desired_version Requested version
 
 * @return The matching grf, if it exists in #_all_grfs, else \c NULL.
 
 */
 
const GRFConfig *FindGRFConfig(uint32 grfid, FindGRFConfigMode mode, const uint8 *md5sum, uint32 desired_version)
src/newgrf_config.h
Show inline comments
 
@@ -179,25 +179,33 @@ enum FindGRFConfigMode {
 
	FGCM_EXACT,       ///< Only find Grfs matching md5sum
 
	FGCM_COMPATIBLE,  ///< Find best compatible Grf wrt. desired_version
 
	FGCM_NEWEST,      ///< Find newest Grf
 
	FGCM_NEWEST_VALID,///< Find newest Grf, ignoring Grfs with GCF_INVALID set
 
	FGCM_ANY,         ///< Use first found
 
};
 

	
 
extern GRFConfig *_all_grfs;          ///< First item in list of all scanned NewGRFs
 
extern GRFConfig *_grfconfig;         ///< First item in list of current GRF set up
 
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);
 
GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src, bool init_only);
 
void AppendStaticGRFConfigs(GRFConfig **dst);
 
void AppendToGRFConfigList(GRFConfig **dst, GRFConfig *el);
 
void ClearGRFConfigList(GRFConfig **config);
 
void ResetGRFConfig(bool defaults);
 
GRFListCompatibility IsGoodGRFConfigList(GRFConfig *grfconfig);
 
bool FillGRFDetails(GRFConfig *config, bool is_static);
 
char *GRFBuildParamList(char *dst, const GRFConfig *c, const char *last);
 

	
0 comments (0 inline, 0 general)