Example #1
0
ALERROR CImageLibrary::AddImage (SDesignLoadCtx &Ctx, CXMLElement *pDesc)

//	AddImage
//
//	Add an image to the library

	{
	ALERROR error;

	//	Create the image desc

	CObjectImage *pNewImage;
	if (error = CObjectImage::CreateFromXML(Ctx, pDesc, &pNewImage))
		return error;

	//	If we defer loading, at least make sure that the images exist

	if (pDesc->GetAttributeBool(LOAD_ON_USE_ATTRIB))
		{
		if (error = pNewImage->Exists(Ctx))
			{
			delete pNewImage;
			return error;
			}
		}

	//	Otherwise, load and lock the image

	else
		{
		if (error = pNewImage->Lock(Ctx))
			{
			delete pNewImage;
			return error;
			}
		}

	//	Add to the library

	if (error = m_Library.AddEntry(pNewImage->GetUNID(), (CObject *)pNewImage))
		{
		if (FindImage(pNewImage->GetUNID()))
			Ctx.sError = strPatternSubst(CONSTLIT("Duplicate UNID: %x"), pNewImage->GetUNID());
		else
			Ctx.sError = strPatternSubst(CONSTLIT("Unable to add image to library: %x"), pNewImage->GetUNID());
		delete pNewImage;
		return error;
		}

	return NOERROR;
	}