Esempio n. 1
0
ALERROR CEffectCreator::CreateSimpleFromXML (SDesignLoadCtx &Ctx, CXMLElement *pDesc, const CString &sUNID, CEffectCreator **retpCreator)

//	CreateSimpleFromXML
//
//	Creates the creator from an XML element

	{
	ALERROR error;
	CEffectCreator *pCreator;

	//	Create the effect based on the tag

	if (error = CreateFromTag(pDesc->GetTag(), &pCreator))
		{
		Ctx.sError = strPatternSubst(CONSTLIT("Invalid painter tag: %s"), pDesc->GetTag());
		return error;
		}

	if (pCreator == NULL)
		return ERR_MEMORY;

	pCreator->m_sUNID = sUNID;

	//	Type-specific creation

	if (error = pCreator->OnEffectCreateFromXML(Ctx, pDesc, sUNID))
		return error;

	//	Done

	*retpCreator = pCreator;

	return NOERROR;
	}
Esempio n. 2
0
ALERROR CEffectCreator::CreateTypeFromXML (SDesignLoadCtx &Ctx, CXMLElement *pDesc, CEffectCreator **retpCreator)

//	CreateTypeFromXML
//
//	Creates the class only. This is used by the main Design load code when we use
//	the full <EffectType> definition.

	{
	ALERROR error;
	CEffectCreator *pCreator;

	//	Create the effect based on the child tag

	CXMLElement *pEffect = pDesc->GetContentElementByTag(EFFECT_TAG);
	if (pEffect == NULL)
		{
		Ctx.sError = CONSTLIT("<EffectType> must have an <Effect> sub-element.");
		return ERR_FAIL;
		}

	//	If we've got no sub elements, then its a null creator

	if (pEffect->GetContentElementCount() == 0)
		pCreator = new CNullEffectCreator;

	//	If we've got a single element, then we create a simple creator

	else if (pEffect->GetContentElementCount() == 1)
		{
		const CString &sTag = pEffect->GetContentElement(0)->GetTag();

		if (error = CreateFromTag(sTag, &pCreator))
			{
			Ctx.sError = strPatternSubst(CONSTLIT("Invalid effect tag: %s"), sTag);
			return error;
			}
		}

	//	Otherwise we have a group

	else
		pCreator = new CEffectGroupCreator;

	//	Done

	*retpCreator = pCreator;

	return NOERROR;
	}