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