Example #1
0
CPartContents*	CPart::GetContentsOnCurrentCard()
{
	CPartContents*	contents = NULL;
	CStack		*	currStack = GetStack();
	if( !currStack )
		return NULL;
	CCard		*	currCard = currStack->GetCurrentCard();
	if( !currCard )
		return NULL;
	bool	isBgPart = dynamic_cast<CBackground*>(mOwner) != NULL;
	bool 	bgPartWithNonSharedText = (isBgPart && !GetSharedText());
	if( isBgPart && !GetSharedText() )	// We're on the background layer, not on the card, and don't have shared text?
	{
		contents = currCard->GetPartContentsByID( GetID(), isBgPart );
	}
	else
	{
		contents = mOwner->GetPartContentsByID( GetID(), isBgPart );
	}
	
	if( !contents )
	{
		contents = new CPartContents( currCard );
		contents->SetID( mID );
		contents->SetIsOnBackground( isBgPart );
		if( bgPartWithNonSharedText )
			currCard->AddPartContents( contents );
		else
			mOwner->AddPartContents( contents );
	}

	return contents;
}
Example #2
0
CScriptableObject*	CDocument::GetParentObject( CScriptableObject* previousParent, LEOContext * ctx )
{
	CScriptableObject * frontObj = GetNextFrontScript( ctx );
	if( frontObj ) // We're doing frontscripts?
		return frontObj; // Return next frontscript, not our parent.
	
	if( previousParent )
	{
		CStack*	stackForwardingToUs = dynamic_cast<CStack*>(previousParent);
		if( stackForwardingToUs )
		{
			if( stackForwardingToUs->GetShouldForwardToMainStack() ) // Make messages sent from palettes continue to document window.
			{
				CStack	*	currentMainStack = CStack::GetMainStack();
				if( currentMainStack && currentMainStack != stackForwardingToUs && currentMainStack->GetScriptContextGroupObject() == GetScriptContextGroupObject() )
				{
					CCard	*	currentCard = currentMainStack->GetCurrentCard();
					if( currentCard )
					{
						return currentCard;
					}
				}
			}
		}
	}
	
	// Forward message to home stack's document for a last shot:
	CDocumentRef	homeDocument = CDocumentManager::GetSharedDocumentManager()->GetHomeDocument();
	if( homeDocument != this && homeDocument != nullptr && homeDocument->GetScriptContextGroupObject() == GetScriptContextGroupObject() )
	{
		std::cout << " -> (" << homeDocument->GetObjectDescriptorString() << ")" << std::endl;
		return homeDocument;
	}
	
	// Still nothing? We're at end. See if there are any back scripts:
	if( ctx )
	{
		CScriptContextUserData * ud = (CScriptContextUserData *)ctx->userData;
		CScriptContextGroupUserData * gud = (CScriptContextGroupUserData *)ctx->group->userData;
		if( !gud->mBackScripts.empty() )
		{
			assert(ud->GetCurrentBackScript() == nullptr);
			assert(ud->GetCurrentFrontScript() == nullptr);
			CScriptableObject * obj = gud->mBackScripts.front();
			ud->SetCurrentBackScript(obj);
			return obj;
		}

	}
	
	return nullptr;
}