1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_svx.hxx" 26 27 // include --------------------------------------------------------------- 28 #include <vcl/wrkwin.hxx> 29 #include <vcl/morebtn.hxx> 30 #include <vcl/msgbox.hxx> 31 #include <svl/slstitm.hxx> 32 #include <svl/itemiter.hxx> 33 #include <svl/style.hxx> 34 #include <unotools/searchopt.hxx> 35 #include <sfx2/dispatch.hxx> 36 #include <sfx2/objsh.hxx> 37 #include <sfx2/module.hxx> 38 #include <sfx2/viewsh.hxx> 39 #include <sfx2/basedlgs.hxx> 40 #include <svl/cjkoptions.hxx> 41 #include <com/sun/star/container/XNameAccess.hpp> 42 #include <com/sun/star/i18n/TransliterationModules.hpp> 43 #include <com/sun/star/frame/XDispatch.hpp> 44 #include <com/sun/star/frame/XDispatchProvider.hpp> 45 #include <com/sun/star/beans/PropertyValue.hpp> 46 #include <com/sun/star/frame/XModuleManager.hpp> 47 #include <comphelper/processfactory.hxx> 48 #include <svl/itempool.hxx> 49 #include <svl/intitem.hxx> 50 51 #include <sfx2/app.hxx> 52 #include <toolkit/unohlp.hxx> 53 54 #define _SVX_SRCHDLG_CXX 55 #include "svx/srchdlg.hxx" 56 57 #include <svx/dialogs.hrc> 58 #include <svx/svxitems.hrc> 59 #include "srchdlg.hrc" 60 61 62 #define ITEMID_SETITEM 0 63 64 #include <svl/srchitem.hxx> 65 #include <svx/pageitem.hxx> 66 #include "srchctrl.hxx" 67 #include <svx/dialmgr.hxx> 68 #include "svx/dlgutil.hxx" 69 #include <editeng/brshitem.hxx> 70 #include <tools/resary.hxx> 71 #include <svx/svxdlg.hxx> //CHINA001 72 73 //IAccessibility2 Impplementaton 2009----- 74 #ifndef _ACCESSIBLESVXFINDREPLACEDIALOG_HXX_ 75 #include <svx/AccessibleSvxFindReplaceDialog.hxx> 76 #endif 77 using namespace com::sun::star::uno; 78 using namespace com::sun::star::accessibility; 79 //-----IAccessibility2 Impplementaton 2009 80 81 #include <sfx2/layout-pre.hxx> 82 83 using namespace com::sun::star::i18n; 84 using namespace com::sun::star; 85 using namespace comphelper; 86 87 // ----------------------------------------------------------------------- 88 89 #define REMEMBER_SIZE 10 90 91 #define MODIFY_SEARCH 0x00000001 92 #define MODIFY_REPLACE 0x00000002 93 #define MODIFY_WORD 0x00000004 94 #define MODIFY_EXACT 0x00000008 95 #define MODIFY_BACKWARDS 0x00000010 96 #define MODIFY_SELECTION 0x00000020 97 #define MODIFY_REGEXP 0x00000040 98 #define MODIFY_LAYOUT 0x00000080 99 #define MODIFY_SIMILARITY 0x00000100 100 #define MODIFY_FORMULAS 0x00000200 101 #define MODIFY_VALUES 0x00000400 102 #define MODIFY_CALC_NOTES 0x00000800 103 #define MODIFY_ROWS 0x00001000 104 #define MODIFY_COLUMNS 0x00002000 105 #define MODIFY_ALLTABLES 0x00004000 106 #define MODIFY_NOTES 0x00008000 107 108 SV_IMPL_VARARR(SrchAttrItemList, SearchAttrItem); 109 110 //#define NotifyApp( nId ) 111 // rBindings.ExecuteSynchron( nId, (const SfxPoolItem**)&pSearchItem, 0L ) 112 113 #define GetCheckBoxValue( rBox ) \ 114 rBox.IsEnabled() ? rBox.IsChecked() : sal_False 115 116 #if ENABLE_LAYOUT 117 #undef SVX_RES 118 #define SVX_RES(x) #x 119 #endif /* ENABLE_LAYOUT */ 120 121 struct SearchDlg_Impl 122 { 123 FixedText aSearchFormats; 124 FixedText aReplaceFormats; 125 126 sal_Bool bMultiLineEdit : 1, 127 bSaveToModule : 1, 128 bFocusOnSearch : 1, 129 bDeltaCalculated : 1; 130 sal_uInt16* pRanges; 131 Timer aSelectionTimer; 132 133 uno::Reference< frame::XDispatch > xCommand1Dispatch; 134 uno::Reference< frame::XDispatch > xCommand2Dispatch; 135 util::URL aCommand1URL; 136 util::URL aCommand2URL; 137 138 #if ENABLE_LAYOUT 139 SearchDlg_Impl( layout::Context* pParent ) : 140 #else /* !ENABLE_LAYOUT */ 141 SearchDlg_Impl( Window* pParent ) : 142 #endif /* !ENABLE_LAYOUT */ 143 aSearchFormats ( pParent, SVX_RES( FT_SEARCH_FORMATS ) ), 144 aReplaceFormats ( pParent, SVX_RES( FT_REPLACE_FORMATS ) ), 145 bMultiLineEdit ( sal_False ), 146 bSaveToModule ( sal_True ), 147 bFocusOnSearch ( sal_True ), 148 bDeltaCalculated( sal_False ), 149 pRanges ( NULL ) 150 { 151 aCommand1URL.Complete = aCommand1URL.Main = rtl::OUString::createFromAscii("vnd.sun.search:SearchViaComponent1"); 152 aCommand1URL.Protocol = rtl::OUString::createFromAscii("vnd.sun.search:"); 153 aCommand1URL.Path = rtl::OUString::createFromAscii("SearchViaComponent1"); 154 aCommand2URL.Complete = aCommand2URL.Main = rtl::OUString::createFromAscii("vnd.sun.search:SearchViaComponent2"); 155 aCommand2URL.Protocol = rtl::OUString::createFromAscii("vnd.sun.search:"); 156 aCommand2URL.Path = rtl::OUString::createFromAscii("SearchViaComponent2"); 157 } 158 ~SearchDlg_Impl() { delete[] pRanges; } 159 }; 160 161 // ----------------------------------------------------------------------- 162 163 void ListToStrArr_Impl( sal_uInt16 nId, SvStringsDtor& rStrLst, ComboBox& rCBox ) 164 { 165 SfxStringListItem* pSrchItem = 166 (SfxStringListItem*)SFX_APP()->GetItem( nId ); 167 List* pLst = pSrchItem ? pSrchItem->GetList() : 0; 168 169 if ( pLst ) 170 for ( sal_uInt16 i = 0; i < pLst->Count(); ++i ) 171 { 172 String* pTmp = new String( *(String*)( pLst->GetObject(i) ) ); 173 rStrLst.Insert( pTmp, rStrLst.Count() ); 174 rCBox.InsertEntry( *pTmp ); 175 } 176 } 177 178 // ----------------------------------------------------------------------- 179 180 void StrArrToList_Impl( sal_uInt16 nId, const SvStringsDtor& rStrLst ) 181 { 182 DBG_ASSERT( rStrLst.Count(), "vorher abpruefen!!" ); 183 List aLst; 184 185 for ( sal_uInt16 i = 0; i < rStrLst.Count(); ++i ) 186 aLst.Insert( rStrLst[ i ], LIST_APPEND ); 187 188 SFX_APP()->PutItem( SfxStringListItem( nId, &aLst ) ); 189 } 190 191 // class SearchAttrItemList ---------------------------------------------- 192 193 SearchAttrItemList::SearchAttrItemList( const SearchAttrItemList& rList ) : 194 195 SrchAttrItemList( (sal_uInt8)rList.Count() ) 196 197 { 198 SrchAttrItemList::Insert( &rList, 0 ); 199 SearchAttrItem* _pData = (SearchAttrItem*)GetData(); 200 201 for ( sal_uInt16 i = Count(); i; --i, ++_pData ) 202 if ( !IsInvalidItem( _pData->pItem ) ) 203 _pData->pItem = _pData->pItem->Clone(); 204 } 205 206 // ----------------------------------------------------------------------- 207 208 SearchAttrItemList::~SearchAttrItemList() 209 { 210 Clear(); 211 } 212 213 // ----------------------------------------------------------------------- 214 215 void SearchAttrItemList::Put( const SfxItemSet& rSet ) 216 { 217 if ( !rSet.Count() ) 218 return; 219 220 SfxItemPool* pPool = rSet.GetPool(); 221 SfxItemIter aIter( rSet ); 222 SearchAttrItem aItem; 223 const SfxPoolItem* pItem = aIter.GetCurItem(); 224 sal_uInt16 nWhich; 225 226 while ( sal_True ) 227 { 228 // nur testen, ob vorhanden ist ? 229 if( IsInvalidItem( pItem ) ) 230 { 231 nWhich = rSet.GetWhichByPos( aIter.GetCurPos() ); 232 aItem.pItem = (SfxPoolItem*)pItem; 233 } 234 else 235 { 236 nWhich = pItem->Which(); 237 aItem.pItem = pItem->Clone(); 238 } 239 240 aItem.nSlot = pPool->GetSlotId( nWhich ); 241 Insert( aItem ); 242 243 if ( aIter.IsAtEnd() ) 244 break; 245 pItem = aIter.NextItem(); 246 } 247 } 248 249 // ----------------------------------------------------------------------- 250 251 SfxItemSet& SearchAttrItemList::Get( SfxItemSet& rSet ) 252 { 253 SfxItemPool* pPool = rSet.GetPool(); 254 SearchAttrItem* _pData = (SearchAttrItem*)GetData(); 255 256 for ( sal_uInt16 i = Count(); i; --i, ++_pData ) 257 if ( IsInvalidItem( _pData->pItem ) ) 258 rSet.InvalidateItem( pPool->GetWhich( _pData->nSlot ) ); 259 else 260 rSet.Put( *_pData->pItem ); 261 return rSet; 262 } 263 264 // ----------------------------------------------------------------------- 265 266 void SearchAttrItemList::Clear() 267 { 268 SearchAttrItem* _pData = (SearchAttrItem*)GetData(); 269 270 for ( sal_uInt16 i = Count(); i; --i, ++_pData ) 271 if ( !IsInvalidItem( _pData->pItem ) ) 272 delete _pData->pItem; 273 SrchAttrItemList::Remove( 0, Count() ); 274 } 275 276 // ----------------------------------------------------------------------- 277 278 // l"oscht die Pointer auf die Items 279 void SearchAttrItemList::Remove( sal_uInt16 nPos, sal_uInt16 nLen ) 280 { 281 if ( nPos + nLen > Count() ) 282 nLen = Count() - nPos; 283 SearchAttrItem* _pData = (SearchAttrItem*)GetData() + nPos; 284 285 for ( sal_uInt16 n = nLen; n; --n, ++_pData ) 286 if ( !IsInvalidItem( _pData->pItem ) ) 287 delete _pData->pItem; 288 289 SrchAttrItemList::Remove( nPos, nLen ); 290 } 291 292 #if ENABLE_LAYOUT 293 #undef SfxModelessDialog 294 #define SfxModelessDialog(bindings, child, parent, id) SfxDialog (parent, "find-and-replace.xml", id, bindings, child) 295 #define SVX_RES_PLAIN(x) ResId (x, DIALOG_MGR ()) 296 #define THIS_SVX_RES(x) this, #x 297 #else /* !ENABLE_LAYOUT */ 298 #define SVX_RES_PLAIN SVX_RES 299 #define THIS_SVX_RES SVX_RES 300 #endif /* !ENABLE_LAYOUT */ 301 302 #undef INI_LIST 303 #define INI_LIST() \ 304 mpDocWin (NULL), \ 305 mbSuccess (sal_False), \ 306 aSearchText ( this, SVX_RES( FT_SEARCH ) ), \ 307 aSearchLB ( this, SVX_RES( ED_SEARCH ) ), \ 308 aSearchTmplLB ( this, SVX_RES( LB_SEARCH ) ), \ 309 aSearchAttrText ( this, SVX_RES( FT_SEARCH_ATTR ) ), \ 310 aReplaceText ( this, SVX_RES( FT_REPLACE ) ), \ 311 aReplaceLB ( this, SVX_RES( ED_REPLACE ) ), \ 312 aReplaceTmplLB ( this, SVX_RES( LB_REPLACE ) ), \ 313 aReplaceAttrText( this, SVX_RES( FT_REPLACE_ATTR ) ), \ 314 aSearchBtn ( this, SVX_RES( BTN_SEARCH ) ), \ 315 aSearchAllBtn ( this, SVX_RES( BTN_SEARCH_ALL ) ), \ 316 aSearchCmdLine ( this, SVX_RES( FL_SEARCH_COMMAND ) ), \ 317 aReplaceBtn ( this, SVX_RES( BTN_REPLACE ) ), \ 318 aReplaceAllBtn ( this, SVX_RES( BTN_REPLACE_ALL ) ), \ 319 aSearchComponentFL( this, SVX_RES( FL_SEARCH_COMPONENT ) ), \ 320 aSearchComponent1PB( this, SVX_RES( BTN_COMPONENT_1 ) ), \ 321 aSearchComponent2PB( this, SVX_RES( BTN_COMPONENT_2 ) ), \ 322 aMatchCaseCB ( this, SVX_RES( CB_MATCH_CASE ) ), \ 323 aWordBtn ( this, SVX_RES( CB_WHOLE_WORDS ) ), \ 324 aButtonsFL ( this, SVX_RES( FL_BUTTONS ) ), \ 325 pMoreBtn ( new MoreButton( this, SVX_RES( BTN_MORE ) ) ), \ 326 aHelpBtn ( this, SVX_RES( BTN_HELP ) ), \ 327 aCloseBtn ( this, SVX_RES( BTN_CLOSE ) ), \ 328 aOptionsFL ( this, SVX_RES( FL_OPTIONS ) ), \ 329 aSelectionBtn ( this, SVX_RES( CB_SELECTIONS ) ), \ 330 aBackwardsBtn ( this, SVX_RES( CB_BACKWARDS ) ), \ 331 aRegExpBtn ( this, SVX_RES( CB_REGEXP ) ), \ 332 aSimilarityBox ( this, SVX_RES( CB_SIMILARITY) ), \ 333 aSimilarityBtn ( this, SVX_RES( PB_SIMILARITY) ), \ 334 aLayoutBtn ( this, SVX_RES( CB_LAYOUTS ) ), \ 335 aNotesBtn ( this, SVX_RES( CB_NOTES ) ), \ 336 aJapMatchFullHalfWidthCB( this, SVX_RES( CB_JAP_MATCH_FULL_HALF_WIDTH ) ),\ 337 aJapOptionsCB ( this, SVX_RES( CB_JAP_SOUNDS_LIKE ) ), \ 338 aJapOptionsBtn ( this, SVX_RES( PB_JAP_OPTIONS ) ), \ 339 aAttributeBtn ( this, SVX_RES( BTN_ATTRIBUTE ) ), \ 340 aFormatBtn ( this, SVX_RES( BTN_FORMAT ) ), \ 341 aNoFormatBtn ( this, SVX_RES( BTN_NOFORMAT ) ), \ 342 aCalcFL ( this, SVX_RES( FL_CALC ) ), \ 343 aCalcSearchInFT ( this, SVX_RES( FT_CALC_SEARCHIN ) ), \ 344 aCalcSearchInLB ( this, SVX_RES( LB_CALC_SEARCHIN ) ), \ 345 aCalcSearchDirFT( this, SVX_RES( FT_CALC_SEARCHDIR ) ), \ 346 aRowsBtn ( this, SVX_RES( RB_CALC_ROWS ) ), \ 347 aColumnsBtn ( this, SVX_RES( RB_CALC_COLUMNS ) ), \ 348 aAllSheetsCB ( this, SVX_RES( CB_ALL_SHEETS ) ), \ 349 rBindings ( rBind ), \ 350 bWriter ( sal_False ), \ 351 bSearch ( sal_True ), \ 352 bFormat ( sal_False ), \ 353 nOptions ( USHRT_MAX ), \ 354 bSet ( sal_False ), \ 355 bReadOnly ( sal_False ), \ 356 bConstruct ( sal_True ), \ 357 nModifyFlag ( 0 ), \ 358 aCalcStr ( THIS_SVX_RES( STR_WORDCALC ) ), \ 359 pImpl ( NULL ), \ 360 pSearchList ( NULL ), \ 361 pReplaceList ( new SearchAttrItemList ), \ 362 pSearchItem ( NULL ), \ 363 pSearchController ( NULL ), \ 364 pOptionsController ( NULL ), \ 365 pFamilyController ( NULL ), \ 366 pSearchSetController ( NULL ), \ 367 pReplaceSetController ( NULL ), \ 368 nTransliterationFlags ( 0x00000000 ) 369 370 // class SvxSearchDialog ------------------------------------------------- 371 372 SvxSearchDialog::SvxSearchDialog( Window* pParent, SfxBindings& rBind ) : 373 374 SfxModelessDialog( &rBind, NULL, pParent, SVX_RES( RID_SVXDLG_SEARCH ) ), 375 376 INI_LIST() 377 378 { 379 Construct_Impl(); 380 } 381 382 // ----------------------------------------------------------------------- 383 384 SvxSearchDialog::SvxSearchDialog( Window* pParent, SfxChildWindow* pChildWin, SfxBindings& rBind ) : 385 386 SfxModelessDialog( &rBind, pChildWin, pParent, SVX_RES( RID_SVXDLG_SEARCH ) ), 387 388 INI_LIST() 389 390 { 391 Construct_Impl(); 392 } 393 394 #undef INI_LIST 395 #if ENABLE_LAYOUT 396 #undef SVX_RES 397 #define SVX_RES(x) ResId (x, DIALOG_MGR ()) 398 #endif 399 400 // ----------------------------------------------------------------------- 401 402 SvxSearchDialog::~SvxSearchDialog() 403 { 404 Hide(); 405 406 rBindings.EnterRegistrations(); 407 delete pSearchController; 408 delete pOptionsController; 409 delete pFamilyController; 410 delete pSearchSetController; 411 delete pReplaceSetController; 412 rBindings.LeaveRegistrations(); 413 414 delete pSearchItem; 415 delete pImpl; 416 delete pSearchList; 417 delete pReplaceList; 418 delete pMoreBtn; 419 } 420 421 #if ENABLE_LAYOUT 422 #undef Window 423 #define Window layout::Window 424 #endif /* ENABLE_LAYOUT */ 425 426 void lcl_MoveDown( Window& rWindow, sal_Int32 nOffset ) 427 { 428 Point aPos(rWindow.GetPosPixel()); 429 aPos.Y() += nOffset; 430 rWindow.SetPosPixel(aPos); 431 } 432 433 void SvxSearchDialog::Construct_Impl() 434 { 435 #if ENABLE_LAYOUT 436 SetHelpId (".uno:SearchDialog"); 437 #endif /* ENABLE_LAYOUT */ 438 439 // temporary to avoid incompatibility 440 pImpl = new SearchDlg_Impl( this ); 441 #if !ENABLE_LAYOUT 442 pImpl->aSelectionTimer.SetTimeout( 500 ); 443 pImpl->aSelectionTimer.SetTimeoutHdl( 444 LINK( this, SvxSearchDialog, TimeoutHdl_Impl ) ); 445 #endif /* !ENABLE_LAYOUT */ 446 EnableControls_Impl( 0 ); 447 448 // alten Text des aWordBtn's merken 449 aCalcStr += sal_Unicode('#'); 450 aCalcStr += aWordBtn.GetText(); 451 452 aLayoutStr = SVX_RESSTR( RID_SVXSTR_SEARCH_STYLES ); 453 aStylesStr = aLayoutBtn.GetText(); 454 455 // gemerkte Such-Strings von der Applikation holen 456 ListToStrArr_Impl( SID_SEARCHDLG_SEARCHSTRINGS, 457 aSearchStrings, aSearchLB ); 458 ListToStrArr_Impl( SID_SEARCHDLG_REPLACESTRINGS, 459 aReplaceStrings, aReplaceLB ); 460 461 pMoreBtn->SetMoreText( String( SVX_RES( STR_MORE_BTN ) ) ); 462 pMoreBtn->SetLessText( String( SVX_RES( STR_LESS_BTN ) ) ); 463 464 FreeResource(); 465 InitControls_Impl(); 466 467 // Attribut-Sets nur einmal im Ctor() besorgen 468 const SfxPoolItem* ppArgs[] = { pSearchItem, 0 }; 469 const SvxSetItem* pSrchSetItem = 470 (const SvxSetItem*) rBindings.GetDispatcher()->Execute( FID_SEARCH_SEARCHSET, SFX_CALLMODE_SLOT, ppArgs ); 471 472 if ( pSrchSetItem ) 473 InitAttrList_Impl( &pSrchSetItem->GetItemSet(), 0 ); 474 475 const SvxSetItem* pReplSetItem = 476 (const SvxSetItem*)rBindings.GetDispatcher()->Execute( FID_SEARCH_REPLACESET, SFX_CALLMODE_SLOT, ppArgs ); 477 478 if ( pReplSetItem ) 479 InitAttrList_Impl( 0, &pReplSetItem->GetItemSet() ); 480 481 // Controller erzeugen und gleich aktualisieren 482 rBindings.EnterRegistrations(); 483 pSearchController = 484 new SvxSearchController( SID_SEARCH_ITEM, rBindings, *this ); 485 pOptionsController = 486 new SvxSearchController( SID_SEARCH_OPTIONS, rBindings, *this ); 487 rBindings.LeaveRegistrations(); 488 rBindings.GetDispatcher()->Execute( FID_SEARCH_ON, SFX_CALLMODE_SLOT, ppArgs ); 489 pImpl->aSelectionTimer.Start(); 490 491 492 SvtCJKOptions aCJKOptions; 493 if(!aCJKOptions.IsJapaneseFindEnabled()) 494 { 495 aJapOptionsCB.Check( sal_False ); 496 aJapOptionsCB.Hide(); 497 aJapOptionsBtn.Hide(); 498 } 499 if(!aCJKOptions.IsCJKFontEnabled()) 500 { 501 aJapMatchFullHalfWidthCB.Hide(); 502 } 503 504 aSimilarityBtn.SetAccessibleRelationLabeledBy(&aSimilarityBox); 505 aSimilarityBtn.SetAccessibleRelationMemberOf(&aOptionsFL); 506 aJapOptionsBtn.SetAccessibleRelationLabeledBy(&aJapOptionsCB); 507 aJapOptionsBtn.SetAccessibleRelationMemberOf(&aOptionsFL); 508 aRowsBtn.SetAccessibleRelationMemberOf(&aCalcSearchDirFT); 509 aColumnsBtn.SetAccessibleRelationMemberOf(&aCalcSearchDirFT); 510 511 //component extension - show component search buttons if the commands 512 // vnd.sun.star::SearchViaComponent1 and 2 are supported 513 const uno::Reference< frame::XFrame >xFrame = rBindings.GetActiveFrame(); 514 const uno::Reference< frame::XDispatchProvider > xDispatchProv(xFrame, uno::UNO_QUERY); 515 rtl::OUString sTarget = rtl::OUString::createFromAscii("_self"); 516 517 bool bSearchComponent1 = false; 518 bool bSearchComponent2 = false; 519 if(xDispatchProv.is() && 520 (pImpl->xCommand1Dispatch = xDispatchProv->queryDispatch(pImpl->aCommand1URL, sTarget, 0)).is()) 521 { 522 bSearchComponent1 = true; 523 } 524 if(xDispatchProv.is() && 525 (pImpl->xCommand2Dispatch = xDispatchProv->queryDispatch(pImpl->aCommand2URL, sTarget, 0)).is()) 526 { 527 bSearchComponent2 = true; 528 } 529 530 if( bSearchComponent1 || bSearchComponent2 ) 531 { 532 //get the labels of the FixedLine and the buttons 533 // "/org.openoffice.Office.Common/SearchOptions/ComponentSearchGroupLabel 534 // "/org.openoffice.Office.Common/SearchOptions/ComponentSearchCommandLabel1 535 // "/org.openoffice.Office.Common/SearchOptions/ComponentSearchCommandLabel2 536 try 537 { 538 uno::Reference< lang::XMultiServiceFactory > xMgr = getProcessServiceFactory(); 539 uno::Reference< lang::XMultiServiceFactory > xConfigurationProvider(xMgr->createInstance( 540 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationProvider"))), 541 uno::UNO_QUERY); 542 uno::Sequence< uno::Any > aArgs(1); 543 ::rtl::OUString sPath(RTL_CONSTASCII_USTRINGPARAM( "/org.openoffice.Office.Common/SearchOptions/")); 544 aArgs[0] <<= sPath; 545 546 uno::Reference< uno::XInterface > xIFace = xConfigurationProvider->createInstanceWithArguments( 547 ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationUpdateAccess")), 548 aArgs); 549 uno::Reference< container::XNameAccess> xDirectAccess(xIFace, uno::UNO_QUERY); 550 if(xDirectAccess.is()) 551 { 552 ::rtl::OUString sTemp; 553 ::rtl::OUString sProperty(RTL_CONSTASCII_USTRINGPARAM( "ComponentSearchGroupLabel")); 554 uno::Any aRet = xDirectAccess->getByName(sProperty); 555 aRet >>= sTemp; 556 aSearchComponentFL.SetText( sTemp ); 557 aRet = xDirectAccess->getByName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "ComponentSearchCommandLabel1"))); 558 aRet >>= sTemp; 559 aSearchComponent1PB.SetText( sTemp ); 560 aRet = xDirectAccess->getByName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "ComponentSearchCommandLabel2"))); 561 aRet >>= sTemp; 562 aSearchComponent2PB.SetText( sTemp ); 563 } 564 } 565 catch(uno::Exception&){} 566 567 if(aSearchComponent1PB.GetText().Len() && bSearchComponent1 ) 568 { 569 aSearchComponentFL.Show(); 570 aSearchComponent1PB.Show(); 571 } 572 if( aSearchComponent2PB.GetText().Len() ) 573 { 574 if(!aSearchComponent1PB.IsVisible()) 575 { 576 aSearchComponent2PB.SetPosPixel(aSearchComponent1PB.GetPosPixel()); 577 } 578 aSearchComponentFL.Show(); 579 aSearchComponent2PB.Show(); 580 } 581 if( aSearchComponentFL.IsVisible() && aSearchComponent1PB.IsVisible() ) 582 { 583 584 //dialog must be resized 585 Size aDlgSize(GetSizePixel()); 586 sal_Int32 nOffset = aSearchCmdLine.GetPosPixel().Y() - aSearchAllBtn.GetPosPixel().Y() 587 - aButtonsFL.GetPosPixel().Y() + aSearchComponent2PB.GetPosPixel().Y(); 588 589 aDlgSize.Height() += nOffset; 590 Window* aWindows[] = 591 { 592 &aOptionsFL, 593 &aSelectionBtn, 594 &aBackwardsBtn, 595 &aRegExpBtn, 596 &aSimilarityBox, 597 &aSimilarityBtn, 598 &aLayoutBtn, 599 &aNotesBtn, 600 &aJapMatchFullHalfWidthCB, 601 &aJapOptionsCB, 602 &aJapOptionsBtn, 603 &aAttributeBtn, 604 &aFormatBtn, 605 &aNoFormatBtn, 606 &aCalcFL, 607 &aCalcSearchInFT, 608 &aCalcSearchInLB, 609 &aCalcSearchDirFT, 610 &aRowsBtn, 611 &aColumnsBtn, 612 &aAllSheetsCB, 613 &aButtonsFL, 614 &aHelpBtn, 615 &aCloseBtn, 616 pMoreBtn, 617 0 618 }; 619 sal_Int32 nWindow = 0; 620 do 621 { 622 lcl_MoveDown( *aWindows[nWindow], nOffset ); 623 } 624 while(aWindows[++nWindow]); 625 626 SetSizePixel(aDlgSize); 627 } 628 } 629 } 630 631 // ----------------------------------------------------------------------- 632 633 sal_Bool SvxSearchDialog::Close() 634 { 635 // remember strings speichern 636 if ( aSearchStrings.Count() ) 637 StrArrToList_Impl( SID_SEARCHDLG_SEARCHSTRINGS, aSearchStrings ); 638 639 if ( aReplaceStrings.Count() ) 640 StrArrToList_Impl( SID_SEARCHDLG_REPLACESTRINGS, aReplaceStrings ); 641 642 // save settings to configuration 643 SvtSearchOptions aOpt; 644 aOpt.SetWholeWordsOnly ( aWordBtn .IsChecked() ); 645 aOpt.SetBackwards ( aBackwardsBtn .IsChecked() ); 646 aOpt.SetUseRegularExpression ( aRegExpBtn .IsChecked() ); 647 //aOpt.SetMatchCase ( aMatchCaseCB .IsChecked() ); 648 aOpt.SetSearchForStyles ( aLayoutBtn .IsChecked() ); 649 aOpt.SetSimilaritySearch ( aSimilarityBox .IsChecked() ); 650 //aOpt.SetMatchFullHalfWidthForms ( !aJapMatchFullHalfWidthCB.IsChecked() ); 651 aOpt.SetUseAsianOptions ( aJapOptionsCB .IsChecked() ); 652 aOpt.SetNotes ( aNotesBtn .IsChecked() ); 653 654 const SfxPoolItem* ppArgs[] = { pSearchItem, 0 }; 655 rBindings.GetDispatcher()->Execute( FID_SEARCH_OFF, SFX_CALLMODE_SLOT, ppArgs ); 656 rBindings.Execute( SID_SEARCH_DLG ); 657 658 return sal_True; 659 } 660 661 // ----------------------------------------------------------------------- 662 663 sal_Int32 SvxSearchDialog::GetTransliterationFlags() const 664 { 665 if (!aMatchCaseCB.IsChecked()) 666 nTransliterationFlags |= TransliterationModules_IGNORE_CASE; 667 else 668 nTransliterationFlags &= ~TransliterationModules_IGNORE_CASE; 669 if ( !aJapMatchFullHalfWidthCB.IsChecked()) 670 nTransliterationFlags |= TransliterationModules_IGNORE_WIDTH; 671 else 672 nTransliterationFlags &= ~TransliterationModules_IGNORE_WIDTH; 673 return nTransliterationFlags; 674 } 675 676 // ----------------------------------------------------------------------- 677 678 void SvxSearchDialog::ApplyTransliterationFlags_Impl( sal_Int32 nSettings ) 679 { 680 nTransliterationFlags = nSettings; 681 sal_Bool bVal = 0 != (nSettings & TransliterationModules_IGNORE_CASE); 682 aMatchCaseCB .Check(!bVal ); 683 bVal = 0 != (nSettings & TransliterationModules_IGNORE_WIDTH); 684 aJapMatchFullHalfWidthCB.Check( !bVal ); 685 } 686 687 // ----------------------------------------------------------------------- 688 689 void SvxSearchDialog::Activate() 690 { 691 // apply possible transliteration changes of the SvxSearchItem member 692 DBG_ASSERT( pSearchItem, "SearchItem missing" ); 693 if (pSearchItem) 694 { 695 aMatchCaseCB .Check( pSearchItem->GetExact() ); 696 aJapMatchFullHalfWidthCB.Check( !pSearchItem->IsMatchFullHalfWidthForms() ); 697 } 698 } 699 700 // ----------------------------------------------------------------------- 701 702 void SvxSearchDialog::InitControls_Impl() 703 { 704 // CaseSensitives AutoComplete 705 aSearchLB.EnableAutocomplete( sal_True, sal_True ); 706 aSearchLB.Show(); 707 aReplaceLB.EnableAutocomplete( sal_True, sal_True ); 708 aReplaceLB.Show(); 709 710 aFormatBtn.Disable(); 711 aAttributeBtn.Disable(); 712 713 aSearchLB.SetModifyHdl( LINK( this, SvxSearchDialog, ModifyHdl_Impl ) ); 714 aReplaceLB.SetModifyHdl( LINK( this, SvxSearchDialog, ModifyHdl_Impl ) ); 715 716 Link aLink = LINK( this, SvxSearchDialog, FocusHdl_Impl ); 717 aSearchLB.SetGetFocusHdl( aLink ); 718 pImpl->aSearchFormats.SetGetFocusHdl( aLink ); 719 720 aReplaceLB.SetGetFocusHdl( aLink ); 721 pImpl->aReplaceFormats.SetGetFocusHdl( aLink ); 722 723 aLink = LINK( this, SvxSearchDialog, LoseFocusHdl_Impl ); 724 aSearchLB.SetLoseFocusHdl( aLink ); 725 aReplaceLB.SetLoseFocusHdl( aLink ); 726 727 aSearchTmplLB.SetLoseFocusHdl( aLink ); 728 aReplaceTmplLB.SetLoseFocusHdl( aLink ); 729 730 aLink = LINK( this, SvxSearchDialog, CommandHdl_Impl ); 731 aSearchBtn.SetClickHdl( aLink ); 732 aSearchAllBtn.SetClickHdl( aLink ); 733 aReplaceBtn.SetClickHdl( aLink ); 734 aReplaceAllBtn.SetClickHdl( aLink ); 735 aCloseBtn.SetClickHdl( aLink ); 736 aSimilarityBtn.SetClickHdl( aLink ); 737 aJapOptionsBtn.SetClickHdl( aLink ); 738 aSearchComponent1PB.SetClickHdl( aLink ); 739 aSearchComponent2PB.SetClickHdl( aLink ); 740 741 aLink = LINK( this, SvxSearchDialog, FlagHdl_Impl ); 742 aWordBtn.SetClickHdl( aLink ); 743 aSelectionBtn.SetClickHdl( aLink ); 744 aMatchCaseCB.SetClickHdl( aLink ); 745 aRegExpBtn.SetClickHdl( aLink ); 746 aBackwardsBtn.SetClickHdl( aLink ); 747 aNotesBtn.SetClickHdl( aLink ); 748 aSimilarityBox.SetClickHdl( aLink ); 749 aJapOptionsCB.SetClickHdl( aLink ); 750 aJapMatchFullHalfWidthCB.SetClickHdl( aLink ); 751 752 aLayoutBtn.SetClickHdl( LINK( this, SvxSearchDialog, TemplateHdl_Impl ) ); 753 aFormatBtn.SetClickHdl( LINK( this, SvxSearchDialog, FormatHdl_Impl ) ); 754 aNoFormatBtn.SetClickHdl( 755 LINK( this, SvxSearchDialog, NoFormatHdl_Impl ) ); 756 aAttributeBtn.SetClickHdl( 757 LINK( this, SvxSearchDialog, AttributeHdl_Impl ) ); 758 759 // check if buttontext is to wide 760 long nTxtW = Max( pMoreBtn->GetCtrlTextWidth( pMoreBtn->GetMoreText() ), 761 pMoreBtn->GetCtrlTextWidth( pMoreBtn->GetLessText() ) ); 762 nTxtW += ( pMoreBtn->GetTextHeight() * 2 ); // add image size + offset 763 long nBtnW = pMoreBtn->GetSizePixel().Width(); 764 if ( nTxtW > nBtnW ) 765 { 766 // broaden the button 767 const long nMinDelta = 10; 768 long nDelta = Max( nTxtW - nBtnW, nMinDelta ); 769 Size aNewSize = pMoreBtn->GetSizePixel(); 770 aNewSize.Width() += nDelta; 771 pMoreBtn->SetSizePixel( aNewSize ); 772 } 773 } 774 775 // ----------------------------------------------------------------------- 776 777 void SvxSearchDialog::CalculateDelta_Impl() 778 { 779 DBG_ASSERT( pSearchItem, "no search item" ); 780 781 bool bDrawApp = false; 782 bool bCalcApp = false; 783 bool bWriterApp = false; 784 bool bImpressApp = false; 785 const uno::Reference< frame::XFrame > xFrame = rBindings.GetActiveFrame(); 786 uno::Reference< frame::XModuleManager > xModuleManager( 787 ::comphelper::getProcessServiceFactory()->createInstance( 788 DEFINE_CONST_UNICODE("com.sun.star.frame.ModuleManager") ), uno::UNO_QUERY ); 789 if ( xModuleManager.is() ) 790 { 791 try 792 { 793 ::rtl::OUString aModuleIdentifier = xModuleManager->identify( xFrame ); 794 bCalcApp = aModuleIdentifier.equalsAscii( "com.sun.star.sheet.SpreadsheetDocument" ); 795 bDrawApp = aModuleIdentifier.equalsAscii( "com.sun.star.drawing.DrawingDocument" ); 796 bImpressApp = aModuleIdentifier.equalsAscii( "com.sun.star.presentation.PresentationDocument" ); 797 bWriterApp = aModuleIdentifier.equalsAscii( "com.sun.star.text.TextDocument" ); 798 } 799 catch ( uno::Exception& ) 800 { 801 } 802 } 803 804 if ( pImpl->bDeltaCalculated ) 805 return; 806 else 807 pImpl->bDeltaCalculated = sal_True; 808 809 sal_uIntPtr nDelta = 187, nOffset = 0; 810 SvtCJKOptions aCJKOptions; 811 812 pMoreBtn->AddWindow( &aOptionsFL ); 813 if ( !bDrawApp ) 814 pMoreBtn->AddWindow( &aLayoutBtn ); 815 if ( bWriterApp ) 816 pMoreBtn->AddWindow( &aNotesBtn ); 817 else 818 { 819 aNotesBtn.Hide(); 820 nOffset = !bDrawApp ? 13 : 0; 821 } 822 pMoreBtn->AddWindow( &aBackwardsBtn ); 823 if ( !bDrawApp ) 824 pMoreBtn->AddWindow( &aRegExpBtn ); 825 pMoreBtn->AddWindow( &aSimilarityBox ); 826 pMoreBtn->AddWindow( &aSimilarityBtn ); 827 pMoreBtn->AddWindow( &aSelectionBtn ); 828 829 if ( aCJKOptions.IsCJKFontEnabled() ) 830 pMoreBtn->AddWindow( &aJapMatchFullHalfWidthCB ); 831 else 832 nOffset += 13; 833 if ( aCJKOptions.IsJapaneseFindEnabled() ) 834 { 835 pMoreBtn->AddWindow( &aJapOptionsCB ); 836 pMoreBtn->AddWindow( &aJapOptionsBtn ); 837 } 838 else 839 nOffset += 17; 840 841 if ( bWriter ) 842 { 843 pMoreBtn->AddWindow( &aAttributeBtn ); 844 pMoreBtn->AddWindow( &aFormatBtn ); 845 pMoreBtn->AddWindow( &aNoFormatBtn ); 846 } 847 848 if (bDrawApp || bImpressApp) 849 { 850 // "Find All" button is hidden--align "Find" vertically to the 851 // search listbox 852 Point aNewPt(aSearchBtn.GetPosPixel()); 853 const Size aBtnSz(aSearchBtn.GetSizePixel()); 854 const Size aLBSz(aSearchLB.GetSizePixel()); 855 const int nOff((aLBSz.Height() - aBtnSz.Height()) / 2); 856 aNewPt.Y() = aSearchLB.GetPosPixel().Y() + nOff; 857 aSearchBtn.SetPosPixel(aNewPt); 858 } 859 860 if ( bDrawApp ) 861 { 862 // Draw App: "Regular expressions" and "Search for Styles" check boxes are hidden 863 // so align the other buttons 864 const long nAppFontHeight = 13; // checkbox height + space between in APPFONT 865 long nH = LogicToPixel( Size( 0, nAppFontHeight ), MAP_APPFONT ).Height(); 866 867 Point aNewPos = aSimilarityBox.GetPosPixel(); 868 aNewPos.Y() -= nH; 869 aSimilarityBox.SetPosPixel( aNewPos ); 870 aNewPos = aSimilarityBtn.GetPosPixel(); 871 aNewPos.Y() -= nH; 872 aSimilarityBtn.SetPosPixel( aNewPos ); 873 nH *= 3; 874 nOffset += ( 3 * nAppFontHeight ); 875 if ( aCJKOptions.IsCJKFontEnabled() ) 876 { 877 aNewPos = aJapMatchFullHalfWidthCB.GetPosPixel(); 878 aNewPos.Y() -= nH; 879 aJapMatchFullHalfWidthCB.SetPosPixel( aNewPos ); 880 } 881 if ( aCJKOptions.IsJapaneseFindEnabled() ) 882 { 883 aNewPos = aJapOptionsCB.GetPosPixel(); 884 aNewPos.Y() -= nH; 885 aJapOptionsCB.SetPosPixel( aNewPos ); 886 aNewPos = aJapOptionsBtn.GetPosPixel(); 887 aNewPos.Y() -= nH; 888 aJapOptionsBtn.SetPosPixel( aNewPos ); 889 } 890 } 891 892 if ( bCalcApp || bImpressApp ) 893 { 894 Window* pWins[] = 895 { 896 &aCalcFL, &aCalcSearchInFT, &aCalcSearchInLB, &aCalcSearchDirFT, 897 &aRowsBtn, &aColumnsBtn, &aAllSheetsCB, &aJapMatchFullHalfWidthCB, 898 &aJapOptionsCB, &aJapOptionsBtn 899 }; 900 Window** pCurrent = pWins; 901 sal_uInt32 i = 0; 902 const sal_uInt32 nCalcCtrlCount = 7; 903 if ( nOffset > 0 ) 904 { 905 long nH = LogicToPixel( Size( 0, nOffset ), MAP_APPFONT ).Height(); 906 for ( i = 0; i < sizeof( pWins ) / sizeof( pWins[ 0 ] ); ++i, ++pCurrent ) 907 { 908 if ( ( bCalcApp && i < nCalcCtrlCount ) 909 || ( i == nCalcCtrlCount && aCJKOptions.IsCJKFontEnabled() ) 910 || ( i > nCalcCtrlCount && aCJKOptions.IsJapaneseFindEnabled() ) ) 911 { 912 Point aNewPos = (*pCurrent)->GetPosPixel(); 913 aNewPos.Y() -= nH; 914 (*pCurrent)->SetPosPixel( aNewPos ); 915 } 916 } 917 } 918 919 if ( bCalcApp) 920 { 921 pCurrent = pWins; 922 for ( i = 0; i < nCalcCtrlCount; ++i, ++pCurrent ) 923 pMoreBtn->AddWindow( *pCurrent ); 924 } 925 else 926 nOffset += 64; 927 } 928 else 929 nOffset += 64; 930 931 pMoreBtn->SetDelta( nDelta - nOffset ); 932 pMoreBtn->Show(); 933 pMoreBtn->Enable(); 934 } 935 936 #if ENABLE_LAYOUT 937 #undef Window 938 #define Window ::Window 939 #endif /* ENABLE_LAYOUT */ 940 941 // ----------------------------------------------------------------------- 942 943 void SvxSearchDialog::Init_Impl( int bSearchPattern ) 944 { 945 DBG_ASSERT( pSearchItem, "SearchItem == 0" ); 946 bWriter = ( pSearchItem->GetAppFlag() == SVX_SEARCHAPP_WRITER ); 947 948 pImpl->bMultiLineEdit = sal_False; 949 950 if ( !pImpl->bMultiLineEdit ) 951 { 952 pImpl->aSearchFormats.Hide(); 953 aSearchAttrText.Show(); 954 pImpl->aReplaceFormats.Hide(); 955 aReplaceAttrText.Show(); 956 } 957 else 958 { 959 String aText = aSearchAttrText.GetText(); 960 aSearchAttrText.Hide(); 961 962 if ( aText.Len() ) 963 pImpl->aSearchFormats.SetText( aText ); 964 pImpl->aSearchFormats.Show(); 965 aText = aReplaceAttrText.GetText(); 966 aReplaceAttrText.Hide(); 967 968 if ( aText.Len() ) 969 pImpl->aReplaceFormats.SetText( aText ); 970 pImpl->aReplaceFormats.Show(); 971 } 972 973 if ( ( nModifyFlag & MODIFY_WORD ) == 0 ) 974 aWordBtn.Check( pSearchItem->GetWordOnly() ); 975 if ( ( nModifyFlag & MODIFY_EXACT ) == 0 ) 976 aMatchCaseCB.Check( pSearchItem->GetExact() ); 977 if ( ( nModifyFlag & MODIFY_BACKWARDS ) == 0 ) 978 aBackwardsBtn.Check( pSearchItem->GetBackward() ); 979 if ( ( nModifyFlag & MODIFY_NOTES ) == 0 ) 980 aNotesBtn.Check( pSearchItem->GetNotes() ); 981 if ( ( nModifyFlag & MODIFY_SELECTION ) == 0 ) 982 aSelectionBtn.Check( pSearchItem->GetSelection() ); 983 if ( ( nModifyFlag & MODIFY_REGEXP ) == 0 ) 984 aRegExpBtn.Check( pSearchItem->GetRegExp() ); 985 if ( ( nModifyFlag & MODIFY_LAYOUT ) == 0 ) 986 aLayoutBtn.Check( pSearchItem->GetPattern() ); 987 if (aNotesBtn.IsChecked()) 988 aLayoutBtn.Disable(); 989 aSimilarityBox.Check( pSearchItem->IsLevenshtein() ); 990 if( aJapOptionsCB.IsVisible() ) 991 aJapOptionsCB.Check( pSearchItem->IsUseAsianOptions() ); 992 ApplyTransliterationFlags_Impl( pSearchItem->GetTransliterationFlags() ); 993 994 CalculateDelta_Impl(); 995 996 bool bDraw = sal_False; 997 if ( pSearchItem->GetAppFlag() == SVX_SEARCHAPP_CALC ) 998 { 999 Link aLink = LINK( this, SvxSearchDialog, FlagHdl_Impl ); 1000 aCalcSearchInLB.SetSelectHdl( aLink ); 1001 aRowsBtn.SetClickHdl( aLink ); 1002 aColumnsBtn.SetClickHdl( aLink ); 1003 aAllSheetsCB.SetClickHdl( aLink ); 1004 1005 switch ( pSearchItem->GetCellType() ) 1006 { 1007 case SVX_SEARCHIN_FORMULA: 1008 if ( ( nModifyFlag & MODIFY_FORMULAS ) == 0 ) 1009 aCalcSearchInLB.SelectEntryPos( SVX_SEARCHIN_FORMULA ); 1010 break; 1011 1012 case SVX_SEARCHIN_VALUE: 1013 if ( ( nModifyFlag & MODIFY_VALUES ) == 0 ) 1014 aCalcSearchInLB.SelectEntryPos( SVX_SEARCHIN_VALUE ); 1015 break; 1016 1017 case SVX_SEARCHIN_NOTE: 1018 if ( ( nModifyFlag & MODIFY_CALC_NOTES ) == 0 ) 1019 aCalcSearchInLB.SelectEntryPos( SVX_SEARCHIN_NOTE ); 1020 break; 1021 } 1022 aWordBtn.SetText( aCalcStr.GetToken( 0, '#' ) ); 1023 1024 if ( pSearchItem->GetRowDirection() && 1025 ( nModifyFlag & MODIFY_ROWS ) == 0 ) 1026 aRowsBtn.Check(); 1027 else if ( !pSearchItem->GetRowDirection() && 1028 ( nModifyFlag & MODIFY_COLUMNS ) == 0 ) 1029 aColumnsBtn.Check(); 1030 1031 if ( ( nModifyFlag & MODIFY_ALLTABLES ) == 0 ) 1032 aAllSheetsCB.Check( pSearchItem->IsAllTables() ); 1033 1034 // nur im Writer Suche nach Formatierung 1035 aFormatBtn.Hide(); 1036 aNoFormatBtn.Hide(); 1037 aAttributeBtn.Hide(); 1038 } 1039 else 1040 { 1041 aWordBtn.SetText( aCalcStr.GetToken( 1, '#' ) ); 1042 1043 if ( pSearchItem->GetAppFlag() == SVX_SEARCHAPP_DRAW ) 1044 { 1045 aSearchAllBtn.Hide(); 1046 1047 aRegExpBtn.Hide(); 1048 aLayoutBtn.Hide(); 1049 1050 // nur im Writer Suche nach Formatierung 1051 aFormatBtn.Hide(); 1052 aNoFormatBtn.Hide(); 1053 aAttributeBtn.Hide(); 1054 bDraw = sal_True; 1055 } 1056 else 1057 { 1058 if ( !pSearchList ) 1059 { 1060 // Attribut-Sets besorgen, wenn noch nicht geschehen 1061 const SfxPoolItem* ppArgs[] = { pSearchItem, 0 }; 1062 const SvxSetItem* pSrchSetItem = 1063 (const SvxSetItem*)rBindings.GetDispatcher()->Execute( FID_SEARCH_SEARCHSET, SFX_CALLMODE_SLOT, ppArgs ); 1064 1065 if ( pSrchSetItem ) 1066 InitAttrList_Impl( &pSrchSetItem->GetItemSet(), 0 ); 1067 1068 const SvxSetItem* pReplSetItem = 1069 (const SvxSetItem*)rBindings.GetDispatcher()->Execute( FID_SEARCH_REPLACESET, SFX_CALLMODE_SLOT, ppArgs ); 1070 1071 if ( pReplSetItem ) 1072 InitAttrList_Impl( 0, &pReplSetItem->GetItemSet() ); 1073 } 1074 /* 1075 aFormatBtn.Show(); 1076 aNoFormatBtn.Show(); 1077 aAttributeBtn.Show(); 1078 */ 1079 } 1080 // pMoreBtn->SetState( sal_False ); 1081 // pMoreBtn->Hide(); 1082 } 1083 1084 if ( 0 && !bDraw ) //!!!!! 1085 { 1086 aRegExpBtn.Show(); 1087 aLayoutBtn.Show(); 1088 } 1089 1090 // "Ahnlichkeitssuche? 1091 if ( ( nModifyFlag & MODIFY_SIMILARITY ) == 0 ) 1092 aSimilarityBox.Check( pSearchItem->IsLevenshtein() ); 1093 bSet = sal_True; 1094 1095 pImpl->bSaveToModule = sal_False; 1096 FlagHdl_Impl( &aSimilarityBox ); 1097 FlagHdl_Impl( &aJapOptionsCB ); 1098 pImpl->bSaveToModule = sal_True; 1099 1100 bool bDisableSearch = sal_False; 1101 SfxViewShell* pViewShell = SfxViewShell::Current(); 1102 1103 if ( pViewShell ) 1104 { 1105 sal_Bool bText = !bSearchPattern; 1106 1107 if ( pViewShell->HasSelection( bText ) ) 1108 EnableControl_Impl( &aSelectionBtn ); 1109 else 1110 { 1111 aSelectionBtn.Check( sal_False ); 1112 aSelectionBtn.Disable(); 1113 } 1114 } 1115 1116 // Patternsuche und es wurden keine AttrSets "ubergeben 1117 if ( bSearchPattern ) 1118 { 1119 SfxObjectShell* pShell = SfxObjectShell::Current(); 1120 1121 if ( pShell && pShell->GetStyleSheetPool() ) 1122 { 1123 // Vorlagen beschaffen 1124 aSearchTmplLB .Clear(); 1125 aReplaceTmplLB.Clear(); 1126 SfxStyleSheetBasePool* pStylePool = pShell->GetStyleSheetPool(); 1127 pStylePool->SetSearchMask( pSearchItem->GetFamily(), 1128 SFXSTYLEBIT_ALL ); 1129 SfxStyleSheetBase* pBase = pStylePool->First(); 1130 1131 while ( pBase ) 1132 { 1133 if ( pBase->IsUsed() ) 1134 aSearchTmplLB.InsertEntry( pBase->GetName() ); 1135 aReplaceTmplLB.InsertEntry( pBase->GetName() ); 1136 pBase = pStylePool->Next(); 1137 } 1138 aSearchTmplLB.SelectEntry( pSearchItem->GetSearchString() ); 1139 aReplaceTmplLB.SelectEntry( pSearchItem->GetReplaceString() ); 1140 1141 } 1142 aSearchTmplLB.Show(); 1143 1144 if ( bConstruct ) 1145 // nur nach dem Erzeugen den Fokus grappen 1146 aSearchTmplLB.GrabFocus(); 1147 aReplaceTmplLB.Show(); 1148 aSearchLB.Hide(); 1149 aReplaceLB.Hide(); 1150 1151 aWordBtn.Disable(); 1152 aRegExpBtn.Disable(); 1153 aMatchCaseCB.Disable(); 1154 1155 bDisableSearch = !aSearchTmplLB.GetEntryCount(); 1156 } 1157 else 1158 { 1159 bool bSetSearch = ( ( nModifyFlag & MODIFY_SEARCH ) == 0 ); 1160 bool bSetReplace = ( ( nModifyFlag & MODIFY_REPLACE ) == 0 ); 1161 1162 if ( pSearchItem->GetSearchString().Len() && bSetSearch ) 1163 aSearchLB.SetText( pSearchItem->GetSearchString() ); 1164 else if ( aSearchStrings.Count() ) 1165 { 1166 bool bAttributes = 1167 ( ( pSearchList && pSearchList->Count() ) || 1168 ( pReplaceList && pReplaceList->Count() ) ); 1169 1170 if ( bSetSearch && !bAttributes ) 1171 aSearchLB.SetText( *aSearchStrings[ 0 ] ); 1172 1173 String aReplaceTxt = pSearchItem->GetReplaceString(); 1174 1175 if ( aReplaceStrings.Count() ) 1176 aReplaceTxt = *aReplaceStrings[ 0 ]; 1177 1178 if ( bSetReplace && !bAttributes ) 1179 aReplaceLB.SetText( aReplaceTxt ); 1180 } 1181 aSearchLB.Show(); 1182 1183 if ( bConstruct ) 1184 // nur nach dem Erzeugen den Fokus grappen 1185 aSearchLB.GrabFocus(); 1186 aReplaceLB.Show(); 1187 aSearchTmplLB.Hide(); 1188 aReplaceTmplLB.Hide(); 1189 1190 EnableControl_Impl( &aRegExpBtn ); 1191 EnableControl_Impl( &aMatchCaseCB ); 1192 1193 if ( aRegExpBtn.IsChecked() ) 1194 aWordBtn.Disable(); 1195 else 1196 EnableControl_Impl( &aWordBtn ); 1197 1198 String aSrchAttrTxt; 1199 1200 if ( pImpl->bMultiLineEdit ) 1201 aSrchAttrTxt = pImpl->aSearchFormats.GetText(); 1202 else 1203 aSrchAttrTxt = aSearchAttrText.GetText(); 1204 1205 bDisableSearch = !aSearchLB.GetText().Len() && !aSrchAttrTxt.Len(); 1206 } 1207 FocusHdl_Impl( &aSearchLB ); 1208 1209 if ( bDisableSearch ) 1210 { 1211 aSearchBtn.Disable(); 1212 aSearchAllBtn.Disable(); 1213 aReplaceBtn.Disable(); 1214 aReplaceAllBtn.Disable(); 1215 aSearchComponentFL.Enable(sal_False); 1216 aSearchComponent1PB.Enable(sal_False); 1217 aSearchComponent2PB.Enable(sal_False); 1218 } 1219 else 1220 { 1221 EnableControl_Impl( &aSearchBtn ); 1222 EnableControl_Impl( &aReplaceBtn ); 1223 if (!bWriter || (bWriter && !aNotesBtn.IsChecked())) 1224 { 1225 EnableControl_Impl( &aSearchAllBtn ); 1226 EnableControl_Impl( &aReplaceAllBtn ); 1227 } 1228 if (bWriter && pSearchItem->GetNotes()) 1229 { 1230 aSearchAllBtn.Disable(); 1231 aReplaceAllBtn.Disable(); 1232 } 1233 } 1234 1235 if ( ( !pImpl->bMultiLineEdit && aSearchAttrText.GetText().Len() ) || 1236 ( pImpl->bMultiLineEdit && pImpl->aSearchFormats.GetText().Len() ) ) 1237 EnableControl_Impl( &aNoFormatBtn ); 1238 else 1239 aNoFormatBtn.Disable(); 1240 1241 if ( !pSearchList ) 1242 { 1243 aAttributeBtn.Disable(); 1244 aFormatBtn.Disable(); 1245 } 1246 1247 if ( aLayoutBtn.IsChecked() ) 1248 { 1249 pImpl->bSaveToModule = sal_False; 1250 TemplateHdl_Impl( &aLayoutBtn ); 1251 pImpl->bSaveToModule = sal_True; 1252 } 1253 } 1254 1255 // ----------------------------------------------------------------------- 1256 1257 void SvxSearchDialog::InitAttrList_Impl( const SfxItemSet* pSSet, 1258 const SfxItemSet* pRSet ) 1259 { 1260 if ( !pSSet && !pRSet ) 1261 return; 1262 1263 if ( !pImpl->pRanges && pSSet ) 1264 { 1265 sal_sSize nCnt = 0; 1266 const sal_uInt16* pPtr = pSSet->GetRanges(); 1267 const sal_uInt16* pTmp = pPtr; 1268 1269 while( *pPtr ) 1270 { 1271 nCnt += ( *(pPtr+1) - *pPtr ) + 1; 1272 pPtr += 2; 1273 } 1274 nCnt = pPtr - pTmp + 1; 1275 pImpl->pRanges = new sal_uInt16[nCnt]; 1276 memcpy( pImpl->pRanges, pTmp, sizeof(sal_uInt16) * nCnt ); 1277 } 1278 1279 // sorge daf"ur, das die Texte der Attribute richtig stehen 1280 String aDesc; 1281 1282 if ( pSSet ) 1283 { 1284 delete pSearchList; 1285 pSearchList = new SearchAttrItemList; 1286 1287 if ( pSSet->Count() ) 1288 { 1289 pSearchList->Put( *pSSet ); 1290 1291 if ( !pImpl->bMultiLineEdit ) 1292 aSearchAttrText.SetText( BuildAttrText_Impl( aDesc, sal_True ) ); 1293 else 1294 pImpl->aSearchFormats.SetText( BuildAttrText_Impl( aDesc, sal_True ) ); 1295 1296 if ( aDesc.Len() ) 1297 bFormat |= sal_True; 1298 } 1299 } 1300 1301 if ( pRSet ) 1302 { 1303 delete pReplaceList; 1304 pReplaceList = new SearchAttrItemList; 1305 1306 if ( pRSet->Count() ) 1307 { 1308 pReplaceList->Put( *pRSet ); 1309 1310 if ( !pImpl->bMultiLineEdit ) 1311 aReplaceAttrText.SetText( BuildAttrText_Impl( aDesc, sal_False ) ); 1312 else 1313 pImpl->aReplaceFormats.SetText( BuildAttrText_Impl( aDesc, sal_False ) ); 1314 1315 if ( aDesc.Len() ) 1316 bFormat |= sal_True; 1317 } 1318 } 1319 } 1320 1321 // ----------------------------------------------------------------------- 1322 1323 IMPL_LINK( SvxSearchDialog, FlagHdl_Impl, Control *, pCtrl ) 1324 { 1325 if ( pCtrl && !bSet ) 1326 SetModifyFlag_Impl( pCtrl ); 1327 else 1328 bSet = sal_False; 1329 1330 if ( pCtrl == &aSimilarityBox ) 1331 { 1332 sal_Bool bIsChecked = aSimilarityBox.IsChecked(); 1333 1334 if ( bIsChecked ) 1335 { 1336 aSimilarityBtn.Enable(); 1337 aRegExpBtn.Check( sal_False ); 1338 aRegExpBtn.Disable(); 1339 EnableControl_Impl( &aWordBtn ); 1340 1341 if ( aLayoutBtn.IsChecked() ) 1342 { 1343 EnableControl_Impl( &aMatchCaseCB ); 1344 aLayoutBtn.Check( sal_False ); 1345 } 1346 aRegExpBtn.Disable(); 1347 aLayoutBtn.Disable(); 1348 aFormatBtn.Disable(); 1349 aNoFormatBtn.Disable(); 1350 aAttributeBtn.Disable(); 1351 } 1352 else 1353 { 1354 EnableControl_Impl( &aRegExpBtn ); 1355 if (!aNotesBtn.IsChecked()) 1356 EnableControl_Impl( &aLayoutBtn ); 1357 EnableControl_Impl( &aFormatBtn ); 1358 EnableControl_Impl( &aAttributeBtn ); 1359 aSimilarityBtn.Disable(); 1360 } 1361 pSearchItem->SetLevenshtein( bIsChecked ); 1362 } 1363 else 1364 if ( pCtrl == &aNotesBtn) 1365 { 1366 if (aNotesBtn.IsChecked()) 1367 { 1368 aLayoutBtn.Disable(); 1369 aSearchAllBtn.Disable(); 1370 aReplaceAllBtn.Disable(); 1371 } 1372 else 1373 { 1374 EnableControl_Impl( &aLayoutBtn ); 1375 ModifyHdl_Impl( &aSearchLB ); 1376 } 1377 } 1378 else 1379 { 1380 if ( aLayoutBtn.IsChecked() && !bFormat ) 1381 { 1382 aWordBtn.Check( sal_False ); 1383 aWordBtn.Disable(); 1384 aRegExpBtn.Check( sal_False ); 1385 aRegExpBtn.Disable(); 1386 aMatchCaseCB.Check( sal_False ); 1387 aMatchCaseCB.Disable(); 1388 aNotesBtn.Disable(); 1389 1390 if ( aSearchTmplLB.GetEntryCount() ) 1391 { 1392 EnableControl_Impl( &aSearchBtn ); 1393 EnableControl_Impl( &aSearchAllBtn ); 1394 EnableControl_Impl( &aReplaceBtn ); 1395 EnableControl_Impl( &aReplaceAllBtn ); 1396 } 1397 } 1398 else 1399 { 1400 EnableControl_Impl( &aRegExpBtn ); 1401 EnableControl_Impl( &aMatchCaseCB ); 1402 EnableControl_Impl( &aNotesBtn ); 1403 1404 if ( aRegExpBtn.IsChecked() ) 1405 { 1406 aWordBtn.Check( sal_False ); 1407 aWordBtn.Disable(); 1408 aSimilarityBox.Disable(); 1409 aSimilarityBtn.Disable(); 1410 } 1411 else 1412 { 1413 EnableControl_Impl( &aWordBtn ); 1414 EnableControl_Impl( &aSimilarityBox ); 1415 } 1416 1417 // Such-String vorhanden? dann Buttons enablen 1418 bSet = sal_True; 1419 ModifyHdl_Impl( &aSearchLB ); 1420 } 1421 } 1422 1423 if ( &aAllSheetsCB == pCtrl ) 1424 { 1425 if ( aAllSheetsCB.IsChecked() ) 1426 aSearchAllBtn.Disable(); 1427 else 1428 { 1429 bSet = sal_True; 1430 ModifyHdl_Impl( &aSearchLB ); 1431 } 1432 } 1433 1434 if ( &aJapOptionsCB == pCtrl ) 1435 { 1436 sal_Bool bEnableJapOpt = aJapOptionsCB.IsChecked(); 1437 aMatchCaseCB .Enable(!bEnableJapOpt ); 1438 aJapMatchFullHalfWidthCB.Enable(!bEnableJapOpt ); 1439 aJapOptionsBtn .Enable( bEnableJapOpt ); 1440 } 1441 1442 if ( pImpl->bSaveToModule ) 1443 SaveToModule_Impl(); 1444 return 0; 1445 } 1446 1447 // ----------------------------------------------------------------------- 1448 1449 IMPL_LINK( SvxSearchDialog, CommandHdl_Impl, Button *, pBtn ) 1450 { 1451 bool bInclusive = ( aLayoutBtn.GetText() == aLayoutStr ); 1452 1453 if ( ( pBtn == &aSearchBtn ) || 1454 ( pBtn == &aSearchAllBtn ) || 1455 ( pBtn == &aReplaceBtn ) || 1456 ( pBtn == &aReplaceAllBtn ) ) 1457 { 1458 if ( aLayoutBtn.IsChecked() && !bInclusive ) 1459 { 1460 pSearchItem->SetSearchString ( aSearchTmplLB.GetSelectEntry() ); 1461 pSearchItem->SetReplaceString( aReplaceTmplLB.GetSelectEntry() ); 1462 } 1463 else 1464 { 1465 pSearchItem->SetSearchString ( aSearchLB.GetText() ); 1466 pSearchItem->SetReplaceString( aReplaceLB.GetText() ); 1467 1468 if ( pBtn == &aReplaceBtn ) 1469 Remember_Impl( aReplaceLB.GetText(), sal_False ); 1470 else 1471 { 1472 Remember_Impl( aSearchLB.GetText(), sal_True ); 1473 1474 if ( pBtn == &aReplaceAllBtn ) 1475 Remember_Impl( aReplaceLB.GetText(), sal_False ); 1476 } 1477 } 1478 1479 pSearchItem->SetRegExp( sal_False ); 1480 pSearchItem->SetLevenshtein( sal_False ); 1481 if (GetCheckBoxValue( aRegExpBtn )) 1482 pSearchItem->SetRegExp( sal_True ); 1483 else if (GetCheckBoxValue( aSimilarityBox )) 1484 pSearchItem->SetLevenshtein( sal_True ); 1485 1486 pSearchItem->SetWordOnly( GetCheckBoxValue( aWordBtn ) ); 1487 pSearchItem->SetBackward( GetCheckBoxValue( aBackwardsBtn ) ); 1488 pSearchItem->SetNotes( GetCheckBoxValue( aNotesBtn ) ); 1489 pSearchItem->SetPattern( GetCheckBoxValue( aLayoutBtn ) ); 1490 pSearchItem->SetSelection( GetCheckBoxValue( aSelectionBtn ) ); 1491 1492 pSearchItem->SetUseAsianOptions( GetCheckBoxValue( aJapOptionsCB ) ); 1493 sal_Int32 nFlags = GetTransliterationFlags(); 1494 if( !pSearchItem->IsUseAsianOptions()) 1495 nFlags &= (TransliterationModules_IGNORE_CASE | 1496 TransliterationModules_IGNORE_WIDTH ); 1497 pSearchItem->SetTransliterationFlags( nFlags ); 1498 1499 if ( !bWriter ) 1500 { 1501 if ( aCalcSearchInLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND ) 1502 pSearchItem->SetCellType( aCalcSearchInLB.GetSelectEntryPos() ); 1503 1504 pSearchItem->SetRowDirection( aRowsBtn.IsChecked() ); 1505 pSearchItem->SetAllTables( aAllSheetsCB.IsChecked() ); 1506 } 1507 1508 if ( pBtn == &aSearchBtn ) 1509 pSearchItem->SetCommand( SVX_SEARCHCMD_FIND ); 1510 else if ( pBtn == &aSearchAllBtn ) 1511 pSearchItem->SetCommand( SVX_SEARCHCMD_FIND_ALL ); 1512 else if ( pBtn == &aReplaceBtn ) 1513 pSearchItem->SetCommand( SVX_SEARCHCMD_REPLACE ); 1514 else if ( pBtn == &aReplaceAllBtn ) 1515 pSearchItem->SetCommand( SVX_SEARCHCMD_REPLACE_ALL ); 1516 1517 // wenn nach Vorlagen gesucht wird, dann Format-Listen l"oschen 1518 if ( !bFormat && pSearchItem->GetPattern() ) 1519 { 1520 if ( pSearchList ) 1521 pSearchList->Clear(); 1522 1523 if ( pReplaceList ) 1524 pReplaceList->Clear(); 1525 } 1526 nModifyFlag = 0; 1527 const SfxPoolItem* ppArgs[] = { pSearchItem, 0 }; 1528 rBindings.ExecuteSynchron( FID_SEARCH_NOW, ppArgs, 0L ); 1529 } 1530 else if ( pBtn == &aCloseBtn ) 1531 { 1532 if ( !aLayoutBtn.IsChecked() || bInclusive ) 1533 { 1534 String aStr( aSearchLB.GetText() ); 1535 1536 if ( aStr.Len() ) 1537 Remember_Impl( aStr, sal_True ); 1538 aStr = aReplaceLB.GetText(); 1539 1540 if ( aStr.Len() ) 1541 Remember_Impl( aStr, sal_False ); 1542 } 1543 SaveToModule_Impl(); 1544 Close(); 1545 } 1546 else if ( pBtn == &aSimilarityBtn ) 1547 { 1548 //CHINA001 SvxSearchSimilarityDialog* pDlg = 1549 //CHINA001 new SvxSearchSimilarityDialog( this, 1550 //CHINA001 pSearchItem->IsLEVRelaxed(), 1551 //CHINA001 pSearchItem->GetLEVOther(), 1552 //CHINA001 pSearchItem->GetLEVShorter(), 1553 //CHINA001 pSearchItem->GetLEVLonger() ); 1554 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 1555 if(pFact) 1556 { 1557 AbstractSvxSearchSimilarityDialog* pDlg = pFact->CreateSvxSearchSimilarityDialog( LAYOUT_THIS_WINDOW (this), 1558 pSearchItem->IsLEVRelaxed(), 1559 pSearchItem->GetLEVOther(), 1560 pSearchItem->GetLEVShorter(), 1561 pSearchItem->GetLEVLonger() ); 1562 DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001 1563 if ( pDlg && pDlg->Execute() == RET_OK ) 1564 { 1565 pSearchItem->SetLEVRelaxed( pDlg->IsRelaxed() ); 1566 pSearchItem->SetLEVOther( pDlg->GetOther() ); 1567 pSearchItem->SetLEVShorter( pDlg->GetShorter() ); 1568 pSearchItem->SetLEVLonger( pDlg->GetLonger() ); 1569 SaveToModule_Impl(); 1570 } 1571 delete pDlg; 1572 } 1573 } 1574 else if ( pBtn == &aJapOptionsBtn ) 1575 { 1576 SfxItemSet aSet( SFX_APP()->GetPool() ); 1577 pSearchItem->SetTransliterationFlags( GetTransliterationFlags() ); 1578 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 1579 if(pFact) 1580 { 1581 AbstractSvxJSearchOptionsDialog* aDlg = pFact->CreateSvxJSearchOptionsDialog( LAYOUT_THIS_WINDOW (this), aSet, 1582 pSearchItem->GetTransliterationFlags() ); 1583 DBG_ASSERT(aDlg, "Dialogdiet fail!");//CHINA001 1584 int nRet = aDlg->Execute(); //CHINA001 int nRet = aDlg.Execute(); 1585 if (RET_OK == nRet) //! true only if FillItemSet of SvxJSearchOptionsPage returns true 1586 { 1587 sal_Int32 nFlags = aDlg->GetTransliterationFlags(); //CHINA001 sal_Int32 nFlags = aDlg.GetTransliterationFlags(); 1588 pSearchItem->SetTransliterationFlags( nFlags ); 1589 ApplyTransliterationFlags_Impl( nFlags ); 1590 } 1591 delete aDlg; //add for CHINA001 1592 } 1593 } 1594 else if(pBtn == &aSearchComponent1PB || pBtn == &aSearchComponent2PB ) 1595 { 1596 uno::Sequence < beans::PropertyValue > aArgs(2); 1597 beans::PropertyValue* pArgs = aArgs.getArray(); 1598 pArgs[0].Name = ::rtl::OUString::createFromAscii("SearchString"); 1599 pArgs[0].Value <<= ::rtl::OUString(aSearchLB.GetText()); 1600 pArgs[1].Name = ::rtl::OUString::createFromAscii("ParentWindow"); 1601 pArgs[1].Value <<= VCLUnoHelper::GetInterface( LAYOUT_THIS_WINDOW (this) ); 1602 if(pBtn == &aSearchComponent1PB) 1603 { 1604 if ( pImpl->xCommand1Dispatch.is() ) 1605 pImpl->xCommand1Dispatch->dispatch(pImpl->aCommand1URL, aArgs); 1606 } 1607 else 1608 { 1609 if ( pImpl->xCommand2Dispatch.is() ) 1610 pImpl->xCommand2Dispatch->dispatch(pImpl->aCommand2URL, aArgs); 1611 } 1612 } 1613 1614 return 0; 1615 } 1616 1617 // ----------------------------------------------------------------------- 1618 1619 IMPL_LINK( SvxSearchDialog, ModifyHdl_Impl, ComboBox *, pEd ) 1620 { 1621 if ( !bSet ) 1622 SetModifyFlag_Impl( pEd ); 1623 else 1624 bSet = sal_False; 1625 1626 if ( pEd == &aSearchLB || pEd == &aReplaceLB ) 1627 { 1628 xub_StrLen nLBTxtLen = aSearchLB.GetText().Len(), nTxtLen; 1629 1630 if ( !pImpl->bMultiLineEdit ) 1631 nTxtLen = aSearchAttrText.GetText().Len(); 1632 else 1633 nTxtLen = pImpl->aSearchFormats.GetText().Len(); 1634 1635 if ( nLBTxtLen || nTxtLen ) 1636 { 1637 EnableControl_Impl( &aSearchBtn ); 1638 EnableControl_Impl( &aReplaceBtn ); 1639 if (!bWriter || (bWriter && !aNotesBtn.IsChecked())) 1640 { 1641 EnableControl_Impl( &aSearchAllBtn ); 1642 EnableControl_Impl( &aReplaceAllBtn ); 1643 } 1644 } 1645 else 1646 { 1647 aSearchComponentFL.Enable(sal_False); 1648 aSearchComponent1PB.Enable(sal_False); 1649 aSearchComponent2PB.Enable(sal_False); 1650 aSearchBtn.Disable(); 1651 aSearchAllBtn.Disable(); 1652 aReplaceBtn.Disable(); 1653 aReplaceAllBtn.Disable(); 1654 } 1655 } 1656 return 0; 1657 } 1658 1659 // ----------------------------------------------------------------------- 1660 1661 IMPL_LINK( SvxSearchDialog, TemplateHdl_Impl, Button *, EMPTYARG ) 1662 { 1663 if ( pImpl->bSaveToModule ) 1664 SaveToModule_Impl(); 1665 1666 if ( bFormat ) 1667 return 0; 1668 String sDesc; 1669 1670 if ( aLayoutBtn.IsChecked() ) 1671 { 1672 if ( !pFamilyController ) 1673 { 1674 sal_uInt16 nId = 0; 1675 1676 // Vorlagen-Controller enablen 1677 switch ( pSearchItem->GetFamily() ) 1678 { 1679 case SFX_STYLE_FAMILY_CHAR: 1680 nId = SID_STYLE_FAMILY1; break; 1681 1682 case SFX_STYLE_FAMILY_PARA: 1683 nId = SID_STYLE_FAMILY2; break; 1684 1685 case SFX_STYLE_FAMILY_FRAME: 1686 nId = SID_STYLE_FAMILY3; break; 1687 1688 case SFX_STYLE_FAMILY_PAGE: 1689 nId = SID_STYLE_FAMILY4; break; 1690 1691 case SFX_STYLE_FAMILY_ALL: 1692 break; 1693 1694 default: 1695 DBG_ERROR( "StyleSheetFamily wurde geaendert?" ); 1696 } 1697 1698 rBindings.EnterRegistrations(); 1699 pFamilyController = 1700 new SvxSearchController( nId, rBindings, *this ); 1701 rBindings.LeaveRegistrations(); 1702 aSearchTmplLB.Clear(); 1703 aReplaceTmplLB.Clear(); 1704 1705 aSearchTmplLB.Show(); 1706 aReplaceTmplLB.Show(); 1707 aSearchLB.Hide(); 1708 aReplaceLB.Hide(); 1709 1710 if ( !pImpl->bMultiLineEdit ) 1711 { 1712 aSearchAttrText.SetText( sDesc ); 1713 aReplaceAttrText.SetText( sDesc ); 1714 } 1715 else 1716 { 1717 pImpl->aSearchFormats.SetText( sDesc ); 1718 pImpl->aReplaceFormats.SetText( sDesc ); 1719 } 1720 } 1721 aFormatBtn.Disable(); 1722 aNoFormatBtn.Disable(); 1723 aAttributeBtn.Disable(); 1724 aSimilarityBox.Disable(); 1725 aSimilarityBtn.Disable(); 1726 } 1727 else 1728 { 1729 // Vorlagen-Controller disablen 1730 rBindings.EnterRegistrations(); 1731 DELETEZ( pFamilyController ); 1732 rBindings.LeaveRegistrations(); 1733 1734 aSearchLB.Show(); 1735 aReplaceLB.Show(); 1736 aSearchTmplLB.Hide(); 1737 aReplaceTmplLB.Hide(); 1738 1739 if ( !pImpl->bMultiLineEdit ) 1740 { 1741 aSearchAttrText.SetText( BuildAttrText_Impl( sDesc, sal_True ) ); 1742 aReplaceAttrText.SetText( BuildAttrText_Impl( sDesc, sal_False ) ); 1743 } 1744 else 1745 { 1746 pImpl->aSearchFormats.SetText( BuildAttrText_Impl( sDesc, sal_True ) ); 1747 pImpl->aReplaceFormats.SetText( BuildAttrText_Impl( sDesc, sal_False ) ); 1748 } 1749 1750 EnableControl_Impl( &aFormatBtn ); 1751 EnableControl_Impl( &aAttributeBtn ); 1752 EnableControl_Impl( &aSimilarityBox ); 1753 1754 FocusHdl_Impl( bSearch ? &aSearchLB : &aReplaceLB ); 1755 } 1756 bSet = sal_True; 1757 pImpl->bSaveToModule = sal_False; 1758 FlagHdl_Impl( &aLayoutBtn ); 1759 pImpl->bSaveToModule = sal_True; 1760 return 0; 1761 } 1762 1763 // ----------------------------------------------------------------------- 1764 1765 void SvxSearchDialog::Remember_Impl( const String &rStr,sal_Bool _bSearch ) 1766 { 1767 if ( !rStr.Len() ) 1768 return; 1769 1770 SvStringsDtor* pArr = _bSearch ? &aSearchStrings : &aReplaceStrings; 1771 ComboBox* pListBox = _bSearch ? &aSearchLB : &aReplaceLB; 1772 1773 // identische Strings ignorieren 1774 for ( sal_uInt16 i = 0; i < pArr->Count(); ++i ) 1775 { 1776 if ( COMPARE_EQUAL == (*pArr)[i]->CompareTo( rStr ) ) 1777 return; 1778 } 1779 1780 // bei maximaler Belegung "altesten Eintrag l"oschen (ListBox und Array) 1781 String* pInsStr; 1782 1783 if ( pArr->Count() >= REMEMBER_SIZE ) 1784 { 1785 pInsStr = (*pArr)[REMEMBER_SIZE - 1]; 1786 pListBox->RemoveEntry( sal_uInt16(REMEMBER_SIZE - 1) ); 1787 pArr->Remove( REMEMBER_SIZE - 1 ); 1788 *pInsStr = rStr; 1789 } 1790 else 1791 pInsStr = new String( rStr ); 1792 1793 pArr->Insert( pInsStr, 0 ); 1794 pListBox->InsertEntry( *pInsStr, 0 ); 1795 } 1796 1797 // ----------------------------------------------------------------------- 1798 1799 void SvxSearchDialog::TemplatesChanged_Impl( SfxStyleSheetBasePool& rPool ) 1800 { 1801 // SetUpdateMode( sal_False ); 1802 String aOldSrch( aSearchTmplLB .GetSelectEntry() ); 1803 String aOldRepl( aReplaceTmplLB.GetSelectEntry() ); 1804 aSearchTmplLB .Clear(); 1805 aReplaceTmplLB.Clear(); 1806 rPool.SetSearchMask( pSearchItem->GetFamily(), SFXSTYLEBIT_ALL ); 1807 aSearchTmplLB.SetUpdateMode( sal_False ); 1808 aReplaceTmplLB.SetUpdateMode( sal_False ); 1809 SfxStyleSheetBase* pBase = rPool.First(); 1810 1811 while ( pBase ) 1812 { 1813 if ( pBase->IsUsed() ) 1814 aSearchTmplLB.InsertEntry( pBase->GetName() ); 1815 aReplaceTmplLB.InsertEntry( pBase->GetName() ); 1816 pBase = rPool.Next(); 1817 } 1818 aSearchTmplLB.SetUpdateMode( sal_True ); 1819 aReplaceTmplLB.SetUpdateMode( sal_True ); 1820 aSearchTmplLB.SelectEntryPos(0); 1821 1822 if ( aOldSrch.Len() ) 1823 aSearchTmplLB .SelectEntry( aOldSrch ); 1824 aReplaceTmplLB.SelectEntryPos(0); 1825 1826 if ( aOldRepl.Len() ) 1827 aReplaceTmplLB.SelectEntry( aOldRepl ); 1828 1829 if ( aSearchTmplLB.GetEntryCount() ) 1830 { 1831 EnableControl_Impl( &aSearchBtn ); 1832 EnableControl_Impl( &aSearchAllBtn ); 1833 EnableControl_Impl( &aReplaceBtn ); 1834 EnableControl_Impl( &aReplaceAllBtn ); 1835 } 1836 // FlagHdl_Impl(0); 1837 // SetUpdateMode( sal_True ); 1838 } 1839 1840 // ----------------------------------------------------------------------- 1841 1842 void SvxSearchDialog::EnableControls_Impl( const sal_uInt16 nFlags ) 1843 { 1844 if ( nFlags == nOptions ) 1845 return; 1846 else 1847 nOptions = nFlags; 1848 1849 if ( !nOptions ) 1850 { 1851 if ( IsVisible() ) 1852 { 1853 Hide(); 1854 return; 1855 } 1856 } 1857 else if ( !IsVisible() ) 1858 Show(); 1859 bool bNoSearch = sal_True; 1860 1861 sal_Bool bEnableSearch = ( SEARCH_OPTIONS_SEARCH & nOptions ) != 0; 1862 aSearchBtn.Enable(bEnableSearch); 1863 1864 if( bEnableSearch ) 1865 bNoSearch = sal_False; 1866 1867 1868 if ( ( SEARCH_OPTIONS_SEARCH_ALL & nOptions ) != 0 ) 1869 { 1870 aSearchAllBtn.Enable(); 1871 bNoSearch = sal_False; 1872 } 1873 else 1874 aSearchAllBtn.Disable(); 1875 if ( ( SEARCH_OPTIONS_REPLACE & nOptions ) != 0 ) 1876 { 1877 aReplaceBtn.Enable(); 1878 aReplaceText.Enable(); 1879 aReplaceLB.Enable(); 1880 aReplaceTmplLB.Enable(); 1881 bNoSearch = sal_False; 1882 } 1883 else 1884 { 1885 aReplaceBtn.Disable(); 1886 aReplaceText.Disable(); 1887 aReplaceLB.Disable(); 1888 aReplaceTmplLB.Disable(); 1889 } 1890 if ( ( SEARCH_OPTIONS_REPLACE_ALL & nOptions ) != 0 ) 1891 { 1892 aReplaceAllBtn.Enable(); 1893 bNoSearch = sal_False; 1894 } 1895 else 1896 aReplaceAllBtn.Disable(); 1897 aSearchComponentFL.Enable(!bNoSearch); 1898 aSearchComponent1PB.Enable(!bNoSearch); 1899 aSearchComponent2PB.Enable(!bNoSearch); 1900 aSearchBtn.Enable( !bNoSearch ); 1901 aSearchText.Enable( !bNoSearch ); 1902 aSearchLB.Enable( !bNoSearch ); 1903 1904 if ( ( SEARCH_OPTIONS_WHOLE_WORDS & nOptions ) != 0 ) 1905 aWordBtn.Enable(); 1906 else 1907 aWordBtn.Disable(); 1908 if ( ( SEARCH_OPTIONS_BACKWARDS & nOptions ) != 0 ) 1909 aBackwardsBtn.Enable(); 1910 else 1911 aBackwardsBtn.Disable(); 1912 //!if ( ( SEARCH_OPTIONS_NOTES & nOptions ) != 0 ) 1913 aNotesBtn.Enable(); 1914 //!else 1915 //! aNotesBtn.Disable(); 1916 if ( ( SEARCH_OPTIONS_REG_EXP & nOptions ) != 0 ) 1917 aRegExpBtn.Enable(); 1918 else 1919 aRegExpBtn.Disable(); 1920 if ( ( SEARCH_OPTIONS_EXACT & nOptions ) != 0 ) 1921 aMatchCaseCB.Enable(); 1922 else 1923 aMatchCaseCB.Disable(); 1924 if ( ( SEARCH_OPTIONS_SELECTION & nOptions ) != 0 ) 1925 aSelectionBtn.Enable(); 1926 else 1927 aSelectionBtn.Disable(); 1928 if ( ( SEARCH_OPTIONS_FAMILIES & nOptions ) != 0 ) 1929 aLayoutBtn.Enable(); 1930 else 1931 aLayoutBtn.Disable(); 1932 if ( ( SEARCH_OPTIONS_FORMAT & nOptions ) != 0 ) 1933 { 1934 aAttributeBtn.Enable(); 1935 aFormatBtn.Enable(); 1936 aNoFormatBtn.Enable(); 1937 } 1938 else 1939 { 1940 aAttributeBtn.Disable(); 1941 aFormatBtn.Disable(); 1942 aNoFormatBtn.Disable(); 1943 } 1944 /* 1945 if ( ( SEARCH_OPTIONS_MORE & nOptions ) != 0 && 1946 pSearchItem && pSearchItem->GetAppFlag() == SVX_SEARCHAPP_CALC ) 1947 pMoreBtn->Enable(); 1948 else 1949 { 1950 pMoreBtn->SetState( sal_False ); 1951 pMoreBtn->Disable(); 1952 } 1953 */ 1954 if ( ( SEARCH_OPTIONS_SIMILARITY & nOptions ) != 0 ) 1955 { 1956 aSimilarityBox.Enable(); 1957 aSimilarityBtn.Enable(); 1958 } 1959 else 1960 { 1961 aSimilarityBox.Disable(); 1962 aSimilarityBtn.Disable(); 1963 } 1964 1965 if ( pSearchItem ) 1966 Init_Impl( pSearchItem->GetPattern() && 1967 ( !pSearchList || !pSearchList->Count() ) ); 1968 } 1969 1970 // ----------------------------------------------------------------------- 1971 1972 void SvxSearchDialog::EnableControl_Impl( Control* pCtrl ) 1973 { 1974 if ( &aSearchBtn == pCtrl && ( SEARCH_OPTIONS_SEARCH & nOptions ) != 0 ) 1975 { 1976 aSearchComponentFL.Enable(); 1977 aSearchComponent1PB.Enable(); 1978 aSearchComponent2PB.Enable(); 1979 aSearchBtn.Enable(); 1980 return; 1981 } 1982 if ( &aSearchAllBtn == pCtrl && 1983 ( SEARCH_OPTIONS_SEARCH_ALL & nOptions ) != 0 ) 1984 { 1985 aSearchAllBtn.Enable( ( bWriter || !aAllSheetsCB.IsChecked() ) ); 1986 return; 1987 } 1988 if ( &aReplaceBtn == pCtrl && ( SEARCH_OPTIONS_REPLACE & nOptions ) != 0 ) 1989 { 1990 aReplaceBtn.Enable(); 1991 return; 1992 } 1993 if ( &aReplaceAllBtn == pCtrl && 1994 ( SEARCH_OPTIONS_REPLACE_ALL & nOptions ) != 0 ) 1995 { 1996 aReplaceAllBtn.Enable(); 1997 return; 1998 } 1999 if ( &aWordBtn == pCtrl && ( SEARCH_OPTIONS_WHOLE_WORDS & nOptions ) != 0 ) 2000 { 2001 aWordBtn.Enable(); 2002 return; 2003 } 2004 if ( &aBackwardsBtn == pCtrl && ( SEARCH_OPTIONS_BACKWARDS & nOptions ) != 0 ) 2005 { 2006 aBackwardsBtn.Enable(); 2007 return; 2008 } 2009 if ( &aNotesBtn == pCtrl /*! && ( SEARCH_OPTIONS_NOTES & nOptions ) != 0 */ ) 2010 { 2011 aNotesBtn.Enable(); 2012 return; 2013 } 2014 if ( &aRegExpBtn == pCtrl && ( SEARCH_OPTIONS_REG_EXP & nOptions ) != 0 2015 && !aSimilarityBox.IsChecked()) 2016 { 2017 aRegExpBtn.Enable(); 2018 return; 2019 } 2020 if ( &aMatchCaseCB == pCtrl && ( SEARCH_OPTIONS_EXACT & nOptions ) != 0 ) 2021 { 2022 if (!aJapOptionsCB.IsChecked()) 2023 aMatchCaseCB.Enable(); 2024 return; 2025 } 2026 if ( &aSelectionBtn == pCtrl && ( SEARCH_OPTIONS_SELECTION & nOptions ) != 0 ) 2027 { 2028 aSelectionBtn.Enable(); 2029 return; 2030 } 2031 if ( &aLayoutBtn == pCtrl && ( SEARCH_OPTIONS_FAMILIES & nOptions ) != 0 ) 2032 { 2033 aLayoutBtn.Enable(); 2034 return; 2035 } 2036 if ( &aAttributeBtn == pCtrl 2037 && ( SEARCH_OPTIONS_FORMAT & nOptions ) != 0 2038 && pSearchList ) 2039 { 2040 aAttributeBtn.Enable( pImpl->bFocusOnSearch ); 2041 } 2042 if ( &aFormatBtn == pCtrl && ( SEARCH_OPTIONS_FORMAT & nOptions ) != 0 ) 2043 { 2044 aFormatBtn.Enable(); 2045 return; 2046 } 2047 if ( &aNoFormatBtn == pCtrl && ( SEARCH_OPTIONS_FORMAT & nOptions ) != 0 ) 2048 { 2049 aNoFormatBtn.Enable(); 2050 return; 2051 } 2052 if ( &aSimilarityBox == pCtrl && 2053 ( SEARCH_OPTIONS_SIMILARITY & nOptions ) != 0 ) 2054 { 2055 aSimilarityBox.Enable(); 2056 2057 if ( aSimilarityBox.IsChecked() ) 2058 aSimilarityBtn.Enable(); 2059 } 2060 } 2061 2062 // ----------------------------------------------------------------------- 2063 2064 void SvxSearchDialog::SetItem_Impl( const SvxSearchItem* pItem ) 2065 { 2066 if ( pItem ) 2067 { 2068 delete pSearchItem; 2069 pSearchItem = (SvxSearchItem*)pItem->Clone(); 2070 Init_Impl( pSearchItem->GetPattern() && 2071 ( !pSearchList || !pSearchList->Count() ) ); 2072 } 2073 } 2074 2075 // ----------------------------------------------------------------------- 2076 2077 IMPL_LINK( SvxSearchDialog, FocusHdl_Impl, Control *, pCtrl ) 2078 { 2079 xub_StrLen nTxtLen; 2080 2081 if ( !pImpl->bMultiLineEdit ) 2082 nTxtLen = aSearchAttrText.GetText().Len(); 2083 else 2084 nTxtLen = pImpl->aSearchFormats.GetText().Len(); 2085 2086 if ( pCtrl == &aSearchLB || pCtrl == &pImpl->aSearchFormats ) 2087 { 2088 if ( pCtrl->HasChildPathFocus() ) 2089 pImpl->bFocusOnSearch = sal_True; 2090 pCtrl = &aSearchLB; 2091 bSearch = sal_True; 2092 2093 if( nTxtLen ) 2094 EnableControl_Impl( &aNoFormatBtn ); 2095 else 2096 aNoFormatBtn.Disable(); 2097 EnableControl_Impl( &aAttributeBtn ); 2098 } 2099 else 2100 { 2101 pImpl->bFocusOnSearch = sal_False; 2102 pCtrl = &aReplaceLB; 2103 bSearch = sal_False; 2104 2105 if ( ( !pImpl->bMultiLineEdit && aReplaceAttrText.GetText().Len() ) || 2106 ( pImpl->bMultiLineEdit && pImpl->aReplaceFormats.GetText().Len() ) ) 2107 EnableControl_Impl( &aNoFormatBtn ); 2108 else 2109 aNoFormatBtn.Disable(); 2110 aAttributeBtn.Disable(); 2111 } 2112 bSet = sal_True; 2113 2114 aSearchLB.SetSelection( Selection( SELECTION_MIN, SELECTION_MAX ) ); 2115 2116 ModifyHdl_Impl( (ComboBox*)pCtrl ); 2117 2118 aLayoutBtn.SetText( bFormat && nTxtLen ? aLayoutStr : aStylesStr ); 2119 return 0; 2120 } 2121 2122 // ----------------------------------------------------------------------- 2123 2124 IMPL_LINK( SvxSearchDialog, LoseFocusHdl_Impl, Control *, EMPTYARG ) 2125 { 2126 SaveToModule_Impl(); 2127 return 0; 2128 } 2129 2130 // ----------------------------------------------------------------------- 2131 2132 IMPL_LINK( SvxSearchDialog, FormatHdl_Impl, Button *, EMPTYARG ) 2133 { 2134 SfxObjectShell* pSh = SfxObjectShell::Current(); 2135 2136 DBG_ASSERT( pSh, "no DocShell" ); 2137 2138 if ( !pSh || !pImpl->pRanges ) 2139 return 0; 2140 2141 sal_sSize nCnt = 0; 2142 const sal_uInt16* pPtr = pImpl->pRanges; 2143 const sal_uInt16* pTmp = pPtr; 2144 2145 while( *pTmp ) 2146 pTmp++; 2147 nCnt = pTmp - pPtr + 7; 2148 sal_uInt16* pWhRanges = new sal_uInt16[nCnt]; 2149 sal_uInt16 nPos = 0; 2150 2151 while( *pPtr ) 2152 { 2153 pWhRanges[nPos++] = *pPtr++; 2154 } 2155 2156 pWhRanges[nPos++] = SID_ATTR_PARA_MODEL; 2157 pWhRanges[nPos++] = SID_ATTR_PARA_MODEL; 2158 2159 sal_uInt16 nBrushWhich = pSh->GetPool().GetWhich(SID_ATTR_BRUSH); 2160 pWhRanges[nPos++] = nBrushWhich; 2161 pWhRanges[nPos++] = nBrushWhich; 2162 pWhRanges[nPos++] = SID_PARA_BACKGRND_DESTINATION; 2163 pWhRanges[nPos++] = SID_PARA_BACKGRND_DESTINATION; 2164 pWhRanges[nPos] = 0; 2165 SfxItemPool& rPool = pSh->GetPool(); 2166 SfxItemSet aSet( rPool, pWhRanges ); 2167 String aTxt; 2168 2169 aSet.InvalidateAllItems(); 2170 aSet.Put(SvxBrushItem(nBrushWhich)); 2171 aSet.Put(SfxUInt16Item(SID_PARA_BACKGRND_DESTINATION, PARA_DEST_CHAR)); 2172 2173 if ( bSearch ) 2174 { 2175 aTxt = SVX_RESSTR( RID_SVXSTR_SEARCH ); 2176 pSearchList->Get( aSet ); 2177 } 2178 else 2179 { 2180 aTxt = SVX_RESSTR( RID_SVXSTR_REPLACE ); 2181 pReplaceList->Get( aSet ); 2182 } 2183 aSet.DisableItem(SID_ATTR_PARA_MODEL); 2184 aSet.DisableItem(rPool.GetWhich(SID_ATTR_PARA_PAGEBREAK)); 2185 aSet.DisableItem(rPool.GetWhich(SID_ATTR_PARA_KEEP)); 2186 2187 //CHINA001 SvxSearchFormatDialog* pDlg = new SvxSearchFormatDialog( this, aSet ); 2188 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 2189 if(pFact) 2190 { 2191 SfxAbstractTabDialog* pDlg = pFact->CreateTabItemDialog( LAYOUT_THIS_WINDOW (this), aSet, RID_SVXDLG_SEARCHFORMAT ); 2192 DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001 2193 aTxt.Insert( pDlg->GetText(), 0 ); 2194 pDlg->SetText( aTxt ); 2195 2196 if ( pDlg->Execute() == RET_OK ) 2197 { 2198 DBG_ASSERT( pDlg->GetOutputItemSet(), "invalid Output-Set" ); 2199 SfxItemSet aOutSet( *pDlg->GetOutputItemSet() ); 2200 2201 SearchAttrItemList* pList = bSearch ? pSearchList : pReplaceList; 2202 2203 SearchAttrItem* pAItem; 2204 const SfxPoolItem* pItem; 2205 for( sal_uInt16 n = 0; n < pList->Count(); ++n ) 2206 if( !IsInvalidItem( (pAItem = &pList->GetObject(n))->pItem ) && 2207 SFX_ITEM_SET == aOutSet.GetItemState( 2208 pAItem->pItem->Which(), sal_False, &pItem ) ) 2209 { 2210 delete pAItem->pItem; 2211 pAItem->pItem = pItem->Clone(); 2212 aOutSet.ClearItem( pAItem->pItem->Which() ); 2213 } 2214 2215 if( aOutSet.Count() ) 2216 pList->Put( aOutSet ); 2217 2218 PaintAttrText_Impl(); // AttributText in GroupBox setzen 2219 } 2220 delete pDlg; 2221 } 2222 delete[] pWhRanges; 2223 return 0; 2224 } 2225 2226 // ----------------------------------------------------------------------- 2227 2228 IMPL_LINK( SvxSearchDialog, NoFormatHdl_Impl, Button *, EMPTYARG ) 2229 { 2230 aLayoutBtn.SetText( aStylesStr ); 2231 bFormat = sal_False; 2232 aLayoutBtn.Check( sal_False ); 2233 2234 if ( bSearch ) 2235 { 2236 if ( !pImpl->bMultiLineEdit ) 2237 aSearchAttrText.SetText( String() ); 2238 else 2239 pImpl->aSearchFormats.SetText( String() ); 2240 pSearchList->Clear(); 2241 } 2242 else 2243 { 2244 if ( !pImpl->bMultiLineEdit ) 2245 aReplaceAttrText.SetText( String() ); 2246 else 2247 pImpl->aReplaceFormats.SetText( String() ); 2248 pReplaceList->Clear(); 2249 } 2250 pImpl->bSaveToModule = sal_False; 2251 TemplateHdl_Impl( &aLayoutBtn ); 2252 pImpl->bSaveToModule = sal_True; 2253 aNoFormatBtn.Disable(); 2254 return 0; 2255 } 2256 2257 // ----------------------------------------------------------------------- 2258 2259 IMPL_LINK( SvxSearchDialog, AttributeHdl_Impl, Button *, EMPTYARG ) 2260 { 2261 if ( !pSearchList || !pImpl->pRanges ) 2262 return 0; 2263 2264 //CHINA001 SvxSearchAttributeDialog* pDlg = new SvxSearchAttributeDialog( this, *pSearchList, pImpl->pRanges ); 2265 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 2266 if(pFact) 2267 { 2268 VclAbstractDialog* pDlg = pFact->CreateSvxSearchAttributeDialog( LAYOUT_THIS_WINDOW (this), *pSearchList, pImpl->pRanges ); 2269 DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001 2270 pDlg->Execute(); 2271 delete pDlg; 2272 } 2273 PaintAttrText_Impl(); 2274 return 0; 2275 } 2276 2277 // ----------------------------------------------------------------------- 2278 2279 IMPL_LINK( SvxSearchDialog, TimeoutHdl_Impl, Timer *, pTimer ) 2280 { 2281 SfxViewShell* pViewShell = SfxViewShell::Current(); 2282 2283 if ( pViewShell ) 2284 { 2285 if ( pViewShell->HasSelection( aSearchLB.IsVisible() ) ) 2286 EnableControl_Impl( &aSelectionBtn ); 2287 else 2288 { 2289 aSelectionBtn.Check( sal_False ); 2290 aSelectionBtn.Disable(); 2291 } 2292 } 2293 2294 pTimer->Start(); 2295 return 0; 2296 } 2297 2298 // ----------------------------------------------------------------------- 2299 2300 void SvxSearchDialog::GetSearchItems( SfxItemSet& rSet ) 2301 { 2302 xub_StrLen nLen; 2303 2304 if ( !pImpl->bMultiLineEdit ) 2305 nLen = aSearchAttrText.GetText().Len(); 2306 else 2307 nLen = pImpl->aSearchFormats.GetText().Len(); 2308 2309 if ( nLen && pSearchList ) 2310 pSearchList->Get( rSet ); 2311 } 2312 2313 // ----------------------------------------------------------------------- 2314 2315 void SvxSearchDialog::GetReplaceItems( SfxItemSet& rSet ) 2316 { 2317 xub_StrLen nLen; 2318 2319 if ( !pImpl->bMultiLineEdit ) 2320 nLen = aReplaceAttrText.GetText().Len(); 2321 else 2322 nLen = pImpl->aReplaceFormats.GetText().Len(); 2323 2324 if ( nLen && pReplaceList ) 2325 pReplaceList->Get( rSet ); 2326 } 2327 2328 // ----------------------------------------------------------------------- 2329 2330 String& SvxSearchDialog::BuildAttrText_Impl( String& rStr, 2331 sal_Bool bSrchFlag ) const 2332 { 2333 if ( rStr.Len() ) 2334 rStr.Erase(); 2335 2336 SfxObjectShell* pSh = SfxObjectShell::Current(); 2337 DBG_ASSERT( pSh, "no DocShell" ); 2338 2339 if ( !pSh ) 2340 return rStr; 2341 2342 SfxItemPool& rPool = pSh->GetPool(); 2343 SearchAttrItemList* pList = bSrchFlag ? pSearchList : pReplaceList; 2344 2345 if ( !pList ) 2346 return rStr; 2347 2348 // Metrik abfragen 2349 SfxMapUnit eMapUnit = SFX_MAPUNIT_CM; 2350 FieldUnit eFieldUnit = pSh->GetModule()->GetFieldUnit(); 2351 switch ( eFieldUnit ) 2352 { 2353 case FUNIT_MM: eMapUnit = SFX_MAPUNIT_MM; break; 2354 case FUNIT_CM: 2355 case FUNIT_M: 2356 case FUNIT_KM: eMapUnit = SFX_MAPUNIT_CM; break; 2357 case FUNIT_TWIP: eMapUnit = SFX_MAPUNIT_TWIP; break; 2358 case FUNIT_POINT: 2359 case FUNIT_PICA: eMapUnit = SFX_MAPUNIT_POINT; break; 2360 case FUNIT_INCH: 2361 case FUNIT_FOOT: 2362 case FUNIT_MILE: eMapUnit = SFX_MAPUNIT_INCH; break; 2363 case FUNIT_100TH_MM: eMapUnit = SFX_MAPUNIT_100TH_MM; break; 2364 default: ;//prevent warning 2365 } 2366 2367 ResStringArray aAttrNames( SVX_RES( RID_ATTR_NAMES ) ); 2368 2369 for ( sal_uInt16 i = 0; i < pList->Count(); ++i ) 2370 { 2371 const SearchAttrItem& rItem = pList->GetObject(i); 2372 2373 if ( rStr.Len() ) 2374 rStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ", " ) ); 2375 2376 if ( !IsInvalidItem( rItem.pItem ) ) 2377 { 2378 String aStr; 2379 rPool.GetPresentation( *rItem.pItem, 2380 SFX_ITEM_PRESENTATION_COMPLETE, 2381 eMapUnit, aStr ); 2382 rStr += aStr; 2383 } 2384 else if ( rItem.nSlot == SID_ATTR_BRUSH_CHAR ) 2385 { 2386 //Sonderbehandlung fuer Zeichenhintergrund 2387 rStr += SVX_RESSTR( RID_SVXITEMS_BRUSH_CHAR ); 2388 } 2389 else 2390 { 2391 sal_uInt32 nId = aAttrNames.FindIndex( rItem.nSlot ); 2392 if ( RESARRAY_INDEX_NOTFOUND != nId ) 2393 rStr += aAttrNames.GetString( nId ); 2394 } 2395 } 2396 return rStr; 2397 } 2398 2399 // ----------------------------------------------------------------------- 2400 2401 void SvxSearchDialog::PaintAttrText_Impl() 2402 { 2403 String aDesc; 2404 BuildAttrText_Impl( aDesc, bSearch ); 2405 2406 if ( !bFormat && aDesc.Len() ) 2407 bFormat = sal_True; 2408 2409 if ( bSearch ) 2410 { 2411 if ( !pImpl->bMultiLineEdit ) 2412 aSearchAttrText.SetText( aDesc ); 2413 else 2414 pImpl->aSearchFormats.SetText( aDesc ); 2415 FocusHdl_Impl( &aSearchLB ); 2416 } 2417 else 2418 { 2419 if ( !pImpl->bMultiLineEdit ) 2420 aReplaceAttrText.SetText( aDesc ); 2421 else 2422 pImpl->aReplaceFormats.SetText( aDesc ); 2423 FocusHdl_Impl( &aReplaceLB ); 2424 } 2425 } 2426 2427 // ----------------------------------------------------------------------- 2428 2429 void SvxSearchDialog::SetModifyFlag_Impl( const Control* pCtrl ) 2430 { 2431 if ( &aSearchLB == (ComboBox*)pCtrl ) 2432 nModifyFlag |= MODIFY_SEARCH; 2433 else if ( &aReplaceLB == (ComboBox*)pCtrl ) 2434 nModifyFlag |= MODIFY_REPLACE; 2435 else if ( &aWordBtn == (CheckBox*)pCtrl ) 2436 nModifyFlag |= MODIFY_WORD; 2437 else if ( &aMatchCaseCB == (CheckBox*)pCtrl ) 2438 nModifyFlag |= MODIFY_EXACT; 2439 else if ( &aBackwardsBtn == (CheckBox*)pCtrl ) 2440 nModifyFlag |= MODIFY_BACKWARDS; 2441 else if ( &aNotesBtn == (CheckBox*)pCtrl ) 2442 nModifyFlag |= MODIFY_NOTES; 2443 else if ( &aSelectionBtn == (CheckBox*)pCtrl ) 2444 nModifyFlag |= MODIFY_SELECTION; 2445 else if ( &aRegExpBtn == (CheckBox*)pCtrl ) 2446 nModifyFlag |= MODIFY_REGEXP; 2447 else if ( &aLayoutBtn == (CheckBox*)pCtrl ) 2448 nModifyFlag |= MODIFY_LAYOUT; 2449 else if ( &aSimilarityBox == (CheckBox*)pCtrl ) 2450 nModifyFlag |= MODIFY_SIMILARITY; 2451 else if ( &aCalcSearchInLB == (ListBox*)pCtrl ) 2452 { 2453 nModifyFlag |= MODIFY_FORMULAS; 2454 nModifyFlag |= MODIFY_VALUES; 2455 nModifyFlag |= MODIFY_CALC_NOTES; 2456 } 2457 else if ( &aRowsBtn == (RadioButton*)pCtrl ) 2458 nModifyFlag |= MODIFY_ROWS; 2459 else if ( &aColumnsBtn == (RadioButton*)pCtrl ) 2460 nModifyFlag |= MODIFY_COLUMNS; 2461 else if ( &aAllSheetsCB == (CheckBox*)pCtrl ) 2462 nModifyFlag |= MODIFY_ALLTABLES; 2463 } 2464 2465 // ----------------------------------------------------------------------- 2466 2467 void SvxSearchDialog::SaveToModule_Impl() 2468 { 2469 if ( !pSearchItem ) 2470 return; 2471 2472 if ( aLayoutBtn.IsChecked() ) 2473 { 2474 pSearchItem->SetSearchString ( aSearchTmplLB.GetSelectEntry() ); 2475 pSearchItem->SetReplaceString( aReplaceTmplLB.GetSelectEntry() ); 2476 } 2477 else 2478 { 2479 pSearchItem->SetSearchString ( aSearchLB.GetText() ); 2480 pSearchItem->SetReplaceString( aReplaceLB.GetText() ); 2481 Remember_Impl( aSearchLB.GetText(), sal_True ); 2482 } 2483 2484 pSearchItem->SetRegExp( sal_False ); 2485 pSearchItem->SetLevenshtein( sal_False ); 2486 if (GetCheckBoxValue( aRegExpBtn )) 2487 pSearchItem->SetRegExp( sal_True ); 2488 else if (GetCheckBoxValue( aSimilarityBox )) 2489 pSearchItem->SetLevenshtein( sal_True ); 2490 2491 pSearchItem->SetWordOnly( GetCheckBoxValue( aWordBtn ) ); 2492 pSearchItem->SetBackward( GetCheckBoxValue( aBackwardsBtn ) ); 2493 pSearchItem->SetNotes( GetCheckBoxValue( aNotesBtn ) ); 2494 pSearchItem->SetPattern( GetCheckBoxValue( aLayoutBtn ) ); 2495 pSearchItem->SetSelection( GetCheckBoxValue( aSelectionBtn ) ); 2496 2497 pSearchItem->SetUseAsianOptions( GetCheckBoxValue( aJapOptionsCB ) ); 2498 sal_Int32 nFlags = GetTransliterationFlags(); 2499 if( !pSearchItem->IsUseAsianOptions()) 2500 nFlags &= (TransliterationModules_IGNORE_CASE | 2501 TransliterationModules_IGNORE_WIDTH ); 2502 pSearchItem->SetTransliterationFlags( nFlags ); 2503 2504 if ( !bWriter ) 2505 { 2506 if ( aCalcSearchInLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND ) 2507 pSearchItem->SetCellType( aCalcSearchInLB.GetSelectEntryPos() ); 2508 2509 pSearchItem->SetRowDirection( aRowsBtn.IsChecked() ); 2510 pSearchItem->SetAllTables( aAllSheetsCB.IsChecked() ); 2511 } 2512 2513 pSearchItem->SetCommand( SVX_SEARCHCMD_FIND ); 2514 nModifyFlag = 0; 2515 const SfxPoolItem* ppArgs[] = { pSearchItem, 0 }; 2516 rBindings.GetDispatcher()->Execute( SID_SEARCH_ITEM, SFX_CALLMODE_SLOT, ppArgs ); 2517 } 2518 2519 //IAccessible2 Implementation 2009----- 2520 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > 2521 SvxSearchDialog::GetComponentInterface( sal_Bool bCreate ) 2522 { 2523 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > xPeer 2524 (Window::GetComponentInterface(false)); 2525 if ( !xPeer.is() && bCreate ) 2526 { 2527 ::com::sun::star::awt::XWindowPeer* mxPeer = new VCLXSvxFindReplaceDialog(this); 2528 SetComponentInterface(mxPeer); 2529 return mxPeer; 2530 } 2531 else 2532 return xPeer; 2533 } 2534 //-----IAccessible2 Implementation 2009 2535 2536 // class SvxSearchDialogWrapper ------------------------------------------ 2537 2538 SFX_IMPL_CHILDWINDOW(SvxSearchDialogWrapper, SID_SEARCH_DLG); 2539 2540 // ----------------------------------------------------------------------- 2541 2542 SvxSearchDialogWrapper::SvxSearchDialogWrapper( Window* _pParent, sal_uInt16 nId, 2543 SfxBindings* pBindings, 2544 SfxChildWinInfo* pInfo ) 2545 : SfxChildWindow( _pParent, nId ) 2546 , dialog (new SvxSearchDialog (_pParent, this, *pBindings)) 2547 { 2548 pWindow = LAYOUT_THIS_WINDOW (dialog); 2549 dialog->Initialize( pInfo ); 2550 2551 pBindings->Update( SID_SEARCH_ITEM ); 2552 pBindings->Update( SID_SEARCH_OPTIONS ); 2553 pBindings->Update( SID_SEARCH_SEARCHSET ); 2554 pBindings->Update( SID_SEARCH_REPLACESET ); 2555 eChildAlignment = SFX_ALIGN_NOALIGNMENT; 2556 dialog->bConstruct = sal_False; 2557 } 2558 2559 SvxSearchDialogWrapper::~SvxSearchDialogWrapper () 2560 { 2561 #if ENABLE_LAYOUT 2562 delete dialog; 2563 pWindow = 0; 2564 #endif /* ENABLE_LAYOUT */ 2565 } 2566 2567 SvxSearchDialog *SvxSearchDialogWrapper::getDialog () 2568 { 2569 return dialog; 2570 } 2571 2572 // ----------------------------------------------------------------------- 2573 2574 SfxChildWinInfo SvxSearchDialogWrapper::GetInfo() const 2575 { 2576 SfxChildWinInfo aInfo = SfxChildWindow::GetInfo(); 2577 aInfo.bVisible = sal_False; 2578 return aInfo; 2579 } 2580 2581