/*--------------------------------------------------------------------------*
 *
 *  Microsoft Windows
 *  Copyright (C) Microsoft Corporation, 1992 - 000
 *
 *  File:      xmlimage.cpp
 *
 *  Contents:  Implementation file for CXMLImageList
 *
 *  History:   10-Aug-2000 jeffro    Created
 *
 *--------------------------------------------------------------------------*/

#include "xmlimage.h"
#include "util.h"


/*+-------------------------------------------------------------------------*
 * CXMLImageList::Persist
 *
 * Saves/loads a CXMLImageList to a CPersistor.
 *--------------------------------------------------------------------------*/

void CXMLImageList::Persist (CPersistor &persistor)
{
	DECLARE_SC (sc, _T("CXMLImageList::Persist"));

    // try to get IStream first, to avoid cleanup if it fails [and throws] (audriusz)
    CXML_IStream xmlStream;

    if (persistor.IsStoring())
    {
        ASSERT (!IsNull());

		/*
		 * write the imagelist to the stream
		 */
        IStreamPtr spStream;
        sc = xmlStream.ScGetIStream( &spStream );
        if (sc)
            sc.Throw();

        sc = WriteCompatibleImageList (m_hImageList, spStream);
        if (sc)
            sc.Throw();
    }

    xmlStream.Persist (persistor);

    if (persistor.IsLoading())
    {
		/*
		 * get rid of the imagelist that's there, if any
		 */
		Destroy();
		ASSERT (IsNull());

		/*
		 * reconstitute the imagelist from the stream
		 */
        IStreamPtr spStream;
        sc = xmlStream.ScGetIStream( &spStream );
        if (sc)
            sc.Throw();

        sc = ReadCompatibleImageList (spStream, m_hImageList);
        if (sc)
            sc.Throw();
    }
}