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