00001 #ifndef D3FILEDOC_H
00002 #define D3FILEDOC_H
00003
00004
00005 #define USE_DXFILE
00006
00007
00008 #include <FileIO/FIDocNode.h>
00009 #include <FileIO/FIDocScene.h>
00010 #include <WinBasis/WBUtility.h>
00011 #include <WinDx/D3D/WXD3D.h>
00012
00013 #ifdef USE_DXFILE
00014 #include <dxfile.h>
00015 #else
00016 #include <FileIO/MetaLoader/FIGenParser.h>
00017 #endif
00018
00019 namespace Spr {;
00020
00021 class D3ProtoSaver:public FIProtoSaver{
00022 public:
00023 virtual void SaveImp(std::ostream& os, const FITypeDescDb::ProtoDesc& proto);
00024 };
00025
00026 void RegisterD3DLoader(FILoadScene* l);
00027 class SPR_DLL D3DocNode;
00028
00029 class SPR_DLL D3FileDoc:public FIFileDoc{
00030 protected:
00031 WXINTF(DirectXFileEnumObject) enumObject;
00032 WXINTF(DirectXFileSaveObject) saveObject;
00033 std::map<WBGuid, UTString> typeNameMap;
00034 std::map<UTString, WBGuid, UTStringLess> typeGuidMap;
00035 std::vector<WBGuid> typeGuids;
00036 #ifndef USE_DXFILE
00037 UTRef<FIGenParser> fileIo;
00038 #endif
00039 public:
00040 D3FileDoc();
00041 void Init();
00042 void RegisterFromTypeDB();
00043 void RegisterType(UTString name, const GUID* guid);
00044 UTString GetTypeName(const GUID* g){ return typeNameMap[*g]; }
00045 GUID GetTypeGuid(UTString n){ return typeGuidMap[n]; }
00046 void Print(std::ostream& os) const;
00047
00048
00049 virtual bool Load(UTString filename);
00050
00051 virtual bool Save(UTString filename, FIDocNodeBase* doc);
00052 protected:
00053
00054 void LoadRecurse();
00055
00056 void SaveRecurse();
00057
00058 void RegisterTemplates();
00059 };
00060
00061
00062 }
00063 #endif