Blob Blame Raw


#include "tfiletype.h"
#include "tfilepath.h"
#include <QString>

namespace
{

class FileTypeData
{
public:
	map<string, int> m_table;

public:
	FileTypeData()
	{
		// Base, hard-coded known file types
		m_table["tnz"] = TFileType::TOONZSCENE;
		m_table["tab"] = TFileType::TABSCENE;
	}

	static FileTypeData *instance()
	{
		static FileTypeData data;
		return &data;
	}
};

} // namespace

//================================================================================

TFileType::Type TFileType::getInfo(const TFilePath &fp)
{
	FileTypeData *data = FileTypeData::instance();
	std::map<string, int>::iterator it = data->m_table.find(fp.getType());

	int type = (it == data->m_table.end()) ? TFileType::UNKNOW_FILE : it->second;
	if ((type & TFileType::LEVEL) == 0 && (fp.getDots() == ".."))
		type |= TFileType::LEVEL;

	return (TFileType::Type)type;
}

//--------------------------------------------------------------------------------

TFileType::Type TFileType::getInfoFromExtension(const string &extension)
{
	FileTypeData *data = FileTypeData::instance();
	std::map<string, int>::iterator it = data->m_table.find(extension);
	int type = (it == data->m_table.end()) ? TFileType::UNKNOW_FILE : it->second;
	return (TFileType::Type)type;
}

TFileType::Type TFileType::getInfoFromExtension(const QString &type)
{
	return getInfoFromExtension(type.toStdString());
}

//--------------------------------------------------------------------------------

void TFileType::declare(string extension, Type type)
{
	FileTypeData *data = FileTypeData::instance();
	data->m_table[extension] = type;
}