summaryrefslogtreecommitdiff
path: root/cui/source/options/optdict.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'cui/source/options/optdict.cxx')
-rw-r--r--cui/source/options/optdict.cxx808
1 files changed, 0 insertions, 808 deletions
diff --git a/cui/source/options/optdict.cxx b/cui/source/options/optdict.cxx
deleted file mode 100644
index 09c331bf0..000000000
--- a/cui/source/options/optdict.cxx
+++ /dev/null
@@ -1,808 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// include ---------------------------------------------------------------
-#include <tools/shl.hxx>
-#include <editeng/unolingu.hxx>
-#include <svx/dlgutil.hxx>
-#include <sfx2/sfxuno.hxx>
-#include <svl/eitem.hxx>
-#include <com/sun/star/frame/XStorable.hpp>
-#include <comphelper/processfactory.hxx>
-#include <unotools/intlwrapper.hxx>
-#include <vcl/svapp.hxx>
-#include <vcl/msgbox.hxx>
-#include <svx/dialogs.hrc>
-
-#define _SVX_OPTDICT_CXX
-
-#include <linguistic/misc.hxx>
-#include <cuires.hrc>
-#include "optdict.hrc"
-#include "optdict.hxx"
-#include <dialmgr.hxx>
-#include <svx/svxerr.hxx>
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::linguistic2;
-
-// static ----------------------------------------------------------------
-
-static const sal_uInt16 nNameLen = 8;
-static const short NOACTDICT = -1;
-
-static long nStaticTabs[]=
-{
- 2,10,71,120
-};
-
-// static function -------------------------------------------------------
-
-static String getNormDicEntry_Impl( const String &rText )
-{
- String aTmp( rText );
- aTmp.EraseTrailingChars( '.' );
- aTmp.EraseAllChars( '=' );
- return aTmp;
-}
-
-
-// Compare Dictionary Entry result
-enum CDE_RESULT { CDE_EQUAL, CDE_SIMILAR, CDE_DIFFERENT };
-
-static CDE_RESULT cmpDicEntry_Impl( const String &rText1, const String &rText2 )
-{
- CDE_RESULT eRes = CDE_DIFFERENT;
-
- if (rText1 == rText2)
- eRes = CDE_EQUAL;
- else
- { // similar = equal up to trailing '.' and hyphenation positions
- // marked with '='
- if (getNormDicEntry_Impl( rText1 ) == getNormDicEntry_Impl( rText2 ))
- eRes = CDE_SIMILAR;
- }
-
- return eRes;
-}
-
-// class SvxNewDictionaryDialog -------------------------------------------
-
-SvxNewDictionaryDialog::SvxNewDictionaryDialog( Window* pParent,
- Reference< XSpellChecker1 > &xSpl ) :
-
- ModalDialog( pParent, CUI_RES( RID_SFXDLG_NEWDICT ) ),
-
- aNewDictBox ( this, CUI_RES( GB_NEWDICT ) ),
- aNameText ( this, CUI_RES( FT_DICTNAME ) ),
- aNameEdit ( this, CUI_RES( ED_DICTNAME ) ),
- aLanguageText ( this, CUI_RES( FT_DICTLANG ) ),
- aLanguageLB ( this, CUI_RES( LB_DICTLANG ) ),
- aExceptBtn ( this, CUI_RES( BTN_EXCEPT ) ),
- aOKBtn ( this, CUI_RES( BTN_NEWDICT_OK ) ),
- aCancelBtn ( this, CUI_RES( BTN_NEWDICT_ESC ) ),
- aHelpBtn ( this, CUI_RES( BTN_NEWDICT_HLP ) ),
- xSpell( xSpl )
-{
- // Handler installieren
- aNameEdit.SetModifyHdl(
- LINK( this, SvxNewDictionaryDialog, ModifyHdl_Impl ) );
- aOKBtn.SetClickHdl( LINK( this, SvxNewDictionaryDialog, OKHdl_Impl ) );
-
- // Sprachen anzeigen
- aLanguageLB.SetLanguageList( LANG_LIST_ALL, sal_True, sal_True );
- aLanguageLB.SelectEntryPos(0);
-
- aNameText.SetAccessibleRelationMemberOf( &aNewDictBox );
- aNameEdit.SetAccessibleRelationMemberOf( &aNewDictBox );
- aLanguageText.SetAccessibleRelationMemberOf( &aNewDictBox );
- aLanguageLB.SetAccessibleRelationMemberOf( &aNewDictBox );
-
- FreeResource();
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxNewDictionaryDialog, OKHdl_Impl, Button *, EMPTYARG )
-{
- String sDict = aNameEdit.GetText();
- sDict.EraseTrailingChars();
- // add extension for personal dictionaries
- sDict.AppendAscii(".dic");
-
- Reference< XDictionaryList > xDicList( SvxGetDictionaryList() );
-
- Sequence< Reference< XDictionary > > aDics;
- if (xDicList.is())
- aDics = xDicList->getDictionaries();
- const Reference< XDictionary > *pDic = aDics.getConstArray();
- sal_Int32 nCount = (sal_uInt16) aDics.getLength();
-
- sal_Bool bFound = sal_False;
- sal_uInt16 i;
- for (i = 0; !bFound && i < nCount; ++i )
- if ( sDict.EqualsIgnoreCaseAscii( String(pDic[i]->getName()) ))
- bFound = sal_True;
-
- if ( bFound )
- {
- // Doppelte Namen?
- InfoBox( this, CUI_RESSTR( RID_SVXSTR_OPT_DOUBLE_DICTS ) ).Execute();
- aNameEdit.GrabFocus();
- return 0;
- }
-
- // Erzeugen und hinzufuegen
- sal_uInt16 nLang = aLanguageLB.GetSelectLanguage();
- try
- {
- // create new dictionary
- DictionaryType eType = aExceptBtn.IsChecked() ?
- DictionaryType_NEGATIVE : DictionaryType_POSITIVE;
- if (xDicList.is())
- {
- lang::Locale aLocale( SvxCreateLocale(nLang) );
- String aURL( linguistic::GetWritableDictionaryURL( sDict ) );
- xNewDic = Reference< XDictionary > (
- xDicList->createDictionary( sDict, aLocale, eType, aURL ) , UNO_QUERY );
- xNewDic->setActive( sal_True );
- }
- DBG_ASSERT(xNewDic.is(), "NULL pointer");
- }
- catch(...)
- {
- xNewDic = NULL;
-
- // Fehler: konnte neues W"orterbuch nicht anlegen
- SfxErrorContext aContext( ERRCTX_SVX_LINGU_DICTIONARY, String(),
- this, RID_SVXERRCTX, &CUI_MGR() );
- ErrorHandler::HandleError( *new StringErrorInfo(
- ERRCODE_SVX_LINGU_DICT_NOTWRITEABLE, sDict ) );
-
- EndDialog( RET_CANCEL );
- }
-
- if (xDicList.is() && xNewDic.is())
- {
- xDicList->addDictionary( Reference< XDictionary > ( xNewDic, UNO_QUERY ) );
-
- // refresh list of dictionaries
- //! dictionaries may have been added/removed elsewhere too.
- aDics = xDicList->getDictionaries();
- }
- pDic = aDics.getConstArray();
- nCount = (sal_uInt16) aDics.getLength();
-
-
- EndDialog( RET_OK );
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK_INLINE_START( SvxNewDictionaryDialog, ModifyHdl_Impl, Edit *, EMPTYARG )
-{
- if ( aNameEdit.GetText().Len() )
- aOKBtn.Enable();
- else
- aOKBtn.Disable();
- return 0;
-}
-IMPL_LINK_INLINE_END( SvxNewDictionaryDialog, ModifyHdl_Impl, Edit *, EMPTYARG )
-
-//==========================================================================
-//
-// class SvxEditDictionaryDialog -------------------------------------------
-//
-//==========================================================================
-
-SvxEditDictionaryDialog::SvxEditDictionaryDialog(
- Window* pParent,
- const String& rName,
- Reference< XSpellChecker1 > &xSpl ) :
-
- ModalDialog( pParent, CUI_RES( RID_SFXDLG_EDITDICT ) ),
-
- aBookFT ( this, CUI_RES( FT_BOOK ) ),
- aAllDictsLB ( this, CUI_RES( LB_ALLDICTS ) ),
- aLangFT ( this, CUI_RES( FT_DICTLANG ) ),
- aLangLB ( this, CUI_RES( LB_DICTLANG ) ),
-
- aWordFT ( this, CUI_RES( FT_WORD ) ),
- aWordED ( this, CUI_RES( ED_WORD ) ),
- aReplaceFT ( this, CUI_RES( FT_REPLACE ) ),
- aReplaceED ( this, CUI_RES( ED_REPLACE ) ),
- aWordsLB ( this, CUI_RES( TLB_REPLACE ) ),
- aNewReplacePB ( this, CUI_RES( PB_NEW_REPLACE ) ),
- aDeletePB ( this, CUI_RES( PB_DELETE_REPLACE ) ),
- aEditDictsBox ( this, CUI_RES( GB_EDITDICTS ) ),
- aHelpBtn ( this, CUI_RES( BTN_EDITHELP ) ),
- aCloseBtn ( this, CUI_RES( BTN_EDITCLOSE ) ),
- sModify (CUI_RES(STR_MODIFY)),
- sNew (aNewReplacePB.GetText()),
- aDecoView ( this),
- xSpell ( xSpl ),
- nOld ( NOACTDICT ),
- bFirstSelect (sal_True),
- bDoNothing (sal_False)
-
-{
- if (SvxGetDictionaryList().is())
- aDics = SvxGetDictionaryList()->getDictionaries();
-
- aWordsLB.SetSelectHdl(LINK(this, SvxEditDictionaryDialog, SelectHdl));
- aWordsLB.SetTabs(nStaticTabs);
-
- //! we use an algorithm of our own to insert elements sorted
- aWordsLB.SetStyle(aWordsLB.GetStyle()|/*WB_SORT|*/WB_HSCROLL|WB_CLIPCHILDREN);
-
-
- nWidth=aWordED.GetSizePixel().Width();
- // Handler installieren
- aNewReplacePB.SetClickHdl(
- LINK( this, SvxEditDictionaryDialog, NewDelHdl));
- aDeletePB.SetClickHdl(
- LINK( this, SvxEditDictionaryDialog, NewDelHdl));
-
- aLangLB.SetSelectHdl(
- LINK( this, SvxEditDictionaryDialog, SelectLangHdl_Impl ) );
- aAllDictsLB.SetSelectHdl(
- LINK( this, SvxEditDictionaryDialog, SelectBookHdl_Impl ) );
-
- aWordED.SetModifyHdl(LINK(this, SvxEditDictionaryDialog, ModifyHdl));
- aReplaceED.SetModifyHdl(LINK(this, SvxEditDictionaryDialog, ModifyHdl));
- aWordED.SetActionHdl(LINK(this, SvxEditDictionaryDialog, NewDelHdl));
- aReplaceED.SetActionHdl(LINK(this, SvxEditDictionaryDialog, NewDelHdl));
-
- // Listbox mit allen verfuegbaren WB's fuellen
- const Reference< XDictionary > *pDic = aDics.getConstArray();
- sal_Int32 nCount = aDics.getLength();
-
- String aLookUpEntry;
- for ( sal_Int32 i = 0; i < nCount; ++i )
- {
- Reference< XDictionary > xDic( pDic[i], UNO_QUERY );
- if (xDic.is())
- {
- sal_Bool bNegative = xDic->getDictionaryType() == DictionaryType_NEGATIVE ?
- sal_True : sal_False;
- String aDicName( xDic->getName() );
- const String aTxt( ::GetDicInfoStr( aDicName, SvxLocaleToLanguage( xDic->getLocale() ),
- bNegative ) );
- aAllDictsLB.InsertEntry( aTxt );
-
- if (rName == aDicName)
- aLookUpEntry = aTxt;
- }
- }
-
- aLangLB.SetLanguageList( LANG_LIST_ALL, sal_True, sal_True );
-
- aReplaceED.SetSpaces(sal_True);
- aWordED.SetSpaces(sal_True);
-
- if ( nCount > 0 )
- {
- aAllDictsLB.SelectEntry( aLookUpEntry );
- sal_uInt16 nPos = aAllDictsLB.GetSelectEntryPos();
-
- if ( nPos == LISTBOX_ENTRY_NOTFOUND )
- {
- nPos = 0;
- aAllDictsLB.SelectEntryPos( nPos );
- }
- Reference< XDictionary > xDic;
- if (nPos != LISTBOX_ENTRY_NOTFOUND)
- xDic = Reference< XDictionary > ( aDics.getConstArray()[ nPos ], UNO_QUERY );
- if (xDic.is())
- SetLanguage_Impl( SvxLocaleToLanguage( xDic->getLocale() ) );
-
- // check if dictionary is read-only
- SetDicReadonly_Impl(xDic);
- sal_Bool bEnable = !IsDicReadonly_Impl();
- aNewReplacePB .Enable( sal_False );
- aDeletePB .Enable( sal_False );
- aLangFT.Enable( bEnable );
- aLangLB.Enable( bEnable );
- ShowWords_Impl( nPos );
-
- }
- else
- {
- aNewReplacePB.Disable();
- aDeletePB .Disable();
- }
- FreeResource();
-}
-
-// -----------------------------------------------------------------------
-
-SvxEditDictionaryDialog::~SvxEditDictionaryDialog()
-{
-}
-
-// -----------------------------------------------------------------------
-
-void SvxEditDictionaryDialog::Paint( const Rectangle& rRect )
-{
- ModalDialog::Paint(rRect );
-
- Rectangle aRect(aEditDictsBox.GetPosPixel(),aEditDictsBox.GetSizePixel());
-
- sal_uInt16 nStyle=BUTTON_DRAW_NOFILL;
- aDecoView.DrawButton( aRect, nStyle);
-}
-
-// -----------------------------------------------------------------------
-
-void SvxEditDictionaryDialog::SetDicReadonly_Impl(
- Reference< XDictionary > &xDic )
-{
- // enable or disable new and delete button according to file attributes
- bDicIsReadonly = sal_True;
- if (xDic.is())
- {
- Reference< frame::XStorable > xStor( xDic, UNO_QUERY );
- if ( !xStor.is() // non persistent dictionary
- || !xStor->hasLocation() // not yet persistent
- || !xStor->isReadonly() )
- {
- bDicIsReadonly = sal_False;
- }
- }
-}
-
-// -----------------------------------------------------------------------
-
-void SvxEditDictionaryDialog::SetLanguage_Impl( util::Language nLanguage )
-{
- // select language
- aLangLB.SelectLanguage( nLanguage );
-}
-
-sal_uInt16 SvxEditDictionaryDialog::GetLBInsertPos(const String &rDicWord)
-{
- sal_uInt16 nPos = USHRT_MAX;
-
- IntlWrapper aIntlWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
- const CollatorWrapper* pCollator = aIntlWrapper.getCollator();
- sal_uInt16 j;
- for( j = 0; j < aWordsLB.GetEntryCount(); j++ )
- {
- SvLBoxEntry* pEntry = aWordsLB.GetEntry(j);
- DBG_ASSERT( pEntry, "NULL pointer");
- String aNormEntry( getNormDicEntry_Impl( rDicWord ) );
- StringCompare eCmpRes = (StringCompare)pCollator->
- compareString( aNormEntry, getNormDicEntry_Impl( aWordsLB.GetEntryText(pEntry, 0) ) );
- if( COMPARE_LESS == eCmpRes )
- break;
- }
- if (j < aWordsLB.GetEntryCount()) // entry found?
- nPos = j;
-
- return nPos;
-}
-
-void SvxEditDictionaryDialog::RemoveDictEntry(SvLBoxEntry* pEntry)
-{
- sal_uInt16 nLBPos = aAllDictsLB.GetSelectEntryPos();
-
- if ( pEntry != NULL && nLBPos != LISTBOX_ENTRY_NOTFOUND )
- {
- String sTmpShort(aWordsLB.GetEntryText(pEntry, 0));
-
- Reference< XDictionary > xDic = aDics.getConstArray()[ nLBPos ];
- if (xDic->remove( sTmpShort )) // sal_True on success
- {
- aWordsLB.GetModel()->Remove(pEntry);
- }
- }
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxEditDictionaryDialog, SelectBookHdl_Impl, ListBox *, EMPTYARG )
-{
- sal_uInt16 nPos = aAllDictsLB.GetSelectEntryPos();
-
- if ( nPos != LISTBOX_ENTRY_NOTFOUND )
- {
- aNewReplacePB.Enable( sal_False );
- aDeletePB .Enable( sal_False );
- // Dictionary anzeigen
- ShowWords_Impl( nPos );
- // enable or disable new and delete button according to file attributes
- Reference< XDictionary > xDic( aDics.getConstArray()[ nPos ], UNO_QUERY );
- if (xDic.is())
- SetLanguage_Impl( SvxLocaleToLanguage( xDic->getLocale() ) );
-
- SetDicReadonly_Impl(xDic);
- sal_Bool bEnable = !IsDicReadonly_Impl();
- aLangFT.Enable( bEnable );
- aLangLB.Enable( bEnable );
- }
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxEditDictionaryDialog, SelectLangHdl_Impl, ListBox *, EMPTYARG )
-{
- sal_uInt16 nDicPos = aAllDictsLB.GetSelectEntryPos();
- sal_uInt16 nLang = aLangLB.GetSelectLanguage();
- Reference< XDictionary > xDic( aDics.getConstArray()[ nDicPos ], UNO_QUERY );
- sal_Int16 nOldLang = SvxLocaleToLanguage( xDic->getLocale() );
-
- if ( nLang != nOldLang )
- {
- QueryBox aBox( this, CUI_RES( RID_SFXQB_SET_LANGUAGE ) );
- String sTxt( aBox.GetMessText() );
- sTxt.SearchAndReplaceAscii( "%1", aAllDictsLB.GetSelectEntry() );
- aBox.SetMessText( sTxt );
-
- if ( aBox.Execute() == RET_YES )
- {
- xDic->setLocale( SvxCreateLocale( nLang ) );
- sal_Bool bNegativ = xDic->getDictionaryType() == DictionaryType_NEGATIVE;
-
- const String sName(
- ::GetDicInfoStr( xDic->getName(),
- SvxLocaleToLanguage( xDic->getLocale() ),
- bNegativ ) );
- aAllDictsLB.RemoveEntry( nDicPos );
- aAllDictsLB.InsertEntry( sName, nDicPos );
- aAllDictsLB.SelectEntryPos( nDicPos );
- }
- else
- SetLanguage_Impl( nOldLang );
- }
- return 1;
-}
-
-// -----------------------------------------------------------------------
-
-void SvxEditDictionaryDialog::ShowWords_Impl( sal_uInt16 nId )
-{
- Reference< XDictionary > xDic = aDics.getConstArray()[ nId ];
-
- nOld = nId;
- EnterWait();
-
- String aStr;
-
- aWordED.SetText(aStr);
- aReplaceED.SetText(aStr);
-
- if(xDic->getDictionaryType() != DictionaryType_POSITIVE)
- {
- nStaticTabs[0]=2;
-
- // make controls for replacement text active
- if(!aReplaceFT.IsVisible())
- {
- Size aSize=aWordED.GetSizePixel();
- aSize.Width()=nWidth;
- aWordED.SetSizePixel(aSize);
- aReplaceFT.Show();
- aReplaceED.Show();
- }
- }
- else
- {
- nStaticTabs[0]=1;
-
- // deactivate controls for replacement text
- if(aReplaceFT.IsVisible())
- {
- Size aSize=aWordED.GetSizePixel();
- aSize.Width()=aWordsLB.GetSizePixel().Width();
- aWordED.SetSizePixel(aSize);
- aReplaceFT.Hide();
- aReplaceED.Hide();
- }
-
- }
-
- aWordsLB.SetTabs(nStaticTabs);
- aWordsLB.Clear();
-
- Sequence< Reference< XDictionaryEntry > > aEntries( xDic->getEntries() );
- const Reference< XDictionaryEntry > *pEntry = aEntries.getConstArray();
- sal_Int32 nCount = aEntries.getLength();
-
- for (sal_Int32 i = 0; i < nCount; i++)
- {
- aStr = String(pEntry[i]->getDictionaryWord());
- sal_uInt16 nPos = GetLBInsertPos( aStr );
- if(pEntry[i]->isNegative())
- {
- aStr += '\t';
- aStr += String(pEntry[i]->getReplacementText());
- }
- aWordsLB.InsertEntry(aStr, 0, sal_False, nPos == USHRT_MAX ? LIST_APPEND : nPos);
- }
-
- if (aWordsLB.GetEntryCount())
- {
- aWordED .SetText( aWordsLB.GetEntryText((sal_uLong)0, 0) );
- aReplaceED.SetText( aWordsLB.GetEntryText((sal_uLong)0, 1) );
- }
-
- LeaveWait();
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK(SvxEditDictionaryDialog, SelectHdl, SvTabListBox*, pBox)
-{
- if(!bDoNothing)
- {
- if(!bFirstSelect)
- {
- SvLBoxEntry* pEntry = pBox->FirstSelected();
- String sTmpShort(pBox->GetEntryText(pEntry, 0));
- // wird der Text ueber den ModifyHdl gesetzt, dann steht der Cursor
- //sonst immer am Wortanfang, obwohl man gerade hier editiert
- if(aWordED.GetText() != sTmpShort)
- aWordED.SetText(sTmpShort);
- aReplaceED.SetText(pBox->GetEntryText(pEntry, 1));
- }
- else
- bFirstSelect = sal_False;
-
- // entries in the list box should exactly correspond to those from the
- // dictionary. Thus:
- aNewReplacePB.Enable(sal_False);
- aDeletePB .Enable( sal_True && !IsDicReadonly_Impl() );
- }
- return 0;
-};
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK(SvxEditDictionaryDialog, NewDelHdl, PushButton*, pBtn)
-{
- SvLBoxEntry* pEntry = aWordsLB.FirstSelected();
-
- if(pBtn == &aDeletePB)
- {
- DBG_ASSERT(pEntry, "keine Eintrag selektiert");
- String aStr;
-
- aWordED.SetText(aStr);
- aReplaceED.SetText(aStr);
- aDeletePB.Disable();
-
- RemoveDictEntry(pEntry); // remove entry from dic and list-box
- }
- if(pBtn == &aNewReplacePB || aNewReplacePB.IsEnabled())
- {
- SvLBoxEntry* _pEntry = aWordsLB.FirstSelected();
- XubString aNewWord(aWordED.GetText());
- String sEntry(aNewWord);
- XubString aReplaceStr(aReplaceED.GetText());
-
- sal_Int16 nAddRes = DIC_ERR_UNKNOWN;
- sal_uInt16 nPos = aAllDictsLB.GetSelectEntryPos();
- if ( nPos != LISTBOX_ENTRY_NOTFOUND && aNewWord.Len() > 0)
- {
- DBG_ASSERT(nPos < aDics.getLength(), "invalid dictionary index");
- Reference< XDictionary > xDic( aDics.getConstArray()[ nPos ], UNO_QUERY );
- if (xDic.is())
- {
- // make changes in dic
-
- //! ...IsVisible should reflect wether the dictionary is a negativ
- //! or not (hopefully...)
- sal_Bool bIsNegEntry = aReplaceFT.IsVisible();
- ::rtl::OUString aRplcText;
- if(bIsNegEntry)
- aRplcText = aReplaceStr;
-
- if (_pEntry) // entry selected in aWordsLB ie action = modify entry
- xDic->remove( aWordsLB.GetEntryText( _pEntry, 0 ) );
- // if remove has failed the following add should fail too
- // and thus a warning message should be triggered...
-
- Reference<XDictionary> aXDictionary(xDic, UNO_QUERY);
- nAddRes = linguistic::AddEntryToDic( aXDictionary,
- aNewWord, bIsNegEntry,
- aRplcText, SvxLocaleToLanguage( xDic->getLocale() ), sal_False );
- }
- }
- if (DIC_ERR_NONE != nAddRes)
- SvxDicError( this, nAddRes );
-
- if(DIC_ERR_NONE == nAddRes && sEntry.Len())
- {
- // insert new entry in list-box etc...
-
- aWordsLB.SetUpdateMode(sal_False);
- sal_uInt16 _nPos = USHRT_MAX;
-
- if(aReplaceFT.IsVisible())
- {
- sEntry += '\t';
- sEntry += aReplaceStr;
- }
-
- SvLBoxEntry* pNewEntry = NULL;
- if(_pEntry) // entry selected in aWordsLB ie action = modify entry
- {
- aWordsLB.SetEntryText( sEntry, _pEntry );
- pNewEntry = _pEntry;
- }
- else
- {
- _nPos = GetLBInsertPos( aNewWord );
- SvLBoxEntry* pInsEntry = aWordsLB.InsertEntry(sEntry, 0, sal_False,
- _nPos == USHRT_MAX ? LIST_APPEND : (sal_uInt32)_nPos);
- pNewEntry = pInsEntry;
- }
-
- aWordsLB.MakeVisible( pNewEntry );
- aWordsLB.SetUpdateMode(sal_True);
- // falls der Request aus dem ReplaceEdit kam, dann Focus in das ShortEdit setzen
- if(aReplaceED.HasFocus())
- aWordED.GrabFocus();
- }
- }
- else
- {
- // das kann nur ein Enter in einem der beiden Edit-Felder sein und das
- // bedeutet EndDialog() - muss im KeyInput ausgewertet werden
- return 0;
- }
- ModifyHdl(&aWordED);
- return 1;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK(SvxEditDictionaryDialog, ModifyHdl, Edit*, pEdt)
-{
- SvLBoxEntry* pFirstSel = aWordsLB.FirstSelected();
- String rEntry = pEdt->GetText();
-
- xub_StrLen nWordLen=rEntry.Len();
- const String& rRepString = aReplaceED.GetText();
-
- sal_Bool bEnableNewReplace = sal_False;
- sal_Bool bEnableDelete = sal_False;
- String aNewReplaceText = sNew;
-
- if(pEdt == &aWordED)
- {
- if(nWordLen>0)
- {
- sal_Bool bFound = sal_False;
- sal_Bool bTmpSelEntry=sal_False;
- CDE_RESULT eCmpRes = CDE_DIFFERENT;
-
- for(sal_uInt16 i = 0; i < aWordsLB.GetEntryCount(); i++)
- {
- SvLBoxEntry* pEntry = aWordsLB.GetEntry( i );
- String aTestStr( aWordsLB.GetEntryText(pEntry, 0) );
- eCmpRes = cmpDicEntry_Impl( rEntry, aTestStr );
- if(CDE_DIFFERENT != eCmpRes)
- {
- if(rRepString.Len())
- bFirstSelect = sal_True;
- bDoNothing=sal_True;
- aWordsLB.SetCurEntry(pEntry);
- bDoNothing=sal_False;
- pFirstSel = pEntry;
- aReplaceED.SetText(aWordsLB.GetEntryText(pEntry, 1));
-
- if (CDE_SIMILAR == eCmpRes)
- {
- aNewReplaceText = sModify;
- bEnableNewReplace = sal_True;
- }
- bFound= sal_True;
- break;
- }
- else if(getNormDicEntry_Impl(aTestStr).Search(
- getNormDicEntry_Impl( rEntry ) ) == 0
- && !bTmpSelEntry)
- {
- bDoNothing=sal_True;
- aWordsLB.MakeVisible(pEntry);
- bDoNothing=sal_False;
- bTmpSelEntry=sal_True;
-
- aNewReplaceText = sNew;
- bEnableNewReplace = sal_True;
- }
- }
-
- if(!bFound)
- {
- aWordsLB.SelectAll(sal_False);
- pFirstSel = 0;
-
- aNewReplaceText = sNew;
- bEnableNewReplace = sal_True;
- }
- bEnableDelete = CDE_DIFFERENT != eCmpRes;
- }
- else if(aWordsLB.GetEntryCount()>0)
- {
- SvLBoxEntry* pEntry = aWordsLB.GetEntry( 0 );
- bDoNothing=sal_True;
- aWordsLB.MakeVisible(pEntry);
- bDoNothing=sal_False;
- }
- }
- else if(pEdt == &aReplaceED)
- {
- String aReplaceText;
- String aWordText;
- if (pFirstSel) // a aWordsLB entry is selected
- {
- aWordText = aWordsLB.GetEntryText( pFirstSel, 0 );
- aReplaceText = aWordsLB.GetEntryText( pFirstSel, 1 );
-
- aNewReplaceText = sModify;
- bEnableDelete = sal_True;
- }
- sal_Bool bIsChange =
- CDE_EQUAL != cmpDicEntry_Impl(aWordED.GetText(), aWordText)
- || CDE_EQUAL != cmpDicEntry_Impl(aReplaceED.GetText(), aReplaceText);
- if (aWordED.GetText().Len() && bIsChange)
- bEnableNewReplace = sal_True;
- }
-
- aNewReplacePB.SetText( aNewReplaceText );
- aNewReplacePB.Enable( bEnableNewReplace && !IsDicReadonly_Impl() );
- aDeletePB .Enable( bEnableDelete && !IsDicReadonly_Impl() );
-
- return 0;
-}
-
-//=========================================================
-//SvxDictEdit
-//=========================================================
-void SvxDictEdit::KeyInput( const KeyEvent& rKEvt )
-{
- const KeyCode aKeyCode = rKEvt.GetKeyCode();
- const sal_uInt16 nModifier = aKeyCode.GetModifier();
- if( aKeyCode.GetCode() == KEY_RETURN )
- {
- //wird bei Enter nichts getan, dann doch die Basisklasse rufen
- // um den Dialog zu schliessen
- if(!nModifier && !aActionLink.Call(this))
- Edit::KeyInput(rKEvt);
- }
- else if(bSpaces || aKeyCode.GetCode() != KEY_SPACE)
- Edit::KeyInput(rKEvt);
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */