xref: /trunk/main/cui/source/tabpages/autocdlg.cxx (revision 2ee96f1cdb99d49425d866b1ec4c5567f37285e6)
1*2ee96f1cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*2ee96f1cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*2ee96f1cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*2ee96f1cSAndrew Rist  * distributed with this work for additional information
6*2ee96f1cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*2ee96f1cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*2ee96f1cSAndrew Rist  * "License"); you may not use this file except in compliance
9*2ee96f1cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*2ee96f1cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*2ee96f1cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*2ee96f1cSAndrew Rist  * software distributed under the License is distributed on an
15*2ee96f1cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*2ee96f1cSAndrew Rist  * KIND, either express or implied.  See the License for the
17*2ee96f1cSAndrew Rist  * specific language governing permissions and limitations
18*2ee96f1cSAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*2ee96f1cSAndrew Rist  *************************************************************/
21*2ee96f1cSAndrew Rist 
22*2ee96f1cSAndrew 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<
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 
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 
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  * --------------------------------------------------*/
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 
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 
235cdf0e10cSrcweir OfaAutocorrOptionsPage::~OfaAutocorrOptionsPage()
236cdf0e10cSrcweir {
237cdf0e10cSrcweir }
238cdf0e10cSrcweir 
239cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
240cdf0e10cSrcweir 
241cdf0e10cSrcweir --------------------------------------------------*/
242cdf0e10cSrcweir 
243cdf0e10cSrcweir 
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 
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  * --------------------------------------------------*/
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 
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 
330cdf0e10cSrcweir     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:
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             }
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 
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 
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 
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 
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 
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 
561cdf0e10cSrcweir SfxTabPage* __EXPORT OfaSwAutoFmtOptionsPage::Create( Window* pParent,
562cdf0e10cSrcweir                                 const SfxItemSet& rAttrSet)
563cdf0e10cSrcweir {
564cdf0e10cSrcweir     return new OfaSwAutoFmtOptionsPage(pParent, rAttrSet);
565cdf0e10cSrcweir }
566cdf0e10cSrcweir 
567cdf0e10cSrcweir /*********************************************************************/
568cdf0e10cSrcweir /*                                                                   */
569cdf0e10cSrcweir /*********************************************************************/
570cdf0e10cSrcweir 
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  * --------------------------------------------------*/
687cdf0e10cSrcweir void    OfaSwAutoFmtOptionsPage::ActivatePage( const SfxItemSet& )
688cdf0e10cSrcweir {
689cdf0e10cSrcweir     ((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage(sal_False);
690cdf0e10cSrcweir }
691cdf0e10cSrcweir 
692cdf0e10cSrcweir /*********************************************************************/
693cdf0e10cSrcweir /*                                                                   */
694cdf0e10cSrcweir /*********************************************************************/
695cdf0e10cSrcweir 
696cdf0e10cSrcweir 
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 );
756cdf0e10cSrcweir     sMargin += '%';
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 
779cdf0e10cSrcweir IMPL_LINK(OfaSwAutoFmtOptionsPage, SelectHdl, OfaACorrCheckListBox*, pBox)
780cdf0e10cSrcweir {
781cdf0e10cSrcweir     aEditPB.Enable(0 != pBox->FirstSelected()->GetUserData());
782cdf0e10cSrcweir     return 0;
783cdf0e10cSrcweir }
784cdf0e10cSrcweir 
785cdf0e10cSrcweir /*********************************************************************/
786cdf0e10cSrcweir /*                                                                   */
787cdf0e10cSrcweir /*********************************************************************/
788cdf0e10cSrcweir 
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 );
820cdf0e10cSrcweir             sMargin += '%';
821cdf0e10cSrcweir         }
822cdf0e10cSrcweir     }
823cdf0e10cSrcweir     aCheckLB.Invalidate();
824cdf0e10cSrcweir     return 0;
825cdf0e10cSrcweir }
826cdf0e10cSrcweir 
827cdf0e10cSrcweir /*********************************************************************/
828cdf0e10cSrcweir /*                                                                   */
829cdf0e10cSrcweir /*********************************************************************/
830cdf0e10cSrcweir 
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 
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 
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 
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 
906cdf0e10cSrcweir 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 
921cdf0e10cSrcweir void OfaACorrCheckListBox::HBarClick()
922cdf0e10cSrcweir {
923cdf0e10cSrcweir     // Sortierung durch diese Ueberladung abgeklemmt
924cdf0e10cSrcweir }
925cdf0e10cSrcweir /* -----------------------------22.05.2002 11:06------------------------------
926cdf0e10cSrcweir 
927cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
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  * --------------------------------------------------*/
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 
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() );
1012cdf0e10cSrcweir     pCompareCaseClass = new CollatorWrapper( GetProcessFact() );
1013cdf0e10cSrcweir     pCompareClass->loadDefaultCollator( aLcl, ::com::sun::star::i18n::
1014cdf0e10cSrcweir                             CollatorOptions::CollatorOptions_IGNORE_CASE );
1015cdf0e10cSrcweir     pCompareCaseClass->loadDefaultCollator( aLcl, 0 );
1016cdf0e10cSrcweir     pCharClass = new CharClass( aLcl );
1017cdf0e10cSrcweir 
1018cdf0e10cSrcweir     static long nTabs[] = { 2 /* Tab-Count */, 1, 61 };
1019cdf0e10cSrcweir     aReplaceTLB.SetTabs( &nTabs[0], MAP_APPFONT );
1020cdf0e10cSrcweir 
1021cdf0e10cSrcweir     aReplaceTLB.SetStyle(aReplaceTLB.GetStyle()|WB_HSCROLL|WB_CLIPCHILDREN);
1022cdf0e10cSrcweir     aReplaceTLB.SetSelectHdl(LINK(this, OfaAutocorrReplacePage, SelectHdl));
1023cdf0e10cSrcweir     aNewReplacePB.SetClickHdl( LINK(this, OfaAutocorrReplacePage, NewDelHdl));
1024cdf0e10cSrcweir     aDeleteReplacePB.SetClickHdl(LINK(this, OfaAutocorrReplacePage, NewDelHdl));
1025cdf0e10cSrcweir     aShortED.SetModifyHdl(LINK(this, OfaAutocorrReplacePage, ModifyHdl));
1026cdf0e10cSrcweir     aReplaceED.SetModifyHdl(LINK(this, OfaAutocorrReplacePage, ModifyHdl));
1027cdf0e10cSrcweir     aShortED.SetActionHdl(LINK(this, OfaAutocorrReplacePage, NewDelHdl));
1028cdf0e10cSrcweir     aReplaceED.SetActionHdl(LINK(this, OfaAutocorrReplacePage, NewDelHdl));
1029cdf0e10cSrcweir 
1030cdf0e10cSrcweir     aReplaceED.SetSpaces(sal_True);
1031cdf0e10cSrcweir     aShortED.SetSpaces(sal_True);
1032cdf0e10cSrcweir     aShortED.SetMaxTextLen(30);
1033cdf0e10cSrcweir }
1034cdf0e10cSrcweir 
1035cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1036cdf0e10cSrcweir 
1037cdf0e10cSrcweir --------------------------------------------------*/
1038cdf0e10cSrcweir 
1039cdf0e10cSrcweir 
1040cdf0e10cSrcweir OfaAutocorrReplacePage::~OfaAutocorrReplacePage()
1041cdf0e10cSrcweir {
1042cdf0e10cSrcweir     delete pFormatText;
1043cdf0e10cSrcweir     lcl_ClearTable(aDoubleStringTable);
1044cdf0e10cSrcweir     delete pCompareClass;
1045cdf0e10cSrcweir     delete pCompareCaseClass;
1046cdf0e10cSrcweir     delete pCharClass;
1047cdf0e10cSrcweir }
1048cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1049cdf0e10cSrcweir 
1050cdf0e10cSrcweir --------------------------------------------------*/
1051cdf0e10cSrcweir 
1052cdf0e10cSrcweir SfxTabPage* OfaAutocorrReplacePage::Create( Window* pParent,
1053cdf0e10cSrcweir                                 const SfxItemSet& rSet)
1054cdf0e10cSrcweir {
1055cdf0e10cSrcweir     return new OfaAutocorrReplacePage(pParent, rSet);
1056cdf0e10cSrcweir }
1057cdf0e10cSrcweir /* -----------------20.11.98 13:26-------------------
1058cdf0e10cSrcweir  *
1059cdf0e10cSrcweir  * --------------------------------------------------*/
1060cdf0e10cSrcweir void    OfaAutocorrReplacePage::ActivatePage( const SfxItemSet& )
1061cdf0e10cSrcweir {
1062cdf0e10cSrcweir     if(eLang != eLastDialogLanguage)
1063cdf0e10cSrcweir         SetLanguage(eLastDialogLanguage);
1064cdf0e10cSrcweir     ((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage(sal_True);
1065cdf0e10cSrcweir }
1066cdf0e10cSrcweir /* -----------------20.11.98 13:26-------------------
1067cdf0e10cSrcweir  *
1068cdf0e10cSrcweir  * --------------------------------------------------*/
1069cdf0e10cSrcweir int OfaAutocorrReplacePage::DeactivatePage( SfxItemSet*  )
1070cdf0e10cSrcweir {
1071cdf0e10cSrcweir     return LEAVE_PAGE;
1072cdf0e10cSrcweir }
1073cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1074cdf0e10cSrcweir 
1075cdf0e10cSrcweir --------------------------------------------------*/
1076cdf0e10cSrcweir 
1077cdf0e10cSrcweir sal_Bool OfaAutocorrReplacePage::FillItemSet( SfxItemSet& )
1078cdf0e10cSrcweir {
1079cdf0e10cSrcweir     SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
1080cdf0e10cSrcweir     DoubleStringArrayPtr pDoubleStringArray = aDoubleStringTable.Last();
1081cdf0e10cSrcweir     while(pDoubleStringArray)
1082cdf0e10cSrcweir     {
1083cdf0e10cSrcweir         LanguageType eCurLang = (LanguageType)aDoubleStringTable.GetCurKey();
1084cdf0e10cSrcweir         if(eCurLang != eLang) // die aktuelle Sprache wird weiter hinten behandelt
1085cdf0e10cSrcweir         {
1086cdf0e10cSrcweir             SvxAutocorrWordList* pWordList = pAutoCorrect->LoadAutocorrWordList(eCurLang);
1087cdf0e10cSrcweir             sal_uInt16 nWordListCount = pWordList->Count();
1088cdf0e10cSrcweir             sal_uInt16 nDoubleStringArrayCount = pDoubleStringArray->Count();
1089cdf0e10cSrcweir             sal_uInt16 nPos = nDoubleStringArrayCount;
1090cdf0e10cSrcweir             sal_uInt16 nLastPos = nPos;
1091cdf0e10cSrcweir             // 1. Durchlauf: Eintraege loeschen oder veraendern:
1092cdf0e10cSrcweir 
1093cdf0e10cSrcweir 
1094cdf0e10cSrcweir             for( sal_uInt16 nWordListPos = nWordListCount; nWordListPos; nWordListPos-- )
1095cdf0e10cSrcweir             {
1096cdf0e10cSrcweir                 SvxAutocorrWordPtr pWordPtr = pWordList->GetObject(nWordListPos - 1);
1097cdf0e10cSrcweir                 String sEntry(pWordPtr->GetShort());
1098cdf0e10cSrcweir                 // formatierter Text steht nur im Writer
1099cdf0e10cSrcweir                 sal_Bool bFound = !bSWriter && !pWordPtr->IsTextOnly();
1100cdf0e10cSrcweir                 while(!bFound && nPos)
1101cdf0e10cSrcweir                 {
1102cdf0e10cSrcweir                     DoubleString* pDouble = pDoubleStringArray->GetObject( nPos - 1);
1103cdf0e10cSrcweir 
1104cdf0e10cSrcweir                     if( 0 == pCompareClass->compareString(
1105cdf0e10cSrcweir                                                     sEntry, pDouble->sShort ))
1106cdf0e10cSrcweir                     {
1107cdf0e10cSrcweir                         nLastPos = nPos - 1;
1108cdf0e10cSrcweir                         bFound = sal_True;
1109cdf0e10cSrcweir                         if( !(pWordPtr->IsTextOnly() == (0 == pDouble->pUserData)
1110cdf0e10cSrcweir                             && 0 == pCompareCaseClass->compareString(
1111cdf0e10cSrcweir                                 pWordPtr->GetLong(), pDouble->sLong ) ) )
1112cdf0e10cSrcweir                         {
1113cdf0e10cSrcweir                             pAutoCorrect->PutText(sEntry, pDouble->sLong, eCurLang);
1114cdf0e10cSrcweir                         }
1115cdf0e10cSrcweir                         pDoubleStringArray->DeleteAndDestroy(nPos - 1, 1);
1116cdf0e10cSrcweir                         break;
1117cdf0e10cSrcweir                     }
1118cdf0e10cSrcweir                     nPos--;
1119cdf0e10cSrcweir                 }
1120cdf0e10cSrcweir                 nPos = nLastPos;
1121cdf0e10cSrcweir                 if(!bFound)
1122cdf0e10cSrcweir                 {
1123cdf0e10cSrcweir                     pAutoCorrect->DeleteText(sEntry, eCurLang);
1124cdf0e10cSrcweir                 }
1125cdf0e10cSrcweir             }
1126cdf0e10cSrcweir             nDoubleStringArrayCount = pDoubleStringArray->Count();
1127cdf0e10cSrcweir             for(sal_uInt16 nDoubleStringArrayPos = 0; nDoubleStringArrayPos < nDoubleStringArrayCount; nDoubleStringArrayPos++ )
1128cdf0e10cSrcweir             {
1129cdf0e10cSrcweir                 //jetzt sollte es nur noch neue Eintraege geben
1130cdf0e10cSrcweir                 DoubleString* pDouble = pDoubleStringArray->GetObject( nDoubleStringArrayPos );
1131cdf0e10cSrcweir                 if(pDouble->pUserData == &bHasSelectionText)
1132cdf0e10cSrcweir                     pAutoCorrect->PutText( pDouble->sShort,
1133cdf0e10cSrcweir                                 *SfxObjectShell::Current(), eCurLang );
1134cdf0e10cSrcweir                 else
1135cdf0e10cSrcweir                 {
1136cdf0e10cSrcweir                     pAutoCorrect->PutText( pDouble->sShort, pDouble->sLong,
1137cdf0e10cSrcweir                                                             eCurLang);
1138cdf0e10cSrcweir                 }
1139cdf0e10cSrcweir             }
1140cdf0e10cSrcweir         }
1141cdf0e10cSrcweir         pDoubleStringArray->DeleteAndDestroy(0, pDoubleStringArray->Count());
1142cdf0e10cSrcweir         delete pDoubleStringArray;
1143cdf0e10cSrcweir         pDoubleStringArray = aDoubleStringTable.Prev();
1144cdf0e10cSrcweir     }
1145cdf0e10cSrcweir     aDoubleStringTable.Clear();
1146cdf0e10cSrcweir     // jetzt noch die aktuelle Selektion
1147cdf0e10cSrcweir     SvxAutocorrWordList* pWordList = pAutoCorrect->LoadAutocorrWordList(eLang);
1148cdf0e10cSrcweir     sal_uInt16 nWordListCount = pWordList->Count();
1149cdf0e10cSrcweir     sal_uInt16 nListBoxCount = (sal_uInt16)aReplaceTLB.GetEntryCount();
1150cdf0e10cSrcweir 
1151cdf0e10cSrcweir     aReplaceTLB.SetUpdateMode(sal_False);
1152cdf0e10cSrcweir     sal_uInt16 nListBoxPos = nListBoxCount;
1153cdf0e10cSrcweir     sal_uInt16 nLastListBoxPos = nListBoxPos;
1154cdf0e10cSrcweir     // 1. Durchlauf: Eintraege loeschen oder veraendern:
1155cdf0e10cSrcweir 
1156cdf0e10cSrcweir     sal_uInt16 i;
1157cdf0e10cSrcweir     for( i = nWordListCount; i; i-- )
1158cdf0e10cSrcweir     {
1159cdf0e10cSrcweir         SvxAutocorrWordPtr pWordPtr = pWordList->GetObject(i- 1);
1160cdf0e10cSrcweir         String sEntry(pWordPtr->GetShort());
1161cdf0e10cSrcweir         // formatierter Text steht nur im Writer
1162cdf0e10cSrcweir         sal_Bool bFound = !bSWriter && !pWordPtr->IsTextOnly();
1163cdf0e10cSrcweir         while(!bFound && nListBoxPos)
1164cdf0e10cSrcweir         {
1165cdf0e10cSrcweir             SvLBoxEntry*  pEntry = aReplaceTLB.GetEntry( nListBoxPos - 1);
1166cdf0e10cSrcweir             if( 0 == pCompareClass->compareString( sEntry,
1167cdf0e10cSrcweir                         aReplaceTLB.GetEntryText(pEntry, 0)))
1168cdf0e10cSrcweir             {
1169cdf0e10cSrcweir                 nLastListBoxPos = nListBoxPos - 1;
1170cdf0e10cSrcweir                 bFound = sal_True;
1171cdf0e10cSrcweir                 String sLong = aReplaceTLB.GetEntryText(pEntry, 1);
1172cdf0e10cSrcweir                 if( !(pWordPtr->IsTextOnly() == (0 == pEntry->GetUserData())
1173cdf0e10cSrcweir                     && 0 == pCompareCaseClass->compareString(
1174cdf0e10cSrcweir                         pWordPtr->GetLong(), sLong )))
1175cdf0e10cSrcweir                 {
1176cdf0e10cSrcweir                     pAutoCorrect->PutText(sEntry, sLong, eLang);
1177cdf0e10cSrcweir                 }
1178cdf0e10cSrcweir                 aReplaceTLB.GetModel()->Remove(pEntry);
1179cdf0e10cSrcweir                 break;
1180cdf0e10cSrcweir 
1181cdf0e10cSrcweir             }
1182cdf0e10cSrcweir             nListBoxPos --;
1183cdf0e10cSrcweir         }
1184cdf0e10cSrcweir         nListBoxPos = nLastListBoxPos;
1185cdf0e10cSrcweir         if(!bFound)
1186cdf0e10cSrcweir         {
1187cdf0e10cSrcweir             pAutoCorrect->DeleteText(sEntry, eLang);
1188cdf0e10cSrcweir         }
1189cdf0e10cSrcweir 
1190cdf0e10cSrcweir     }
1191cdf0e10cSrcweir     nListBoxCount = (sal_uInt16)aReplaceTLB.GetEntryCount();
1192cdf0e10cSrcweir     for(i = 0; i < nListBoxCount; i++ )
1193cdf0e10cSrcweir     {
1194cdf0e10cSrcweir         //jetzt sollte es nur noch neue Eintraege geben
1195cdf0e10cSrcweir         SvLBoxEntry*  pEntry = aReplaceTLB.GetEntry( i );
1196cdf0e10cSrcweir         String sShort = aReplaceTLB.GetEntryText(pEntry, 0);
1197cdf0e10cSrcweir         if(pEntry->GetUserData() == &bHasSelectionText)
1198cdf0e10cSrcweir             pAutoCorrect->PutText(sShort, *SfxObjectShell::Current(), eLang);
1199cdf0e10cSrcweir         else
1200cdf0e10cSrcweir         {
1201cdf0e10cSrcweir             String sLong = aReplaceTLB.GetEntryText(pEntry, 1);
1202cdf0e10cSrcweir             pAutoCorrect->PutText(sShort, sLong, eLang);
1203cdf0e10cSrcweir         }
1204cdf0e10cSrcweir     }
1205cdf0e10cSrcweir 
1206cdf0e10cSrcweir     return sal_False;
1207cdf0e10cSrcweir }
1208cdf0e10cSrcweir 
1209cdf0e10cSrcweir /* -----------------19.11.98 13:16-------------------
1210cdf0e10cSrcweir  *
1211cdf0e10cSrcweir  * --------------------------------------------------*/
1212cdf0e10cSrcweir void OfaAutocorrReplacePage::RefillReplaceBox(sal_Bool bFromReset,
1213cdf0e10cSrcweir                                         LanguageType eOldLanguage,
1214cdf0e10cSrcweir                                         LanguageType eNewLanguage)
1215cdf0e10cSrcweir {
1216cdf0e10cSrcweir     eLang = eNewLanguage;
1217cdf0e10cSrcweir     if(bFromReset)
1218cdf0e10cSrcweir         lcl_ClearTable(aDoubleStringTable);
1219cdf0e10cSrcweir     else
1220cdf0e10cSrcweir     {
1221cdf0e10cSrcweir         DoubleStringArray* pArray = 0;
1222cdf0e10cSrcweir         if(aDoubleStringTable.IsKeyValid(eOldLanguage))
1223cdf0e10cSrcweir         {
1224cdf0e10cSrcweir             pArray = aDoubleStringTable.Seek(sal_uLong(eOldLanguage));
1225cdf0e10cSrcweir             pArray->DeleteAndDestroy(0, pArray->Count());
1226cdf0e10cSrcweir         }
1227cdf0e10cSrcweir         else
1228cdf0e10cSrcweir         {
1229cdf0e10cSrcweir             pArray = new DoubleStringArray;
1230cdf0e10cSrcweir             aDoubleStringTable.Insert(sal_uLong(eOldLanguage), pArray);
1231cdf0e10cSrcweir         }
1232cdf0e10cSrcweir 
1233cdf0e10cSrcweir         sal_uInt16 nListBoxCount = (sal_uInt16)aReplaceTLB.GetEntryCount();
1234cdf0e10cSrcweir         sal_uInt16 i;
1235cdf0e10cSrcweir         for(i = 0; i < nListBoxCount; i++)
1236cdf0e10cSrcweir         {
1237cdf0e10cSrcweir             DoubleString* pDouble = new DoubleString();
1238cdf0e10cSrcweir             SvLBoxEntry*  pEntry = aReplaceTLB.GetEntry( i );
1239cdf0e10cSrcweir             pDouble->sShort = aReplaceTLB.GetEntryText(pEntry, 0);
1240cdf0e10cSrcweir             pDouble->sLong = aReplaceTLB.GetEntryText(pEntry, 1);
1241cdf0e10cSrcweir             pDouble->pUserData = pEntry->GetUserData();
1242cdf0e10cSrcweir             pArray->Insert(pDouble, i);
1243cdf0e10cSrcweir         }
1244cdf0e10cSrcweir     }
1245cdf0e10cSrcweir 
1246cdf0e10cSrcweir     aReplaceTLB.Clear();
1247cdf0e10cSrcweir     if(!bSWriter)
1248cdf0e10cSrcweir     {
1249cdf0e10cSrcweir         if(pFormatText)
1250cdf0e10cSrcweir             pFormatText->DeleteAndDestroy(0, pFormatText->Count());
1251cdf0e10cSrcweir         else
1252cdf0e10cSrcweir             pFormatText = new SvStringsISortDtor();
1253cdf0e10cSrcweir     }
1254cdf0e10cSrcweir 
1255cdf0e10cSrcweir     if(aDoubleStringTable.IsKeyValid(eLang))
1256cdf0e10cSrcweir     {
1257cdf0e10cSrcweir         DoubleStringArray* pArray = aDoubleStringTable.Seek(sal_uLong(eNewLanguage));
1258cdf0e10cSrcweir         for(sal_uInt16 i = 0; i < pArray->Count(); i++)
1259cdf0e10cSrcweir         {
1260cdf0e10cSrcweir             DoubleString* pDouble = pArray->GetObject(i);
1261cdf0e10cSrcweir             sal_Bool bTextOnly = 0 == pDouble->pUserData;
1262cdf0e10cSrcweir             // formatierter Text wird nur im Writer angeboten
1263cdf0e10cSrcweir             if(bSWriter || bTextOnly)
1264cdf0e10cSrcweir             {
1265cdf0e10cSrcweir                 String sEntry(pDouble->sShort);
1266cdf0e10cSrcweir                 sEntry += '\t';
1267cdf0e10cSrcweir                 sEntry += pDouble->sLong;
1268cdf0e10cSrcweir                 SvLBoxEntry* pEntry = aReplaceTLB.InsertEntry(sEntry);
1269cdf0e10cSrcweir                 aTextOnlyCB.Check(bTextOnly);
1270cdf0e10cSrcweir                 if(!bTextOnly)
1271cdf0e10cSrcweir                     pEntry->SetUserData(pDouble->pUserData); // Das heisst: mit Formatinfo oder sogar mit Selektionstext
1272cdf0e10cSrcweir             }
1273cdf0e10cSrcweir             else
1274cdf0e10cSrcweir             {
1275cdf0e10cSrcweir                 pFormatText->Insert(new String(pDouble->sShort));
1276cdf0e10cSrcweir             }
1277cdf0e10cSrcweir         }
1278cdf0e10cSrcweir     }
1279cdf0e10cSrcweir     else
1280cdf0e10cSrcweir     {
1281cdf0e10cSrcweir         SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
1282cdf0e10cSrcweir         SvxAutocorrWordList* pWordList = pAutoCorrect->LoadAutocorrWordList(eLang);
1283cdf0e10cSrcweir 
1284cdf0e10cSrcweir         for(sal_uInt16 i = 0; i < pWordList->Count(); i++)
1285cdf0e10cSrcweir         {
1286cdf0e10cSrcweir             SvxAutocorrWordPtr pWordPtr = pWordList->GetObject(i);
1287cdf0e10cSrcweir             sal_Bool bTextOnly = pWordPtr->IsTextOnly();
1288cdf0e10cSrcweir             // formatierter Text wird nur im Writer angeboten
1289cdf0e10cSrcweir             if(bSWriter || bTextOnly)
1290cdf0e10cSrcweir             {
1291cdf0e10cSrcweir                 String sEntry(pWordPtr->GetShort());
1292cdf0e10cSrcweir                 sEntry += '\t';
1293cdf0e10cSrcweir                 sEntry += pWordPtr->GetLong();
1294cdf0e10cSrcweir                 SvLBoxEntry* pEntry = aReplaceTLB.InsertEntry(sEntry);
1295cdf0e10cSrcweir                 aTextOnlyCB.Check(pWordPtr->IsTextOnly());
1296cdf0e10cSrcweir                 if(!bTextOnly)
1297cdf0e10cSrcweir                     pEntry->SetUserData(&aTextOnlyCB); // Das heisst: mit Formatinfo
1298cdf0e10cSrcweir             }
1299cdf0e10cSrcweir             else
1300cdf0e10cSrcweir             {
1301cdf0e10cSrcweir                 pFormatText->Insert(new String(pWordPtr->GetShort()));
1302cdf0e10cSrcweir             }
1303cdf0e10cSrcweir         }
1304cdf0e10cSrcweir         aNewReplacePB.Enable(sal_False);
1305cdf0e10cSrcweir         aDeleteReplacePB.Enable(sal_False);
1306cdf0e10cSrcweir 
1307cdf0e10cSrcweir     }
1308cdf0e10cSrcweir 
1309cdf0e10cSrcweir     SfxViewShell* pViewShell = SfxViewShell::Current();
1310cdf0e10cSrcweir     if( pViewShell && pViewShell->HasSelection( sal_True ) )
1311cdf0e10cSrcweir     {
1312cdf0e10cSrcweir         bHasSelectionText = sal_True;
1313cdf0e10cSrcweir         const String sSelection( pViewShell->GetSelectionText() );
1314cdf0e10cSrcweir         aReplaceED.SetText( sSelection );
1315cdf0e10cSrcweir         aTextOnlyCB.Check( !bSWriter );
1316cdf0e10cSrcweir         aTextOnlyCB.Enable( bSWriter && sSelection.Len() );
1317cdf0e10cSrcweir     }
1318cdf0e10cSrcweir     else
1319cdf0e10cSrcweir         aTextOnlyCB.Enable( sal_False );
1320cdf0e10cSrcweir }
1321cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1322cdf0e10cSrcweir 
1323cdf0e10cSrcweir --------------------------------------------------*/
1324cdf0e10cSrcweir 
1325cdf0e10cSrcweir void OfaAutocorrReplacePage::Reset( const SfxItemSet& )
1326cdf0e10cSrcweir {
1327cdf0e10cSrcweir     RefillReplaceBox(sal_True, eLang, eLang);
1328cdf0e10cSrcweir     aShortED.GrabFocus();
1329cdf0e10cSrcweir }
1330cdf0e10cSrcweir 
1331cdf0e10cSrcweir /* -----------------23.11.98 10:33-------------------
1332cdf0e10cSrcweir  *
1333cdf0e10cSrcweir  * --------------------------------------------------*/
1334cdf0e10cSrcweir void OfaAutocorrReplacePage::SetLanguage(LanguageType eSet)
1335cdf0e10cSrcweir {
1336cdf0e10cSrcweir     //save old settings an refill
1337cdf0e10cSrcweir     if(eSet != eLang)
1338cdf0e10cSrcweir     {
1339cdf0e10cSrcweir         RefillReplaceBox(sal_False, eLang, eSet);
1340cdf0e10cSrcweir         eLastDialogLanguage = eSet;
1341cdf0e10cSrcweir         delete pCompareClass;
1342cdf0e10cSrcweir         delete pCompareCaseClass;
1343cdf0e10cSrcweir         delete pCharClass;
1344cdf0e10cSrcweir 
1345cdf0e10cSrcweir         ::com::sun::star::lang::Locale aLcl( SvxCreateLocale(eLastDialogLanguage ));
1346cdf0e10cSrcweir         pCompareClass = new CollatorWrapper( GetProcessFact() );
1347cdf0e10cSrcweir         pCompareCaseClass = new CollatorWrapper( GetProcessFact() );
1348cdf0e10cSrcweir         pCompareClass->loadDefaultCollator( aLcl, ::com::sun::star::i18n::
1349cdf0e10cSrcweir                                 CollatorOptions::CollatorOptions_IGNORE_CASE );
1350cdf0e10cSrcweir         pCompareCaseClass->loadDefaultCollator( aLcl, 0 );
1351cdf0e10cSrcweir         pCharClass = new CharClass( aLcl );
1352cdf0e10cSrcweir         ModifyHdl(&aShortED);
1353cdf0e10cSrcweir     }
1354cdf0e10cSrcweir }
1355cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1356cdf0e10cSrcweir 
1357cdf0e10cSrcweir --------------------------------------------------*/
1358cdf0e10cSrcweir 
1359cdf0e10cSrcweir 
1360cdf0e10cSrcweir IMPL_LINK(OfaAutocorrReplacePage, SelectHdl, SvTabListBox*, pBox)
1361cdf0e10cSrcweir {
1362cdf0e10cSrcweir     if(!bFirstSelect || !bHasSelectionText)
1363cdf0e10cSrcweir     {
1364cdf0e10cSrcweir         SvLBoxEntry* pEntry = pBox->FirstSelected();
1365cdf0e10cSrcweir         String sTmpShort(pBox->GetEntryText(pEntry, 0));
1366cdf0e10cSrcweir         // wird der Text ueber den ModifyHdl gesetzt, dann steht der Cursor sonst immer am Wortanfang,
1367cdf0e10cSrcweir         // obwohl man gerade hier editiert
1368cdf0e10cSrcweir         sal_Bool bSameContent = 0 == pCompareClass->compareString(
1369cdf0e10cSrcweir                 sTmpShort, aShortED.GetText() );
1370cdf0e10cSrcweir         Selection aSel = aShortED.GetSelection();
1371cdf0e10cSrcweir         if(aShortED.GetText() != sTmpShort)
1372cdf0e10cSrcweir         {
1373cdf0e10cSrcweir             aShortED.SetText(sTmpShort);
1374cdf0e10cSrcweir             //war es nur eine andere Schreibweise, dann muss die Selektion auch wieder gesetzt werden
1375cdf0e10cSrcweir             if(bSameContent)
1376cdf0e10cSrcweir                 aShortED.SetSelection(aSel);
1377cdf0e10cSrcweir         }
1378cdf0e10cSrcweir         aReplaceED.SetText(pBox->GetEntryText(pEntry, 1));
1379cdf0e10cSrcweir         // mit UserData gibt es eine Formatinfo
1380cdf0e10cSrcweir         aTextOnlyCB.Check(0 == pEntry->GetUserData());
1381cdf0e10cSrcweir     }
1382cdf0e10cSrcweir     else
1383cdf0e10cSrcweir         bFirstSelect = sal_False;
1384cdf0e10cSrcweir 
1385cdf0e10cSrcweir     aNewReplacePB.Enable(sal_False);
1386cdf0e10cSrcweir     aDeleteReplacePB.Enable();
1387cdf0e10cSrcweir     return 0;
1388cdf0e10cSrcweir };
1389cdf0e10cSrcweir 
1390cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1391cdf0e10cSrcweir 
1392cdf0e10cSrcweir --------------------------------------------------*/
1393cdf0e10cSrcweir 
1394cdf0e10cSrcweir 
1395cdf0e10cSrcweir IMPL_LINK(OfaAutocorrReplacePage, NewDelHdl, PushButton*, pBtn)
1396cdf0e10cSrcweir {
1397cdf0e10cSrcweir     SvLBoxEntry* _pEntry = aReplaceTLB.FirstSelected();
1398cdf0e10cSrcweir     if(pBtn == &aDeleteReplacePB)
1399cdf0e10cSrcweir     {
1400cdf0e10cSrcweir         DBG_ASSERT(_pEntry, "keine Eintrag selektiert");
1401cdf0e10cSrcweir         if(_pEntry)
1402cdf0e10cSrcweir         {
1403cdf0e10cSrcweir             aReplaceTLB.GetModel()->Remove(_pEntry);
1404cdf0e10cSrcweir             ModifyHdl(&aShortED);
1405cdf0e10cSrcweir             return 0;
1406cdf0e10cSrcweir         }
1407cdf0e10cSrcweir     }
1408cdf0e10cSrcweir     if(pBtn == &aNewReplacePB || aNewReplacePB.IsEnabled())
1409cdf0e10cSrcweir     {
1410cdf0e10cSrcweir         SvLBoxEntry* _pNewEntry = aReplaceTLB.FirstSelected();
1411cdf0e10cSrcweir         String sEntry(aShortED.GetText());
1412cdf0e10cSrcweir         if(sEntry.Len() && ( aReplaceED.GetText().Len() ||
1413cdf0e10cSrcweir                 ( bHasSelectionText && bSWriter ) ))
1414cdf0e10cSrcweir         {
1415cdf0e10cSrcweir             aReplaceTLB.SetUpdateMode(sal_False);
1416cdf0e10cSrcweir             sal_uInt16 nPos = USHRT_MAX;
1417cdf0e10cSrcweir             sEntry += '\t';
1418cdf0e10cSrcweir             sEntry += aReplaceED.GetText();
1419cdf0e10cSrcweir             if(_pNewEntry)
1420cdf0e10cSrcweir             {
1421cdf0e10cSrcweir                 nPos = (sal_uInt16)aReplaceTLB.GetModel()->GetAbsPos(_pNewEntry);
1422cdf0e10cSrcweir                 aReplaceTLB.GetModel()->Remove(_pNewEntry);
1423cdf0e10cSrcweir             }
1424cdf0e10cSrcweir             else
1425cdf0e10cSrcweir             {
1426cdf0e10cSrcweir                 sal_uInt16 j;
1427cdf0e10cSrcweir                 for( j = 0; j < aReplaceTLB.GetEntryCount(); j++ )
1428cdf0e10cSrcweir                 {
1429cdf0e10cSrcweir                     SvLBoxEntry* pReplaceEntry = aReplaceTLB.GetEntry(j);
1430cdf0e10cSrcweir                     if( 0 >=  pCompareClass->compareString(sEntry,
1431cdf0e10cSrcweir                                     aReplaceTLB.GetEntryText(pReplaceEntry, 0) ) )
1432cdf0e10cSrcweir                         break;
1433cdf0e10cSrcweir                 }
1434cdf0e10cSrcweir                 nPos = j;
1435cdf0e10cSrcweir             }
1436cdf0e10cSrcweir             SvLBoxEntry* pInsEntry =
1437cdf0e10cSrcweir                 aReplaceTLB.InsertEntry(
1438cdf0e10cSrcweir                     sEntry, static_cast< SvLBoxEntry * >(NULL), false,
1439cdf0e10cSrcweir                     nPos == USHRT_MAX ? LIST_APPEND : nPos);
1440cdf0e10cSrcweir             if( !bReplaceEditChanged && !aTextOnlyCB.IsChecked())
1441cdf0e10cSrcweir                 pInsEntry->SetUserData(&bHasSelectionText); // neuer formatierter Text
1442cdf0e10cSrcweir 
1443cdf0e10cSrcweir             aReplaceTLB.MakeVisible( pInsEntry );
1444cdf0e10cSrcweir             aReplaceTLB.SetUpdateMode(sal_True);
1445cdf0e10cSrcweir             // falls der Request aus dem ReplaceEdit kam, dann Focus in das ShortEdit setzen
1446cdf0e10cSrcweir             if(aReplaceED.HasFocus())
1447cdf0e10cSrcweir                 aShortED.GrabFocus();
1448cdf0e10cSrcweir 
1449cdf0e10cSrcweir         }
1450cdf0e10cSrcweir     }
1451cdf0e10cSrcweir     else
1452cdf0e10cSrcweir     {
1453cdf0e10cSrcweir         // das kann nur ein Enter in einem der beiden Edit-Felder sein und das
1454cdf0e10cSrcweir         // bedeutet EndDialog() - muss im KeyInput ausgewertet werden
1455cdf0e10cSrcweir         return 0;
1456cdf0e10cSrcweir     }
1457cdf0e10cSrcweir     ModifyHdl(&aShortED);
1458cdf0e10cSrcweir     return 1;
1459cdf0e10cSrcweir }
1460cdf0e10cSrcweir 
1461cdf0e10cSrcweir /*-----------------17.10.96 07.49-------------------
1462cdf0e10cSrcweir 
1463cdf0e10cSrcweir --------------------------------------------------*/
1464cdf0e10cSrcweir IMPL_LINK(OfaAutocorrReplacePage, ModifyHdl, Edit*, pEdt)
1465cdf0e10cSrcweir {
1466cdf0e10cSrcweir     SvLBoxEntry* pFirstSel = aReplaceTLB.FirstSelected();
1467cdf0e10cSrcweir     sal_Bool bShort = pEdt == &aShortED;
1468cdf0e10cSrcweir     const String rEntry = pEdt->GetText();
1469cdf0e10cSrcweir     const String rRepString = aReplaceED.GetText();
1470cdf0e10cSrcweir     String aWordStr( pCharClass->lower( rEntry ));
1471cdf0e10cSrcweir 
1472cdf0e10cSrcweir     if(bShort)
1473cdf0e10cSrcweir     {
1474cdf0e10cSrcweir         if(rEntry.Len())
1475cdf0e10cSrcweir         {
1476cdf0e10cSrcweir             sal_Bool bFound = sal_False;
1477cdf0e10cSrcweir             sal_Bool bTmpSelEntry=sal_False;
1478cdf0e10cSrcweir 
1479cdf0e10cSrcweir             for(sal_uInt16 i = 0; i < aReplaceTLB.GetEntryCount(); i++)
1480cdf0e10cSrcweir             {
1481cdf0e10cSrcweir                 SvLBoxEntry*  pEntry = aReplaceTLB.GetEntry( i );
1482cdf0e10cSrcweir                 String aTestStr=aReplaceTLB.GetEntryText(pEntry, 0);
1483cdf0e10cSrcweir                 if( 0 == pCompareClass->compareString(rEntry, aTestStr ))
1484cdf0e10cSrcweir                 {
1485cdf0e10cSrcweir                     if(rRepString.Len())
1486cdf0e10cSrcweir                         bFirstSelect = sal_True;
1487cdf0e10cSrcweir                     aReplaceTLB.SetCurEntry(pEntry);
1488cdf0e10cSrcweir                     pFirstSel = pEntry;
1489cdf0e10cSrcweir                     aNewReplacePB.SetText(sModify);
1490cdf0e10cSrcweir                     bFound= sal_True;
1491cdf0e10cSrcweir                     break;
1492cdf0e10cSrcweir                 }
1493cdf0e10cSrcweir                 else
1494cdf0e10cSrcweir                 {
1495cdf0e10cSrcweir                     pCharClass->toLower( aTestStr );
1496cdf0e10cSrcweir                     if(aTestStr.Search(aWordStr)==0 && !bTmpSelEntry)
1497cdf0e10cSrcweir                     {
1498cdf0e10cSrcweir                         aReplaceTLB.MakeVisible(pEntry);
1499cdf0e10cSrcweir                         bTmpSelEntry=sal_True;
1500cdf0e10cSrcweir                     }
1501cdf0e10cSrcweir                 }
1502cdf0e10cSrcweir             }
1503cdf0e10cSrcweir             if(!bFound)
1504cdf0e10cSrcweir             {
1505cdf0e10cSrcweir                 aReplaceTLB.SelectAll(sal_False);
1506cdf0e10cSrcweir                 pFirstSel = 0;
1507cdf0e10cSrcweir                 aNewReplacePB.SetText(sNew);
1508cdf0e10cSrcweir                 if(bReplaceEditChanged)
1509cdf0e10cSrcweir                     aTextOnlyCB.Enable(sal_False);
1510cdf0e10cSrcweir             }
1511cdf0e10cSrcweir             aDeleteReplacePB.Enable(bFound);
1512cdf0e10cSrcweir         }
1513cdf0e10cSrcweir         else if(aReplaceTLB.GetEntryCount()>0)
1514cdf0e10cSrcweir         {
1515cdf0e10cSrcweir             SvLBoxEntry*  pEntry = aReplaceTLB.GetEntry( 0 );
1516cdf0e10cSrcweir             aReplaceTLB.MakeVisible(pEntry);
1517cdf0e10cSrcweir         }
1518cdf0e10cSrcweir 
1519cdf0e10cSrcweir     }
1520cdf0e10cSrcweir     else if(!bShort)
1521cdf0e10cSrcweir     {
1522cdf0e10cSrcweir         bReplaceEditChanged = sal_True;
1523cdf0e10cSrcweir         if(pFirstSel)
1524cdf0e10cSrcweir         {
1525cdf0e10cSrcweir             aNewReplacePB.SetText(sModify);
1526cdf0e10cSrcweir         }
1527cdf0e10cSrcweir     }
1528cdf0e10cSrcweir 
1529cdf0e10cSrcweir     const String& rShortTxt = aShortED.GetText();
1530cdf0e10cSrcweir     sal_Bool bEnableNew = rShortTxt.Len() &&
1531cdf0e10cSrcweir                         ( rRepString.Len() ||
1532cdf0e10cSrcweir                                 ( bHasSelectionText && bSWriter )) &&
1533cdf0e10cSrcweir                         ( !pFirstSel || rRepString !=
1534cdf0e10cSrcweir                                 aReplaceTLB.GetEntryText( pFirstSel, 1 ) );
1535cdf0e10cSrcweir     if(bEnableNew && pFormatText)
1536cdf0e10cSrcweir     {
1537cdf0e10cSrcweir         for(sal_uInt16 i = 0; i < pFormatText->Count(); i++)
1538cdf0e10cSrcweir             if(*pFormatText->GetObject(i) == rShortTxt)
1539cdf0e10cSrcweir             {
1540cdf0e10cSrcweir                 bEnableNew = sal_False;
1541cdf0e10cSrcweir                 break;
1542cdf0e10cSrcweir             }
1543cdf0e10cSrcweir     }
1544cdf0e10cSrcweir     aNewReplacePB.Enable(bEnableNew);
1545cdf0e10cSrcweir 
1546cdf0e10cSrcweir     return 0;
1547cdf0e10cSrcweir }
1548cdf0e10cSrcweir 
1549cdf0e10cSrcweir /* -----------------20.11.98 13:48-------------------
1550cdf0e10cSrcweir  *
1551cdf0e10cSrcweir  * --------------------------------------------------*/
1552cdf0e10cSrcweir 
1553cdf0e10cSrcweir struct StringsArrays
1554cdf0e10cSrcweir {
1555cdf0e10cSrcweir 
1556cdf0e10cSrcweir     SvStringsDtor aAbbrevStrings;
1557cdf0e10cSrcweir     SvStringsDtor aDoubleCapsStrings;
1558cdf0e10cSrcweir 
1559cdf0e10cSrcweir     StringsArrays() :
1560cdf0e10cSrcweir         aAbbrevStrings(5,5), aDoubleCapsStrings(5,5) {}
1561cdf0e10cSrcweir };
1562cdf0e10cSrcweir typedef StringsArrays* StringsArraysPtr;
1563cdf0e10cSrcweir /* -----------------19.11.98 16:07-------------------
1564cdf0e10cSrcweir  *
1565cdf0e10cSrcweir  * --------------------------------------------------*/
1566cdf0e10cSrcweir sal_Bool lcl_FindInArray(SvStringsDtor& rStrings, const String& rString)
1567cdf0e10cSrcweir {
1568cdf0e10cSrcweir     for(sal_uInt16 i = 0; i < rStrings.Count(); i++)
1569cdf0e10cSrcweir         if(rString == *rStrings.GetObject(i))
1570cdf0e10cSrcweir             return sal_True;
1571cdf0e10cSrcweir     return sal_False;
1572cdf0e10cSrcweir }
1573cdf0e10cSrcweir 
1574cdf0e10cSrcweir void lcl_ClearTable(StringsTable& rTable)
1575cdf0e10cSrcweir {
1576cdf0e10cSrcweir     StringsArraysPtr pArrays = rTable.Last();
1577cdf0e10cSrcweir     while(pArrays)
1578cdf0e10cSrcweir     {
1579cdf0e10cSrcweir         delete pArrays;
1580cdf0e10cSrcweir         pArrays = rTable.Prev();
1581cdf0e10cSrcweir     }
1582cdf0e10cSrcweir     rTable.Clear();
1583cdf0e10cSrcweir }
1584cdf0e10cSrcweir 
1585cdf0e10cSrcweir /*-----------------14.10.96 15.57-------------------
1586cdf0e10cSrcweir 
1587cdf0e10cSrcweir --------------------------------------------------*/
1588cdf0e10cSrcweir 
1589cdf0e10cSrcweir OfaAutocorrExceptPage::OfaAutocorrExceptPage( Window* pParent,
1590cdf0e10cSrcweir                                                 const SfxItemSet& rSet ) :
1591cdf0e10cSrcweir     SfxTabPage(pParent, CUI_RES( RID_OFAPAGE_AUTOCORR_EXCEPT ), rSet),
1592cdf0e10cSrcweir     aAbbrevFL       (this, CUI_RES(FL_ABBREV         )),
1593cdf0e10cSrcweir     aAbbrevED       (this, CUI_RES(ED_ABBREV         )),
1594cdf0e10cSrcweir     aAbbrevLB       (this, CUI_RES(LB_ABBREV         )),
1595cdf0e10cSrcweir     aNewAbbrevPB    (this, CUI_RES(PB_NEWABBREV  )),
1596cdf0e10cSrcweir     aDelAbbrevPB    (this, CUI_RES(PB_DELABBREV  )),
1597cdf0e10cSrcweir     aAutoAbbrevCB   (this, CUI_RES(CB_AUTOABBREV     )),
1598cdf0e10cSrcweir     aDoubleCapsFL   (this, CUI_RES(FL_DOUBLECAPS     )),
1599cdf0e10cSrcweir     aDoubleCapsED   (this, CUI_RES(ED_DOUBLE_CAPS    )),
1600cdf0e10cSrcweir     aDoubleCapsLB   (this, CUI_RES(LB_DOUBLE_CAPS    )),
1601cdf0e10cSrcweir     aNewDoublePB    (this, CUI_RES(PB_NEWDOUBLECAPS)),
1602cdf0e10cSrcweir     aDelDoublePB    (this, CUI_RES(PB_DELDOUBLECAPS)),
1603cdf0e10cSrcweir     aAutoCapsCB     (this, CUI_RES(CB_AUTOCAPS   )),
1604cdf0e10cSrcweir     eLang(eLastDialogLanguage)
1605cdf0e10cSrcweir {
1606cdf0e10cSrcweir     aNewAbbrevPB.SetAccessibleName(String(CUI_RES(STR_PB_NEWABBREV) ) );
1607cdf0e10cSrcweir     aDelAbbrevPB.SetAccessibleName(String(CUI_RES(STR_PB_DELABBREV) ) );
1608cdf0e10cSrcweir     aNewDoublePB.SetAccessibleName(String(CUI_RES(STR_PB_NEWDOUBLECAPS) ) );
1609cdf0e10cSrcweir     aDelDoublePB.SetAccessibleName(String(CUI_RES(STR_PB_DELDOUBLECAPS) ) );
1610cdf0e10cSrcweir 
1611cdf0e10cSrcweir     FreeResource();
1612cdf0e10cSrcweir 
1613cdf0e10cSrcweir     ::com::sun::star::lang::Locale aLcl( SvxCreateLocale(eLastDialogLanguage ));
1614cdf0e10cSrcweir     pCompareClass = new CollatorWrapper( GetProcessFact() );
1615cdf0e10cSrcweir     pCompareClass->loadDefaultCollator( aLcl, ::com::sun::star::i18n::
1616cdf0e10cSrcweir                             CollatorOptions::CollatorOptions_IGNORE_CASE );
1617cdf0e10cSrcweir 
1618cdf0e10cSrcweir     aNewAbbrevPB.SetClickHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
1619cdf0e10cSrcweir     aDelAbbrevPB.SetClickHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
1620cdf0e10cSrcweir     aNewDoublePB.SetClickHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
1621cdf0e10cSrcweir     aDelDoublePB.SetClickHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
1622cdf0e10cSrcweir 
1623cdf0e10cSrcweir     aAbbrevLB.SetSelectHdl(LINK(this, OfaAutocorrExceptPage, SelectHdl));
1624cdf0e10cSrcweir     aDoubleCapsLB.SetSelectHdl(LINK(this, OfaAutocorrExceptPage, SelectHdl));
1625cdf0e10cSrcweir     aAbbrevED.SetModifyHdl(LINK(this, OfaAutocorrExceptPage, ModifyHdl));
1626cdf0e10cSrcweir     aDoubleCapsED.SetModifyHdl(LINK(this, OfaAutocorrExceptPage, ModifyHdl));
1627cdf0e10cSrcweir 
1628cdf0e10cSrcweir     aAbbrevED.SetActionHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
1629cdf0e10cSrcweir     aDoubleCapsED.SetActionHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
1630cdf0e10cSrcweir 
1631cdf0e10cSrcweir     aNewAbbrevPB.SetAccessibleRelationMemberOf(&aAbbrevFL);
1632cdf0e10cSrcweir     aDelAbbrevPB.SetAccessibleRelationMemberOf(&aAbbrevFL);
1633cdf0e10cSrcweir     aNewDoublePB.SetAccessibleRelationMemberOf(&aDoubleCapsFL);
1634cdf0e10cSrcweir     aDelDoublePB.SetAccessibleRelationMemberOf(&aDoubleCapsFL);
1635cdf0e10cSrcweir }
1636cdf0e10cSrcweir 
1637cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1638cdf0e10cSrcweir 
1639cdf0e10cSrcweir --------------------------------------------------*/
1640cdf0e10cSrcweir 
1641cdf0e10cSrcweir OfaAutocorrExceptPage::~OfaAutocorrExceptPage()
1642cdf0e10cSrcweir {
1643cdf0e10cSrcweir     lcl_ClearTable(aStringsTable);
1644cdf0e10cSrcweir     delete pCompareClass;
1645cdf0e10cSrcweir }
1646cdf0e10cSrcweir 
1647cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1648cdf0e10cSrcweir 
1649cdf0e10cSrcweir --------------------------------------------------*/
1650cdf0e10cSrcweir 
1651cdf0e10cSrcweir SfxTabPage* OfaAutocorrExceptPage::Create( Window* pParent,
1652cdf0e10cSrcweir                                 const SfxItemSet& rSet)
1653cdf0e10cSrcweir {
1654cdf0e10cSrcweir     return new OfaAutocorrExceptPage(pParent, rSet);
1655cdf0e10cSrcweir }
1656cdf0e10cSrcweir /* -----------------20.11.98 13:26-------------------
1657cdf0e10cSrcweir  *
1658cdf0e10cSrcweir  * --------------------------------------------------*/
1659cdf0e10cSrcweir void    OfaAutocorrExceptPage::ActivatePage( const SfxItemSet& )
1660cdf0e10cSrcweir {
1661cdf0e10cSrcweir     if(eLang != eLastDialogLanguage)
1662cdf0e10cSrcweir         SetLanguage(eLastDialogLanguage);
1663cdf0e10cSrcweir     ((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage(sal_True);
1664cdf0e10cSrcweir }
1665cdf0e10cSrcweir /* -----------------20.11.98 13:26-------------------
1666cdf0e10cSrcweir  *
1667cdf0e10cSrcweir  * --------------------------------------------------*/
1668cdf0e10cSrcweir int     OfaAutocorrExceptPage::DeactivatePage( SfxItemSet* )
1669cdf0e10cSrcweir {
1670cdf0e10cSrcweir     return LEAVE_PAGE;
1671cdf0e10cSrcweir }
1672cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1673cdf0e10cSrcweir 
1674cdf0e10cSrcweir --------------------------------------------------*/
1675cdf0e10cSrcweir 
1676cdf0e10cSrcweir sal_Bool OfaAutocorrExceptPage::FillItemSet( SfxItemSet&  )
1677cdf0e10cSrcweir {
1678cdf0e10cSrcweir     SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
1679cdf0e10cSrcweir     StringsArraysPtr pArrays = aStringsTable.Last();
1680cdf0e10cSrcweir     while(pArrays)
1681cdf0e10cSrcweir     {
1682cdf0e10cSrcweir         LanguageType eCurLang = (LanguageType)aStringsTable.GetCurKey();
1683cdf0e10cSrcweir         if(eCurLang != eLang) // die aktuelle Sprache wird weiter hinten behandelt
1684cdf0e10cSrcweir         {
1685cdf0e10cSrcweir             SvStringsISortDtor* pWrdList = pAutoCorrect->LoadWrdSttExceptList(eCurLang);
1686cdf0e10cSrcweir 
1687cdf0e10cSrcweir             if(pWrdList)
1688cdf0e10cSrcweir             {
1689cdf0e10cSrcweir                 sal_uInt16 nCount = pWrdList->Count();
1690cdf0e10cSrcweir                 sal_uInt16 i;
1691cdf0e10cSrcweir                 for( i = nCount; i; )
1692cdf0e10cSrcweir                 {
1693cdf0e10cSrcweir                     String* pString = pWrdList->GetObject( --i );
1694cdf0e10cSrcweir                     //Eintrag finden u. gfs entfernen
1695cdf0e10cSrcweir                     if( !lcl_FindInArray(pArrays->aDoubleCapsStrings, *pString))
1696cdf0e10cSrcweir                       pWrdList->DeleteAndDestroy( i );
1697cdf0e10cSrcweir                 }
1698cdf0e10cSrcweir                 nCount = pArrays->aDoubleCapsStrings.Count();
1699cdf0e10cSrcweir                 for( i = 0; i < nCount; ++i )
1700cdf0e10cSrcweir                 {
1701cdf0e10cSrcweir                     String* pEntry = new String( *pArrays->aDoubleCapsStrings.GetObject( i ) );
1702cdf0e10cSrcweir                     if( !pWrdList->Insert( pEntry ))
1703cdf0e10cSrcweir                         delete pEntry;
1704cdf0e10cSrcweir                 }
1705cdf0e10cSrcweir                 pAutoCorrect->SaveWrdSttExceptList(eCurLang);
1706cdf0e10cSrcweir             }
1707cdf0e10cSrcweir 
1708cdf0e10cSrcweir             SvStringsISortDtor* pCplList = pAutoCorrect->LoadCplSttExceptList(eCurLang);
1709cdf0e10cSrcweir 
1710cdf0e10cSrcweir             if(pCplList)
1711cdf0e10cSrcweir             {
1712cdf0e10cSrcweir                 sal_uInt16 nCount = pCplList->Count();
1713cdf0e10cSrcweir                 sal_uInt16 i;
1714cdf0e10cSrcweir                 for( i = nCount; i; )
1715cdf0e10cSrcweir                 {
1716cdf0e10cSrcweir                     String* pString = pCplList->GetObject( --i );
1717cdf0e10cSrcweir                     if( !lcl_FindInArray(pArrays->aAbbrevStrings, *pString))
1718cdf0e10cSrcweir                         pCplList->DeleteAndDestroy( i );
1719cdf0e10cSrcweir                 }
1720cdf0e10cSrcweir                 nCount = pArrays->aAbbrevStrings.Count();
1721cdf0e10cSrcweir                 for( i = 0; i < nCount; ++i )
1722cdf0e10cSrcweir                 {
1723cdf0e10cSrcweir                     String* pEntry = new String( *pArrays->aAbbrevStrings.GetObject(i) );
1724cdf0e10cSrcweir                     if( !pCplList->Insert( pEntry ))
1725cdf0e10cSrcweir                         delete pEntry;
1726cdf0e10cSrcweir                 }
1727cdf0e10cSrcweir                 pAutoCorrect->SaveCplSttExceptList(eCurLang);
1728cdf0e10cSrcweir             }
1729cdf0e10cSrcweir         }
1730cdf0e10cSrcweir         pArrays = aStringsTable.Prev();
1731cdf0e10cSrcweir     }
1732cdf0e10cSrcweir     aStringsTable.Clear();
1733cdf0e10cSrcweir 
1734cdf0e10cSrcweir     SvStringsISortDtor* pWrdList = pAutoCorrect->LoadWrdSttExceptList(eLang);
1735cdf0e10cSrcweir 
1736cdf0e10cSrcweir     if(pWrdList)
1737cdf0e10cSrcweir     {
1738cdf0e10cSrcweir         sal_uInt16 nCount = pWrdList->Count();
1739cdf0e10cSrcweir         sal_uInt16 i;
1740cdf0e10cSrcweir         for( i = nCount; i; )
1741cdf0e10cSrcweir         {
1742cdf0e10cSrcweir             String* pString = pWrdList->GetObject( --i );
1743cdf0e10cSrcweir             if( USHRT_MAX == aDoubleCapsLB.GetEntryPos(*pString) )
1744cdf0e10cSrcweir                 pWrdList->DeleteAndDestroy( i );
1745cdf0e10cSrcweir         }
1746cdf0e10cSrcweir         nCount = aDoubleCapsLB.GetEntryCount();
1747cdf0e10cSrcweir         for( i = 0; i < nCount; ++i )
1748cdf0e10cSrcweir         {
1749cdf0e10cSrcweir             String* pEntry = new String( aDoubleCapsLB.GetEntry( i ) );
1750cdf0e10cSrcweir             if( !pWrdList->Insert( pEntry ))
1751cdf0e10cSrcweir                 delete pEntry;
1752cdf0e10cSrcweir         }
1753cdf0e10cSrcweir         pAutoCorrect->SaveWrdSttExceptList(eLang);
1754cdf0e10cSrcweir     }
1755cdf0e10cSrcweir 
1756cdf0e10cSrcweir     SvStringsISortDtor* pCplList = pAutoCorrect->LoadCplSttExceptList(eLang);
1757cdf0e10cSrcweir 
1758cdf0e10cSrcweir     if(pCplList)
1759cdf0e10cSrcweir     {
1760cdf0e10cSrcweir         sal_uInt16 nCount = pCplList->Count();
1761cdf0e10cSrcweir         sal_uInt16 i;
1762cdf0e10cSrcweir         for( i = nCount; i; )
1763cdf0e10cSrcweir         {
1764cdf0e10cSrcweir             String* pString = pCplList->GetObject( --i );
1765cdf0e10cSrcweir             if( USHRT_MAX == aAbbrevLB.GetEntryPos(*pString) )
1766cdf0e10cSrcweir                 pCplList->DeleteAndDestroy( i );
1767cdf0e10cSrcweir         }
1768cdf0e10cSrcweir         nCount = aAbbrevLB.GetEntryCount();
1769cdf0e10cSrcweir         for( i = 0; i < nCount; ++i )
1770cdf0e10cSrcweir         {
1771cdf0e10cSrcweir             String* pEntry = new String( aAbbrevLB.GetEntry( i ) );
1772cdf0e10cSrcweir             if( !pCplList->Insert( pEntry ))
1773cdf0e10cSrcweir                 delete pEntry;
1774cdf0e10cSrcweir         }
1775cdf0e10cSrcweir         pAutoCorrect->SaveCplSttExceptList(eLang);
1776cdf0e10cSrcweir     }
1777cdf0e10cSrcweir     if(aAutoAbbrevCB.IsChecked() != aAutoAbbrevCB.GetSavedValue())
1778cdf0e10cSrcweir         pAutoCorrect->SetAutoCorrFlag( SaveWordCplSttLst, aAutoAbbrevCB.IsChecked());
1779cdf0e10cSrcweir     if(aAutoCapsCB.IsChecked() != aAutoCapsCB.GetSavedValue())
1780cdf0e10cSrcweir         pAutoCorrect->SetAutoCorrFlag( SaveWordWrdSttLst, aAutoCapsCB.IsChecked());
1781cdf0e10cSrcweir     return sal_False;
1782cdf0e10cSrcweir }
1783cdf0e10cSrcweir 
1784cdf0e10cSrcweir /* -----------------23.11.98 10:33-------------------
1785cdf0e10cSrcweir  *
1786cdf0e10cSrcweir  * --------------------------------------------------*/
1787cdf0e10cSrcweir void OfaAutocorrExceptPage::SetLanguage(LanguageType eSet)
1788cdf0e10cSrcweir {
1789cdf0e10cSrcweir     if(eLang != eSet)
1790cdf0e10cSrcweir     {
1791cdf0e10cSrcweir         //alte Einstellungen speichern und neu fuellen
1792cdf0e10cSrcweir         RefillReplaceBoxes(sal_False, eLang, eSet);
1793cdf0e10cSrcweir         eLastDialogLanguage = eSet;
1794cdf0e10cSrcweir         delete pCompareClass;
1795cdf0e10cSrcweir         pCompareClass = new CollatorWrapper( GetProcessFact() );
1796cdf0e10cSrcweir         pCompareClass->loadDefaultCollator( SvxCreateLocale( eLastDialogLanguage ),
1797cdf0e10cSrcweir                         ::com::sun::star::i18n::
1798cdf0e10cSrcweir                             CollatorOptions::CollatorOptions_IGNORE_CASE );
1799cdf0e10cSrcweir         ModifyHdl(&aAbbrevED);
1800cdf0e10cSrcweir         ModifyHdl(&aDoubleCapsED);
1801cdf0e10cSrcweir     }
1802cdf0e10cSrcweir }
1803cdf0e10cSrcweir /* -----------------20.11.98 14:06-------------------
1804cdf0e10cSrcweir  *
1805cdf0e10cSrcweir  * --------------------------------------------------*/
1806cdf0e10cSrcweir void OfaAutocorrExceptPage::RefillReplaceBoxes(sal_Bool bFromReset,
1807cdf0e10cSrcweir                                         LanguageType eOldLanguage,
1808cdf0e10cSrcweir                                         LanguageType eNewLanguage)
1809cdf0e10cSrcweir {
1810cdf0e10cSrcweir     eLang = eNewLanguage;
1811cdf0e10cSrcweir     if(bFromReset)
1812cdf0e10cSrcweir         lcl_ClearTable(aStringsTable);
1813cdf0e10cSrcweir     else
1814cdf0e10cSrcweir     {
1815cdf0e10cSrcweir         StringsArraysPtr pArrays = 0;
1816cdf0e10cSrcweir         if(aStringsTable.IsKeyValid(eOldLanguage))
1817cdf0e10cSrcweir         {
1818cdf0e10cSrcweir             pArrays = aStringsTable.Seek(sal_uLong(eOldLanguage));
1819cdf0e10cSrcweir             pArrays->aAbbrevStrings.DeleteAndDestroy(
1820cdf0e10cSrcweir                                     0, pArrays->aAbbrevStrings.Count());
1821cdf0e10cSrcweir             pArrays->aDoubleCapsStrings.DeleteAndDestroy(
1822cdf0e10cSrcweir                                     0, pArrays->aDoubleCapsStrings.Count());
1823cdf0e10cSrcweir         }
1824cdf0e10cSrcweir         else
1825cdf0e10cSrcweir         {
1826cdf0e10cSrcweir             pArrays = new StringsArrays;
1827cdf0e10cSrcweir             aStringsTable.Insert(sal_uLong(eOldLanguage), pArrays);
1828cdf0e10cSrcweir         }
1829cdf0e10cSrcweir 
1830cdf0e10cSrcweir         sal_uInt16 i;
1831cdf0e10cSrcweir         for(i = 0; i < aAbbrevLB.GetEntryCount(); i++)
1832cdf0e10cSrcweir         {
1833cdf0e10cSrcweir             pArrays->aAbbrevStrings.Insert(
1834cdf0e10cSrcweir                 new String(aAbbrevLB.GetEntry(i)), i);
1835cdf0e10cSrcweir 
1836cdf0e10cSrcweir         }
1837cdf0e10cSrcweir         for(i = 0; i < aDoubleCapsLB.GetEntryCount(); i++)
1838cdf0e10cSrcweir         {
1839cdf0e10cSrcweir             pArrays->aDoubleCapsStrings.Insert(
1840cdf0e10cSrcweir                 new String(aDoubleCapsLB.GetEntry(i)), i);
1841cdf0e10cSrcweir         }
1842cdf0e10cSrcweir     }
1843cdf0e10cSrcweir     aDoubleCapsLB.Clear();
1844cdf0e10cSrcweir     aAbbrevLB.Clear();
1845cdf0e10cSrcweir     String sTemp;
1846cdf0e10cSrcweir     aAbbrevED.SetText(sTemp);
1847cdf0e10cSrcweir     aDoubleCapsED.SetText(sTemp);
1848cdf0e10cSrcweir 
1849cdf0e10cSrcweir     if(aStringsTable.IsKeyValid(eLang))
1850cdf0e10cSrcweir     {
1851cdf0e10cSrcweir         StringsArraysPtr pArrays = aStringsTable.Seek(sal_uLong(eLang));
1852cdf0e10cSrcweir         sal_uInt16 i;
1853cdf0e10cSrcweir         for(i = 0; i < pArrays->aAbbrevStrings.Count(); i++ )
1854cdf0e10cSrcweir         {
1855cdf0e10cSrcweir             aAbbrevLB.InsertEntry(*pArrays->aAbbrevStrings.GetObject(i));
1856cdf0e10cSrcweir         }
1857cdf0e10cSrcweir         for( i = 0; i < pArrays->aDoubleCapsStrings.Count(); i++ )
1858cdf0e10cSrcweir         {
1859cdf0e10cSrcweir             aDoubleCapsLB.InsertEntry(*pArrays->aDoubleCapsStrings.GetObject(i));
1860cdf0e10cSrcweir         }
1861cdf0e10cSrcweir     }
1862cdf0e10cSrcweir     else
1863cdf0e10cSrcweir     {
1864cdf0e10cSrcweir         SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
1865cdf0e10cSrcweir         const SvStringsISortDtor* pCplList = pAutoCorrect->GetCplSttExceptList(eLang);
1866cdf0e10cSrcweir         const SvStringsISortDtor* pWrdList = pAutoCorrect->GetWrdSttExceptList(eLang);
1867cdf0e10cSrcweir         sal_uInt16 i;
1868cdf0e10cSrcweir         for( i = 0; i < pCplList->Count(); i++ )
1869cdf0e10cSrcweir         {
1870cdf0e10cSrcweir             aAbbrevLB.InsertEntry(*pCplList->GetObject(i));
1871cdf0e10cSrcweir         }
1872cdf0e10cSrcweir         for( i = 0; i < pWrdList->Count(); i++ )
1873cdf0e10cSrcweir         {
1874cdf0e10cSrcweir             aDoubleCapsLB.InsertEntry(*pWrdList->GetObject(i));
1875cdf0e10cSrcweir         }
1876cdf0e10cSrcweir     }
1877cdf0e10cSrcweir }
1878cdf0e10cSrcweir 
1879cdf0e10cSrcweir /*-----------------14.10.96 15.58-------------------
1880cdf0e10cSrcweir 
1881cdf0e10cSrcweir --------------------------------------------------*/
1882cdf0e10cSrcweir 
1883cdf0e10cSrcweir void OfaAutocorrExceptPage::Reset( const SfxItemSet& )
1884cdf0e10cSrcweir {
1885cdf0e10cSrcweir     SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
1886cdf0e10cSrcweir     RefillReplaceBoxes(sal_True, eLang, eLang);
1887cdf0e10cSrcweir     aAutoAbbrevCB.  Check(  pAutoCorrect->IsAutoCorrFlag( SaveWordCplSttLst ));
1888cdf0e10cSrcweir     aAutoCapsCB.    Check(  pAutoCorrect->IsAutoCorrFlag( SaveWordWrdSttLst ));
1889cdf0e10cSrcweir     aAutoAbbrevCB.SaveValue();
1890cdf0e10cSrcweir     aAutoCapsCB.SaveValue();
1891cdf0e10cSrcweir }
1892cdf0e10cSrcweir 
1893cdf0e10cSrcweir /*-----------------16.10.96 12.27-------------------
1894cdf0e10cSrcweir 
1895cdf0e10cSrcweir --------------------------------------------------*/
1896cdf0e10cSrcweir 
1897cdf0e10cSrcweir 
1898cdf0e10cSrcweir IMPL_LINK(OfaAutocorrExceptPage, NewDelHdl, PushButton*, pBtn)
1899cdf0e10cSrcweir {
1900cdf0e10cSrcweir     if((pBtn == &aNewAbbrevPB || pBtn == (PushButton*)&aAbbrevED )
1901cdf0e10cSrcweir         && aAbbrevED.GetText().Len())
1902cdf0e10cSrcweir     {
1903cdf0e10cSrcweir         aAbbrevLB.InsertEntry(aAbbrevED.GetText());
1904cdf0e10cSrcweir         ModifyHdl(&aAbbrevED);
1905cdf0e10cSrcweir     }
1906cdf0e10cSrcweir     else if(pBtn == &aDelAbbrevPB)
1907cdf0e10cSrcweir     {
1908cdf0e10cSrcweir         aAbbrevLB.RemoveEntry(aAbbrevED.GetText());
1909cdf0e10cSrcweir         ModifyHdl(&aAbbrevED);
1910cdf0e10cSrcweir     }
1911cdf0e10cSrcweir     else if((pBtn == &aNewDoublePB || pBtn == (PushButton*)&aDoubleCapsED )
1912cdf0e10cSrcweir             && aDoubleCapsED.GetText().Len())
1913cdf0e10cSrcweir     {
1914cdf0e10cSrcweir         aDoubleCapsLB.InsertEntry(aDoubleCapsED.GetText());
1915cdf0e10cSrcweir         ModifyHdl(&aDoubleCapsED);
1916cdf0e10cSrcweir     }
1917cdf0e10cSrcweir     else if(pBtn == &aDelDoublePB)
1918cdf0e10cSrcweir     {
1919cdf0e10cSrcweir         aDoubleCapsLB.RemoveEntry(aDoubleCapsED.GetText());
1920cdf0e10cSrcweir         ModifyHdl(&aDoubleCapsED);
1921cdf0e10cSrcweir     }
1922cdf0e10cSrcweir     return 0;
1923cdf0e10cSrcweir }
1924cdf0e10cSrcweir 
1925cdf0e10cSrcweir /*-----------------16.10.96 12.57-------------------
1926cdf0e10cSrcweir 
1927cdf0e10cSrcweir --------------------------------------------------*/
1928cdf0e10cSrcweir 
1929cdf0e10cSrcweir IMPL_LINK(OfaAutocorrExceptPage, SelectHdl, ListBox*, pBox)
1930cdf0e10cSrcweir {
1931cdf0e10cSrcweir     if(pBox == &aAbbrevLB)
1932cdf0e10cSrcweir     {
1933cdf0e10cSrcweir         aAbbrevED.SetText(pBox->GetSelectEntry());
1934cdf0e10cSrcweir         aNewAbbrevPB.Enable(sal_False);
1935cdf0e10cSrcweir         aDelAbbrevPB.Enable();
1936cdf0e10cSrcweir     }
1937cdf0e10cSrcweir     else
1938cdf0e10cSrcweir     {
1939cdf0e10cSrcweir         aDoubleCapsED.SetText(pBox->GetSelectEntry());
1940cdf0e10cSrcweir         aNewDoublePB.Enable(sal_False);
1941cdf0e10cSrcweir         aDelDoublePB.Enable();
1942cdf0e10cSrcweir     }
1943cdf0e10cSrcweir     return 0;
1944cdf0e10cSrcweir }
1945cdf0e10cSrcweir 
1946cdf0e10cSrcweir /*-----------------16.10.96 13.02-------------------
1947cdf0e10cSrcweir 
1948cdf0e10cSrcweir --------------------------------------------------*/
1949cdf0e10cSrcweir 
1950cdf0e10cSrcweir IMPL_LINK(OfaAutocorrExceptPage, ModifyHdl, Edit*, pEdt)
1951cdf0e10cSrcweir {
1952cdf0e10cSrcweir //  sal_Bool bSame = pEdt->GetText() == ->GetSelectEntry();
1953cdf0e10cSrcweir     const String& sEntry = pEdt->GetText();
1954cdf0e10cSrcweir     sal_Bool bEntryLen = 0!= sEntry.Len();
1955cdf0e10cSrcweir     if(pEdt == &aAbbrevED)
1956cdf0e10cSrcweir     {
1957cdf0e10cSrcweir         sal_Bool bSame = lcl_FindEntry(aAbbrevLB, sEntry, *pCompareClass);
1958cdf0e10cSrcweir         if(bSame && sEntry != aAbbrevLB.GetSelectEntry())
1959cdf0e10cSrcweir             pEdt->SetText(aAbbrevLB.GetSelectEntry());
1960cdf0e10cSrcweir         aNewAbbrevPB.Enable(!bSame && bEntryLen);
1961cdf0e10cSrcweir         aDelAbbrevPB.Enable(bSame && bEntryLen);
1962cdf0e10cSrcweir     }
1963cdf0e10cSrcweir     else
1964cdf0e10cSrcweir     {
1965cdf0e10cSrcweir         sal_Bool bSame = lcl_FindEntry(aDoubleCapsLB, sEntry, *pCompareClass);
1966cdf0e10cSrcweir         if(bSame && sEntry != aDoubleCapsLB.GetSelectEntry())
1967cdf0e10cSrcweir             pEdt->SetText(aDoubleCapsLB.GetSelectEntry());
1968cdf0e10cSrcweir         aNewDoublePB.Enable(!bSame && bEntryLen);
1969cdf0e10cSrcweir         aDelDoublePB.Enable(bSame && bEntryLen);
1970cdf0e10cSrcweir     }
1971cdf0e10cSrcweir     return 0;
1972cdf0e10cSrcweir }
1973cdf0e10cSrcweir 
1974cdf0e10cSrcweir /*-----------------16.10.96 15.03-------------------
1975cdf0e10cSrcweir 
1976cdf0e10cSrcweir --------------------------------------------------*/
1977cdf0e10cSrcweir 
1978cdf0e10cSrcweir void AutoCorrEdit::KeyInput( const KeyEvent& rKEvt )
1979cdf0e10cSrcweir {
1980cdf0e10cSrcweir     const KeyCode aKeyCode = rKEvt.GetKeyCode();
1981cdf0e10cSrcweir     const sal_uInt16 nModifier = aKeyCode.GetModifier();
1982cdf0e10cSrcweir     if( aKeyCode.GetCode() == KEY_RETURN )
1983cdf0e10cSrcweir     {
1984cdf0e10cSrcweir         //wird bei Enter nichts getan, dann doch die Basisklasse rufen
1985cdf0e10cSrcweir         // um den Dialog zu schliessen
1986cdf0e10cSrcweir         if(!nModifier && !aActionLink.Call(this))
1987cdf0e10cSrcweir                  Edit::KeyInput(rKEvt);
1988cdf0e10cSrcweir     }
1989cdf0e10cSrcweir     else if(bSpaces || aKeyCode.GetCode() != KEY_SPACE)
1990cdf0e10cSrcweir         Edit::KeyInput(rKEvt);
1991cdf0e10cSrcweir }
1992cdf0e10cSrcweir 
1993cdf0e10cSrcweir /*-----------------03.07.97 13:17-------------------
1994cdf0e10cSrcweir 
1995cdf0e10cSrcweir --------------------------------------------------*/
1996cdf0e10cSrcweir 
1997cdf0e10cSrcweir enum OfaQuoteOptions
1998cdf0e10cSrcweir {
1999cdf0e10cSrcweir     ADD_NONBRK_SPACE,
2000cdf0e10cSrcweir     REPLACE_1ST
2001cdf0e10cSrcweir };
2002cdf0e10cSrcweir 
2003cdf0e10cSrcweir SvLBoxEntry* OfaQuoteTabPage::CreateEntry(String& rTxt, sal_uInt16 nCol)
2004cdf0e10cSrcweir {
2005cdf0e10cSrcweir     SvLBoxEntry* pEntry = new SvLBoxEntry;
2006cdf0e10cSrcweir 
2007cdf0e10cSrcweir     if ( !pCheckButtonData )
2008cdf0e10cSrcweir     {
2009cdf0e10cSrcweir         pCheckButtonData = new SvLBoxButtonData( &aSwCheckLB );
2010cdf0e10cSrcweir         aSwCheckLB.SetCheckButtonData( pCheckButtonData );
2011cdf0e10cSrcweir     }
2012cdf0e10cSrcweir 
2013cdf0e10cSrcweir     pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0));    // Sonst Puff!
2014cdf0e10cSrcweir 
2015cdf0e10cSrcweir     String sEmpty;
2016cdf0e10cSrcweir     if (nCol == CBCOL_SECOND)
2017cdf0e10cSrcweir         pEntry->AddItem( new SvLBoxString( pEntry, 0, sEmpty) );    // Leerspalte
2018cdf0e10cSrcweir     else
2019cdf0e10cSrcweir         pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox, 0, pCheckButtonData ) );
2020cdf0e10cSrcweir 
2021cdf0e10cSrcweir     if (nCol == CBCOL_FIRST)
2022cdf0e10cSrcweir         pEntry->AddItem( new SvLBoxString( pEntry, 0, sEmpty) );    // Leerspalte
2023cdf0e10cSrcweir     else
2024cdf0e10cSrcweir         pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox, 0, pCheckButtonData ) );
2025cdf0e10cSrcweir 
2026cdf0e10cSrcweir     pEntry->AddItem( new OfaImpBrwString( pEntry, 0, rTxt ) );
2027cdf0e10cSrcweir 
2028cdf0e10cSrcweir     return pEntry;
2029cdf0e10cSrcweir }
2030cdf0e10cSrcweir 
2031cdf0e10cSrcweir OfaQuoteTabPage::OfaQuoteTabPage( Window* pParent, const SfxItemSet& rSet ) :
2032cdf0e10cSrcweir     SfxTabPage(pParent, CUI_RES( RID_OFAPAGE_AUTOCORR_QUOTE ), rSet),
2033cdf0e10cSrcweir     aCheckLB            (this, CUI_RES(CLB_SETTINGS     )),
2034cdf0e10cSrcweir     aSwCheckLB          (this, CUI_RES(CLB_SETTINGS     )),
2035cdf0e10cSrcweir     sHeader1            (CUI_RES( STR_HEADER1           )),
2036cdf0e10cSrcweir     sHeader2            (CUI_RES( STR_HEADER2           )),
2037cdf0e10cSrcweir     sNonBrkSpace        (CUI_RES( ST_NON_BREAK_SPACE    )),
2038cdf0e10cSrcweir     sOrdinal            (CUI_RES( ST_ORDINAL            )),
2039cdf0e10cSrcweir     pCheckButtonData    ( NULL ),
2040cdf0e10cSrcweir 
2041cdf0e10cSrcweir     aSingleFL           (this, CUI_RES(FL_SINGLE         )),
2042cdf0e10cSrcweir     aSingleTypoCB       (this, CUI_RES(CB_SGL_TYPO     )),
2043cdf0e10cSrcweir     aSglStartQuoteFT    (this, CUI_RES(FT_SGL_STARTQUOTE )),
2044cdf0e10cSrcweir     aSglStartQuotePB    (this, CUI_RES(PB_SGL_STARTQUOTE )),
2045cdf0e10cSrcweir     aSglStartExFT       (this, CUI_RES(FT_SGSTEX       )),
2046cdf0e10cSrcweir     aSglEndQuoteFT      (this, CUI_RES(FT_SGL_ENDQUOTE   )),
2047cdf0e10cSrcweir     aSglEndQuotePB      (this, CUI_RES(PB_SGL_ENDQUOTE   )),
2048cdf0e10cSrcweir     aSglEndExFT         (this, CUI_RES(FT_SGENEX       )),
2049cdf0e10cSrcweir     aSglStandardPB      (this, CUI_RES(PB_SGL_STD      )),
2050cdf0e10cSrcweir 
2051cdf0e10cSrcweir     aDoubleFL           (this, CUI_RES(FL_DOUBLE       )),
2052cdf0e10cSrcweir     aTypoCB             (this, CUI_RES(CB_TYPO         )),
2053cdf0e10cSrcweir     aStartQuoteFT       (this, CUI_RES(FT_STARTQUOTE   )),
2054cdf0e10cSrcweir     aStartQuotePB       (this, CUI_RES(PB_STARTQUOTE   )),
2055cdf0e10cSrcweir     aDblStartExFT       (this, CUI_RES(FT_DBSTEX       )),
2056cdf0e10cSrcweir     aEndQuoteFT         (this, CUI_RES(FT_ENDQUOTE     )),
2057cdf0e10cSrcweir     aEndQuotePB         (this, CUI_RES(PB_ENDQUOTE     )),
2058cdf0e10cSrcweir     aDblEndExFT         (this, CUI_RES(FT_DBECEX       )),
2059cdf0e10cSrcweir     aDblStandardPB      (this, CUI_RES(PB_DBL_STD      )),
2060cdf0e10cSrcweir 
2061cdf0e10cSrcweir     sStartQuoteDlg  (CUI_RES(STR_CHANGE_START)),
2062cdf0e10cSrcweir     sEndQuoteDlg    (CUI_RES(STR_CHANGE_END)),
2063cdf0e10cSrcweir 
2064cdf0e10cSrcweir     sStandard(CUI_RES(ST_STANDARD))
2065cdf0e10cSrcweir {
2066cdf0e10cSrcweir     aSglStandardPB.SetAccessibleName(String(CUI_RES(STR_PB_SGL_STD) ) );
2067cdf0e10cSrcweir     aDblStandardPB.SetAccessibleName(String(CUI_RES(STR_PB_DBL_STD) ) );
2068cdf0e10cSrcweir     aStartQuotePB.SetAccessibleName( String(CUI_RES(STR_PB_DBL_START) ));
2069cdf0e10cSrcweir     aEndQuotePB.SetAccessibleName(String(CUI_RES(STR_PB_DBL_END) ));
2070cdf0e10cSrcweir     aSglStartQuotePB.SetAccessibleName(String(CUI_RES(STR_PB_SGL_START) ));
2071cdf0e10cSrcweir     aSglEndQuotePB.SetAccessibleName(String(CUI_RES(STR_PB_SGL_END) ) );
2072cdf0e10cSrcweir 
2073cdf0e10cSrcweir     FreeResource();
2074cdf0e10cSrcweir 
2075cdf0e10cSrcweir     sal_Bool bShowSWOptions = sal_False;
2076cdf0e10cSrcweir 
2077cdf0e10cSrcweir     aCheckLB.SetHelpId( HID_OFAPAGE_QUOTE_CLB );
2078cdf0e10cSrcweir     aSwCheckLB.SetHelpId( HID_OFAPAGE_QUOTE_SW_CLB );
2079cdf0e10cSrcweir 
2080cdf0e10cSrcweir     SFX_ITEMSET_ARG( &rSet, pItem, SfxBoolItem, SID_AUTO_CORRECT_DLG, sal_False );
2081cdf0e10cSrcweir     if ( pItem && pItem->GetValue() )
2082cdf0e10cSrcweir         bShowSWOptions = sal_True;
2083cdf0e10cSrcweir 
2084cdf0e10cSrcweir     if ( bShowSWOptions )
2085cdf0e10cSrcweir     {
2086cdf0e10cSrcweir         static long aStaticTabs[]=
2087cdf0e10cSrcweir         {
2088cdf0e10cSrcweir             3, 0, 20, 40
2089cdf0e10cSrcweir         };
2090cdf0e10cSrcweir 
2091cdf0e10cSrcweir         aSwCheckLB.SetStyle(aSwCheckLB.GetStyle() | WB_HSCROLL| WB_VSCROLL);
2092cdf0e10cSrcweir 
2093cdf0e10cSrcweir         aSwCheckLB.SvxSimpleTable::SetTabs(aStaticTabs);
2094cdf0e10cSrcweir         String sHeader( sHeader1 );
2095cdf0e10cSrcweir         sHeader += '\t';
2096cdf0e10cSrcweir         sHeader += sHeader2;
2097cdf0e10cSrcweir         sHeader += '\t';
2098cdf0e10cSrcweir         aSwCheckLB.InsertHeaderEntry( sHeader, HEADERBAR_APPEND,
2099cdf0e10cSrcweir                         HIB_CENTER | HIB_VCENTER | HIB_FIXEDPOS | HIB_FIXED);
2100cdf0e10cSrcweir         aCheckLB.Hide( sal_True );
2101cdf0e10cSrcweir     }
2102cdf0e10cSrcweir     else
2103cdf0e10cSrcweir     {
2104cdf0e10cSrcweir         aSwCheckLB.HideTable( );
2105cdf0e10cSrcweir     }
2106cdf0e10cSrcweir 
2107cdf0e10cSrcweir     aStartQuotePB.SetClickHdl(LINK(this,    OfaQuoteTabPage, QuoteHdl));
2108cdf0e10cSrcweir     aEndQuotePB.SetClickHdl(LINK(this,      OfaQuoteTabPage, QuoteHdl));
2109cdf0e10cSrcweir     aSglStartQuotePB.SetClickHdl(LINK(this, OfaQuoteTabPage, QuoteHdl));
2110cdf0e10cSrcweir     aSglEndQuotePB.SetClickHdl(LINK(this,   OfaQuoteTabPage, QuoteHdl));
2111cdf0e10cSrcweir     aDblStandardPB.SetClickHdl(LINK(this,   OfaQuoteTabPage, StdQuoteHdl));
2112cdf0e10cSrcweir     aSglStandardPB.SetClickHdl(LINK(this,   OfaQuoteTabPage, StdQuoteHdl));
2113cdf0e10cSrcweir 
2114cdf0e10cSrcweir     aSglStartQuotePB.SetAccessibleRelationLabeledBy( &aSglStartQuoteFT );
2115cdf0e10cSrcweir     aSglEndQuotePB.SetAccessibleRelationLabeledBy( &aSglEndQuoteFT );
2116cdf0e10cSrcweir     aSglStartQuotePB.SetAccessibleRelationMemberOf( &aSingleFL );
2117cdf0e10cSrcweir     aSglEndQuotePB.SetAccessibleRelationMemberOf( &aSingleFL );
2118cdf0e10cSrcweir     aStartQuotePB.SetAccessibleRelationLabeledBy( &aStartQuoteFT );
2119cdf0e10cSrcweir     aEndQuotePB.SetAccessibleRelationLabeledBy( &aEndQuoteFT );
2120cdf0e10cSrcweir     aStartQuotePB.SetAccessibleRelationMemberOf( &aDoubleFL );
2121cdf0e10cSrcweir     aEndQuotePB.SetAccessibleRelationMemberOf( &aDoubleFL );
2122cdf0e10cSrcweir     aSglStandardPB.SetAccessibleRelationMemberOf(&aSingleFL);
2123cdf0e10cSrcweir     aDblStandardPB.SetAccessibleRelationMemberOf(&aDoubleFL);
2124cdf0e10cSrcweir }
2125cdf0e10cSrcweir /*-----------------03.07.97 13:17-------------------
2126cdf0e10cSrcweir 
2127cdf0e10cSrcweir --------------------------------------------------*/
2128cdf0e10cSrcweir OfaQuoteTabPage::~OfaQuoteTabPage()
2129cdf0e10cSrcweir {
2130cdf0e10cSrcweir     delete( pCheckButtonData );
2131cdf0e10cSrcweir }
2132cdf0e10cSrcweir /*-----------------03.07.97 13:17-------------------
2133cdf0e10cSrcweir 
2134cdf0e10cSrcweir --------------------------------------------------*/
2135cdf0e10cSrcweir SfxTabPage* OfaQuoteTabPage::Create( Window* pParent,
2136cdf0e10cSrcweir                                 const SfxItemSet& rAttrSet)
2137cdf0e10cSrcweir {
2138cdf0e10cSrcweir     return new OfaQuoteTabPage(pParent, rAttrSet);
2139cdf0e10cSrcweir }
2140cdf0e10cSrcweir /*-----------------03.07.97 13:18-------------------
2141cdf0e10cSrcweir 
2142cdf0e10cSrcweir --------------------------------------------------*/
2143cdf0e10cSrcweir sal_Bool OfaQuoteTabPage::FillItemSet( SfxItemSet&  )
2144cdf0e10cSrcweir {
2145cdf0e10cSrcweir     SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
2146cdf0e10cSrcweir 
2147cdf0e10cSrcweir     long nFlags = pAutoCorrect->GetFlags();
2148cdf0e10cSrcweir 
2149cdf0e10cSrcweir     if ( aCheckLB.IsVisible( ) )
2150cdf0e10cSrcweir     {
2151cdf0e10cSrcweir         sal_uInt16 nPos = 0;
2152cdf0e10cSrcweir         pAutoCorrect->SetAutoCorrFlag(AddNonBrkSpace,       aCheckLB.IsChecked(nPos++));
2153cdf0e10cSrcweir         pAutoCorrect->SetAutoCorrFlag(ChgOrdinalNumber,     aCheckLB.IsChecked(nPos++));
2154cdf0e10cSrcweir     }
2155cdf0e10cSrcweir 
2156cdf0e10cSrcweir     sal_Bool bModified = sal_False;
2157cdf0e10cSrcweir     if ( aSwCheckLB.IsVisible( ) )
2158cdf0e10cSrcweir     {
2159cdf0e10cSrcweir         SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
2160cdf0e10cSrcweir 
2161cdf0e10cSrcweir         sal_Bool bCheck = aSwCheckLB.IsChecked(ADD_NONBRK_SPACE, CBCOL_FIRST);
2162cdf0e10cSrcweir         bModified |= pOpt->bAddNonBrkSpace != bCheck;
2163cdf0e10cSrcweir         pOpt->bAddNonBrkSpace = bCheck;
2164cdf0e10cSrcweir         pAutoCorrect->SetAutoCorrFlag(AddNonBrkSpace,
2165cdf0e10cSrcweir                             aSwCheckLB.IsChecked(ADD_NONBRK_SPACE, CBCOL_SECOND));
2166cdf0e10cSrcweir 
2167cdf0e10cSrcweir         bCheck = aSwCheckLB.IsChecked(REPLACE_1ST, CBCOL_FIRST);
2168cdf0e10cSrcweir         bModified |= pOpt->bChgOrdinalNumber != bCheck;
2169cdf0e10cSrcweir         pOpt->bChgOrdinalNumber = bCheck;
2170cdf0e10cSrcweir         pAutoCorrect->SetAutoCorrFlag(ChgOrdinalNumber,
2171cdf0e10cSrcweir                         aSwCheckLB.IsChecked(REPLACE_1ST, CBCOL_SECOND));
2172cdf0e10cSrcweir     }
2173cdf0e10cSrcweir 
2174cdf0e10cSrcweir     pAutoCorrect->SetAutoCorrFlag(ChgQuotes,        aTypoCB.IsChecked());
2175cdf0e10cSrcweir     pAutoCorrect->SetAutoCorrFlag(ChgSglQuotes,     aSingleTypoCB.IsChecked());
2176cdf0e10cSrcweir     sal_Bool bReturn = nFlags != pAutoCorrect->GetFlags();
2177cdf0e10cSrcweir     if(cStartQuote != pAutoCorrect->GetStartDoubleQuote())
2178cdf0e10cSrcweir     {
2179cdf0e10cSrcweir         bReturn = sal_True;
2180cdf0e10cSrcweir         sal_Unicode cUCS2 = static_cast<sal_Unicode>(cStartQuote); //TODO
2181cdf0e10cSrcweir         pAutoCorrect->SetStartDoubleQuote(cUCS2);
2182cdf0e10cSrcweir     }
2183cdf0e10cSrcweir     if(cEndQuote != pAutoCorrect->GetEndDoubleQuote())
2184cdf0e10cSrcweir     {
2185cdf0e10cSrcweir         bReturn = sal_True;
2186cdf0e10cSrcweir         sal_Unicode cUCS2 = static_cast<sal_Unicode>(cEndQuote); //TODO
2187cdf0e10cSrcweir         pAutoCorrect->SetEndDoubleQuote(cUCS2);
2188cdf0e10cSrcweir     }
2189cdf0e10cSrcweir     if(cSglStartQuote != pAutoCorrect->GetStartSingleQuote())
2190cdf0e10cSrcweir     {
2191cdf0e10cSrcweir         bReturn = sal_True;
2192cdf0e10cSrcweir         sal_Unicode cUCS2 = static_cast<sal_Unicode>(cSglStartQuote); //TODO
2193cdf0e10cSrcweir         pAutoCorrect->SetStartSingleQuote(cUCS2);
2194cdf0e10cSrcweir     }
2195cdf0e10cSrcweir     if(cSglEndQuote != pAutoCorrect->GetEndSingleQuote())
2196cdf0e10cSrcweir     {
2197cdf0e10cSrcweir         bReturn = sal_True;
2198cdf0e10cSrcweir         sal_Unicode cUCS2 = static_cast<sal_Unicode>(cSglEndQuote); //TODO
2199cdf0e10cSrcweir         pAutoCorrect->SetEndSingleQuote(cUCS2);
2200cdf0e10cSrcweir     }
2201cdf0e10cSrcweir 
2202cdf0e10cSrcweir     if( bModified || bReturn )
2203cdf0e10cSrcweir     {
2204cdf0e10cSrcweir         SvxAutoCorrCfg* pCfg = SvxAutoCorrCfg::Get();
2205cdf0e10cSrcweir         pCfg->SetModified();
2206cdf0e10cSrcweir         pCfg->Commit();
2207cdf0e10cSrcweir     }
2208cdf0e10cSrcweir     return bReturn;
2209cdf0e10cSrcweir }
2210cdf0e10cSrcweir /* -----------------23.11.98 16:15-------------------
2211cdf0e10cSrcweir  *
2212cdf0e10cSrcweir  * --------------------------------------------------*/
2213cdf0e10cSrcweir void OfaQuoteTabPage::ActivatePage( const SfxItemSet& )
2214cdf0e10cSrcweir {
2215cdf0e10cSrcweir     ((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage(sal_False);
2216cdf0e10cSrcweir }
2217cdf0e10cSrcweir /*-----------------03.07.97 13:18-------------------
2218cdf0e10cSrcweir 
2219cdf0e10cSrcweir --------------------------------------------------*/
2220cdf0e10cSrcweir void OfaQuoteTabPage::Reset( const SfxItemSet& )
2221cdf0e10cSrcweir {
2222cdf0e10cSrcweir     SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
2223cdf0e10cSrcweir     const long nFlags = pAutoCorrect->GetFlags();
2224cdf0e10cSrcweir 
2225cdf0e10cSrcweir     // Initialize the Sw options
2226cdf0e10cSrcweir     if ( aSwCheckLB.IsVisible( ) )
2227cdf0e10cSrcweir     {
2228cdf0e10cSrcweir         SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
2229cdf0e10cSrcweir 
2230cdf0e10cSrcweir         aSwCheckLB.SetUpdateMode( sal_False );
2231cdf0e10cSrcweir         aSwCheckLB.Clear();
2232cdf0e10cSrcweir 
2233cdf0e10cSrcweir         aSwCheckLB.GetModel()->Insert(CreateEntry(sNonBrkSpace,       CBCOL_BOTH ));
2234cdf0e10cSrcweir         aSwCheckLB.GetModel()->Insert(CreateEntry(sOrdinal,           CBCOL_BOTH ));
2235cdf0e10cSrcweir 
2236cdf0e10cSrcweir         aSwCheckLB.CheckEntryPos( ADD_NONBRK_SPACE, CBCOL_FIRST,    pOpt->bAddNonBrkSpace );
2237cdf0e10cSrcweir         aSwCheckLB.CheckEntryPos( ADD_NONBRK_SPACE, CBCOL_SECOND,   0 != (nFlags & AddNonBrkSpace) );
2238cdf0e10cSrcweir         aSwCheckLB.CheckEntryPos( REPLACE_1ST,      CBCOL_FIRST,    pOpt->bChgOrdinalNumber );
2239cdf0e10cSrcweir         aSwCheckLB.CheckEntryPos( REPLACE_1ST,      CBCOL_SECOND,   0 != (nFlags & ChgOrdinalNumber) );
2240cdf0e10cSrcweir 
2241cdf0e10cSrcweir         aSwCheckLB.SetUpdateMode( sal_True );
2242cdf0e10cSrcweir     }
2243cdf0e10cSrcweir 
2244cdf0e10cSrcweir     // Initialize the non Sw options
2245cdf0e10cSrcweir     if ( aCheckLB.IsVisible( ) )
2246cdf0e10cSrcweir     {
2247cdf0e10cSrcweir         aCheckLB.SetUpdateMode( sal_False );
2248cdf0e10cSrcweir         aCheckLB.Clear( );
2249cdf0e10cSrcweir 
2250cdf0e10cSrcweir         aCheckLB.InsertEntry( sNonBrkSpace );
2251cdf0e10cSrcweir         aCheckLB.InsertEntry( sOrdinal );
2252cdf0e10cSrcweir 
2253cdf0e10cSrcweir         sal_uInt16 nPos = 0;
2254cdf0e10cSrcweir         aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & AddNonBrkSpace) );
2255cdf0e10cSrcweir         aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & ChgOrdinalNumber) );
2256cdf0e10cSrcweir 
2257cdf0e10cSrcweir         aCheckLB.SetUpdateMode( sal_True );
2258cdf0e10cSrcweir     }
2259cdf0e10cSrcweir 
2260cdf0e10cSrcweir     // Initialize the quote stuffs
2261cdf0e10cSrcweir     aTypoCB             .Check(0 != (nFlags & ChgQuotes));
2262cdf0e10cSrcweir     aSingleTypoCB       .Check(0 != (nFlags & ChgSglQuotes));
2263cdf0e10cSrcweir     aTypoCB             .SaveValue();
2264cdf0e10cSrcweir     aSingleTypoCB       .SaveValue();
2265cdf0e10cSrcweir 
2266cdf0e10cSrcweir     cStartQuote = pAutoCorrect->GetStartDoubleQuote();
2267cdf0e10cSrcweir     cEndQuote = pAutoCorrect->GetEndDoubleQuote();
2268cdf0e10cSrcweir     cSglStartQuote = pAutoCorrect->GetStartSingleQuote();
2269cdf0e10cSrcweir     cSglEndQuote = pAutoCorrect->GetEndSingleQuote();
2270cdf0e10cSrcweir 
2271cdf0e10cSrcweir     aSglStartExFT .SetText(ChangeStringExt_Impl(cSglStartQuote));
2272cdf0e10cSrcweir     aSglEndExFT   .SetText(ChangeStringExt_Impl(cSglEndQuote));
2273cdf0e10cSrcweir     aDblStartExFT .SetText(ChangeStringExt_Impl(cStartQuote));
2274cdf0e10cSrcweir     aDblEndExFT   .SetText(ChangeStringExt_Impl(cEndQuote));
2275cdf0e10cSrcweir }
2276cdf0e10cSrcweir 
2277cdf0e10cSrcweir 
2278cdf0e10cSrcweir /*-----------------15.10.96 16.42-------------------
2279cdf0e10cSrcweir 
2280cdf0e10cSrcweir --------------------------------------------------*/
2281cdf0e10cSrcweir #define SGL_START       0
2282cdf0e10cSrcweir #define DBL_START       1
2283cdf0e10cSrcweir #define SGL_END         2
2284cdf0e10cSrcweir #define DBL_END         3
2285cdf0e10cSrcweir 
2286cdf0e10cSrcweir 
2287cdf0e10cSrcweir IMPL_LINK( OfaQuoteTabPage, QuoteHdl, PushButton*, pBtn )
2288cdf0e10cSrcweir {
2289cdf0e10cSrcweir     sal_uInt16 nMode = SGL_START;
2290cdf0e10cSrcweir     if(pBtn == &aSglEndQuotePB)
2291cdf0e10cSrcweir         nMode = SGL_END;
2292cdf0e10cSrcweir     else if(pBtn == &aStartQuotePB)
2293cdf0e10cSrcweir         nMode = DBL_START;
2294cdf0e10cSrcweir     else if(pBtn == &aEndQuotePB)
2295cdf0e10cSrcweir         nMode = DBL_END;
2296cdf0e10cSrcweir     // Zeichenauswahl-Dialog starten
2297cdf0e10cSrcweir     SvxCharacterMap* pMap = new SvxCharacterMap( this, sal_True );
2298cdf0e10cSrcweir     pMap->SetCharFont( OutputDevice::GetDefaultFont(DEFAULTFONT_LATIN_TEXT,
2299cdf0e10cSrcweir                         LANGUAGE_ENGLISH_US, DEFAULTFONT_FLAGS_ONLYONE, 0 ));
2300cdf0e10cSrcweir     pMap->SetText(nMode < SGL_END ? sStartQuoteDlg  :  sEndQuoteDlg );
2301cdf0e10cSrcweir     sal_UCS4 cDlg;
2302cdf0e10cSrcweir     //The two lines below are added by BerryJia for Bug95846 Time:2002-8-13 15:50
2303cdf0e10cSrcweir     SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
2304cdf0e10cSrcweir     LanguageType eLang = Application::GetSettings().GetLanguage();
2305cdf0e10cSrcweir     switch( nMode )
2306cdf0e10cSrcweir     {
2307cdf0e10cSrcweir         case SGL_START:
2308cdf0e10cSrcweir             cDlg = cSglStartQuote;
2309cdf0e10cSrcweir             if(cDlg == 0)
2310cdf0e10cSrcweir                 cDlg = pAutoCorrect->GetQuote('\'',sal_True,eLang);   //add by BerryJia for Bug95846 Time:2002-8-13 15:50
2311cdf0e10cSrcweir         break;
2312cdf0e10cSrcweir         case SGL_END:
2313cdf0e10cSrcweir             cDlg = cSglEndQuote;
2314cdf0e10cSrcweir             if(cDlg == 0)
2315cdf0e10cSrcweir                 cDlg = pAutoCorrect->GetQuote('\'',sal_False,eLang);  //add by BerryJia for Bug95846 Time:2002-8-13 15:50
2316cdf0e10cSrcweir         break;
2317cdf0e10cSrcweir         case DBL_START:
2318cdf0e10cSrcweir             cDlg = cStartQuote;
2319cdf0e10cSrcweir             if(cDlg == 0)
2320cdf0e10cSrcweir                 cDlg = pAutoCorrect->GetQuote('\"',sal_True,eLang);   //add by BerryJia for Bug95846 Time:2002-8-13 15:50
2321cdf0e10cSrcweir         break;
2322cdf0e10cSrcweir         case DBL_END:
2323cdf0e10cSrcweir             cDlg = cEndQuote;
2324cdf0e10cSrcweir             if(cDlg == 0)
2325cdf0e10cSrcweir                 cDlg = pAutoCorrect->GetQuote('\"',sal_False,eLang);  //add by BerryJia for Bug95846 Time:2002-8-13 15:50
2326cdf0e10cSrcweir         break;
2327cdf0e10cSrcweir         default:
2328cdf0e10cSrcweir             DBG_ERROR("svx::OfaQuoteTabPage::QuoteHdl(), how to initialize cDlg?" );
2329cdf0e10cSrcweir             cDlg = 0;
2330cdf0e10cSrcweir             break;
2331cdf0e10cSrcweir 
2332cdf0e10cSrcweir     }
2333cdf0e10cSrcweir     pMap->SetChar(  cDlg );
2334cdf0e10cSrcweir     pMap->DisableFontSelection();
2335cdf0e10cSrcweir     if(pMap->Execute() == RET_OK)
2336cdf0e10cSrcweir     {
2337cdf0e10cSrcweir         sal_UCS4 cNewChar = pMap->GetChar();
2338cdf0e10cSrcweir         switch( nMode )
2339cdf0e10cSrcweir         {
2340cdf0e10cSrcweir             case SGL_START:
2341cdf0e10cSrcweir                 cSglStartQuote = cNewChar;
2342cdf0e10cSrcweir                 aSglStartExFT.SetText(ChangeStringExt_Impl(cNewChar));
2343cdf0e10cSrcweir             break;
2344cdf0e10cSrcweir             case SGL_END:
2345cdf0e10cSrcweir                 cSglEndQuote = cNewChar;
2346cdf0e10cSrcweir                 aSglEndExFT.SetText(ChangeStringExt_Impl(cNewChar));
2347cdf0e10cSrcweir             break;
2348cdf0e10cSrcweir             case DBL_START:
2349cdf0e10cSrcweir                 cStartQuote = cNewChar;
2350cdf0e10cSrcweir                 aDblStartExFT.SetText(ChangeStringExt_Impl(cNewChar));
2351cdf0e10cSrcweir             break;
2352cdf0e10cSrcweir             case DBL_END:
2353cdf0e10cSrcweir                 cEndQuote = cNewChar;
2354cdf0e10cSrcweir                 aDblEndExFT.SetText(ChangeStringExt_Impl(cNewChar));
2355cdf0e10cSrcweir             break;
2356cdf0e10cSrcweir         }
2357cdf0e10cSrcweir     }
2358cdf0e10cSrcweir     delete pMap;
2359cdf0e10cSrcweir 
2360cdf0e10cSrcweir     return 0;
2361cdf0e10cSrcweir }
2362cdf0e10cSrcweir 
2363cdf0e10cSrcweir /*-----------------27.06.97 09.55-------------------
2364cdf0e10cSrcweir 
2365cdf0e10cSrcweir --------------------------------------------------*/
2366cdf0e10cSrcweir IMPL_LINK( OfaQuoteTabPage, StdQuoteHdl, PushButton*, pBtn )
2367cdf0e10cSrcweir {
2368cdf0e10cSrcweir     if(pBtn == &aDblStandardPB)
2369cdf0e10cSrcweir     {
2370cdf0e10cSrcweir         cStartQuote = 0;
2371cdf0e10cSrcweir         aDblStartExFT.SetText(ChangeStringExt_Impl(0));
2372cdf0e10cSrcweir         cEndQuote = 0;
2373cdf0e10cSrcweir         aDblEndExFT.SetText(ChangeStringExt_Impl(0));
2374cdf0e10cSrcweir 
2375cdf0e10cSrcweir     }
2376cdf0e10cSrcweir     else
2377cdf0e10cSrcweir     {
2378cdf0e10cSrcweir         cSglStartQuote = 0;
2379cdf0e10cSrcweir         aSglStartExFT.SetText(ChangeStringExt_Impl(0));
2380cdf0e10cSrcweir         cSglEndQuote = 0;
2381cdf0e10cSrcweir         aSglEndExFT.SetText(ChangeStringExt_Impl(0));
2382cdf0e10cSrcweir     }
2383cdf0e10cSrcweir     return 0;
2384cdf0e10cSrcweir }
2385cdf0e10cSrcweir 
2386cdf0e10cSrcweir // --------------------------------------------------
2387cdf0e10cSrcweir 
2388cdf0e10cSrcweir String OfaQuoteTabPage::ChangeStringExt_Impl( sal_UCS4 cChar )
2389cdf0e10cSrcweir {
2390cdf0e10cSrcweir     if( !cChar )
2391cdf0e10cSrcweir         return sStandard;
2392cdf0e10cSrcweir 
2393cdf0e10cSrcweir     // convert codepoint value to unicode-hex string
2394cdf0e10cSrcweir     sal_UCS4 aStrCodes[32] = { 0, ' ', '(', 'U', '+', '0' };
2395cdf0e10cSrcweir     aStrCodes[0] = cChar;
2396cdf0e10cSrcweir     int nFullLen = 5;
2397cdf0e10cSrcweir     int nHexLen = 4;
2398cdf0e10cSrcweir     while( (cChar >> (4*nHexLen)) != 0 )
2399cdf0e10cSrcweir         ++nHexLen;
2400cdf0e10cSrcweir     for( int i = nHexLen; --i >= 0;)
2401cdf0e10cSrcweir     {
2402cdf0e10cSrcweir         sal_UCS4 cHexDigit = ((cChar >> (4*i)) & 0x0f) + '0';
2403cdf0e10cSrcweir         if( cHexDigit > '9' )
2404cdf0e10cSrcweir             cHexDigit += 'A' - ('9' + 1);
2405cdf0e10cSrcweir         aStrCodes[ nFullLen++ ] = cHexDigit;
2406cdf0e10cSrcweir     }
2407cdf0e10cSrcweir     aStrCodes[ nFullLen++ ] = ')';
2408cdf0e10cSrcweir     // using the new UCS4 constructor
2409cdf0e10cSrcweir     rtl::OUString aOUStr( aStrCodes, nFullLen );
2410cdf0e10cSrcweir     return aOUStr;
2411cdf0e10cSrcweir }
2412cdf0e10cSrcweir 
2413cdf0e10cSrcweir OfaAutoCompleteTabPage::OfaAutoCompleteTabPage( Window* pParent,
2414cdf0e10cSrcweir                                                 const SfxItemSet& rSet )
2415cdf0e10cSrcweir     : SfxTabPage(pParent, CUI_RES( RID_OFAPAGE_AUTOCOMPLETE_OPTIONS ), rSet),
2416cdf0e10cSrcweir     aCBActiv        (this, CUI_RES(CB_ACTIV)),
2417cdf0e10cSrcweir     aCBAppendSpace  (this, CUI_RES(CB_APPEND_SPACE)),
2418cdf0e10cSrcweir     aCBAsTip        (this, CUI_RES(CB_AS_TIP)),
2419cdf0e10cSrcweir     aCBCollect      (this, CUI_RES(CB_COLLECT)),
2420cdf0e10cSrcweir     aCBRemoveList   (this, CUI_RES(CB_REMOVE_LIST)),
2421cdf0e10cSrcweir     aFTExpandKey    (this, CUI_RES(FT_EXPAND_KEY)),
2422cdf0e10cSrcweir     aDCBExpandKey   (this, CUI_RES(DCB_EXPAND_KEY)),
2423cdf0e10cSrcweir     aFTMinWordlen   (this, CUI_RES(FT_MIN_WORDLEN)),
2424cdf0e10cSrcweir     aNFMinWordlen   (this, CUI_RES(NF_MIN_WORDLEN)),
2425cdf0e10cSrcweir     aFTMaxEntries   (this, CUI_RES(FT_MAX_ENTRIES)),
2426cdf0e10cSrcweir     aNFMaxEntries   (this, CUI_RES(NF_MAX_ENTRIES)),
2427cdf0e10cSrcweir     aLBEntries      (*this, CUI_RES(LB_ENTRIES)),
2428cdf0e10cSrcweir     aPBEntries      (this, CUI_RES(PB_ENTRIES)),
2429cdf0e10cSrcweir     pAutoCmpltList( 0 ),
2430cdf0e10cSrcweir     nAutoCmpltListCnt( 0 )
2431cdf0e10cSrcweir {
2432cdf0e10cSrcweir     FreeResource();
2433cdf0e10cSrcweir 
2434cdf0e10cSrcweir     // the defined KEYs
2435cdf0e10cSrcweir     static const sal_uInt16 aKeyCodes[] = {
2436cdf0e10cSrcweir         KEY_END,
2437cdf0e10cSrcweir         KEY_RETURN,
2438cdf0e10cSrcweir         KEY_SPACE,
2439cdf0e10cSrcweir         KEY_RIGHT,
2440cdf0e10cSrcweir         KEY_TAB,
2441cdf0e10cSrcweir         0
2442cdf0e10cSrcweir     };
2443cdf0e10cSrcweir 
2444cdf0e10cSrcweir     for( const sal_uInt16* pKeys = aKeyCodes; *pKeys; ++pKeys )
2445cdf0e10cSrcweir     {
2446cdf0e10cSrcweir         KeyCode aKCode( *pKeys );
2447cdf0e10cSrcweir         sal_uInt16 nPos = aDCBExpandKey.InsertEntry( aKCode.GetName() );
2448cdf0e10cSrcweir         aDCBExpandKey.SetEntryData( nPos, (void*)(sal_uLong)*pKeys );
2449cdf0e10cSrcweir         if( KEY_RETURN == *pKeys )      // default to RETURN
2450cdf0e10cSrcweir             aDCBExpandKey.SelectEntryPos( nPos );
2451cdf0e10cSrcweir     }
2452cdf0e10cSrcweir 
2453cdf0e10cSrcweir     aPBEntries.SetClickHdl(LINK(this, OfaAutoCompleteTabPage, DeleteHdl));
2454cdf0e10cSrcweir     aCBActiv.SetToggleHdl(LINK(this, OfaAutoCompleteTabPage, CheckHdl));
2455cdf0e10cSrcweir     aCBCollect.SetToggleHdl(LINK(this, OfaAutoCompleteTabPage, CheckHdl));
2456cdf0e10cSrcweir     aLBEntries.SetAccessibleRelationLabeledBy(&aLBEntries);
2457cdf0e10cSrcweir }
2458cdf0e10cSrcweir 
2459cdf0e10cSrcweir OfaAutoCompleteTabPage::~OfaAutoCompleteTabPage()
2460cdf0e10cSrcweir {
2461cdf0e10cSrcweir }
2462cdf0e10cSrcweir 
2463cdf0e10cSrcweir SfxTabPage* OfaAutoCompleteTabPage::Create( Window* pParent,
2464cdf0e10cSrcweir                                             const SfxItemSet& rSet)
2465cdf0e10cSrcweir {
2466cdf0e10cSrcweir     return new OfaAutoCompleteTabPage( pParent, rSet );
2467cdf0e10cSrcweir }
2468cdf0e10cSrcweir 
2469cdf0e10cSrcweir sal_Bool OfaAutoCompleteTabPage::FillItemSet( SfxItemSet& )
2470cdf0e10cSrcweir {
2471cdf0e10cSrcweir     sal_Bool bModified = sal_False, bCheck;
2472cdf0e10cSrcweir     SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
2473cdf0e10cSrcweir     SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
2474cdf0e10cSrcweir     sal_uInt16 nVal;
2475cdf0e10cSrcweir 
2476cdf0e10cSrcweir     bCheck = aCBActiv.IsChecked();
2477cdf0e10cSrcweir     bModified |= pOpt->bAutoCompleteWords != bCheck;
2478cdf0e10cSrcweir     pOpt->bAutoCompleteWords = bCheck;
2479cdf0e10cSrcweir     bCheck = aCBCollect.IsChecked();
2480cdf0e10cSrcweir     bModified |= pOpt->bAutoCmpltCollectWords != bCheck;
2481cdf0e10cSrcweir     pOpt->bAutoCmpltCollectWords = bCheck;
2482cdf0e10cSrcweir     bCheck = !aCBRemoveList.IsChecked(); // inverted value!
2483cdf0e10cSrcweir     bModified |= pOpt->bAutoCmpltKeepList != bCheck;
2484cdf0e10cSrcweir     pOpt->bAutoCmpltKeepList = bCheck;
2485cdf0e10cSrcweir     bCheck = aCBAppendSpace.IsChecked();
2486cdf0e10cSrcweir     bModified |= pOpt->bAutoCmpltAppendBlanc != bCheck;
2487cdf0e10cSrcweir     pOpt->bAutoCmpltAppendBlanc = bCheck;
2488cdf0e10cSrcweir     bCheck = aCBAsTip.IsChecked();
2489cdf0e10cSrcweir     bModified |= pOpt->bAutoCmpltShowAsTip != bCheck;
2490cdf0e10cSrcweir     pOpt->bAutoCmpltShowAsTip = bCheck;
2491cdf0e10cSrcweir 
2492cdf0e10cSrcweir     nVal = (sal_uInt16)aNFMinWordlen.GetValue();
2493cdf0e10cSrcweir     bModified |= nVal != pOpt->nAutoCmpltWordLen;
2494cdf0e10cSrcweir     pOpt->nAutoCmpltWordLen = nVal;
2495cdf0e10cSrcweir 
2496cdf0e10cSrcweir     nVal = (sal_uInt16)aNFMaxEntries.GetValue();
2497cdf0e10cSrcweir     bModified |= nVal != pOpt->nAutoCmpltListLen;
2498cdf0e10cSrcweir     pOpt->nAutoCmpltListLen = nVal;
2499cdf0e10cSrcweir 
2500cdf0e10cSrcweir     nVal = aDCBExpandKey.GetSelectEntryPos();
2501cdf0e10cSrcweir     if( nVal < aDCBExpandKey.GetEntryCount() )
2502cdf0e10cSrcweir     {
2503cdf0e10cSrcweir         sal_uLong nKey = (sal_uLong)aDCBExpandKey.GetEntryData( nVal );
2504cdf0e10cSrcweir         bModified |= nKey != pOpt->nAutoCmpltExpandKey;
2505cdf0e10cSrcweir         pOpt->nAutoCmpltExpandKey = (sal_uInt16)nKey;
2506cdf0e10cSrcweir    }
2507cdf0e10cSrcweir 
2508cdf0e10cSrcweir     if( pAutoCmpltList && nAutoCmpltListCnt != aLBEntries.GetEntryCount() )
2509cdf0e10cSrcweir     {
2510cdf0e10cSrcweir         bModified = sal_True;
2511cdf0e10cSrcweir         pOpt->pAutoCmpltList = pAutoCmpltList;
2512cdf0e10cSrcweir     }
2513cdf0e10cSrcweir     if( bModified )
2514cdf0e10cSrcweir     {
2515cdf0e10cSrcweir         SvxAutoCorrCfg* pCfg = SvxAutoCorrCfg::Get();
2516cdf0e10cSrcweir         pCfg->SetModified();
2517cdf0e10cSrcweir         pCfg->Commit();
2518cdf0e10cSrcweir     }
2519cdf0e10cSrcweir     return sal_True;
2520cdf0e10cSrcweir }
2521cdf0e10cSrcweir 
2522cdf0e10cSrcweir void OfaAutoCompleteTabPage::Reset( const SfxItemSet&  )
2523cdf0e10cSrcweir {
2524cdf0e10cSrcweir     SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
2525cdf0e10cSrcweir     SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
2526cdf0e10cSrcweir 
2527cdf0e10cSrcweir     aCBActiv.Check( 0 != pOpt->bAutoCompleteWords );
2528cdf0e10cSrcweir     aCBCollect.Check( 0 != pOpt->bAutoCmpltCollectWords );
2529cdf0e10cSrcweir     aCBRemoveList.Check( !pOpt->bAutoCmpltKeepList ); //inverted value!
2530cdf0e10cSrcweir     aCBAppendSpace.Check( 0 != pOpt->bAutoCmpltAppendBlanc );
2531cdf0e10cSrcweir     aCBAsTip.Check( 0 != pOpt->bAutoCmpltShowAsTip );
2532cdf0e10cSrcweir 
2533cdf0e10cSrcweir     aNFMinWordlen.SetValue( pOpt->nAutoCmpltWordLen );
2534cdf0e10cSrcweir     aNFMaxEntries.SetValue( pOpt->nAutoCmpltListLen );
2535cdf0e10cSrcweir 
2536cdf0e10cSrcweir     // select the specific KeyCode:
2537cdf0e10cSrcweir     {
2538cdf0e10cSrcweir         sal_uLong nKey = pOpt->nAutoCmpltExpandKey;
2539cdf0e10cSrcweir         for( sal_uInt16 n = 0, nCnt = aDCBExpandKey.GetEntryCount(); n < nCnt; ++n )
2540cdf0e10cSrcweir             if( nKey == (sal_uLong)aDCBExpandKey.GetEntryData( n ))
2541cdf0e10cSrcweir             {
2542cdf0e10cSrcweir                 aDCBExpandKey.SelectEntryPos( n );
2543cdf0e10cSrcweir                 break;
2544cdf0e10cSrcweir             }
2545cdf0e10cSrcweir     }
2546cdf0e10cSrcweir 
2547cdf0e10cSrcweir     if( pOpt->pAutoCmpltList && pOpt->pAutoCmpltList->Count() )
2548cdf0e10cSrcweir     {
2549cdf0e10cSrcweir         pAutoCmpltList = (SvStringsISortDtor*)pOpt->pAutoCmpltList;
2550cdf0e10cSrcweir         pOpt->pAutoCmpltList = 0;
2551cdf0e10cSrcweir         nAutoCmpltListCnt = pAutoCmpltList->Count();
2552cdf0e10cSrcweir         for( sal_uInt16 n = 0; n < nAutoCmpltListCnt; ++n )
2553cdf0e10cSrcweir         {
2554cdf0e10cSrcweir             const StringPtr pStr = pAutoCmpltList->GetObject( n );
2555cdf0e10cSrcweir             sal_uInt16 nPos = aLBEntries.InsertEntry( *pStr );
2556cdf0e10cSrcweir             aLBEntries.SetEntryData( nPos, (void*)pStr );
2557cdf0e10cSrcweir         }
2558cdf0e10cSrcweir     }
2559cdf0e10cSrcweir     else
2560cdf0e10cSrcweir     {
2561cdf0e10cSrcweir         aLBEntries.Disable();
2562cdf0e10cSrcweir         aPBEntries.Disable();
2563cdf0e10cSrcweir     }
2564cdf0e10cSrcweir 
2565cdf0e10cSrcweir     CheckHdl( &aCBActiv );
2566cdf0e10cSrcweir     CheckHdl( &aCBCollect );
2567cdf0e10cSrcweir }
2568cdf0e10cSrcweir 
2569cdf0e10cSrcweir void OfaAutoCompleteTabPage::ActivatePage( const SfxItemSet& )
2570cdf0e10cSrcweir {
2571cdf0e10cSrcweir     ((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage( sal_False );
2572cdf0e10cSrcweir }
2573cdf0e10cSrcweir 
2574cdf0e10cSrcweir IMPL_LINK( OfaAutoCompleteTabPage, DeleteHdl, PushButton*, EMPTYARG )
2575cdf0e10cSrcweir {
2576cdf0e10cSrcweir     sal_uInt16 nSelCnt = pAutoCmpltList ? aLBEntries.GetSelectEntryCount() : 0;
2577cdf0e10cSrcweir     while( nSelCnt )
2578cdf0e10cSrcweir     {
2579cdf0e10cSrcweir         sal_uInt16 nPos = aLBEntries.GetSelectEntryPos( --nSelCnt );
2580cdf0e10cSrcweir         const StringPtr pStr = (StringPtr)aLBEntries.GetEntryData( nPos );
2581cdf0e10cSrcweir         aLBEntries.RemoveEntry( nPos );
2582cdf0e10cSrcweir         nPos = pAutoCmpltList->GetPos( pStr );
2583cdf0e10cSrcweir         if( USHRT_MAX != nPos )
2584cdf0e10cSrcweir             pAutoCmpltList->Remove( nPos );
2585cdf0e10cSrcweir     }
2586cdf0e10cSrcweir     return 0;
2587cdf0e10cSrcweir }
2588cdf0e10cSrcweir 
2589cdf0e10cSrcweir IMPL_LINK( OfaAutoCompleteTabPage, CheckHdl, CheckBox*, pBox )
2590cdf0e10cSrcweir {
2591cdf0e10cSrcweir     sal_Bool bEnable = pBox->IsChecked();
2592cdf0e10cSrcweir     if( pBox == &aCBActiv )
2593cdf0e10cSrcweir     {
2594cdf0e10cSrcweir         aCBAppendSpace.Enable( bEnable );
2595cdf0e10cSrcweir         aCBAppendSpace.Enable( bEnable );
2596cdf0e10cSrcweir         aCBAsTip.Enable( bEnable );
2597cdf0e10cSrcweir         aDCBExpandKey.Enable( bEnable );
2598cdf0e10cSrcweir     }
2599cdf0e10cSrcweir     else if(&aCBCollect == pBox)
2600cdf0e10cSrcweir         aCBRemoveList.Enable( bEnable );
2601cdf0e10cSrcweir     return 0;
2602cdf0e10cSrcweir }
2603cdf0e10cSrcweir 
2604cdf0e10cSrcweir void OfaAutoCompleteTabPage::CopyToClipboard() const
2605cdf0e10cSrcweir {
2606cdf0e10cSrcweir     sal_uInt16 nSelCnt = aLBEntries.GetSelectEntryCount();
2607cdf0e10cSrcweir     if( pAutoCmpltList && nSelCnt )
2608cdf0e10cSrcweir     {
2609cdf0e10cSrcweir         TransferDataContainer* pCntnr = new TransferDataContainer;
2610cdf0e10cSrcweir         ::com::sun::star::uno::Reference<
2611cdf0e10cSrcweir             ::com::sun::star::datatransfer::XTransferable > xRef( pCntnr );
2612cdf0e10cSrcweir 
2613cdf0e10cSrcweir         ByteString sData;
2614cdf0e10cSrcweir         const sal_Char* pLineEnd =
2615cdf0e10cSrcweir #if defined(UNX)
2616cdf0e10cSrcweir                 "\012";
2617cdf0e10cSrcweir #else
2618cdf0e10cSrcweir                 "\015\012";
2619cdf0e10cSrcweir #endif
2620cdf0e10cSrcweir 
2621cdf0e10cSrcweir         rtl_TextEncoding nEncode = gsl_getSystemTextEncoding();
2622cdf0e10cSrcweir 
2623cdf0e10cSrcweir         for( sal_uInt16 n = 0; n < nSelCnt; ++n )
2624cdf0e10cSrcweir         {
2625cdf0e10cSrcweir             sData += ByteString( aLBEntries.GetSelectEntry( n ), nEncode );
2626cdf0e10cSrcweir             sData += pLineEnd;
2627cdf0e10cSrcweir         }
2628cdf0e10cSrcweir         pCntnr->CopyByteString( SOT_FORMAT_STRING, sData );
2629cdf0e10cSrcweir         pCntnr->CopyToClipboard( (Window*)this );
2630cdf0e10cSrcweir     }
2631cdf0e10cSrcweir }
2632cdf0e10cSrcweir 
2633cdf0e10cSrcweir long OfaAutoCompleteTabPage::AutoCompleteMultiListBox::PreNotify(
2634cdf0e10cSrcweir             NotifyEvent& rNEvt )
2635cdf0e10cSrcweir {
2636cdf0e10cSrcweir     long nHandled = MultiListBox::PreNotify( rNEvt );
2637cdf0e10cSrcweir 
2638cdf0e10cSrcweir     if( !nHandled && EVENT_KEYUP == rNEvt.GetType() )
2639cdf0e10cSrcweir     {
2640cdf0e10cSrcweir         const KeyCode& rKeyCode = rNEvt.GetKeyEvent()->GetKeyCode();
2641cdf0e10cSrcweir         switch( rKeyCode.GetModifier() | rKeyCode.GetCode() )
2642cdf0e10cSrcweir         {
2643cdf0e10cSrcweir         case KEY_DELETE:
2644cdf0e10cSrcweir             rPage.DeleteHdl( 0 );
2645cdf0e10cSrcweir             nHandled = 1;
2646cdf0e10cSrcweir             break;
2647cdf0e10cSrcweir 
2648cdf0e10cSrcweir         default:
2649cdf0e10cSrcweir             if( KEYFUNC_COPY == rKeyCode.GetFunction() )
2650cdf0e10cSrcweir             {
2651cdf0e10cSrcweir                 rPage.CopyToClipboard();
2652cdf0e10cSrcweir                 nHandled = 1;
2653cdf0e10cSrcweir             }
2654cdf0e10cSrcweir             break;
2655cdf0e10cSrcweir         }
2656cdf0e10cSrcweir     }
2657cdf0e10cSrcweir     return nHandled;
2658cdf0e10cSrcweir }
2659cdf0e10cSrcweir 
2660cdf0e10cSrcweir // class OfaSmartTagOptionsTabPage ---------------------------------------------
2661cdf0e10cSrcweir 
2662cdf0e10cSrcweir OfaSmartTagOptionsTabPage::OfaSmartTagOptionsTabPage( Window* pParent,
2663cdf0e10cSrcweir                                                       const SfxItemSet& rSet )
2664cdf0e10cSrcweir     : SfxTabPage(pParent, CUI_RES( RID_OFAPAGE_SMARTTAG_OPTIONS ), rSet),
2665cdf0e10cSrcweir     m_aMainCB( this, CUI_RES(CB_SMARTTAGS) ),
2666cdf0e10cSrcweir     m_aSmartTagTypesLB( this, CUI_RES(LB_SMARTTAGS) ),
2667cdf0e10cSrcweir     m_aPropertiesPB( this, CUI_RES(PB_SMARTTAGS) ),
2668cdf0e10cSrcweir     m_aTitleFT( this, CUI_RES(FT_SMARTTAGS) )
2669cdf0e10cSrcweir {
2670cdf0e10cSrcweir     FreeResource();
2671cdf0e10cSrcweir 
2672cdf0e10cSrcweir     // some options for the list box:
2673cdf0e10cSrcweir     m_aSmartTagTypesLB.SetStyle( m_aSmartTagTypesLB.GetStyle() | WB_HSCROLL | WB_HIDESELECTION );
2674cdf0e10cSrcweir     m_aSmartTagTypesLB.SetHighlightRange();
2675cdf0e10cSrcweir 
2676cdf0e10cSrcweir     // set the handlers:
2677cdf0e10cSrcweir     m_aMainCB.SetToggleHdl(LINK(this, OfaSmartTagOptionsTabPage, CheckHdl));
2678cdf0e10cSrcweir     m_aPropertiesPB.SetClickHdl(LINK(this, OfaSmartTagOptionsTabPage, ClickHdl));
2679cdf0e10cSrcweir     m_aSmartTagTypesLB.SetSelectHdl(LINK(this, OfaSmartTagOptionsTabPage, SelectHdl));
2680cdf0e10cSrcweir }
2681cdf0e10cSrcweir 
2682cdf0e10cSrcweir OfaSmartTagOptionsTabPage::~OfaSmartTagOptionsTabPage()
2683cdf0e10cSrcweir {
2684cdf0e10cSrcweir 
2685cdf0e10cSrcweir }
2686cdf0e10cSrcweir 
2687cdf0e10cSrcweir SfxTabPage* OfaSmartTagOptionsTabPage::Create( Window* pParent, const SfxItemSet& rSet)
2688cdf0e10cSrcweir {
2689cdf0e10cSrcweir     return new OfaSmartTagOptionsTabPage( pParent, rSet );
2690cdf0e10cSrcweir }
2691cdf0e10cSrcweir 
2692cdf0e10cSrcweir /** This struct is used to associate list box entries with smart tag data
2693cdf0e10cSrcweir */
2694cdf0e10cSrcweir struct ImplSmartTagLBUserData
2695cdf0e10cSrcweir {
2696cdf0e10cSrcweir     rtl::OUString maSmartTagType;
2697cdf0e10cSrcweir     uno::Reference< smarttags::XSmartTagRecognizer > mxRec;
2698cdf0e10cSrcweir     sal_Int32 mnSmartTagIdx;
2699cdf0e10cSrcweir 
2700cdf0e10cSrcweir     ImplSmartTagLBUserData( const rtl::OUString& rSmartTagType,
2701cdf0e10cSrcweir                             uno::Reference< smarttags::XSmartTagRecognizer > xRec,
2702cdf0e10cSrcweir                             sal_Int32 nSmartTagIdx ) :
2703cdf0e10cSrcweir         maSmartTagType( rSmartTagType ),
2704cdf0e10cSrcweir         mxRec( xRec ),
2705cdf0e10cSrcweir         mnSmartTagIdx( nSmartTagIdx ) {}
2706cdf0e10cSrcweir };
2707cdf0e10cSrcweir 
2708cdf0e10cSrcweir /** Clears m_aSmartTagTypesLB
2709cdf0e10cSrcweir */
2710cdf0e10cSrcweir void OfaSmartTagOptionsTabPage::ClearListBox()
2711cdf0e10cSrcweir {
2712cdf0e10cSrcweir     const sal_uLong nCount = m_aSmartTagTypesLB.GetEntryCount();
2713cdf0e10cSrcweir     for ( sal_uInt16 i = 0; i < nCount; ++i )
2714cdf0e10cSrcweir     {
2715cdf0e10cSrcweir         const SvLBoxEntry* pEntry = m_aSmartTagTypesLB.GetEntry(i);
2716cdf0e10cSrcweir         const ImplSmartTagLBUserData* pUserData = static_cast< ImplSmartTagLBUserData* >(pEntry->GetUserData());
2717cdf0e10cSrcweir         delete pUserData;
2718cdf0e10cSrcweir     }
2719cdf0e10cSrcweir 
2720cdf0e10cSrcweir     m_aSmartTagTypesLB.Clear();
2721cdf0e10cSrcweir }
2722cdf0e10cSrcweir 
2723cdf0e10cSrcweir /** Inserts items into m_aSmartTagTypesLB
2724cdf0e10cSrcweir */
2725cdf0e10cSrcweir void OfaSmartTagOptionsTabPage::FillListBox( const SmartTagMgr& rSmartTagMgr )
2726cdf0e10cSrcweir {
2727cdf0e10cSrcweir     // first we have to clear the list box:
2728cdf0e10cSrcweir     ClearListBox();
2729cdf0e10cSrcweir 
2730cdf0e10cSrcweir     // fill list box:
2731cdf0e10cSrcweir     const sal_uInt32 nNumberOfRecognizers = rSmartTagMgr.NumberOfRecognizers();
2732cdf0e10cSrcweir     const lang::Locale aLocale( SvxCreateLocale( eLastDialogLanguage ) );
2733cdf0e10cSrcweir     std::vector< ActionReference > aActionReferences;
2734cdf0e10cSrcweir 
2735cdf0e10cSrcweir     for ( sal_uInt32 i = 0; i < nNumberOfRecognizers; ++i )
2736cdf0e10cSrcweir     {
2737cdf0e10cSrcweir         uno::Reference< smarttags::XSmartTagRecognizer > xRec = rSmartTagMgr.GetRecognizer(i);
2738cdf0e10cSrcweir 
2739cdf0e10cSrcweir         const rtl::OUString aName = xRec->getName( aLocale );
2740cdf0e10cSrcweir         const rtl::OUString aDesc = xRec->getDescription( aLocale );
2741cdf0e10cSrcweir         const sal_Int32 nNumberOfSupportedSmartTags = xRec->getSmartTagCount();
2742cdf0e10cSrcweir 
2743cdf0e10cSrcweir         for ( sal_Int32 j = 0; j < nNumberOfSupportedSmartTags; ++j )
2744cdf0e10cSrcweir         {
2745cdf0e10cSrcweir             const rtl::OUString aSmartTagType = xRec->getSmartTagName(j);
2746cdf0e10cSrcweir             rtl::OUString aSmartTagCaption = rSmartTagMgr.GetSmartTagCaption( aSmartTagType, aLocale );
2747cdf0e10cSrcweir 
2748cdf0e10cSrcweir             if ( !aSmartTagCaption.getLength() )
2749cdf0e10cSrcweir                 aSmartTagCaption = aSmartTagType;
2750cdf0e10cSrcweir 
2751cdf0e10cSrcweir             const rtl::OUString aLBEntry = aSmartTagCaption +
2752cdf0e10cSrcweir                                            OUString::createFromAscii(" (") +
2753cdf0e10cSrcweir                                            aName +
2754cdf0e10cSrcweir                                            OUString::createFromAscii(")");
2755cdf0e10cSrcweir 
2756cdf0e10cSrcweir             SvLBoxEntry* pEntry = m_aSmartTagTypesLB.SvTreeListBox::InsertEntry( aLBEntry );
2757cdf0e10cSrcweir             if ( pEntry )
2758cdf0e10cSrcweir             {
2759cdf0e10cSrcweir                 const bool bCheck = rSmartTagMgr.IsSmartTagTypeEnabled( aSmartTagType );
2760cdf0e10cSrcweir                 m_aSmartTagTypesLB.SetCheckButtonState( pEntry, bCheck ? SV_BUTTON_CHECKED : SV_BUTTON_UNCHECKED );
2761cdf0e10cSrcweir                 pEntry->SetUserData(static_cast<void*>(new ImplSmartTagLBUserData( aSmartTagType, xRec, j ) ) );
2762cdf0e10cSrcweir             }
2763cdf0e10cSrcweir         }
2764cdf0e10cSrcweir     }
2765cdf0e10cSrcweir }
2766cdf0e10cSrcweir 
2767cdf0e10cSrcweir /** Handler for the push button
2768cdf0e10cSrcweir */
2769cdf0e10cSrcweir IMPL_LINK( OfaSmartTagOptionsTabPage, ClickHdl, PushButton*, EMPTYARG )
2770cdf0e10cSrcweir {
2771cdf0e10cSrcweir     const sal_uInt16 nPos = m_aSmartTagTypesLB.GetSelectEntryPos();
2772cdf0e10cSrcweir     const SvLBoxEntry* pEntry = m_aSmartTagTypesLB.GetEntry(nPos);
2773cdf0e10cSrcweir     const ImplSmartTagLBUserData* pUserData = static_cast< ImplSmartTagLBUserData* >(pEntry->GetUserData());
2774cdf0e10cSrcweir     uno::Reference< smarttags::XSmartTagRecognizer > xRec = pUserData->mxRec;
2775cdf0e10cSrcweir     const sal_Int32 nSmartTagIdx = pUserData->mnSmartTagIdx;
2776cdf0e10cSrcweir 
2777cdf0e10cSrcweir     const lang::Locale aLocale( SvxCreateLocale( eLastDialogLanguage ) );
2778cdf0e10cSrcweir     if ( xRec->hasPropertyPage( nSmartTagIdx, aLocale ) )
2779cdf0e10cSrcweir         xRec->displayPropertyPage( nSmartTagIdx, aLocale );
2780cdf0e10cSrcweir 
2781cdf0e10cSrcweir     return 0;
2782cdf0e10cSrcweir }
2783cdf0e10cSrcweir 
2784cdf0e10cSrcweir /** Handler for the check box
2785cdf0e10cSrcweir */
2786cdf0e10cSrcweir IMPL_LINK( OfaSmartTagOptionsTabPage, CheckHdl, CheckBox*, EMPTYARG )
2787cdf0e10cSrcweir {
2788cdf0e10cSrcweir     const sal_Bool bEnable = m_aMainCB.IsChecked();
2789cdf0e10cSrcweir     m_aSmartTagTypesLB.Enable( bEnable );
2790cdf0e10cSrcweir     m_aSmartTagTypesLB.Invalidate();
2791cdf0e10cSrcweir     m_aPropertiesPB.Enable( false );
2792cdf0e10cSrcweir 
2793cdf0e10cSrcweir     // if the controls are currently enabled, we still have to check
2794cdf0e10cSrcweir     // if the properties button should be disabled because the currently
2795cdf0e10cSrcweir     // seleted smart tag type does not have a properties dialog.
2796cdf0e10cSrcweir     // We do this by calling SelectHdl:
2797cdf0e10cSrcweir     if ( bEnable )
2798cdf0e10cSrcweir         SelectHdl( &m_aSmartTagTypesLB );
2799cdf0e10cSrcweir 
2800cdf0e10cSrcweir     return 0;
2801cdf0e10cSrcweir }
2802cdf0e10cSrcweir 
2803cdf0e10cSrcweir /** Handler for the list box
2804cdf0e10cSrcweir */
2805cdf0e10cSrcweir IMPL_LINK(OfaSmartTagOptionsTabPage, SelectHdl, SvxCheckListBox*, EMPTYARG)
2806cdf0e10cSrcweir {
2807cdf0e10cSrcweir     if ( m_aSmartTagTypesLB.GetEntryCount() < 1 )
2808cdf0e10cSrcweir         return 0;
2809cdf0e10cSrcweir 
2810cdf0e10cSrcweir     const sal_uInt16 nPos = m_aSmartTagTypesLB.GetSelectEntryPos();
2811cdf0e10cSrcweir     const SvLBoxEntry* pEntry = m_aSmartTagTypesLB.GetEntry(nPos);
2812cdf0e10cSrcweir     const ImplSmartTagLBUserData* pUserData = static_cast< ImplSmartTagLBUserData* >(pEntry->GetUserData());
2813cdf0e10cSrcweir     uno::Reference< smarttags::XSmartTagRecognizer > xRec = pUserData->mxRec;
2814cdf0e10cSrcweir     const sal_Int32 nSmartTagIdx = pUserData->mnSmartTagIdx;
2815cdf0e10cSrcweir 
2816cdf0e10cSrcweir     const lang::Locale aLocale( SvxCreateLocale( eLastDialogLanguage ) );
2817cdf0e10cSrcweir     if ( xRec->hasPropertyPage( nSmartTagIdx, aLocale ) )
2818cdf0e10cSrcweir         m_aPropertiesPB.Enable( sal_True );
2819cdf0e10cSrcweir     else
2820cdf0e10cSrcweir         m_aPropertiesPB.Enable( sal_False );
2821cdf0e10cSrcweir 
2822cdf0e10cSrcweir     return 0;
2823cdf0e10cSrcweir }
2824cdf0e10cSrcweir 
2825cdf0e10cSrcweir /** Propagates the current settings to the smart tag manager.
2826cdf0e10cSrcweir */
2827cdf0e10cSrcweir sal_Bool OfaSmartTagOptionsTabPage::FillItemSet( SfxItemSet& )
2828cdf0e10cSrcweir {
2829cdf0e10cSrcweir     SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
2830cdf0e10cSrcweir     SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
2831cdf0e10cSrcweir     SmartTagMgr* pSmartTagMgr = pOpt->pSmartTagMgr;
2832cdf0e10cSrcweir 
2833cdf0e10cSrcweir     // robust!
2834cdf0e10cSrcweir     if ( !pSmartTagMgr )
2835cdf0e10cSrcweir         return sal_False;
2836cdf0e10cSrcweir 
2837cdf0e10cSrcweir     sal_Bool bModifiedSmartTagTypes = sal_False;
2838cdf0e10cSrcweir     std::vector< rtl::OUString > aDisabledSmartTagTypes;
2839cdf0e10cSrcweir 
2840cdf0e10cSrcweir     const sal_uLong nCount = m_aSmartTagTypesLB.GetEntryCount();
2841cdf0e10cSrcweir 
2842cdf0e10cSrcweir     for ( sal_uInt16 i = 0; i < nCount; ++i )
2843cdf0e10cSrcweir     {
2844cdf0e10cSrcweir         const SvLBoxEntry* pEntry = m_aSmartTagTypesLB.GetEntry(i);
2845cdf0e10cSrcweir         const ImplSmartTagLBUserData* pUserData = static_cast< ImplSmartTagLBUserData* >(pEntry->GetUserData());
2846cdf0e10cSrcweir         const sal_Bool bChecked = m_aSmartTagTypesLB.IsChecked(i);
2847cdf0e10cSrcweir         const sal_Bool bIsCurrentlyEnabled = pSmartTagMgr->IsSmartTagTypeEnabled( pUserData->maSmartTagType );
2848cdf0e10cSrcweir 
2849cdf0e10cSrcweir         bModifiedSmartTagTypes = bModifiedSmartTagTypes || ( !bChecked != !bIsCurrentlyEnabled );
2850cdf0e10cSrcweir 
2851cdf0e10cSrcweir         if ( !bChecked )
2852cdf0e10cSrcweir             aDisabledSmartTagTypes.push_back( pUserData->maSmartTagType );
2853cdf0e10cSrcweir 
2854cdf0e10cSrcweir         delete pUserData;
2855cdf0e10cSrcweir     }
2856cdf0e10cSrcweir 
2857cdf0e10cSrcweir     const sal_Bool bModifiedRecognize = ( !m_aMainCB.IsChecked() != !pSmartTagMgr->IsLabelTextWithSmartTags() );
2858cdf0e10cSrcweir     if ( bModifiedSmartTagTypes || bModifiedRecognize )
2859cdf0e10cSrcweir     {
2860cdf0e10cSrcweir         bool bLabelTextWithSmartTags = m_aMainCB.IsChecked() ? true : false;
2861cdf0e10cSrcweir         pSmartTagMgr->WriteConfiguration( bModifiedRecognize     ? &bLabelTextWithSmartTags : 0,
2862cdf0e10cSrcweir                                           bModifiedSmartTagTypes ? &aDisabledSmartTagTypes : 0 );
2863cdf0e10cSrcweir     }
2864cdf0e10cSrcweir 
2865cdf0e10cSrcweir     return sal_True;
2866cdf0e10cSrcweir }
2867cdf0e10cSrcweir 
2868cdf0e10cSrcweir /** Sets the controls based on the current settings at SmartTagMgr.
2869cdf0e10cSrcweir */
2870cdf0e10cSrcweir void OfaSmartTagOptionsTabPage::Reset( const SfxItemSet&  )
2871cdf0e10cSrcweir {
2872cdf0e10cSrcweir     SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
2873cdf0e10cSrcweir     SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
2874cdf0e10cSrcweir     const SmartTagMgr* pSmartTagMgr = pOpt->pSmartTagMgr;
2875cdf0e10cSrcweir 
2876cdf0e10cSrcweir     // robust, should not happen!
2877cdf0e10cSrcweir     if ( !pSmartTagMgr )
2878cdf0e10cSrcweir         return;
2879cdf0e10cSrcweir 
2880cdf0e10cSrcweir     FillListBox( *pSmartTagMgr );
2881cdf0e10cSrcweir     m_aSmartTagTypesLB.SelectEntryPos( 0 );
2882cdf0e10cSrcweir     m_aMainCB.Check( pSmartTagMgr->IsLabelTextWithSmartTags() );
2883cdf0e10cSrcweir     CheckHdl( &m_aMainCB );
2884cdf0e10cSrcweir }
2885cdf0e10cSrcweir 
2886cdf0e10cSrcweir void OfaSmartTagOptionsTabPage::ActivatePage( const SfxItemSet& )
2887cdf0e10cSrcweir {
2888cdf0e10cSrcweir     ((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage( sal_False );
2889cdf0e10cSrcweir }
2890cdf0e10cSrcweir 
2891