1 /*
2     Copyright (c) 2008-2009 NetAllied Systems GmbH
3 
4     This file is part of COLLADASaxFrameworkLoader.
5 
6     Licensed under the MIT Open Source License,
7     for details please see LICENSE file or the website
8     http://www.opensource.org/licenses/mit-license.php
9 */
10 
11 #include "COLLADASaxFWLStableHeaders.h"
12 #include "COLLADASaxFWLLibraryImagesLoader.h"
13 #include "COLLADASaxFWLLoader.h"
14 
15 #include "COLLADAFWImage.h"
16 #include "COLLADAFWIWriter.h"
17 
18 
19 namespace COLLADASaxFWL
20 {
21 
22     //------------------------------
LibraryImagesLoader(IFilePartLoader * callingFilePartLoader)23 	LibraryImagesLoader::LibraryImagesLoader( IFilePartLoader* callingFilePartLoader )
24 		: FilePartLoader(callingFilePartLoader)
25 		, mCurrentImage(0)
26 	{
27 
28 	}
29 
30     //------------------------------
~LibraryImagesLoader()31 	LibraryImagesLoader::~LibraryImagesLoader()
32 	{
33 	}
34 
35     //------------------------------
getUniqueId()36     const COLLADAFW::UniqueId& LibraryImagesLoader::getUniqueId()
37     {
38         if ( mCurrentImage )
39             return mCurrentImage->getUniqueId();
40         return COLLADAFW::UniqueId::INVALID;
41     }
42 
43 	//------------------------------
end__library_images()44 	bool LibraryImagesLoader::end__library_images()
45 	{
46 		moveUpInSidTree();
47 		finish();
48 		return true;
49 	}
50 
51 	//------------------------------
begin__image(const image__AttributeData & attributeData)52 	bool LibraryImagesLoader::begin__image( const image__AttributeData& attributeData )
53 	{
54 		mCurrentImage = FW_NEW COLLADAFW::Image( createUniqueIdFromId( attributeData.id, COLLADAFW::Image::ID()) );
55 
56 		if ( attributeData.name )
57 			mCurrentImage->setName( (const char*) attributeData.name );
58 		else if ( attributeData.id )
59 			mCurrentImage->setName( (const char*) attributeData.id );
60 
61         if ( attributeData.id )
62             mCurrentImage->setOriginalId ( (const char*)attributeData.id );
63 
64 		if ( attributeData.format )
65 			mCurrentImage->setFormat( attributeData.format );
66 
67 		mCurrentImage->setHeight( (unsigned long)attributeData.height );
68 		mCurrentImage->setWidth( (unsigned long)attributeData.width );
69 		mCurrentImage->setDepth( (unsigned long)attributeData.depth );
70 
71 		return true;
72 	}
73 
74 	//------------------------------
end__image()75 	bool LibraryImagesLoader::end__image()
76 	{
77 		bool success = true;
78 		if ( (getObjectFlags() & Loader::IMAGE_FLAG) != 0 )
79 		{
80 		    success = writer()->writeImage(mCurrentImage);
81 		}
82 		FW_DELETE mCurrentImage;
83 		mCurrentImage = 0;
84 		return success;
85 	}
86 
87 	//------------------------------
begin__init_from____anyURI()88 	bool LibraryImagesLoader::begin__init_from____anyURI()
89 	{
90 		mCurrentImage->setSourceType( COLLADAFW::Image::SOURCE_TYPE_URI );
91 		return true;
92 	}
93 
94 	//------------------------------
end__init_from____anyURI()95 	bool LibraryImagesLoader::end__init_from____anyURI()
96 	{
97 		// we don't need to do anything here
98 		return true;
99 	}
100 
101 	//------------------------------
data__init_from____anyURI(COLLADABU::URI value)102 	bool LibraryImagesLoader::data__init_from____anyURI( COLLADABU::URI value )
103 	{
104 		mCurrentImage->setImageURI( value );
105 		return true;
106 	}
107 
108 	//------------------------------
begin__data()109 	bool LibraryImagesLoader::begin__data()
110 	{
111 		// disabled see COLLADAFW::Image
112 		//mCurrentImage->setSourceType( COLLADAFW::Image::SOURCE_TYPE_DATA);
113 		return true;
114 	}
115 
116 	//------------------------------
data__data(const uint8 * data,size_t length)117 	bool LibraryImagesLoader::data__data( const uint8* data, size_t length )
118 	{
119 		// disabled see COLLADAFW::Image
120 		//COLLADAFW::Image::CharacterArray& dataArray = mCurrentImage->getData();
121 		//dataArray.appendValues( (char *)data, length );
122 		return true;
123 	}
124 
125 } // namespace COLLADASaxFWL
126