diff options
Diffstat (limited to 'sw/source/core/crsr/trvlcol.cxx')
-rw-r--r-- | sw/source/core/crsr/trvlcol.cxx | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/sw/source/core/crsr/trvlcol.cxx b/sw/source/core/crsr/trvlcol.cxx new file mode 100644 index 000000000000..076af3be386c --- /dev/null +++ b/sw/source/core/crsr/trvlcol.cxx @@ -0,0 +1,133 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sw.hxx" + + + +#include <crsrsh.hxx> +#include <doc.hxx> +#include <layfrm.hxx> +#include <cntfrm.hxx> +#include <swcrsr.hxx> +#include <viscrs.hxx> +#include <callnk.hxx> + + + +SwLayoutFrm* GetCurrColumn( const SwLayoutFrm* pLayFrm ) +{ + while( pLayFrm && !pLayFrm->IsColumnFrm() ) + pLayFrm = pLayFrm->GetUpper(); + return (SwLayoutFrm*)pLayFrm; +} + + +SwLayoutFrm* GetNextColumn( const SwLayoutFrm* pLayFrm ) +{ + SwLayoutFrm* pActCol = GetCurrColumn( pLayFrm ); + return pActCol ? (SwLayoutFrm*)pActCol->GetNext() : 0; +} + + +SwLayoutFrm* GetPrevColumn( const SwLayoutFrm* pLayFrm ) +{ + SwLayoutFrm* pActCol = GetCurrColumn( pLayFrm ); + return pActCol ? (SwLayoutFrm*)pActCol->GetPrev() : 0; +} + + +SwCntntFrm* GetColumnStt( const SwLayoutFrm* pColFrm ) +{ + return pColFrm ? (SwCntntFrm*)pColFrm->ContainsCntnt() : 0; +} + + +SwCntntFrm* GetColumnEnd( const SwLayoutFrm* pColFrm ) +{ + SwCntntFrm *pRet = GetColumnStt( pColFrm ); + if( !pRet ) + return 0; + + SwCntntFrm *pNxt = pRet->GetNextCntntFrm(); + while( pNxt && pColFrm->IsAnLower( pNxt ) ) + { + pRet = pNxt; + pNxt = pNxt->GetNextCntntFrm(); + } + return pRet; +} + + +SwWhichColumn fnColumnPrev = &GetPrevColumn; +SwWhichColumn fnColumnCurr = &GetCurrColumn; +SwWhichColumn fnColumnNext = &GetNextColumn; +SwPosColumn fnColumnStart = &GetColumnStt; +SwPosColumn fnColumnEnd = &GetColumnEnd; + + +BOOL SwCrsrShell::MoveColumn( SwWhichColumn fnWhichCol, SwPosColumn fnPosCol ) +{ + BOOL bRet = FALSE; + if( !pTblCrsr ) + { + SwLayoutFrm* pLayFrm = GetCurrFrm()->GetUpper(); + if( pLayFrm && 0 != ( pLayFrm = (*fnWhichCol)( pLayFrm )) ) + { + SwCntntFrm* pCnt = (*fnPosCol)( pLayFrm ); + if( pCnt ) + { + SET_CURR_SHELL( this ); + SwCallLink aLk( *this ); // Crsr-Moves ueberwachen, evt. Link callen + SwCrsrSaveState aSaveState( *pCurCrsr ); + + pCnt->Calc(); // ??? + + Point aPt( pCnt->Frm().Pos() + pCnt->Prt().Pos() ); + if( fnPosCol == GetColumnEnd ) + { + aPt.X() += pCnt->Prt().Width(); + aPt.Y() += pCnt->Prt().Height(); + } + + pCnt->GetCrsrOfst( pCurCrsr->GetPoint(), aPt ); + + if( !pCurCrsr->IsInProtectTable( TRUE ) && + !pCurCrsr->IsSelOvr() ) + { + UpdateCrsr(); + bRet = TRUE; + } + } + } + } + return bRet; +} + + + |