/*--------------------------------------------------------------------------*
 *
 *  Microsoft Windows
 *  Copyright (C) Microsoft Corporation, 1992 - 000
 *
 *  File:      xmlicon.h
 *
 *  Contents:  Interface file for CXMLIcon
 *
 *  History:   26-Jul-2000 jeffro    Created
 *
 *--------------------------------------------------------------------------*/

#pragma once

#include "xmlbase.h"	// for CXMLObject
#include "smarticon.h"	// for CSmartIcon


/*+-------------------------------------------------------------------------*
 * class CXMLIcon
 *
 * This class adds XML persistence to CSmartIcons.  CSmartIcon cannot
 * implement XML persistence on its own because it is used in the shell
 * extension.  The shell extension must be extremely lightweight, but
 * XML persistence requires mmcbase.dll.  Depending on mmcbase.dll would
 * make the shell extension too heavy, so we have this functionality split.
 *--------------------------------------------------------------------------*/

class CXMLIcon :
	public CXMLObject,
	public CSmartIcon
{
public:
	CXMLIcon (LPCTSTR pszBinaryEntryName = NULL) :
		m_strBinaryEntryName ((pszBinaryEntryName != NULL) ? pszBinaryEntryName : _T(""))
	{}

	// default copy construction, copy assignment, and destruction are fine

	CXMLIcon& operator= (const CSmartIcon& other)
	{
		CSmartIcon::operator= (other);
		return (*this);
	}

    // CXMLObject methods
public:
    virtual void Persist(CPersistor &persistor);
    virtual bool UsesBinaryStorage()				{ return (true); }
    virtual LPCTSTR GetBinaryEntryName();
    DEFINE_XML_TYPE(XML_TAG_CONSOLE_ICON);

private:
	const tstring	m_strBinaryEntryName;
};