summaryrefslogtreecommitdiff
path: root/svx/source/dialog/splwrap.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/dialog/splwrap.cxx')
-rw-r--r--svx/source/dialog/splwrap.cxx642
1 files changed, 0 insertions, 642 deletions
diff --git a/svx/source/dialog/splwrap.cxx b/svx/source/dialog/splwrap.cxx
deleted file mode 100644
index ad3a973fc2a8..000000000000
--- a/svx/source/dialog/splwrap.cxx
+++ /dev/null
@@ -1,642 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: splwrap.cxx,v $
- * $Revision: 1.19 $
- *
- * 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_svx.hxx"
-#include<rtl/ustring.hxx>
-#include <tools/shl.hxx>
-#include <vcl/wrkwin.hxx>
-#include <vcl/svapp.hxx>
-#include <vcl/msgbox.hxx>
-#include <tools/debug.hxx>
-
-#ifndef __RSC
-#include <tools/errinf.hxx>
-#endif
-#include <svxerr.hxx>
-#include <dlgutil.hxx>
-#include <unolingu.hxx>
-#include <sfx2/sfxuno.hxx>
-#include <linguistic/lngprops.hxx>
-#include <com/sun/star/frame/XStorable.hpp>
-
-#include <map>
-
-#include <svx/svxenum.hxx>
-#include "hyphen.hxx" // Der HyphenDialog
-#include <svx/splwrap.hxx> // Der Wrapper
-#include <svx/thesdlg.hxx> // ThesaurusDlg
-#include <svx/dialmgr.hxx>
-
-#include <svx/dialogs.hrc>
-
-
-#define WAIT_ON() if(pWin != NULL) { pWin->EnterWait(); }
-
-#define WAIT_OFF() if(pWin != NULL) { pWin->LeaveWait(); }
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::linguistic2;
-
-
-// misc functions ---------------------------------------------
-
-void SvxPrepareAutoCorrect( String &rOldText, String &rNewText )
-{
- // This function should be used to strip (or add) trailing '.' from
- // the strings before passing them on to the autocorrect function in
- // order that the autocorrect function will hopefully
- // works properly with normal words and abbreviations (with trailing '.')
- // independ of if they are at the end of the sentence or not.
- //
- // rOldText: text to be replaced
- // rNewText: replacement text
-
- xub_StrLen nOldLen = rOldText.Len(),
- nNewLen = rNewText.Len();
- if (nOldLen && nNewLen)
- {
- sal_Bool bOldHasDot = sal_Unicode( '.' ) == rOldText.GetChar( nOldLen - 1 ),
- bNewHasDot = sal_Unicode( '.' ) == rNewText.GetChar( nNewLen - 1 );
- if (bOldHasDot && !bNewHasDot
- /*this is: !(bOldHasDot && bNewHasDot) && bOldHasDot*/)
- rOldText.Erase( nOldLen - 1 );
- }
-}
-
-// -----------------------------------------------------------------------
-
-#define SVX_LANG_NEED_CHECK 0
-#define SVX_LANG_OK 1
-#define SVX_LANG_MISSING 2
-#define SVX_LANG_MISSING_DO_WARN 3
-
-#define SVX_FLAGS_NEW
-
-
-struct lt_LanguageType
-{
- bool operator()( LanguageType n1, LanguageType n2 ) const
- {
- return n1 < n2;
- }
-};
-
-typedef std::map< LanguageType, USHORT, lt_LanguageType > LangCheckState_map_t;
-
-static LangCheckState_map_t & GetLangCheckState()
-{
- static LangCheckState_map_t aLangCheckState;
- return aLangCheckState;
-}
-
-void SvxSpellWrapper::ShowLanguageErrors()
-{
- // display message boxes for languages not available for
- // spellchecking or hyphenation
- LangCheckState_map_t &rLCS = GetLangCheckState();
- LangCheckState_map_t::iterator aIt( rLCS.begin() );
- while (aIt != rLCS.end())
- {
- LanguageType nLang = aIt->first;
- sal_uInt16 nVal = aIt->second;
- sal_uInt16 nTmpSpell = nVal & 0x00FF;
- sal_uInt16 nTmpHyph = (nVal >> 8) & 0x00FF;
-
- if (SVX_LANG_MISSING_DO_WARN == nTmpSpell)
- {
- String aErr( ::GetLanguageString( nLang ) );
- ErrorHandler::HandleError(
- *new StringErrorInfo( ERRCODE_SVX_LINGU_LANGUAGENOTEXISTS, aErr ) );
- nTmpSpell = SVX_LANG_MISSING;
- }
- if (SVX_LANG_MISSING_DO_WARN == nTmpHyph)
- {
- String aErr( ::GetLanguageString( nLang ) );
- ErrorHandler::HandleError(
- *new StringErrorInfo( ERRCODE_SVX_LINGU_LANGUAGENOTEXISTS, aErr ) );
- nTmpHyph = SVX_LANG_MISSING;
- }
-
- rLCS[ nLang ] = (nTmpHyph << 8) | nTmpSpell;
- ++aIt;
- }
-
-}
-
-SvxSpellWrapper::~SvxSpellWrapper()
-{
-}
-
-/*--------------------------------------------------------------------
- * Beschreibung: Ctor, die Pruefreihenfolge wird festgelegt
- *
- * !bStart && !bOtherCntnt: BODY_END, BODY_START, OTHER
- * !bStart && bOtherCntnt: OTHER, BODY
- * bStart && !bOtherCntnt: BODY_END, OTHER
- * bStart && bOtherCntnt: OTHER
- *
- --------------------------------------------------------------------*/
-
-SvxSpellWrapper::SvxSpellWrapper( Window* pWn,
- Reference< XSpellChecker1 > &xSpellChecker,
- const sal_Bool bStart, const sal_Bool bIsAllRight,
- const sal_Bool bOther, const sal_Bool bRevAllow ) :
-
- pWin ( pWn ),
- xSpell ( xSpellChecker ),
- bOtherCntnt ( bOther ),
- bDialog ( sal_False ),
- bHyphen ( sal_False ),
- bAuto ( sal_False ),
- bStartChk ( bOther ),
- bRevAllowed ( bRevAllow ),
- bAllRight ( bIsAllRight )
-{
- Reference< beans::XPropertySet > xProp( SvxGetLinguPropertySet() );
- sal_Bool bWrapReverse = xProp.is() ?
- *(sal_Bool*)xProp->getPropertyValue(
- ::rtl::OUString::createFromAscii(UPN_IS_WRAP_REVERSE) ).getValue()
- : sal_False;
- bReverse = bRevAllow && bWrapReverse;
- bStartDone = bOther || ( !bReverse && bStart );
- bEndDone = bReverse && bStart && !bOther;
-}
-
-// -----------------------------------------------------------------------
-
-SvxSpellWrapper::SvxSpellWrapper( Window* pWn,
- Reference< XHyphenator > &xHyphenator,
- const sal_Bool bStart, const sal_Bool bOther ) :
- pWin ( pWn ),
- xHyph ( xHyphenator ),
- bOtherCntnt ( bOther ),
- bDialog ( sal_False ),
- bHyphen ( sal_False ),
- bAuto ( sal_False ),
- bReverse ( sal_False ),
- bStartDone ( bOther || ( !bReverse && bStart ) ),
- bEndDone ( bReverse && bStart && !bOther ),
- bStartChk ( bOther ),
- bRevAllowed ( sal_False ),
- bAllRight ( sal_True )
-{
-}
-
-// -----------------------------------------------------------------------
-
-sal_Int16 SvxSpellWrapper::CheckSpellLang(
- Reference< XSpellChecker1 > xSpell, sal_Int16 nLang)
-{
- LangCheckState_map_t &rLCS = GetLangCheckState();
-
- LangCheckState_map_t::iterator aIt( rLCS.find( nLang ) );
- sal_uInt16 nVal = aIt == rLCS.end() ? SVX_LANG_NEED_CHECK : aIt->second;
-
- if (aIt == rLCS.end())
- rLCS[ nLang ] = nVal;
-
- if (SVX_LANG_NEED_CHECK == (nVal & 0x00FF))
- {
- sal_uInt16 nTmpVal = SVX_LANG_MISSING_DO_WARN;
- if (xSpell.is() && xSpell->hasLanguage( nLang ))
- nTmpVal = SVX_LANG_OK;
- nVal &= 0xFF00;
- nVal |= nTmpVal;
-
- rLCS[ nLang ] = nVal;
- }
-
- return (sal_Int16) nVal;
-}
-
-sal_Int16 SvxSpellWrapper::CheckHyphLang(
- Reference< XHyphenator > xHyph, sal_Int16 nLang)
-{
- LangCheckState_map_t &rLCS = GetLangCheckState();
-
- LangCheckState_map_t::iterator aIt( rLCS.find( nLang ) );
- sal_uInt16 nVal = aIt == rLCS.end() ? 0 : aIt->second;
-
- if (aIt == rLCS.end())
- rLCS[ nLang ] = nVal;
-
- if (SVX_LANG_NEED_CHECK == ((nVal >> 8) & 0x00FF))
- {
- sal_uInt16 nTmpVal = SVX_LANG_MISSING_DO_WARN;
- if (xHyph.is() && xHyph->hasLocale( SvxCreateLocale( nLang ) ))
- nTmpVal = SVX_LANG_OK;
- nVal &= 0x00FF;
- nVal |= nTmpVal << 8;
-
- rLCS[ nLang ] = nVal;
- }
-
- return (sal_Int16) nVal;
-}
-
-// -----------------------------------------------------------------------
-
-
-void SvxSpellWrapper::SpellStart( SvxSpellArea /*eSpell*/ )
-{ // Hier muessen die notwendigen Vorbereitungen fuer SpellContinue
-} // im uebergebenen Bereich getroffen werden.
-
-// -----------------------------------------------------------------------
-
-
-sal_Bool SvxSpellWrapper::HasOtherCnt()
-{
- return sal_False; // Gibt es ueberhaupt einen Sonderbereich?
-}
-
-// -----------------------------------------------------------------------
-
-
-sal_Bool SvxSpellWrapper::SpellMore()
-{
- return sal_False; // Sollen weitere Dokumente geprueft werden?
-}
-
-// -----------------------------------------------------------------------
-
-
-void SvxSpellWrapper::SpellEnd()
-{ // Bereich ist abgeschlossen, ggf. Aufraeumen
-
- // display error for last language not found
- ShowLanguageErrors();
-}
-
-// -----------------------------------------------------------------------
-
-
-sal_Bool SvxSpellWrapper::SpellContinue()
-{
- return sal_False;
-}
-
-// -----------------------------------------------------------------------
-
-void SvxSpellWrapper::AutoCorrect( const String&, const String& )
-{
-}
-
-// -----------------------------------------------------------------------
-
-
-void SvxSpellWrapper::ScrollArea()
-{ // Scrollarea einstellen
-}
-
-// -----------------------------------------------------------------------
-
-
-void SvxSpellWrapper::ChangeWord( const String&, const sal_uInt16 )
-{ // Wort ersetzen
-}
-
-// -----------------------------------------------------------------------
-
-
-String SvxSpellWrapper::GetThesWord()
-{
- // Welches Wort soll nachgeschlagen werden?
- return String();
-}
-
-// -----------------------------------------------------------------------
-
-
-void SvxSpellWrapper::ChangeThesWord( const String& )
-{
- // Wort wg. Thesaurus ersetzen
-}
-
-// -----------------------------------------------------------------------
-
-void SvxSpellWrapper::StartThesaurus( const String &rWord, sal_uInt16 nLanguage )
-{
-
- String sErr( SVX_RES( RID_SVXSTR_HMERR_THESAURUS ) );
-
- Reference< XThesaurus > xThes( SvxGetThesaurus() );
- if (!xThes.is())
- {
- InfoBox( pWin, sErr ).Execute();
- return;
- }
-
- WAIT_ON(); // while looking up for initial word
- SvxThesaurusDialog aDlg(pWin, xThes, rWord, nLanguage);
- WAIT_OFF();
-
- if ( aDlg.Execute()== RET_OK )
- {
- ChangeThesWord( aDlg.GetWord() );
- }
-
-}
-
-// -----------------------------------------------------------------------
-
-void SvxSpellWrapper::ReplaceAll( const String &, sal_Int16 )
-{ // Wort aus der Replace-Liste ersetzen
-}
-
-// -----------------------------------------------------------------------
-
-
-void SvxSpellWrapper::SetLanguage( const sal_uInt16 )
-{ // Sprache aendern
-}
-
-// -----------------------------------------------------------------------
-
-
-void SvxSpellWrapper::InsertHyphen( const sal_uInt16 )
-{ // Hyphen einfuegen bzw. loeschen
-}
-
-// -----------------------------------------------------------------------
-// Pruefung der Dokumentbereiche in der durch die Flags angegebenen Reihenfolge
-
-
-void SvxSpellWrapper::SpellDocument( )
-{
- if ( bOtherCntnt )
- {
- bReverse = sal_False;
- SpellStart( SVX_SPELL_OTHER );
- }
- else
- {
- bStartChk = bReverse;
- SpellStart( bReverse ? SVX_SPELL_BODY_START : SVX_SPELL_BODY_END );
- }
-
- if ( FindSpellError() )
- {
- Reference< XSpellAlternatives > xAlt( GetLast(), UNO_QUERY );
- Reference< XHyphenatedWord > xHyphWord( GetLast(), UNO_QUERY );
-
- Window *pOld = pWin;
- bDialog = sal_True;
- if (xHyphWord.is())
- {
- DBG_ASSERT(xHyphWord.is(), "NULL pointer");
- SvxHyphenWordDialog* pDlg =
- new SvxHyphenWordDialog( xHyphWord->getWord(),
- SvxLocaleToLanguage( xHyphWord->getLocale() ),
- pWin, xHyph, this );
- pWin = pDlg;
- pDlg->Execute();
- delete pDlg;
- }
- bDialog = sal_False;
- pWin = pOld;
- };
-}
-
-// -----------------------------------------------------------------------
-// Naechsten Bereich auswaehlen
-
-
-sal_Bool SvxSpellWrapper::SpellNext( )
-{
- Reference< beans::XPropertySet > xProp( SvxGetLinguPropertySet() );
- sal_Bool bWrapReverse = xProp.is() ?
- *(sal_Bool*)xProp->getPropertyValue(
- ::rtl::OUString::createFromAscii(UPN_IS_WRAP_REVERSE) ).getValue()
- : sal_False;
- sal_Bool bActRev = bRevAllowed && bWrapReverse;
-
- // bActRev ist die Richtung nach dem Spellen, bReverse die am Anfang.
- if( bActRev == bReverse )
- { // Keine Richtungsaenderung, also ist
- if( bStartChk ) // der gewuenschte Bereich ( bStartChk )
- bStartDone = sal_True; // vollstaendig abgearbeitet.
- else
- bEndDone = sal_True;
- }
- else if( bReverse == bStartChk ) // Bei einer Richtungsaenderung kann
- { // u.U. auch ein Bereich abgearbeitet sein.
- if( bStartChk ) // Sollte der vordere Teil rueckwaerts gespellt
- bEndDone = sal_True; // werden und wir kehren unterwegs um, so ist
- else // der hintere Teil abgearbeitet (und umgekehrt).
- bStartDone = sal_True;
- }
-
- bReverse = bActRev;
- if( bOtherCntnt && bStartDone && bEndDone ) // Dokument komplett geprueft?
- {
- if ( SpellMore() ) // ein weiteres Dokument pruefen?
- {
- bOtherCntnt = sal_False;
- bStartDone = !bReverse;
- bEndDone = bReverse;
- SpellStart( SVX_SPELL_BODY );
- return sal_True;
- }
- return sal_False;
- }
-
- ResMgr& rMgr = DIALOG_MGR();
- sal_Bool bGoOn = sal_False;
-
- if ( bOtherCntnt )
- {
- bStartChk = sal_False;
- SpellStart( SVX_SPELL_BODY );
- bGoOn = sal_True;
- }
- else if ( bStartDone && bEndDone )
- {
- sal_Bool bIsSpellSpecial = xProp.is() ?
- *(sal_Bool*)xProp->getPropertyValue(
- ::rtl::OUString::createFromAscii(UPN_IS_SPELL_SPECIAL) ).getValue()
- : sal_False;
- // Bodybereich erledigt, Frage nach Sonderbereich
- if( !IsHyphen() && bIsSpellSpecial && HasOtherCnt() )
- {
- SpellStart( SVX_SPELL_OTHER );
- bOtherCntnt = bGoOn = sal_True;
- }
- else if ( SpellMore() ) // ein weiteres Dokument pruefen?
- {
- bOtherCntnt = sal_False;
- bStartDone = !bReverse;
- bEndDone = bReverse;
- SpellStart( SVX_SPELL_BODY );
- return sal_True;
- }
- }
- else
- {
- // Ein BODY_Bereich erledigt, Frage nach dem anderen BODY_Bereich
- WAIT_OFF();
-
-// Sobald im Dialog das DontWrapAround gesetzt werden kann, kann der
-// folgende #ifdef-Zweig aktiviert werden ...
-#ifdef USED
- sal_Bool bDontWrapAround = IsHyphen() ?
- pSpell->GetOptions() & DONT_WRAPAROUND :
- pSpell->GetHyphOptions() & HYPH_DONT_WRAPAROUND;
- if( bDontWrapAround )
-#else
- sal_uInt16 nResId = bReverse ? RID_SVXQB_BW_CONTINUE : RID_SVXQB_CONTINUE;
- QueryBox aBox( pWin, ResId( nResId, rMgr ) );
- if ( aBox.Execute() != RET_YES )
-#endif
-
- {
- // Verzicht auf den anderen Bereich, ggf. Frage nach Sonderbereich
- WAIT_ON();
- bStartDone = bEndDone = sal_True;
- return SpellNext();
- }
- else
- {
- bStartChk = !bStartDone;
- SpellStart( bStartChk ? SVX_SPELL_BODY_START : SVX_SPELL_BODY_END );
- bGoOn = sal_True;
- }
- WAIT_ON();
- }
- return bGoOn;
-}
-
-// -----------------------------------------------------------------------
-
-Reference< XDictionary > SvxSpellWrapper::GetAllRightDic() const
-{
- Reference< XDictionary > xDic;
-
- Reference< XDictionaryList > xDicList( SvxGetDictionaryList() );
- if (xDicList.is())
- {
- Sequence< Reference< XDictionary > > aDics( xDicList->getDictionaries() );
- const Reference< XDictionary > *pDic = aDics.getConstArray();
- sal_Int32 nCount = aDics.getLength();
-
- sal_Int32 i = 0;
- while (!xDic.is() && i < nCount)
- {
- Reference< XDictionary > xTmp( pDic[i], UNO_QUERY );
- if (xTmp.is())
- {
- if ( xTmp->isActive() &&
- xTmp->getDictionaryType() != DictionaryType_NEGATIVE &&
- SvxLocaleToLanguage( xTmp->getLocale() ) == LANGUAGE_NONE )
- {
- Reference< frame::XStorable > xStor( xTmp, UNO_QUERY );
- if (xStor.is() && xStor->hasLocation() && !xStor->isReadonly())
- {
- xDic = xTmp;
- }
- }
- }
- ++i;
- }
-
- if (!xDic.is())
- {
- xDic = SvxGetOrCreatePosDic( xDicList );
- if (xDic.is())
- xDic->setActive( sal_True );
- }
- }
-
- return xDic;
-}
-
-// -----------------------------------------------------------------------
-
-sal_Bool SvxSpellWrapper::FindSpellError()
-{
- ShowLanguageErrors();
-
- Reference< XInterface > xRef;
-
- WAIT_ON();
- sal_Bool bSpell = sal_True;
-
- Reference< XDictionary > xAllRightDic;
- if (IsAllRight())
- xAllRightDic = GetAllRightDic();
-
- while ( bSpell )
- {
- SpellContinue();
-
- Reference< XSpellAlternatives > xAlt( GetLast(), UNO_QUERY );
- Reference< XHyphenatedWord > xHyphWord( GetLast(), UNO_QUERY );
-
- if (xAlt.is())
- {
- if (IsAllRight() && xAllRightDic.is())
- {
- xAllRightDic->add( xAlt->getWord(), sal_False, ::rtl::OUString() );
- }
- else
- {
- // look up in ChangeAllList for misspelled word
- Reference< XDictionary > xChangeAllList(
- SvxGetChangeAllList(), UNO_QUERY );
- Reference< XDictionaryEntry > xEntry;
- if (xChangeAllList.is())
- xEntry = xChangeAllList->getEntry( xAlt->getWord() );
-
- if (xEntry.is())
- {
- // replace word without asking
- ReplaceAll( xEntry->getReplacementText(),
- SvxLocaleToLanguage( xAlt->getLocale() ) );
- }
- else
- bSpell = sal_False;
- }
- }
- else if (xHyphWord.is())
- bSpell = sal_False;
- else
- {
- SpellEnd();
- bSpell = SpellNext();
- }
- }
- WAIT_OFF();
- return GetLast().is();
-}
-
-
-