bool CPart::SetTextContents( const std::string& inString ) { CPartContents* contents = GetContentsOnCurrentCard(); if( contents ) contents->SetText( inString ); else { CCard * currCard = GetStack()->GetCurrentCard(); bool isBgPart = dynamic_cast<CBackground*>(mOwner) != NULL; bool bgPartWithNonSharedText = (isBgPart && !GetSharedText()); contents = new CPartContents( bgPartWithNonSharedText ? currCard : mOwner ); contents->SetID( mID ); contents->SetText( inString ); contents->SetIsOnBackground( isBgPart ); if( bgPartWithNonSharedText ) // We're on the background layer, not on the card? But we don't have shared text? Add the contents to the current *card*! { currCard->AddPartContents( contents ); } else // Otherwise, we're on the card, or on the background with shared text, add the contents to that. { mOwner->AddPartContents( contents ); } } return true; }
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; }