diff options
author | roopak12345 <mailstorpk@gmail.com> | 2014-03-09 21:40:44 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-03-09 21:53:34 +0100 |
commit | a652ea0fc4cc789f715b461819127ee80afa9e6f (patch) | |
tree | 0858def8201a45024721f4a98b537cd3274ac4c5 /sw/source/ui/lingu/hhcwrp.cxx | |
parent | f4dfd811344604e119670eb7cdda0ab2e85bcea5 (diff) |
fdo#70422 Moved the linked files from sw/source/ui to a new core/uibase dir
Moved the files linked in sw/Library_sw.mk from sw/source/ui to
sw/source/core/uibase and modified the make files as per the new
directory location.
Reviewed on:
https://gerrit.libreoffice.org/8447
Change-Id: I05f6ccdeee5e76fb0ae477d16721d9ddc6eaff32
Diffstat (limited to 'sw/source/ui/lingu/hhcwrp.cxx')
-rw-r--r-- | sw/source/ui/lingu/hhcwrp.cxx | 720 |
1 files changed, 0 insertions, 720 deletions
diff --git a/sw/source/ui/lingu/hhcwrp.cxx b/sw/source/ui/lingu/hhcwrp.cxx deleted file mode 100644 index b5d1950f24f3..000000000000 --- a/sw/source/ui/lingu/hhcwrp.cxx +++ /dev/null @@ -1,720 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * 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 . - */ - -#include <hintids.hxx> -#include <view.hxx> -#include <wrtsh.hxx> -#include <swundo.hxx> -#include <globals.hrc> -#include <splargs.hxx> - -#include <vcl/msgbox.hxx> -#include <editeng/unolingu.hxx> -#include <editeng/langitem.hxx> -#include <editeng/fontitem.hxx> -#include <rtl/ustring.hxx> -#include <com/sun/star/text/RubyAdjust.hpp> -#include <hhcwrp.hxx> -#include <sdrhhcwrap.hxx> -#include <doc.hxx> -#include <docsh.hxx> -#include <mdiexp.hxx> -#include <edtwin.hxx> -#include <crsskip.hxx> -#include <index.hxx> -#include <pam.hxx> -#include <swcrsr.hxx> -#include <viscrs.hxx> -#include <ndtxt.hxx> -#include <fmtruby.hxx> -#include <breakit.hxx> - -#include <olmenu.hrc> - -#include <unomid.h> - -using namespace ::com::sun::star; -using namespace ::com::sun::star::text; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::linguistic2; -using namespace ::com::sun::star::i18n; - -// Description: Turn off frame/object shell if applicable - -static void lcl_ActivateTextShell( SwWrtShell & rWrtSh ) -{ - if( rWrtSh.IsSelFrmMode() || rWrtSh.IsObjSelected() ) - rWrtSh.EnterStdMode(); -} - -class SwKeepConversionDirectionStateContext -{ -public: - SwKeepConversionDirectionStateContext() - { - //!! hack to transport the current conversion direction state settings - //!! into the next incarnation that iterates over the drawing objets - //!! ( see SwHHCWrapper::~SwHHCWrapper() ) - editeng::HangulHanjaConversion::SetUseSavedConversionDirectionState( true ); - } - - ~SwKeepConversionDirectionStateContext() - { - editeng::HangulHanjaConversion::SetUseSavedConversionDirectionState( false ); - } -}; - -SwHHCWrapper::SwHHCWrapper( - SwView* pSwView, - const uno::Reference< uno::XComponentContext >& rxContext, - LanguageType nSourceLanguage, - LanguageType nTargetLanguage, - const Font *pTargetFont, - sal_Int32 nConvOptions, - bool bIsInteractive, - bool bStart, bool bOther, bool bSelection ) - : editeng::HangulHanjaConversion( &pSwView->GetEditWin(), rxContext, - LanguageTag::convertToLocale( nSourceLanguage ), - LanguageTag::convertToLocale( nTargetLanguage ), - pTargetFont, - nConvOptions, - bIsInteractive ) - , m_pView( pSwView ) - , m_pWin( &pSwView->GetEditWin() ) - , m_rWrtShell( pSwView->GetWrtShell() ) - , m_pConvArgs( 0 ) - , m_nLastPos( 0 ) - , m_nUnitOffset( 0 ) - , m_nPageCount( 0 ) - , m_nPageStart( 0 ) - , m_bIsDrawObj( false ) - , m_bIsOtherCntnt( bOther ) - , m_bStartChk( bOther ) - , m_bIsSelection( bSelection ) - , m_bStartDone( bOther || bStart ) - , m_bEndDone( false ) -{ -} - -SwHHCWrapper::~SwHHCWrapper() -{ - delete m_pConvArgs; - - m_rWrtShell.SetCareWin( NULL ); - - // check for existence of a draw view which means that there are - // (or previously were) draw objects present in the document. - // I.e. we like to check those too. - if ( IsDrawObj() /*&& bLastRet*/ && m_pView->GetWrtShell().HasDrawView() ) - { - Cursor *pSave = m_pView->GetWindow()->GetCursor(); - { - SwKeepConversionDirectionStateContext aContext; - - SdrHHCWrapper aSdrConvWrap( m_pView, GetSourceLanguage(), - GetTargetLanguage(), GetTargetFont(), - GetConversionOptions(), IsInteractive() ); - aSdrConvWrap.StartTextConversion(); - } - m_pView->GetWindow()->SetCursor( pSave ); - } - - if( m_nPageCount ) - ::EndProgress( m_pView->GetDocShell() ); - - // finally for chinese translation we need to change the documents - // default language and font to the new ones to be used. - LanguageType nTargetLang = GetTargetLanguage(); - if (IsChinese( nTargetLang )) - { - SwDoc *pDoc = m_pView->GetDocShell()->GetDoc(); - - //!! Note: This also effects the default language of text boxes (EditEngine/EditView) !! - pDoc->SetDefault( SvxLanguageItem( nTargetLang, RES_CHRATR_CJK_LANGUAGE ) ); - - const Font *pFont = GetTargetFont(); - if (pFont) - { - SvxFontItem aFontItem( pFont->GetFamily(), pFont->GetName(), - pFont->GetStyleName(), pFont->GetPitch(), - pFont->GetCharSet(), RES_CHRATR_CJK_FONT ); - pDoc->SetDefault( aFontItem ); - } - - } -} - -void SwHHCWrapper::GetNextPortion( - OUString& rNextPortion, - LanguageType& rLangOfPortion, - bool bAllowChanges ) -{ - m_pConvArgs->bAllowImplicitChangesForNotConvertibleText = bAllowChanges; - - FindConvText_impl(); - rNextPortion = m_pConvArgs->aConvText; - rLangOfPortion = m_pConvArgs->nConvTextLang; - - m_nUnitOffset = 0; - - // build last pos from currently selected text - SwPaM* pCrsr = m_rWrtShell.GetCrsr(); - m_nLastPos = pCrsr->Start()->nContent.GetIndex(); -} - -void SwHHCWrapper::SelectNewUnit_impl( sal_Int32 nUnitStart, sal_Int32 nUnitEnd ) -{ - SwPaM *pCrsr = m_rWrtShell.GetCrsr(); - pCrsr->GetPoint()->nContent = m_nLastPos; - pCrsr->DeleteMark(); - - m_rWrtShell.Right( CRSR_SKIP_CHARS, /*bExpand*/ sal_False, - (sal_uInt16) (m_nUnitOffset + nUnitStart), sal_True ); - pCrsr->SetMark(); - m_rWrtShell.Right( CRSR_SKIP_CHARS, /*bExpand*/ sal_True, - (sal_uInt16) (nUnitEnd - nUnitStart), sal_True ); - // end selection now. Otherwise SHIFT+HOME (extending the selection) - // won't work when the dialog is closed without any replacement. - // (see #116346#) - m_rWrtShell.EndSelect(); -} - -void SwHHCWrapper::HandleNewUnit( - const sal_Int32 nUnitStart, const sal_Int32 nUnitEnd ) -{ - OSL_ENSURE( nUnitStart >= 0 && nUnitEnd >= nUnitStart, "wrong arguments" ); - if (!(0 <= nUnitStart && nUnitStart <= nUnitEnd)) - return; - - lcl_ActivateTextShell( m_rWrtShell ); - - m_rWrtShell.StartAllAction(); - - // select current unit - SelectNewUnit_impl( nUnitStart, nUnitEnd ); - - m_rWrtShell.EndAllAction(); -} - -void SwHHCWrapper::ChangeText( const OUString &rNewText, - const OUString& rOrigText, - const uno::Sequence< sal_Int32 > *pOffsets, - SwPaM *pCrsr ) -{ - //!! please see also TextConvWrapper::ChangeText with is a modified - //!! copy of this code - - OSL_ENSURE( !rNewText.isEmpty(), "unexpected empty string" ); - if (rNewText.isEmpty()) - return; - - if (pOffsets && pCrsr) // try to keep as much attributation as possible ? - { - // remember cursor start position for later setting of the cursor - const SwPosition *pStart = pCrsr->Start(); - const sal_Int32 nStartIndex = pStart->nContent.GetIndex(); - const SwNodeIndex aStartNodeIndex = pStart->nNode; - SwTxtNode *pStartTxtNode = aStartNodeIndex.GetNode().GetTxtNode(); - - const sal_Int32 nIndices = pOffsets->getLength(); - const sal_Int32 *pIndices = pOffsets->getConstArray(); - sal_Int32 nConvTextLen = rNewText.getLength(); - sal_Int32 nPos = 0; - sal_Int32 nChgPos = -1; - sal_Int32 nChgLen = 0; - sal_Int32 nConvChgPos = -1; - sal_Int32 nConvChgLen = 0; - - // offset to calculate the position in the text taking into - // account that text may have been replaced with new text of - // different length. Negative values allowed! - long nCorrectionOffset = 0; - - OSL_ENSURE(nIndices == 0 || nIndices == nConvTextLen, - "mismatch between string length and sequence length!" ); - - // find all substrings that need to be replaced (and only those) - while (true) - { - // get index in original text that matches nPos in new text - sal_Int32 nIndex; - if (nPos < nConvTextLen) - nIndex = nPos < nIndices ? pIndices[nPos] : nPos; - else - { - nPos = nConvTextLen; - nIndex = rOrigText.getLength(); - } - - if (rOrigText[nIndex] == rNewText[nPos] || - nPos == nConvTextLen /* end of string also terminates non-matching char sequence */) - { - // substring that needs to be replaced found? - if (nChgPos != -1 && nConvChgPos != -1) - { - nChgLen = nIndex - nChgPos; - nConvChgLen = nPos - nConvChgPos; -#if OSL_DEBUG_LEVEL > 1 - OUString aInOrig( rOrigText.copy( nChgPos, nChgLen ) ); -#endif - OUString aInNew( rNewText.copy( nConvChgPos, nConvChgLen ) ); - - // set selection to sub string to be replaced in original text - sal_Int32 nChgInNodeStartIndex = nStartIndex + nCorrectionOffset + nChgPos; - OSL_ENSURE( m_rWrtShell.GetCrsr()->HasMark(), "cursor misplaced (nothing selected)" ); - m_rWrtShell.GetCrsr()->GetMark()->nContent.Assign( pStartTxtNode, nChgInNodeStartIndex ); - m_rWrtShell.GetCrsr()->GetPoint()->nContent.Assign( pStartTxtNode, nChgInNodeStartIndex + nChgLen ); -#if OSL_DEBUG_LEVEL > 1 - OUString aSelTxt1( m_rWrtShell.GetSelTxt() ); -#endif - - // replace selected sub string with the corresponding - // sub string from the new text while keeping as - // much from the attributes as possible - ChangeText_impl( aInNew, true ); - - nCorrectionOffset += nConvChgLen - nChgLen; - - nChgPos = -1; - nConvChgPos = -1; - } - } - else - { - // begin of non-matching char sequence found ? - if (nChgPos == -1 && nConvChgPos == -1) - { - nChgPos = nIndex; - nConvChgPos = nPos; - } - } - if (nPos >= nConvTextLen) - break; - ++nPos; - } - - // set cursor to the end of all the new text - // (as it would happen after ChangeText_impl (Delete and Insert) - // of the whole text in the 'else' branch below) - m_rWrtShell.ClearMark(); - m_rWrtShell.GetCrsr()->Start()->nContent.Assign( pStartTxtNode, nStartIndex + nConvTextLen ); - } - else - { - ChangeText_impl( rNewText, false ); - } -} - -void SwHHCWrapper::ChangeText_impl( const OUString &rNewText, bool bKeepAttributes ) -{ - if (bKeepAttributes) - { - // get item set with all relevant attributes - sal_uInt16 aRanges[] = { - RES_CHRATR_BEGIN, RES_FRMATR_END, - 0, 0, 0 }; - SfxItemSet aItemSet( m_rWrtShell.GetAttrPool(), aRanges ); - // get all attributes spanning the whole selection in order to - // restore those for the new text - m_rWrtShell.GetCurAttr( aItemSet ); - -#if OSL_DEBUG_LEVEL > 1 - OUString aSelTxt1( m_rWrtShell.GetSelTxt() ); -#endif - m_rWrtShell.Delete(); - m_rWrtShell.Insert( rNewText ); - - // select new inserted text (currently the Point is right after the new text) - if (!m_rWrtShell.GetCrsr()->HasMark()) - m_rWrtShell.GetCrsr()->SetMark(); - SwPosition *pMark = m_rWrtShell.GetCrsr()->GetMark(); - pMark->nContent = pMark->nContent.GetIndex() - rNewText.getLength(); -#if OSL_DEBUG_LEVEL > 1 - OUString aSelTxt2( m_rWrtShell.GetSelTxt() ); -#endif - - // since 'SetAttr' below functions like merging with the attributes - // from the itemset with any existing ones we have to get rid of all - // all attributes now. (Those attributes that may take effect left - // to the position where the new text gets inserted after the old text - // was deleted) - m_rWrtShell.ResetAttr(); - // apply previously saved attributes to new text - m_rWrtShell.SetAttrSet( aItemSet ); - } - else - { - m_rWrtShell.Delete(); - m_rWrtShell.Insert( rNewText ); - } -} - -void SwHHCWrapper::ReplaceUnit( - const sal_Int32 nUnitStart, const sal_Int32 nUnitEnd, - const OUString& rOrigText, - const OUString& rReplaceWith, - const uno::Sequence< sal_Int32 > &rOffsets, - ReplacementAction eAction, - LanguageType *pNewUnitLanguage ) -{ - OSL_ENSURE( nUnitStart >= 0 && nUnitEnd >= nUnitStart, "wrong arguments" ); - if (!(nUnitStart >= 0 && nUnitEnd >= nUnitStart)) - return; - - lcl_ActivateTextShell( m_rWrtShell ); - - // replace the current word - m_rWrtShell.StartAllAction(); - - // select current unit - SelectNewUnit_impl( nUnitStart, nUnitEnd ); - - OUString aOrigTxt( m_rWrtShell.GetSelTxt() ); - OUString aNewTxt( rReplaceWith ); - OSL_ENSURE( aOrigTxt == rOrigText, "!! text mismatch !!" ); - SwFmtRuby *pRuby = 0; - bool bRubyBelow = false; - OUString aNewOrigText; - switch (eAction) - { - case eExchange : - break; - case eReplacementBracketed : - { - aNewTxt = aOrigTxt + "(" + rReplaceWith + ")"; - } - break; - case eOriginalBracketed : - { - aNewTxt = rReplaceWith + "(" + aOrigTxt + ")"; - } - break; - case eReplacementAbove : - { - pRuby = new SwFmtRuby( rReplaceWith ); - } - break; - case eOriginalAbove : - { - pRuby = new SwFmtRuby( aOrigTxt ); - aNewOrigText = rReplaceWith; - } - break; - case eReplacementBelow : - { - pRuby = new SwFmtRuby( rReplaceWith ); - bRubyBelow = true; - } - break; - case eOriginalBelow : - { - pRuby = new SwFmtRuby( aOrigTxt ); - aNewOrigText = rReplaceWith; - bRubyBelow = true; - } - break; - default: - OSL_FAIL("unexpected case" ); - } - m_nUnitOffset += nUnitStart + aNewTxt.getLength(); - - if (pRuby) - { - m_rWrtShell.StartUndo( UNDO_SETRUBYATTR ); - if (!aNewOrigText.isEmpty()) - { - // according to FT we currently should not bother about keeping - // attributes in Hangul/Hanja conversion - ChangeText( aNewOrigText, rOrigText, NULL, NULL ); - - //!! since Delete, Insert in 'ChangeText' do not set the WrtShells - //!! bInSelect flag - //!! back to false we do it now manually in order for the selection - //!! to be done properly in the following call to Left. - // We didn't fix it in Delete and Insert since it is currently - // unclear if someone depends on this incorrect behvaiour - // of the flag. - m_rWrtShell.EndSelect(); - - m_rWrtShell.Left( 0, sal_True, aNewOrigText.getLength(), sal_True, sal_True ); - } - - pRuby->SetPosition( static_cast<sal_uInt16>(bRubyBelow) ); - pRuby->SetAdjustment( RubyAdjust_CENTER ); - -#if OSL_DEBUG_LEVEL > 1 - SwPaM *pPaM = m_rWrtShell.GetCrsr(); - (void)pPaM; -#endif - m_rWrtShell.SetAttrItem(*pRuby); - delete pRuby; - m_rWrtShell.EndUndo( UNDO_SETRUBYATTR ); - } - else - { - m_rWrtShell.StartUndo( UNDO_OVERWRITE ); - - // according to FT we should currently not bother about keeping - // attributes in Hangul/Hanja conversion and leave that untouched. - // Thus we do this only for Chinese translation... - const bool bIsChineseConversion = IsChinese( GetSourceLanguage() ); - if (bIsChineseConversion) - ChangeText( aNewTxt, rOrigText, &rOffsets, m_rWrtShell.GetCrsr() ); - else - ChangeText( aNewTxt, rOrigText, NULL, NULL ); - - // change language and font if necessary - if (bIsChineseConversion) - { - m_rWrtShell.SetMark(); - m_rWrtShell.GetCrsr()->GetMark()->nContent -= aNewTxt.getLength(); - - OSL_ENSURE( GetTargetLanguage() == LANGUAGE_CHINESE_SIMPLIFIED || GetTargetLanguage() == LANGUAGE_CHINESE_TRADITIONAL, - "SwHHCWrapper::ReplaceUnit : unexpected target language" ); - - sal_uInt16 aRanges[] = { - RES_CHRATR_CJK_LANGUAGE, RES_CHRATR_CJK_LANGUAGE, - RES_CHRATR_CJK_FONT, RES_CHRATR_CJK_FONT, - 0, 0, 0 }; - - SfxItemSet aSet( m_rWrtShell.GetAttrPool(), aRanges ); - if (pNewUnitLanguage) - { - aSet.Put( SvxLanguageItem( *pNewUnitLanguage, RES_CHRATR_CJK_LANGUAGE ) ); - } - - const Font *pTargetFont = GetTargetFont(); - OSL_ENSURE( pTargetFont, "target font missing?" ); - if (pTargetFont && pNewUnitLanguage) - { - SvxFontItem aFontItem = (SvxFontItem&) aSet.Get( RES_CHRATR_CJK_FONT ); - aFontItem.SetFamilyName( pTargetFont->GetName()); - aFontItem.SetFamily( pTargetFont->GetFamily()); - aFontItem.SetStyleName( pTargetFont->GetStyleName()); - aFontItem.SetPitch( pTargetFont->GetPitch()); - aFontItem.SetCharSet( pTargetFont->GetCharSet() ); - aSet.Put( aFontItem ); - } - - m_rWrtShell.SetAttrSet( aSet ); - - m_rWrtShell.ClearMark(); - } - - m_rWrtShell.EndUndo( UNDO_OVERWRITE ); - } - - m_rWrtShell.EndAllAction(); -} - -bool SwHHCWrapper::HasRubySupport() const -{ - return true; -} - -void SwHHCWrapper::Convert() -{ - OSL_ENSURE( m_pConvArgs == 0, "NULL pointer expected" ); - { - SwPaM *pCrsr = m_pView->GetWrtShell().GetCrsr(); - SwPosition* pSttPos = pCrsr->Start(); - SwPosition* pEndPos = pCrsr->End(); - - if (pSttPos->nNode.GetNode().IsTxtNode() && - pEndPos->nNode.GetNode().IsTxtNode()) - { - m_pConvArgs = new SwConversionArgs( GetSourceLanguage(), - pSttPos->nNode.GetNode().GetTxtNode(), pSttPos->nContent, - pEndPos->nNode.GetNode().GetTxtNode(), pEndPos->nContent ); - } - else // we are not in the text (maybe a graphic or OLE object is selected) let's start from the top - { - // get PaM that points to the start of the document - SwNode& rNode = m_pView->GetDocShell()->GetDoc()->GetNodes().GetEndOfContent(); - SwPaM aPam(rNode); - aPam.Move( fnMoveBackward, fnGoDoc ); // move to start of document - - pSttPos = aPam.GetPoint(); //! using a PaM here makes sure we will get only text nodes - SwTxtNode *pTxtNode = pSttPos->nNode.GetNode().GetTxtNode(); - // just in case we check anyway... - if (!pTxtNode || !pTxtNode->IsTxtNode()) - return; - m_pConvArgs = new SwConversionArgs( GetSourceLanguage(), - pTxtNode, pSttPos->nContent, - pTxtNode, pSttPos->nContent ); - } - OSL_ENSURE( m_pConvArgs->pStartNode && m_pConvArgs->pStartNode->IsTxtNode(), - "failed to get proper start text node" ); - OSL_ENSURE( m_pConvArgs->pEndNode && m_pConvArgs->pEndNode->IsTxtNode(), - "failed to get proper end text node" ); - - // chinese conversion specific settings - OSL_ENSURE( IsChinese( GetSourceLanguage() ) == IsChinese( GetTargetLanguage() ), - "source and target language mismatch?" ); - if (IsChinese( GetTargetLanguage() )) - { - m_pConvArgs->nConvTargetLang = GetTargetLanguage(); - m_pConvArgs->pTargetFont = GetTargetFont(); - m_pConvArgs->bAllowImplicitChangesForNotConvertibleText = true; - } - - // if it is not just a selection and we are about to begin - // with the current conversion for the very first time - // we need to find the start of the current (initial) - // convertible unit in order for the text conversion to give - // the correct result for that. Since it is easier to obtain - // the start of the word we use that though. - if (!pCrsr->HasMark()) // is not a selection? - { - // since #118246 / #117803 still occurs if the cursor is placed - // between the two chinese characters to be converted (because both - // of them are words on their own!) using the word boundary here does - // not work. Thus since chinese conversion is not interactive we start - // at the begin of the paragraph to solve the problem, i.e. have the - // TextConversion service get those characters together in the same call. - sal_Int32 nStartIdx = -1; - if (editeng::HangulHanjaConversion::IsChinese( GetSourceLanguage() ) ) - nStartIdx = 0; - else - { - OUString aText( m_pConvArgs->pStartNode->GetTxt() ); - const sal_Int32 nPos = m_pConvArgs->pStartIdx->GetIndex(); - Boundary aBoundary( g_pBreakIt->GetBreakIter()-> - getWordBoundary( aText, nPos, g_pBreakIt->GetLocale( m_pConvArgs->nConvSrcLang ), - WordType::DICTIONARY_WORD, sal_True ) ); - - // valid result found? - if (aBoundary.startPos < aText.getLength() && - aBoundary.startPos != aBoundary.endPos) - { - nStartIdx = aBoundary.startPos; - } - } - - if (nStartIdx != -1) - *m_pConvArgs->pStartIdx = nStartIdx; - } - } - - if ( m_bIsOtherCntnt ) - ConvStart_impl( m_pConvArgs, SVX_SPELL_OTHER ); - else - { - m_bStartChk = false; - ConvStart_impl( m_pConvArgs, SVX_SPELL_BODY_END ); - } - - ConvertDocument(); - - ConvEnd_impl( m_pConvArgs ); -} - -bool SwHHCWrapper::ConvNext_impl( ) -{ - //! modified version of SvxSpellWrapper::SpellNext - - // no change of direction so the desired region is fully processed - if( m_bStartChk ) - m_bStartDone = true; - else - m_bEndDone = true; - - if( m_bIsOtherCntnt && m_bStartDone && m_bEndDone ) // document completely checked? - { - return false; - } - - bool bGoOn = false; - - if ( m_bIsOtherCntnt ) - { - m_bStartChk = false; - ConvStart_impl( m_pConvArgs, SVX_SPELL_BODY ); - bGoOn = true; - } - else if ( m_bStartDone && m_bEndDone ) - { - // body region done, ask about special region - if( HasOtherCnt_impl() ) - { - ConvStart_impl( m_pConvArgs, SVX_SPELL_OTHER ); - m_bIsOtherCntnt = bGoOn = true; - } - } - else - { - m_bStartChk = !m_bStartDone; - ConvStart_impl( m_pConvArgs, m_bStartChk ? SVX_SPELL_BODY_START : SVX_SPELL_BODY_END ); - bGoOn = true; - } - return bGoOn; -} - -bool SwHHCWrapper::FindConvText_impl() -{ - //! modified version of SvxSpellWrapper::FindSpellError - - bool bFound = false; - - m_pWin->EnterWait(); - bool bConv = true; - - while ( bConv ) - { - bFound = ConvContinue_impl( m_pConvArgs ); - if (bFound) - { - bConv = false; - } - else - { - ConvEnd_impl( m_pConvArgs ); - bConv = ConvNext_impl(); - } - } - m_pWin->LeaveWait(); - return bFound; -} - -bool SwHHCWrapper::HasOtherCnt_impl() -{ - return m_bIsSelection ? false : m_rWrtShell.HasOtherCnt(); -} - -void SwHHCWrapper::ConvStart_impl( SwConversionArgs /* [out] */ *pConversionArgs, SvxSpellArea eArea ) -{ - SetDrawObj( SVX_SPELL_OTHER == eArea ); - m_pView->SpellStart( eArea, m_bStartDone, m_bEndDone, /* [out] */ pConversionArgs ); -} - -void SwHHCWrapper::ConvEnd_impl( SwConversionArgs *pConversionArgs ) -{ - m_pView->SpellEnd( pConversionArgs ); -} - -bool SwHHCWrapper::ConvContinue_impl( SwConversionArgs *pConversionArgs ) -{ - bool bProgress = !m_bIsDrawObj && !m_bIsSelection; - pConversionArgs->aConvText = OUString(); - pConversionArgs->nConvTextLang = LANGUAGE_NONE; - m_pView->GetWrtShell().SpellContinue( &m_nPageCount, bProgress ? &m_nPageStart : NULL, pConversionArgs ); - return !pConversionArgs->aConvText.isEmpty(); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |