1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_sw.hxx" 30 31 32 33 #include <crsrsh.hxx> 34 #include <doc.hxx> 35 #include <layfrm.hxx> 36 #include <cntfrm.hxx> 37 #include <swcrsr.hxx> 38 #include <viscrs.hxx> 39 #include <callnk.hxx> 40 41 42 43 SwLayoutFrm* GetCurrColumn( const SwLayoutFrm* pLayFrm ) 44 { 45 while( pLayFrm && !pLayFrm->IsColumnFrm() ) 46 pLayFrm = pLayFrm->GetUpper(); 47 return (SwLayoutFrm*)pLayFrm; 48 } 49 50 51 SwLayoutFrm* GetNextColumn( const SwLayoutFrm* pLayFrm ) 52 { 53 SwLayoutFrm* pActCol = GetCurrColumn( pLayFrm ); 54 return pActCol ? (SwLayoutFrm*)pActCol->GetNext() : 0; 55 } 56 57 58 SwLayoutFrm* GetPrevColumn( const SwLayoutFrm* pLayFrm ) 59 { 60 SwLayoutFrm* pActCol = GetCurrColumn( pLayFrm ); 61 return pActCol ? (SwLayoutFrm*)pActCol->GetPrev() : 0; 62 } 63 64 65 SwCntntFrm* GetColumnStt( const SwLayoutFrm* pColFrm ) 66 { 67 return pColFrm ? (SwCntntFrm*)pColFrm->ContainsCntnt() : 0; 68 } 69 70 71 SwCntntFrm* GetColumnEnd( const SwLayoutFrm* pColFrm ) 72 { 73 SwCntntFrm *pRet = GetColumnStt( pColFrm ); 74 if( !pRet ) 75 return 0; 76 77 SwCntntFrm *pNxt = pRet->GetNextCntntFrm(); 78 while( pNxt && pColFrm->IsAnLower( pNxt ) ) 79 { 80 pRet = pNxt; 81 pNxt = pNxt->GetNextCntntFrm(); 82 } 83 return pRet; 84 } 85 86 87 SwWhichColumn fnColumnPrev = &GetPrevColumn; 88 SwWhichColumn fnColumnCurr = &GetCurrColumn; 89 SwWhichColumn fnColumnNext = &GetNextColumn; 90 SwPosColumn fnColumnStart = &GetColumnStt; 91 SwPosColumn fnColumnEnd = &GetColumnEnd; 92 93 94 sal_Bool SwCrsrShell::MoveColumn( SwWhichColumn fnWhichCol, SwPosColumn fnPosCol ) 95 { 96 sal_Bool bRet = sal_False; 97 if( !pTblCrsr ) 98 { 99 SwLayoutFrm* pLayFrm = GetCurrFrm()->GetUpper(); 100 if( pLayFrm && 0 != ( pLayFrm = (*fnWhichCol)( pLayFrm )) ) 101 { 102 SwCntntFrm* pCnt = (*fnPosCol)( pLayFrm ); 103 if( pCnt ) 104 { 105 SET_CURR_SHELL( this ); 106 SwCallLink aLk( *this ); // Crsr-Moves ueberwachen, evt. Link callen 107 SwCrsrSaveState aSaveState( *pCurCrsr ); 108 109 pCnt->Calc(); // ??? 110 111 Point aPt( pCnt->Frm().Pos() + pCnt->Prt().Pos() ); 112 if( fnPosCol == GetColumnEnd ) 113 { 114 aPt.X() += pCnt->Prt().Width(); 115 aPt.Y() += pCnt->Prt().Height(); 116 } 117 118 pCnt->GetCrsrOfst( pCurCrsr->GetPoint(), aPt ); 119 120 if( !pCurCrsr->IsInProtectTable( sal_True ) && 121 !pCurCrsr->IsSelOvr() ) 122 { 123 UpdateCrsr(); 124 bRet = sal_True; 125 } 126 } 127 } 128 } 129 return bRet; 130 } 131 132 133 134