00001 /* 00002 Copyright (C) 2001-2006, William Joseph. 00003 All Rights Reserved. 00004 00005 This file is part of GtkRadiant. 00006 00007 GtkRadiant is free software; you can redistribute it and/or modify 00008 it under the terms of the GNU General Public License as published by 00009 the Free Software Foundation; either version 2 of the License, or 00010 (at your option) any later version. 00011 00012 GtkRadiant is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 GNU General Public License for more details. 00016 00017 You should have received a copy of the GNU General Public License 00018 along with GtkRadiant; if not, write to the Free Software 00019 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 00020 */ 00021 00022 #if !defined(INCLUDED_IFILETYPES_H) 00023 #define INCLUDED_IFILETYPES_H 00024 00025 #include "generic/constant.h" 00026 00027 class filetype_t 00028 { 00029 public: 00030 filetype_t () : 00031 name(""), pattern("") 00032 { 00033 } 00034 filetype_t (const std::string& _name, const std::string& _pattern) : 00035 name(_name), pattern(_pattern) 00036 { 00037 } 00038 const std::string& name; 00039 const std::string& pattern; 00040 }; 00041 00042 class IFileTypeList 00043 { 00044 public: 00045 virtual ~IFileTypeList () 00046 { 00047 } 00048 virtual void addType (const std::string& moduleName, filetype_t type) = 0; 00049 }; 00050 00055 class IFileTypeRegistry 00056 { 00057 public: 00058 INTEGER_CONSTANT(Version, 1); 00059 STRING_CONSTANT(Name, "filetypes"); 00060 00061 virtual ~IFileTypeRegistry () 00062 { 00063 } 00076 virtual void addType (const char* moduleType, const char* moduleName, filetype_t type) = 0; 00077 virtual void getTypeList (const std::string& moduleType, IFileTypeList* typelist) = 0; 00078 }; 00079 00080 #include "modulesystem.h" 00081 00082 template<typename Type> 00083 class GlobalModule; 00084 typedef GlobalModule<IFileTypeRegistry> GlobalFiletypesModule; 00085 00086 template<typename Type> 00087 class GlobalModuleRef; 00088 typedef GlobalModuleRef<IFileTypeRegistry> GlobalFiletypesModuleRef; 00089 00090 inline IFileTypeRegistry& GlobalFiletypes () 00091 { 00092 return GlobalFiletypesModule::getTable(); 00093 } 00094 00095 #endif