/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" #include #include #include #include #include #include #include #include #include #include #include /******************************************************** * Ctor/Dtor ********************************************************/ // verkleideter Copy-Constructor SwEditShell::SwEditShell( SwEditShell& rEdSH, Window *pWindow ) : SwCrsrShell( rEdSH, pWindow ) { } // ctor/dtor SwEditShell::SwEditShell( SwDoc& rDoc, Window *pWindow, const SwViewOption *pOptions ) : SwCrsrShell( rDoc, pWindow, pOptions ) { GetDoc()->GetIDocumentUndoRedo().DoUndo(true); } SwEditShell::~SwEditShell() // USED { } /****************************************************************************** * sal_Bool SwEditShell::IsModified() const ******************************************************************************/ sal_Bool SwEditShell::IsModified() const { return GetDoc()->IsModified(); } /****************************************************************************** * void SwEditShell::SetModified() ******************************************************************************/ void SwEditShell::SetModified() { GetDoc()->SetModified(); } /****************************************************************************** * void SwEditShell::ResetModified() ******************************************************************************/ void SwEditShell::ResetModified() { GetDoc()->ResetModified(); } void SwEditShell::SetUndoNoResetModified() { GetDoc()->SetModified(); GetDoc()->GetIDocumentUndoRedo().SetUndoNoResetModified(); } /****************************************************************************** * void SwEditShell::StartAllAction() ******************************************************************************/ void SwEditShell::StartAllAction() { ViewShell *pSh = this; do { if( pSh->IsA( TYPE( SwEditShell ) ) ) ((SwEditShell*)pSh)->StartAction(); else pSh->StartAction(); pSh = (ViewShell *)pSh->GetNext(); } while(pSh != this); } /****************************************************************************** * void SwEditShell::EndAllAction() ******************************************************************************/ void SwEditShell::EndAllAction() { ViewShell *pSh = this; do { if( pSh->IsA( TYPE( SwEditShell ) ) ) ((SwEditShell*)pSh)->EndAction(); else pSh->EndAction(); pSh = (ViewShell *)pSh->GetNext(); } while(pSh != this); } /****************************************************************************** * void SwEditShell::CalcLayout() ******************************************************************************/ void SwEditShell::CalcLayout() { StartAllAction(); ViewShell::CalcLayout(); ViewShell *pSh = this; do { if ( pSh->GetWin() ) pSh->GetWin()->Invalidate(); pSh = (ViewShell*)pSh->GetNext(); } while ( pSh != this ); EndAllAction(); } /****************************************************************************** * Inhaltsform bestimmen, holen ******************************************************************************/ // OPT: wird fuer jedes Attribut gerufen? sal_uInt16 SwEditShell::GetCntType() const { // nur noch am SPoint ist der Inhalt interessant sal_uInt16 nRet = 0; if( IsTableMode() ) nRet = CNT_TXT; else switch( GetCrsr()->GetNode()->GetNodeType() ) { case ND_TEXTNODE: nRet = CNT_TXT; break; case ND_GRFNODE: nRet = CNT_GRF; break; case ND_OLENODE: nRet = CNT_OLE; break; } ASSERT( nRet, ERR_OUTOFSCOPE ); return nRet; } //------------------------------------------------------------------------------ sal_Bool SwEditShell::HasOtherCnt() const { if ( GetDoc()->GetSpzFrmFmts()->Count() ) return sal_True; const SwNodes &rNds = GetDoc()->GetNodes(); const SwNode *pNd; pNd = &rNds.GetEndOfInserts(); if ( 1 != (pNd->GetIndex() - pNd->StartOfSectionIndex()) ) return sal_True; pNd = &rNds.GetEndOfAutotext(); if ( 1 != (pNd->GetIndex() - pNd->StartOfSectionIndex()) ) return sal_True; return sal_False; } /****************************************************************************** * Zugriffsfunktionen fuer Filename-Behandlung ******************************************************************************/ SwActKontext::SwActKontext(SwEditShell *pShell) : pSh(pShell) { pSh->StartAction(); } SwActKontext::~SwActKontext() { pSh->EndAction(); } /****************************************************************************** * Klasse fuer den automatisierten Aufruf von Start- und * EndCrsrMove(); ******************************************************************************/ SwMvKontext::SwMvKontext(SwEditShell *pShell ) : pSh(pShell) { pSh->SttCrsrMove(); } SwMvKontext::~SwMvKontext() { pSh->EndCrsrMove(); } SwFrmFmt *SwEditShell::GetTableFmt() // OPT: schnellster Test auf Tabelle? { const SwTableNode* pTblNd = IsCrsrInTbl(); return pTblNd ? (SwFrmFmt*)pTblNd->GetTable().GetFrmFmt() : 0; } // OPT: wieso 3x beim neuen Dokument sal_uInt16 SwEditShell::GetTOXTypeCount(TOXTypes eTyp) const { return pDoc->GetTOXTypeCount(eTyp); } void SwEditShell::InsertTOXType(const SwTOXType& rTyp) { pDoc->InsertTOXType(rTyp); } void SwEditShell::DoUndo( sal_Bool bOn ) { GetDoc()->GetIDocumentUndoRedo().DoUndo( bOn ); } sal_Bool SwEditShell::DoesUndo() const { return GetDoc()->GetIDocumentUndoRedo().DoesUndo(); } void SwEditShell::DoGroupUndo( sal_Bool bOn ) { GetDoc()->GetIDocumentUndoRedo().DoGroupUndo( bOn ); } sal_Bool SwEditShell::DoesGroupUndo() const { return GetDoc()->GetIDocumentUndoRedo().DoesGroupUndo(); } void SwEditShell::DelAllUndoObj() { GetDoc()->GetIDocumentUndoRedo().DelAllUndoObj(); } // Zusammenfassen von Kontinuierlichen Insert/Delete/Overwrite von // Charaktern. Default ist sdbcx::Group-Undo. // setzt Undoklammerung auf, liefert nUndoId der Klammerung SwUndoId SwEditShell::StartUndo( SwUndoId eUndoId, const SwRewriter *pRewriter ) { return GetDoc()->GetIDocumentUndoRedo().StartUndo( eUndoId, pRewriter ); } // schliesst Klammerung der nUndoId, nicht vom UI benutzt SwUndoId SwEditShell::EndUndo(SwUndoId eUndoId, const SwRewriter *pRewriter) { return GetDoc()->GetIDocumentUndoRedo().EndUndo(eUndoId, pRewriter); } bool SwEditShell::GetLastUndoInfo(::rtl::OUString *const o_pStr, SwUndoId *const o_pId) const { return GetDoc()->GetIDocumentUndoRedo().GetLastUndoInfo(o_pStr, o_pId); } bool SwEditShell::GetFirstRedoInfo(::rtl::OUString *const o_pStr) const { return GetDoc()->GetIDocumentUndoRedo().GetFirstRedoInfo(o_pStr); } SwUndoId SwEditShell::GetRepeatInfo(::rtl::OUString *const o_pStr) const { return GetDoc()->GetIDocumentUndoRedo().GetRepeatInfo(o_pStr); } // AutoKorrektur - JP 27.01.94 void SwEditShell::AutoCorrect( SvxAutoCorrect& rACorr, sal_Bool bInsert, sal_Unicode cChar ) { SET_CURR_SHELL( this ); StartAllAction(); SwPaM* pCrsr = getShellCrsr( true ); SwTxtNode* pTNd = pCrsr->GetNode()->GetTxtNode(); SwAutoCorrDoc aSwAutoCorrDoc( *this, *pCrsr, cChar ); rACorr.AutoCorrect( aSwAutoCorrDoc, pTNd->GetTxt(), pCrsr->GetPoint()->nContent.GetIndex(), cChar, bInsert ); if( cChar ) SaveTblBoxCntnt( pCrsr->GetPoint() ); EndAllAction(); } void SwEditShell::SetNewDoc(sal_Bool bNew) { GetDoc()->SetNewDoc(bNew); } sal_Bool SwEditShell::GetPrevAutoCorrWord( SvxAutoCorrect& rACorr, String& rWord ) { SET_CURR_SHELL( this ); sal_Bool bRet; SwPaM* pCrsr = getShellCrsr( true ); xub_StrLen nPos = pCrsr->GetPoint()->nContent.GetIndex(); SwTxtNode* pTNd = pCrsr->GetNode()->GetTxtNode(); if( pTNd && nPos ) { SwAutoCorrDoc aSwAutoCorrDoc( *this, *pCrsr, 0 ); bRet = rACorr.GetPrevAutoCorrWord( aSwAutoCorrDoc, pTNd->GetTxt(), nPos, rWord ); } else bRet = sal_False; return bRet; } SwAutoCompleteWord& SwEditShell::GetAutoCompleteWords() { return SwDoc::GetAutoCompleteWords(); }