/************************************************************************* * * $RCSfile: objectformatterlayfrm.cxx,v $ * * $Revision: 1.5 $ * * last change: $Author: kz $ $Date: 2005-01-21 10:37:43 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses * * - GNU Lesser General Public License Version 2.1 * - Sun Industry Standards Source License Version 1.1 * * Sun Microsystems Inc., October, 2000 * * GNU Lesser General Public License Version 2.1 * ============================================= * Copyright 2000 by Sun Microsystems, Inc. * 901 San Antonio Road, Palo Alto, CA 94303, USA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * * * Sun Industry Standards Source License Version 1.1 * ================================================= * The contents of this file are subject to the Sun Industry Standards * Source License Version 1.1 (the "License"); You may not use this file * except in compliance with the License. You may obtain a copy of the * License at http://www.openoffice.org/license.html. * * Software provided under this License is provided on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. * See the License for the specific provisions governing your rights and * obligations concerning the Software. * * The Initial Developer of the Original Code is: Sun Microsystems, Inc. * * Copyright: 2000 by Sun Microsystems, Inc. * * All Rights Reserved. * * Contributor(s): _______________________________________ * * ************************************************************************/ #ifndef _OBJECTFORMATTERLAYFRM_HXX #include #endif #ifndef _ANCHOREDOBJECT_HXX #include #endif #ifndef _SORTEDOBJS_HXX #include #endif #ifndef _LAYFRM_HXX #include #endif #ifndef _PAGEFRM_HXX #include #endif // ============================================================================= // implementation of class // ============================================================================= SwObjectFormatterLayFrm::SwObjectFormatterLayFrm( SwLayoutFrm& _rAnchorLayFrm, const SwPageFrm& _rPageFrm, SwLayAction* _pLayAction ) : SwObjectFormatter( _rPageFrm, _pLayAction ), mrAnchorLayFrm( _rAnchorLayFrm ) { } SwObjectFormatterLayFrm::~SwObjectFormatterLayFrm() { } SwObjectFormatterLayFrm* SwObjectFormatterLayFrm::CreateObjFormatter( SwLayoutFrm& _rAnchorLayFrm, const SwPageFrm& _rPageFrm, SwLayAction* _pLayAction ) { if ( !_rAnchorLayFrm.IsPageFrm() && !_rAnchorLayFrm.IsFlyFrm() ) { ASSERT( false, " - unexcepted type of anchor frame " ); return 0L; } SwObjectFormatterLayFrm* pObjFormatter = 0L; // create object formatter, if floating screen objects are registered at // given anchor layout frame. if ( _rAnchorLayFrm.GetDrawObjs() || ( _rAnchorLayFrm.IsPageFrm() && static_cast(_rAnchorLayFrm).GetSortedObjs() ) ) { pObjFormatter = new SwObjectFormatterLayFrm( _rAnchorLayFrm, _rPageFrm, _pLayAction ); } return pObjFormatter; } SwFrm& SwObjectFormatterLayFrm::GetAnchorFrm() { return mrAnchorLayFrm; } // --> OD 2005-01-10 #i40147# - add parameter <_bCheckForMovedFwd>. // Not relevant for objects anchored at layout frame. bool SwObjectFormatterLayFrm::DoFormatObj( SwAnchoredObject& _rAnchoredObj, const bool _bCheckForMovedFwd ) // <-- { _FormatObj( _rAnchoredObj ); return true; } bool SwObjectFormatterLayFrm::DoFormatObjs() { bool bSuccess( true ); bSuccess = _FormatObjsAtFrm(); if ( GetAnchorFrm().IsPageFrm() ) { // anchor layout frame is a page frame. // Thus, format also all anchored objects, which are registered at // this page frame, whose 'anchor' isn't on this page frame and whose // anchor frame is valid. bSuccess = _AdditionalFormatObjsOnPage(); } return bSuccess; } /** method to format all anchored objects, which are registered at the page frame, whose 'anchor' isn't on this page frame and whose anchor frame is valid. OD 2004-07-02 #i28701# @author */ bool SwObjectFormatterLayFrm::_AdditionalFormatObjsOnPage() { if ( !GetAnchorFrm().IsPageFrm() ) { ASSERT( false, " - mis-usage of method, call only for anchor frames of type page frame" ); return true; } SwPageFrm& rPageFrm = static_cast(GetAnchorFrm()); if ( !rPageFrm.GetSortedObjs() ) { // nothing to do, if no floating screen object is registered at the anchor frame. return true; } bool bSuccess( true ); sal_uInt32 i = 0; for ( ; i < rPageFrm.GetSortedObjs()->Count(); ++i ) { SwAnchoredObject* pAnchoredObj = (*rPageFrm.GetSortedObjs())[i]; // --> OD 2004-09-23 #i33751#, #i34060# - method // is replaced by method . It's return value // have to be checked. SwPageFrm* pPageFrmOfAnchor = pAnchoredObj->FindPageFrmOfAnchor(); // --> OD 2004-10-08 #i26945# - check, if the page frame of the // object's anchor frame isn't the given page frame ASSERT( pPageFrmOfAnchor, " - missing page frame" ) if ( pPageFrmOfAnchor && // --> OD 2004-10-22 #i35911# pPageFrmOfAnchor->GetPhyPageNum() < rPageFrm.GetPhyPageNum() ) // <-- // <-- { // if format of object fails, stop formatting and pass fail to // calling method via the return value. if ( !DoFormatObj( *pAnchoredObj ) ) { bSuccess = false; break; } // considering changes at during // format of the object. if ( !rPageFrm.GetSortedObjs() || i > rPageFrm.GetSortedObjs()->Count() ) { break; } else { sal_uInt32 nActPosOfObj = rPageFrm.GetSortedObjs()->ListPosOf( *pAnchoredObj ); if ( nActPosOfObj == rPageFrm.GetSortedObjs()->Count() || nActPosOfObj > i ) { --i; } else if ( nActPosOfObj < i ) { i = nActPosOfObj; } } } } // end of loop on return bSuccess; }