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; }
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; }