xref: /aoo41x/main/cui/source/tabpages/autocdlg.cxx (revision 2d6beb75)
12ee96f1cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
32ee96f1cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
42ee96f1cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
52ee96f1cSAndrew Rist  * distributed with this work for additional information
62ee96f1cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
72ee96f1cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
82ee96f1cSAndrew Rist  * "License"); you may not use this file except in compliance
92ee96f1cSAndrew Rist  * with the License.  You may obtain a copy of the License at
102ee96f1cSAndrew Rist  *
112ee96f1cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
122ee96f1cSAndrew Rist  *
132ee96f1cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
142ee96f1cSAndrew Rist  * software distributed under the License is distributed on an
152ee96f1cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
162ee96f1cSAndrew Rist  * KIND, either express or implied.  See the License for the
172ee96f1cSAndrew Rist  * specific language governing permissions and limitations
182ee96f1cSAndrew Rist  * under the License.
192ee96f1cSAndrew Rist  *
202ee96f1cSAndrew Rist  *************************************************************/
212ee96f1cSAndrew Rist 
222ee96f1cSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_cui.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #define _SVSTDARR_STRINGSISORTDTOR
28cdf0e10cSrcweir #define _SVSTDARR_STRINGSDTOR
29cdf0e10cSrcweir #include <svl/svstdarr.hxx>
30cdf0e10cSrcweir #include <vcl/msgbox.hxx>
31cdf0e10cSrcweir #include <vcl/field.hxx>
32cdf0e10cSrcweir #include <vcl/keycodes.hxx>
33cdf0e10cSrcweir #include <sot/exchange.hxx>
34cdf0e10cSrcweir #include <svtools/transfer.hxx>
35cdf0e10cSrcweir #include <unotools/syslocale.hxx>
36cdf0e10cSrcweir #include <sfx2/objsh.hxx>
37cdf0e10cSrcweir #include <sfx2/viewsh.hxx>
38cdf0e10cSrcweir #include <unotools/charclass.hxx>
39cdf0e10cSrcweir #include <unotools/collatorwrapper.hxx>
40cdf0e10cSrcweir #include <com/sun/star/i18n/CollatorOptions.hpp>
41cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
42cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
43cdf0e10cSrcweir #include <vcl/svapp.hxx>
44cdf0e10cSrcweir #include <sfx2/module.hxx>
45cdf0e10cSrcweir #include <sfx2/request.hxx>
46cdf0e10cSrcweir #include <sfx2/sfxsids.hrc>
47cdf0e10cSrcweir #include <svl/eitem.hxx>
48cdf0e10cSrcweir #include <svl/languageoptions.hxx>
49cdf0e10cSrcweir #include <svx/SmartTagMgr.hxx>
50cdf0e10cSrcweir #include <com/sun/star/smarttags/XSmartTagRecognizer.hpp>
51cdf0e10cSrcweir #include <com/sun/star/smarttags/XSmartTagAction.hpp>
52cdf0e10cSrcweir 
53cdf0e10cSrcweir #define _OFA_AUTOCDLG_CXX
54cdf0e10cSrcweir #include "autocdlg.hxx"
55cdf0e10cSrcweir #include "autocdlg.hrc"
56cdf0e10cSrcweir #include "helpid.hrc"
57cdf0e10cSrcweir #include <editeng/acorrcfg.hxx>
58cdf0e10cSrcweir #include <editeng/svxacorr.hxx>
59cdf0e10cSrcweir #include "cuicharmap.hxx"
60cdf0e10cSrcweir #include <editeng/unolingu.hxx>
61cdf0e10cSrcweir #include <dialmgr.hxx>
62cdf0e10cSrcweir #include <svx/svxids.hrc> // SID_OPEN_SMARTTAGSOPTIONS
63cdf0e10cSrcweir 
64cdf0e10cSrcweir static LanguageType eLastDialogLanguage = LANGUAGE_SYSTEM;
65cdf0e10cSrcweir 
66cdf0e10cSrcweir using namespace ::com::sun::star::util;
67cdf0e10cSrcweir using namespace ::com::sun::star;
68cdf0e10cSrcweir using namespace ::rtl;
69cdf0e10cSrcweir 
70cdf0e10cSrcweir static ::com::sun::star::uno::Reference<
GetProcessFact()71cdf0e10cSrcweir 		::com::sun::star::lang::XMultiServiceFactory >& GetProcessFact()
72cdf0e10cSrcweir {
73cdf0e10cSrcweir 	static ::com::sun::star::uno::Reference<
74cdf0e10cSrcweir 			::com::sun::star::lang::XMultiServiceFactory > xMSF =
75cdf0e10cSrcweir 									::comphelper::getProcessServiceFactory();
76cdf0e10cSrcweir 	return xMSF;
77cdf0e10cSrcweir }
78cdf0e10cSrcweir 
79cdf0e10cSrcweir /*-----------------14.10.96 15.47-------------------
80cdf0e10cSrcweir 
81cdf0e10cSrcweir --------------------------------------------------*/
82cdf0e10cSrcweir 
OfaAutoCorrDlg(Window * pParent,const SfxItemSet * _pSet)83cdf0e10cSrcweir OfaAutoCorrDlg::OfaAutoCorrDlg(Window* pParent, const SfxItemSet* _pSet ) :
84cdf0e10cSrcweir     SfxTabDialog(pParent, CUI_RES( RID_OFA_AUTOCORR_DLG ), _pSet),
85cdf0e10cSrcweir 	aLanguageFT(    this, CUI_RES(FT_LANG 		  )),
86cdf0e10cSrcweir 	aLanguageLB(    this, CUI_RES(LB_LANG    		  ))
87cdf0e10cSrcweir {
88cdf0e10cSrcweir 	sal_Bool bShowSWOptions = sal_False;
89cdf0e10cSrcweir     sal_Bool bOpenSmartTagOptions = sal_False;
90cdf0e10cSrcweir 
91cdf0e10cSrcweir     if ( _pSet )
92cdf0e10cSrcweir 	{
93cdf0e10cSrcweir         SFX_ITEMSET_ARG( _pSet, pItem, SfxBoolItem, SID_AUTO_CORRECT_DLG, sal_False );
94cdf0e10cSrcweir 		if ( pItem && pItem->GetValue() )
95cdf0e10cSrcweir 			bShowSWOptions = sal_True;
96cdf0e10cSrcweir 
97cdf0e10cSrcweir         SFX_ITEMSET_ARG( _pSet, pItem2, SfxBoolItem, SID_OPEN_SMARTTAGOPTIONS, sal_False );
98cdf0e10cSrcweir 		if ( pItem2 && pItem2->GetValue() )
99cdf0e10cSrcweir 			bOpenSmartTagOptions = sal_True;
100cdf0e10cSrcweir 	}
101cdf0e10cSrcweir 
102cdf0e10cSrcweir 	aLanguageFT.SetZOrder(0, WINDOW_ZORDER_FIRST);
103cdf0e10cSrcweir 	aLanguageLB.SetZOrder(&aLanguageFT, WINDOW_ZORDER_BEHIND);
104cdf0e10cSrcweir 	aLanguageLB.SetHelpId(HID_AUTOCORR_LANGUAGE);
105cdf0e10cSrcweir 	FreeResource();
106cdf0e10cSrcweir 
107cdf0e10cSrcweir 	AddTabPage(RID_OFAPAGE_AUTOCORR_OPTIONS, OfaAutocorrOptionsPage::Create, 0);
108cdf0e10cSrcweir 	AddTabPage(RID_OFAPAGE_AUTOFMT_APPLY, OfaSwAutoFmtOptionsPage::Create, 0);
109cdf0e10cSrcweir 	AddTabPage(RID_OFAPAGE_AUTOCOMPLETE_OPTIONS, OfaAutoCompleteTabPage::Create, 0);
110cdf0e10cSrcweir     AddTabPage(RID_OFAPAGE_SMARTTAG_OPTIONS, OfaSmartTagOptionsTabPage::Create, 0);
111cdf0e10cSrcweir 
112cdf0e10cSrcweir 	if (!bShowSWOptions)
113cdf0e10cSrcweir 	{
114cdf0e10cSrcweir 		RemoveTabPage(RID_OFAPAGE_AUTOFMT_APPLY);
115cdf0e10cSrcweir 		RemoveTabPage(RID_OFAPAGE_AUTOCOMPLETE_OPTIONS);
116cdf0e10cSrcweir 		RemoveTabPage(RID_OFAPAGE_SMARTTAG_OPTIONS);
117cdf0e10cSrcweir 	}
118cdf0e10cSrcweir 	else
119cdf0e10cSrcweir     {
120cdf0e10cSrcweir         // remove smart tag tab page if no extensions are installed
121cdf0e10cSrcweir         SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
122cdf0e10cSrcweir         SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
123cdf0e10cSrcweir         if ( !pOpt || !pOpt->pSmartTagMgr || 0 == pOpt->pSmartTagMgr->NumberOfRecognizers() )
124cdf0e10cSrcweir             RemoveTabPage(RID_OFAPAGE_SMARTTAG_OPTIONS);
125cdf0e10cSrcweir 
126cdf0e10cSrcweir 		RemoveTabPage(RID_OFAPAGE_AUTOCORR_OPTIONS);
127cdf0e10cSrcweir     }
128cdf0e10cSrcweir 
129cdf0e10cSrcweir 	AddTabPage(RID_OFAPAGE_AUTOCORR_REPLACE, OfaAutocorrReplacePage::Create, 0);
130cdf0e10cSrcweir 	AddTabPage(RID_OFAPAGE_AUTOCORR_EXCEPT,  OfaAutocorrExceptPage::Create, 0);
131cdf0e10cSrcweir 	AddTabPage(RID_OFAPAGE_AUTOCORR_QUOTE, 	 OfaQuoteTabPage::Create, 0);
132cdf0e10cSrcweir 
133cdf0e10cSrcweir 	// initialize languages
134cdf0e10cSrcweir 	//! LANGUAGE_NONE is displayed as '[All]' and the LanguageType
135cdf0e10cSrcweir 	//! will be set to LANGUAGE_DONTKNOW
136cdf0e10cSrcweir     sal_Int16 nLangList = LANG_LIST_WESTERN;
137cdf0e10cSrcweir 
138cdf0e10cSrcweir     if( SvtLanguageOptions().IsCTLFontEnabled() )
139cdf0e10cSrcweir         nLangList |= LANG_LIST_CTL;
140cdf0e10cSrcweir     aLanguageLB.SetLanguageList( nLangList, sal_True, sal_True );
141cdf0e10cSrcweir 	aLanguageLB.SelectLanguage( LANGUAGE_NONE );
142cdf0e10cSrcweir 	sal_uInt16 nPos = aLanguageLB.GetSelectEntryPos();
143cdf0e10cSrcweir 	DBG_ASSERT( LISTBOX_ENTRY_NOTFOUND != nPos, "listbox entry missing" );
144cdf0e10cSrcweir 	aLanguageLB.SetEntryData( nPos, (void*)(long) LANGUAGE_DONTKNOW );
145cdf0e10cSrcweir 
146cdf0e10cSrcweir 	// Initialisierung funktionier fuer static nicht unter Linux - deswegen hier
147cdf0e10cSrcweir 	if( LANGUAGE_SYSTEM == eLastDialogLanguage )
148cdf0e10cSrcweir 		eLastDialogLanguage = Application::GetSettings().GetLanguage();
149cdf0e10cSrcweir 
150cdf0e10cSrcweir 	LanguageType nSelectLang = LANGUAGE_DONTKNOW;
151cdf0e10cSrcweir 	nPos = aLanguageLB.GetEntryPos( (void*)(long) eLastDialogLanguage );
152cdf0e10cSrcweir 	if (LISTBOX_ENTRY_NOTFOUND != nPos)
153cdf0e10cSrcweir 		nSelectLang = eLastDialogLanguage;
154cdf0e10cSrcweir 	aLanguageLB.SelectLanguage( nSelectLang );
155cdf0e10cSrcweir 
156cdf0e10cSrcweir 	aLanguageLB.SetSelectHdl(LINK(this, OfaAutoCorrDlg, SelectLanguageHdl));
157cdf0e10cSrcweir 
158cdf0e10cSrcweir     Size aMinSize(aLanguageFT.CalcMinimumSize());
159cdf0e10cSrcweir     //reserve some extra space for CJK accelerators that are possible inserted
160cdf0e10cSrcweir     //later (like '(A)')
161cdf0e10cSrcweir     aLanguageFT.SetPosSizePixel( 0, 0, aMinSize.Width() + 20, 0, WINDOW_POSSIZE_WIDTH );
162cdf0e10cSrcweir 
163cdf0e10cSrcweir     if ( bOpenSmartTagOptions )
164cdf0e10cSrcweir         SetCurPageId( RID_OFAPAGE_SMARTTAG_OPTIONS );
165cdf0e10cSrcweir }
166cdf0e10cSrcweir /*-----------------16.10.96 14.06-------------------
167cdf0e10cSrcweir 
168cdf0e10cSrcweir --------------------------------------------------*/
169cdf0e10cSrcweir 
lcl_FindEntry(ListBox & rLB,const String & rEntry,CollatorWrapper & rCmpClass)170cdf0e10cSrcweir sal_Bool lcl_FindEntry( ListBox& rLB, const String& rEntry,
171cdf0e10cSrcweir 					CollatorWrapper& rCmpClass )
172cdf0e10cSrcweir {
173cdf0e10cSrcweir 	sal_uInt16 nCount = rLB.GetEntryCount();
174cdf0e10cSrcweir 	sal_uInt16 nSelPos = rLB.GetSelectEntryPos();
175cdf0e10cSrcweir 	sal_uInt16 i;
176cdf0e10cSrcweir 	for(i = 0; i < nCount; i++)
177cdf0e10cSrcweir 	{
178cdf0e10cSrcweir 		if( 0 == rCmpClass.compareString(rEntry, rLB.GetEntry(i) ))
179cdf0e10cSrcweir 		{
180cdf0e10cSrcweir 			rLB.SelectEntryPos(i, sal_True);
181cdf0e10cSrcweir 			return sal_True;
182cdf0e10cSrcweir 		}
183cdf0e10cSrcweir 	}
184cdf0e10cSrcweir 	if(LISTBOX_ENTRY_NOTFOUND != nSelPos)
185cdf0e10cSrcweir 		rLB.SelectEntryPos(nSelPos, sal_False);
186cdf0e10cSrcweir 	return sal_False;
187cdf0e10cSrcweir }
188cdf0e10cSrcweir 
189cdf0e10cSrcweir /* -----------------23.11.98 10:46-------------------
190cdf0e10cSrcweir  *
191cdf0e10cSrcweir  * --------------------------------------------------*/
IMPL_LINK(OfaAutoCorrDlg,SelectLanguageHdl,ListBox *,pBox)192cdf0e10cSrcweir IMPL_LINK(OfaAutoCorrDlg, SelectLanguageHdl, ListBox*, pBox)
193cdf0e10cSrcweir {
194cdf0e10cSrcweir 	sal_uInt16 nPos = pBox->GetSelectEntryPos();
195cdf0e10cSrcweir 	void* pVoid = pBox->GetEntryData(nPos);
196cdf0e10cSrcweir 	LanguageType eNewLang = (LanguageType)(long)pVoid;
197cdf0e10cSrcweir 	//alte Einstellungen speichern und neu fuellen
198cdf0e10cSrcweir 	if(eNewLang != eLastDialogLanguage)
199cdf0e10cSrcweir 	{
200cdf0e10cSrcweir 		sal_uInt16	nPageId = GetCurPageId();
201cdf0e10cSrcweir 		if(RID_OFAPAGE_AUTOCORR_REPLACE == nPageId)
202cdf0e10cSrcweir 			((OfaAutocorrReplacePage*)GetTabPage( nPageId ))->SetLanguage(eNewLang);
203cdf0e10cSrcweir 		else if(RID_OFAPAGE_AUTOCORR_EXCEPT == nPageId)
204cdf0e10cSrcweir 			((OfaAutocorrExceptPage*)GetTabPage( nPageId ))->SetLanguage(eNewLang);
205cdf0e10cSrcweir 	}
206cdf0e10cSrcweir 	return 0;
207cdf0e10cSrcweir }
208cdf0e10cSrcweir /*-----------------14.10.96 15.57-------------------
209cdf0e10cSrcweir 
210cdf0e10cSrcweir --------------------------------------------------*/
211cdf0e10cSrcweir 
OfaAutocorrOptionsPage(Window * pParent,const SfxItemSet & rSet)212cdf0e10cSrcweir OfaAutocorrOptionsPage::OfaAutocorrOptionsPage( Window* pParent,
213cdf0e10cSrcweir 												const SfxItemSet& rSet ) :
214cdf0e10cSrcweir 	SfxTabPage(pParent, CUI_RES( RID_OFAPAGE_AUTOCORR_OPTIONS ), rSet),
215cdf0e10cSrcweir 	aCheckLB			(this, CUI_RES(CLB_SETTINGS	)),
216cdf0e10cSrcweir 
217cdf0e10cSrcweir 	sInput    			(CUI_RES(ST_USE_REPLACE		)),
218cdf0e10cSrcweir     sDoubleCaps         (CUI_RES(ST_CPTL_STT_WORD     )),
219cdf0e10cSrcweir     sStartCap           (CUI_RES(ST_CPTL_STT_SENT     )),
220cdf0e10cSrcweir     sBoldUnderline      (CUI_RES(ST_BOLD_UNDER        )),
221cdf0e10cSrcweir     sURL                (CUI_RES(ST_DETECT_URL        )),
222cdf0e10cSrcweir     sNoDblSpaces        (CUI_RES(STR_NO_DBL_SPACES    )),
223cdf0e10cSrcweir 	sDash    			(CUI_RES(ST_DASH	         	))
224cdf0e10cSrcweir {
225cdf0e10cSrcweir 	FreeResource();
226cdf0e10cSrcweir 
227cdf0e10cSrcweir 	aCheckLB.SetHelpId(HID_OFAPAGE_AUTOCORR_CLB);
228cdf0e10cSrcweir }
229cdf0e10cSrcweir 
230cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
231cdf0e10cSrcweir 
232cdf0e10cSrcweir --------------------------------------------------*/
233cdf0e10cSrcweir 
234cdf0e10cSrcweir 
~OfaAutocorrOptionsPage()235cdf0e10cSrcweir OfaAutocorrOptionsPage::~OfaAutocorrOptionsPage()
236cdf0e10cSrcweir {
237cdf0e10cSrcweir }
238cdf0e10cSrcweir 
239cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
240cdf0e10cSrcweir 
241cdf0e10cSrcweir --------------------------------------------------*/
242cdf0e10cSrcweir 
243cdf0e10cSrcweir 
Create(Window * pParent,const SfxItemSet & rSet)244cdf0e10cSrcweir SfxTabPage*	OfaAutocorrOptionsPage::Create( Window* pParent,
245cdf0e10cSrcweir 								const SfxItemSet& rSet)
246cdf0e10cSrcweir {
247cdf0e10cSrcweir 	return new OfaAutocorrOptionsPage(pParent, rSet);
248cdf0e10cSrcweir }
249cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
250cdf0e10cSrcweir 
251cdf0e10cSrcweir --------------------------------------------------*/
252cdf0e10cSrcweir 
253cdf0e10cSrcweir 
FillItemSet(SfxItemSet &)254cdf0e10cSrcweir sal_Bool OfaAutocorrOptionsPage::FillItemSet( SfxItemSet& )
255cdf0e10cSrcweir {
256cdf0e10cSrcweir 	SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
257cdf0e10cSrcweir 	long nFlags = pAutoCorrect->GetFlags();
258cdf0e10cSrcweir 
259cdf0e10cSrcweir 	sal_uInt16 nPos = 0;
260cdf0e10cSrcweir 	pAutoCorrect->SetAutoCorrFlag(Autocorrect, 			aCheckLB.IsChecked(nPos++));
261cdf0e10cSrcweir 	pAutoCorrect->SetAutoCorrFlag(CptlSttWrd, 			aCheckLB.IsChecked(nPos++));
262cdf0e10cSrcweir 	pAutoCorrect->SetAutoCorrFlag(CptlSttSntnc, 		aCheckLB.IsChecked(nPos++));
263cdf0e10cSrcweir 	pAutoCorrect->SetAutoCorrFlag(ChgWeightUnderl,		aCheckLB.IsChecked(nPos++));
264cdf0e10cSrcweir 	pAutoCorrect->SetAutoCorrFlag(SetINetAttr, 			aCheckLB.IsChecked(nPos++));
265cdf0e10cSrcweir 	pAutoCorrect->SetAutoCorrFlag(ChgToEnEmDash,		aCheckLB.IsChecked(nPos++));
266cdf0e10cSrcweir 	pAutoCorrect->SetAutoCorrFlag(IgnoreDoubleSpace,	aCheckLB.IsChecked(nPos++));
267cdf0e10cSrcweir 
268cdf0e10cSrcweir 	sal_Bool bReturn = nFlags != pAutoCorrect->GetFlags();
269cdf0e10cSrcweir 	if(bReturn )
270cdf0e10cSrcweir     {
271cdf0e10cSrcweir         SvxAutoCorrCfg* pCfg = SvxAutoCorrCfg::Get();
272cdf0e10cSrcweir         pCfg->SetModified();
273cdf0e10cSrcweir         pCfg->Commit();
274cdf0e10cSrcweir     }
275cdf0e10cSrcweir 	return bReturn;
276cdf0e10cSrcweir }
277cdf0e10cSrcweir 
278cdf0e10cSrcweir /* -----------------23.11.98 16:15-------------------
279cdf0e10cSrcweir  *
280cdf0e10cSrcweir  * --------------------------------------------------*/
ActivatePage(const SfxItemSet &)281cdf0e10cSrcweir void	OfaAutocorrOptionsPage::ActivatePage( const SfxItemSet& )
282cdf0e10cSrcweir {
283cdf0e10cSrcweir 	((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage(sal_False);
284cdf0e10cSrcweir }
285cdf0e10cSrcweir 
286cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
287cdf0e10cSrcweir 
288cdf0e10cSrcweir --------------------------------------------------*/
289cdf0e10cSrcweir 
290cdf0e10cSrcweir 
Reset(const SfxItemSet &)291cdf0e10cSrcweir void OfaAutocorrOptionsPage::Reset( const SfxItemSet& )
292cdf0e10cSrcweir {
293cdf0e10cSrcweir 	SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
294cdf0e10cSrcweir 	const long nFlags = pAutoCorrect->GetFlags();
295cdf0e10cSrcweir 
296cdf0e10cSrcweir 	aCheckLB.SetUpdateMode(sal_False);
297cdf0e10cSrcweir 	aCheckLB.Clear();
298cdf0e10cSrcweir 
299cdf0e10cSrcweir 	aCheckLB.InsertEntry(sInput);
300cdf0e10cSrcweir 	aCheckLB.InsertEntry(sDoubleCaps);
301cdf0e10cSrcweir 	aCheckLB.InsertEntry(sStartCap);
302cdf0e10cSrcweir 	aCheckLB.InsertEntry(sBoldUnderline);
303cdf0e10cSrcweir 	aCheckLB.InsertEntry(sURL);
304cdf0e10cSrcweir 	aCheckLB.InsertEntry(sDash);
305cdf0e10cSrcweir 	aCheckLB.InsertEntry(sNoDblSpaces);
306cdf0e10cSrcweir 
307cdf0e10cSrcweir 	sal_uInt16 nPos = 0;
308cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & Autocorrect) );
309cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & CptlSttWrd) );
310cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & CptlSttSntnc) );
311cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & ChgWeightUnderl) );
312cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & SetINetAttr) );
313cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & ChgToEnEmDash) );
314cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & IgnoreDoubleSpace) );
315cdf0e10cSrcweir 
316cdf0e10cSrcweir 	aCheckLB.SetUpdateMode(sal_True);
317cdf0e10cSrcweir }
318cdf0e10cSrcweir 
319cdf0e10cSrcweir /*********************************************************************/
320cdf0e10cSrcweir /*                                                                   */
321cdf0e10cSrcweir /*  Hilfs-struct fuer dUserDaten der Checklistbox                    */
322cdf0e10cSrcweir /*                                                                   */
323cdf0e10cSrcweir /*********************************************************************/
324cdf0e10cSrcweir 
325cdf0e10cSrcweir struct ImpUserData
326cdf0e10cSrcweir {
327cdf0e10cSrcweir 	String 	*pString;
328cdf0e10cSrcweir 	Font* 	pFont;
329cdf0e10cSrcweir 
ImpUserDataImpUserData330cdf0e10cSrcweir 	ImpUserData(String* pText, Font* pFnt)
331cdf0e10cSrcweir 		{ pString = pText; pFont = pFnt;}
332cdf0e10cSrcweir };
333cdf0e10cSrcweir 
334cdf0e10cSrcweir 
335cdf0e10cSrcweir /*********************************************************************/
336cdf0e10cSrcweir /*                                                                   */
337cdf0e10cSrcweir /*	Dialog fuer Prozenteinstellung                                   */
338cdf0e10cSrcweir /*                                                                   */
339cdf0e10cSrcweir /*********************************************************************/
340cdf0e10cSrcweir 
341cdf0e10cSrcweir class OfaAutoFmtPrcntSet : public ModalDialog
342cdf0e10cSrcweir {
343cdf0e10cSrcweir 	OKButton 		aOKPB;
344cdf0e10cSrcweir 	CancelButton	aCancelPB;
345cdf0e10cSrcweir 	FixedLine		aPrcntFL;
346cdf0e10cSrcweir 	MetricField		aPrcntMF;
347cdf0e10cSrcweir 
348cdf0e10cSrcweir 	public:
OfaAutoFmtPrcntSet(Window * pParent)349cdf0e10cSrcweir 		OfaAutoFmtPrcntSet(Window* pParent) :
350cdf0e10cSrcweir 			ModalDialog(pParent, CUI_RES(RID_OFADLG_PRCNT_SET)),
351cdf0e10cSrcweir 				aOKPB(this, 		CUI_RES(BT_OK)),
352cdf0e10cSrcweir 				aCancelPB(this, 	CUI_RES(BT_CANCEL)),
353cdf0e10cSrcweir 				aPrcntFL(this, 		CUI_RES(FL_PRCNT)),
354cdf0e10cSrcweir 				aPrcntMF(this, 	CUI_RES(ED_RIGHT_MARGIN))
355cdf0e10cSrcweir 			{
356cdf0e10cSrcweir 				FreeResource();
357cdf0e10cSrcweir 			}
GetPrcntFld()358cdf0e10cSrcweir 	MetricField& 	GetPrcntFld(){return aPrcntMF;}
359cdf0e10cSrcweir };
360cdf0e10cSrcweir 
361cdf0e10cSrcweir 
362cdf0e10cSrcweir /*********************************************************************/
363cdf0e10cSrcweir /*                                                                   */
364cdf0e10cSrcweir /*  veraenderter LBoxString                                          */
365cdf0e10cSrcweir /*                                                                   */
366cdf0e10cSrcweir /*********************************************************************/
367cdf0e10cSrcweir 
368cdf0e10cSrcweir class OfaImpBrwString : public SvLBoxString
369cdf0e10cSrcweir {
370cdf0e10cSrcweir public:
371cdf0e10cSrcweir 
OfaImpBrwString(SvLBoxEntry * pEntry,sal_uInt16 nFlags,const String & rStr)372cdf0e10cSrcweir 	OfaImpBrwString( SvLBoxEntry* pEntry, sal_uInt16 nFlags,
373cdf0e10cSrcweir 		const String& rStr ) : SvLBoxString(pEntry,nFlags,rStr){}
374cdf0e10cSrcweir 
375cdf0e10cSrcweir 	virtual void Paint( const Point& rPos, SvLBox& rDev, sal_uInt16 nFlags,
376cdf0e10cSrcweir 											SvLBoxEntry* pEntry);
377cdf0e10cSrcweir };
378cdf0e10cSrcweir 
379cdf0e10cSrcweir /*********************************************************************/
380cdf0e10cSrcweir /*                                                                   */
381cdf0e10cSrcweir /*********************************************************************/
382cdf0e10cSrcweir 
383cdf0e10cSrcweir 
Paint(const Point & rPos,SvLBox & rDev,sal_uInt16,SvLBoxEntry * pEntry)384cdf0e10cSrcweir void __EXPORT OfaImpBrwString::Paint( const Point& rPos, SvLBox& rDev, sal_uInt16 /*nFlags*/,
385cdf0e10cSrcweir 	SvLBoxEntry* pEntry )
386cdf0e10cSrcweir {
387cdf0e10cSrcweir 	rDev.DrawText( rPos, GetText() );
388cdf0e10cSrcweir 	if(pEntry->GetUserData())
389cdf0e10cSrcweir 	{
390cdf0e10cSrcweir 		ImpUserData* pUserData = (ImpUserData* )pEntry->GetUserData();
391cdf0e10cSrcweir 		Point aNewPos(rPos);
392cdf0e10cSrcweir 		aNewPos.X() += rDev.GetTextWidth(GetText());
393cdf0e10cSrcweir 		Font aOldFont( rDev.GetFont());
394cdf0e10cSrcweir 		Font aFont( aOldFont );
395cdf0e10cSrcweir 		if(pUserData->pFont)
396cdf0e10cSrcweir 		{
397cdf0e10cSrcweir 			aFont = *pUserData->pFont;
398cdf0e10cSrcweir 			aFont.SetColor(aOldFont.GetColor());
399cdf0e10cSrcweir 			aFont.SetSize(aOldFont.GetSize());
400cdf0e10cSrcweir 		}
401cdf0e10cSrcweir 		aFont.SetWeight( WEIGHT_BOLD );
402cdf0e10cSrcweir 
403cdf0e10cSrcweir 		sal_Bool bFett = sal_True;
404cdf0e10cSrcweir 		sal_uInt16 nPos = 0;
405cdf0e10cSrcweir 		do {
406cdf0e10cSrcweir 			String sTxt( pUserData->pString->GetToken( 0, 1, nPos ));
407cdf0e10cSrcweir 
408cdf0e10cSrcweir 			if( bFett )
409cdf0e10cSrcweir 				rDev.SetFont( aFont );
410cdf0e10cSrcweir 
411cdf0e10cSrcweir 			rDev.DrawText( aNewPos, sTxt );
412cdf0e10cSrcweir 
413cdf0e10cSrcweir 			if( STRING_NOTFOUND != nPos )
414cdf0e10cSrcweir 				aNewPos.X() += rDev.GetTextWidth( sTxt );
415cdf0e10cSrcweir 
416cdf0e10cSrcweir 			if( bFett )
417cdf0e10cSrcweir 				rDev.SetFont( aOldFont );
418cdf0e10cSrcweir 
419cdf0e10cSrcweir 			bFett = !bFett;
420cdf0e10cSrcweir 		} while( STRING_NOTFOUND != nPos );
421cdf0e10cSrcweir 	}
422cdf0e10cSrcweir }
423cdf0e10cSrcweir 
424cdf0e10cSrcweir /*********************************************************************/
425cdf0e10cSrcweir /*                                                                   */
426cdf0e10cSrcweir /* 	TabPage Autoformat anwenden			                             */
427cdf0e10cSrcweir /*                                                                   */
428cdf0e10cSrcweir /*********************************************************************/
429cdf0e10cSrcweir 
430cdf0e10cSrcweir #define CBCOL_FIRST		0
431cdf0e10cSrcweir #define CBCOL_SECOND	1
432cdf0e10cSrcweir #define CBCOL_BOTH		2
433cdf0e10cSrcweir 
434cdf0e10cSrcweir enum OfaAutoFmtOptions
435cdf0e10cSrcweir {
436cdf0e10cSrcweir 	USE_REPLACE_TABLE,
437cdf0e10cSrcweir 	CORR_UPPER,
438cdf0e10cSrcweir 	BEGIN_UPPER,
439cdf0e10cSrcweir 	BOLD_UNDERLINE,
440cdf0e10cSrcweir 	DETECT_URL,
441cdf0e10cSrcweir 	REPLACE_DASHES,
442cdf0e10cSrcweir 	DEL_SPACES_AT_STT_END,
443cdf0e10cSrcweir 	DEL_SPACES_BETWEEN_LINES,
444cdf0e10cSrcweir 	IGNORE_DBLSPACE,
445cdf0e10cSrcweir 	APPLY_NUMBERING,
446cdf0e10cSrcweir 	INSERT_BORDER,
447cdf0e10cSrcweir 	CREATE_TABLE,
448cdf0e10cSrcweir 	REPLACE_STYLES,
449cdf0e10cSrcweir 	DEL_EMPTY_NODE,
450cdf0e10cSrcweir 	REPLACE_USER_COLL,
451cdf0e10cSrcweir 	REPLACE_BULLETS,
452cdf0e10cSrcweir 	MERGE_SINGLE_LINE_PARA
453cdf0e10cSrcweir };
454cdf0e10cSrcweir 
OfaSwAutoFmtOptionsPage(Window * pParent,const SfxItemSet & rSet)455cdf0e10cSrcweir OfaSwAutoFmtOptionsPage::OfaSwAutoFmtOptionsPage( Window* pParent,
456cdf0e10cSrcweir 								const SfxItemSet& rSet ) :
457cdf0e10cSrcweir 	SfxTabPage(pParent, CUI_RES(RID_OFAPAGE_AUTOFMT_APPLY), rSet),
458cdf0e10cSrcweir 	aCheckLB			(this,	CUI_RES(CLB_SETTINGS)),
459cdf0e10cSrcweir 	aEditPB				(this, 	CUI_RES(PB_EDIT)),
460cdf0e10cSrcweir 	aHeader1Expl		(this, 	CUI_RES(FT_HEADER1_EXPLANATION)),
461cdf0e10cSrcweir 	aHeader2Expl		(this, 	CUI_RES(FT_HEADER2_EXPLANATION)),
462cdf0e10cSrcweir 	sHeader1			(CUI_RES( STR_HEADER1		)),
463cdf0e10cSrcweir 	sHeader2			(CUI_RES( STR_HEADER2		)),
464cdf0e10cSrcweir 	sDeleteEmptyPara	(CUI_RES( ST_DEL_EMPTY_PARA)),
465cdf0e10cSrcweir 	sUseReplaceTbl		(CUI_RES(	ST_USE_REPLACE  )),
466cdf0e10cSrcweir 	sCptlSttWord		(CUI_RES(	ST_CPTL_STT_WORD)),
467cdf0e10cSrcweir 	sCptlSttSent		(CUI_RES(	ST_CPTL_STT_SENT)),
468cdf0e10cSrcweir 	sUserStyle			(CUI_RES(	ST_USER_STYLE   )),
469cdf0e10cSrcweir 	sBullet				(CUI_RES(	ST_BULLET       )),
470cdf0e10cSrcweir 	sBoldUnder			(CUI_RES(	ST_BOLD_UNDER   )),
471cdf0e10cSrcweir 	sNoDblSpaces		(CUI_RES(	STR_NO_DBL_SPACES)),
472cdf0e10cSrcweir 	sDetectURL			(CUI_RES(	ST_DETECT_URL   )),
473cdf0e10cSrcweir 	sDash				(CUI_RES(	ST_DASH         )),
474cdf0e10cSrcweir 	sRightMargin		(CUI_RES(	ST_RIGHT_MARGIN	)),
475cdf0e10cSrcweir 	sNum				(CUI_RES(	STR_NUM			)),
476cdf0e10cSrcweir 	sBorder				(CUI_RES(	STR_BORDER		)),
477cdf0e10cSrcweir 	sTable				(CUI_RES(	STR_TABLE		)),
478cdf0e10cSrcweir 	sReplaceTemplates   (CUI_RES(	STR_REPLACE_TEMPLATES)),
479cdf0e10cSrcweir 	sDelSpaceAtSttEnd	(CUI_RES(	STR_DEL_SPACES_AT_STT_END)),
480cdf0e10cSrcweir 	sDelSpaceBetweenLines(CUI_RES(STR_DEL_SPACES_BETWEEN_LINES)),
481cdf0e10cSrcweir 
482cdf0e10cSrcweir 	nPercent		( 50 ),
483cdf0e10cSrcweir 	pCheckButtonData( NULL )
484cdf0e10cSrcweir 
485cdf0e10cSrcweir {
486cdf0e10cSrcweir 	FreeResource();
487cdf0e10cSrcweir 
488cdf0e10cSrcweir 	//typ. Anfuehrungszeichen einsetzen
489cdf0e10cSrcweir 	SvtSysLocale aSysLcl;
490cdf0e10cSrcweir 
491cdf0e10cSrcweir 	aCheckLB.SetHelpId(HID_OFAPAGE_AUTOFORMAT_CLB);
492cdf0e10cSrcweir 	aCheckLB.SetStyle(aCheckLB.GetStyle()|WB_HSCROLL| WB_VSCROLL);
493cdf0e10cSrcweir 
494cdf0e10cSrcweir 	aCheckLB.SetSelectHdl(LINK(this, OfaSwAutoFmtOptionsPage, SelectHdl));
495cdf0e10cSrcweir 	aCheckLB.SetDoubleClickHdl(LINK(this, OfaSwAutoFmtOptionsPage, EditHdl));
496cdf0e10cSrcweir 
497cdf0e10cSrcweir 	static long aStaticTabs[]=
498cdf0e10cSrcweir 	{
499cdf0e10cSrcweir 		3, 0, 20, 40
500cdf0e10cSrcweir 	};
501cdf0e10cSrcweir 
502cdf0e10cSrcweir 	aCheckLB.SvxSimpleTable::SetTabs(aStaticTabs);
503cdf0e10cSrcweir 	String sHeader( sHeader1 );
504cdf0e10cSrcweir 	sHeader += '\t';
505cdf0e10cSrcweir 	sHeader += sHeader2;
506cdf0e10cSrcweir 	sHeader += '\t';
507cdf0e10cSrcweir 	aCheckLB.InsertHeaderEntry( sHeader, HEADERBAR_APPEND,
508cdf0e10cSrcweir 						HIB_CENTER | HIB_VCENTER | HIB_FIXEDPOS | HIB_FIXED);
509cdf0e10cSrcweir 
510cdf0e10cSrcweir 	aEditPB.SetClickHdl(LINK(this, OfaSwAutoFmtOptionsPage, EditHdl));
511cdf0e10cSrcweir }
512cdf0e10cSrcweir 
513cdf0e10cSrcweir /*********************************************************************/
514cdf0e10cSrcweir /*                                                                   */
515cdf0e10cSrcweir /*********************************************************************/
516cdf0e10cSrcweir 
CreateEntry(String & rTxt,sal_uInt16 nCol)517cdf0e10cSrcweir SvLBoxEntry* OfaSwAutoFmtOptionsPage::CreateEntry(String& rTxt, sal_uInt16 nCol)
518cdf0e10cSrcweir {
519cdf0e10cSrcweir 	SvLBoxEntry* pEntry = new SvLBoxEntry;
520cdf0e10cSrcweir 
521cdf0e10cSrcweir 	if ( !pCheckButtonData )
522cdf0e10cSrcweir 	{
523cdf0e10cSrcweir 		pCheckButtonData = new SvLBoxButtonData( &aCheckLB );
524cdf0e10cSrcweir 		aCheckLB.SetCheckButtonData( pCheckButtonData );
525cdf0e10cSrcweir 	}
526cdf0e10cSrcweir 
527cdf0e10cSrcweir 	pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0));	// Sonst Puff!
528cdf0e10cSrcweir 
529cdf0e10cSrcweir 	String sEmpty;
530cdf0e10cSrcweir 	if (nCol == CBCOL_SECOND)
531cdf0e10cSrcweir 		pEntry->AddItem( new SvLBoxString( pEntry, 0, sEmpty) );	// Leerspalte
532cdf0e10cSrcweir 	else
533cdf0e10cSrcweir 		pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox, 0, pCheckButtonData ) );
534cdf0e10cSrcweir 
535cdf0e10cSrcweir 	if (nCol == CBCOL_FIRST)
536cdf0e10cSrcweir 		pEntry->AddItem( new SvLBoxString( pEntry, 0, sEmpty) );	// Leerspalte
537cdf0e10cSrcweir 	else
538cdf0e10cSrcweir 		pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox, 0, pCheckButtonData ) );
539cdf0e10cSrcweir 	pEntry->AddItem( new OfaImpBrwString( pEntry, 0, rTxt ) );
540cdf0e10cSrcweir 
541cdf0e10cSrcweir 	return pEntry;
542cdf0e10cSrcweir }
543cdf0e10cSrcweir 
544cdf0e10cSrcweir /*********************************************************************/
545cdf0e10cSrcweir /*                                                                   */
546cdf0e10cSrcweir /*********************************************************************/
547cdf0e10cSrcweir 
548cdf0e10cSrcweir 
~OfaSwAutoFmtOptionsPage()549cdf0e10cSrcweir __EXPORT OfaSwAutoFmtOptionsPage::~OfaSwAutoFmtOptionsPage()
550cdf0e10cSrcweir {
551cdf0e10cSrcweir 	delete (ImpUserData*) aCheckLB.GetUserData( REPLACE_BULLETS );
552cdf0e10cSrcweir 	delete (ImpUserData*) aCheckLB.GetUserData( APPLY_NUMBERING );
553cdf0e10cSrcweir 	delete (ImpUserData*) aCheckLB.GetUserData( MERGE_SINGLE_LINE_PARA );
554cdf0e10cSrcweir 	delete pCheckButtonData;
555cdf0e10cSrcweir }
556cdf0e10cSrcweir 
557cdf0e10cSrcweir /*********************************************************************/
558cdf0e10cSrcweir /*                                                                   */
559cdf0e10cSrcweir /*********************************************************************/
560cdf0e10cSrcweir 
Create(Window * pParent,const SfxItemSet & rAttrSet)561cdf0e10cSrcweir SfxTabPage* __EXPORT OfaSwAutoFmtOptionsPage::Create( Window* pParent,
562cdf0e10cSrcweir 								const SfxItemSet& rAttrSet)
563cdf0e10cSrcweir {
564cdf0e10cSrcweir 	return new OfaSwAutoFmtOptionsPage(pParent, rAttrSet);
565cdf0e10cSrcweir }
566cdf0e10cSrcweir 
567cdf0e10cSrcweir /*********************************************************************/
568cdf0e10cSrcweir /*                                                                   */
569cdf0e10cSrcweir /*********************************************************************/
570cdf0e10cSrcweir 
FillItemSet(SfxItemSet &)571cdf0e10cSrcweir sal_Bool OfaSwAutoFmtOptionsPage::FillItemSet( SfxItemSet&  )
572cdf0e10cSrcweir {
573cdf0e10cSrcweir 	sal_Bool bModified = sal_False;
574cdf0e10cSrcweir 	SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
575cdf0e10cSrcweir 	SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
576cdf0e10cSrcweir 	long nFlags = pAutoCorrect->GetFlags();
577cdf0e10cSrcweir 
578cdf0e10cSrcweir 	sal_Bool bCheck = aCheckLB.IsChecked(USE_REPLACE_TABLE, CBCOL_FIRST);
579cdf0e10cSrcweir 	bModified |= pOpt->bAutoCorrect != bCheck;
580cdf0e10cSrcweir 	pOpt->bAutoCorrect = bCheck;
581cdf0e10cSrcweir 	pAutoCorrect->SetAutoCorrFlag(Autocorrect,
582cdf0e10cSrcweir 						aCheckLB.IsChecked(USE_REPLACE_TABLE, CBCOL_SECOND));
583cdf0e10cSrcweir 
584cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(CORR_UPPER, CBCOL_FIRST);
585cdf0e10cSrcweir 	bModified |= pOpt->bCptlSttWrd != bCheck;
586cdf0e10cSrcweir 	pOpt->bCptlSttWrd = bCheck;
587cdf0e10cSrcweir 	pAutoCorrect->SetAutoCorrFlag(CptlSttWrd,
588cdf0e10cSrcweir 						aCheckLB.IsChecked(CORR_UPPER, CBCOL_SECOND));
589cdf0e10cSrcweir 
590cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(BEGIN_UPPER, CBCOL_FIRST);
591cdf0e10cSrcweir 	bModified |= pOpt->bCptlSttSntnc != bCheck;
592cdf0e10cSrcweir 	pOpt->bCptlSttSntnc = bCheck;
593cdf0e10cSrcweir 	pAutoCorrect->SetAutoCorrFlag(CptlSttSntnc,
594cdf0e10cSrcweir 						aCheckLB.IsChecked(BEGIN_UPPER, CBCOL_SECOND));
595cdf0e10cSrcweir 
596cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(BOLD_UNDERLINE, CBCOL_FIRST);
597cdf0e10cSrcweir 	bModified |= pOpt->bChgWeightUnderl != bCheck;
598cdf0e10cSrcweir 	pOpt->bChgWeightUnderl = bCheck;
599cdf0e10cSrcweir 	pAutoCorrect->SetAutoCorrFlag(ChgWeightUnderl,
600cdf0e10cSrcweir 						aCheckLB.IsChecked(BOLD_UNDERLINE, CBCOL_SECOND));
601cdf0e10cSrcweir 
602cdf0e10cSrcweir 	pAutoCorrect->SetAutoCorrFlag(IgnoreDoubleSpace,
603cdf0e10cSrcweir 						aCheckLB.IsChecked(IGNORE_DBLSPACE, CBCOL_SECOND));
604cdf0e10cSrcweir 
605cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(DETECT_URL, CBCOL_FIRST);
606cdf0e10cSrcweir 	bModified |= pOpt->bSetINetAttr != bCheck;
607cdf0e10cSrcweir 	pOpt->bSetINetAttr = bCheck;
608cdf0e10cSrcweir 	pAutoCorrect->SetAutoCorrFlag(SetINetAttr,
609cdf0e10cSrcweir 						aCheckLB.IsChecked(DETECT_URL, CBCOL_SECOND));
610cdf0e10cSrcweir 
611cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(DEL_EMPTY_NODE, CBCOL_FIRST);
612cdf0e10cSrcweir 	bModified |= pOpt->bDelEmptyNode != bCheck;
613cdf0e10cSrcweir 	pOpt->bDelEmptyNode = bCheck;
614cdf0e10cSrcweir 
615cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(REPLACE_USER_COLL, CBCOL_FIRST);
616cdf0e10cSrcweir 	bModified |= pOpt->bChgUserColl != bCheck;
617cdf0e10cSrcweir 	pOpt->bChgUserColl = bCheck;
618cdf0e10cSrcweir 
619cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(REPLACE_BULLETS, CBCOL_FIRST);
620cdf0e10cSrcweir 	bModified |= pOpt->bChgEnumNum != bCheck;
621cdf0e10cSrcweir 	pOpt->bChgEnumNum = bCheck;
622cdf0e10cSrcweir 	bModified |= aBulletFont != pOpt->aBulletFont;
623cdf0e10cSrcweir 	pOpt->aBulletFont = aBulletFont;
624cdf0e10cSrcweir 	bModified |= String(pOpt->cBullet) != sBulletChar;
625cdf0e10cSrcweir 	pOpt->cBullet = sBulletChar.GetChar(0);
626cdf0e10cSrcweir 
627cdf0e10cSrcweir 	bModified |= aByInputBulletFont != pOpt->aByInputBulletFont;
628cdf0e10cSrcweir 	bModified |= String(pOpt->cByInputBullet) != sByInputBulletChar;
629cdf0e10cSrcweir 	pOpt->aByInputBulletFont = aByInputBulletFont;
630cdf0e10cSrcweir 	pOpt->cByInputBullet = sByInputBulletChar.GetChar(0);
631cdf0e10cSrcweir 
632cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(MERGE_SINGLE_LINE_PARA, CBCOL_FIRST);
633cdf0e10cSrcweir 	bModified |= pOpt->bRightMargin != bCheck;
634cdf0e10cSrcweir 	pOpt->bRightMargin = bCheck;
635cdf0e10cSrcweir 	bModified |= nPercent != pOpt->nRightMargin;
636cdf0e10cSrcweir 	pOpt->nRightMargin = (sal_uInt8)nPercent;
637cdf0e10cSrcweir 
638cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(APPLY_NUMBERING, CBCOL_SECOND);
639cdf0e10cSrcweir 	bModified |= pOpt->bSetNumRule != bCheck;
640cdf0e10cSrcweir 	pOpt->bSetNumRule = bCheck;
641cdf0e10cSrcweir 
642cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(INSERT_BORDER, CBCOL_SECOND);
643cdf0e10cSrcweir 	bModified |= pOpt->bSetBorder != bCheck;
644cdf0e10cSrcweir 	pOpt->bSetBorder = bCheck;
645cdf0e10cSrcweir 
646cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(CREATE_TABLE, CBCOL_SECOND);
647cdf0e10cSrcweir 	bModified |= pOpt->bCreateTable != bCheck;
648cdf0e10cSrcweir 	pOpt->bCreateTable = bCheck;
649cdf0e10cSrcweir 
650cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(REPLACE_STYLES, CBCOL_SECOND);
651cdf0e10cSrcweir 	bModified |= pOpt->bReplaceStyles != bCheck;
652cdf0e10cSrcweir 	pOpt->bReplaceStyles = bCheck;
653cdf0e10cSrcweir 
654cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(REPLACE_DASHES, CBCOL_FIRST);
655cdf0e10cSrcweir 	bModified |= pOpt->bChgToEnEmDash != bCheck;
656cdf0e10cSrcweir 	pOpt->bChgToEnEmDash = bCheck;
657cdf0e10cSrcweir 	pAutoCorrect->SetAutoCorrFlag(ChgToEnEmDash,
658cdf0e10cSrcweir 						aCheckLB.IsChecked(REPLACE_DASHES, CBCOL_SECOND));
659cdf0e10cSrcweir 
660cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(DEL_SPACES_AT_STT_END, CBCOL_FIRST);
661cdf0e10cSrcweir 	bModified |= pOpt->bAFmtDelSpacesAtSttEnd != bCheck;
662cdf0e10cSrcweir 	pOpt->bAFmtDelSpacesAtSttEnd = bCheck;
663cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(DEL_SPACES_AT_STT_END, CBCOL_SECOND);
664cdf0e10cSrcweir 	bModified |= pOpt->bAFmtByInpDelSpacesAtSttEnd != bCheck;
665cdf0e10cSrcweir 	pOpt->bAFmtByInpDelSpacesAtSttEnd = bCheck;
666cdf0e10cSrcweir 
667cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(DEL_SPACES_BETWEEN_LINES, CBCOL_FIRST);
668cdf0e10cSrcweir 	bModified |= pOpt->bAFmtDelSpacesBetweenLines != bCheck;
669cdf0e10cSrcweir 	pOpt->bAFmtDelSpacesBetweenLines = bCheck;
670cdf0e10cSrcweir 	bCheck = aCheckLB.IsChecked(DEL_SPACES_BETWEEN_LINES, CBCOL_SECOND);
671cdf0e10cSrcweir 	bModified |= pOpt->bAFmtByInpDelSpacesBetweenLines != bCheck;
672cdf0e10cSrcweir 	pOpt->bAFmtByInpDelSpacesBetweenLines = bCheck;
673cdf0e10cSrcweir 
674cdf0e10cSrcweir 	if(bModified || nFlags != pAutoCorrect->GetFlags())
675cdf0e10cSrcweir     {
676cdf0e10cSrcweir         SvxAutoCorrCfg* pCfg = SvxAutoCorrCfg::Get();
677cdf0e10cSrcweir         pCfg->SetModified();
678cdf0e10cSrcweir         pCfg->Commit();
679cdf0e10cSrcweir     }
680cdf0e10cSrcweir 
681cdf0e10cSrcweir 	return sal_True;
682cdf0e10cSrcweir }
683cdf0e10cSrcweir 
684cdf0e10cSrcweir /* -----------------23.11.98 16:15-------------------
685cdf0e10cSrcweir  *
686cdf0e10cSrcweir  * --------------------------------------------------*/
ActivatePage(const SfxItemSet &)687cdf0e10cSrcweir void	OfaSwAutoFmtOptionsPage::ActivatePage( const SfxItemSet& )
688cdf0e10cSrcweir {
689cdf0e10cSrcweir 	((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage(sal_False);
690cdf0e10cSrcweir }
691cdf0e10cSrcweir 
692cdf0e10cSrcweir /*********************************************************************/
693cdf0e10cSrcweir /*                                                                   */
694cdf0e10cSrcweir /*********************************************************************/
695cdf0e10cSrcweir 
696cdf0e10cSrcweir 
Reset(const SfxItemSet &)697cdf0e10cSrcweir void OfaSwAutoFmtOptionsPage::Reset( const SfxItemSet& )
698cdf0e10cSrcweir {
699cdf0e10cSrcweir 	SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
700cdf0e10cSrcweir 	SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
701cdf0e10cSrcweir 	const long nFlags = pAutoCorrect->GetFlags();
702cdf0e10cSrcweir 
703cdf0e10cSrcweir 	aCheckLB.SetUpdateMode(sal_False);
704cdf0e10cSrcweir 	aCheckLB.Clear();
705cdf0e10cSrcweir 
706cdf0e10cSrcweir 	// Die folgenden Eintraege muessen in der selben Reihenfolge, wie im
707cdf0e10cSrcweir 	// OfaAutoFmtOptions-enum eingefuegt werden!
708cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sUseReplaceTbl,		CBCOL_BOTH	));
709cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sCptlSttWord,		CBCOL_BOTH	));
710cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sCptlSttSent,		CBCOL_BOTH	));
711cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sBoldUnder,			CBCOL_BOTH	));
712cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sDetectURL,			CBCOL_BOTH	));
713cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sDash,				CBCOL_BOTH  ));
714cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sDelSpaceAtSttEnd,	CBCOL_BOTH  ));
715cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sDelSpaceBetweenLines, CBCOL_BOTH  ));
716cdf0e10cSrcweir 
717cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sNoDblSpaces,		CBCOL_SECOND));
718cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sNum,				CBCOL_SECOND));
719cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sBorder,			CBCOL_SECOND));
720cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sTable,				CBCOL_SECOND));
721cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sReplaceTemplates,	CBCOL_SECOND));
722cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sDeleteEmptyPara,	CBCOL_FIRST	));
723cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sUserStyle,			CBCOL_FIRST	));
724cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sBullet,			CBCOL_FIRST	));
725cdf0e10cSrcweir 	aCheckLB.GetModel()->Insert(CreateEntry(sRightMargin,		CBCOL_FIRST	));
726cdf0e10cSrcweir 
727cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( USE_REPLACE_TABLE, 	CBCOL_FIRST,	pOpt->bAutoCorrect );
728cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( USE_REPLACE_TABLE,	CBCOL_SECOND,	0 != (nFlags & Autocorrect));
729cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( CORR_UPPER,			CBCOL_FIRST,	pOpt->bCptlSttWrd );
730cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( CORR_UPPER,			CBCOL_SECOND,	0 != (nFlags & CptlSttWrd) );
731cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( BEGIN_UPPER,		CBCOL_FIRST,	pOpt->bCptlSttSntnc );
732cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( BEGIN_UPPER,		CBCOL_SECOND,	0 != (nFlags & CptlSttSntnc) );
733cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( BOLD_UNDERLINE,		CBCOL_FIRST,	pOpt->bChgWeightUnderl );
734cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( BOLD_UNDERLINE,		CBCOL_SECOND,	0 != (nFlags & ChgWeightUnderl) );
735cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( IGNORE_DBLSPACE,	CBCOL_SECOND,	0 != (nFlags & IgnoreDoubleSpace) );
736cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( DETECT_URL,			CBCOL_FIRST,	pOpt->bSetINetAttr );
737cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( DETECT_URL,			CBCOL_SECOND,	0 != (nFlags & SetINetAttr) );
738cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( REPLACE_DASHES,		CBCOL_FIRST,	pOpt->bChgToEnEmDash );
739cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( REPLACE_DASHES,		CBCOL_SECOND,	0 != (nFlags & ChgToEnEmDash) );
740cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( DEL_SPACES_AT_STT_END,		CBCOL_FIRST,	pOpt->bAFmtDelSpacesAtSttEnd );
741cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( DEL_SPACES_AT_STT_END,		CBCOL_SECOND,	pOpt->bAFmtByInpDelSpacesAtSttEnd );
742cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( DEL_SPACES_BETWEEN_LINES,	CBCOL_FIRST,	pOpt->bAFmtDelSpacesBetweenLines );
743cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( DEL_SPACES_BETWEEN_LINES,	CBCOL_SECOND,	pOpt->bAFmtByInpDelSpacesBetweenLines );
744cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( DEL_EMPTY_NODE,		CBCOL_FIRST,	pOpt->bDelEmptyNode );
745cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( REPLACE_USER_COLL,	CBCOL_FIRST,	pOpt->bChgUserColl );
746cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( REPLACE_BULLETS,	CBCOL_FIRST,	pOpt->bChgEnumNum );
747cdf0e10cSrcweir 
748cdf0e10cSrcweir 	aBulletFont = pOpt->aBulletFont;
749cdf0e10cSrcweir 	sBulletChar = pOpt->cBullet;
750cdf0e10cSrcweir 	ImpUserData* pUserData = new ImpUserData(&sBulletChar, &aBulletFont);
751cdf0e10cSrcweir 	aCheckLB.SetUserData(  REPLACE_BULLETS, pUserData );
752cdf0e10cSrcweir 
753cdf0e10cSrcweir 	nPercent = pOpt->nRightMargin;
754cdf0e10cSrcweir 	sMargin = ' ';
755cdf0e10cSrcweir 	sMargin += String::CreateFromInt32( nPercent );
756*2d6beb75STsutomu Uchino     sMargin.AppendAscii( " %" );
757cdf0e10cSrcweir 	pUserData = new ImpUserData(&sMargin, 0);
758cdf0e10cSrcweir 	aCheckLB.SetUserData( MERGE_SINGLE_LINE_PARA, pUserData );
759cdf0e10cSrcweir 
760cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( APPLY_NUMBERING,	CBCOL_SECOND,	pOpt->bSetNumRule );
761cdf0e10cSrcweir 
762cdf0e10cSrcweir 	aByInputBulletFont = pOpt->aByInputBulletFont;
763cdf0e10cSrcweir 	sByInputBulletChar = pOpt->cByInputBullet;
764cdf0e10cSrcweir 	ImpUserData* pUserData2 = new ImpUserData(&sByInputBulletChar, &aByInputBulletFont);
765cdf0e10cSrcweir 	aCheckLB.SetUserData( APPLY_NUMBERING , pUserData2 );
766cdf0e10cSrcweir 
767cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( MERGE_SINGLE_LINE_PARA, CBCOL_FIRST, pOpt->bRightMargin );
768cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( INSERT_BORDER,		CBCOL_SECOND,	pOpt->bSetBorder );
769cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( CREATE_TABLE,		CBCOL_SECOND,	pOpt->bCreateTable );
770cdf0e10cSrcweir 	aCheckLB.CheckEntryPos( REPLACE_STYLES,		CBCOL_SECOND,	pOpt->bReplaceStyles );
771cdf0e10cSrcweir 
772cdf0e10cSrcweir 	aCheckLB.SetUpdateMode(sal_True);
773cdf0e10cSrcweir }
774cdf0e10cSrcweir 
775cdf0e10cSrcweir /*********************************************************************/
776cdf0e10cSrcweir /*                                                                   */
777cdf0e10cSrcweir /*********************************************************************/
778cdf0e10cSrcweir 
IMPL_LINK(OfaSwAutoFmtOptionsPage,SelectHdl,OfaACorrCheckListBox *,pBox)779cdf0e10cSrcweir IMPL_LINK(OfaSwAutoFmtOptionsPage, SelectHdl, OfaACorrCheckListBox*, pBox)
780cdf0e10cSrcweir {
781cdf0e10cSrcweir 	aEditPB.Enable(0 != pBox->FirstSelected()->GetUserData());
782cdf0e10cSrcweir 	return 0;
783cdf0e10cSrcweir }
784cdf0e10cSrcweir 
785cdf0e10cSrcweir /*********************************************************************/
786cdf0e10cSrcweir /*                                                                   */
787cdf0e10cSrcweir /*********************************************************************/
788cdf0e10cSrcweir 
IMPL_LINK(OfaSwAutoFmtOptionsPage,EditHdl,PushButton *,EMPTYARG)789cdf0e10cSrcweir IMPL_LINK(OfaSwAutoFmtOptionsPage, EditHdl, PushButton*, EMPTYARG)
790cdf0e10cSrcweir {
791cdf0e10cSrcweir     sal_uLong nSelEntryPos = aCheckLB.GetSelectEntryPos();
792cdf0e10cSrcweir 	if( nSelEntryPos == REPLACE_BULLETS ||
793cdf0e10cSrcweir 		nSelEntryPos == APPLY_NUMBERING)
794cdf0e10cSrcweir 	{
795cdf0e10cSrcweir 		SvxCharacterMap *pMapDlg = new SvxCharacterMap(this);
796cdf0e10cSrcweir 		ImpUserData* pUserData = (ImpUserData*)aCheckLB.FirstSelected()->GetUserData();
797cdf0e10cSrcweir 		pMapDlg->SetCharFont(*pUserData->pFont);
798cdf0e10cSrcweir 		pMapDlg->SetChar( pUserData->pString->GetChar(0) );
799cdf0e10cSrcweir 		if(RET_OK == pMapDlg->Execute())
800cdf0e10cSrcweir 		{
801cdf0e10cSrcweir 			Font aFont(pMapDlg->GetCharFont());
802cdf0e10cSrcweir 			*pUserData->pFont = aFont;
803cdf0e10cSrcweir 			sal_UCS4 aChar = pMapDlg->GetChar();
804cdf0e10cSrcweir 			// using the UCS4 constructor
805cdf0e10cSrcweir 			rtl::OUString aOUStr( &aChar, 1 );
806cdf0e10cSrcweir 			*pUserData->pString = aOUStr;
807cdf0e10cSrcweir 		}
808cdf0e10cSrcweir 		delete pMapDlg;
809cdf0e10cSrcweir 	}
810cdf0e10cSrcweir 	else if( MERGE_SINGLE_LINE_PARA == nSelEntryPos )
811cdf0e10cSrcweir 	{
812cdf0e10cSrcweir 		// Dialog fuer Prozenteinstellung
813cdf0e10cSrcweir 		OfaAutoFmtPrcntSet aDlg(this);
814cdf0e10cSrcweir 		aDlg.GetPrcntFld().SetValue(nPercent);
815cdf0e10cSrcweir 		if(RET_OK == aDlg.Execute())
816cdf0e10cSrcweir 		{
817cdf0e10cSrcweir 			nPercent = (sal_uInt16)aDlg.GetPrcntFld().GetValue();
818cdf0e10cSrcweir 			sMargin = ' ';
819cdf0e10cSrcweir 			sMargin += String::CreateFromInt32( nPercent );
820*2d6beb75STsutomu Uchino             sMargin.AppendAscii( " %" );
821cdf0e10cSrcweir 		}
822cdf0e10cSrcweir 	}
823cdf0e10cSrcweir 	aCheckLB.Invalidate();
824cdf0e10cSrcweir 	return 0;
825cdf0e10cSrcweir }
826cdf0e10cSrcweir 
827cdf0e10cSrcweir /*********************************************************************/
828cdf0e10cSrcweir /*                                                                   */
829cdf0e10cSrcweir /*********************************************************************/
830cdf0e10cSrcweir 
SetTabs()831cdf0e10cSrcweir void OfaACorrCheckListBox::SetTabs()
832cdf0e10cSrcweir {
833cdf0e10cSrcweir 	SvxSimpleTable::SetTabs();
834cdf0e10cSrcweir 	sal_uInt16 nAdjust = SV_LBOXTAB_ADJUST_RIGHT|SV_LBOXTAB_ADJUST_LEFT|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_ADJUST_NUMERIC|SV_LBOXTAB_FORCE;
835cdf0e10cSrcweir 
836cdf0e10cSrcweir 	if( aTabs.Count() > 1 )
837cdf0e10cSrcweir 	{
838cdf0e10cSrcweir 		SvLBoxTab* pTab = (SvLBoxTab*)aTabs.GetObject(1);
839cdf0e10cSrcweir 		pTab->nFlags &= ~nAdjust;
840cdf0e10cSrcweir 		pTab->nFlags |= SV_LBOXTAB_PUSHABLE|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_FORCE;
841cdf0e10cSrcweir 	}
842cdf0e10cSrcweir 	if( aTabs.Count() > 2 )
843cdf0e10cSrcweir 	{
844cdf0e10cSrcweir 		SvLBoxTab* pTab = (SvLBoxTab*)aTabs.GetObject(2);
845cdf0e10cSrcweir 		pTab->nFlags &= ~nAdjust;
846cdf0e10cSrcweir 		pTab->nFlags |= SV_LBOXTAB_PUSHABLE|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_FORCE;
847cdf0e10cSrcweir 	}
848cdf0e10cSrcweir }
849cdf0e10cSrcweir 
850cdf0e10cSrcweir /*********************************************************************/
851cdf0e10cSrcweir /*                                                                   */
852cdf0e10cSrcweir /*********************************************************************/
853cdf0e10cSrcweir 
CheckEntryPos(sal_uLong nPos,sal_uInt16 nCol,sal_Bool bChecked)854cdf0e10cSrcweir void OfaACorrCheckListBox::CheckEntryPos(sal_uLong nPos, sal_uInt16 nCol, sal_Bool bChecked)
855cdf0e10cSrcweir {
856cdf0e10cSrcweir 	if ( nPos < GetEntryCount() )
857cdf0e10cSrcweir 		SetCheckButtonState(
858cdf0e10cSrcweir 			GetEntry(nPos),
859cdf0e10cSrcweir 			nCol,
860cdf0e10cSrcweir 			bChecked ? SvButtonState( SV_BUTTON_CHECKED ) :
861cdf0e10cSrcweir 									   SvButtonState( SV_BUTTON_UNCHECKED ) );
862cdf0e10cSrcweir }
863cdf0e10cSrcweir 
864cdf0e10cSrcweir /*********************************************************************/
865cdf0e10cSrcweir /*                                                                   */
866cdf0e10cSrcweir /*********************************************************************/
867cdf0e10cSrcweir 
IsChecked(sal_uLong nPos,sal_uInt16 nCol)868cdf0e10cSrcweir sal_Bool OfaACorrCheckListBox::IsChecked(sal_uLong nPos, sal_uInt16 nCol)
869cdf0e10cSrcweir {
870cdf0e10cSrcweir 	return GetCheckButtonState( GetEntry(nPos), nCol ) == SV_BUTTON_CHECKED;
871cdf0e10cSrcweir }
872cdf0e10cSrcweir 
873cdf0e10cSrcweir /*********************************************************************/
874cdf0e10cSrcweir /*                                                                   */
875cdf0e10cSrcweir /*********************************************************************/
876cdf0e10cSrcweir 
SetCheckButtonState(SvLBoxEntry * pEntry,sal_uInt16 nCol,SvButtonState eState)877cdf0e10cSrcweir void OfaACorrCheckListBox::SetCheckButtonState( SvLBoxEntry* pEntry, sal_uInt16 nCol, SvButtonState eState)
878cdf0e10cSrcweir {
879cdf0e10cSrcweir 	SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem(nCol + 1));
880cdf0e10cSrcweir 
881cdf0e10cSrcweir 	DBG_ASSERT(pItem,"SetCheckButton:Item not found");
882cdf0e10cSrcweir 	if (((SvLBoxItem*)pItem)->IsA() == SV_ITEM_ID_LBOXBUTTON)
883cdf0e10cSrcweir 	{
884cdf0e10cSrcweir 		switch( eState )
885cdf0e10cSrcweir 		{
886cdf0e10cSrcweir 			case SV_BUTTON_CHECKED:
887cdf0e10cSrcweir 				pItem->SetStateChecked();
888cdf0e10cSrcweir 				break;
889cdf0e10cSrcweir 
890cdf0e10cSrcweir 			case SV_BUTTON_UNCHECKED:
891cdf0e10cSrcweir 				pItem->SetStateUnchecked();
892cdf0e10cSrcweir 				break;
893cdf0e10cSrcweir 
894cdf0e10cSrcweir 			case SV_BUTTON_TRISTATE:
895cdf0e10cSrcweir 				pItem->SetStateTristate();
896cdf0e10cSrcweir 				break;
897cdf0e10cSrcweir 		}
898cdf0e10cSrcweir 		InvalidateEntry( pEntry );
899cdf0e10cSrcweir 	}
900cdf0e10cSrcweir }
901cdf0e10cSrcweir 
902cdf0e10cSrcweir /*********************************************************************/
903cdf0e10cSrcweir /*                                                                   */
904cdf0e10cSrcweir /*********************************************************************/
905cdf0e10cSrcweir 
GetCheckButtonState(SvLBoxEntry * pEntry,sal_uInt16 nCol) const906cdf0e10cSrcweir SvButtonState OfaACorrCheckListBox::GetCheckButtonState( SvLBoxEntry* pEntry, sal_uInt16 nCol ) const
907cdf0e10cSrcweir {
908cdf0e10cSrcweir 	SvButtonState eState = SV_BUTTON_UNCHECKED;
909cdf0e10cSrcweir 	SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem(nCol + 1));
910cdf0e10cSrcweir 	DBG_ASSERT(pItem,"GetChButnState:Item not found");
911cdf0e10cSrcweir 
912cdf0e10cSrcweir 	if (((SvLBoxItem*)pItem)->IsA() == SV_ITEM_ID_LBOXBUTTON)
913cdf0e10cSrcweir 	{
914cdf0e10cSrcweir 		sal_uInt16 nButtonFlags = pItem->GetButtonFlags();
915cdf0e10cSrcweir 		eState = pCheckButtonData->ConvertToButtonState( nButtonFlags );
916cdf0e10cSrcweir 	}
917cdf0e10cSrcweir 
918cdf0e10cSrcweir 	return eState;
919cdf0e10cSrcweir }
920cdf0e10cSrcweir 
HBarClick()921cdf0e10cSrcweir void OfaACorrCheckListBox::HBarClick()
922cdf0e10cSrcweir {
923cdf0e10cSrcweir 	// Sortierung durch diese Ueberladung abgeklemmt
924cdf0e10cSrcweir }
925cdf0e10cSrcweir /* -----------------------------22.05.2002 11:06------------------------------
926cdf0e10cSrcweir 
927cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
KeyInput(const KeyEvent & rKEvt)928cdf0e10cSrcweir void    OfaACorrCheckListBox::KeyInput( const KeyEvent& rKEvt )
929cdf0e10cSrcweir {
930cdf0e10cSrcweir     if(!rKEvt.GetKeyCode().GetModifier() &&
931cdf0e10cSrcweir         KEY_SPACE == rKEvt.GetKeyCode().GetCode())
932cdf0e10cSrcweir     {
933cdf0e10cSrcweir         sal_uLong nSelPos = GetSelectEntryPos();
934cdf0e10cSrcweir         sal_uInt16 nCol = GetCurrentTabPos() - 1;
935cdf0e10cSrcweir         if ( nCol < 2 )
936cdf0e10cSrcweir         {
937cdf0e10cSrcweir             CheckEntryPos( nSelPos, nCol, !IsChecked( nSelPos, nCol ) );
938cdf0e10cSrcweir             CallImplEventListeners( VCLEVENT_CHECKBOX_TOGGLE, (void*)GetEntry( nSelPos ) );
939cdf0e10cSrcweir         }
940cdf0e10cSrcweir         else
941cdf0e10cSrcweir         {
942cdf0e10cSrcweir             sal_uInt16 nCheck = IsChecked(nSelPos, 1) ? 1 : 0;
943cdf0e10cSrcweir             if(IsChecked(nSelPos, 0))
944cdf0e10cSrcweir                 nCheck += 2;
945cdf0e10cSrcweir             nCheck--;
946cdf0e10cSrcweir             nCheck &= 3;
947cdf0e10cSrcweir             CheckEntryPos(nSelPos, 1, 0 != (nCheck & 1));
948cdf0e10cSrcweir             CheckEntryPos(nSelPos, 0, 0 != (nCheck & 2));
949cdf0e10cSrcweir         }
950cdf0e10cSrcweir     }
951cdf0e10cSrcweir     else
952cdf0e10cSrcweir         SvxSimpleTable::KeyInput(rKEvt);
953cdf0e10cSrcweir }
954cdf0e10cSrcweir /* -----------------19.11.98 15:57-------------------
955cdf0e10cSrcweir  *
956cdf0e10cSrcweir  * --------------------------------------------------*/
957cdf0e10cSrcweir struct DoubleString
958cdf0e10cSrcweir {
959cdf0e10cSrcweir 	String 	sShort;
960cdf0e10cSrcweir 	String 	sLong;
961cdf0e10cSrcweir 	void* 	pUserData; // CheckBox -> form. Text Bool -> Selektionstext
962cdf0e10cSrcweir };
963cdf0e10cSrcweir typedef DoubleString* DoubleStringPtr;
964cdf0e10cSrcweir SV_DECL_PTRARR_DEL(DoubleStringArray, DoubleStringPtr, 4, 4)
965cdf0e10cSrcweir SV_IMPL_PTRARR(DoubleStringArray, DoubleStringPtr);
966cdf0e10cSrcweir 
967cdf0e10cSrcweir /* -----------------19.11.98 16:07-------------------
968cdf0e10cSrcweir  *
969cdf0e10cSrcweir  * --------------------------------------------------*/
lcl_ClearTable(DoubleStringTable & rTable)970cdf0e10cSrcweir void lcl_ClearTable(DoubleStringTable& rTable)
971cdf0e10cSrcweir {
972cdf0e10cSrcweir 	DoubleStringArrayPtr pArray = rTable.Last();
973cdf0e10cSrcweir 	while(pArray)
974cdf0e10cSrcweir 	{
975cdf0e10cSrcweir 		pArray->DeleteAndDestroy(0, pArray->Count());
976cdf0e10cSrcweir 		delete pArray;
977cdf0e10cSrcweir 		pArray = rTable.Prev();
978cdf0e10cSrcweir 	}
979cdf0e10cSrcweir 	rTable.Clear();
980cdf0e10cSrcweir }
981cdf0e10cSrcweir 
982cdf0e10cSrcweir /*-----------------14.10.96 15.57-------------------
983cdf0e10cSrcweir 
984cdf0e10cSrcweir --------------------------------------------------*/
985cdf0e10cSrcweir 
OfaAutocorrReplacePage(Window * pParent,const SfxItemSet & rSet)986cdf0e10cSrcweir OfaAutocorrReplacePage::OfaAutocorrReplacePage( Window* pParent,
987cdf0e10cSrcweir 												const SfxItemSet& rSet ) :
988cdf0e10cSrcweir 	SfxTabPage(pParent, CUI_RES( RID_OFAPAGE_AUTOCORR_REPLACE ), rSet),
989cdf0e10cSrcweir     aTextOnlyCB(    this, CUI_RES(CB_TEXT_ONLY      )),
990cdf0e10cSrcweir     aShortFT  (     this, CUI_RES(FT_SHORT          )),
991cdf0e10cSrcweir 	aShortED  ( 	this, CUI_RES(ED_SHORT          )),
992cdf0e10cSrcweir 	aReplaceFT( 	this, CUI_RES(FT_REPLACE        )),
993cdf0e10cSrcweir 	aReplaceED( 	this, CUI_RES(ED_REPLACE        )),
994cdf0e10cSrcweir 	aReplaceTLB( 	this, CUI_RES(TLB_REPLACE       )),
995cdf0e10cSrcweir     aNewReplacePB(  this, CUI_RES(PB_NEW_REPLACE    )),
996cdf0e10cSrcweir 	aDeleteReplacePB(this,CUI_RES(PB_DELETE_REPLACE )),
997cdf0e10cSrcweir 	sModify(CUI_RES(STR_MODIFY)),
998cdf0e10cSrcweir 	sNew(aNewReplacePB.GetText()),
999cdf0e10cSrcweir     pFormatText(0),
1000cdf0e10cSrcweir     eLang(eLastDialogLanguage),
1001cdf0e10cSrcweir     bHasSelectionText(sal_False),
1002cdf0e10cSrcweir     bFirstSelect(sal_True),
1003cdf0e10cSrcweir 	bReplaceEditChanged(sal_False),
1004cdf0e10cSrcweir     bSWriter(sal_True)
1005cdf0e10cSrcweir {
1006cdf0e10cSrcweir 	FreeResource();
1007cdf0e10cSrcweir 	SfxModule *pMod = *(SfxModule**)GetAppData(SHL_WRITER);
1008cdf0e10cSrcweir     bSWriter = pMod == SfxModule::GetActiveModule();
1009cdf0e10cSrcweir 
1010cdf0e10cSrcweir 	::com::sun::star::lang::Locale aLcl( SvxCreateLocale(eLastDialogLanguage ));
1011cdf0e10cSrcweir 	pCompareClass = new CollatorWrapper( GetProcessFact() );
1012a9075099SHerbert Dürr 	pCompareClass->loadDefaultCollator( aLcl, 0 );
1013cdf0e10cSrcweir 	pCharClass = new CharClass( aLcl );
1014cdf0e10cSrcweir 
1015cdf0e10cSrcweir 	static long nTabs[] = { 2 /* Tab-Count */, 1, 61 };
1016cdf0e10cSrcweir 	aReplaceTLB.SetTabs( &nTabs[0], MAP_APPFONT );
1017cdf0e10cSrcweir 
1018cdf0e10cSrcweir 	aReplaceTLB.SetStyle(aReplaceTLB.GetStyle()|WB_HSCROLL|WB_CLIPCHILDREN);
1019cdf0e10cSrcweir 	aReplaceTLB.SetSelectHdl(LINK(this, OfaAutocorrReplacePage, SelectHdl));
1020cdf0e10cSrcweir 	aNewReplacePB.SetClickHdl( LINK(this, OfaAutocorrReplacePage, NewDelHdl));
1021cdf0e10cSrcweir 	aDeleteReplacePB.SetClickHdl(LINK(this, OfaAutocorrReplacePage, NewDelHdl));
1022cdf0e10cSrcweir 	aShortED.SetModifyHdl(LINK(this, OfaAutocorrReplacePage, ModifyHdl));
1023cdf0e10cSrcweir 	aReplaceED.SetModifyHdl(LINK(this, OfaAutocorrReplacePage, ModifyHdl));
1024cdf0e10cSrcweir 	aShortED.SetActionHdl(LINK(this, OfaAutocorrReplacePage, NewDelHdl));
1025cdf0e10cSrcweir 	aReplaceED.SetActionHdl(LINK(this, OfaAutocorrReplacePage, NewDelHdl));
1026cdf0e10cSrcweir 
1027cdf0e10cSrcweir 	aReplaceED.SetSpaces(sal_True);
1028cdf0e10cSrcweir 	aShortED.SetSpaces(sal_True);
1029cdf0e10cSrcweir 	aShortED.SetMaxTextLen(30);
1030cdf0e10cSrcweir }
1031cdf0e10cSrcweir 
1032cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1033cdf0e10cSrcweir 
1034cdf0e10cSrcweir --------------------------------------------------*/
1035cdf0e10cSrcweir 
1036cdf0e10cSrcweir 
~OfaAutocorrReplacePage()1037cdf0e10cSrcweir OfaAutocorrReplacePage::~OfaAutocorrReplacePage()
1038cdf0e10cSrcweir {
1039cdf0e10cSrcweir 	delete pFormatText;
1040cdf0e10cSrcweir 	lcl_ClearTable(aDoubleStringTable);
1041cdf0e10cSrcweir     delete pCompareClass;
1042cdf0e10cSrcweir     delete pCharClass;
1043cdf0e10cSrcweir }
1044cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1045cdf0e10cSrcweir 
1046cdf0e10cSrcweir --------------------------------------------------*/
1047cdf0e10cSrcweir 
Create(Window * pParent,const SfxItemSet & rSet)1048cdf0e10cSrcweir SfxTabPage*	OfaAutocorrReplacePage::Create( Window* pParent,
1049cdf0e10cSrcweir 								const SfxItemSet& rSet)
1050cdf0e10cSrcweir {
1051cdf0e10cSrcweir 	return new OfaAutocorrReplacePage(pParent, rSet);
1052cdf0e10cSrcweir }
1053cdf0e10cSrcweir /* -----------------20.11.98 13:26-------------------
1054cdf0e10cSrcweir  *
1055cdf0e10cSrcweir  * --------------------------------------------------*/
ActivatePage(const SfxItemSet &)1056cdf0e10cSrcweir void	OfaAutocorrReplacePage::ActivatePage( const SfxItemSet& )
1057cdf0e10cSrcweir {
1058cdf0e10cSrcweir 	if(eLang != eLastDialogLanguage)
1059cdf0e10cSrcweir 		SetLanguage(eLastDialogLanguage);
1060cdf0e10cSrcweir 	((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage(sal_True);
1061cdf0e10cSrcweir }
1062cdf0e10cSrcweir /* -----------------20.11.98 13:26-------------------
1063cdf0e10cSrcweir  *
1064cdf0e10cSrcweir  * --------------------------------------------------*/
DeactivatePage(SfxItemSet *)1065cdf0e10cSrcweir int OfaAutocorrReplacePage::DeactivatePage( SfxItemSet*  )
1066cdf0e10cSrcweir {
1067cdf0e10cSrcweir 	return LEAVE_PAGE;
1068cdf0e10cSrcweir }
1069cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1070cdf0e10cSrcweir 
1071cdf0e10cSrcweir --------------------------------------------------*/
1072cdf0e10cSrcweir 
FillItemSet(SfxItemSet &)1073cdf0e10cSrcweir sal_Bool OfaAutocorrReplacePage::FillItemSet( SfxItemSet& )
1074cdf0e10cSrcweir {
1075cdf0e10cSrcweir     SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
1076cdf0e10cSrcweir     DoubleStringArrayPtr pDoubleStringArray = aDoubleStringTable.Last();
1077cdf0e10cSrcweir 	while(pDoubleStringArray)
1078cdf0e10cSrcweir 	{
1079cdf0e10cSrcweir 		LanguageType eCurLang = (LanguageType)aDoubleStringTable.GetCurKey();
1080cdf0e10cSrcweir 		if(eCurLang != eLang) // die aktuelle Sprache wird weiter hinten behandelt
1081cdf0e10cSrcweir 		{
1082cdf0e10cSrcweir 			SvxAutocorrWordList* pWordList = pAutoCorrect->LoadAutocorrWordList(eCurLang);
1083cdf0e10cSrcweir 			sal_uInt16 nWordListCount = pWordList->Count();
1084cdf0e10cSrcweir 			sal_uInt16 nDoubleStringArrayCount = pDoubleStringArray->Count();
1085cdf0e10cSrcweir 			sal_uInt16 nPos = nDoubleStringArrayCount;
1086cdf0e10cSrcweir 			sal_uInt16 nLastPos = nPos;
1087cdf0e10cSrcweir 			// 1. Durchlauf: Eintraege loeschen oder veraendern:
1088cdf0e10cSrcweir 
1089cdf0e10cSrcweir 
1090cdf0e10cSrcweir 			for( sal_uInt16 nWordListPos = nWordListCount; nWordListPos; nWordListPos-- )
1091cdf0e10cSrcweir 			{
1092cdf0e10cSrcweir 				SvxAutocorrWordPtr pWordPtr = pWordList->GetObject(nWordListPos - 1);
1093cdf0e10cSrcweir 				String sEntry(pWordPtr->GetShort());
1094cdf0e10cSrcweir 				// formatierter Text steht nur im Writer
1095cdf0e10cSrcweir 				sal_Bool bFound = !bSWriter && !pWordPtr->IsTextOnly();
1096cdf0e10cSrcweir 				while(!bFound && nPos)
1097cdf0e10cSrcweir 				{
1098cdf0e10cSrcweir 					DoubleString* pDouble = pDoubleStringArray->GetObject( nPos - 1);
1099cdf0e10cSrcweir 
1100cdf0e10cSrcweir 					if( 0 == pCompareClass->compareString(
1101cdf0e10cSrcweir 													sEntry, pDouble->sShort ))
1102cdf0e10cSrcweir 					{
1103cdf0e10cSrcweir 						nLastPos = nPos - 1;
1104cdf0e10cSrcweir 						bFound = sal_True;
1105cdf0e10cSrcweir 						if( !(pWordPtr->IsTextOnly() == (0 == pDouble->pUserData)
1106a9075099SHerbert Dürr                             && 0 == pCompareClass->compareString(
1107cdf0e10cSrcweir 								pWordPtr->GetLong(), pDouble->sLong ) ) )
1108cdf0e10cSrcweir 						{
1109cdf0e10cSrcweir 							pAutoCorrect->PutText(sEntry, pDouble->sLong, eCurLang);
1110cdf0e10cSrcweir 						}
1111cdf0e10cSrcweir 						pDoubleStringArray->DeleteAndDestroy(nPos - 1, 1);
1112cdf0e10cSrcweir 						break;
1113cdf0e10cSrcweir 					}
1114cdf0e10cSrcweir 					nPos--;
1115cdf0e10cSrcweir 				}
1116cdf0e10cSrcweir 				nPos = nLastPos;
1117cdf0e10cSrcweir 				if(!bFound)
1118cdf0e10cSrcweir 				{
1119cdf0e10cSrcweir 					pAutoCorrect->DeleteText(sEntry, eCurLang);
1120cdf0e10cSrcweir 				}
1121cdf0e10cSrcweir 			}
1122cdf0e10cSrcweir 			nDoubleStringArrayCount = pDoubleStringArray->Count();
1123cdf0e10cSrcweir 			for(sal_uInt16 nDoubleStringArrayPos = 0; nDoubleStringArrayPos < nDoubleStringArrayCount; nDoubleStringArrayPos++ )
1124cdf0e10cSrcweir 			{
1125cdf0e10cSrcweir 				//jetzt sollte es nur noch neue Eintraege geben
1126cdf0e10cSrcweir 				DoubleString* pDouble = pDoubleStringArray->GetObject( nDoubleStringArrayPos );
1127cdf0e10cSrcweir 				if(pDouble->pUserData == &bHasSelectionText)
1128cdf0e10cSrcweir 					pAutoCorrect->PutText( pDouble->sShort,
1129cdf0e10cSrcweir 								*SfxObjectShell::Current(), eCurLang );
1130cdf0e10cSrcweir 				else
1131cdf0e10cSrcweir 				{
1132cdf0e10cSrcweir 					pAutoCorrect->PutText( pDouble->sShort, pDouble->sLong,
1133cdf0e10cSrcweir 															eCurLang);
1134cdf0e10cSrcweir 				}
1135cdf0e10cSrcweir 			}
1136cdf0e10cSrcweir 		}
1137cdf0e10cSrcweir 		pDoubleStringArray->DeleteAndDestroy(0, pDoubleStringArray->Count());
1138cdf0e10cSrcweir 		delete pDoubleStringArray;
1139cdf0e10cSrcweir 		pDoubleStringArray = aDoubleStringTable.Prev();
1140cdf0e10cSrcweir 	}
1141cdf0e10cSrcweir 	aDoubleStringTable.Clear();
1142cdf0e10cSrcweir 	// jetzt noch die aktuelle Selektion
1143cdf0e10cSrcweir 	SvxAutocorrWordList* pWordList = pAutoCorrect->LoadAutocorrWordList(eLang);
1144cdf0e10cSrcweir 	sal_uInt16 nWordListCount = pWordList->Count();
1145cdf0e10cSrcweir 	sal_uInt16 nListBoxCount = (sal_uInt16)aReplaceTLB.GetEntryCount();
1146cdf0e10cSrcweir 
1147cdf0e10cSrcweir 	aReplaceTLB.SetUpdateMode(sal_False);
1148cdf0e10cSrcweir 	sal_uInt16 nListBoxPos = nListBoxCount;
1149cdf0e10cSrcweir 	sal_uInt16 nLastListBoxPos = nListBoxPos;
1150cdf0e10cSrcweir 	// 1. Durchlauf: Eintraege loeschen oder veraendern:
1151cdf0e10cSrcweir 
1152cdf0e10cSrcweir 	sal_uInt16 i;
1153cdf0e10cSrcweir 	for( i = nWordListCount; i; i-- )
1154cdf0e10cSrcweir 	{
1155cdf0e10cSrcweir 		SvxAutocorrWordPtr pWordPtr = pWordList->GetObject(i- 1);
1156cdf0e10cSrcweir 		String sEntry(pWordPtr->GetShort());
1157cdf0e10cSrcweir 		// formatierter Text steht nur im Writer
1158cdf0e10cSrcweir 		sal_Bool bFound = !bSWriter && !pWordPtr->IsTextOnly();
1159cdf0e10cSrcweir 		while(!bFound && nListBoxPos)
1160cdf0e10cSrcweir 		{
1161cdf0e10cSrcweir 			SvLBoxEntry*  pEntry = aReplaceTLB.GetEntry( nListBoxPos - 1);
1162cdf0e10cSrcweir 			if( 0 == pCompareClass->compareString( sEntry,
1163cdf0e10cSrcweir 						aReplaceTLB.GetEntryText(pEntry, 0)))
1164cdf0e10cSrcweir 			{
1165cdf0e10cSrcweir 				nLastListBoxPos = nListBoxPos - 1;
1166cdf0e10cSrcweir 				bFound = sal_True;
1167cdf0e10cSrcweir 				String sLong = aReplaceTLB.GetEntryText(pEntry, 1);
1168cdf0e10cSrcweir 				if( !(pWordPtr->IsTextOnly() == (0 == pEntry->GetUserData())
1169a9075099SHerbert Dürr                     && 0 == pCompareClass->compareString(
1170cdf0e10cSrcweir 						pWordPtr->GetLong(), sLong )))
1171cdf0e10cSrcweir 				{
1172cdf0e10cSrcweir 					pAutoCorrect->PutText(sEntry, sLong, eLang);
1173cdf0e10cSrcweir 				}
1174cdf0e10cSrcweir 				aReplaceTLB.GetModel()->Remove(pEntry);
1175cdf0e10cSrcweir 				break;
1176cdf0e10cSrcweir 
1177cdf0e10cSrcweir 			}
1178cdf0e10cSrcweir 			nListBoxPos --;
1179cdf0e10cSrcweir 		}
1180cdf0e10cSrcweir 		nListBoxPos = nLastListBoxPos;
1181cdf0e10cSrcweir 		if(!bFound)
1182cdf0e10cSrcweir 		{
1183cdf0e10cSrcweir 			pAutoCorrect->DeleteText(sEntry, eLang);
1184cdf0e10cSrcweir 		}
1185cdf0e10cSrcweir 
1186cdf0e10cSrcweir 	}
1187cdf0e10cSrcweir 	nListBoxCount = (sal_uInt16)aReplaceTLB.GetEntryCount();
1188cdf0e10cSrcweir 	for(i = 0; i < nListBoxCount; i++ )
1189cdf0e10cSrcweir 	{
1190cdf0e10cSrcweir 		//jetzt sollte es nur noch neue Eintraege geben
1191cdf0e10cSrcweir 		SvLBoxEntry*  pEntry = aReplaceTLB.GetEntry( i );
1192cdf0e10cSrcweir 		String sShort = aReplaceTLB.GetEntryText(pEntry, 0);
1193cdf0e10cSrcweir 		if(pEntry->GetUserData() == &bHasSelectionText)
1194cdf0e10cSrcweir 			pAutoCorrect->PutText(sShort, *SfxObjectShell::Current(), eLang);
1195cdf0e10cSrcweir 		else
1196cdf0e10cSrcweir 		{
1197cdf0e10cSrcweir 			String sLong = aReplaceTLB.GetEntryText(pEntry, 1);
1198cdf0e10cSrcweir 			pAutoCorrect->PutText(sShort, sLong, eLang);
1199cdf0e10cSrcweir 		}
1200cdf0e10cSrcweir 	}
1201cdf0e10cSrcweir 
1202cdf0e10cSrcweir 	return sal_False;
1203cdf0e10cSrcweir }
1204cdf0e10cSrcweir 
1205cdf0e10cSrcweir /* -----------------19.11.98 13:16-------------------
1206cdf0e10cSrcweir  *
1207cdf0e10cSrcweir  * --------------------------------------------------*/
RefillReplaceBox(sal_Bool bFromReset,LanguageType eOldLanguage,LanguageType eNewLanguage)1208cdf0e10cSrcweir void OfaAutocorrReplacePage::RefillReplaceBox(sal_Bool bFromReset,
1209cdf0e10cSrcweir 										LanguageType eOldLanguage,
1210cdf0e10cSrcweir 										LanguageType eNewLanguage)
1211cdf0e10cSrcweir {
1212cdf0e10cSrcweir 	eLang = eNewLanguage;
1213cdf0e10cSrcweir 	if(bFromReset)
1214cdf0e10cSrcweir 		lcl_ClearTable(aDoubleStringTable);
1215cdf0e10cSrcweir 	else
1216cdf0e10cSrcweir 	{
1217cdf0e10cSrcweir 		DoubleStringArray* pArray = 0;
1218cdf0e10cSrcweir 		if(aDoubleStringTable.IsKeyValid(eOldLanguage))
1219cdf0e10cSrcweir 		{
1220cdf0e10cSrcweir 			pArray = aDoubleStringTable.Seek(sal_uLong(eOldLanguage));
1221cdf0e10cSrcweir 			pArray->DeleteAndDestroy(0, pArray->Count());
1222cdf0e10cSrcweir 		}
1223cdf0e10cSrcweir 		else
1224cdf0e10cSrcweir 		{
1225cdf0e10cSrcweir 			pArray = new DoubleStringArray;
1226cdf0e10cSrcweir 			aDoubleStringTable.Insert(sal_uLong(eOldLanguage), pArray);
1227cdf0e10cSrcweir 		}
1228cdf0e10cSrcweir 
1229cdf0e10cSrcweir 		sal_uInt16 nListBoxCount = (sal_uInt16)aReplaceTLB.GetEntryCount();
1230cdf0e10cSrcweir 		sal_uInt16 i;
1231cdf0e10cSrcweir 		for(i = 0; i < nListBoxCount; i++)
1232cdf0e10cSrcweir 		{
1233cdf0e10cSrcweir 			DoubleString* pDouble = new DoubleString();
1234cdf0e10cSrcweir 			SvLBoxEntry*  pEntry = aReplaceTLB.GetEntry( i );
1235cdf0e10cSrcweir 			pDouble->sShort = aReplaceTLB.GetEntryText(pEntry, 0);
1236cdf0e10cSrcweir 			pDouble->sLong = aReplaceTLB.GetEntryText(pEntry, 1);
1237cdf0e10cSrcweir 			pDouble->pUserData = pEntry->GetUserData();
1238cdf0e10cSrcweir 			pArray->Insert(pDouble, i);
1239cdf0e10cSrcweir 		}
1240cdf0e10cSrcweir 	}
1241cdf0e10cSrcweir 
1242cdf0e10cSrcweir 	aReplaceTLB.Clear();
1243cdf0e10cSrcweir 	if(!bSWriter)
1244cdf0e10cSrcweir 	{
1245cdf0e10cSrcweir 		if(pFormatText)
1246cdf0e10cSrcweir 			pFormatText->DeleteAndDestroy(0, pFormatText->Count());
1247cdf0e10cSrcweir 		else
1248cdf0e10cSrcweir 			pFormatText = new SvStringsISortDtor();
1249cdf0e10cSrcweir 	}
1250cdf0e10cSrcweir 
1251cdf0e10cSrcweir 	if(aDoubleStringTable.IsKeyValid(eLang))
1252cdf0e10cSrcweir 	{
1253cdf0e10cSrcweir 		DoubleStringArray* pArray = aDoubleStringTable.Seek(sal_uLong(eNewLanguage));
1254cdf0e10cSrcweir 		for(sal_uInt16 i = 0; i < pArray->Count(); i++)
1255cdf0e10cSrcweir 		{
1256cdf0e10cSrcweir 			DoubleString* pDouble = pArray->GetObject(i);
1257cdf0e10cSrcweir 			sal_Bool bTextOnly = 0 == pDouble->pUserData;
1258cdf0e10cSrcweir 			// formatierter Text wird nur im Writer angeboten
1259cdf0e10cSrcweir 			if(bSWriter || bTextOnly)
1260cdf0e10cSrcweir 			{
1261cdf0e10cSrcweir 				String sEntry(pDouble->sShort);
1262cdf0e10cSrcweir 				sEntry += '\t';
1263cdf0e10cSrcweir 				sEntry += pDouble->sLong;
1264cdf0e10cSrcweir 				SvLBoxEntry* pEntry = aReplaceTLB.InsertEntry(sEntry);
1265cdf0e10cSrcweir 				aTextOnlyCB.Check(bTextOnly);
1266cdf0e10cSrcweir 				if(!bTextOnly)
1267cdf0e10cSrcweir 					pEntry->SetUserData(pDouble->pUserData); // Das heisst: mit Formatinfo oder sogar mit Selektionstext
1268cdf0e10cSrcweir 			}
1269cdf0e10cSrcweir 			else
1270cdf0e10cSrcweir 			{
1271cdf0e10cSrcweir 				pFormatText->Insert(new String(pDouble->sShort));
1272cdf0e10cSrcweir 			}
1273cdf0e10cSrcweir 		}
1274cdf0e10cSrcweir 	}
1275cdf0e10cSrcweir 	else
1276cdf0e10cSrcweir 	{
1277cdf0e10cSrcweir         SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
1278cdf0e10cSrcweir         SvxAutocorrWordList* pWordList = pAutoCorrect->LoadAutocorrWordList(eLang);
1279cdf0e10cSrcweir 
1280cdf0e10cSrcweir 		for(sal_uInt16 i = 0; i < pWordList->Count(); i++)
1281cdf0e10cSrcweir 		{
1282cdf0e10cSrcweir 			SvxAutocorrWordPtr pWordPtr = pWordList->GetObject(i);
1283cdf0e10cSrcweir 			sal_Bool bTextOnly = pWordPtr->IsTextOnly();
1284cdf0e10cSrcweir 			// formatierter Text wird nur im Writer angeboten
1285cdf0e10cSrcweir 			if(bSWriter || bTextOnly)
1286cdf0e10cSrcweir 			{
1287cdf0e10cSrcweir 				String sEntry(pWordPtr->GetShort());
1288cdf0e10cSrcweir 				sEntry += '\t';
1289cdf0e10cSrcweir 				sEntry += pWordPtr->GetLong();
1290cdf0e10cSrcweir 				SvLBoxEntry* pEntry = aReplaceTLB.InsertEntry(sEntry);
1291cdf0e10cSrcweir 				aTextOnlyCB.Check(pWordPtr->IsTextOnly());
1292cdf0e10cSrcweir 				if(!bTextOnly)
1293cdf0e10cSrcweir 					pEntry->SetUserData(&aTextOnlyCB); // Das heisst: mit Formatinfo
1294cdf0e10cSrcweir 			}
1295cdf0e10cSrcweir 			else
1296cdf0e10cSrcweir 			{
1297cdf0e10cSrcweir 				pFormatText->Insert(new String(pWordPtr->GetShort()));
1298cdf0e10cSrcweir 			}
1299cdf0e10cSrcweir 		}
1300cdf0e10cSrcweir 		aNewReplacePB.Enable(sal_False);
1301cdf0e10cSrcweir 		aDeleteReplacePB.Enable(sal_False);
1302cdf0e10cSrcweir 
1303cdf0e10cSrcweir 	}
1304cdf0e10cSrcweir 
1305cdf0e10cSrcweir 	SfxViewShell* pViewShell = SfxViewShell::Current();
1306cdf0e10cSrcweir 	if( pViewShell && pViewShell->HasSelection( sal_True ) )
1307cdf0e10cSrcweir 	{
1308cdf0e10cSrcweir 		bHasSelectionText = sal_True;
1309cdf0e10cSrcweir 		const String sSelection( pViewShell->GetSelectionText() );
1310cdf0e10cSrcweir 		aReplaceED.SetText( sSelection );
1311cdf0e10cSrcweir 		aTextOnlyCB.Check( !bSWriter );
1312cdf0e10cSrcweir 		aTextOnlyCB.Enable( bSWriter && sSelection.Len() );
1313cdf0e10cSrcweir 	}
1314cdf0e10cSrcweir 	else
1315cdf0e10cSrcweir 		aTextOnlyCB.Enable( sal_False );
1316cdf0e10cSrcweir }
1317cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1318cdf0e10cSrcweir 
1319cdf0e10cSrcweir --------------------------------------------------*/
1320cdf0e10cSrcweir 
Reset(const SfxItemSet &)1321cdf0e10cSrcweir void OfaAutocorrReplacePage::Reset( const SfxItemSet& )
1322cdf0e10cSrcweir {
1323cdf0e10cSrcweir 	RefillReplaceBox(sal_True, eLang, eLang);
1324cdf0e10cSrcweir 	aShortED.GrabFocus();
1325cdf0e10cSrcweir }
1326cdf0e10cSrcweir 
1327cdf0e10cSrcweir /* -----------------23.11.98 10:33-------------------
1328cdf0e10cSrcweir  *
1329cdf0e10cSrcweir  * --------------------------------------------------*/
SetLanguage(LanguageType eSet)1330cdf0e10cSrcweir void OfaAutocorrReplacePage::SetLanguage(LanguageType eSet)
1331cdf0e10cSrcweir {
1332cdf0e10cSrcweir 	//save old settings an refill
1333cdf0e10cSrcweir 	if(eSet != eLang)
1334cdf0e10cSrcweir 	{
1335cdf0e10cSrcweir 		RefillReplaceBox(sal_False, eLang, eSet);
1336cdf0e10cSrcweir 		eLastDialogLanguage = eSet;
1337cdf0e10cSrcweir 		delete pCompareClass;
1338cdf0e10cSrcweir 		delete pCharClass;
1339cdf0e10cSrcweir 
1340cdf0e10cSrcweir 		::com::sun::star::lang::Locale aLcl( SvxCreateLocale(eLastDialogLanguage ));
1341cdf0e10cSrcweir 		pCompareClass = new CollatorWrapper( GetProcessFact() );
1342a9075099SHerbert Dürr         pCompareClass->loadDefaultCollator( aLcl, 0 );
1343cdf0e10cSrcweir 		pCharClass = new CharClass( aLcl );
1344cdf0e10cSrcweir 		ModifyHdl(&aShortED);
1345cdf0e10cSrcweir 	}
1346cdf0e10cSrcweir }
1347cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1348cdf0e10cSrcweir 
1349cdf0e10cSrcweir --------------------------------------------------*/
1350cdf0e10cSrcweir 
1351cdf0e10cSrcweir 
IMPL_LINK(OfaAutocorrReplacePage,SelectHdl,SvTabListBox *,pBox)1352cdf0e10cSrcweir IMPL_LINK(OfaAutocorrReplacePage, SelectHdl, SvTabListBox*, pBox)
1353cdf0e10cSrcweir {
1354cdf0e10cSrcweir 	if(!bFirstSelect || !bHasSelectionText)
1355cdf0e10cSrcweir 	{
1356cdf0e10cSrcweir 		SvLBoxEntry* pEntry = pBox->FirstSelected();
1357cdf0e10cSrcweir 		String sTmpShort(pBox->GetEntryText(pEntry, 0));
1358cdf0e10cSrcweir 		// wird der Text ueber den ModifyHdl gesetzt, dann steht der Cursor sonst immer am Wortanfang,
1359cdf0e10cSrcweir 		// obwohl man gerade hier editiert
1360cdf0e10cSrcweir 		sal_Bool bSameContent = 0 == pCompareClass->compareString(
1361cdf0e10cSrcweir 				sTmpShort, aShortED.GetText() );
1362cdf0e10cSrcweir 		Selection aSel = aShortED.GetSelection();
1363cdf0e10cSrcweir 		if(aShortED.GetText() != sTmpShort)
1364cdf0e10cSrcweir 		{
1365cdf0e10cSrcweir 			aShortED.SetText(sTmpShort);
1366cdf0e10cSrcweir 			//war es nur eine andere Schreibweise, dann muss die Selektion auch wieder gesetzt werden
1367cdf0e10cSrcweir 			if(bSameContent)
1368cdf0e10cSrcweir 				aShortED.SetSelection(aSel);
1369cdf0e10cSrcweir 		}
1370cdf0e10cSrcweir 		aReplaceED.SetText(pBox->GetEntryText(pEntry, 1));
1371cdf0e10cSrcweir 		// mit UserData gibt es eine Formatinfo
1372cdf0e10cSrcweir 		aTextOnlyCB.Check(0 == pEntry->GetUserData());
1373cdf0e10cSrcweir 	}
1374cdf0e10cSrcweir 	else
1375cdf0e10cSrcweir 		bFirstSelect = sal_False;
1376cdf0e10cSrcweir 
1377cdf0e10cSrcweir 	aNewReplacePB.Enable(sal_False);
1378cdf0e10cSrcweir 	aDeleteReplacePB.Enable();
1379cdf0e10cSrcweir 	return 0;
1380cdf0e10cSrcweir };
1381cdf0e10cSrcweir 
1382cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1383cdf0e10cSrcweir 
1384cdf0e10cSrcweir --------------------------------------------------*/
1385cdf0e10cSrcweir 
1386cdf0e10cSrcweir 
IMPL_LINK(OfaAutocorrReplacePage,NewDelHdl,PushButton *,pBtn)1387cdf0e10cSrcweir IMPL_LINK(OfaAutocorrReplacePage, NewDelHdl, PushButton*, pBtn)
1388cdf0e10cSrcweir {
1389cdf0e10cSrcweir     SvLBoxEntry* _pEntry = aReplaceTLB.FirstSelected();
1390cdf0e10cSrcweir 	if(pBtn == &aDeleteReplacePB)
1391cdf0e10cSrcweir 	{
1392cdf0e10cSrcweir         DBG_ASSERT(_pEntry, "keine Eintrag selektiert");
1393cdf0e10cSrcweir         if(_pEntry)
1394cdf0e10cSrcweir 		{
1395cdf0e10cSrcweir             aReplaceTLB.GetModel()->Remove(_pEntry);
1396cdf0e10cSrcweir 			ModifyHdl(&aShortED);
1397cdf0e10cSrcweir 			return 0;
1398cdf0e10cSrcweir 		}
1399cdf0e10cSrcweir 	}
1400cdf0e10cSrcweir 	if(pBtn == &aNewReplacePB || aNewReplacePB.IsEnabled())
1401cdf0e10cSrcweir 	{
1402cdf0e10cSrcweir         SvLBoxEntry* _pNewEntry = aReplaceTLB.FirstSelected();
1403cdf0e10cSrcweir 		String sEntry(aShortED.GetText());
1404cdf0e10cSrcweir 		if(sEntry.Len() && ( aReplaceED.GetText().Len() ||
1405cdf0e10cSrcweir 				( bHasSelectionText && bSWriter ) ))
1406cdf0e10cSrcweir 		{
1407cdf0e10cSrcweir 			aReplaceTLB.SetUpdateMode(sal_False);
1408cdf0e10cSrcweir 			sal_uInt16 nPos = USHRT_MAX;
1409cdf0e10cSrcweir 			sEntry += '\t';
1410cdf0e10cSrcweir 			sEntry += aReplaceED.GetText();
1411cdf0e10cSrcweir             if(_pNewEntry)
1412cdf0e10cSrcweir 			{
1413cdf0e10cSrcweir                 nPos = (sal_uInt16)aReplaceTLB.GetModel()->GetAbsPos(_pNewEntry);
1414cdf0e10cSrcweir                 aReplaceTLB.GetModel()->Remove(_pNewEntry);
1415cdf0e10cSrcweir 			}
1416cdf0e10cSrcweir 			else
1417cdf0e10cSrcweir 			{
1418cdf0e10cSrcweir 				sal_uInt16 j;
1419cdf0e10cSrcweir 				for( j = 0; j < aReplaceTLB.GetEntryCount(); j++ )
1420cdf0e10cSrcweir 				{
1421cdf0e10cSrcweir                     SvLBoxEntry* pReplaceEntry = aReplaceTLB.GetEntry(j);
1422cdf0e10cSrcweir 					if( 0 >=  pCompareClass->compareString(sEntry,
1423cdf0e10cSrcweir                                     aReplaceTLB.GetEntryText(pReplaceEntry, 0) ) )
1424cdf0e10cSrcweir 						break;
1425cdf0e10cSrcweir 				}
1426cdf0e10cSrcweir 				nPos = j;
1427cdf0e10cSrcweir 			}
1428cdf0e10cSrcweir 			SvLBoxEntry* pInsEntry =
1429cdf0e10cSrcweir                 aReplaceTLB.InsertEntry(
1430cdf0e10cSrcweir                     sEntry, static_cast< SvLBoxEntry * >(NULL), false,
1431cdf0e10cSrcweir                     nPos == USHRT_MAX ? LIST_APPEND : nPos);
1432cdf0e10cSrcweir 			if( !bReplaceEditChanged && !aTextOnlyCB.IsChecked())
1433cdf0e10cSrcweir 				pInsEntry->SetUserData(&bHasSelectionText); // neuer formatierter Text
1434cdf0e10cSrcweir 
1435cdf0e10cSrcweir 			aReplaceTLB.MakeVisible( pInsEntry );
1436cdf0e10cSrcweir 			aReplaceTLB.SetUpdateMode(sal_True);
1437cdf0e10cSrcweir 			// falls der Request aus dem ReplaceEdit kam, dann Focus in das ShortEdit setzen
1438cdf0e10cSrcweir 			if(aReplaceED.HasFocus())
1439cdf0e10cSrcweir 				aShortED.GrabFocus();
1440cdf0e10cSrcweir 
1441cdf0e10cSrcweir 		}
1442cdf0e10cSrcweir 	}
1443cdf0e10cSrcweir 	else
1444cdf0e10cSrcweir 	{
1445cdf0e10cSrcweir 		// das kann nur ein Enter in einem der beiden Edit-Felder sein und das
1446cdf0e10cSrcweir 		// bedeutet EndDialog() - muss im KeyInput ausgewertet werden
1447cdf0e10cSrcweir 		return 0;
1448cdf0e10cSrcweir 	}
1449cdf0e10cSrcweir 	ModifyHdl(&aShortED);
1450cdf0e10cSrcweir 	return 1;
1451cdf0e10cSrcweir }
1452cdf0e10cSrcweir 
1453cdf0e10cSrcweir /*-----------------17.10.96 07.49-------------------
1454cdf0e10cSrcweir 
1455cdf0e10cSrcweir --------------------------------------------------*/
IMPL_LINK(OfaAutocorrReplacePage,ModifyHdl,Edit *,pEdt)1456cdf0e10cSrcweir IMPL_LINK(OfaAutocorrReplacePage, ModifyHdl, Edit*, pEdt)
1457cdf0e10cSrcweir {
1458cdf0e10cSrcweir 	SvLBoxEntry* pFirstSel = aReplaceTLB.FirstSelected();
1459cdf0e10cSrcweir 	sal_Bool bShort = pEdt == &aShortED;
1460cdf0e10cSrcweir 	const String rEntry = pEdt->GetText();
1461cdf0e10cSrcweir 	const String rRepString = aReplaceED.GetText();
1462cdf0e10cSrcweir 	String aWordStr( pCharClass->lower( rEntry ));
1463cdf0e10cSrcweir 
1464cdf0e10cSrcweir 	if(bShort)
1465cdf0e10cSrcweir 	{
1466cdf0e10cSrcweir 		if(rEntry.Len())
1467cdf0e10cSrcweir 		{
1468cdf0e10cSrcweir 			sal_Bool bFound = sal_False;
1469cdf0e10cSrcweir 			sal_Bool bTmpSelEntry=sal_False;
1470cdf0e10cSrcweir 
1471cdf0e10cSrcweir 			for(sal_uInt16 i = 0; i < aReplaceTLB.GetEntryCount(); i++)
1472cdf0e10cSrcweir 			{
1473cdf0e10cSrcweir 				SvLBoxEntry*  pEntry = aReplaceTLB.GetEntry( i );
1474cdf0e10cSrcweir 				String aTestStr=aReplaceTLB.GetEntryText(pEntry, 0);
1475cdf0e10cSrcweir 				if( 0 == pCompareClass->compareString(rEntry, aTestStr ))
1476cdf0e10cSrcweir 				{
1477cdf0e10cSrcweir 					if(rRepString.Len())
1478cdf0e10cSrcweir 						bFirstSelect = sal_True;
1479cdf0e10cSrcweir 					aReplaceTLB.SetCurEntry(pEntry);
1480cdf0e10cSrcweir 					pFirstSel = pEntry;
1481cdf0e10cSrcweir 					aNewReplacePB.SetText(sModify);
1482cdf0e10cSrcweir 					bFound= sal_True;
1483cdf0e10cSrcweir 					break;
1484cdf0e10cSrcweir 				}
1485cdf0e10cSrcweir 				else
1486cdf0e10cSrcweir 				{
1487cdf0e10cSrcweir 					pCharClass->toLower( aTestStr );
1488cdf0e10cSrcweir 					if(aTestStr.Search(aWordStr)==0 && !bTmpSelEntry)
1489cdf0e10cSrcweir 					{
1490cdf0e10cSrcweir 						aReplaceTLB.MakeVisible(pEntry);
1491cdf0e10cSrcweir 						bTmpSelEntry=sal_True;
1492cdf0e10cSrcweir 					}
1493cdf0e10cSrcweir 				}
1494cdf0e10cSrcweir 			}
1495cdf0e10cSrcweir 			if(!bFound)
1496cdf0e10cSrcweir 			{
1497cdf0e10cSrcweir 				aReplaceTLB.SelectAll(sal_False);
1498cdf0e10cSrcweir 				pFirstSel = 0;
1499cdf0e10cSrcweir 				aNewReplacePB.SetText(sNew);
1500cdf0e10cSrcweir 				if(bReplaceEditChanged)
1501cdf0e10cSrcweir 					aTextOnlyCB.Enable(sal_False);
1502cdf0e10cSrcweir 			}
1503cdf0e10cSrcweir 			aDeleteReplacePB.Enable(bFound);
1504cdf0e10cSrcweir 		}
1505cdf0e10cSrcweir 		else if(aReplaceTLB.GetEntryCount()>0)
1506cdf0e10cSrcweir 		{
1507cdf0e10cSrcweir 			SvLBoxEntry*  pEntry = aReplaceTLB.GetEntry( 0 );
1508cdf0e10cSrcweir 			aReplaceTLB.MakeVisible(pEntry);
1509cdf0e10cSrcweir 		}
1510cdf0e10cSrcweir 
1511cdf0e10cSrcweir 	}
1512cdf0e10cSrcweir 	else if(!bShort)
1513cdf0e10cSrcweir 	{
1514cdf0e10cSrcweir 		bReplaceEditChanged = sal_True;
1515cdf0e10cSrcweir 		if(pFirstSel)
1516cdf0e10cSrcweir 		{
1517cdf0e10cSrcweir 			aNewReplacePB.SetText(sModify);
1518cdf0e10cSrcweir 		}
1519cdf0e10cSrcweir 	}
1520cdf0e10cSrcweir 
1521cdf0e10cSrcweir 	const String& rShortTxt = aShortED.GetText();
1522cdf0e10cSrcweir 	sal_Bool bEnableNew = rShortTxt.Len() &&
1523cdf0e10cSrcweir 						( rRepString.Len() ||
1524cdf0e10cSrcweir 								( bHasSelectionText && bSWriter )) &&
1525cdf0e10cSrcweir 						( !pFirstSel || rRepString !=
1526cdf0e10cSrcweir 								aReplaceTLB.GetEntryText( pFirstSel, 1 ) );
1527cdf0e10cSrcweir 	if(bEnableNew && pFormatText)
1528cdf0e10cSrcweir 	{
1529cdf0e10cSrcweir 		for(sal_uInt16 i = 0; i < pFormatText->Count(); i++)
1530cdf0e10cSrcweir 			if(*pFormatText->GetObject(i) == rShortTxt)
1531cdf0e10cSrcweir 			{
1532cdf0e10cSrcweir 				bEnableNew = sal_False;
1533cdf0e10cSrcweir 				break;
1534cdf0e10cSrcweir 			}
1535cdf0e10cSrcweir 	}
1536cdf0e10cSrcweir 	aNewReplacePB.Enable(bEnableNew);
1537cdf0e10cSrcweir 
1538cdf0e10cSrcweir 	return 0;
1539cdf0e10cSrcweir }
1540cdf0e10cSrcweir 
1541cdf0e10cSrcweir /* -----------------20.11.98 13:48-------------------
1542cdf0e10cSrcweir  *
1543cdf0e10cSrcweir  * --------------------------------------------------*/
1544cdf0e10cSrcweir 
1545cdf0e10cSrcweir struct StringsArrays
1546cdf0e10cSrcweir {
1547cdf0e10cSrcweir 
1548cdf0e10cSrcweir 	SvStringsDtor aAbbrevStrings;
1549cdf0e10cSrcweir 	SvStringsDtor aDoubleCapsStrings;
1550cdf0e10cSrcweir 
StringsArraysStringsArrays1551cdf0e10cSrcweir 	StringsArrays() :
1552cdf0e10cSrcweir 		aAbbrevStrings(5,5), aDoubleCapsStrings(5,5) {}
1553cdf0e10cSrcweir };
1554cdf0e10cSrcweir typedef StringsArrays* StringsArraysPtr;
1555cdf0e10cSrcweir /* -----------------19.11.98 16:07-------------------
1556cdf0e10cSrcweir  *
1557cdf0e10cSrcweir  * --------------------------------------------------*/
lcl_FindInArray(SvStringsDtor & rStrings,const String & rString)1558cdf0e10cSrcweir sal_Bool lcl_FindInArray(SvStringsDtor& rStrings, const String& rString)
1559cdf0e10cSrcweir {
1560cdf0e10cSrcweir 	for(sal_uInt16 i = 0; i < rStrings.Count(); i++)
1561cdf0e10cSrcweir 		if(rString == *rStrings.GetObject(i))
1562cdf0e10cSrcweir 			return sal_True;
1563cdf0e10cSrcweir 	return sal_False;
1564cdf0e10cSrcweir }
1565cdf0e10cSrcweir 
lcl_ClearTable(StringsTable & rTable)1566cdf0e10cSrcweir void lcl_ClearTable(StringsTable& rTable)
1567cdf0e10cSrcweir {
1568cdf0e10cSrcweir 	StringsArraysPtr pArrays = rTable.Last();
1569cdf0e10cSrcweir 	while(pArrays)
1570cdf0e10cSrcweir 	{
1571cdf0e10cSrcweir 		delete pArrays;
1572cdf0e10cSrcweir 		pArrays = rTable.Prev();
1573cdf0e10cSrcweir 	}
1574cdf0e10cSrcweir 	rTable.Clear();
1575cdf0e10cSrcweir }
1576cdf0e10cSrcweir 
1577cdf0e10cSrcweir /*-----------------14.10.96 15.57-------------------
1578cdf0e10cSrcweir 
1579cdf0e10cSrcweir --------------------------------------------------*/
1580cdf0e10cSrcweir 
OfaAutocorrExceptPage(Window * pParent,const SfxItemSet & rSet)1581cdf0e10cSrcweir OfaAutocorrExceptPage::OfaAutocorrExceptPage( Window* pParent,
1582cdf0e10cSrcweir 												const SfxItemSet& rSet ) :
1583cdf0e10cSrcweir 	SfxTabPage(pParent, CUI_RES( RID_OFAPAGE_AUTOCORR_EXCEPT ), rSet),
1584cdf0e10cSrcweir 	aAbbrevFL    	(this, CUI_RES(FL_ABBREV		 )),
1585cdf0e10cSrcweir 	aAbbrevED       (this, CUI_RES(ED_ABBREV		 )),
1586cdf0e10cSrcweir 	aAbbrevLB    	(this, CUI_RES(LB_ABBREV		 )),
1587cdf0e10cSrcweir 	aNewAbbrevPB    (this, CUI_RES(PB_NEWABBREV	 )),
1588cdf0e10cSrcweir 	aDelAbbrevPB    (this, CUI_RES(PB_DELABBREV	 )),
1589cdf0e10cSrcweir 	aAutoAbbrevCB   (this, CUI_RES(CB_AUTOABBREV	 )),
1590cdf0e10cSrcweir 	aDoubleCapsFL   (this, CUI_RES(FL_DOUBLECAPS	 )),
1591cdf0e10cSrcweir 	aDoubleCapsED   (this, CUI_RES(ED_DOUBLE_CAPS	 )),
1592cdf0e10cSrcweir 	aDoubleCapsLB   (this, CUI_RES(LB_DOUBLE_CAPS	 )),
1593cdf0e10cSrcweir 	aNewDoublePB    (this, CUI_RES(PB_NEWDOUBLECAPS)),
1594cdf0e10cSrcweir 	aDelDoublePB 	(this, CUI_RES(PB_DELDOUBLECAPS)),
1595cdf0e10cSrcweir 	aAutoCapsCB   	(this, CUI_RES(CB_AUTOCAPS	 )),
1596cdf0e10cSrcweir     eLang(eLastDialogLanguage)
1597cdf0e10cSrcweir {
1598cdf0e10cSrcweir 	aNewAbbrevPB.SetAccessibleName(String(CUI_RES(STR_PB_NEWABBREV) ) );
1599cdf0e10cSrcweir 	aDelAbbrevPB.SetAccessibleName(String(CUI_RES(STR_PB_DELABBREV) ) );
1600cdf0e10cSrcweir 	aNewDoublePB.SetAccessibleName(String(CUI_RES(STR_PB_NEWDOUBLECAPS) ) );
1601cdf0e10cSrcweir 	aDelDoublePB.SetAccessibleName(String(CUI_RES(STR_PB_DELDOUBLECAPS) ) );
1602cdf0e10cSrcweir 
1603cdf0e10cSrcweir 	FreeResource();
1604cdf0e10cSrcweir 
1605cdf0e10cSrcweir 	::com::sun::star::lang::Locale aLcl( SvxCreateLocale(eLastDialogLanguage ));
1606cdf0e10cSrcweir 	pCompareClass = new CollatorWrapper( GetProcessFact() );
1607a9075099SHerbert Dürr 	pCompareClass->loadDefaultCollator( aLcl, 0 );
1608cdf0e10cSrcweir 
1609cdf0e10cSrcweir 	aNewAbbrevPB.SetClickHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
1610cdf0e10cSrcweir 	aDelAbbrevPB.SetClickHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
1611cdf0e10cSrcweir 	aNewDoublePB.SetClickHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
1612cdf0e10cSrcweir 	aDelDoublePB.SetClickHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
1613cdf0e10cSrcweir 
1614cdf0e10cSrcweir 	aAbbrevLB.SetSelectHdl(LINK(this, OfaAutocorrExceptPage, SelectHdl));
1615cdf0e10cSrcweir 	aDoubleCapsLB.SetSelectHdl(LINK(this, OfaAutocorrExceptPage, SelectHdl));
1616cdf0e10cSrcweir 	aAbbrevED.SetModifyHdl(LINK(this, OfaAutocorrExceptPage, ModifyHdl));
1617cdf0e10cSrcweir 	aDoubleCapsED.SetModifyHdl(LINK(this, OfaAutocorrExceptPage, ModifyHdl));
1618cdf0e10cSrcweir 
1619cdf0e10cSrcweir 	aAbbrevED.SetActionHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
1620cdf0e10cSrcweir 	aDoubleCapsED.SetActionHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
1621cdf0e10cSrcweir 
1622cdf0e10cSrcweir 	aNewAbbrevPB.SetAccessibleRelationMemberOf(&aAbbrevFL);
1623cdf0e10cSrcweir 	aDelAbbrevPB.SetAccessibleRelationMemberOf(&aAbbrevFL);
1624cdf0e10cSrcweir 	aNewDoublePB.SetAccessibleRelationMemberOf(&aDoubleCapsFL);
1625cdf0e10cSrcweir 	aDelDoublePB.SetAccessibleRelationMemberOf(&aDoubleCapsFL);
1626cdf0e10cSrcweir }
1627cdf0e10cSrcweir 
1628cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1629cdf0e10cSrcweir 
1630cdf0e10cSrcweir --------------------------------------------------*/
1631cdf0e10cSrcweir 
~OfaAutocorrExceptPage()1632cdf0e10cSrcweir OfaAutocorrExceptPage::~OfaAutocorrExceptPage()
1633cdf0e10cSrcweir {
1634cdf0e10cSrcweir 	lcl_ClearTable(aStringsTable);
1635cdf0e10cSrcweir 	delete pCompareClass;
1636cdf0e10cSrcweir }
1637cdf0e10cSrcweir 
1638cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1639cdf0e10cSrcweir 
1640cdf0e10cSrcweir --------------------------------------------------*/
1641cdf0e10cSrcweir 
Create(Window * pParent,const SfxItemSet & rSet)1642cdf0e10cSrcweir SfxTabPage*	OfaAutocorrExceptPage::Create( Window* pParent,
1643cdf0e10cSrcweir 								const SfxItemSet& rSet)
1644cdf0e10cSrcweir {
1645cdf0e10cSrcweir 	return new OfaAutocorrExceptPage(pParent, rSet);
1646cdf0e10cSrcweir }
1647cdf0e10cSrcweir /* -----------------20.11.98 13:26-------------------
1648cdf0e10cSrcweir  *
1649cdf0e10cSrcweir  * --------------------------------------------------*/
ActivatePage(const SfxItemSet &)1650cdf0e10cSrcweir void	OfaAutocorrExceptPage::ActivatePage( const SfxItemSet& )
1651cdf0e10cSrcweir {
1652cdf0e10cSrcweir 	if(eLang != eLastDialogLanguage)
1653cdf0e10cSrcweir 		SetLanguage(eLastDialogLanguage);
1654cdf0e10cSrcweir 	((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage(sal_True);
1655cdf0e10cSrcweir }
1656cdf0e10cSrcweir /* -----------------20.11.98 13:26-------------------
1657cdf0e10cSrcweir  *
1658cdf0e10cSrcweir  * --------------------------------------------------*/
DeactivatePage(SfxItemSet *)1659cdf0e10cSrcweir int     OfaAutocorrExceptPage::DeactivatePage( SfxItemSet* )
1660cdf0e10cSrcweir {
1661cdf0e10cSrcweir 	return LEAVE_PAGE;
1662cdf0e10cSrcweir }
1663cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1664cdf0e10cSrcweir 
1665cdf0e10cSrcweir --------------------------------------------------*/
1666cdf0e10cSrcweir 
FillItemSet(SfxItemSet &)1667cdf0e10cSrcweir sal_Bool OfaAutocorrExceptPage::FillItemSet( SfxItemSet&  )
1668cdf0e10cSrcweir {
1669cdf0e10cSrcweir     SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
1670cdf0e10cSrcweir     StringsArraysPtr pArrays = aStringsTable.Last();
1671cdf0e10cSrcweir 	while(pArrays)
1672cdf0e10cSrcweir 	{
1673cdf0e10cSrcweir 		LanguageType eCurLang = (LanguageType)aStringsTable.GetCurKey();
1674cdf0e10cSrcweir 		if(eCurLang != eLang) // die aktuelle Sprache wird weiter hinten behandelt
1675cdf0e10cSrcweir 		{
1676cdf0e10cSrcweir 			SvStringsISortDtor* pWrdList = pAutoCorrect->LoadWrdSttExceptList(eCurLang);
1677cdf0e10cSrcweir 
1678cdf0e10cSrcweir 			if(pWrdList)
1679cdf0e10cSrcweir 			{
1680cdf0e10cSrcweir 				sal_uInt16 nCount = pWrdList->Count();
1681cdf0e10cSrcweir 				sal_uInt16 i;
1682cdf0e10cSrcweir 				for( i = nCount; i; )
1683cdf0e10cSrcweir 				{
1684cdf0e10cSrcweir 					String* pString = pWrdList->GetObject( --i );
1685cdf0e10cSrcweir 					//Eintrag finden u. gfs entfernen
1686cdf0e10cSrcweir 					if( !lcl_FindInArray(pArrays->aDoubleCapsStrings, *pString))
1687cdf0e10cSrcweir 					  pWrdList->DeleteAndDestroy( i );
1688cdf0e10cSrcweir 				}
1689cdf0e10cSrcweir 				nCount = pArrays->aDoubleCapsStrings.Count();
1690cdf0e10cSrcweir 				for( i = 0; i < nCount; ++i )
1691cdf0e10cSrcweir 				{
1692cdf0e10cSrcweir 					String* pEntry = new String( *pArrays->aDoubleCapsStrings.GetObject( i ) );
1693cdf0e10cSrcweir 					if( !pWrdList->Insert( pEntry ))
1694cdf0e10cSrcweir 						delete pEntry;
1695cdf0e10cSrcweir 				}
1696cdf0e10cSrcweir 				pAutoCorrect->SaveWrdSttExceptList(eCurLang);
1697cdf0e10cSrcweir 			}
1698cdf0e10cSrcweir 
1699cdf0e10cSrcweir 			SvStringsISortDtor* pCplList = pAutoCorrect->LoadCplSttExceptList(eCurLang);
1700cdf0e10cSrcweir 
1701cdf0e10cSrcweir 			if(pCplList)
1702cdf0e10cSrcweir 			{
1703cdf0e10cSrcweir 				sal_uInt16 nCount = pCplList->Count();
1704cdf0e10cSrcweir 				sal_uInt16 i;
1705cdf0e10cSrcweir 				for( i = nCount; i; )
1706cdf0e10cSrcweir 				{
1707cdf0e10cSrcweir 					String* pString = pCplList->GetObject( --i );
1708cdf0e10cSrcweir 					if( !lcl_FindInArray(pArrays->aAbbrevStrings, *pString))
1709cdf0e10cSrcweir 						pCplList->DeleteAndDestroy( i );
1710cdf0e10cSrcweir 				}
1711cdf0e10cSrcweir 				nCount = pArrays->aAbbrevStrings.Count();
1712cdf0e10cSrcweir 				for( i = 0; i < nCount; ++i )
1713cdf0e10cSrcweir 				{
1714cdf0e10cSrcweir 					String* pEntry = new String( *pArrays->aAbbrevStrings.GetObject(i) );
1715cdf0e10cSrcweir 					if( !pCplList->Insert( pEntry ))
1716cdf0e10cSrcweir 						delete pEntry;
1717cdf0e10cSrcweir 				}
1718cdf0e10cSrcweir 				pAutoCorrect->SaveCplSttExceptList(eCurLang);
1719cdf0e10cSrcweir 			}
1720cdf0e10cSrcweir 		}
1721cdf0e10cSrcweir 		pArrays = aStringsTable.Prev();
1722cdf0e10cSrcweir 	}
1723cdf0e10cSrcweir 	aStringsTable.Clear();
1724cdf0e10cSrcweir 
1725cdf0e10cSrcweir 	SvStringsISortDtor* pWrdList = pAutoCorrect->LoadWrdSttExceptList(eLang);
1726cdf0e10cSrcweir 
1727cdf0e10cSrcweir 	if(pWrdList)
1728cdf0e10cSrcweir 	{
1729cdf0e10cSrcweir 		sal_uInt16 nCount = pWrdList->Count();
1730cdf0e10cSrcweir 		sal_uInt16 i;
1731cdf0e10cSrcweir 		for( i = nCount; i; )
1732cdf0e10cSrcweir 		{
1733cdf0e10cSrcweir 			String* pString = pWrdList->GetObject( --i );
1734cdf0e10cSrcweir 			if( USHRT_MAX == aDoubleCapsLB.GetEntryPos(*pString) )
1735cdf0e10cSrcweir 				pWrdList->DeleteAndDestroy( i );
1736cdf0e10cSrcweir 		}
1737cdf0e10cSrcweir 		nCount = aDoubleCapsLB.GetEntryCount();
1738cdf0e10cSrcweir 		for( i = 0; i < nCount; ++i )
1739cdf0e10cSrcweir 		{
1740cdf0e10cSrcweir 			String* pEntry = new String( aDoubleCapsLB.GetEntry( i ) );
1741cdf0e10cSrcweir 			if( !pWrdList->Insert( pEntry ))
1742cdf0e10cSrcweir 				delete pEntry;
1743cdf0e10cSrcweir 		}
1744cdf0e10cSrcweir 		pAutoCorrect->SaveWrdSttExceptList(eLang);
1745cdf0e10cSrcweir 	}
1746cdf0e10cSrcweir 
1747cdf0e10cSrcweir 	SvStringsISortDtor* pCplList = pAutoCorrect->LoadCplSttExceptList(eLang);
1748cdf0e10cSrcweir 
1749cdf0e10cSrcweir 	if(pCplList)
1750cdf0e10cSrcweir 	{
1751cdf0e10cSrcweir 		sal_uInt16 nCount = pCplList->Count();
1752cdf0e10cSrcweir 		sal_uInt16 i;
1753cdf0e10cSrcweir 		for( i = nCount; i; )
1754cdf0e10cSrcweir 		{
1755cdf0e10cSrcweir 			String* pString = pCplList->GetObject( --i );
1756cdf0e10cSrcweir 			if( USHRT_MAX == aAbbrevLB.GetEntryPos(*pString) )
1757cdf0e10cSrcweir 				pCplList->DeleteAndDestroy( i );
1758cdf0e10cSrcweir 		}
1759cdf0e10cSrcweir 		nCount = aAbbrevLB.GetEntryCount();
1760cdf0e10cSrcweir 		for( i = 0; i < nCount; ++i )
1761cdf0e10cSrcweir 		{
1762cdf0e10cSrcweir 			String* pEntry = new String( aAbbrevLB.GetEntry( i ) );
1763cdf0e10cSrcweir 			if( !pCplList->Insert( pEntry ))
1764cdf0e10cSrcweir 				delete pEntry;
1765cdf0e10cSrcweir 		}
1766cdf0e10cSrcweir 		pAutoCorrect->SaveCplSttExceptList(eLang);
1767cdf0e10cSrcweir 	}
1768cdf0e10cSrcweir 	if(aAutoAbbrevCB.IsChecked() != aAutoAbbrevCB.GetSavedValue())
1769cdf0e10cSrcweir 		pAutoCorrect->SetAutoCorrFlag( SaveWordCplSttLst, aAutoAbbrevCB.IsChecked());
1770cdf0e10cSrcweir 	if(aAutoCapsCB.IsChecked() != aAutoCapsCB.GetSavedValue())
1771cdf0e10cSrcweir 		pAutoCorrect->SetAutoCorrFlag( SaveWordWrdSttLst, aAutoCapsCB.IsChecked());
1772cdf0e10cSrcweir 	return sal_False;
1773cdf0e10cSrcweir }
1774cdf0e10cSrcweir 
1775cdf0e10cSrcweir /* -----------------23.11.98 10:33-------------------
1776cdf0e10cSrcweir  *
1777cdf0e10cSrcweir  * --------------------------------------------------*/
SetLanguage(LanguageType eSet)1778cdf0e10cSrcweir void OfaAutocorrExceptPage::SetLanguage(LanguageType eSet)
1779cdf0e10cSrcweir {
1780cdf0e10cSrcweir 	if(eLang != eSet)
1781cdf0e10cSrcweir 	{
1782cdf0e10cSrcweir 		//alte Einstellungen speichern und neu fuellen
1783cdf0e10cSrcweir 		RefillReplaceBoxes(sal_False, eLang, eSet);
1784cdf0e10cSrcweir 		eLastDialogLanguage = eSet;
1785cdf0e10cSrcweir 		delete pCompareClass;
1786cdf0e10cSrcweir 		pCompareClass = new CollatorWrapper( GetProcessFact() );
1787a9075099SHerbert Dürr 		pCompareClass->loadDefaultCollator( SvxCreateLocale( eLastDialogLanguage ), 0 );
1788cdf0e10cSrcweir 		ModifyHdl(&aAbbrevED);
1789cdf0e10cSrcweir 		ModifyHdl(&aDoubleCapsED);
1790cdf0e10cSrcweir 	}
1791cdf0e10cSrcweir }
1792cdf0e10cSrcweir /* -----------------20.11.98 14:06-------------------
1793cdf0e10cSrcweir  *
1794cdf0e10cSrcweir  * --------------------------------------------------*/
RefillReplaceBoxes(sal_Bool bFromReset,LanguageType eOldLanguage,LanguageType eNewLanguage)1795cdf0e10cSrcweir void OfaAutocorrExceptPage::RefillReplaceBoxes(sal_Bool bFromReset,
1796cdf0e10cSrcweir 										LanguageType eOldLanguage,
1797cdf0e10cSrcweir 										LanguageType eNewLanguage)
1798cdf0e10cSrcweir {
1799cdf0e10cSrcweir 	eLang = eNewLanguage;
1800cdf0e10cSrcweir 	if(bFromReset)
1801cdf0e10cSrcweir 		lcl_ClearTable(aStringsTable);
1802cdf0e10cSrcweir 	else
1803cdf0e10cSrcweir 	{
1804cdf0e10cSrcweir 		StringsArraysPtr pArrays = 0;
1805cdf0e10cSrcweir 		if(aStringsTable.IsKeyValid(eOldLanguage))
1806cdf0e10cSrcweir 		{
1807cdf0e10cSrcweir 			pArrays = aStringsTable.Seek(sal_uLong(eOldLanguage));
1808cdf0e10cSrcweir 			pArrays->aAbbrevStrings.DeleteAndDestroy(
1809cdf0e10cSrcweir 									0, pArrays->aAbbrevStrings.Count());
1810cdf0e10cSrcweir 			pArrays->aDoubleCapsStrings.DeleteAndDestroy(
1811cdf0e10cSrcweir 									0, pArrays->aDoubleCapsStrings.Count());
1812cdf0e10cSrcweir 		}
1813cdf0e10cSrcweir 		else
1814cdf0e10cSrcweir 		{
1815cdf0e10cSrcweir 			pArrays = new StringsArrays;
1816cdf0e10cSrcweir 			aStringsTable.Insert(sal_uLong(eOldLanguage), pArrays);
1817cdf0e10cSrcweir 		}
1818cdf0e10cSrcweir 
1819cdf0e10cSrcweir 		sal_uInt16 i;
1820cdf0e10cSrcweir 		for(i = 0; i < aAbbrevLB.GetEntryCount(); i++)
1821cdf0e10cSrcweir 		{
1822cdf0e10cSrcweir 			pArrays->aAbbrevStrings.Insert(
1823cdf0e10cSrcweir 				new String(aAbbrevLB.GetEntry(i)), i);
1824cdf0e10cSrcweir 
1825cdf0e10cSrcweir 		}
1826cdf0e10cSrcweir 		for(i = 0; i < aDoubleCapsLB.GetEntryCount(); i++)
1827cdf0e10cSrcweir 		{
1828cdf0e10cSrcweir 			pArrays->aDoubleCapsStrings.Insert(
1829cdf0e10cSrcweir 				new String(aDoubleCapsLB.GetEntry(i)), i);
1830cdf0e10cSrcweir 		}
1831cdf0e10cSrcweir 	}
1832cdf0e10cSrcweir 	aDoubleCapsLB.Clear();
1833cdf0e10cSrcweir 	aAbbrevLB.Clear();
1834cdf0e10cSrcweir 	String sTemp;
1835cdf0e10cSrcweir 	aAbbrevED.SetText(sTemp);
1836cdf0e10cSrcweir 	aDoubleCapsED.SetText(sTemp);
1837cdf0e10cSrcweir 
1838cdf0e10cSrcweir 	if(aStringsTable.IsKeyValid(eLang))
1839cdf0e10cSrcweir 	{
1840cdf0e10cSrcweir 		StringsArraysPtr pArrays = aStringsTable.Seek(sal_uLong(eLang));
1841cdf0e10cSrcweir 		sal_uInt16 i;
1842cdf0e10cSrcweir 		for(i = 0; i < pArrays->aAbbrevStrings.Count(); i++ )
1843cdf0e10cSrcweir 		{
1844cdf0e10cSrcweir 			aAbbrevLB.InsertEntry(*pArrays->aAbbrevStrings.GetObject(i));
1845cdf0e10cSrcweir 		}
1846cdf0e10cSrcweir 		for( i = 0; i < pArrays->aDoubleCapsStrings.Count(); i++ )
1847cdf0e10cSrcweir 		{
1848cdf0e10cSrcweir 			aDoubleCapsLB.InsertEntry(*pArrays->aDoubleCapsStrings.GetObject(i));
1849cdf0e10cSrcweir 		}
1850cdf0e10cSrcweir 	}
1851cdf0e10cSrcweir 	else
1852cdf0e10cSrcweir 	{
1853cdf0e10cSrcweir         SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
1854cdf0e10cSrcweir         const SvStringsISortDtor* pCplList = pAutoCorrect->GetCplSttExceptList(eLang);
1855cdf0e10cSrcweir 		const SvStringsISortDtor* pWrdList = pAutoCorrect->GetWrdSttExceptList(eLang);
1856cdf0e10cSrcweir 		sal_uInt16 i;
1857cdf0e10cSrcweir 		for( i = 0; i < pCplList->Count(); i++ )
1858cdf0e10cSrcweir 		{
1859cdf0e10cSrcweir 			aAbbrevLB.InsertEntry(*pCplList->GetObject(i));
1860cdf0e10cSrcweir 		}
1861cdf0e10cSrcweir 		for( i = 0; i < pWrdList->Count(); i++ )
1862cdf0e10cSrcweir 		{
1863cdf0e10cSrcweir 			aDoubleCapsLB.InsertEntry(*pWrdList->GetObject(i));
1864cdf0e10cSrcweir 		}
1865cdf0e10cSrcweir 	}
1866cdf0e10cSrcweir }
1867cdf0e10cSrcweir 
1868cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1869cdf0e10cSrcweir 
1870cdf0e10cSrcweir --------------------------------------------------*/
1871cdf0e10cSrcweir 
Reset(const SfxItemSet &)1872cdf0e10cSrcweir void OfaAutocorrExceptPage::Reset( const SfxItemSet& )
1873cdf0e10cSrcweir {
1874cdf0e10cSrcweir     SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
1875cdf0e10cSrcweir     RefillReplaceBoxes(sal_True, eLang, eLang);
1876cdf0e10cSrcweir 	aAutoAbbrevCB.	Check(	pAutoCorrect->IsAutoCorrFlag( SaveWordCplSttLst ));
1877cdf0e10cSrcweir 	aAutoCapsCB.	Check(	pAutoCorrect->IsAutoCorrFlag( SaveWordWrdSttLst ));
1878cdf0e10cSrcweir 	aAutoAbbrevCB.SaveValue();
1879cdf0e10cSrcweir 	aAutoCapsCB.SaveValue();
1880cdf0e10cSrcweir }
1881cdf0e10cSrcweir 
1882cdf0e10cSrcweir /*-----------------16.10.96 12.27-------------------
1883cdf0e10cSrcweir 
1884cdf0e10cSrcweir --------------------------------------------------*/
1885cdf0e10cSrcweir 
1886cdf0e10cSrcweir 
IMPL_LINK(OfaAutocorrExceptPage,NewDelHdl,PushButton *,pBtn)1887cdf0e10cSrcweir IMPL_LINK(OfaAutocorrExceptPage, NewDelHdl, PushButton*, pBtn)
1888cdf0e10cSrcweir {
1889cdf0e10cSrcweir 	if((pBtn == &aNewAbbrevPB || pBtn == (PushButton*)&aAbbrevED )
1890cdf0e10cSrcweir 		&& aAbbrevED.GetText().Len())
1891cdf0e10cSrcweir 	{
1892cdf0e10cSrcweir 		aAbbrevLB.InsertEntry(aAbbrevED.GetText());
1893cdf0e10cSrcweir 		ModifyHdl(&aAbbrevED);
1894cdf0e10cSrcweir 	}
1895cdf0e10cSrcweir 	else if(pBtn == &aDelAbbrevPB)
1896cdf0e10cSrcweir 	{
1897cdf0e10cSrcweir 		aAbbrevLB.RemoveEntry(aAbbrevED.GetText());
1898cdf0e10cSrcweir 		ModifyHdl(&aAbbrevED);
1899cdf0e10cSrcweir 	}
1900cdf0e10cSrcweir 	else if((pBtn == &aNewDoublePB || pBtn == (PushButton*)&aDoubleCapsED )
1901cdf0e10cSrcweir 			&& aDoubleCapsED.GetText().Len())
1902cdf0e10cSrcweir 	{
1903cdf0e10cSrcweir 		aDoubleCapsLB.InsertEntry(aDoubleCapsED.GetText());
1904cdf0e10cSrcweir 		ModifyHdl(&aDoubleCapsED);
1905cdf0e10cSrcweir 	}
1906cdf0e10cSrcweir 	else if(pBtn == &aDelDoublePB)
1907cdf0e10cSrcweir 	{
1908cdf0e10cSrcweir 		aDoubleCapsLB.RemoveEntry(aDoubleCapsED.GetText());
1909cdf0e10cSrcweir 		ModifyHdl(&aDoubleCapsED);
1910cdf0e10cSrcweir 	}
1911cdf0e10cSrcweir 	return 0;
1912cdf0e10cSrcweir }
1913cdf0e10cSrcweir 
1914cdf0e10cSrcweir /*-----------------16.10.96 12.57-------------------
1915cdf0e10cSrcweir 
1916cdf0e10cSrcweir --------------------------------------------------*/
1917cdf0e10cSrcweir 
IMPL_LINK(OfaAutocorrExceptPage,SelectHdl,ListBox *,pBox)1918cdf0e10cSrcweir IMPL_LINK(OfaAutocorrExceptPage, SelectHdl, ListBox*, pBox)
1919cdf0e10cSrcweir {
1920cdf0e10cSrcweir 	if(pBox == &aAbbrevLB)
1921cdf0e10cSrcweir 	{
1922cdf0e10cSrcweir 		aAbbrevED.SetText(pBox->GetSelectEntry());
1923cdf0e10cSrcweir 		aNewAbbrevPB.Enable(sal_False);
1924cdf0e10cSrcweir 		aDelAbbrevPB.Enable();
1925cdf0e10cSrcweir 	}
1926cdf0e10cSrcweir 	else
1927cdf0e10cSrcweir 	{
1928cdf0e10cSrcweir 		aDoubleCapsED.SetText(pBox->GetSelectEntry());
1929cdf0e10cSrcweir 		aNewDoublePB.Enable(sal_False);
1930cdf0e10cSrcweir 		aDelDoublePB.Enable();
1931cdf0e10cSrcweir 	}
1932cdf0e10cSrcweir 	return 0;
1933cdf0e10cSrcweir }
1934cdf0e10cSrcweir 
1935cdf0e10cSrcweir /*-----------------16.10.96 13.02-------------------
1936cdf0e10cSrcweir 
1937cdf0e10cSrcweir --------------------------------------------------*/
1938cdf0e10cSrcweir 
IMPL_LINK(OfaAutocorrExceptPage,ModifyHdl,Edit *,pEdt)1939cdf0e10cSrcweir IMPL_LINK(OfaAutocorrExceptPage, ModifyHdl, Edit*, pEdt)
1940cdf0e10cSrcweir {
1941cdf0e10cSrcweir //	sal_Bool bSame = pEdt->GetText() == ->GetSelectEntry();
1942cdf0e10cSrcweir 	const String& sEntry = pEdt->GetText();
1943cdf0e10cSrcweir 	sal_Bool bEntryLen = 0!= sEntry.Len();
1944cdf0e10cSrcweir 	if(pEdt == &aAbbrevED)
1945cdf0e10cSrcweir 	{
1946cdf0e10cSrcweir 		sal_Bool bSame = lcl_FindEntry(aAbbrevLB, sEntry, *pCompareClass);
1947cdf0e10cSrcweir 		if(bSame && sEntry != aAbbrevLB.GetSelectEntry())
1948cdf0e10cSrcweir 			pEdt->SetText(aAbbrevLB.GetSelectEntry());
1949cdf0e10cSrcweir 		aNewAbbrevPB.Enable(!bSame && bEntryLen);
1950cdf0e10cSrcweir 		aDelAbbrevPB.Enable(bSame && bEntryLen);
1951cdf0e10cSrcweir 	}
1952cdf0e10cSrcweir 	else
1953cdf0e10cSrcweir 	{
1954cdf0e10cSrcweir 		sal_Bool bSame = lcl_FindEntry(aDoubleCapsLB, sEntry, *pCompareClass);
1955cdf0e10cSrcweir 		if(bSame && sEntry != aDoubleCapsLB.GetSelectEntry())
1956cdf0e10cSrcweir 			pEdt->SetText(aDoubleCapsLB.GetSelectEntry());
1957cdf0e10cSrcweir 		aNewDoublePB.Enable(!bSame && bEntryLen);
1958cdf0e10cSrcweir 		aDelDoublePB.Enable(bSame && bEntryLen);
1959cdf0e10cSrcweir 	}
1960cdf0e10cSrcweir 	return 0;
1961cdf0e10cSrcweir }
1962cdf0e10cSrcweir 
1963cdf0e10cSrcweir /*-----------------16.10.96 15.03-------------------
1964cdf0e10cSrcweir 
1965cdf0e10cSrcweir --------------------------------------------------*/
1966cdf0e10cSrcweir 
KeyInput(const KeyEvent & rKEvt)1967cdf0e10cSrcweir void AutoCorrEdit::KeyInput( const KeyEvent& rKEvt )
1968cdf0e10cSrcweir {
1969cdf0e10cSrcweir 	const KeyCode aKeyCode = rKEvt.GetKeyCode();
1970cdf0e10cSrcweir 	const sal_uInt16 nModifier = aKeyCode.GetModifier();
1971cdf0e10cSrcweir 	if( aKeyCode.GetCode() == KEY_RETURN )
1972cdf0e10cSrcweir 	{
1973cdf0e10cSrcweir 		//wird bei Enter nichts getan, dann doch die Basisklasse rufen
1974cdf0e10cSrcweir 		// um den Dialog zu schliessen
1975cdf0e10cSrcweir 		if(!nModifier && !aActionLink.Call(this))
1976cdf0e10cSrcweir 				 Edit::KeyInput(rKEvt);
1977cdf0e10cSrcweir 	}
1978cdf0e10cSrcweir 	else if(bSpaces || aKeyCode.GetCode() != KEY_SPACE)
1979cdf0e10cSrcweir 		Edit::KeyInput(rKEvt);
1980cdf0e10cSrcweir }
1981cdf0e10cSrcweir 
1982cdf0e10cSrcweir /*-----------------03.07.97 13:17-------------------
1983cdf0e10cSrcweir 
1984cdf0e10cSrcweir --------------------------------------------------*/
1985cdf0e10cSrcweir 
1986cdf0e10cSrcweir enum OfaQuoteOptions
1987cdf0e10cSrcweir {
1988cdf0e10cSrcweir     ADD_NONBRK_SPACE,
1989cdf0e10cSrcweir 	REPLACE_1ST
1990cdf0e10cSrcweir };
1991cdf0e10cSrcweir 
CreateEntry(String & rTxt,sal_uInt16 nCol)1992cdf0e10cSrcweir SvLBoxEntry* OfaQuoteTabPage::CreateEntry(String& rTxt, sal_uInt16 nCol)
1993cdf0e10cSrcweir {
1994cdf0e10cSrcweir 	SvLBoxEntry* pEntry = new SvLBoxEntry;
1995cdf0e10cSrcweir 
1996cdf0e10cSrcweir     if ( !pCheckButtonData )
1997cdf0e10cSrcweir 	{
1998cdf0e10cSrcweir 		pCheckButtonData = new SvLBoxButtonData( &aSwCheckLB );
1999cdf0e10cSrcweir 		aSwCheckLB.SetCheckButtonData( pCheckButtonData );
2000cdf0e10cSrcweir 	}
2001cdf0e10cSrcweir 
2002cdf0e10cSrcweir 	pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0));	// Sonst Puff!
2003cdf0e10cSrcweir 
2004cdf0e10cSrcweir 	String sEmpty;
2005cdf0e10cSrcweir 	if (nCol == CBCOL_SECOND)
2006cdf0e10cSrcweir 		pEntry->AddItem( new SvLBoxString( pEntry, 0, sEmpty) );	// Leerspalte
2007cdf0e10cSrcweir 	else
2008cdf0e10cSrcweir 		pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox, 0, pCheckButtonData ) );
2009cdf0e10cSrcweir 
2010cdf0e10cSrcweir 	if (nCol == CBCOL_FIRST)
2011cdf0e10cSrcweir 		pEntry->AddItem( new SvLBoxString( pEntry, 0, sEmpty) );	// Leerspalte
2012cdf0e10cSrcweir 	else
2013cdf0e10cSrcweir 		pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox, 0, pCheckButtonData ) );
2014cdf0e10cSrcweir 
2015cdf0e10cSrcweir 	pEntry->AddItem( new OfaImpBrwString( pEntry, 0, rTxt ) );
2016cdf0e10cSrcweir 
2017cdf0e10cSrcweir 	return pEntry;
2018cdf0e10cSrcweir }
2019cdf0e10cSrcweir 
OfaQuoteTabPage(Window * pParent,const SfxItemSet & rSet)2020cdf0e10cSrcweir OfaQuoteTabPage::OfaQuoteTabPage( Window* pParent, const SfxItemSet& rSet ) :
2021cdf0e10cSrcweir 	SfxTabPage(pParent, CUI_RES( RID_OFAPAGE_AUTOCORR_QUOTE ), rSet),
2022cdf0e10cSrcweir 	aCheckLB			(this, CUI_RES(CLB_SETTINGS     )),
2023cdf0e10cSrcweir 	aSwCheckLB			(this, CUI_RES(CLB_SETTINGS     )),
2024cdf0e10cSrcweir 	sHeader1			(CUI_RES( STR_HEADER1		    )),
2025cdf0e10cSrcweir 	sHeader2			(CUI_RES( STR_HEADER2		    )),
2026cdf0e10cSrcweir     sNonBrkSpace		(CUI_RES( ST_NON_BREAK_SPACE    )),
2027cdf0e10cSrcweir 	sOrdinal			(CUI_RES( ST_ORDINAL            )),
2028cdf0e10cSrcweir     pCheckButtonData    ( NULL ),
2029cdf0e10cSrcweir 
2030cdf0e10cSrcweir 	aSingleFL           (this, CUI_RES(FL_SINGLE		 )),
2031cdf0e10cSrcweir     aSingleTypoCB       (this, CUI_RES(CB_SGL_TYPO     )),
2032cdf0e10cSrcweir     aSglStartQuoteFT    (this, CUI_RES(FT_SGL_STARTQUOTE )),
2033cdf0e10cSrcweir     aSglStartQuotePB    (this, CUI_RES(PB_SGL_STARTQUOTE )),
2034cdf0e10cSrcweir     aSglStartExFT       (this, CUI_RES(FT_SGSTEX       )),
2035cdf0e10cSrcweir     aSglEndQuoteFT      (this, CUI_RES(FT_SGL_ENDQUOTE   )),
2036cdf0e10cSrcweir     aSglEndQuotePB      (this, CUI_RES(PB_SGL_ENDQUOTE   )),
2037cdf0e10cSrcweir     aSglEndExFT         (this, CUI_RES(FT_SGENEX       )),
2038cdf0e10cSrcweir     aSglStandardPB      (this, CUI_RES(PB_SGL_STD      )),
2039cdf0e10cSrcweir 
2040cdf0e10cSrcweir     aDoubleFL           (this, CUI_RES(FL_DOUBLE       )),
2041cdf0e10cSrcweir     aTypoCB             (this, CUI_RES(CB_TYPO         )),
2042cdf0e10cSrcweir     aStartQuoteFT       (this, CUI_RES(FT_STARTQUOTE   )),
2043cdf0e10cSrcweir     aStartQuotePB       (this, CUI_RES(PB_STARTQUOTE   )),
2044cdf0e10cSrcweir     aDblStartExFT       (this, CUI_RES(FT_DBSTEX       )),
2045cdf0e10cSrcweir     aEndQuoteFT         (this, CUI_RES(FT_ENDQUOTE     )),
2046cdf0e10cSrcweir 	aEndQuotePB    		(this, CUI_RES(PB_ENDQUOTE     )),
2047cdf0e10cSrcweir     aDblEndExFT         (this, CUI_RES(FT_DBECEX       )),
2048cdf0e10cSrcweir     aDblStandardPB      (this, CUI_RES(PB_DBL_STD      )),
2049cdf0e10cSrcweir 
2050cdf0e10cSrcweir     sStartQuoteDlg  (CUI_RES(STR_CHANGE_START)),
2051cdf0e10cSrcweir     sEndQuoteDlg    (CUI_RES(STR_CHANGE_END)),
2052cdf0e10cSrcweir 
2053cdf0e10cSrcweir     sStandard(CUI_RES(ST_STANDARD))
2054cdf0e10cSrcweir {
20559b8096d0SSteve Yin 	//aSglStandardPB.SetAccessibleName(String(CUI_RES(STR_PB_SGL_STD) ) );
20569b8096d0SSteve Yin 	//aDblStandardPB.SetAccessibleName(String(CUI_RES(STR_PB_DBL_STD) ) );
20579b8096d0SSteve Yin 	//aStartQuotePB.SetAccessibleName( String(CUI_RES(STR_PB_DBL_START) ));
20589b8096d0SSteve Yin 	//aEndQuotePB.SetAccessibleName(String(CUI_RES(STR_PB_DBL_END) ));
20599b8096d0SSteve Yin 	//aSglStartQuotePB.SetAccessibleName(String(CUI_RES(STR_PB_SGL_START) ));
20609b8096d0SSteve Yin 	//aSglEndQuotePB.SetAccessibleName(String(CUI_RES(STR_PB_SGL_END) ) );
2061cdf0e10cSrcweir 
2062cdf0e10cSrcweir 	FreeResource();
2063cdf0e10cSrcweir 
2064cdf0e10cSrcweir     sal_Bool bShowSWOptions = sal_False;
2065cdf0e10cSrcweir 
2066cdf0e10cSrcweir     aCheckLB.SetHelpId( HID_OFAPAGE_QUOTE_CLB );
2067cdf0e10cSrcweir     aSwCheckLB.SetHelpId( HID_OFAPAGE_QUOTE_SW_CLB );
2068cdf0e10cSrcweir 
2069cdf0e10cSrcweir     SFX_ITEMSET_ARG( &rSet, pItem, SfxBoolItem, SID_AUTO_CORRECT_DLG, sal_False );
2070cdf0e10cSrcweir     if ( pItem && pItem->GetValue() )
2071cdf0e10cSrcweir 	    bShowSWOptions = sal_True;
2072cdf0e10cSrcweir 
2073cdf0e10cSrcweir     if ( bShowSWOptions )
2074cdf0e10cSrcweir     {
2075cdf0e10cSrcweir     	static long aStaticTabs[]=
2076cdf0e10cSrcweir 	    {
2077cdf0e10cSrcweir 		    3, 0, 20, 40
2078cdf0e10cSrcweir     	};
2079cdf0e10cSrcweir 
2080cdf0e10cSrcweir     	aSwCheckLB.SetStyle(aSwCheckLB.GetStyle() | WB_HSCROLL| WB_VSCROLL);
2081cdf0e10cSrcweir 
2082cdf0e10cSrcweir     	aSwCheckLB.SvxSimpleTable::SetTabs(aStaticTabs);
2083cdf0e10cSrcweir 	    String sHeader( sHeader1 );
2084cdf0e10cSrcweir     	sHeader += '\t';
2085cdf0e10cSrcweir 	    sHeader += sHeader2;
2086cdf0e10cSrcweir     	sHeader += '\t';
2087cdf0e10cSrcweir 	    aSwCheckLB.InsertHeaderEntry( sHeader, HEADERBAR_APPEND,
2088cdf0e10cSrcweir 						HIB_CENTER | HIB_VCENTER | HIB_FIXEDPOS | HIB_FIXED);
2089cdf0e10cSrcweir         aCheckLB.Hide( sal_True );
2090cdf0e10cSrcweir     }
2091cdf0e10cSrcweir     else
2092cdf0e10cSrcweir     {
2093cdf0e10cSrcweir         aSwCheckLB.HideTable( );
2094cdf0e10cSrcweir     }
2095cdf0e10cSrcweir 
2096cdf0e10cSrcweir 	aStartQuotePB.SetClickHdl(LINK(this, 	OfaQuoteTabPage, QuoteHdl));
2097cdf0e10cSrcweir 	aEndQuotePB.SetClickHdl(LINK(this, 		OfaQuoteTabPage, QuoteHdl));
2098cdf0e10cSrcweir 	aSglStartQuotePB.SetClickHdl(LINK(this, OfaQuoteTabPage, QuoteHdl));
2099cdf0e10cSrcweir 	aSglEndQuotePB.SetClickHdl(LINK(this, 	OfaQuoteTabPage, QuoteHdl));
2100cdf0e10cSrcweir 	aDblStandardPB.SetClickHdl(LINK(this, 	OfaQuoteTabPage, StdQuoteHdl));
2101cdf0e10cSrcweir 	aSglStandardPB.SetClickHdl(LINK(this, 	OfaQuoteTabPage, StdQuoteHdl));
2102cdf0e10cSrcweir 
21039b8096d0SSteve Yin 	// Move down from the position before FreeResource()
21049b8096d0SSteve Yin 	// For lost help ID issue
21059b8096d0SSteve Yin 	aSglStandardPB.SetAccessibleName(String(CUI_RES(STR_PB_SGL_STD) ) );
21069b8096d0SSteve Yin 	aDblStandardPB.SetAccessibleName(String(CUI_RES(STR_PB_DBL_STD) ) );
21079b8096d0SSteve Yin 	aStartQuotePB.SetAccessibleName( String(CUI_RES(STR_PB_DBL_START) ));
21089b8096d0SSteve Yin 	aEndQuotePB.SetAccessibleName(String(CUI_RES(STR_PB_DBL_END) ));
21099b8096d0SSteve Yin 	aSglStartQuotePB.SetAccessibleName(String(CUI_RES(STR_PB_SGL_START) ));
21109b8096d0SSteve Yin 	aSglEndQuotePB.SetAccessibleName(String(CUI_RES(STR_PB_SGL_END) ) );
2111cdf0e10cSrcweir 	aSglStartQuotePB.SetAccessibleRelationLabeledBy( &aSglStartQuoteFT );
2112cdf0e10cSrcweir 	aSglEndQuotePB.SetAccessibleRelationLabeledBy( &aSglEndQuoteFT );
2113cdf0e10cSrcweir 	aSglStartQuotePB.SetAccessibleRelationMemberOf( &aSingleFL );
2114cdf0e10cSrcweir 	aSglEndQuotePB.SetAccessibleRelationMemberOf( &aSingleFL );
2115cdf0e10cSrcweir 	aStartQuotePB.SetAccessibleRelationLabeledBy( &aStartQuoteFT );
2116cdf0e10cSrcweir 	aEndQuotePB.SetAccessibleRelationLabeledBy( &aEndQuoteFT );
2117cdf0e10cSrcweir 	aStartQuotePB.SetAccessibleRelationMemberOf( &aDoubleFL );
2118cdf0e10cSrcweir 	aEndQuotePB.SetAccessibleRelationMemberOf( &aDoubleFL );
2119cdf0e10cSrcweir 	aSglStandardPB.SetAccessibleRelationMemberOf(&aSingleFL);
2120cdf0e10cSrcweir 	aDblStandardPB.SetAccessibleRelationMemberOf(&aDoubleFL);
2121cdf0e10cSrcweir }
2122cdf0e10cSrcweir /*-----------------03.07.97 13:17-------------------
2123cdf0e10cSrcweir 
2124cdf0e10cSrcweir --------------------------------------------------*/
~OfaQuoteTabPage()2125cdf0e10cSrcweir OfaQuoteTabPage::~OfaQuoteTabPage()
2126cdf0e10cSrcweir {
2127cdf0e10cSrcweir     delete( pCheckButtonData );
2128cdf0e10cSrcweir }
2129cdf0e10cSrcweir /*-----------------03.07.97 13:17-------------------
2130cdf0e10cSrcweir 
2131cdf0e10cSrcweir --------------------------------------------------*/
Create(Window * pParent,const SfxItemSet & rAttrSet)2132cdf0e10cSrcweir SfxTabPage*	OfaQuoteTabPage::Create( Window* pParent,
2133cdf0e10cSrcweir 								const SfxItemSet& rAttrSet)
2134cdf0e10cSrcweir {
2135cdf0e10cSrcweir 	return new OfaQuoteTabPage(pParent, rAttrSet);
2136cdf0e10cSrcweir }
2137cdf0e10cSrcweir /*-----------------03.07.97 13:18-------------------
2138cdf0e10cSrcweir 
2139cdf0e10cSrcweir --------------------------------------------------*/
FillItemSet(SfxItemSet &)2140cdf0e10cSrcweir sal_Bool OfaQuoteTabPage::FillItemSet( SfxItemSet&  )
2141cdf0e10cSrcweir {
2142cdf0e10cSrcweir 	SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
2143cdf0e10cSrcweir 
2144cdf0e10cSrcweir 	long nFlags = pAutoCorrect->GetFlags();
2145cdf0e10cSrcweir 
2146cdf0e10cSrcweir     if ( aCheckLB.IsVisible( ) )
2147cdf0e10cSrcweir     {
2148cdf0e10cSrcweir 	    sal_uInt16 nPos = 0;
2149cdf0e10cSrcweir         pAutoCorrect->SetAutoCorrFlag(AddNonBrkSpace,		aCheckLB.IsChecked(nPos++));
2150cdf0e10cSrcweir 	    pAutoCorrect->SetAutoCorrFlag(ChgOrdinalNumber,		aCheckLB.IsChecked(nPos++));
2151cdf0e10cSrcweir     }
2152cdf0e10cSrcweir 
2153cdf0e10cSrcweir     sal_Bool bModified = sal_False;
2154cdf0e10cSrcweir     if ( aSwCheckLB.IsVisible( ) )
2155cdf0e10cSrcweir     {
2156cdf0e10cSrcweir 	    SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
2157cdf0e10cSrcweir 
2158cdf0e10cSrcweir         sal_Bool bCheck = aSwCheckLB.IsChecked(ADD_NONBRK_SPACE, CBCOL_FIRST);
2159cdf0e10cSrcweir 	    bModified |= pOpt->bAddNonBrkSpace != bCheck;
2160cdf0e10cSrcweir         pOpt->bAddNonBrkSpace = bCheck;
2161cdf0e10cSrcweir         pAutoCorrect->SetAutoCorrFlag(AddNonBrkSpace,
2162cdf0e10cSrcweir                             aSwCheckLB.IsChecked(ADD_NONBRK_SPACE, CBCOL_SECOND));
2163cdf0e10cSrcweir 
2164cdf0e10cSrcweir     	bCheck = aSwCheckLB.IsChecked(REPLACE_1ST, CBCOL_FIRST);
2165cdf0e10cSrcweir 	    bModified |= pOpt->bChgOrdinalNumber != bCheck;
2166cdf0e10cSrcweir     	pOpt->bChgOrdinalNumber = bCheck;
2167cdf0e10cSrcweir 	    pAutoCorrect->SetAutoCorrFlag(ChgOrdinalNumber,
2168cdf0e10cSrcweir 						aSwCheckLB.IsChecked(REPLACE_1ST, CBCOL_SECOND));
2169cdf0e10cSrcweir     }
2170cdf0e10cSrcweir 
2171cdf0e10cSrcweir 	pAutoCorrect->SetAutoCorrFlag(ChgQuotes, 		aTypoCB.IsChecked());
2172cdf0e10cSrcweir 	pAutoCorrect->SetAutoCorrFlag(ChgSglQuotes, 	aSingleTypoCB.IsChecked());
2173cdf0e10cSrcweir 	sal_Bool bReturn = nFlags != pAutoCorrect->GetFlags();
2174cdf0e10cSrcweir 	if(cStartQuote != pAutoCorrect->GetStartDoubleQuote())
2175cdf0e10cSrcweir 	{
2176cdf0e10cSrcweir 		bReturn = sal_True;
2177cdf0e10cSrcweir 		sal_Unicode cUCS2 = static_cast<sal_Unicode>(cStartQuote); //TODO
2178cdf0e10cSrcweir 		pAutoCorrect->SetStartDoubleQuote(cUCS2);
2179cdf0e10cSrcweir 	}
2180cdf0e10cSrcweir 	if(cEndQuote != pAutoCorrect->GetEndDoubleQuote())
2181cdf0e10cSrcweir 	{
2182cdf0e10cSrcweir 		bReturn = sal_True;
2183cdf0e10cSrcweir 		sal_Unicode cUCS2 = static_cast<sal_Unicode>(cEndQuote); //TODO
2184cdf0e10cSrcweir 		pAutoCorrect->SetEndDoubleQuote(cUCS2);
2185cdf0e10cSrcweir 	}
2186cdf0e10cSrcweir 	if(cSglStartQuote != pAutoCorrect->GetStartSingleQuote())
2187cdf0e10cSrcweir 	{
2188cdf0e10cSrcweir 		bReturn = sal_True;
2189cdf0e10cSrcweir 		sal_Unicode cUCS2 = static_cast<sal_Unicode>(cSglStartQuote); //TODO
2190cdf0e10cSrcweir 		pAutoCorrect->SetStartSingleQuote(cUCS2);
2191cdf0e10cSrcweir 	}
2192cdf0e10cSrcweir 	if(cSglEndQuote != pAutoCorrect->GetEndSingleQuote())
2193cdf0e10cSrcweir 	{
2194cdf0e10cSrcweir 		bReturn = sal_True;
2195cdf0e10cSrcweir 		sal_Unicode cUCS2 = static_cast<sal_Unicode>(cSglEndQuote); //TODO
2196cdf0e10cSrcweir 		pAutoCorrect->SetEndSingleQuote(cUCS2);
2197cdf0e10cSrcweir 	}
2198cdf0e10cSrcweir 
2199cdf0e10cSrcweir 	if( bModified || bReturn )
2200cdf0e10cSrcweir     {
2201cdf0e10cSrcweir         SvxAutoCorrCfg* pCfg = SvxAutoCorrCfg::Get();
2202cdf0e10cSrcweir         pCfg->SetModified();
2203cdf0e10cSrcweir         pCfg->Commit();
2204cdf0e10cSrcweir     }
2205cdf0e10cSrcweir 	return bReturn;
2206cdf0e10cSrcweir }
2207cdf0e10cSrcweir /* -----------------23.11.98 16:15-------------------
2208cdf0e10cSrcweir  *
2209cdf0e10cSrcweir  * --------------------------------------------------*/
ActivatePage(const SfxItemSet &)2210cdf0e10cSrcweir void OfaQuoteTabPage::ActivatePage( const SfxItemSet& )
2211cdf0e10cSrcweir {
2212cdf0e10cSrcweir 	((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage(sal_False);
2213cdf0e10cSrcweir }
2214cdf0e10cSrcweir /*-----------------03.07.97 13:18-------------------
2215cdf0e10cSrcweir 
2216cdf0e10cSrcweir --------------------------------------------------*/
Reset(const SfxItemSet &)2217cdf0e10cSrcweir void OfaQuoteTabPage::Reset( const SfxItemSet& )
2218cdf0e10cSrcweir {
2219cdf0e10cSrcweir 	SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
2220cdf0e10cSrcweir 	const long nFlags = pAutoCorrect->GetFlags();
2221cdf0e10cSrcweir 
2222cdf0e10cSrcweir     // Initialize the Sw options
2223cdf0e10cSrcweir     if ( aSwCheckLB.IsVisible( ) )
2224cdf0e10cSrcweir     {
2225cdf0e10cSrcweir         SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
2226cdf0e10cSrcweir 
2227cdf0e10cSrcweir         aSwCheckLB.SetUpdateMode( sal_False );
2228cdf0e10cSrcweir         aSwCheckLB.Clear();
2229cdf0e10cSrcweir 
2230cdf0e10cSrcweir         aSwCheckLB.GetModel()->Insert(CreateEntry(sNonBrkSpace,       CBCOL_BOTH ));
2231cdf0e10cSrcweir         aSwCheckLB.GetModel()->Insert(CreateEntry(sOrdinal,           CBCOL_BOTH ));
2232cdf0e10cSrcweir 
2233cdf0e10cSrcweir         aSwCheckLB.CheckEntryPos( ADD_NONBRK_SPACE, CBCOL_FIRST,	pOpt->bAddNonBrkSpace );
2234cdf0e10cSrcweir         aSwCheckLB.CheckEntryPos( ADD_NONBRK_SPACE,	CBCOL_SECOND,	0 != (nFlags & AddNonBrkSpace) );
2235cdf0e10cSrcweir         aSwCheckLB.CheckEntryPos( REPLACE_1ST,		CBCOL_FIRST,	pOpt->bChgOrdinalNumber );
2236cdf0e10cSrcweir         aSwCheckLB.CheckEntryPos( REPLACE_1ST,		CBCOL_SECOND,	0 != (nFlags & ChgOrdinalNumber) );
2237cdf0e10cSrcweir 
2238cdf0e10cSrcweir         aSwCheckLB.SetUpdateMode( sal_True );
2239cdf0e10cSrcweir     }
2240cdf0e10cSrcweir 
2241cdf0e10cSrcweir     // Initialize the non Sw options
2242cdf0e10cSrcweir     if ( aCheckLB.IsVisible( ) )
2243cdf0e10cSrcweir     {
2244cdf0e10cSrcweir         aCheckLB.SetUpdateMode( sal_False );
2245cdf0e10cSrcweir         aCheckLB.Clear( );
2246cdf0e10cSrcweir 
2247cdf0e10cSrcweir         aCheckLB.InsertEntry( sNonBrkSpace );
2248cdf0e10cSrcweir         aCheckLB.InsertEntry( sOrdinal );
2249cdf0e10cSrcweir 
2250cdf0e10cSrcweir         sal_uInt16 nPos = 0;
2251cdf0e10cSrcweir         aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & AddNonBrkSpace) );
2252cdf0e10cSrcweir         aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & ChgOrdinalNumber) );
2253cdf0e10cSrcweir 
2254cdf0e10cSrcweir         aCheckLB.SetUpdateMode( sal_True );
2255cdf0e10cSrcweir     }
2256cdf0e10cSrcweir 
2257cdf0e10cSrcweir     // Initialize the quote stuffs
2258cdf0e10cSrcweir 	aTypoCB    			.Check(0 != (nFlags & ChgQuotes));
2259cdf0e10cSrcweir 	aSingleTypoCB    	.Check(0 != (nFlags & ChgSglQuotes));
2260cdf0e10cSrcweir 	aTypoCB    			.SaveValue();
2261cdf0e10cSrcweir 	aSingleTypoCB    	.SaveValue();
2262cdf0e10cSrcweir 
2263cdf0e10cSrcweir 	cStartQuote = pAutoCorrect->GetStartDoubleQuote();
2264cdf0e10cSrcweir 	cEndQuote = pAutoCorrect->GetEndDoubleQuote();
2265cdf0e10cSrcweir 	cSglStartQuote = pAutoCorrect->GetStartSingleQuote();
2266cdf0e10cSrcweir 	cSglEndQuote = pAutoCorrect->GetEndSingleQuote();
2267cdf0e10cSrcweir 
2268cdf0e10cSrcweir 	aSglStartExFT .SetText(ChangeStringExt_Impl(cSglStartQuote));
2269cdf0e10cSrcweir 	aSglEndExFT   .SetText(ChangeStringExt_Impl(cSglEndQuote));
2270cdf0e10cSrcweir 	aDblStartExFT .SetText(ChangeStringExt_Impl(cStartQuote));
2271cdf0e10cSrcweir 	aDblEndExFT   .SetText(ChangeStringExt_Impl(cEndQuote));
2272cdf0e10cSrcweir }
2273cdf0e10cSrcweir 
2274cdf0e10cSrcweir 
2275cdf0e10cSrcweir /*-----------------15.10.96 16.42-------------------
2276cdf0e10cSrcweir 
2277cdf0e10cSrcweir --------------------------------------------------*/
2278cdf0e10cSrcweir #define SGL_START		0
2279cdf0e10cSrcweir #define DBL_START       1
2280cdf0e10cSrcweir #define SGL_END         2
2281cdf0e10cSrcweir #define DBL_END         3
2282cdf0e10cSrcweir 
2283cdf0e10cSrcweir 
IMPL_LINK(OfaQuoteTabPage,QuoteHdl,PushButton *,pBtn)2284cdf0e10cSrcweir IMPL_LINK( OfaQuoteTabPage, QuoteHdl, PushButton*, pBtn )
2285cdf0e10cSrcweir {
2286cdf0e10cSrcweir 	sal_uInt16 nMode = SGL_START;
2287cdf0e10cSrcweir 	if(pBtn == &aSglEndQuotePB)
2288cdf0e10cSrcweir 		nMode = SGL_END;
2289cdf0e10cSrcweir 	else if(pBtn == &aStartQuotePB)
2290cdf0e10cSrcweir 		nMode = DBL_START;
2291cdf0e10cSrcweir 	else if(pBtn == &aEndQuotePB)
2292cdf0e10cSrcweir 		nMode = DBL_END;
2293cdf0e10cSrcweir 	// Zeichenauswahl-Dialog starten
2294cdf0e10cSrcweir 	SvxCharacterMap* pMap = new SvxCharacterMap( this, sal_True );
2295cdf0e10cSrcweir 	pMap->SetCharFont( OutputDevice::GetDefaultFont(DEFAULTFONT_LATIN_TEXT,
2296cdf0e10cSrcweir 						LANGUAGE_ENGLISH_US, DEFAULTFONT_FLAGS_ONLYONE, 0 ));
2297cdf0e10cSrcweir 	pMap->SetText(nMode < SGL_END ? sStartQuoteDlg  :  sEndQuoteDlg );
2298cdf0e10cSrcweir 	sal_UCS4 cDlg;
2299cdf0e10cSrcweir 	//The two lines below are added by BerryJia for Bug95846 Time:2002-8-13 15:50
2300cdf0e10cSrcweir 	SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
2301cdf0e10cSrcweir 	LanguageType eLang = Application::GetSettings().GetLanguage();
2302cdf0e10cSrcweir 	switch( nMode )
2303cdf0e10cSrcweir 	{
2304cdf0e10cSrcweir 		case SGL_START:
2305cdf0e10cSrcweir 			cDlg = cSglStartQuote;
2306cdf0e10cSrcweir 			if(cDlg == 0)
2307cdf0e10cSrcweir 				cDlg = pAutoCorrect->GetQuote('\'',sal_True,eLang);   //add by BerryJia for Bug95846 Time:2002-8-13 15:50
2308cdf0e10cSrcweir 		break;
2309cdf0e10cSrcweir 		case SGL_END:
2310cdf0e10cSrcweir 			cDlg = cSglEndQuote;
2311cdf0e10cSrcweir 			if(cDlg == 0)
2312cdf0e10cSrcweir 				cDlg = pAutoCorrect->GetQuote('\'',sal_False,eLang);  //add by BerryJia for Bug95846 Time:2002-8-13 15:50
2313cdf0e10cSrcweir 		break;
2314cdf0e10cSrcweir 		case DBL_START:
2315cdf0e10cSrcweir 			cDlg = cStartQuote;
2316cdf0e10cSrcweir 			if(cDlg == 0)
2317cdf0e10cSrcweir 				cDlg = pAutoCorrect->GetQuote('\"',sal_True,eLang);   //add by BerryJia for Bug95846 Time:2002-8-13 15:50
2318cdf0e10cSrcweir 		break;
2319cdf0e10cSrcweir 		case DBL_END:
2320cdf0e10cSrcweir 			cDlg = cEndQuote;
2321cdf0e10cSrcweir 			if(cDlg == 0)
2322cdf0e10cSrcweir 				cDlg = pAutoCorrect->GetQuote('\"',sal_False,eLang);  //add by BerryJia for Bug95846 Time:2002-8-13 15:50
2323cdf0e10cSrcweir 		break;
2324cdf0e10cSrcweir 		default:
2325cdf0e10cSrcweir 			DBG_ERROR("svx::OfaQuoteTabPage::QuoteHdl(), how to initialize cDlg?" );
2326cdf0e10cSrcweir 			cDlg = 0;
2327cdf0e10cSrcweir 			break;
2328cdf0e10cSrcweir 
2329cdf0e10cSrcweir 	}
2330cdf0e10cSrcweir 	pMap->SetChar(  cDlg );
2331cdf0e10cSrcweir 	pMap->DisableFontSelection();
2332cdf0e10cSrcweir 	if(pMap->Execute() == RET_OK)
2333cdf0e10cSrcweir 	{
2334cdf0e10cSrcweir 		sal_UCS4 cNewChar = pMap->GetChar();
2335cdf0e10cSrcweir 		switch( nMode )
2336cdf0e10cSrcweir 		{
2337cdf0e10cSrcweir 			case SGL_START:
2338cdf0e10cSrcweir 				cSglStartQuote = cNewChar;
2339cdf0e10cSrcweir 				aSglStartExFT.SetText(ChangeStringExt_Impl(cNewChar));
2340cdf0e10cSrcweir 			break;
2341cdf0e10cSrcweir 			case SGL_END:
2342cdf0e10cSrcweir 				cSglEndQuote = cNewChar;
2343cdf0e10cSrcweir 				aSglEndExFT.SetText(ChangeStringExt_Impl(cNewChar));
2344cdf0e10cSrcweir 			break;
2345cdf0e10cSrcweir 			case DBL_START:
2346cdf0e10cSrcweir 				cStartQuote = cNewChar;
2347cdf0e10cSrcweir 				aDblStartExFT.SetText(ChangeStringExt_Impl(cNewChar));
2348cdf0e10cSrcweir 			break;
2349cdf0e10cSrcweir 			case DBL_END:
2350cdf0e10cSrcweir 				cEndQuote = cNewChar;
2351cdf0e10cSrcweir 				aDblEndExFT.SetText(ChangeStringExt_Impl(cNewChar));
2352cdf0e10cSrcweir 			break;
2353cdf0e10cSrcweir 		}
2354cdf0e10cSrcweir 	}
2355cdf0e10cSrcweir 	delete pMap;
2356cdf0e10cSrcweir 
2357cdf0e10cSrcweir 	return 0;
2358cdf0e10cSrcweir }
2359cdf0e10cSrcweir 
2360cdf0e10cSrcweir /*-----------------27.06.97 09.55-------------------
2361cdf0e10cSrcweir 
2362cdf0e10cSrcweir --------------------------------------------------*/
IMPL_LINK(OfaQuoteTabPage,StdQuoteHdl,PushButton *,pBtn)2363cdf0e10cSrcweir IMPL_LINK( OfaQuoteTabPage, StdQuoteHdl, PushButton*, pBtn )
2364cdf0e10cSrcweir {
2365cdf0e10cSrcweir 	if(pBtn == &aDblStandardPB)
2366cdf0e10cSrcweir 	{
2367cdf0e10cSrcweir 		cStartQuote = 0;
2368cdf0e10cSrcweir 		aDblStartExFT.SetText(ChangeStringExt_Impl(0));
2369cdf0e10cSrcweir 		cEndQuote = 0;
2370cdf0e10cSrcweir 		aDblEndExFT.SetText(ChangeStringExt_Impl(0));
2371cdf0e10cSrcweir 
2372cdf0e10cSrcweir 	}
2373cdf0e10cSrcweir 	else
2374cdf0e10cSrcweir 	{
2375cdf0e10cSrcweir 		cSglStartQuote = 0;
2376cdf0e10cSrcweir 		aSglStartExFT.SetText(ChangeStringExt_Impl(0));
2377cdf0e10cSrcweir 		cSglEndQuote = 0;
2378cdf0e10cSrcweir 		aSglEndExFT.SetText(ChangeStringExt_Impl(0));
2379cdf0e10cSrcweir 	}
2380cdf0e10cSrcweir 	return 0;
2381cdf0e10cSrcweir }
2382cdf0e10cSrcweir 
2383cdf0e10cSrcweir // --------------------------------------------------
2384cdf0e10cSrcweir 
ChangeStringExt_Impl(sal_UCS4 cChar)2385cdf0e10cSrcweir String OfaQuoteTabPage::ChangeStringExt_Impl( sal_UCS4 cChar )
2386cdf0e10cSrcweir {
2387cdf0e10cSrcweir 	if( !cChar )
2388cdf0e10cSrcweir 		return sStandard;
2389cdf0e10cSrcweir 
2390cdf0e10cSrcweir     // convert codepoint value to unicode-hex string
2391cdf0e10cSrcweir 	sal_UCS4 aStrCodes[32] = { 0, ' ', '(', 'U', '+', '0' };
2392cdf0e10cSrcweir 	aStrCodes[0] = cChar;
2393cdf0e10cSrcweir 	int nFullLen = 5;
2394cdf0e10cSrcweir     int nHexLen = 4;
2395cdf0e10cSrcweir     while( (cChar >> (4*nHexLen)) != 0 )
2396cdf0e10cSrcweir         ++nHexLen;
2397cdf0e10cSrcweir     for( int i = nHexLen; --i >= 0;)
2398cdf0e10cSrcweir     {
2399cdf0e10cSrcweir         sal_UCS4 cHexDigit = ((cChar >> (4*i)) & 0x0f) + '0';
2400cdf0e10cSrcweir 		if( cHexDigit > '9' )
2401cdf0e10cSrcweir 			cHexDigit += 'A' - ('9' + 1);
2402cdf0e10cSrcweir 		aStrCodes[ nFullLen++ ] = cHexDigit;
2403cdf0e10cSrcweir     }
2404cdf0e10cSrcweir 	aStrCodes[ nFullLen++ ] = ')';
2405cdf0e10cSrcweir 	// using the new UCS4 constructor
2406cdf0e10cSrcweir 	rtl::OUString aOUStr( aStrCodes, nFullLen );
2407cdf0e10cSrcweir 	return aOUStr;
2408cdf0e10cSrcweir }
2409cdf0e10cSrcweir 
OfaAutoCompleteTabPage(Window * pParent,const SfxItemSet & rSet)2410cdf0e10cSrcweir OfaAutoCompleteTabPage::OfaAutoCompleteTabPage( Window* pParent,
2411cdf0e10cSrcweir 												const SfxItemSet& rSet )
2412cdf0e10cSrcweir 	: SfxTabPage(pParent, CUI_RES( RID_OFAPAGE_AUTOCOMPLETE_OPTIONS ), rSet),
2413cdf0e10cSrcweir 	aCBActiv		(this, CUI_RES(CB_ACTIV)),
2414cdf0e10cSrcweir     aCBAppendSpace  (this, CUI_RES(CB_APPEND_SPACE)),
2415cdf0e10cSrcweir     aCBAsTip        (this, CUI_RES(CB_AS_TIP)),
2416cdf0e10cSrcweir     aCBCollect      (this, CUI_RES(CB_COLLECT)),
2417cdf0e10cSrcweir     aCBRemoveList   (this, CUI_RES(CB_REMOVE_LIST)),
2418cdf0e10cSrcweir     aFTExpandKey    (this, CUI_RES(FT_EXPAND_KEY)),
2419cdf0e10cSrcweir     aDCBExpandKey   (this, CUI_RES(DCB_EXPAND_KEY)),
2420cdf0e10cSrcweir     aFTMinWordlen   (this, CUI_RES(FT_MIN_WORDLEN)),
2421cdf0e10cSrcweir     aNFMinWordlen   (this, CUI_RES(NF_MIN_WORDLEN)),
2422cdf0e10cSrcweir     aFTMaxEntries   (this, CUI_RES(FT_MAX_ENTRIES)),
2423cdf0e10cSrcweir     aNFMaxEntries   (this, CUI_RES(NF_MAX_ENTRIES)),
2424cdf0e10cSrcweir     aLBEntries      (*this, CUI_RES(LB_ENTRIES)),
2425cdf0e10cSrcweir 	aPBEntries      (this, CUI_RES(PB_ENTRIES)),
2426cdf0e10cSrcweir 	pAutoCmpltList( 0 ),
2427cdf0e10cSrcweir 	nAutoCmpltListCnt( 0 )
2428cdf0e10cSrcweir {
2429cdf0e10cSrcweir 	FreeResource();
2430cdf0e10cSrcweir 
2431cdf0e10cSrcweir 	// the defined KEYs
2432cdf0e10cSrcweir 	static const sal_uInt16 aKeyCodes[] = {
2433cdf0e10cSrcweir 		KEY_END,
2434cdf0e10cSrcweir 		KEY_RETURN,
2435cdf0e10cSrcweir 		KEY_SPACE,
2436cdf0e10cSrcweir 		KEY_RIGHT,
2437cdf0e10cSrcweir         KEY_TAB,
2438cdf0e10cSrcweir 		0
2439cdf0e10cSrcweir 	};
2440cdf0e10cSrcweir 
2441cdf0e10cSrcweir 	for( const sal_uInt16* pKeys = aKeyCodes; *pKeys; ++pKeys )
2442cdf0e10cSrcweir 	{
2443cdf0e10cSrcweir 		KeyCode aKCode( *pKeys );
2444cdf0e10cSrcweir 		sal_uInt16 nPos = aDCBExpandKey.InsertEntry( aKCode.GetName() );
2445cdf0e10cSrcweir 		aDCBExpandKey.SetEntryData( nPos, (void*)(sal_uLong)*pKeys );
2446cdf0e10cSrcweir 		if( KEY_RETURN == *pKeys )		// default to RETURN
2447cdf0e10cSrcweir 			aDCBExpandKey.SelectEntryPos( nPos );
2448cdf0e10cSrcweir 	}
2449cdf0e10cSrcweir 
2450cdf0e10cSrcweir 	aPBEntries.SetClickHdl(LINK(this, OfaAutoCompleteTabPage, DeleteHdl));
2451cdf0e10cSrcweir 	aCBActiv.SetToggleHdl(LINK(this, OfaAutoCompleteTabPage, CheckHdl));
2452cdf0e10cSrcweir     aCBCollect.SetToggleHdl(LINK(this, OfaAutoCompleteTabPage, CheckHdl));
2453cdf0e10cSrcweir 	aLBEntries.SetAccessibleRelationLabeledBy(&aLBEntries);
2454cdf0e10cSrcweir }
2455cdf0e10cSrcweir 
~OfaAutoCompleteTabPage()2456cdf0e10cSrcweir OfaAutoCompleteTabPage::~OfaAutoCompleteTabPage()
2457cdf0e10cSrcweir {
2458cdf0e10cSrcweir }
2459cdf0e10cSrcweir 
Create(Window * pParent,const SfxItemSet & rSet)2460cdf0e10cSrcweir SfxTabPage*	OfaAutoCompleteTabPage::Create( Window* pParent,
2461cdf0e10cSrcweir 											const SfxItemSet& rSet)
2462cdf0e10cSrcweir {
2463cdf0e10cSrcweir 	return new OfaAutoCompleteTabPage( pParent, rSet );
2464cdf0e10cSrcweir }
2465cdf0e10cSrcweir 
FillItemSet(SfxItemSet &)2466cdf0e10cSrcweir sal_Bool OfaAutoCompleteTabPage::FillItemSet( SfxItemSet& )
2467cdf0e10cSrcweir {
2468cdf0e10cSrcweir 	sal_Bool bModified = sal_False, bCheck;
2469cdf0e10cSrcweir 	SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
2470cdf0e10cSrcweir 	SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
2471cdf0e10cSrcweir 	sal_uInt16 nVal;
2472cdf0e10cSrcweir 
2473cdf0e10cSrcweir 	bCheck = aCBActiv.IsChecked();
2474cdf0e10cSrcweir 	bModified |= pOpt->bAutoCompleteWords != bCheck;
2475cdf0e10cSrcweir 	pOpt->bAutoCompleteWords = bCheck;
2476cdf0e10cSrcweir 	bCheck = aCBCollect.IsChecked();
2477cdf0e10cSrcweir 	bModified |= pOpt->bAutoCmpltCollectWords != bCheck;
2478cdf0e10cSrcweir 	pOpt->bAutoCmpltCollectWords = bCheck;
2479cdf0e10cSrcweir     bCheck = !aCBRemoveList.IsChecked(); // inverted value!
2480cdf0e10cSrcweir     bModified |= pOpt->bAutoCmpltKeepList != bCheck;
2481cdf0e10cSrcweir     pOpt->bAutoCmpltKeepList = bCheck;
2482cdf0e10cSrcweir     bCheck = aCBAppendSpace.IsChecked();
2483cdf0e10cSrcweir 	bModified |= pOpt->bAutoCmpltAppendBlanc != bCheck;
2484cdf0e10cSrcweir 	pOpt->bAutoCmpltAppendBlanc = bCheck;
2485cdf0e10cSrcweir 	bCheck = aCBAsTip.IsChecked();
2486cdf0e10cSrcweir 	bModified |= pOpt->bAutoCmpltShowAsTip != bCheck;
2487cdf0e10cSrcweir 	pOpt->bAutoCmpltShowAsTip = bCheck;
2488cdf0e10cSrcweir 
2489cdf0e10cSrcweir 	nVal = (sal_uInt16)aNFMinWordlen.GetValue();
2490cdf0e10cSrcweir 	bModified |= nVal != pOpt->nAutoCmpltWordLen;
2491cdf0e10cSrcweir 	pOpt->nAutoCmpltWordLen = nVal;
2492cdf0e10cSrcweir 
2493cdf0e10cSrcweir 	nVal = (sal_uInt16)aNFMaxEntries.GetValue();
2494cdf0e10cSrcweir 	bModified |= nVal != pOpt->nAutoCmpltListLen;
2495cdf0e10cSrcweir 	pOpt->nAutoCmpltListLen = nVal;
2496cdf0e10cSrcweir 
2497cdf0e10cSrcweir 	nVal = aDCBExpandKey.GetSelectEntryPos();
2498cdf0e10cSrcweir 	if( nVal < aDCBExpandKey.GetEntryCount() )
2499cdf0e10cSrcweir 	{
2500cdf0e10cSrcweir 		sal_uLong nKey = (sal_uLong)aDCBExpandKey.GetEntryData( nVal );
2501cdf0e10cSrcweir 		bModified |= nKey != pOpt->nAutoCmpltExpandKey;
2502cdf0e10cSrcweir 		pOpt->nAutoCmpltExpandKey = (sal_uInt16)nKey;
2503cdf0e10cSrcweir    }
2504cdf0e10cSrcweir 
2505cdf0e10cSrcweir 	if( pAutoCmpltList && nAutoCmpltListCnt != aLBEntries.GetEntryCount() )
2506cdf0e10cSrcweir 	{
2507cdf0e10cSrcweir 		bModified = sal_True;
2508cdf0e10cSrcweir 		pOpt->pAutoCmpltList = pAutoCmpltList;
2509cdf0e10cSrcweir 	}
2510cdf0e10cSrcweir 	if( bModified )
2511cdf0e10cSrcweir     {
2512cdf0e10cSrcweir         SvxAutoCorrCfg* pCfg = SvxAutoCorrCfg::Get();
2513cdf0e10cSrcweir         pCfg->SetModified();
2514cdf0e10cSrcweir         pCfg->Commit();
2515cdf0e10cSrcweir     }
2516cdf0e10cSrcweir 	return sal_True;
2517cdf0e10cSrcweir }
2518cdf0e10cSrcweir 
Reset(const SfxItemSet &)2519cdf0e10cSrcweir void OfaAutoCompleteTabPage::Reset( const SfxItemSet&  )
2520cdf0e10cSrcweir {
2521cdf0e10cSrcweir 	SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
2522cdf0e10cSrcweir 	SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
2523cdf0e10cSrcweir 
2524cdf0e10cSrcweir 	aCBActiv.Check( 0 != pOpt->bAutoCompleteWords );
2525cdf0e10cSrcweir 	aCBCollect.Check( 0 != pOpt->bAutoCmpltCollectWords );
2526cdf0e10cSrcweir     aCBRemoveList.Check( !pOpt->bAutoCmpltKeepList ); //inverted value!
2527cdf0e10cSrcweir     aCBAppendSpace.Check( 0 != pOpt->bAutoCmpltAppendBlanc );
2528cdf0e10cSrcweir 	aCBAsTip.Check( 0 != pOpt->bAutoCmpltShowAsTip );
2529cdf0e10cSrcweir 
2530cdf0e10cSrcweir 	aNFMinWordlen.SetValue( pOpt->nAutoCmpltWordLen );
2531cdf0e10cSrcweir 	aNFMaxEntries.SetValue( pOpt->nAutoCmpltListLen );
2532cdf0e10cSrcweir 
2533cdf0e10cSrcweir 	// select the specific KeyCode:
2534cdf0e10cSrcweir 	{
2535cdf0e10cSrcweir 		sal_uLong nKey = pOpt->nAutoCmpltExpandKey;
2536cdf0e10cSrcweir 		for( sal_uInt16 n = 0, nCnt = aDCBExpandKey.GetEntryCount(); n < nCnt; ++n )
2537cdf0e10cSrcweir 			if( nKey == (sal_uLong)aDCBExpandKey.GetEntryData( n ))
2538cdf0e10cSrcweir 			{
2539cdf0e10cSrcweir 				aDCBExpandKey.SelectEntryPos( n );
2540cdf0e10cSrcweir 				break;
2541cdf0e10cSrcweir 			}
2542cdf0e10cSrcweir 	}
2543cdf0e10cSrcweir 
2544cdf0e10cSrcweir 	if( pOpt->pAutoCmpltList && pOpt->pAutoCmpltList->Count() )
2545cdf0e10cSrcweir 	{
2546cdf0e10cSrcweir 		pAutoCmpltList = (SvStringsISortDtor*)pOpt->pAutoCmpltList;
2547cdf0e10cSrcweir 		pOpt->pAutoCmpltList = 0;
2548cdf0e10cSrcweir 		nAutoCmpltListCnt = pAutoCmpltList->Count();
2549cdf0e10cSrcweir 		for( sal_uInt16 n = 0; n < nAutoCmpltListCnt; ++n )
2550cdf0e10cSrcweir 		{
2551cdf0e10cSrcweir 			const StringPtr pStr = pAutoCmpltList->GetObject( n );
2552cdf0e10cSrcweir 			sal_uInt16 nPos = aLBEntries.InsertEntry( *pStr );
2553cdf0e10cSrcweir 			aLBEntries.SetEntryData( nPos, (void*)pStr );
2554cdf0e10cSrcweir 		}
2555cdf0e10cSrcweir 	}
2556cdf0e10cSrcweir 	else
2557cdf0e10cSrcweir 	{
2558cdf0e10cSrcweir 		aLBEntries.Disable();
2559cdf0e10cSrcweir 		aPBEntries.Disable();
2560cdf0e10cSrcweir 	}
2561cdf0e10cSrcweir 
2562cdf0e10cSrcweir 	CheckHdl( &aCBActiv );
2563cdf0e10cSrcweir     CheckHdl( &aCBCollect );
2564cdf0e10cSrcweir }
2565cdf0e10cSrcweir 
ActivatePage(const SfxItemSet &)2566cdf0e10cSrcweir void OfaAutoCompleteTabPage::ActivatePage( const SfxItemSet& )
2567cdf0e10cSrcweir {
2568cdf0e10cSrcweir 	((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage( sal_False );
2569cdf0e10cSrcweir }
2570cdf0e10cSrcweir 
IMPL_LINK(OfaAutoCompleteTabPage,DeleteHdl,PushButton *,EMPTYARG)2571cdf0e10cSrcweir IMPL_LINK( OfaAutoCompleteTabPage, DeleteHdl, PushButton*, EMPTYARG )
2572cdf0e10cSrcweir {
2573cdf0e10cSrcweir 	sal_uInt16 nSelCnt = pAutoCmpltList ? aLBEntries.GetSelectEntryCount() : 0;
2574cdf0e10cSrcweir 	while( nSelCnt )
2575cdf0e10cSrcweir 	{
2576cdf0e10cSrcweir 		sal_uInt16 nPos = aLBEntries.GetSelectEntryPos( --nSelCnt );
2577cdf0e10cSrcweir 		const StringPtr pStr = (StringPtr)aLBEntries.GetEntryData( nPos );
2578cdf0e10cSrcweir 		aLBEntries.RemoveEntry( nPos );
2579cdf0e10cSrcweir 		nPos = pAutoCmpltList->GetPos( pStr );
2580cdf0e10cSrcweir 		if( USHRT_MAX != nPos )
2581cdf0e10cSrcweir 			pAutoCmpltList->Remove( nPos );
2582cdf0e10cSrcweir 	}
2583cdf0e10cSrcweir 	return 0;
2584cdf0e10cSrcweir }
2585cdf0e10cSrcweir 
IMPL_LINK(OfaAutoCompleteTabPage,CheckHdl,CheckBox *,pBox)2586cdf0e10cSrcweir IMPL_LINK( OfaAutoCompleteTabPage, CheckHdl, CheckBox*, pBox )
2587cdf0e10cSrcweir {
2588cdf0e10cSrcweir     sal_Bool bEnable = pBox->IsChecked();
2589cdf0e10cSrcweir     if( pBox == &aCBActiv )
2590cdf0e10cSrcweir 	{
2591cdf0e10cSrcweir         aCBAppendSpace.Enable( bEnable );
2592cdf0e10cSrcweir         aCBAppendSpace.Enable( bEnable );
2593cdf0e10cSrcweir 		aCBAsTip.Enable( bEnable );
2594cdf0e10cSrcweir 		aDCBExpandKey.Enable( bEnable );
2595cdf0e10cSrcweir 	}
2596cdf0e10cSrcweir     else if(&aCBCollect == pBox)
2597cdf0e10cSrcweir         aCBRemoveList.Enable( bEnable );
2598cdf0e10cSrcweir     return 0;
2599cdf0e10cSrcweir }
2600cdf0e10cSrcweir 
CopyToClipboard() const2601cdf0e10cSrcweir void OfaAutoCompleteTabPage::CopyToClipboard() const
2602cdf0e10cSrcweir {
2603cdf0e10cSrcweir 	sal_uInt16 nSelCnt = aLBEntries.GetSelectEntryCount();
2604cdf0e10cSrcweir 	if( pAutoCmpltList && nSelCnt )
2605cdf0e10cSrcweir 	{
2606cdf0e10cSrcweir 		TransferDataContainer* pCntnr = new TransferDataContainer;
2607cdf0e10cSrcweir 		::com::sun::star::uno::Reference<
2608cdf0e10cSrcweir 			::com::sun::star::datatransfer::XTransferable > xRef( pCntnr );
2609cdf0e10cSrcweir 
2610cdf0e10cSrcweir 		ByteString sData;
2611cdf0e10cSrcweir 		const sal_Char* pLineEnd =
2612cdf0e10cSrcweir #if defined(UNX)
2613cdf0e10cSrcweir 				"\012";
2614cdf0e10cSrcweir #else
2615cdf0e10cSrcweir 				"\015\012";
2616cdf0e10cSrcweir #endif
2617cdf0e10cSrcweir 
2618cdf0e10cSrcweir 		rtl_TextEncoding nEncode = gsl_getSystemTextEncoding();
2619cdf0e10cSrcweir 
2620cdf0e10cSrcweir 		for( sal_uInt16 n = 0; n < nSelCnt; ++n )
2621cdf0e10cSrcweir 		{
2622cdf0e10cSrcweir 			sData += ByteString( aLBEntries.GetSelectEntry( n ), nEncode );
2623cdf0e10cSrcweir 			sData += pLineEnd;
2624cdf0e10cSrcweir 		}
2625cdf0e10cSrcweir 		pCntnr->CopyByteString( SOT_FORMAT_STRING, sData );
2626cdf0e10cSrcweir 		pCntnr->CopyToClipboard( (Window*)this );
2627cdf0e10cSrcweir 	}
2628cdf0e10cSrcweir }
2629cdf0e10cSrcweir 
PreNotify(NotifyEvent & rNEvt)2630cdf0e10cSrcweir long OfaAutoCompleteTabPage::AutoCompleteMultiListBox::PreNotify(
2631cdf0e10cSrcweir 			NotifyEvent& rNEvt )
2632cdf0e10cSrcweir {
2633cdf0e10cSrcweir 	long nHandled = MultiListBox::PreNotify( rNEvt );
2634cdf0e10cSrcweir 
2635cdf0e10cSrcweir 	if( !nHandled && EVENT_KEYUP == rNEvt.GetType() )
2636cdf0e10cSrcweir 	{
2637cdf0e10cSrcweir 		const KeyCode& rKeyCode = rNEvt.GetKeyEvent()->GetKeyCode();
2638cdf0e10cSrcweir 		switch( rKeyCode.GetModifier() | rKeyCode.GetCode() )
2639cdf0e10cSrcweir 		{
2640cdf0e10cSrcweir 		case KEY_DELETE:
2641cdf0e10cSrcweir 			rPage.DeleteHdl( 0 );
2642cdf0e10cSrcweir 			nHandled = 1;
2643cdf0e10cSrcweir 			break;
2644cdf0e10cSrcweir 
2645cdf0e10cSrcweir 		default:
2646cdf0e10cSrcweir 			if( KEYFUNC_COPY == rKeyCode.GetFunction() )
2647cdf0e10cSrcweir 			{
2648cdf0e10cSrcweir 				rPage.CopyToClipboard();
2649cdf0e10cSrcweir 				nHandled = 1;
2650cdf0e10cSrcweir 			}
2651cdf0e10cSrcweir 			break;
2652cdf0e10cSrcweir 		}
2653cdf0e10cSrcweir 	}
2654cdf0e10cSrcweir 	return nHandled;
2655cdf0e10cSrcweir }
2656cdf0e10cSrcweir 
2657cdf0e10cSrcweir // class OfaSmartTagOptionsTabPage ---------------------------------------------
2658cdf0e10cSrcweir 
OfaSmartTagOptionsTabPage(Window * pParent,const SfxItemSet & rSet)2659cdf0e10cSrcweir OfaSmartTagOptionsTabPage::OfaSmartTagOptionsTabPage( Window* pParent,
2660cdf0e10cSrcweir 												      const SfxItemSet& rSet )
2661cdf0e10cSrcweir     : SfxTabPage(pParent, CUI_RES( RID_OFAPAGE_SMARTTAG_OPTIONS ), rSet),
2662cdf0e10cSrcweir     m_aMainCB( this, CUI_RES(CB_SMARTTAGS) ),
2663cdf0e10cSrcweir     m_aSmartTagTypesLB( this, CUI_RES(LB_SMARTTAGS) ),
2664cdf0e10cSrcweir     m_aPropertiesPB( this, CUI_RES(PB_SMARTTAGS) ),
2665cdf0e10cSrcweir     m_aTitleFT( this, CUI_RES(FT_SMARTTAGS) )
2666cdf0e10cSrcweir {
2667cdf0e10cSrcweir 	FreeResource();
2668cdf0e10cSrcweir 
2669cdf0e10cSrcweir     // some options for the list box:
2670cdf0e10cSrcweir     m_aSmartTagTypesLB.SetStyle( m_aSmartTagTypesLB.GetStyle() | WB_HSCROLL | WB_HIDESELECTION );
2671cdf0e10cSrcweir 	m_aSmartTagTypesLB.SetHighlightRange();
2672cdf0e10cSrcweir 
2673cdf0e10cSrcweir     // set the handlers:
2674cdf0e10cSrcweir 	m_aMainCB.SetToggleHdl(LINK(this, OfaSmartTagOptionsTabPage, CheckHdl));
2675cdf0e10cSrcweir     m_aPropertiesPB.SetClickHdl(LINK(this, OfaSmartTagOptionsTabPage, ClickHdl));
2676cdf0e10cSrcweir     m_aSmartTagTypesLB.SetSelectHdl(LINK(this, OfaSmartTagOptionsTabPage, SelectHdl));
2677cdf0e10cSrcweir }
2678cdf0e10cSrcweir 
~OfaSmartTagOptionsTabPage()2679cdf0e10cSrcweir OfaSmartTagOptionsTabPage::~OfaSmartTagOptionsTabPage()
2680cdf0e10cSrcweir {
2681cdf0e10cSrcweir 
2682cdf0e10cSrcweir }
2683cdf0e10cSrcweir 
Create(Window * pParent,const SfxItemSet & rSet)2684cdf0e10cSrcweir SfxTabPage*	OfaSmartTagOptionsTabPage::Create( Window* pParent, const SfxItemSet& rSet)
2685cdf0e10cSrcweir {
2686cdf0e10cSrcweir 	return new OfaSmartTagOptionsTabPage( pParent, rSet );
2687cdf0e10cSrcweir }
2688cdf0e10cSrcweir 
2689cdf0e10cSrcweir /** This struct is used to associate list box entries with smart tag data
2690cdf0e10cSrcweir */
2691cdf0e10cSrcweir struct ImplSmartTagLBUserData
2692cdf0e10cSrcweir {
2693cdf0e10cSrcweir     rtl::OUString maSmartTagType;
2694cdf0e10cSrcweir     uno::Reference< smarttags::XSmartTagRecognizer > mxRec;
2695cdf0e10cSrcweir     sal_Int32 mnSmartTagIdx;
2696cdf0e10cSrcweir 
ImplSmartTagLBUserDataImplSmartTagLBUserData2697cdf0e10cSrcweir     ImplSmartTagLBUserData( const rtl::OUString& rSmartTagType,
2698cdf0e10cSrcweir                             uno::Reference< smarttags::XSmartTagRecognizer > xRec,
2699cdf0e10cSrcweir                             sal_Int32 nSmartTagIdx ) :
2700cdf0e10cSrcweir         maSmartTagType( rSmartTagType ),
2701cdf0e10cSrcweir         mxRec( xRec ),
2702cdf0e10cSrcweir         mnSmartTagIdx( nSmartTagIdx ) {}
2703cdf0e10cSrcweir };
2704cdf0e10cSrcweir 
2705cdf0e10cSrcweir /** Clears m_aSmartTagTypesLB
2706cdf0e10cSrcweir */
ClearListBox()2707cdf0e10cSrcweir void OfaSmartTagOptionsTabPage::ClearListBox()
2708cdf0e10cSrcweir {
2709cdf0e10cSrcweir     const sal_uLong nCount = m_aSmartTagTypesLB.GetEntryCount();
2710cdf0e10cSrcweir     for ( sal_uInt16 i = 0; i < nCount; ++i )
2711cdf0e10cSrcweir 	{
2712cdf0e10cSrcweir         const SvLBoxEntry* pEntry = m_aSmartTagTypesLB.GetEntry(i);
2713cdf0e10cSrcweir         const ImplSmartTagLBUserData* pUserData = static_cast< ImplSmartTagLBUserData* >(pEntry->GetUserData());
2714cdf0e10cSrcweir         delete pUserData;
2715cdf0e10cSrcweir     }
2716cdf0e10cSrcweir 
2717cdf0e10cSrcweir     m_aSmartTagTypesLB.Clear();
2718cdf0e10cSrcweir }
2719cdf0e10cSrcweir 
2720cdf0e10cSrcweir /** Inserts items into m_aSmartTagTypesLB
2721cdf0e10cSrcweir */
FillListBox(const SmartTagMgr & rSmartTagMgr)2722cdf0e10cSrcweir void OfaSmartTagOptionsTabPage::FillListBox( const SmartTagMgr& rSmartTagMgr )
2723cdf0e10cSrcweir {
2724cdf0e10cSrcweir     // first we have to clear the list box:
2725cdf0e10cSrcweir     ClearListBox();
2726cdf0e10cSrcweir 
2727cdf0e10cSrcweir     // fill list box:
2728cdf0e10cSrcweir     const sal_uInt32 nNumberOfRecognizers = rSmartTagMgr.NumberOfRecognizers();
2729cdf0e10cSrcweir 	const lang::Locale aLocale( SvxCreateLocale( eLastDialogLanguage ) );
2730cdf0e10cSrcweir     std::vector< ActionReference > aActionReferences;
2731cdf0e10cSrcweir 
2732cdf0e10cSrcweir     for ( sal_uInt32 i = 0; i < nNumberOfRecognizers; ++i )
2733cdf0e10cSrcweir     {
2734cdf0e10cSrcweir         uno::Reference< smarttags::XSmartTagRecognizer > xRec = rSmartTagMgr.GetRecognizer(i);
2735cdf0e10cSrcweir 
2736cdf0e10cSrcweir         const rtl::OUString aName = xRec->getName( aLocale );
2737cdf0e10cSrcweir         const rtl::OUString aDesc = xRec->getDescription( aLocale );
2738cdf0e10cSrcweir         const sal_Int32 nNumberOfSupportedSmartTags = xRec->getSmartTagCount();
2739cdf0e10cSrcweir 
2740cdf0e10cSrcweir         for ( sal_Int32 j = 0; j < nNumberOfSupportedSmartTags; ++j )
2741cdf0e10cSrcweir         {
2742cdf0e10cSrcweir             const rtl::OUString aSmartTagType = xRec->getSmartTagName(j);
2743cdf0e10cSrcweir             rtl::OUString aSmartTagCaption = rSmartTagMgr.GetSmartTagCaption( aSmartTagType, aLocale );
2744cdf0e10cSrcweir 
2745cdf0e10cSrcweir             if ( !aSmartTagCaption.getLength() )
2746cdf0e10cSrcweir                 aSmartTagCaption = aSmartTagType;
2747cdf0e10cSrcweir 
2748cdf0e10cSrcweir             const rtl::OUString aLBEntry = aSmartTagCaption +
2749cdf0e10cSrcweir                                            OUString::createFromAscii(" (") +
2750cdf0e10cSrcweir                                            aName +
2751cdf0e10cSrcweir                                            OUString::createFromAscii(")");
2752cdf0e10cSrcweir 
2753cdf0e10cSrcweir             SvLBoxEntry* pEntry = m_aSmartTagTypesLB.SvTreeListBox::InsertEntry( aLBEntry );
2754cdf0e10cSrcweir             if ( pEntry )
2755cdf0e10cSrcweir             {
2756cdf0e10cSrcweir                 const bool bCheck = rSmartTagMgr.IsSmartTagTypeEnabled( aSmartTagType );
2757cdf0e10cSrcweir                 m_aSmartTagTypesLB.SetCheckButtonState( pEntry, bCheck ? SV_BUTTON_CHECKED : SV_BUTTON_UNCHECKED );
2758cdf0e10cSrcweir                 pEntry->SetUserData(static_cast<void*>(new ImplSmartTagLBUserData( aSmartTagType, xRec, j ) ) );
2759cdf0e10cSrcweir             }
2760cdf0e10cSrcweir         }
2761cdf0e10cSrcweir     }
2762cdf0e10cSrcweir }
2763cdf0e10cSrcweir 
2764cdf0e10cSrcweir /** Handler for the push button
2765cdf0e10cSrcweir */
IMPL_LINK(OfaSmartTagOptionsTabPage,ClickHdl,PushButton *,EMPTYARG)2766cdf0e10cSrcweir IMPL_LINK( OfaSmartTagOptionsTabPage, ClickHdl, PushButton*, EMPTYARG )
2767cdf0e10cSrcweir {
2768cdf0e10cSrcweir 	const sal_uInt16 nPos = m_aSmartTagTypesLB.GetSelectEntryPos();
2769cdf0e10cSrcweir     const SvLBoxEntry* pEntry = m_aSmartTagTypesLB.GetEntry(nPos);
2770cdf0e10cSrcweir     const ImplSmartTagLBUserData* pUserData = static_cast< ImplSmartTagLBUserData* >(pEntry->GetUserData());
2771cdf0e10cSrcweir     uno::Reference< smarttags::XSmartTagRecognizer > xRec = pUserData->mxRec;
2772cdf0e10cSrcweir     const sal_Int32 nSmartTagIdx = pUserData->mnSmartTagIdx;
2773cdf0e10cSrcweir 
2774cdf0e10cSrcweir  	const lang::Locale aLocale( SvxCreateLocale( eLastDialogLanguage ) );
2775cdf0e10cSrcweir     if ( xRec->hasPropertyPage( nSmartTagIdx, aLocale ) )
2776cdf0e10cSrcweir         xRec->displayPropertyPage( nSmartTagIdx, aLocale );
2777cdf0e10cSrcweir 
2778cdf0e10cSrcweir 	return 0;
2779cdf0e10cSrcweir }
2780cdf0e10cSrcweir 
2781cdf0e10cSrcweir /** Handler for the check box
2782cdf0e10cSrcweir */
IMPL_LINK(OfaSmartTagOptionsTabPage,CheckHdl,CheckBox *,EMPTYARG)2783cdf0e10cSrcweir IMPL_LINK( OfaSmartTagOptionsTabPage, CheckHdl, CheckBox*, EMPTYARG )
2784cdf0e10cSrcweir {
2785cdf0e10cSrcweir     const sal_Bool bEnable = m_aMainCB.IsChecked();
2786cdf0e10cSrcweir     m_aSmartTagTypesLB.Enable( bEnable );
2787cdf0e10cSrcweir     m_aSmartTagTypesLB.Invalidate();
2788cdf0e10cSrcweir     m_aPropertiesPB.Enable( false );
2789cdf0e10cSrcweir 
2790cdf0e10cSrcweir     // if the controls are currently enabled, we still have to check
2791cdf0e10cSrcweir     // if the properties button should be disabled because the currently
2792cdf0e10cSrcweir     // seleted smart tag type does not have a properties dialog.
2793cdf0e10cSrcweir     // We do this by calling SelectHdl:
2794cdf0e10cSrcweir     if ( bEnable )
2795cdf0e10cSrcweir         SelectHdl( &m_aSmartTagTypesLB );
2796cdf0e10cSrcweir 
2797cdf0e10cSrcweir     return 0;
2798cdf0e10cSrcweir }
2799cdf0e10cSrcweir 
2800cdf0e10cSrcweir /** Handler for the list box
2801cdf0e10cSrcweir */
IMPL_LINK(OfaSmartTagOptionsTabPage,SelectHdl,SvxCheckListBox *,EMPTYARG)2802cdf0e10cSrcweir IMPL_LINK(OfaSmartTagOptionsTabPage, SelectHdl, SvxCheckListBox*, EMPTYARG)
2803cdf0e10cSrcweir {
2804cdf0e10cSrcweir     if ( m_aSmartTagTypesLB.GetEntryCount() < 1 )
2805cdf0e10cSrcweir         return 0;
2806cdf0e10cSrcweir 
2807cdf0e10cSrcweir 	const sal_uInt16 nPos = m_aSmartTagTypesLB.GetSelectEntryPos();
2808cdf0e10cSrcweir     const SvLBoxEntry* pEntry = m_aSmartTagTypesLB.GetEntry(nPos);
2809cdf0e10cSrcweir     const ImplSmartTagLBUserData* pUserData = static_cast< ImplSmartTagLBUserData* >(pEntry->GetUserData());
2810cdf0e10cSrcweir     uno::Reference< smarttags::XSmartTagRecognizer > xRec = pUserData->mxRec;
2811cdf0e10cSrcweir     const sal_Int32 nSmartTagIdx = pUserData->mnSmartTagIdx;
2812cdf0e10cSrcweir 
2813cdf0e10cSrcweir     const lang::Locale aLocale( SvxCreateLocale( eLastDialogLanguage ) );
2814cdf0e10cSrcweir     if ( xRec->hasPropertyPage( nSmartTagIdx, aLocale ) )
2815cdf0e10cSrcweir         m_aPropertiesPB.Enable( sal_True );
2816cdf0e10cSrcweir     else
2817cdf0e10cSrcweir         m_aPropertiesPB.Enable( sal_False );
2818cdf0e10cSrcweir 
2819cdf0e10cSrcweir 	return 0;
2820cdf0e10cSrcweir }
2821cdf0e10cSrcweir 
2822cdf0e10cSrcweir /** Propagates the current settings to the smart tag manager.
2823cdf0e10cSrcweir */
FillItemSet(SfxItemSet &)2824cdf0e10cSrcweir sal_Bool OfaSmartTagOptionsTabPage::FillItemSet( SfxItemSet& )
2825cdf0e10cSrcweir {
2826cdf0e10cSrcweir 	SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
2827cdf0e10cSrcweir 	SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
2828cdf0e10cSrcweir     SmartTagMgr* pSmartTagMgr = pOpt->pSmartTagMgr;
2829cdf0e10cSrcweir 
2830cdf0e10cSrcweir     // robust!
2831cdf0e10cSrcweir     if ( !pSmartTagMgr )
2832cdf0e10cSrcweir         return sal_False;
2833cdf0e10cSrcweir 
2834cdf0e10cSrcweir     sal_Bool bModifiedSmartTagTypes = sal_False;
2835cdf0e10cSrcweir     std::vector< rtl::OUString > aDisabledSmartTagTypes;
2836cdf0e10cSrcweir 
2837cdf0e10cSrcweir     const sal_uLong nCount = m_aSmartTagTypesLB.GetEntryCount();
2838cdf0e10cSrcweir 
2839cdf0e10cSrcweir     for ( sal_uInt16 i = 0; i < nCount; ++i )
2840cdf0e10cSrcweir 	{
2841cdf0e10cSrcweir         const SvLBoxEntry* pEntry = m_aSmartTagTypesLB.GetEntry(i);
2842cdf0e10cSrcweir         const ImplSmartTagLBUserData* pUserData = static_cast< ImplSmartTagLBUserData* >(pEntry->GetUserData());
2843cdf0e10cSrcweir 		const sal_Bool bChecked = m_aSmartTagTypesLB.IsChecked(i);
2844cdf0e10cSrcweir         const sal_Bool bIsCurrentlyEnabled = pSmartTagMgr->IsSmartTagTypeEnabled( pUserData->maSmartTagType );
2845cdf0e10cSrcweir 
2846cdf0e10cSrcweir         bModifiedSmartTagTypes = bModifiedSmartTagTypes || ( !bChecked != !bIsCurrentlyEnabled );
2847cdf0e10cSrcweir 
2848cdf0e10cSrcweir         if ( !bChecked )
2849cdf0e10cSrcweir             aDisabledSmartTagTypes.push_back( pUserData->maSmartTagType );
2850cdf0e10cSrcweir 
2851cdf0e10cSrcweir         delete pUserData;
2852cdf0e10cSrcweir     }
2853cdf0e10cSrcweir 
2854cdf0e10cSrcweir     const sal_Bool bModifiedRecognize = ( !m_aMainCB.IsChecked() != !pSmartTagMgr->IsLabelTextWithSmartTags() );
2855cdf0e10cSrcweir     if ( bModifiedSmartTagTypes || bModifiedRecognize )
2856cdf0e10cSrcweir     {
2857cdf0e10cSrcweir         bool bLabelTextWithSmartTags = m_aMainCB.IsChecked() ? true : false;
2858cdf0e10cSrcweir         pSmartTagMgr->WriteConfiguration( bModifiedRecognize     ? &bLabelTextWithSmartTags : 0,
2859cdf0e10cSrcweir                                           bModifiedSmartTagTypes ? &aDisabledSmartTagTypes : 0 );
2860cdf0e10cSrcweir     }
2861cdf0e10cSrcweir 
2862cdf0e10cSrcweir 	return sal_True;
2863cdf0e10cSrcweir }
2864cdf0e10cSrcweir 
2865cdf0e10cSrcweir /** Sets the controls based on the current settings at SmartTagMgr.
2866cdf0e10cSrcweir */
Reset(const SfxItemSet &)2867cdf0e10cSrcweir void OfaSmartTagOptionsTabPage::Reset( const SfxItemSet&  )
2868cdf0e10cSrcweir {
2869cdf0e10cSrcweir 	SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
2870cdf0e10cSrcweir 	SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
2871cdf0e10cSrcweir     const SmartTagMgr* pSmartTagMgr = pOpt->pSmartTagMgr;
2872cdf0e10cSrcweir 
2873cdf0e10cSrcweir     // robust, should not happen!
2874cdf0e10cSrcweir     if ( !pSmartTagMgr )
2875cdf0e10cSrcweir         return;
2876cdf0e10cSrcweir 
2877cdf0e10cSrcweir     FillListBox( *pSmartTagMgr );
2878cdf0e10cSrcweir 	m_aSmartTagTypesLB.SelectEntryPos( 0 );
2879cdf0e10cSrcweir     m_aMainCB.Check( pSmartTagMgr->IsLabelTextWithSmartTags() );
2880cdf0e10cSrcweir     CheckHdl( &m_aMainCB );
2881cdf0e10cSrcweir }
2882cdf0e10cSrcweir 
ActivatePage(const SfxItemSet &)2883cdf0e10cSrcweir void OfaSmartTagOptionsTabPage::ActivatePage( const SfxItemSet& )
2884cdf0e10cSrcweir {
2885cdf0e10cSrcweir 	((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage( sal_False );
2886cdf0e10cSrcweir }
2887cdf0e10cSrcweir 
2888