summaryrefslogtreecommitdiff
path: root/cui/source/dialogs/thesdlg.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'cui/source/dialogs/thesdlg.cxx')
-rwxr-xr-x[-rw-r--r--]cui/source/dialogs/thesdlg.cxx101
1 files changed, 53 insertions, 48 deletions
diff --git a/cui/source/dialogs/thesdlg.cxx b/cui/source/dialogs/thesdlg.cxx
index bf617b126747..c1811b196895 100644..100755
--- a/cui/source/dialogs/thesdlg.cxx
+++ b/cui/source/dialogs/thesdlg.cxx
@@ -57,6 +57,7 @@
#include <i18npool/mslangid.hxx>
#include <comphelper/processfactory.hxx>
#include <osl/file.hxx>
+#include <svl/lngmisc.hxx>
#include <stack>
@@ -73,36 +74,6 @@ using ::rtl::OUString;
#define A2S(x) String::CreateFromAscii( x )
-
-// GetReplaceEditString -------------------------------
-
-static void GetReplaceEditString( String &rText )
-{
- // The strings returned by the thesaurus saometimes have some
- // explanation text put in between '(' and ')' or a trailing '*'.
- // These parts should not be put in the ReplaceEdit Text that may get
- // inserted into the document. Thus we strip them from the text.
-
- xub_StrLen nPos = rText.Search( sal_Unicode('(') );
- while (STRING_NOTFOUND != nPos)
- {
- xub_StrLen nEnd = rText.Search( sal_Unicode(')'), nPos );
- if (STRING_NOTFOUND != nEnd)
- rText.Erase( nPos, nEnd-nPos+1 );
- else
- break;
- nPos = rText.Search( sal_Unicode('(') );
- }
-
- nPos = rText.Search( sal_Unicode('*') );
- if (STRING_NOTFOUND != nPos)
- rText.Erase( nPos );
-
- // remove any possible remaining ' ' that may confuse the thesaurus
- // when it gets called with the text
- rText.EraseLeadingAndTrailingChars( sal_Unicode(' ') );
-}
-
// class LookUpComboBox_Impl --------------------------------------------------
LookUpComboBox_Impl::LookUpComboBox_Impl(
@@ -172,12 +143,21 @@ void ReplaceEdit_Impl::SetText( const XubString& rStr, const Selection& rNewSele
// class ThesaurusAlternativesCtrl_Impl ----------------------------------
+AlternativesString_Impl::AlternativesString_Impl(
+ ThesaurusAlternativesCtrl_Impl &rControl,
+ SvLBoxEntry* pEntry, USHORT nFlags, const String& rStr ) :
+ //
+ SvLBoxString( pEntry, nFlags, rStr ),
+ m_rControlImpl( rControl )
+{
+}
+
void AlternativesString_Impl::Paint(
const Point& rPos,
SvLBox& rDev, USHORT,
SvLBoxEntry* pEntry )
{
- AlternativesUserData_Impl* pData = (AlternativesUserData_Impl*)pEntry->GetUserData();
+ AlternativesExtraData* pData = m_rControlImpl.GetExtraData( pEntry );
Point aPos( rPos );
Font aOldFont( rDev.GetFont());
if (pData && pData->IsHeader())
@@ -207,14 +187,40 @@ ThesaurusAlternativesCtrl_Impl::ThesaurusAlternativesCtrl_Impl(
ThesaurusAlternativesCtrl_Impl::~ThesaurusAlternativesCtrl_Impl()
{
- ClearUserData();
+ ClearExtraData();
+}
+
+
+void ThesaurusAlternativesCtrl_Impl::ClearExtraData()
+{
+ UserDataMap_t aEmpty;
+ m_aUserData.swap( aEmpty );
+}
+
+
+void ThesaurusAlternativesCtrl_Impl::SetExtraData(
+ const SvLBoxEntry *pEntry,
+ const AlternativesExtraData &rData )
+{
+ if (!pEntry)
+ return;
+
+ UserDataMap_t::iterator aIt( m_aUserData.find( pEntry ) );
+ if (aIt != m_aUserData.end())
+ aIt->second = rData;
+ else
+ m_aUserData[ pEntry ] = rData;
}
-void ThesaurusAlternativesCtrl_Impl::ClearUserData()
+AlternativesExtraData * ThesaurusAlternativesCtrl_Impl::GetExtraData(
+ const SvLBoxEntry *pEntry )
{
- for (USHORT i = 0; i < GetEntryCount(); ++i)
- delete (AlternativesUserData_Impl*)GetEntry(i)->GetUserData();
+ AlternativesExtraData *pRes = NULL;
+ UserDataMap_t::iterator aIt( m_aUserData.find( pEntry ) );
+ if (aIt != m_aUserData.end())
+ pRes = &aIt->second;
+ return pRes;
}
@@ -230,10 +236,9 @@ SvLBoxEntry * ThesaurusAlternativesCtrl_Impl::AddEntry( sal_Int32 nVal, const St
pEntry->AddItem( new SvLBoxString( pEntry, 0, String() ) ); // add empty column
aText += rText;
pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0 ) ); // otherwise crash
- pEntry->AddItem( new AlternativesString_Impl( pEntry, 0, aText ) );
+ pEntry->AddItem( new AlternativesString_Impl( *this, pEntry, 0, aText ) );
- AlternativesUserData_Impl* pUserData = new AlternativesUserData_Impl( rText, bIsHeader );
- pEntry->SetUserData( pUserData );
+ SetExtraData( pEntry, AlternativesExtraData( rText, bIsHeader ) );
GetModel()->Insert( pEntry );
if (bIsHeader)
@@ -365,7 +370,7 @@ bool SvxThesaurusDialog_Impl::UpdateAlternativesBox_Impl()
m_pAlternativesCT->SetUpdateMode( FALSE );
// clear old user data of control before creating new ones via AddEntry below
- m_pAlternativesCT->ClearUserData();
+ m_pAlternativesCT->ClearExtraData();
m_pAlternativesCT->Clear();
for (sal_Int32 i = 0; i < nMeanings; ++i)
@@ -454,7 +459,7 @@ IMPL_LINK( SvxThesaurusDialog_Impl, WordSelectHdl_Impl, ComboBox *, pBox )
{
USHORT nPos = pBox->GetSelectEntryPos();
String aStr( pBox->GetEntry( nPos ) );
- GetReplaceEditString( aStr );
+ aStr = linguistic::GetThesaurusReplaceText( aStr );
aWordCB.SetText( aStr );
LookUp_Impl();
}
@@ -468,12 +473,12 @@ IMPL_LINK( SvxThesaurusDialog_Impl, AlternativesSelectHdl_Impl, SvxCheckListBox
SvLBoxEntry *pEntry = pBox ? pBox->GetCurEntry() : NULL;
if (pEntry)
{
- AlternativesUserData_Impl * pData = (AlternativesUserData_Impl *) pEntry->GetUserData();
+ AlternativesExtraData * pData = m_pAlternativesCT->GetExtraData( pEntry );
String aStr;
- if (!pData->IsHeader())
+ if (pData && !pData->IsHeader())
{
aStr = pData->GetText();
- GetReplaceEditString( aStr );
+ aStr = linguistic::GetThesaurusReplaceText( aStr );
}
aReplaceEdit.SetText( aStr );
}
@@ -486,12 +491,12 @@ IMPL_LINK( SvxThesaurusDialog_Impl, AlternativesDoubleClickHdl_Impl, SvxCheckLis
SvLBoxEntry *pEntry = pBox ? pBox->GetCurEntry() : NULL;
if (pEntry)
{
- AlternativesUserData_Impl * pData = (AlternativesUserData_Impl *) pEntry->GetUserData();
+ AlternativesExtraData * pData = m_pAlternativesCT->GetExtraData( pEntry );
String aStr;
- if (!pData->IsHeader())
+ if (pData && !pData->IsHeader())
{
aStr = pData->GetText();
- GetReplaceEditString( aStr );
+ aStr = linguistic::GetThesaurusReplaceText( aStr );
}
aWordCB.SetText( aStr );
@@ -509,8 +514,8 @@ IMPL_LINK( SvxThesaurusDialog_Impl, AlternativesDoubleClickHdl_Impl, SvxCheckLis
IMPL_STATIC_LINK( SvxThesaurusDialog_Impl, SelectFirstHdl_Impl, SvxCheckListBox *, pBox )
{
(void) pThis;
- if (pBox && pBox->GetEntryCount() > 0)
- pBox->SelectEntryPos( 0 );
+ if (pBox && pBox->GetEntryCount() >= 2)
+ pBox->SelectEntryPos( 1 ); // pos 0 is a 'header' that is not selectable
return 0;
}