diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2000-09-18 23:08:29 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2000-09-18 23:08:29 +0000 |
commit | 84a3db80b4fd66c6854b3135b5f69b61fd828e62 (patch) | |
tree | 4475006ca87946e71c44668b20330b2d2729f638 /sw/source/core/edit/edtab.cxx | |
parent | 7b0b5cdfeed656b279bc32cd929630d5fc25878b (diff) |
initial import
Diffstat (limited to 'sw/source/core/edit/edtab.cxx')
-rw-r--r-- | sw/source/core/edit/edtab.cxx | 713 |
1 files changed, 713 insertions, 0 deletions
diff --git a/sw/source/core/edit/edtab.cxx b/sw/source/core/edit/edtab.cxx new file mode 100644 index 000000000000..5d5178dfcccd --- /dev/null +++ b/sw/source/core/edit/edtab.cxx @@ -0,0 +1,713 @@ +/************************************************************************* + * + * $RCSfile: edtab.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-19 00:08:18 $ + * + * 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): _______________________________________ + * + * + ************************************************************************/ + +#ifdef PRECOMPILED +#include "core_pch.hxx" +#endif + +#pragma hdrstop + +#define ITEMID_BOXINFO SID_ATTR_BORDER_INNER +#ifndef _HINTIDS_HXX +#include <hintids.hxx> +#endif + +#define _SVSTDARR_ULONGS +#include <svtools/svstdarr.hxx> + +#ifndef _APP_HXX //autogen +#include <vcl/svapp.hxx> +#endif +#ifndef _WINDOW_HXX //autogen +#include <vcl/window.hxx> +#endif +#ifndef _SVX_BOXITEM_HXX //autogen +#include <svx/boxitem.hxx> +#endif + +#ifndef _SWWAIT_HXX +#include <swwait.hxx> +#endif +#ifndef _FMTFSIZE_HXX //autogen +#include <fmtfsize.hxx> +#endif +#ifndef _FRMATR_HXX +#include <frmatr.hxx> +#endif +#ifndef _EDITSH_HXX +#include <editsh.hxx> +#endif +#ifndef _DOC_HXX +#include <doc.hxx> +#endif +#ifndef _CNTFRM_HXX +#include <cntfrm.hxx> +#endif +#ifndef _LAYFRM_HXX +#include <layfrm.hxx> +#endif +#ifndef _PAM_HXX +#include <pam.hxx> +#endif +#ifndef _NDTXT_HXX +#include <ndtxt.hxx> +#endif +#ifndef _HINTS_HXX +#include <hints.hxx> +#endif +#ifndef _FLDBAS_HXX +#include <fldbas.hxx> +#endif +#ifndef _NODE_HXX +#include <node.hxx> +#endif +#ifndef _SWTABLE_HXX +#include <swtable.hxx> +#endif +#ifndef _SWUNDO_HXX +#include <swundo.hxx> +#endif +#ifndef _TBLSEL_HXX +#include <tblsel.hxx> +#endif +#ifndef _EDIMP_HXX +#include <edimp.hxx> +#endif +#ifndef _TABFRM_HXX +#include <tabfrm.hxx> +#endif +#ifndef _CELLFRM_HXX +#include <cellfrm.hxx> +#endif +#ifndef _CELLATR_HXX +#include <cellatr.hxx> +#endif +#ifndef _SWTBLFMT_HXX +#include <swtblfmt.hxx> +#endif +#ifndef _SWDDETBL_HXX +#include <swddetbl.hxx> +#endif +#ifndef _MDIEXP_HXX +#include <mdiexp.hxx> +#endif + +extern void ClearFEShellTabCols(); + +const SwTable& SwEditShell::InsertTable( USHORT nRows, USHORT nCols, + SwHoriOrient eAdj, + USHORT nInsTblFlags, + const SwTableAutoFmt* pTAFmt ) +{ + StartAllAction(); + SwPosition* pPos = GetCrsr()->GetPoint(); + + BOOL bEndUndo = 0 != pPos->nContent.GetIndex(); + if( bEndUndo ) + { + StartUndo( UNDO_START ); + GetDoc()->SplitNode( *pPos ); + } + const SwTable *pTable = GetDoc()->InsertTable( *pPos, nRows, nCols, + eAdj, nInsTblFlags, pTAFmt ); + if( bEndUndo ) + EndUndo( UNDO_END ); + + EndAllAction(); + return *pTable; +} + +BOOL SwEditShell::TextToTable( sal_Unicode cCh, SwHoriOrient eAdj, + USHORT nInsTblFlags, + const SwTableAutoFmt* pTAFmt ) +{ + SwWait aWait( *GetDoc()->GetDocShell(), TRUE ); + BOOL bRet = FALSE; + StartAllAction(); + FOREACHPAM_START(this) + if( PCURCRSR->HasMark() ) + bRet |= 0 != GetDoc()->TextToTable( *PCURCRSR, cCh, eAdj, + nInsTblFlags, pTAFmt ); + FOREACHPAM_END() + EndAllAction(); + return bRet; +} + +BOOL SwEditShell::TableToText( sal_Unicode cCh ) +{ + SwWait aWait( *GetDoc()->GetDocShell(), TRUE ); + BOOL bRet = FALSE; + SwPaM* pCrsr = GetCrsr(); + const SwTableNode* pTblNd = + GetDoc()->IsIdxInTbl( pCrsr->GetPoint()->nNode ); + if( IsTableMode() ) + { + ClearMark(); + pCrsr = GetCrsr(); + } + else if( !pTblNd || pCrsr->GetNext() != pCrsr ) + return bRet; + + StartAllAction(); + + // verschiebe den akt. Cursor aus dem Tabellen Bereich + // angemeldet ist +#ifdef USED + SwNodeIndex aTabIdx( pCrsr->GetPoint()->nNode ); +#else + SwNodeIndex aTabIdx( *pTblNd ); +#endif + pCrsr->DeleteMark(); + pCrsr->GetPoint()->nNode = *pTblNd->EndOfSectionNode(); + pCrsr->GetPoint()->nContent.Assign( 0, 0 ); + // SPoint und Mark aus dem Bereich verschieben !!! + pCrsr->SetMark(); + pCrsr->DeleteMark(); + + bRet = GetDoc()->TableToText( pTblNd, cCh ); + pCrsr->GetPoint()->nNode = aTabIdx; +#ifdef USED + pCrsr->Move( fnMoveBackward, fnGoNode ); +#else + SwCntntNode* pCNd = pCrsr->GetCntntNode(); + if( !pCNd ) + pCrsr->Move( fnMoveForward, fnGoCntnt ); + else + pCrsr->GetPoint()->nContent.Assign( pCNd, 0 ); +#endif + + EndAllAction(); + return bRet; +} + +FASTBOOL SwEditShell::IsTextToTableAvailable() const +{ + FASTBOOL bOnlyText = FALSE; + FOREACHPAM_START(this) + if( PCURCRSR->HasMark() ) + { + bOnlyText = TRUE; + + // pruefe ob in der Selection eine Tabelle liegt + ULONG nStt = PCURCRSR->GetMark()->nNode.GetIndex(), + nEnd = PCURCRSR->GetPoint()->nNode.GetIndex(); + if( nStt > nEnd ) { ULONG n = nStt; nStt = nEnd; nEnd = n; } + + for( ; nStt <= nEnd; ++nStt ) + if( !GetDoc()->GetNodes()[ nStt ]->IsTxtNode() ) + { + bOnlyText = FALSE; + break; + } + + if( !bOnlyText ) + break; + } + FOREACHPAM_END() + + return bOnlyText; +} + + +void SwEditShell::InsertDDETable( SwDDEFieldType* pDDEType, + USHORT nRows, USHORT nCols, + SwHoriOrient eAdj, + USHORT nInsTblFlags ) +{ + SwPosition* pPos = GetCrsr()->GetPoint(); + + ASSERT( !GetDoc()->IsIdxInTbl( pPos->nNode ), + "Tabelle in Tabelle nicht erlaubt" ); + + StartAllAction(); + + BOOL bEndUndo = 0 != pPos->nContent.GetIndex(); + if( bEndUndo ) + { + StartUndo( UNDO_START ); + GetDoc()->SplitNode( *pPos ); + } + + SwTable* pTbl = (SwTable*)GetDoc()->InsertTable( *pPos, nRows, nCols, eAdj, + nInsTblFlags|DEFAULT_BORDER ); + SwTableNode* pTblNode = (SwTableNode*)pTbl->GetTabSortBoxes()[ 0 ]-> + GetSttNd()->FindTableNode(); + SwDDETable* pDDETbl = new SwDDETable( *pTbl, pDDEType ); + pTblNode->SetNewTable( pDDETbl ); // setze die DDE-Tabelle + + if( bEndUndo ) + EndUndo( UNDO_END ); + + EndAllAction(); +} + +/*-------------------------------------------------------------------- + Beschreibung: Tabellenfelder einer Tabelle updaten + --------------------------------------------------------------------*/ +void SwEditShell::UpdateTable() +{ + const SwTableNode* pTblNd = IsCrsrInTbl(); + + // Keine Arme keine Kekse + if( pTblNd ) + { + StartAllAction(); + StartUndo(); + EndAllTblBoxEdit(); + SwTableFmlUpdate aTblUpdate( (SwTable*)&pTblNd->GetTable() ); + GetDoc()->UpdateTblFlds( &aTblUpdate ); + EndUndo(); + EndAllAction(); + } +} + + // Change Modus erfragen/setzen +USHORT SwEditShell::GetTblChgMode() const +{ + USHORT nMode; + const SwTableNode* pTblNd = IsCrsrInTbl(); + if( pTblNd ) + nMode = pTblNd->GetTable().GetTblChgMode(); + else + nMode = GetTblChgDefaultMode(); + return nMode; +} + +void SwEditShell::SetTblChgMode( USHORT eMode ) +{ + const SwTableNode* pTblNd = IsCrsrInTbl(); + + // Keine Arme keine Kekse + if( pTblNd ) + { + ((SwTable&)pTblNd->GetTable()).SetTblChgMode( (TblChgMode)eMode ); + if( !GetDoc()->IsModified() ) // Bug 57028 + GetDoc()->SetUndoNoResetModified(); + GetDoc()->SetModified(); + } +} + +BOOL SwEditShell::GetTblBoxFormulaAttrs( SfxItemSet& rSet ) const +{ + SwSelBoxes aBoxes; + if( IsTableMode() ) + ::GetTblSelCrs( *this, aBoxes ); + else + { + SwPaM *pCrsr = GetCrsr(); + do { + SwFrm *pFrm = GetCurrFrm(); + do { + pFrm = pFrm->GetUpper(); + } while ( pFrm && !pFrm->IsCellFrm() ); + if ( pFrm ) + { + SwTableBox *pBox = (SwTableBox*)((SwCellFrm*)pFrm)->GetTabBox(); + aBoxes.Insert( pBox ); + } + } while( FALSE + // JP 24.01.97: dann nur die akt. Zelle!! + /*((SwEditShell*)this)->GoNextCrsr() && pCrsr != GetCrsr()*/ ); + } + + for( USHORT n = 0; n < aBoxes.Count(); ++n ) + { + const SwTableBox* pSelBox = aBoxes[ n ]; + const SwTableBoxFmt* pTblFmt = (SwTableBoxFmt*)pSelBox->GetFrmFmt(); + if( !n ) + { + // Formeln in die externe Darstellung bringen! + const SwTable& rTbl = pSelBox->GetSttNd()->FindTableNode()->GetTable(); + + SwTableFmlUpdate aTblUpdate( (SwTable*)&rTbl ); + aTblUpdate.eFlags = TBL_BOXNAME; + ((SwDoc*)GetDoc())->UpdateTblFlds( &aTblUpdate ); + + rSet.Put( pTblFmt->GetAttrSet() ); + } + else + rSet.MergeValues( pTblFmt->GetAttrSet() ); + } + return 0 != rSet.Count(); +} + +void SwEditShell::SetTblBoxFormulaAttrs( const SfxItemSet& rSet ) +{ + SET_CURR_SHELL( this ); + SwSelBoxes aBoxes; + if( IsTableMode() ) + ::GetTblSelCrs( *this, aBoxes ); + else + { + SwPaM *pCrsr = GetCrsr(); + do { + SwFrm *pFrm = GetCurrFrm(); + do { + pFrm = pFrm->GetUpper(); + } while ( pFrm && !pFrm->IsCellFrm() ); + if ( pFrm ) + { + SwTableBox *pBox = (SwTableBox*)((SwCellFrm*)pFrm)->GetTabBox(); + aBoxes.Insert( pBox ); + } + } while( FALSE + // JP 24.01.97: dann nur die akt. Zelle!! + /*GoNextCrsr() && pCrsr != GetCrsr()*/ ); + } + + // beim setzen einer Formel keine Ueberpruefung mehr vornehmen! + if( SFX_ITEM_SET == rSet.GetItemState( RES_BOXATR_FORMULA )) + ClearTblBoxCntnt(); + + StartAllAction(); + GetDoc()->StartUndo( UNDO_START ); + for( USHORT n = 0; n < aBoxes.Count(); ++n ) + GetDoc()->SetTblBoxFormulaAttrs( *aBoxes[ n ], rSet ); + GetDoc()->EndUndo( UNDO_END ); + EndAllAction(); +} + + // Zellenbreiten ueber Min/Max Berechnung an Tabellenbreite anpassen +void SwEditShell::OptimizeTblBoxWidthMinMax() +{ + SET_CURR_SHELL( this ); + + SwPaM *pCrsr = GetCrsr(); + SwTableNode* pTblNd = pCrsr->GetNode()->FindTableNode(); + if( pTblNd && !pTblNd->GetTable().IsTblComplex() ) + { + SwTabFrm* pTabFrm = 0; + SvULongs aMinArr( 16, 16 ), aMaxArr( 16, 16 ); + + // ueber alle Spalten aller Zeilen und die Min/Max Breiten einsammeln + SwTableLines& rTblLns = pTblNd->GetTable().GetTabLines(); + for( USHORT n = rTblLns.Count(); n; ) + { + SwTableBoxes& rTblBxs = rTblLns[ --n ]->GetTabBoxes(); + for( USHORT i = 0; i < rTblBxs.Count(); ++i ) + { + SwTableBox* pBox = rTblBxs[ i ]; + + ULONG nMinCell = 0; + ULONG nMaxCell = 0; + + // ueber alle Absaetze und die Min/Maxbreiten berechnen + const SwStartNode* pSttNd = pBox->GetSttNd(); + SwNodeIndex aIdx( *pSttNd, 1 ); + SwNodeIndex aEnd( *pSttNd->EndOfSectionNode() ); + while( aIdx < aEnd ) + { + SwTxtNode *pTxtNd = aIdx.GetNode().GetTxtNode(); + if( pTxtNd ) + { + ULONG nMinCnts; + ULONG nMaxCnts; + ULONG nAbsMinCnts; + pTxtNd->GetMinMaxSize( aIdx.GetIndex(), nMinCnts, + nMaxCnts, nAbsMinCnts ); + + if( nMinCnts > nMinCell ) + nMinCell = nMinCnts; + if( nMaxCnts > nMaxCell ) + nMaxCell = nMaxCnts; + + if( !pTabFrm ) + { + SwCntntFrm* pCFrm = pTxtNd->GetFrm( 0, 0, FALSE ); + if( pCFrm ) + pTabFrm = pCFrm->FindTabFrm(); + } + } + aIdx++; + } + + // Mindestbreite fuer Inhalt einhalten + if( nMinCell < MINLAY ) + nMinCell = MINLAY; + if( nMaxCell < MINLAY ) + nMaxCell = MINLAY; + + // Umrandung und Abstand zum Inhalt beachten + const SvxBoxItem& rBoxItem = pBox->GetFrmFmt()->GetBox(); + USHORT nBrdDist = 0; + if( rBoxItem.GetLeft() ) + { + USHORT nWidth = rBoxItem.GetLeft()->GetOutWidth() + + rBoxItem.GetLeft()->GetInWidth(); + if( !nBrdDist ) + nBrdDist = rBoxItem.GetLeft()->GetDistance(); + + nMinCell += nWidth; + nMaxCell += nWidth; + } + if( rBoxItem.GetRight() ) + { + USHORT nWidth = rBoxItem.GetRight()->GetOutWidth() + + rBoxItem.GetRight()->GetInWidth(); + if( !nBrdDist ) + nBrdDist = rBoxItem.GetRight()->GetDistance(); + + nMinCell += nWidth; + nMaxCell += nWidth; + } + if( !nBrdDist ) + nBrdDist = MIN_BORDER_DIST; + nMinCell += 2 * nBrdDist; + nMaxCell += 2 * nBrdDist; + + // Max/Min-Werte in den Arrays merken + if( i >= aMinArr.Count() ) + aMinArr.Insert( nMinCell, i ); + else if( nMinCell > aMinArr[ i ] ) + aMinArr.Replace( nMinCell, i ); + + if( i >= aMaxArr.Count() ) + aMaxArr.Insert( nMaxCell, i ); + else if( nMaxCell > aMaxArr[ i ] ) + aMaxArr.Replace( nMaxCell, i ); + } + } + + ASSERT( pTabFrm, "ohne TabFrm kann nichts berechnet werden" ); + if( pTabFrm ) + { + // 2. Teil die Zellen an die Breiten anpassen + ULONG nTableMin = 0; + ULONG nTableMax = 0; + for( n = aMinArr.Count(); n; ) + { + nTableMin += aMinArr[ --n ]; + nTableMax += aMaxArr[ n ]; + } + + // Dann errechne mal die Breiten fuer die Spalten. Die Werte + // werden im MinArray gesammelt! + + // die MinBreite ist schon groesser als der vorgesehene Platz + ULONG nAbsTabWidth = pTabFrm->Prt().Width(); + if( nTableMin > nAbsTabWidth ) + { + for( n = aMinArr.Count(); n; ) + { + ULONG nColMin = aMinArr[ --n ]; + nColMin *= nAbsTabWidth; + nColMin /= nTableMin; + aMinArr.Replace( nColMin, n ); + } + } + // die MaxBreite ist kleiner als der vorgesehene Platz + else if( nTableMax < nAbsTabWidth ) + { + for( n = aMinArr.Count(); n; ) + { + ULONG nColMax = aMaxArr[ --n ]; + nColMax *= nAbsTabWidth; + nColMax /= nTableMax; + aMinArr.Replace( nColMax, n ); + } + } + else + { + double nW = nAbsTabWidth - nTableMin; + double nD = nTableMax == nTableMin ? 1 : nTableMax - nTableMin; + for( n = 0; n < aMinArr.Count(); ++n ) + { + double nd = aMaxArr[ n ] - aMinArr[ n ]; + ULONG nAbsColWidth = aMinArr[ n ] + (ULONG)(( nd * nW ) / nD ); + aMinArr.Replace( nAbsColWidth, n ); + } + } + + StartAllAction(); + GetDoc()->AppendUndoForAttrTable( pTblNd->GetTable() ); + + for( n = 0; n < rTblLns.Count(); ++n ) + { + SwTableBoxes& rTblBxs = rTblLns[ n ]->GetTabBoxes(); + for( USHORT i = rTblBxs.Count(); i; ) + { + SwTableBox* pBox = rTblBxs[ --i ]; + pBox->ClaimFrmFmt()->SetAttr( SwFmtFrmSize( ATT_VAR_SIZE, + aMinArr[ i ] )); + } + } + + SwTableFmt* pFmt = (SwTableFmt*)pTblNd->GetTable().GetFrmFmt(); + pFmt->LockModify(); + pFmt->SetAttr( SwFmtFrmSize( ATT_VAR_SIZE, nAbsTabWidth )); + pFmt->UnlockModify(); + + EndAllAction(); + } + } +} + +BOOL SwEditShell::IsTableBoxTextFormat() const +{ + if( IsTableMode() ) + return FALSE; + + SwTableBox *pBox = 0; + SwPaM *pCrsr = GetCrsr(); + { + SwFrm *pFrm = GetCurrFrm(); + do { + pFrm = pFrm->GetUpper(); + } while ( pFrm && !pFrm->IsCellFrm() ); + if ( pFrm ) + pBox = (SwTableBox*)((SwCellFrm*)pFrm)->GetTabBox(); + } + + if( !pBox ) + return FALSE; + + ULONG nFmt; + const SfxPoolItem* pItem; + if( SFX_ITEM_SET == pBox->GetFrmFmt()->GetAttrSet().GetItemState( + RES_BOXATR_FORMAT, TRUE, &pItem )) + { + nFmt = ((SwTblBoxNumFormat*)pItem)->GetValue(); + return GetDoc()->GetNumberFormatter()->IsTextFormat( nFmt ) || + NUMBERFORMAT_TEXT == nFmt; + } + + ULONG nNd = pBox->IsValidNumTxtNd(); + if( ULONG_MAX == nNd ) + return TRUE; + + const String& rTxt = GetDoc()->GetNodes()[ nNd ]->GetTxtNode()->GetTxt(); + if( !rTxt.Len() ) + return FALSE; + + double fVal; + return !GetDoc()->GetNumberFormatter()->IsNumberFormat( rTxt, nFmt, fVal ); +} + + +BOOL SwEditShell::SplitTable( USHORT eMode ) +{ + BOOL bRet = FALSE; + SwPaM *pCrsr = GetCrsr(); + if( pCrsr->GetNode()->FindTableNode() ) + { + StartAllAction(); + GetDoc()->StartUndo(); + + bRet = GetDoc()->SplitTable( *pCrsr->GetPoint(), eMode, TRUE ); + + GetDoc()->EndUndo(); + ClearFEShellTabCols(); + EndAllAction(); + } + return bRet; +} + +BOOL SwEditShell::MergeTable( BOOL bWithPrev, USHORT nMode ) +{ + BOOL bRet = FALSE; + SwPaM *pCrsr = GetCrsr(); + if( pCrsr->GetNode()->FindTableNode() ) + { + StartAllAction(); + GetDoc()->StartUndo(); + + bRet = GetDoc()->MergeTable( *pCrsr->GetPoint(), bWithPrev, nMode ); + + GetDoc()->EndUndo(); + ClearFEShellTabCols(); + EndAllAction(); + } + return bRet; +} + +BOOL SwEditShell::CanMergeTable( BOOL bWithPrev, BOOL* pChkNxtPrv ) const +{ + BOOL bRet = FALSE; + const SwPaM *pCrsr = GetCrsr(); + const SwTableNode* pTblNd = pCrsr->GetNode()->FindTableNode(); + if( pTblNd && !pTblNd->GetTable().ISA( SwDDETable )) + { + const SwNodes& rNds = GetDoc()->GetNodes(); + if( pChkNxtPrv ) + { + const SwTableNode* pChkNd = rNds[ pTblNd->GetIndex() - 1 ]->FindTableNode(); + if( pChkNd && !pChkNd->GetTable().ISA( SwDDETable ) ) + *pChkNxtPrv = TRUE, bRet = TRUE; // mit Prev ist moeglich + else + { + pChkNd = rNds[ pTblNd->EndOfSectionIndex() + 1 ]->GetTableNode(); + if( pChkNd && !pChkNd->GetTable().ISA( SwDDETable ) ) + *pChkNxtPrv = FALSE, bRet = TRUE; // mit Next ist moeglich + } + } + else + { + if( bWithPrev ) + pTblNd = rNds[ pTblNd->GetIndex() - 1 ]->FindTableNode(); + else + pTblNd = rNds[ pTblNd->EndOfSectionIndex() + 1 ]->GetTableNode(); + + bRet = pTblNd && !pTblNd->GetTable().ISA( SwDDETable ); + } + } + return bRet; +} + |