LCOV - code coverage report
Current view: top level - svx/source/dialog - srchdlg.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 21 1344 1.6 %
Date: 2015-06-13 12:38:46 Functions: 6 69 8.7 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : 
      21             : #include <sal/macros.h>
      22             : #include <vcl/wrkwin.hxx>
      23             : #include <vcl/morebtn.hxx>
      24             : #include <vcl/msgbox.hxx>
      25             : #include <vcl/timer.hxx>
      26             : #include <svl/slstitm.hxx>
      27             : #include <svl/itemiter.hxx>
      28             : #include <svl/style.hxx>
      29             : #include <unotools/moduleoptions.hxx>
      30             : #include <unotools/searchopt.hxx>
      31             : #include <sfx2/dispatch.hxx>
      32             : #include <sfx2/objsh.hxx>
      33             : #include <sfx2/module.hxx>
      34             : #include <sfx2/viewsh.hxx>
      35             : #include <sfx2/basedlgs.hxx>
      36             : #include <svl/cjkoptions.hxx>
      37             : #include <svl/ctloptions.hxx>
      38             : #include <com/sun/star/awt/XWindow.hpp>
      39             : #include <com/sun/star/container/XNameAccess.hpp>
      40             : #include <com/sun/star/i18n/TransliterationModules.hpp>
      41             : #include <com/sun/star/i18n/TransliterationModulesExtra.hpp>
      42             : #include <com/sun/star/frame/XDispatch.hpp>
      43             : #include <com/sun/star/frame/XDispatchProvider.hpp>
      44             : #include <com/sun/star/frame/XLayoutManager.hpp>
      45             : #include <com/sun/star/beans/PropertyValue.hpp>
      46             : #include <com/sun/star/configuration/theDefaultProvider.hpp>
      47             : #include <com/sun/star/frame/ModuleManager.hpp>
      48             : #include <com/sun/star/ui/XUIElement.hpp>
      49             : #include <comphelper/processfactory.hxx>
      50             : #include <svl/itempool.hxx>
      51             : #include <svl/intitem.hxx>
      52             : 
      53             : #include <sfx2/app.hxx>
      54             : #include <toolkit/helper/vclunohelper.hxx>
      55             : 
      56             : #include "svx/srchdlg.hxx"
      57             : 
      58             : #include <svx/dialogs.hrc>
      59             : #include <svx/svxitems.hrc>
      60             : 
      61             : #include <svl/srchitem.hxx>
      62             : #include <AccessibleSvxFindReplaceDialog.hxx>
      63             : #include <svx/pageitem.hxx>
      64             : #include "srchctrl.hxx"
      65             : #include <svx/dialmgr.hxx>
      66             : #include "svx/dlgutil.hxx"
      67             : #include <editeng/brushitem.hxx>
      68             : #include <tools/resary.hxx>
      69             : #include <svx/svxdlg.hxx>
      70             : #include <vcl/toolbox.hxx>
      71             : #include <boost/scoped_array.hpp>
      72             : #include <boost/scoped_ptr.hpp>
      73             : 
      74             : using namespace com::sun::star::i18n;
      75             : using namespace com::sun::star::uno;
      76             : using namespace com::sun::star::accessibility;
      77             : using namespace com::sun::star;
      78             : using namespace comphelper;
      79             : 
      80             : 
      81             : 
      82             : #define REMEMBER_SIZE       10
      83             : 
      84             : #define MODIFY_SEARCH       0x00000001
      85             : #define MODIFY_REPLACE      0x00000002
      86             : #define MODIFY_WORD         0x00000004
      87             : #define MODIFY_EXACT        0x00000008
      88             : #define MODIFY_BACKWARDS    0x00000010
      89             : #define MODIFY_SELECTION    0x00000020
      90             : #define MODIFY_REGEXP       0x00000040
      91             : #define MODIFY_LAYOUT       0x00000080
      92             : #define MODIFY_SIMILARITY   0x00000100
      93             : #define MODIFY_FORMULAS     0x00000200
      94             : #define MODIFY_VALUES       0x00000400
      95             : #define MODIFY_CALC_NOTES   0x00000800
      96             : #define MODIFY_ROWS         0x00001000
      97             : #define MODIFY_COLUMNS      0x00002000
      98             : #define MODIFY_ALLTABLES    0x00004000
      99             : #define MODIFY_NOTES        0x00008000
     100             : 
     101             : namespace
     102             : {
     103           0 :     bool GetCheckBoxValue(const CheckBox *pBox)
     104             :     {
     105           0 :         return pBox->IsEnabled() && pBox->IsChecked();
     106             :     }
     107             : }
     108             : 
     109             : struct SearchDlg_Impl
     110             : {
     111             :     bool        bSaveToModule  : 1,
     112             :                 bFocusOnSearch : 1;
     113             :     sal_uInt16* pRanges;
     114             :     Timer       aSelectionTimer;
     115             : 
     116             :     uno::Reference< frame::XDispatch > xCommand1Dispatch;
     117             :     uno::Reference< frame::XDispatch > xCommand2Dispatch;
     118             :     util::URL   aCommand1URL;
     119             :     util::URL   aCommand2URL;
     120             : 
     121           0 :     SearchDlg_Impl()
     122             :         : bSaveToModule(true)
     123             :         , bFocusOnSearch(true)
     124           0 :         , pRanges(NULL)
     125             :     {
     126           0 :         aCommand1URL.Complete = aCommand1URL.Main = "vnd.sun.search:SearchViaComponent1";
     127           0 :         aCommand1URL.Protocol = "vnd.sun.search:";
     128           0 :         aCommand1URL.Path = "SearchViaComponent1";
     129           0 :         aCommand2URL.Complete = aCommand2URL.Main = "vnd.sun.search:SearchViaComponent2";
     130           0 :         aCommand2URL.Protocol = "vnd.sun.search:";
     131           0 :         aCommand2URL.Path = "SearchViaComponent2";
     132           0 :     }
     133           0 :     ~SearchDlg_Impl() { delete[] pRanges; }
     134             : };
     135             : 
     136           0 : void ListToStrArr_Impl( sal_uInt16 nId, std::vector<OUString>& rStrLst, ComboBox& rCBox )
     137             : {
     138             :     const SfxStringListItem* pSrchItem =
     139           0 :         static_cast<const SfxStringListItem*>(SfxGetpApp()->GetItem( nId ));
     140             : 
     141           0 :     if (pSrchItem)
     142             :     {
     143           0 :         std::vector<OUString> aLst = pSrchItem->GetList();
     144             : 
     145           0 :         for ( size_t i = 0; i < aLst.size(); ++i )
     146             :         {
     147           0 :             rStrLst.push_back(aLst[i]);
     148           0 :             rCBox.InsertEntry(aLst[i]);
     149           0 :         }
     150             :     }
     151           0 : }
     152             : 
     153           0 : void StrArrToList_Impl( sal_uInt16 nId, const std::vector<OUString>& rStrLst )
     154             : {
     155             :     DBG_ASSERT( !rStrLst.empty(), "check in advance");
     156           0 :     SfxGetpApp()->PutItem( SfxStringListItem( nId, &rStrLst ) );
     157           0 : }
     158             : 
     159           0 : SearchAttrItemList::SearchAttrItemList( const SearchAttrItemList& rList ) :
     160           0 :     SrchAttrItemList(rList)
     161             : {
     162           0 :     for ( size_t i = 0; i < size(); ++i )
     163           0 :         if ( !IsInvalidItem( (*this)[i].pItem ) )
     164           0 :             (*this)[i].pItem = (*this)[i].pItem->Clone();
     165           0 : }
     166             : 
     167             : 
     168             : 
     169           0 : SearchAttrItemList::~SearchAttrItemList()
     170             : {
     171           0 :     Clear();
     172           0 : }
     173             : 
     174             : 
     175             : 
     176           0 : void SearchAttrItemList::Put( const SfxItemSet& rSet )
     177             : {
     178           0 :     if ( !rSet.Count() )
     179           0 :         return;
     180             : 
     181           0 :     SfxItemPool* pPool = rSet.GetPool();
     182           0 :     SfxItemIter aIter( rSet );
     183             :     SearchAttrItem aItem;
     184           0 :     const SfxPoolItem* pItem = aIter.GetCurItem();
     185             :     sal_uInt16 nWhich;
     186             : 
     187             :     while ( true )
     188             :     {
     189             :         // only test that it is available?
     190           0 :         if( IsInvalidItem( pItem ) )
     191             :         {
     192           0 :             nWhich = rSet.GetWhichByPos( aIter.GetCurPos() );
     193           0 :             aItem.pItem = const_cast<SfxPoolItem*>(pItem);
     194             :         }
     195             :         else
     196             :         {
     197           0 :             nWhich = pItem->Which();
     198           0 :             aItem.pItem = pItem->Clone();
     199             :         }
     200             : 
     201           0 :         aItem.nSlot = pPool->GetSlotId( nWhich );
     202           0 :         Insert( aItem );
     203             : 
     204           0 :         if ( aIter.IsAtEnd() )
     205           0 :             break;
     206           0 :         pItem = aIter.NextItem();
     207           0 :     }
     208             : }
     209             : 
     210             : 
     211             : 
     212           0 : SfxItemSet& SearchAttrItemList::Get( SfxItemSet& rSet )
     213             : {
     214           0 :     SfxItemPool* pPool = rSet.GetPool();
     215             : 
     216           0 :     for ( size_t i = 0; i < size(); ++i )
     217           0 :         if ( IsInvalidItem( (*this)[i].pItem ) )
     218           0 :             rSet.InvalidateItem( pPool->GetWhich( (*this)[i].nSlot ) );
     219             :         else
     220           0 :             rSet.Put( *(*this)[i].pItem );
     221           0 :     return rSet;
     222             : }
     223             : 
     224             : 
     225             : 
     226           0 : void SearchAttrItemList::Clear()
     227             : {
     228           0 :     for ( size_t i = 0; i < size(); ++i )
     229           0 :         if ( !IsInvalidItem( (*this)[i].pItem ) )
     230           0 :             delete (*this)[i].pItem;
     231           0 :     SrchAttrItemList::clear();
     232           0 : }
     233             : 
     234             : 
     235             : 
     236             : // Deletes the pointer to the items
     237           0 : void SearchAttrItemList::Remove(size_t nPos, size_t nLen)
     238             : {
     239           0 :     if ( nPos + nLen > size() )
     240           0 :         nLen = size() - nPos;
     241             : 
     242           0 :     for ( sal_uInt16 i = nPos; i < nPos + nLen; ++i )
     243           0 :         if ( !IsInvalidItem( (*this)[i].pItem ) )
     244           0 :             delete (*this)[i].pItem;
     245             : 
     246           0 :     SrchAttrItemList::erase( begin() + nPos, begin() + nPos + nLen );
     247           0 : }
     248             : 
     249           0 : SvxSearchDialog::SvxSearchDialog( vcl::Window* pParent, SfxChildWindow* pChildWin, SfxBindings& rBind )
     250             :     : SfxModelessDialog(&rBind, pChildWin, pParent, "FindReplaceDialog",
     251             :         "svx/ui/findreplacedialog.ui")
     252             :     , mpDocWin(NULL)
     253             :     , mbSuccess(false)
     254             :     , rBindings(rBind)
     255             :     , bWriter(false)
     256             :     , bSearch(true)
     257             :     , bFormat(false)
     258             :     , nOptions(SearchOptionFlags::ALL)
     259             :     , bSet(false)
     260             :     , bReadOnly(false)
     261             :     , bConstruct(true)
     262             :     , nModifyFlag(0)
     263             :     , pImpl(NULL)
     264             :     , pSearchList(NULL)
     265           0 :     , pReplaceList(new SearchAttrItemList)
     266             :     , pSearchItem(NULL)
     267             :     , pSearchController(NULL)
     268             :     , pOptionsController(NULL)
     269             :     , pFamilyController(NULL)
     270             :     , pSearchSetController(NULL)
     271             :     , pReplaceSetController(NULL)
     272           0 :     , nTransliterationFlags(0x00000000)
     273             : {
     274           0 :     get(m_pSearchFrame, "searchframe");
     275           0 :     get(m_pSearchLB, "searchterm");
     276           0 :     get(m_pSearchTmplLB, "searchlist");
     277           0 :     m_pSearchTmplLB->SetStyle(m_pSearchTmplLB->GetStyle() | WB_SORT);
     278           0 :     get(m_pSearchBtn, "search");
     279           0 :     get(m_pSearchAllBtn, "searchall");
     280           0 :     get(m_pSearchAttrText, "searchdesc");
     281           0 :     m_pSearchAttrText->SetStyle(m_pSearchAttrText->GetStyle() | WB_PATHELLIPSIS);
     282           0 :     m_pSearchAttrText->Show();
     283           0 :     get(m_pSearchLabel, "searchlabel");
     284           0 :     m_pSearchLabel->SetStyle(m_pSearchLabel->GetStyle() | WB_PATHELLIPSIS);
     285           0 :     m_pSearchLabel->Show();
     286             : 
     287           0 :     get(m_pReplaceFrame, "replaceframe");
     288           0 :     get(m_pReplaceLB, "replaceterm");
     289           0 :     get(m_pReplaceTmplLB, "replacelist");
     290           0 :     m_pReplaceTmplLB->SetStyle(m_pReplaceTmplLB->GetStyle() | WB_SORT);
     291           0 :     get(m_pReplaceBtn, "replace");
     292           0 :     get(m_pReplaceAllBtn, "replaceall");
     293           0 :     get(m_pReplaceAttrText, "replacedesc");
     294           0 :     m_pReplaceAttrText->SetStyle(m_pReplaceAttrText->GetStyle() | WB_PATHELLIPSIS);
     295           0 :     m_pReplaceAttrText->Show();
     296             : 
     297           0 :     get(m_pComponentFrame, "componentframe");
     298           0 :     get(m_pSearchComponent1PB, "component1");
     299           0 :     get(m_pSearchComponent2PB, "component2");
     300             : 
     301           0 :     get(m_pMatchCaseCB, "matchcase");
     302           0 :     get(m_pWordBtn, "wholewords");
     303           0 :     aCalcStr = get<FixedText>("entirecells")->GetText();
     304             : 
     305           0 :     get(m_pCloseBtn, "close");
     306             : 
     307           0 :     get(m_pIgnoreDiacritics, "ignorediacritics");
     308           0 :     get(m_pIgnoreKashida, "ignorekashida");
     309           0 :     get(m_pSelectionBtn, "selection");
     310           0 :     get(m_pBackwardsBtn, "backwards");
     311           0 :     get(m_pRegExpBtn, "regexp");
     312           0 :     get(m_pSimilarityBox, "similarity");
     313           0 :     get(m_pSimilarityBtn, "similaritybtn");
     314           0 :     get(m_pLayoutBtn, "layout");
     315           0 :     get(m_pNotesBtn, "notes");
     316           0 :     get(m_pJapMatchFullHalfWidthCB, "matchcharwidth");
     317           0 :     get(m_pJapOptionsCB, "soundslike");
     318           0 :     get(m_pJapOptionsBtn, "soundslikebtn");
     319             : 
     320           0 :     get(m_pAttributeBtn, "attributes");
     321           0 :     get(m_pFormatBtn, "format");
     322           0 :     get(m_pNoFormatBtn, "noformat");
     323             : 
     324           0 :     get(m_pCalcGrid, "calcgrid");
     325           0 :     get(m_pCalcSearchInFT, "searchinlabel");
     326           0 :     get(m_pCalcSearchInLB, "calcsearchin");
     327           0 :     get(m_pCalcSearchDirFT, "searchdir");
     328           0 :     get(m_pRowsBtn, "rows");
     329           0 :     get(m_pColumnsBtn, "cols");
     330           0 :     get(m_pAllSheetsCB, "allsheets");
     331             : 
     332           0 :     m_pSimilarityBtn->set_height_request(m_pSimilarityBox->get_preferred_size().Height());
     333           0 :     m_pJapOptionsBtn->set_height_request(m_pJapOptionsCB->get_preferred_size().Height());
     334             : 
     335           0 :     long nTermWidth = approximate_char_width() * 32;
     336           0 :     m_pSearchLB->set_width_request(nTermWidth);
     337           0 :     m_pSearchTmplLB->set_width_request(nTermWidth);
     338           0 :     m_pReplaceLB->set_width_request(nTermWidth);
     339           0 :     m_pReplaceTmplLB->set_width_request(nTermWidth);
     340             : 
     341           0 :     Construct_Impl();
     342           0 : }
     343             : 
     344             : 
     345             : 
     346           0 : SvxSearchDialog::~SvxSearchDialog()
     347             : {
     348           0 :     disposeOnce();
     349           0 : }
     350             : 
     351           0 : void SvxSearchDialog::dispose()
     352             : {
     353           0 :     Hide();
     354             : 
     355           0 :     rBindings.EnterRegistrations();
     356           0 :     DELETEZ( pSearchController );
     357           0 :     DELETEZ( pOptionsController );
     358           0 :     DELETEZ( pFamilyController );
     359           0 :     DELETEZ( pSearchSetController );
     360           0 :     DELETEZ( pReplaceSetController );
     361           0 :     rBindings.LeaveRegistrations();
     362             : 
     363           0 :     delete pSearchItem;
     364           0 :     delete pImpl;
     365           0 :     delete pSearchList;
     366           0 :     delete pReplaceList;
     367           0 :     mpDocWin.clear();
     368           0 :     m_pSearchFrame.clear();
     369           0 :     m_pSearchLB.clear();
     370           0 :     m_pSearchTmplLB.clear();
     371           0 :     m_pSearchAttrText.clear();
     372           0 :     m_pSearchLabel.clear();
     373           0 :     m_pReplaceFrame.clear();
     374           0 :     m_pReplaceLB.clear();
     375           0 :     m_pReplaceTmplLB.clear();
     376           0 :     m_pReplaceAttrText.clear();
     377           0 :     m_pSearchBtn.clear();
     378           0 :     m_pSearchAllBtn.clear();
     379           0 :     m_pReplaceBtn.clear();
     380           0 :     m_pReplaceAllBtn.clear();
     381           0 :     m_pComponentFrame.clear();
     382           0 :     m_pSearchComponent1PB.clear();
     383           0 :     m_pSearchComponent2PB.clear();
     384           0 :     m_pMatchCaseCB.clear();
     385           0 :     m_pWordBtn.clear();
     386           0 :     m_pCloseBtn.clear();
     387           0 :     m_pIgnoreDiacritics.clear();
     388           0 :     m_pIgnoreKashida.clear();
     389           0 :     m_pSelectionBtn.clear();
     390           0 :     m_pBackwardsBtn.clear();
     391           0 :     m_pRegExpBtn.clear();
     392           0 :     m_pSimilarityBox.clear();
     393           0 :     m_pSimilarityBtn.clear();
     394           0 :     m_pLayoutBtn.clear();
     395           0 :     m_pNotesBtn.clear();
     396           0 :     m_pJapMatchFullHalfWidthCB.clear();
     397           0 :     m_pJapOptionsCB.clear();
     398           0 :     m_pJapOptionsBtn.clear();
     399           0 :     m_pAttributeBtn.clear();
     400           0 :     m_pFormatBtn.clear();
     401           0 :     m_pNoFormatBtn.clear();
     402           0 :     m_pCalcGrid.clear();
     403           0 :     m_pCalcSearchInFT.clear();
     404           0 :     m_pCalcSearchInLB.clear();
     405           0 :     m_pCalcSearchDirFT.clear();
     406           0 :     m_pRowsBtn.clear();
     407           0 :     m_pColumnsBtn.clear();
     408           0 :     m_pAllSheetsCB.clear();
     409           0 :     SfxModelessDialog::dispose();
     410           0 : }
     411             : 
     412           0 : void SvxSearchDialog::Construct_Impl()
     413             : {
     414             :     // temporary to avoid incompatibility
     415           0 :     pImpl = new SearchDlg_Impl();
     416           0 :     pImpl->aSelectionTimer.SetTimeout( 500 );
     417             :     pImpl->aSelectionTimer.SetTimeoutHdl(
     418           0 :         LINK( this, SvxSearchDialog, TimeoutHdl_Impl ) );
     419           0 :     EnableControls_Impl( SearchOptionFlags::NONE );
     420             : 
     421             :     // Store old Text from m_pWordBtn
     422           0 :     aCalcStr += "#";
     423           0 :     aCalcStr += m_pWordBtn->GetText();
     424             : 
     425           0 :     aLayoutStr = SVX_RESSTR( RID_SVXSTR_SEARCH_STYLES );
     426           0 :     aLayoutWriterStr = SVX_RESSTR( RID_SVXSTR_WRITER_STYLES );
     427           0 :     aLayoutCalcStr = SVX_RESSTR( RID_SVXSTR_CALC_STYLES );
     428           0 :     aStylesStr = m_pLayoutBtn->GetText();
     429             : 
     430             :     // Get stored search-strings from the application
     431             :     ListToStrArr_Impl(SID_SEARCHDLG_SEARCHSTRINGS,
     432           0 :                        aSearchStrings, *m_pSearchLB);
     433             :     ListToStrArr_Impl(SID_SEARCHDLG_REPLACESTRINGS,
     434           0 :                        aReplaceStrings, *m_pReplaceLB);
     435             : 
     436           0 :     InitControls_Impl();
     437             : 
     438             :     // Get attribute sets only once in construtor()
     439           0 :     const SfxPoolItem* ppArgs[] = { pSearchItem, 0 };
     440             :     const SvxSetItem* pSrchSetItem =
     441           0 :         static_cast<const SvxSetItem*>( rBindings.GetDispatcher()->Execute( FID_SEARCH_SEARCHSET, SfxCallMode::SLOT, ppArgs ) );
     442             : 
     443           0 :     if ( pSrchSetItem )
     444           0 :         InitAttrList_Impl( &pSrchSetItem->GetItemSet(), 0 );
     445             : 
     446             :     const SvxSetItem* pReplSetItem =
     447           0 :         static_cast<const SvxSetItem*>( rBindings.GetDispatcher()->Execute( FID_SEARCH_REPLACESET, SfxCallMode::SLOT, ppArgs ) );
     448             : 
     449           0 :     if ( pReplSetItem )
     450           0 :         InitAttrList_Impl( 0, &pReplSetItem->GetItemSet() );
     451             : 
     452             :     // Create controller and update at once
     453           0 :     rBindings.EnterRegistrations();
     454             :     pSearchController =
     455           0 :         new SvxSearchController( SID_SEARCH_ITEM, rBindings, *this );
     456             :     pOptionsController =
     457           0 :         new SvxSearchController( SID_SEARCH_OPTIONS, rBindings, *this );
     458           0 :     rBindings.LeaveRegistrations();
     459           0 :     rBindings.GetDispatcher()->Execute( FID_SEARCH_ON, SfxCallMode::SLOT, ppArgs );
     460           0 :     pImpl->aSelectionTimer.Start();
     461             : 
     462             : 
     463           0 :     SvtCJKOptions aCJKOptions;
     464           0 :     if(!aCJKOptions.IsJapaneseFindEnabled())
     465             :     {
     466           0 :         m_pJapOptionsCB->Check( false );
     467           0 :         m_pJapOptionsCB->Hide();
     468           0 :         m_pJapOptionsBtn->Hide();
     469             :     }
     470           0 :     if(!aCJKOptions.IsCJKFontEnabled())
     471             :     {
     472           0 :         m_pJapMatchFullHalfWidthCB->Hide();
     473             :     }
     474           0 :     SvtCTLOptions aCTLOptions;
     475           0 :     if(!aCTLOptions.IsCTLFontEnabled())
     476             :     {
     477           0 :         m_pIgnoreDiacritics->Check( false );
     478           0 :         m_pIgnoreDiacritics->Hide();
     479           0 :         m_pIgnoreKashida->Check( false );
     480           0 :         m_pIgnoreKashida->Hide();
     481             :     }
     482             :     //component extension - show component search buttons if the commands
     483             :     // vnd.sun.star::SearchViaComponent1 and 2 are supported
     484           0 :     const uno::Reference< frame::XFrame >xFrame = rBindings.GetActiveFrame();
     485           0 :     const uno::Reference< frame::XDispatchProvider > xDispatchProv(xFrame, uno::UNO_QUERY);
     486           0 :     OUString sTarget("_self");
     487             : 
     488           0 :     bool bSearchComponent1 = false;
     489           0 :     bool bSearchComponent2 = false;
     490           0 :     if(xDispatchProv.is() &&
     491           0 :             (pImpl->xCommand1Dispatch = xDispatchProv->queryDispatch(pImpl->aCommand1URL, sTarget, 0)).is())
     492             :     {
     493           0 :         bSearchComponent1 = true;
     494             :     }
     495           0 :     if(xDispatchProv.is() &&
     496           0 :             (pImpl->xCommand2Dispatch = xDispatchProv->queryDispatch(pImpl->aCommand2URL, sTarget, 0)).is())
     497             :     {
     498           0 :         bSearchComponent2 = true;
     499             :     }
     500             : 
     501           0 :     if( bSearchComponent1 || bSearchComponent2 )
     502             :     {
     503             :         try
     504             :         {
     505             :             uno::Reference< lang::XMultiServiceFactory > xConfigurationProvider =
     506           0 :                     configuration::theDefaultProvider::get( comphelper::getProcessComponentContext() );
     507           0 :             uno::Sequence< uno::Any > aArgs(1);
     508           0 :             OUString sPath( "/org.openoffice.Office.Common/SearchOptions/");
     509           0 :             aArgs[0] <<= sPath;
     510             : 
     511           0 :             uno::Reference< uno::XInterface > xIFace = xConfigurationProvider->createInstanceWithArguments(
     512             :                         OUString( "com.sun.star.configuration.ConfigurationUpdateAccess"),
     513           0 :                         aArgs);
     514           0 :             uno::Reference< container::XNameAccess> xDirectAccess(xIFace, uno::UNO_QUERY);
     515           0 :             if(xDirectAccess.is())
     516             :             {
     517           0 :                 OUString sTemp;
     518           0 :                 OUString sProperty( "ComponentSearchGroupLabel");
     519           0 :                 uno::Any aRet = xDirectAccess->getByName(sProperty);
     520           0 :                 aRet >>= sTemp;
     521           0 :                 m_pComponentFrame->get_label_widget()->SetText(sTemp);
     522           0 :                 aRet = xDirectAccess->getByName("ComponentSearchCommandLabel1");
     523           0 :                 aRet >>= sTemp;
     524           0 :                 m_pSearchComponent1PB->SetText( sTemp );
     525           0 :                 aRet = xDirectAccess->getByName("ComponentSearchCommandLabel2");
     526           0 :                 aRet >>= sTemp;
     527           0 :                 m_pSearchComponent2PB->SetText( sTemp );
     528           0 :             }
     529             :         }
     530           0 :         catch(uno::Exception&){}
     531             : 
     532           0 :         if(!m_pSearchComponent1PB->GetText().isEmpty() && bSearchComponent1 )
     533             :         {
     534           0 :             m_pComponentFrame->Show();
     535           0 :             m_pSearchComponent1PB->Show();
     536             :         }
     537           0 :         if( !m_pSearchComponent2PB->GetText().isEmpty() )
     538             :         {
     539           0 :             m_pComponentFrame->Show();
     540           0 :             m_pSearchComponent2PB->Show();
     541             :         }
     542           0 :     }
     543           0 : }
     544             : 
     545             : 
     546             : 
     547           0 : bool SvxSearchDialog::Close()
     548             : {
     549             :     // remember strings speichern
     550           0 :     if (!aSearchStrings.empty())
     551           0 :         StrArrToList_Impl( SID_SEARCHDLG_SEARCHSTRINGS, aSearchStrings );
     552             : 
     553           0 :     if (!aReplaceStrings.empty())
     554           0 :         StrArrToList_Impl( SID_SEARCHDLG_REPLACESTRINGS, aReplaceStrings );
     555             : 
     556             :     // save settings to configuration
     557           0 :     SvtSearchOptions aOpt;
     558           0 :     aOpt.SetWholeWordsOnly          ( m_pWordBtn->IsChecked() );
     559           0 :     aOpt.SetBackwards               ( m_pBackwardsBtn->IsChecked() );
     560           0 :     aOpt.SetUseRegularExpression    ( m_pRegExpBtn->IsChecked() );
     561           0 :     aOpt.SetSearchForStyles         ( m_pLayoutBtn->IsChecked() );
     562           0 :     aOpt.SetSimilaritySearch        ( m_pSimilarityBox->IsChecked() );
     563           0 :     aOpt.SetUseAsianOptions         ( m_pJapOptionsCB->IsChecked() );
     564           0 :     aOpt.SetNotes                   ( m_pNotesBtn->IsChecked() );
     565           0 :     aOpt.SetIgnoreDiacritics_CTL    ( m_pIgnoreDiacritics->IsChecked() );
     566           0 :     aOpt.SetIgnoreKashida_CTL       ( m_pIgnoreKashida->IsChecked() );
     567           0 :     aOpt.Commit();
     568             : 
     569           0 :     const SfxPoolItem* ppArgs[] = { pSearchItem, 0 };
     570           0 :     rBindings.GetDispatcher()->Execute( FID_SEARCH_OFF, SfxCallMode::SLOT, ppArgs );
     571           0 :     rBindings.Execute( SID_SEARCH_DLG );
     572             : 
     573           0 :     return true;
     574             : }
     575             : 
     576             : 
     577             : 
     578           0 : sal_Int32 SvxSearchDialog::GetTransliterationFlags() const
     579             : {
     580           0 :     if (!m_pMatchCaseCB->IsChecked())
     581           0 :         nTransliterationFlags |=  TransliterationModules_IGNORE_CASE;
     582             :     else
     583           0 :         nTransliterationFlags &= ~TransliterationModules_IGNORE_CASE;
     584           0 :     if ( !m_pJapMatchFullHalfWidthCB->IsChecked())
     585           0 :         nTransliterationFlags |=  TransliterationModules_IGNORE_WIDTH;
     586             :     else
     587           0 :         nTransliterationFlags &= ~TransliterationModules_IGNORE_WIDTH;
     588           0 :     return nTransliterationFlags;
     589             : }
     590             : 
     591           0 : void SvxSearchDialog::SetSaveToModule(bool b)
     592             : {
     593           0 :     pImpl->bSaveToModule = b;
     594           0 : }
     595             : 
     596             : 
     597             : 
     598           0 : void SvxSearchDialog::ApplyTransliterationFlags_Impl( sal_Int32 nSettings )
     599             : {
     600           0 :     nTransliterationFlags = nSettings;
     601           0 :     bool bVal = 0 != (nSettings & TransliterationModules_IGNORE_CASE);
     602           0 :     m_pMatchCaseCB->Check(!bVal );
     603           0 :     bVal = 0 != (nSettings & TransliterationModules_IGNORE_WIDTH);
     604           0 :     m_pJapMatchFullHalfWidthCB->Check( !bVal );
     605           0 : }
     606             : 
     607             : 
     608             : 
     609           0 : void SvxSearchDialog::Activate()
     610             : {
     611             :     // apply possible transliteration changes of the SvxSearchItem member
     612             :     DBG_ASSERT( pSearchItem, "SearchItem missing" );
     613           0 :     if (pSearchItem)
     614             :     {
     615           0 :         m_pMatchCaseCB->Check( pSearchItem->GetExact() );
     616           0 :         m_pJapMatchFullHalfWidthCB->Check( !pSearchItem->IsMatchFullHalfWidthForms() );
     617             :     }
     618           0 : }
     619             : 
     620             : 
     621             : 
     622           0 : void SvxSearchDialog::InitControls_Impl()
     623             : {
     624             :     // CaseSensitives AutoComplete
     625           0 :     m_pSearchLB->EnableAutocomplete( true, true );
     626           0 :     m_pSearchLB->Show();
     627           0 :     m_pReplaceLB->EnableAutocomplete( true, true );
     628           0 :     m_pReplaceLB->Show();
     629             : 
     630           0 :     m_pFormatBtn->Disable();
     631           0 :     m_pAttributeBtn->Disable();
     632             : 
     633           0 :     m_pSearchLB->SetModifyHdl( LINK( this, SvxSearchDialog, ModifyHdl_Impl ) );
     634           0 :     m_pReplaceLB->SetModifyHdl( LINK( this, SvxSearchDialog, ModifyHdl_Impl ) );
     635             : 
     636           0 :     Link<> aLink = LINK( this, SvxSearchDialog, FocusHdl_Impl );
     637           0 :     m_pSearchLB->SetGetFocusHdl( aLink );
     638           0 :     m_pReplaceLB->SetGetFocusHdl( aLink );
     639             : 
     640           0 :     aLink = LINK( this, SvxSearchDialog, LoseFocusHdl_Impl );
     641           0 :     m_pSearchLB->SetLoseFocusHdl( aLink );
     642           0 :     m_pReplaceLB->SetLoseFocusHdl( aLink );
     643             : 
     644           0 :     m_pSearchTmplLB->SetLoseFocusHdl( aLink );
     645           0 :     m_pReplaceTmplLB->SetLoseFocusHdl( aLink );
     646             : 
     647           0 :     aLink = LINK( this, SvxSearchDialog, CommandHdl_Impl );
     648           0 :     m_pSearchBtn->SetClickHdl( aLink );
     649           0 :     m_pSearchAllBtn->SetClickHdl( aLink );
     650           0 :     m_pReplaceBtn->SetClickHdl( aLink );
     651           0 :     m_pReplaceAllBtn->SetClickHdl( aLink );
     652           0 :     m_pCloseBtn->SetClickHdl( aLink );
     653           0 :     m_pSimilarityBtn->SetClickHdl( aLink );
     654           0 :     m_pJapOptionsBtn->SetClickHdl( aLink );
     655           0 :     m_pSearchComponent1PB->SetClickHdl( aLink );
     656           0 :     m_pSearchComponent2PB->SetClickHdl( aLink );
     657             : 
     658           0 :     aLink = LINK( this, SvxSearchDialog, FlagHdl_Impl );
     659           0 :     m_pWordBtn->SetClickHdl( aLink );
     660           0 :     m_pSelectionBtn->SetClickHdl( aLink );
     661           0 :     m_pMatchCaseCB->SetClickHdl( aLink );
     662           0 :     m_pRegExpBtn->SetClickHdl( aLink );
     663           0 :     m_pBackwardsBtn->SetClickHdl( aLink );
     664           0 :     m_pNotesBtn->SetClickHdl( aLink );
     665           0 :     m_pSimilarityBox->SetClickHdl( aLink );
     666           0 :     m_pJapOptionsCB->SetClickHdl( aLink );
     667           0 :     m_pJapMatchFullHalfWidthCB->SetClickHdl( aLink );
     668           0 :     m_pIgnoreDiacritics->SetClickHdl( aLink );
     669           0 :     m_pIgnoreKashida->SetClickHdl( aLink );
     670           0 :     m_pLayoutBtn->SetClickHdl( LINK( this, SvxSearchDialog, TemplateHdl_Impl ) );
     671           0 :     m_pFormatBtn->SetClickHdl( LINK( this, SvxSearchDialog, FormatHdl_Impl ) );
     672           0 :     m_pNoFormatBtn->SetClickHdl(
     673           0 :         LINK( this, SvxSearchDialog, NoFormatHdl_Impl ) );
     674           0 :     m_pAttributeBtn->SetClickHdl(
     675           0 :         LINK( this, SvxSearchDialog, AttributeHdl_Impl ) );
     676           0 : }
     677             : 
     678             : namespace
     679             : {
     680           0 :     SvtModuleOptions::EFactory getModule(SfxBindings& rBindings)
     681             :     {
     682           0 :         SvtModuleOptions::EFactory eFactory(SvtModuleOptions::EFactory::UNKNOWN_FACTORY);
     683             :         try
     684             :         {
     685             :             const uno::Reference< frame::XFrame > xFrame =
     686           0 :                 rBindings.GetActiveFrame();
     687             :             uno::Reference< frame::XModuleManager2 > xModuleManager(
     688           0 :                 frame::ModuleManager::create(::comphelper::getProcessComponentContext()));
     689             : 
     690           0 :             OUString aModuleIdentifier = xModuleManager->identify( xFrame );
     691           0 :             eFactory = SvtModuleOptions::ClassifyFactoryByServiceName(aModuleIdentifier);
     692             :         }
     693           0 :         catch (const uno::Exception&)
     694             :         {
     695             :         }
     696           0 :         return eFactory;
     697             :     }
     698             : }
     699             : 
     700           0 : void SvxSearchDialog::ShowOptionalControls_Impl()
     701             : {
     702             :     DBG_ASSERT( pSearchItem, "no search item" );
     703             : 
     704           0 :     SvtCJKOptions aCJKOptions;
     705           0 :     SvtCTLOptions aCTLOptions;
     706           0 :     SvtModuleOptions::EFactory eFactory = getModule(rBindings);
     707           0 :     bool bDrawApp = eFactory == SvtModuleOptions::EFactory::DRAW;
     708             :     bool bWriterApp =
     709           0 :         eFactory == SvtModuleOptions::EFactory::WRITER ||
     710           0 :         eFactory == SvtModuleOptions::EFactory::WRITERWEB ||
     711           0 :         eFactory == SvtModuleOptions::EFactory::WRITERGLOBAL;
     712           0 :     bool bCalcApp = eFactory == SvtModuleOptions::EFactory::CALC;
     713             : 
     714           0 :     m_pLayoutBtn->Show(!bDrawApp);
     715           0 :     m_pNotesBtn->Show(bWriterApp);
     716           0 :     m_pBackwardsBtn->Show();
     717           0 :     m_pRegExpBtn->Show(!bDrawApp);
     718           0 :     m_pSimilarityBox->Show();
     719           0 :     m_pSimilarityBtn->Show();
     720           0 :     m_pSelectionBtn->Show();
     721           0 :     m_pIgnoreDiacritics->Show(aCTLOptions.IsCTLFontEnabled());
     722           0 :     m_pIgnoreKashida->Show(aCTLOptions.IsCTLFontEnabled());
     723           0 :     m_pJapMatchFullHalfWidthCB->Show(aCJKOptions.IsCJKFontEnabled());
     724           0 :     m_pJapOptionsCB->Show(aCJKOptions.IsJapaneseFindEnabled());
     725           0 :     m_pJapOptionsBtn->Show(aCJKOptions.IsJapaneseFindEnabled());
     726             : 
     727           0 :     if (bWriter)
     728             :     {
     729           0 :         m_pAttributeBtn->Show();
     730           0 :         m_pFormatBtn->Show();
     731           0 :         m_pNoFormatBtn->Show();
     732             :     }
     733             : 
     734           0 :     if (bCalcApp)
     735             :     {
     736           0 :         m_pCalcSearchInFT->Show();
     737           0 :         m_pCalcSearchInLB->Show();
     738           0 :         m_pCalcSearchDirFT->Show();
     739           0 :         m_pRowsBtn->Show();
     740           0 :         m_pColumnsBtn->Show();
     741           0 :         m_pAllSheetsCB->Show();
     742           0 :     }
     743           0 : }
     744             : 
     745             : 
     746             : 
     747             : namespace {
     748             : 
     749             : class ToggleSaveToModule
     750             : {
     751             : public:
     752           0 :     ToggleSaveToModule(SvxSearchDialog& rDialog, bool bValue) :
     753           0 :         mrDialog(rDialog), mbValue(bValue)
     754             :     {
     755           0 :         mrDialog.SetSaveToModule(mbValue);
     756           0 :     }
     757             : 
     758           0 :     ~ToggleSaveToModule()
     759             :     {
     760           0 :         mrDialog.SetSaveToModule(!mbValue);
     761           0 :     }
     762             : private:
     763             :     SvxSearchDialog& mrDialog;
     764             :     bool mbValue;
     765             : };
     766             : 
     767             : }
     768             : 
     769           0 : void SvxSearchDialog::Init_Impl( bool bSearchPattern )
     770             : {
     771             :     DBG_ASSERT( pSearchItem, "SearchItem == 0" );
     772             : 
     773             :     // We don't want to save any intermediate state to the module while the
     774             :     // dialog is being initialized.
     775           0 :     ToggleSaveToModule aNoModuleSave(*this, false);
     776           0 :     SvtSearchOptions aOpt;
     777             : 
     778           0 :     bWriter = ( pSearchItem->GetAppFlag() == SvxSearchApp::WRITER );
     779             : 
     780           0 :     if ( ( nModifyFlag & MODIFY_WORD ) == 0 )
     781           0 :          m_pWordBtn->Check( pSearchItem->GetWordOnly() );
     782           0 :     if ( ( nModifyFlag & MODIFY_EXACT ) == 0 )
     783           0 :         m_pMatchCaseCB->Check( pSearchItem->GetExact() );
     784           0 :     if ( ( nModifyFlag & MODIFY_BACKWARDS ) == 0 )
     785           0 :         m_pBackwardsBtn->Check( pSearchItem->GetBackward() );
     786           0 :     if ( ( nModifyFlag & MODIFY_NOTES ) == 0 )
     787           0 :         m_pNotesBtn->Check( pSearchItem->GetNotes() );
     788           0 :     if ( ( nModifyFlag & MODIFY_SELECTION ) == 0 )
     789           0 :         m_pSelectionBtn->Check( pSearchItem->GetSelection() );
     790           0 :     if ( ( nModifyFlag & MODIFY_REGEXP ) == 0 )
     791           0 :         m_pRegExpBtn->Check( pSearchItem->GetRegExp() );
     792           0 :     if ( ( nModifyFlag & MODIFY_LAYOUT ) == 0 )
     793           0 :         m_pLayoutBtn->Check( pSearchItem->GetPattern() );
     794           0 :     if (m_pNotesBtn->IsChecked())
     795           0 :         m_pLayoutBtn->Disable();
     796           0 :     m_pSimilarityBox->Check( pSearchItem->IsLevenshtein() );
     797           0 :     if( m_pJapOptionsCB->IsVisible() )
     798           0 :         m_pJapOptionsCB->Check( pSearchItem->IsUseAsianOptions() );
     799           0 :     if (m_pIgnoreDiacritics->IsVisible())
     800           0 :         m_pIgnoreDiacritics->Check( aOpt.IsIgnoreDiacritics_CTL() );
     801           0 :     if (m_pIgnoreKashida->IsVisible())
     802           0 :         m_pIgnoreKashida->Check( aOpt.IsIgnoreKashida_CTL() );
     803           0 :     ApplyTransliterationFlags_Impl( pSearchItem->GetTransliterationFlags() );
     804             : 
     805           0 :     ShowOptionalControls_Impl();
     806             : 
     807           0 :     bool bDraw = false;
     808           0 :     if ( pSearchItem->GetAppFlag() == SvxSearchApp::CALC )
     809             :     {
     810           0 :         m_pCalcGrid->Show();
     811           0 :         Link<> aLink = LINK( this, SvxSearchDialog, FlagHdl_Impl );
     812           0 :         m_pCalcSearchInLB->SetSelectHdl( aLink );
     813           0 :         m_pRowsBtn->SetClickHdl( aLink );
     814           0 :         m_pColumnsBtn->SetClickHdl( aLink );
     815           0 :         m_pAllSheetsCB->SetClickHdl( aLink );
     816             : 
     817           0 :         sal_uIntPtr nModifyFlagCheck(nModifyFlag);
     818           0 :         switch ( pSearchItem->GetCellType() )
     819             :         {
     820             :             case SvxSearchCellType::FORMULA:
     821           0 :                 nModifyFlagCheck = MODIFY_FORMULAS;
     822           0 :                 break;
     823             : 
     824             :             case SvxSearchCellType::VALUE:
     825           0 :                 nModifyFlagCheck = MODIFY_VALUES;
     826           0 :                 break;
     827             : 
     828             :             case SvxSearchCellType::NOTE:
     829           0 :                 nModifyFlagCheck = MODIFY_CALC_NOTES;
     830           0 :                 break;
     831             :         }
     832           0 :         if ( (nModifyFlag & nModifyFlagCheck) == 0 )
     833           0 :             m_pCalcSearchInLB->SelectEntryPos( static_cast<sal_Int32>(pSearchItem->GetCellType()) );
     834             : 
     835           0 :         m_pWordBtn->SetText( aCalcStr.getToken( 0, '#' ) );
     836             : 
     837           0 :         if ( pSearchItem->GetRowDirection() &&
     838           0 :              ( nModifyFlag & MODIFY_ROWS ) == 0 )
     839           0 :             m_pRowsBtn->Check();
     840           0 :         else if ( !pSearchItem->GetRowDirection() &&
     841           0 :                   ( nModifyFlag & MODIFY_COLUMNS ) == 0 )
     842           0 :             m_pColumnsBtn->Check();
     843             : 
     844           0 :         if ( ( nModifyFlag & MODIFY_ALLTABLES ) == 0 )
     845           0 :             m_pAllSheetsCB->Check( pSearchItem->IsAllTables() );
     846             : 
     847             :         // only look for formatting in Writer
     848           0 :         m_pFormatBtn->Hide();
     849           0 :         m_pNoFormatBtn->Hide();
     850           0 :         m_pAttributeBtn->Hide();
     851             :     }
     852             :     else
     853             :     {
     854           0 :         m_pWordBtn->SetText( aCalcStr.getToken( 1, '#' ) );
     855             : 
     856           0 :         if ( pSearchItem->GetAppFlag() == SvxSearchApp::DRAW )
     857             :         {
     858           0 :             m_pSearchAllBtn->Hide();
     859             : 
     860           0 :             m_pRegExpBtn->Hide();
     861           0 :             m_pLayoutBtn->Hide();
     862             : 
     863             :             // only look for formatting in Writer
     864           0 :             m_pFormatBtn->Hide();
     865           0 :             m_pNoFormatBtn->Hide();
     866           0 :             m_pAttributeBtn->Hide();
     867           0 :             bDraw = true;
     868             :         }
     869             :         else
     870             :         {
     871           0 :             if ( !pSearchList )
     872             :             {
     873             :                 // Get attribute sets, if it not has been done already
     874           0 :                 const SfxPoolItem* ppArgs[] = { pSearchItem, 0 };
     875             :                 const SvxSetItem* pSrchSetItem =
     876           0 :                     static_cast<const SvxSetItem*>(rBindings.GetDispatcher()->Execute( FID_SEARCH_SEARCHSET, SfxCallMode::SLOT, ppArgs ));
     877             : 
     878           0 :                 if ( pSrchSetItem )
     879           0 :                     InitAttrList_Impl( &pSrchSetItem->GetItemSet(), 0 );
     880             : 
     881             :                 const SvxSetItem* pReplSetItem =
     882           0 :                     static_cast<const SvxSetItem*>( rBindings.GetDispatcher()->Execute( FID_SEARCH_REPLACESET, SfxCallMode::SLOT, ppArgs ) );
     883             : 
     884           0 :                 if ( pReplSetItem )
     885           0 :                     InitAttrList_Impl( 0, &pReplSetItem->GetItemSet() );
     886             :             }
     887             :         }
     888             :     }
     889             : 
     890             :     if ( false && !bDraw ) //!!!!!
     891             :     {
     892             :         m_pRegExpBtn->Show();
     893             :         m_pLayoutBtn->Show();
     894             :     }
     895             : 
     896             :     // similarity search?
     897           0 :     if ( ( nModifyFlag & MODIFY_SIMILARITY ) == 0 )
     898           0 :         m_pSimilarityBox->Check( pSearchItem->IsLevenshtein() );
     899           0 :     bSet = true;
     900             : 
     901           0 :     FlagHdl_Impl(m_pSimilarityBox);
     902           0 :     FlagHdl_Impl(m_pJapOptionsCB);
     903             : 
     904           0 :     bool bDisableSearch = false;
     905           0 :     SfxViewShell* pViewShell = SfxViewShell::Current();
     906             : 
     907           0 :     if ( pViewShell )
     908             :     {
     909           0 :         bool bText = !bSearchPattern;
     910             : 
     911           0 :         if ( pViewShell->HasSelection( bText ) )
     912           0 :             EnableControl_Impl(m_pSelectionBtn);
     913             :         else
     914             :         {
     915           0 :             m_pSelectionBtn->Check( false );
     916           0 :             m_pSelectionBtn->Disable();
     917             :         }
     918             :     }
     919             : 
     920             :     // Pattern Search and there were no AttrSets given
     921           0 :     if ( bSearchPattern )
     922             :     {
     923           0 :         SfxObjectShell* pShell = SfxObjectShell::Current();
     924             : 
     925           0 :         if ( pShell && pShell->GetStyleSheetPool() )
     926             :         {
     927             :             // Templates designed
     928           0 :             m_pSearchTmplLB->Clear();
     929           0 :             m_pReplaceTmplLB->Clear();
     930           0 :             SfxStyleSheetBasePool* pStylePool = pShell->GetStyleSheetPool();
     931             :             pStylePool->SetSearchMask( pSearchItem->GetFamily(),
     932           0 :                                        SFXSTYLEBIT_ALL );
     933           0 :             SfxStyleSheetBase* pBase = pStylePool->First();
     934             : 
     935           0 :             while ( pBase )
     936             :             {
     937           0 :                 if ( pBase->IsUsed() )
     938           0 :                     m_pSearchTmplLB->InsertEntry( pBase->GetName() );
     939           0 :                 m_pReplaceTmplLB->InsertEntry( pBase->GetName() );
     940           0 :                 pBase = pStylePool->Next();
     941             :             }
     942           0 :             m_pSearchTmplLB->SelectEntry( pSearchItem->GetSearchString() );
     943           0 :             m_pReplaceTmplLB->SelectEntry( pSearchItem->GetReplaceString() );
     944             : 
     945             :         }
     946           0 :         m_pSearchTmplLB->Show();
     947             : 
     948           0 :         if ( bConstruct )
     949             :             // Grab focus only after creating
     950           0 :             m_pSearchTmplLB->GrabFocus();
     951           0 :         m_pReplaceTmplLB->Show();
     952           0 :         m_pSearchLB->Hide();
     953           0 :         m_pReplaceLB->Hide();
     954             : 
     955           0 :         m_pWordBtn->Disable();
     956           0 :         m_pRegExpBtn->Disable();
     957           0 :         m_pMatchCaseCB->Disable();
     958             : 
     959           0 :         bDisableSearch = !m_pSearchTmplLB->GetEntryCount();
     960             :     }
     961             :     else
     962             :     {
     963           0 :         bool bSetSearch = ( ( nModifyFlag & MODIFY_SEARCH ) == 0 );
     964           0 :         bool bSetReplace = ( ( nModifyFlag & MODIFY_REPLACE ) == 0 );
     965             : 
     966           0 :         if ( !(pSearchItem->GetSearchString().isEmpty()) && bSetSearch )
     967           0 :             m_pSearchLB->SetText( pSearchItem->GetSearchString() );
     968           0 :         else if (!aSearchStrings.empty())
     969             :         {
     970             :             bool bAttributes =
     971           0 :                 ( ( pSearchList && pSearchList->Count() ) ||
     972           0 :                   ( pReplaceList && pReplaceList->Count() ) );
     973             : 
     974           0 :             if ( bSetSearch && !bAttributes )
     975           0 :                 m_pSearchLB->SetText(aSearchStrings[0]);
     976             : 
     977           0 :             OUString aReplaceTxt = pSearchItem->GetReplaceString();
     978             : 
     979           0 :             if (!aReplaceStrings.empty())
     980           0 :                 aReplaceTxt = aReplaceStrings[0];
     981             : 
     982           0 :             if ( bSetReplace && !bAttributes )
     983           0 :                 m_pReplaceLB->SetText( aReplaceTxt );
     984             :         }
     985           0 :         m_pSearchLB->Show();
     986             : 
     987           0 :         if ( bConstruct )
     988             :             // Grab focus only after creating
     989           0 :             m_pSearchLB->GrabFocus();
     990           0 :         m_pReplaceLB->Show();
     991           0 :         m_pSearchTmplLB->Hide();
     992           0 :         m_pReplaceTmplLB->Hide();
     993             : 
     994           0 :         EnableControl_Impl(m_pRegExpBtn);
     995           0 :         EnableControl_Impl(m_pMatchCaseCB);
     996             : 
     997           0 :         if ( m_pRegExpBtn->IsChecked() )
     998           0 :             m_pWordBtn->Disable();
     999             :         else
    1000           0 :             EnableControl_Impl(m_pWordBtn);
    1001             : 
    1002           0 :         bDisableSearch = m_pSearchLB->GetText().isEmpty() &&
    1003           0 :             m_pSearchAttrText->GetText().isEmpty();
    1004             :     }
    1005           0 :     FocusHdl_Impl(m_pSearchLB);
    1006             : 
    1007           0 :     if ( bDisableSearch )
    1008             :     {
    1009           0 :         m_pSearchBtn->Disable();
    1010           0 :         m_pSearchAllBtn->Disable();
    1011           0 :         m_pReplaceBtn->Disable();
    1012           0 :         m_pReplaceAllBtn->Disable();
    1013           0 :         m_pComponentFrame->Enable(false);
    1014             :     }
    1015             :     else
    1016             :     {
    1017           0 :         EnableControl_Impl(m_pSearchBtn);
    1018           0 :         EnableControl_Impl(m_pReplaceBtn);
    1019           0 :         if (!bWriter || (bWriter && !m_pNotesBtn->IsChecked()))
    1020             :         {
    1021           0 :             EnableControl_Impl(m_pSearchAllBtn);
    1022           0 :             EnableControl_Impl(m_pReplaceAllBtn);
    1023             :         }
    1024           0 :         if (bWriter && pSearchItem->GetNotes())
    1025             :         {
    1026           0 :             m_pSearchAllBtn->Disable();
    1027           0 :             m_pReplaceAllBtn->Disable();
    1028             :         }
    1029             :     }
    1030             : 
    1031           0 :     if (!m_pSearchAttrText->GetText().isEmpty())
    1032           0 :         EnableControl_Impl(m_pNoFormatBtn);
    1033             :     else
    1034           0 :         m_pNoFormatBtn->Disable();
    1035             : 
    1036           0 :     if ( !pSearchList )
    1037             :     {
    1038           0 :         m_pAttributeBtn->Disable();
    1039           0 :         m_pFormatBtn->Disable();
    1040             :     }
    1041             : 
    1042           0 :     if ( m_pLayoutBtn->IsChecked() )
    1043             :     {
    1044           0 :         pImpl->bSaveToModule = false;
    1045           0 :         TemplateHdl_Impl(m_pLayoutBtn);
    1046           0 :         pImpl->bSaveToModule = true;
    1047           0 :     }
    1048           0 : }
    1049             : 
    1050             : 
    1051             : 
    1052           0 : void SvxSearchDialog::InitAttrList_Impl( const SfxItemSet* pSSet,
    1053             :                                          const SfxItemSet* pRSet )
    1054             : {
    1055           0 :     if ( !pSSet && !pRSet )
    1056           0 :         return;
    1057             : 
    1058           0 :     if ( !pImpl->pRanges && pSSet )
    1059             :     {
    1060           0 :         sal_sSize nCnt = 0;
    1061           0 :         const sal_uInt16* pPtr = pSSet->GetRanges();
    1062           0 :         const sal_uInt16* pTmp = pPtr;
    1063             : 
    1064           0 :         while( *pPtr )
    1065             :         {
    1066           0 :             nCnt += ( *(pPtr+1) - *pPtr ) + 1;
    1067           0 :             pPtr += 2;
    1068             :         }
    1069           0 :         nCnt = pPtr - pTmp + 1;
    1070           0 :         pImpl->pRanges = new sal_uInt16[nCnt];
    1071           0 :         memcpy( pImpl->pRanges, pTmp, sizeof(sal_uInt16) * nCnt );
    1072             :     }
    1073             : 
    1074             :     // See to it that are the texts of the attributes are correct
    1075           0 :     OUString aDesc;
    1076             : 
    1077           0 :     if ( pSSet )
    1078             :     {
    1079           0 :         delete pSearchList;
    1080           0 :         pSearchList = new SearchAttrItemList;
    1081             : 
    1082           0 :         if ( pSSet->Count() )
    1083             :         {
    1084           0 :             pSearchList->Put( *pSSet );
    1085             : 
    1086           0 :             m_pSearchAttrText->SetText( BuildAttrText_Impl( aDesc, true ) );
    1087             : 
    1088           0 :             if ( !aDesc.isEmpty() )
    1089           0 :                 bFormat |= true;
    1090             :         }
    1091             :     }
    1092             : 
    1093           0 :     if ( pRSet )
    1094             :     {
    1095           0 :         delete pReplaceList;
    1096           0 :         pReplaceList = new SearchAttrItemList;
    1097             : 
    1098           0 :         if ( pRSet->Count() )
    1099             :         {
    1100           0 :             pReplaceList->Put( *pRSet );
    1101             : 
    1102           0 :             m_pReplaceAttrText->SetText( BuildAttrText_Impl( aDesc, false ) );
    1103             : 
    1104           0 :             if ( !aDesc.isEmpty() )
    1105           0 :                 bFormat |= true;
    1106             :         }
    1107           0 :     }
    1108             : }
    1109             : 
    1110             : 
    1111             : 
    1112           0 : IMPL_LINK( SvxSearchDialog, FlagHdl_Impl, Control *, pCtrl )
    1113             : {
    1114           0 :     if ( pCtrl && !bSet )
    1115           0 :         SetModifyFlag_Impl( pCtrl );
    1116             :     else
    1117           0 :         bSet = false;
    1118             : 
    1119           0 :     if (pCtrl == m_pSimilarityBox)
    1120             :     {
    1121           0 :         bool bIsChecked = m_pSimilarityBox->IsChecked();
    1122             : 
    1123           0 :         if ( bIsChecked )
    1124             :         {
    1125           0 :             m_pSimilarityBtn->Enable();
    1126           0 :             m_pRegExpBtn->Check( false );
    1127           0 :             m_pRegExpBtn->Disable();
    1128           0 :             EnableControl_Impl(m_pWordBtn);
    1129             : 
    1130           0 :             if ( m_pLayoutBtn->IsChecked() )
    1131             :             {
    1132           0 :                 EnableControl_Impl(m_pMatchCaseCB);
    1133           0 :                 m_pLayoutBtn->Check( false );
    1134             :             }
    1135           0 :             m_pRegExpBtn->Disable();
    1136           0 :             m_pLayoutBtn->Disable();
    1137           0 :             m_pFormatBtn->Disable();
    1138           0 :             m_pNoFormatBtn->Disable();
    1139           0 :             m_pAttributeBtn->Disable();
    1140             :         }
    1141             :         else
    1142             :         {
    1143           0 :             EnableControl_Impl(m_pRegExpBtn);
    1144           0 :             if (!m_pNotesBtn->IsChecked())
    1145           0 :                 EnableControl_Impl(m_pLayoutBtn);
    1146           0 :             EnableControl_Impl(m_pFormatBtn);
    1147           0 :             EnableControl_Impl(m_pAttributeBtn);
    1148           0 :             m_pSimilarityBtn->Disable();
    1149             :         }
    1150           0 :         pSearchItem->SetLevenshtein( bIsChecked );
    1151             :     }
    1152           0 :     else if (pCtrl == m_pNotesBtn)
    1153             :     {
    1154           0 :         if (m_pNotesBtn->IsChecked())
    1155             :         {
    1156           0 :             m_pLayoutBtn->Disable();
    1157           0 :             m_pSearchAllBtn->Disable();
    1158           0 :             m_pReplaceAllBtn->Disable();
    1159             :         }
    1160             :         else
    1161             :         {
    1162           0 :             EnableControl_Impl(m_pLayoutBtn);
    1163           0 :             ModifyHdl_Impl(m_pSearchLB);
    1164             :         }
    1165             :     }
    1166             :     else
    1167             :     {
    1168           0 :         if ( m_pLayoutBtn->IsChecked() && !bFormat )
    1169             :         {
    1170           0 :             m_pWordBtn->Check( false );
    1171           0 :             m_pWordBtn->Disable();
    1172           0 :             m_pRegExpBtn->Check( false );
    1173           0 :             m_pRegExpBtn->Disable();
    1174           0 :             m_pMatchCaseCB->Check( false );
    1175           0 :             m_pMatchCaseCB->Disable();
    1176           0 :             m_pNotesBtn->Disable();
    1177             : 
    1178           0 :             if ( m_pSearchTmplLB->GetEntryCount() )
    1179             :             {
    1180           0 :                 EnableControl_Impl(m_pSearchBtn);
    1181           0 :                 EnableControl_Impl(m_pSearchAllBtn);
    1182           0 :                 EnableControl_Impl(m_pReplaceBtn);
    1183           0 :                 EnableControl_Impl(m_pReplaceAllBtn);
    1184             :             }
    1185             :         }
    1186             :         else
    1187             :         {
    1188           0 :             EnableControl_Impl(m_pRegExpBtn);
    1189           0 :             EnableControl_Impl(m_pMatchCaseCB);
    1190           0 :             EnableControl_Impl(m_pNotesBtn);
    1191             : 
    1192           0 :             if ( m_pRegExpBtn->IsChecked() )
    1193             :             {
    1194           0 :                 m_pWordBtn->Check( false );
    1195           0 :                 m_pWordBtn->Disable();
    1196           0 :                 m_pSimilarityBox->Disable();
    1197           0 :                 m_pSimilarityBtn->Disable();
    1198             :             }
    1199             :             else
    1200             :             {
    1201           0 :                 EnableControl_Impl(m_pWordBtn);
    1202           0 :                 EnableControl_Impl(m_pSimilarityBox);
    1203             :             }
    1204             : 
    1205             :             // Search-string in place? then enable Buttons
    1206           0 :             bSet = true;
    1207           0 :             ModifyHdl_Impl(m_pSearchLB);
    1208             :         }
    1209             :     }
    1210             : 
    1211           0 :     if (m_pAllSheetsCB == pCtrl)
    1212             :     {
    1213           0 :         bSet = true;
    1214           0 :         ModifyHdl_Impl(m_pSearchLB);
    1215             :     }
    1216             : 
    1217           0 :     if (m_pJapOptionsCB == pCtrl)
    1218             :     {
    1219           0 :         bool bEnableJapOpt = m_pJapOptionsCB->IsChecked();
    1220           0 :         m_pMatchCaseCB->Enable(!bEnableJapOpt );
    1221           0 :         m_pJapMatchFullHalfWidthCB->Enable(!bEnableJapOpt );
    1222           0 :         m_pJapOptionsBtn->Enable( bEnableJapOpt );
    1223             :     }
    1224             : 
    1225           0 :     if ( pImpl->bSaveToModule )
    1226           0 :         SaveToModule_Impl();
    1227           0 :     return 0;
    1228             : }
    1229             : 
    1230             : 
    1231             : 
    1232           0 : IMPL_LINK( SvxSearchDialog, CommandHdl_Impl, Button *, pBtn )
    1233             : {
    1234           0 :     bool bInclusive = ( m_pLayoutBtn->GetText() == aLayoutStr );
    1235             : 
    1236           0 :     if ( ( pBtn == m_pSearchBtn )   ||
    1237           0 :          ( pBtn == m_pSearchAllBtn )||
    1238           0 :          ( pBtn == m_pReplaceBtn )  ||
    1239           0 :          ( pBtn == m_pReplaceAllBtn ) )
    1240             :     {
    1241           0 :         if ( m_pLayoutBtn->IsChecked() && !bInclusive )
    1242             :         {
    1243           0 :             pSearchItem->SetSearchString ( m_pSearchTmplLB->GetSelectEntry() );
    1244           0 :             pSearchItem->SetReplaceString( m_pReplaceTmplLB->GetSelectEntry() );
    1245             :         }
    1246             :         else
    1247             :         {
    1248           0 :             pSearchItem->SetSearchString ( m_pSearchLB->GetText() );
    1249           0 :             pSearchItem->SetReplaceString( m_pReplaceLB->GetText() );
    1250             : 
    1251           0 :             if ( pBtn == m_pReplaceBtn )
    1252           0 :                 Remember_Impl( m_pReplaceLB->GetText(), false );
    1253             :             else
    1254             :             {
    1255           0 :                 Remember_Impl( m_pSearchLB->GetText(), true );
    1256             : 
    1257           0 :                 if ( pBtn == m_pReplaceAllBtn )
    1258           0 :                     Remember_Impl( m_pReplaceLB->GetText(), false );
    1259             :             }
    1260             :         }
    1261             : 
    1262           0 :         pSearchItem->SetRegExp( false );
    1263           0 :         pSearchItem->SetLevenshtein( false );
    1264           0 :         if (GetCheckBoxValue(m_pRegExpBtn))
    1265           0 :             pSearchItem->SetRegExp( true );
    1266           0 :         else if (GetCheckBoxValue(m_pSimilarityBox))
    1267           0 :             pSearchItem->SetLevenshtein( true );
    1268             : 
    1269           0 :         pSearchItem->SetWordOnly(GetCheckBoxValue(m_pWordBtn));
    1270           0 :         pSearchItem->SetBackward(GetCheckBoxValue(m_pBackwardsBtn));
    1271           0 :         pSearchItem->SetNotes(GetCheckBoxValue(m_pNotesBtn));
    1272           0 :         pSearchItem->SetPattern(GetCheckBoxValue(m_pLayoutBtn));
    1273           0 :         pSearchItem->SetSelection(GetCheckBoxValue(m_pSelectionBtn));
    1274           0 :         pSearchItem->SetUseAsianOptions(GetCheckBoxValue(m_pJapOptionsCB));
    1275           0 :         sal_Int32 nFlags = GetTransliterationFlags();
    1276           0 :         if( !pSearchItem->IsUseAsianOptions())
    1277             :             nFlags &= (TransliterationModules_IGNORE_CASE |
    1278           0 :                        TransliterationModules_IGNORE_WIDTH );
    1279           0 :         if (GetCheckBoxValue(m_pIgnoreDiacritics))
    1280           0 :             nFlags |= TransliterationModulesExtra::IGNORE_DIACRITICS_CTL;
    1281           0 :         if (GetCheckBoxValue(m_pIgnoreKashida))
    1282           0 :             nFlags |= TransliterationModulesExtra::IGNORE_KASHIDA_CTL;
    1283           0 :         pSearchItem->SetTransliterationFlags( nFlags );
    1284             : 
    1285           0 :         if ( !bWriter )
    1286             :         {
    1287           0 :             if ( m_pCalcSearchInLB->GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND )
    1288           0 :                 pSearchItem->SetCellType( static_cast<SvxSearchCellType>(m_pCalcSearchInLB->GetSelectEntryPos()) );
    1289             : 
    1290           0 :             pSearchItem->SetRowDirection( m_pRowsBtn->IsChecked() );
    1291           0 :             pSearchItem->SetAllTables( m_pAllSheetsCB->IsChecked() );
    1292             :         }
    1293             : 
    1294           0 :         if (pBtn == m_pSearchBtn)
    1295           0 :             pSearchItem->SetCommand( SvxSearchCmd::FIND );
    1296           0 :         else if ( pBtn == m_pSearchAllBtn )
    1297           0 :             pSearchItem->SetCommand( SvxSearchCmd::FIND_ALL );
    1298           0 :         else if ( pBtn == m_pReplaceBtn )
    1299           0 :             pSearchItem->SetCommand( SvxSearchCmd::REPLACE );
    1300           0 :         else if ( pBtn == m_pReplaceAllBtn )
    1301           0 :             pSearchItem->SetCommand( SvxSearchCmd::REPLACE_ALL );
    1302             : 
    1303             :         // when looking for templates, delete format lists
    1304           0 :         if ( !bFormat && pSearchItem->GetPattern() )
    1305             :         {
    1306           0 :             if ( pSearchList )
    1307           0 :                 pSearchList->Clear();
    1308             : 
    1309           0 :             if ( pReplaceList )
    1310           0 :                 pReplaceList->Clear();
    1311             :         }
    1312           0 :         nModifyFlag = 0;
    1313           0 :         const SfxPoolItem* ppArgs[] = { pSearchItem, 0 };
    1314           0 :         rBindings.ExecuteSynchron( FID_SEARCH_NOW, ppArgs, 0L );
    1315             :     }
    1316           0 :     else if ( pBtn == m_pCloseBtn )
    1317             :     {
    1318           0 :         if ( !m_pLayoutBtn->IsChecked() || bInclusive )
    1319             :         {
    1320           0 :             OUString aStr( m_pSearchLB->GetText() );
    1321             : 
    1322           0 :             if ( !aStr.isEmpty() )
    1323           0 :                 Remember_Impl( aStr, true );
    1324           0 :             aStr = m_pReplaceLB->GetText();
    1325             : 
    1326           0 :             if ( !aStr.isEmpty() )
    1327           0 :                 Remember_Impl( aStr, false );
    1328             :         }
    1329           0 :         SaveToModule_Impl();
    1330           0 :         Close();
    1331             :     }
    1332           0 :     else if (pBtn == m_pSimilarityBtn)
    1333             :     {
    1334           0 :         SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
    1335           0 :         if(pFact)
    1336             :         {
    1337             :             boost::scoped_ptr<AbstractSvxSearchSimilarityDialog> pDlg(pFact->CreateSvxSearchSimilarityDialog( this,
    1338           0 :                                                                         pSearchItem->IsLEVRelaxed(),
    1339           0 :                                                                         pSearchItem->GetLEVOther(),
    1340           0 :                                                                         pSearchItem->GetLEVShorter(),
    1341           0 :                                                                         pSearchItem->GetLEVLonger() ));
    1342             :             DBG_ASSERT(pDlg, "Dialog creation failed!");
    1343           0 :             if ( pDlg && pDlg->Execute() == RET_OK )
    1344             :             {
    1345           0 :                 pSearchItem->SetLEVRelaxed( pDlg->IsRelaxed() );
    1346           0 :                 pSearchItem->SetLEVOther( pDlg->GetOther() );
    1347           0 :                 pSearchItem->SetLEVShorter( pDlg->GetShorter() );
    1348           0 :                 pSearchItem->SetLEVLonger( pDlg->GetLonger() );
    1349           0 :                 SaveToModule_Impl();
    1350           0 :             }
    1351             :         }
    1352             :     }
    1353           0 :     else if (pBtn == m_pJapOptionsBtn)
    1354             :     {
    1355           0 :         SfxItemSet aSet( SfxGetpApp()->GetPool() );
    1356           0 :         pSearchItem->SetTransliterationFlags( GetTransliterationFlags() );
    1357           0 :         SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
    1358           0 :         if(pFact)
    1359             :         {
    1360             :             boost::scoped_ptr<AbstractSvxJSearchOptionsDialog> aDlg(pFact->CreateSvxJSearchOptionsDialog( this, aSet,
    1361           0 :                     pSearchItem->GetTransliterationFlags() ));
    1362             :             DBG_ASSERT(aDlg, "Dialog creation failed!");
    1363           0 :             int nRet = aDlg->Execute();
    1364           0 :             if (RET_OK == nRet) //! true only if FillItemSet of SvxJSearchOptionsPage returns true
    1365             :             {
    1366           0 :                 sal_Int32 nFlags = aDlg->GetTransliterationFlags();
    1367           0 :                 pSearchItem->SetTransliterationFlags( nFlags );
    1368           0 :                 ApplyTransliterationFlags_Impl( nFlags );
    1369           0 :             }
    1370           0 :         }
    1371             :     }
    1372           0 :     else if (pBtn == m_pSearchComponent1PB || pBtn == m_pSearchComponent2PB)
    1373             :     {
    1374           0 :         uno::Sequence < beans::PropertyValue > aArgs(2);
    1375           0 :         beans::PropertyValue* pArgs = aArgs.getArray();
    1376           0 :         pArgs[0].Name = "SearchString";
    1377           0 :         pArgs[0].Value <<= OUString(m_pSearchLB->GetText());
    1378           0 :         pArgs[1].Name = "ParentWindow";
    1379           0 :         pArgs[1].Value <<= VCLUnoHelper::GetInterface( this );
    1380           0 :         if(pBtn == m_pSearchComponent1PB)
    1381             :         {
    1382           0 :             if ( pImpl->xCommand1Dispatch.is() )
    1383           0 :                 pImpl->xCommand1Dispatch->dispatch(pImpl->aCommand1URL, aArgs);
    1384             :         }
    1385             :         else
    1386             :         {
    1387           0 :             if ( pImpl->xCommand2Dispatch.is() )
    1388           0 :                 pImpl->xCommand2Dispatch->dispatch(pImpl->aCommand2URL, aArgs);
    1389           0 :         }
    1390             :     }
    1391             : 
    1392           0 :     return 0;
    1393             : }
    1394             : 
    1395             : 
    1396             : 
    1397           0 : IMPL_LINK( SvxSearchDialog, ModifyHdl_Impl, ComboBox *, pEd )
    1398             : {
    1399           0 :     if ( !bSet )
    1400           0 :         SetModifyFlag_Impl( pEd );
    1401             :     else
    1402           0 :         bSet = false;
    1403             : 
    1404             :     // Calc allows searching for empty cells.
    1405           0 :     bool bAllowEmptySearch = (pSearchItem->GetAppFlag() == SvxSearchApp::CALC);
    1406             : 
    1407           0 :     if ( pEd == m_pSearchLB || pEd == m_pReplaceLB )
    1408             :     {
    1409           0 :         sal_Int32 nSrchTxtLen = m_pSearchLB->GetText().getLength();
    1410           0 :         sal_Int32 nReplTxtLen = 0;
    1411           0 :         if (bAllowEmptySearch)
    1412           0 :             nReplTxtLen = m_pReplaceLB->GetText().getLength();
    1413           0 :         sal_Int32 nAttrTxtLen = m_pSearchAttrText->GetText().getLength();
    1414             : 
    1415           0 :         if (nSrchTxtLen || nReplTxtLen || nAttrTxtLen)
    1416             :         {
    1417           0 :             EnableControl_Impl(m_pSearchBtn);
    1418           0 :             EnableControl_Impl(m_pReplaceBtn);
    1419           0 :             if (!bWriter || (bWriter && !m_pNotesBtn->IsChecked()))
    1420             :             {
    1421           0 :                 EnableControl_Impl(m_pSearchAllBtn);
    1422           0 :                 EnableControl_Impl(m_pReplaceAllBtn);
    1423             :             }
    1424             :         }
    1425             :         else
    1426             :         {
    1427           0 :             m_pComponentFrame->Enable(false);
    1428           0 :             m_pSearchBtn->Disable();
    1429           0 :             m_pSearchAllBtn->Disable();
    1430           0 :             m_pReplaceBtn->Disable();
    1431           0 :             m_pReplaceAllBtn->Disable();
    1432             :         }
    1433             :     }
    1434           0 :     return 0;
    1435             : }
    1436             : 
    1437             : 
    1438             : 
    1439           0 : IMPL_LINK_NOARG(SvxSearchDialog, TemplateHdl_Impl)
    1440             : {
    1441           0 :     if ( pImpl->bSaveToModule )
    1442           0 :         SaveToModule_Impl();
    1443             : 
    1444           0 :     if ( bFormat )
    1445           0 :         return 0;
    1446           0 :     OUString sDesc;
    1447             : 
    1448           0 :     if ( m_pLayoutBtn->IsChecked() )
    1449             :     {
    1450           0 :         if ( !pFamilyController )
    1451             :         {
    1452           0 :             sal_uInt16 nId = 0;
    1453             : 
    1454             :             // Enable templates controller
    1455           0 :             switch ( pSearchItem->GetFamily() )
    1456             :             {
    1457             :                 case SFX_STYLE_FAMILY_CHAR:
    1458           0 :                     nId = SID_STYLE_FAMILY1; break;
    1459             : 
    1460             :                 case SFX_STYLE_FAMILY_PARA:
    1461           0 :                     nId = SID_STYLE_FAMILY2; break;
    1462             : 
    1463             :                 case SFX_STYLE_FAMILY_FRAME:
    1464           0 :                     nId = SID_STYLE_FAMILY3; break;
    1465             : 
    1466             :                 case SFX_STYLE_FAMILY_PAGE:
    1467           0 :                     nId = SID_STYLE_FAMILY4; break;
    1468             : 
    1469             :                 case SFX_STYLE_FAMILY_ALL:
    1470           0 :                     break;
    1471             : 
    1472             :                 default:
    1473             :                     OSL_FAIL( "StyleSheetFamily was changed?" );
    1474             :             }
    1475             : 
    1476           0 :             rBindings.EnterRegistrations();
    1477             :             pFamilyController =
    1478           0 :                 new SvxSearchController( nId, rBindings, *this );
    1479           0 :             rBindings.LeaveRegistrations();
    1480           0 :             m_pSearchTmplLB->Clear();
    1481           0 :             m_pReplaceTmplLB->Clear();
    1482             : 
    1483           0 :             m_pSearchTmplLB->Show();
    1484           0 :             m_pReplaceTmplLB->Show();
    1485           0 :             m_pSearchLB->Hide();
    1486           0 :             m_pReplaceLB->Hide();
    1487             : 
    1488           0 :             m_pSearchAttrText->SetText( sDesc );
    1489           0 :             m_pReplaceAttrText->SetText( sDesc );
    1490             :         }
    1491           0 :         m_pFormatBtn->Disable();
    1492           0 :         m_pNoFormatBtn->Disable();
    1493           0 :         m_pAttributeBtn->Disable();
    1494           0 :         m_pSimilarityBox->Disable();
    1495           0 :         m_pSimilarityBtn->Disable();
    1496             :     }
    1497             :     else
    1498             :     {
    1499             :         // Disable templates controller
    1500           0 :         rBindings.EnterRegistrations();
    1501           0 :         DELETEZ( pFamilyController );
    1502           0 :         rBindings.LeaveRegistrations();
    1503             : 
    1504           0 :         m_pSearchLB->Show();
    1505           0 :         m_pReplaceLB->Show();
    1506           0 :         m_pSearchTmplLB->Hide();
    1507           0 :         m_pReplaceTmplLB->Hide();
    1508             : 
    1509           0 :         m_pSearchAttrText->SetText( BuildAttrText_Impl( sDesc, true ) );
    1510           0 :         m_pReplaceAttrText->SetText( BuildAttrText_Impl( sDesc, false ) );
    1511             : 
    1512           0 :         EnableControl_Impl(m_pFormatBtn);
    1513           0 :         EnableControl_Impl(m_pAttributeBtn);
    1514           0 :         EnableControl_Impl(m_pSimilarityBox);
    1515             : 
    1516           0 :         FocusHdl_Impl( bSearch ? m_pSearchLB : m_pReplaceLB );
    1517             :     }
    1518           0 :     bSet = true;
    1519           0 :     pImpl->bSaveToModule = false;
    1520           0 :     FlagHdl_Impl(m_pLayoutBtn);
    1521           0 :     pImpl->bSaveToModule = true;
    1522           0 :     return 0;
    1523             : }
    1524             : 
    1525             : 
    1526             : 
    1527           0 : void SvxSearchDialog::Remember_Impl( const OUString &rStr, bool _bSearch )
    1528             : {
    1529           0 :     if ( rStr.isEmpty() )
    1530           0 :         return;
    1531             : 
    1532           0 :     std::vector<OUString>* pArr = _bSearch ? &aSearchStrings : &aReplaceStrings;
    1533           0 :     ComboBox* pListBox = _bSearch ? m_pSearchLB : m_pReplaceLB;
    1534             : 
    1535             :     // ignore identical strings
    1536           0 :     for (std::vector<OUString>::const_iterator i = pArr->begin(); i != pArr->end(); ++i)
    1537             :     {
    1538           0 :         if ((*i).equals(rStr))
    1539           0 :             return;
    1540             :     }
    1541             : 
    1542             :     // delete oldest entry at maximum occupancy (ListBox and Array)
    1543           0 :     if(REMEMBER_SIZE < pArr->size())
    1544             :     {
    1545           0 :         pListBox->RemoveEntryAt(static_cast<sal_uInt16>(REMEMBER_SIZE - 1));
    1546           0 :         (*pArr)[REMEMBER_SIZE - 1] = rStr;
    1547           0 :         pArr->erase(pArr->begin() + REMEMBER_SIZE - 1);
    1548             :     }
    1549             : 
    1550           0 :     pArr->insert(pArr->begin(), rStr);
    1551           0 :     pListBox->InsertEntry(rStr, 0);
    1552             : }
    1553             : 
    1554             : 
    1555             : 
    1556           0 : void SvxSearchDialog::TemplatesChanged_Impl( SfxStyleSheetBasePool& rPool )
    1557             : {
    1558           0 :     OUString aOldSrch( m_pSearchTmplLB->GetSelectEntry() );
    1559           0 :     OUString aOldRepl( m_pReplaceTmplLB->GetSelectEntry() );
    1560           0 :     m_pSearchTmplLB->Clear();
    1561           0 :     m_pReplaceTmplLB->Clear();
    1562           0 :     rPool.SetSearchMask( pSearchItem->GetFamily(), SFXSTYLEBIT_ALL );
    1563           0 :     m_pSearchTmplLB->SetUpdateMode( false );
    1564           0 :     m_pReplaceTmplLB->SetUpdateMode( false );
    1565           0 :     SfxStyleSheetBase* pBase = rPool.First();
    1566             : 
    1567           0 :     while ( pBase )
    1568             :     {
    1569           0 :         if ( pBase->IsUsed() )
    1570           0 :             m_pSearchTmplLB->InsertEntry( pBase->GetName() );
    1571           0 :         m_pReplaceTmplLB->InsertEntry( pBase->GetName() );
    1572           0 :         pBase = rPool.Next();
    1573             :     }
    1574           0 :     m_pSearchTmplLB->SetUpdateMode( true );
    1575           0 :     m_pReplaceTmplLB->SetUpdateMode( true );
    1576           0 :     m_pSearchTmplLB->SelectEntryPos(0);
    1577             : 
    1578           0 :     if ( !aOldSrch.isEmpty() )
    1579           0 :         m_pSearchTmplLB->SelectEntry( aOldSrch );
    1580           0 :     m_pReplaceTmplLB->SelectEntryPos(0);
    1581             : 
    1582           0 :     if ( !aOldRepl.isEmpty() )
    1583           0 :         m_pReplaceTmplLB->SelectEntry( aOldRepl );
    1584             : 
    1585           0 :     if ( m_pSearchTmplLB->GetEntryCount() )
    1586             :     {
    1587           0 :         EnableControl_Impl(m_pSearchBtn);
    1588           0 :         EnableControl_Impl(m_pSearchAllBtn);
    1589           0 :         EnableControl_Impl(m_pReplaceBtn);
    1590           0 :         EnableControl_Impl(m_pReplaceAllBtn);
    1591           0 :     }
    1592           0 : }
    1593             : 
    1594             : 
    1595             : 
    1596           0 : void SvxSearchDialog::EnableControls_Impl( const SearchOptionFlags nFlags )
    1597             : {
    1598           0 :     if ( nFlags == nOptions )
    1599           0 :         return;
    1600             :     else
    1601           0 :         nOptions = nFlags;
    1602             : 
    1603           0 :     if ( nOptions == SearchOptionFlags::NONE )
    1604             :     {
    1605           0 :         if ( IsVisible() )
    1606             :         {
    1607           0 :             Hide();
    1608           0 :             return;
    1609             :         }
    1610             :     }
    1611           0 :     else if ( !IsVisible() )
    1612           0 :         Show();
    1613           0 :     bool bNoSearch = true;
    1614             : 
    1615           0 :     bool bEnableSearch = bool( SearchOptionFlags::SEARCH & nOptions );
    1616           0 :     m_pSearchBtn->Enable(bEnableSearch);
    1617             : 
    1618           0 :     if( bEnableSearch )
    1619           0 :         bNoSearch = false;
    1620             : 
    1621             : 
    1622           0 :     if ( ( SearchOptionFlags::SEARCHALL & nOptions ) )
    1623             :     {
    1624           0 :         m_pSearchAllBtn->Enable();
    1625           0 :         bNoSearch = false;
    1626             :     }
    1627             :     else
    1628           0 :         m_pSearchAllBtn->Disable();
    1629           0 :     if ( ( SearchOptionFlags::REPLACE & nOptions ) )
    1630             :     {
    1631           0 :         m_pReplaceBtn->Enable();
    1632           0 :         m_pReplaceFrame->get_label_widget()->Enable();
    1633           0 :         m_pReplaceLB->Enable();
    1634           0 :         m_pReplaceTmplLB->Enable();
    1635           0 :         bNoSearch = false;
    1636             :     }
    1637             :     else
    1638             :     {
    1639           0 :         m_pReplaceBtn->Disable();
    1640           0 :         m_pReplaceFrame->get_label_widget()->Disable();
    1641           0 :         m_pReplaceLB->Disable();
    1642           0 :         m_pReplaceTmplLB->Disable();
    1643             :     }
    1644           0 :     if ( ( SearchOptionFlags::REPLACE_ALL & nOptions ) )
    1645             :     {
    1646           0 :         m_pReplaceAllBtn->Enable();
    1647           0 :         bNoSearch = false;
    1648             :     }
    1649             :     else
    1650           0 :         m_pReplaceAllBtn->Disable();
    1651           0 :     m_pComponentFrame->Enable(!bNoSearch);
    1652           0 :     m_pSearchBtn->Enable( !bNoSearch );
    1653           0 :     m_pSearchFrame->get_label_widget()->Enable( !bNoSearch );
    1654           0 :     m_pSearchLB->Enable( !bNoSearch );
    1655           0 :     m_pNotesBtn->Enable();
    1656             : 
    1657           0 :     if ( ( SearchOptionFlags::WHOLE_WORDS & nOptions ) )
    1658           0 :         m_pWordBtn->Enable();
    1659             :     else
    1660           0 :         m_pWordBtn->Disable();
    1661           0 :     if ( ( SearchOptionFlags::BACKWARDS & nOptions ) )
    1662           0 :         m_pBackwardsBtn->Enable();
    1663             :     else
    1664           0 :         m_pBackwardsBtn->Disable();
    1665           0 :     if ( ( SearchOptionFlags::REG_EXP & nOptions ) )
    1666           0 :         m_pRegExpBtn->Enable();
    1667             :     else
    1668           0 :         m_pRegExpBtn->Disable();
    1669           0 :     if ( ( SearchOptionFlags::EXACT & nOptions ) )
    1670           0 :         m_pMatchCaseCB->Enable();
    1671             :     else
    1672           0 :         m_pMatchCaseCB->Disable();
    1673           0 :     if ( ( SearchOptionFlags::SELECTION & nOptions ) )
    1674           0 :         m_pSelectionBtn->Enable();
    1675             :     else
    1676           0 :         m_pSelectionBtn->Disable();
    1677           0 :     if ( ( SearchOptionFlags::FAMILIES & nOptions ) )
    1678           0 :         m_pLayoutBtn->Enable();
    1679             :     else
    1680           0 :         m_pLayoutBtn->Disable();
    1681           0 :     if ( ( SearchOptionFlags::FORMAT & nOptions ) )
    1682             :     {
    1683           0 :         m_pAttributeBtn->Enable();
    1684           0 :         m_pFormatBtn->Enable();
    1685           0 :         m_pNoFormatBtn->Enable();
    1686             :     }
    1687             :     else
    1688             :     {
    1689           0 :         m_pAttributeBtn->Disable();
    1690           0 :         m_pFormatBtn->Disable();
    1691           0 :         m_pNoFormatBtn->Disable();
    1692             :     }
    1693             : 
    1694           0 :     if ( ( SearchOptionFlags::SIMILARITY & nOptions ) )
    1695             :     {
    1696           0 :         m_pSimilarityBox->Enable();
    1697           0 :         m_pSimilarityBtn->Enable();
    1698             :     }
    1699             :     else
    1700             :     {
    1701           0 :         m_pSimilarityBox->Disable();
    1702           0 :         m_pSimilarityBtn->Disable();
    1703             :     }
    1704             : 
    1705           0 :     if ( pSearchItem )
    1706           0 :         Init_Impl( pSearchItem->GetPattern() &&
    1707           0 :                    ( !pSearchList || !pSearchList->Count() ) );
    1708             : }
    1709             : 
    1710             : 
    1711             : 
    1712           0 : void SvxSearchDialog::EnableControl_Impl( Control* pCtrl )
    1713             : {
    1714           0 :     if (m_pSearchBtn == pCtrl && ( SearchOptionFlags::SEARCH & nOptions ) )
    1715             :     {
    1716           0 :         m_pComponentFrame->Enable();
    1717           0 :         m_pSearchBtn->Enable();
    1718           0 :         return;
    1719             :     }
    1720           0 :     if ( m_pSearchAllBtn == pCtrl &&
    1721           0 :          ( SearchOptionFlags::SEARCHALL & nOptions )  )
    1722             :     {
    1723           0 :         m_pSearchAllBtn->Enable( true );
    1724           0 :         return;
    1725             :     }
    1726           0 :     if ( m_pReplaceBtn == pCtrl && ( SearchOptionFlags::REPLACE & nOptions )  )
    1727             :     {
    1728           0 :         m_pReplaceBtn->Enable();
    1729           0 :         return;
    1730             :     }
    1731           0 :     if ( m_pReplaceAllBtn == pCtrl &&
    1732           0 :          ( SearchOptionFlags::REPLACE_ALL & nOptions ) )
    1733             :     {
    1734           0 :         m_pReplaceAllBtn->Enable();
    1735           0 :         return;
    1736             :     }
    1737           0 :     if ( m_pWordBtn == pCtrl && ( SearchOptionFlags::WHOLE_WORDS & nOptions ) )
    1738             :     {
    1739           0 :         m_pWordBtn->Enable();
    1740           0 :         return;
    1741             :     }
    1742           0 :     if ( m_pBackwardsBtn == pCtrl && ( SearchOptionFlags::BACKWARDS & nOptions ) )
    1743             :     {
    1744           0 :         m_pBackwardsBtn->Enable();
    1745           0 :         return;
    1746             :     }
    1747           0 :     if (m_pNotesBtn == pCtrl)
    1748             :     {
    1749           0 :         m_pNotesBtn->Enable();
    1750           0 :         return;
    1751             :     }
    1752           0 :     if ( m_pRegExpBtn == pCtrl && ( SearchOptionFlags::REG_EXP & nOptions )
    1753           0 :         && !m_pSimilarityBox->IsChecked())
    1754             :     {
    1755           0 :         m_pRegExpBtn->Enable();
    1756           0 :         return;
    1757             :     }
    1758           0 :     if ( m_pMatchCaseCB == pCtrl && ( SearchOptionFlags::EXACT & nOptions ) )
    1759             :     {
    1760           0 :         if (!m_pJapOptionsCB->IsChecked())
    1761           0 :             m_pMatchCaseCB->Enable();
    1762           0 :         return;
    1763             :     }
    1764           0 :     if ( m_pSelectionBtn == pCtrl && ( SearchOptionFlags::SELECTION & nOptions ) )
    1765             :     {
    1766           0 :         m_pSelectionBtn->Enable();
    1767           0 :         return;
    1768             :     }
    1769           0 :     if ( m_pLayoutBtn == pCtrl && ( SearchOptionFlags::FAMILIES & nOptions ) )
    1770             :     {
    1771           0 :         m_pLayoutBtn->Enable();
    1772           0 :         return;
    1773             :     }
    1774           0 :     if ( m_pAttributeBtn == pCtrl
    1775           0 :          && ( SearchOptionFlags::FORMAT & nOptions )
    1776           0 :          && pSearchList )
    1777             :     {
    1778           0 :         m_pAttributeBtn->Enable( pImpl->bFocusOnSearch );
    1779             :     }
    1780           0 :     if ( m_pFormatBtn == pCtrl && ( SearchOptionFlags::FORMAT & nOptions ) )
    1781             :     {
    1782           0 :         m_pFormatBtn->Enable();
    1783           0 :         return;
    1784             :     }
    1785           0 :     if ( m_pNoFormatBtn == pCtrl && ( SearchOptionFlags::FORMAT & nOptions ) )
    1786             :     {
    1787           0 :         m_pNoFormatBtn->Enable();
    1788           0 :         return;
    1789             :     }
    1790           0 :     if ( m_pSimilarityBox == pCtrl &&
    1791           0 :          ( SearchOptionFlags::SIMILARITY & nOptions ) )
    1792             :     {
    1793           0 :         m_pSimilarityBox->Enable();
    1794             : 
    1795           0 :         if ( m_pSimilarityBox->IsChecked() )
    1796           0 :             m_pSimilarityBtn->Enable();
    1797             :     }
    1798             : }
    1799             : 
    1800             : 
    1801             : 
    1802           0 : void SvxSearchDialog::SetItem_Impl( const SvxSearchItem* pItem )
    1803             : {
    1804           0 :     if ( pItem )
    1805             :     {
    1806           0 :         delete pSearchItem;
    1807           0 :         pSearchItem = static_cast<SvxSearchItem*>(pItem->Clone());
    1808           0 :         Init_Impl( pSearchItem->GetPattern() &&
    1809           0 :                    ( !pSearchList || !pSearchList->Count() ) );
    1810             :     }
    1811           0 : }
    1812             : 
    1813             : 
    1814             : 
    1815           0 : IMPL_LINK( SvxSearchDialog, FocusHdl_Impl, Control *, pCtrl )
    1816             : {
    1817           0 :     sal_Int32 nTxtLen = m_pSearchAttrText->GetText().getLength();
    1818             : 
    1819           0 :     if ( pCtrl == m_pSearchLB )
    1820             :     {
    1821           0 :         if ( pCtrl->HasChildPathFocus() )
    1822           0 :             pImpl->bFocusOnSearch = true;
    1823           0 :         pCtrl = m_pSearchLB;
    1824           0 :         bSearch = true;
    1825             : 
    1826           0 :         if( nTxtLen )
    1827           0 :             EnableControl_Impl(m_pNoFormatBtn);
    1828             :         else
    1829           0 :             m_pNoFormatBtn->Disable();
    1830           0 :         EnableControl_Impl(m_pAttributeBtn);
    1831             :     }
    1832             :     else
    1833             :     {
    1834           0 :         pImpl->bFocusOnSearch = false;
    1835           0 :         pCtrl = m_pReplaceLB;
    1836           0 :         bSearch = false;
    1837             : 
    1838           0 :         if (!m_pReplaceAttrText->GetText().isEmpty())
    1839           0 :             EnableControl_Impl(m_pNoFormatBtn);
    1840             :         else
    1841           0 :             m_pNoFormatBtn->Disable();
    1842           0 :         m_pAttributeBtn->Disable();
    1843             :     }
    1844           0 :     bSet = true;
    1845             : 
    1846           0 :     static_cast<ComboBox*>(pCtrl)->SetSelection( Selection( SELECTION_MIN, SELECTION_MAX ) );
    1847             : 
    1848           0 :     ModifyHdl_Impl( static_cast<ComboBox*>(pCtrl) );
    1849             : 
    1850           0 :     if (bFormat && nTxtLen)
    1851           0 :         m_pLayoutBtn->SetText(aLayoutStr);
    1852             :     else
    1853             :     {
    1854           0 :         SvtModuleOptions::EFactory eFactory = getModule(rBindings);
    1855             :         bool bWriterApp =
    1856           0 :             eFactory == SvtModuleOptions::EFactory::WRITER ||
    1857           0 :             eFactory == SvtModuleOptions::EFactory::WRITERWEB ||
    1858           0 :             eFactory == SvtModuleOptions::EFactory::WRITERGLOBAL;
    1859           0 :         bool bCalcApp = eFactory == SvtModuleOptions::EFactory::CALC;
    1860             : 
    1861           0 :         if (bWriterApp)
    1862           0 :             m_pLayoutBtn->SetText(aLayoutWriterStr);
    1863             :         else
    1864             :         {
    1865           0 :             if (bCalcApp)
    1866           0 :                 m_pLayoutBtn->SetText(aLayoutCalcStr);
    1867             :             else
    1868           0 :                 m_pLayoutBtn->SetText(aStylesStr);
    1869             :         }
    1870             :     }
    1871           0 :     return 0;
    1872             : }
    1873             : 
    1874             : 
    1875             : 
    1876           0 : IMPL_LINK_NOARG(SvxSearchDialog, LoseFocusHdl_Impl)
    1877             : {
    1878           0 :     SaveToModule_Impl();
    1879           0 :     return 0;
    1880             : }
    1881             : 
    1882             : 
    1883             : 
    1884           0 : IMPL_LINK_NOARG(SvxSearchDialog, FormatHdl_Impl)
    1885             : {
    1886           0 :     SfxObjectShell* pSh = SfxObjectShell::Current();
    1887             : 
    1888             :     DBG_ASSERT( pSh, "no DocShell" );
    1889             : 
    1890           0 :     if ( !pSh || !pImpl->pRanges )
    1891           0 :         return 0;
    1892             : 
    1893           0 :     sal_sSize nCnt = 0;
    1894           0 :     const sal_uInt16* pPtr = pImpl->pRanges;
    1895           0 :     const sal_uInt16* pTmp = pPtr;
    1896             : 
    1897           0 :     while( *pTmp )
    1898           0 :         pTmp++;
    1899           0 :     nCnt = pTmp - pPtr + 7;
    1900           0 :     boost::scoped_array<sal_uInt16> pWhRanges(new sal_uInt16[nCnt]);
    1901           0 :     sal_uInt16 nPos = 0;
    1902             : 
    1903           0 :     while( *pPtr )
    1904             :     {
    1905           0 :         pWhRanges[nPos++] = *pPtr++;
    1906             :     }
    1907             : 
    1908           0 :     pWhRanges[nPos++] = SID_ATTR_PARA_MODEL;
    1909           0 :     pWhRanges[nPos++] = SID_ATTR_PARA_MODEL;
    1910             : 
    1911           0 :     sal_uInt16 nBrushWhich = pSh->GetPool().GetWhich(SID_ATTR_BRUSH);
    1912           0 :     pWhRanges[nPos++] = nBrushWhich;
    1913           0 :     pWhRanges[nPos++] = nBrushWhich;
    1914           0 :     pWhRanges[nPos++] = SID_PARA_BACKGRND_DESTINATION;
    1915           0 :     pWhRanges[nPos++] = SID_PARA_BACKGRND_DESTINATION;
    1916           0 :     pWhRanges[nPos] = 0;
    1917           0 :     SfxItemPool& rPool = pSh->GetPool();
    1918           0 :     SfxItemSet aSet( rPool, pWhRanges.get() );
    1919           0 :     OUString aTxt;
    1920             : 
    1921           0 :     aSet.InvalidateAllItems();
    1922           0 :     aSet.Put(SvxBrushItem(nBrushWhich));
    1923           0 :     aSet.Put(SfxUInt16Item(SID_PARA_BACKGRND_DESTINATION, PARA_DEST_CHAR));
    1924             : 
    1925           0 :     if ( bSearch )
    1926             :     {
    1927           0 :         aTxt = SVX_RESSTR( RID_SVXSTR_SEARCH );
    1928           0 :         pSearchList->Get( aSet );
    1929             :     }
    1930             :     else
    1931             :     {
    1932           0 :         aTxt = SVX_RESSTR( RID_SVXSTR_REPLACE );
    1933           0 :         pReplaceList->Get( aSet );
    1934             :     }
    1935           0 :     aSet.DisableItem(SID_ATTR_PARA_MODEL);
    1936           0 :     aSet.DisableItem(rPool.GetWhich(SID_ATTR_PARA_PAGEBREAK));
    1937           0 :     aSet.DisableItem(rPool.GetWhich(SID_ATTR_PARA_KEEP));
    1938             : 
    1939             : 
    1940           0 :     SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
    1941           0 :     if(pFact)
    1942             :     {
    1943           0 :         boost::scoped_ptr<SfxAbstractTabDialog> pDlg(pFact->CreateTabItemDialog(this, aSet));
    1944             :         DBG_ASSERT(pDlg, "Dialog creation failed!");
    1945           0 :         aTxt = pDlg->GetText() + aTxt;
    1946           0 :         pDlg->SetText( aTxt );
    1947             : 
    1948           0 :         if ( pDlg->Execute() == RET_OK )
    1949             :         {
    1950             :             DBG_ASSERT( pDlg->GetOutputItemSet(), "invalid Output-Set" );
    1951           0 :             SfxItemSet aOutSet( *pDlg->GetOutputItemSet() );
    1952             : 
    1953           0 :             SearchAttrItemList* pList = bSearch ? pSearchList : pReplaceList;
    1954             : 
    1955             :             const SfxPoolItem* pItem;
    1956           0 :             for( sal_uInt16 n = 0; n < pList->Count(); ++n )
    1957             :             {
    1958             :                 SearchAttrItem* pAItem;
    1959           0 :                 if( !IsInvalidItem( (pAItem = &pList->GetObject(n))->pItem ) &&
    1960             :                     SfxItemState::SET == aOutSet.GetItemState(
    1961           0 :                         pAItem->pItem->Which(), false, &pItem ) )
    1962             :                 {
    1963           0 :                     delete pAItem->pItem;
    1964           0 :                     pAItem->pItem = pItem->Clone();
    1965           0 :                     aOutSet.ClearItem( pAItem->pItem->Which() );
    1966             :                 }
    1967             :             }
    1968             : 
    1969           0 :             if( aOutSet.Count() )
    1970           0 :                 pList->Put( aOutSet );
    1971             : 
    1972           0 :             PaintAttrText_Impl(); // Set AttributText in GroupBox
    1973           0 :         }
    1974             :     }
    1975           0 :     return 0;
    1976             : }
    1977             : 
    1978             : 
    1979             : 
    1980           0 : IMPL_LINK_NOARG(SvxSearchDialog, NoFormatHdl_Impl)
    1981             : {
    1982           0 :     SvtModuleOptions::EFactory eFactory = getModule(rBindings);
    1983             :     bool bWriterApp =
    1984           0 :         eFactory == SvtModuleOptions::EFactory::WRITER ||
    1985           0 :         eFactory == SvtModuleOptions::EFactory::WRITERWEB ||
    1986           0 :         eFactory == SvtModuleOptions::EFactory::WRITERGLOBAL;
    1987           0 :     bool bCalcApp = eFactory == SvtModuleOptions::EFactory::CALC;
    1988             : 
    1989           0 :     if (bCalcApp)
    1990           0 :         m_pLayoutBtn->SetText( aLayoutCalcStr );
    1991             :     else
    1992             :     {
    1993           0 :         if (bWriterApp)
    1994           0 :             m_pLayoutBtn->SetText( aLayoutWriterStr);
    1995             :         else
    1996           0 :             m_pLayoutBtn->SetText( aStylesStr );
    1997             :     }
    1998             : 
    1999           0 :     bFormat = false;
    2000           0 :     m_pLayoutBtn->Check( false );
    2001             : 
    2002           0 :     if ( bSearch )
    2003             :     {
    2004           0 :         m_pSearchAttrText->SetText( "" );
    2005           0 :         pSearchList->Clear();
    2006             :     }
    2007             :     else
    2008             :     {
    2009           0 :         m_pReplaceAttrText->SetText( "" );
    2010           0 :         pReplaceList->Clear();
    2011             :     }
    2012           0 :     pImpl->bSaveToModule = false;
    2013           0 :     TemplateHdl_Impl(m_pLayoutBtn);
    2014           0 :     pImpl->bSaveToModule = true;
    2015           0 :     m_pNoFormatBtn->Disable();
    2016           0 :     return 0;
    2017             : }
    2018             : 
    2019             : 
    2020             : 
    2021           0 : IMPL_LINK_NOARG(SvxSearchDialog, AttributeHdl_Impl)
    2022             : {
    2023           0 :     if ( !pSearchList || !pImpl->pRanges )
    2024           0 :         return 0;
    2025             : 
    2026           0 :     SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
    2027           0 :     if(pFact)
    2028             :     {
    2029           0 :         boost::scoped_ptr<VclAbstractDialog> pDlg(pFact->CreateSvxSearchAttributeDialog( this, *pSearchList, pImpl->pRanges ));
    2030             :         DBG_ASSERT(pDlg, "Dialog creation failed!");
    2031           0 :         pDlg->Execute();
    2032             :     }
    2033           0 :     PaintAttrText_Impl();
    2034           0 :     return 0;
    2035             : }
    2036             : 
    2037             : 
    2038             : 
    2039           0 : IMPL_LINK_TYPED( SvxSearchDialog, TimeoutHdl_Impl, Timer *, pTimer, void )
    2040             : {
    2041           0 :     SfxViewShell* pViewShell = SfxViewShell::Current();
    2042             : 
    2043           0 :     if ( pViewShell )
    2044             :     {
    2045           0 :         if ( pViewShell->HasSelection( m_pSearchLB->IsVisible() ) )
    2046           0 :             EnableControl_Impl(m_pSelectionBtn);
    2047             :         else
    2048             :         {
    2049           0 :             m_pSelectionBtn->Check( false );
    2050           0 :             m_pSelectionBtn->Disable();
    2051             :         }
    2052             :     }
    2053             : 
    2054           0 :     pTimer->Start();
    2055           0 : }
    2056             : 
    2057             : 
    2058             : 
    2059           0 : OUString& SvxSearchDialog::BuildAttrText_Impl( OUString& rStr,
    2060             :                                              bool bSrchFlag ) const
    2061             : {
    2062           0 :     rStr.clear();
    2063             : 
    2064           0 :     SfxObjectShell* pSh = SfxObjectShell::Current();
    2065             :     DBG_ASSERT( pSh, "no DocShell" );
    2066             : 
    2067           0 :     if ( !pSh )
    2068           0 :         return rStr;
    2069             : 
    2070           0 :     SfxItemPool& rPool = pSh->GetPool();
    2071           0 :     SearchAttrItemList* pList = bSrchFlag ? pSearchList : pReplaceList;
    2072             : 
    2073           0 :     if ( !pList )
    2074           0 :         return rStr;
    2075             : 
    2076             :     // Metric query
    2077           0 :     SfxMapUnit eMapUnit = SFX_MAPUNIT_CM;
    2078           0 :     FieldUnit eFieldUnit = pSh->GetModule()->GetFieldUnit();
    2079           0 :     switch ( eFieldUnit )
    2080             :     {
    2081           0 :         case FUNIT_MM:          eMapUnit = SFX_MAPUNIT_MM; break;
    2082             :         case FUNIT_CM:
    2083             :         case FUNIT_M:
    2084           0 :         case FUNIT_KM:          eMapUnit = SFX_MAPUNIT_CM; break;
    2085           0 :         case FUNIT_TWIP:        eMapUnit = SFX_MAPUNIT_TWIP; break;
    2086             :         case FUNIT_POINT:
    2087           0 :         case FUNIT_PICA:        eMapUnit = SFX_MAPUNIT_POINT; break;
    2088             :         case FUNIT_INCH:
    2089             :         case FUNIT_FOOT:
    2090           0 :         case FUNIT_MILE:        eMapUnit = SFX_MAPUNIT_INCH; break;
    2091           0 :         case FUNIT_100TH_MM:    eMapUnit = SFX_MAPUNIT_100TH_MM; break;
    2092             :         default: ;//prevent warning
    2093             :     }
    2094             : 
    2095           0 :     ResStringArray aAttrNames( SVX_RES( RID_ATTR_NAMES ) );
    2096             : 
    2097           0 :     for ( sal_uInt16 i = 0; i < pList->Count(); ++i )
    2098             :     {
    2099           0 :         const SearchAttrItem& rItem = pList->GetObject(i);
    2100             : 
    2101           0 :         if ( !rStr.isEmpty() )
    2102           0 :             rStr += ", ";
    2103             : 
    2104           0 :         if ( !IsInvalidItem( rItem.pItem ) )
    2105             :         {
    2106           0 :             OUString aStr;
    2107             :             rPool.GetPresentation( *rItem.pItem,
    2108           0 :                                     eMapUnit, aStr );
    2109           0 :             rStr += aStr;
    2110             :         }
    2111           0 :         else if ( rItem.nSlot == SID_ATTR_BRUSH_CHAR )
    2112             :         {
    2113             :             // Special treatment for text background
    2114           0 :             rStr += SVX_RESSTR( RID_SVXITEMS_BRUSH_CHAR );
    2115             :         }
    2116             :         else
    2117             :         {
    2118           0 :             sal_uInt32 nId  = aAttrNames.FindIndex( rItem.nSlot );
    2119           0 :             if ( RESARRAY_INDEX_NOTFOUND != nId )
    2120           0 :                 rStr += aAttrNames.GetString( nId );
    2121             :         }
    2122             :     }
    2123           0 :     return rStr;
    2124             : }
    2125             : 
    2126             : 
    2127             : 
    2128           0 : void SvxSearchDialog::PaintAttrText_Impl()
    2129             : {
    2130           0 :     OUString aDesc;
    2131           0 :     BuildAttrText_Impl( aDesc, bSearch );
    2132             : 
    2133           0 :     if ( !bFormat && !aDesc.isEmpty() )
    2134           0 :         bFormat = true;
    2135             : 
    2136           0 :     if ( bSearch )
    2137             :     {
    2138           0 :         m_pSearchAttrText->SetText( aDesc );
    2139           0 :         FocusHdl_Impl(m_pSearchLB);
    2140             :     }
    2141             :     else
    2142             :     {
    2143           0 :         m_pReplaceAttrText->SetText( aDesc );
    2144           0 :         FocusHdl_Impl(m_pReplaceLB);
    2145           0 :     }
    2146           0 : }
    2147             : 
    2148             : 
    2149             : 
    2150           0 : void SvxSearchDialog::SetModifyFlag_Impl( const Control* pCtrl )
    2151             : {
    2152           0 :     if ( m_pSearchLB == static_cast<const ComboBox*>(pCtrl) )
    2153           0 :         nModifyFlag |= MODIFY_SEARCH;
    2154           0 :     else if ( m_pReplaceLB == static_cast<const ComboBox*>(pCtrl) )
    2155           0 :         nModifyFlag |= MODIFY_REPLACE;
    2156           0 :     else if ( m_pWordBtn == static_cast<const CheckBox*>(pCtrl) )
    2157           0 :         nModifyFlag |= MODIFY_WORD;
    2158           0 :     else if ( m_pMatchCaseCB == static_cast<const CheckBox*>(pCtrl) )
    2159           0 :         nModifyFlag |= MODIFY_EXACT;
    2160           0 :     else if ( m_pBackwardsBtn == static_cast<const CheckBox*>(pCtrl) )
    2161           0 :         nModifyFlag |= MODIFY_BACKWARDS;
    2162           0 :     else if ( m_pNotesBtn == static_cast<const CheckBox*>(pCtrl) )
    2163           0 :         nModifyFlag |= MODIFY_NOTES;
    2164           0 :     else if ( m_pSelectionBtn == static_cast<const CheckBox*>(pCtrl) )
    2165           0 :         nModifyFlag |= MODIFY_SELECTION;
    2166           0 :     else if ( m_pRegExpBtn == static_cast<const CheckBox*>(pCtrl) )
    2167           0 :         nModifyFlag |= MODIFY_REGEXP;
    2168           0 :     else if ( m_pLayoutBtn == static_cast<const CheckBox*>(pCtrl) )
    2169           0 :         nModifyFlag |= MODIFY_LAYOUT;
    2170           0 :     else if ( m_pSimilarityBox == static_cast<const CheckBox*>(pCtrl) )
    2171           0 :         nModifyFlag |= MODIFY_SIMILARITY;
    2172           0 :     else if ( m_pCalcSearchInLB == static_cast<const ListBox*>(pCtrl) )
    2173             :     {
    2174           0 :         nModifyFlag |= MODIFY_FORMULAS;
    2175           0 :         nModifyFlag |= MODIFY_VALUES;
    2176           0 :         nModifyFlag |= MODIFY_CALC_NOTES;
    2177             :     }
    2178           0 :     else if ( m_pRowsBtn == static_cast<const RadioButton*>(pCtrl) )
    2179           0 :         nModifyFlag |= MODIFY_ROWS;
    2180           0 :     else if ( m_pColumnsBtn == static_cast<const RadioButton*>(pCtrl) )
    2181           0 :         nModifyFlag |= MODIFY_COLUMNS;
    2182           0 :     else if ( m_pAllSheetsCB == static_cast<const CheckBox*>(pCtrl) )
    2183           0 :         nModifyFlag |= MODIFY_ALLTABLES;
    2184           0 : }
    2185             : 
    2186             : 
    2187             : 
    2188           0 : void SvxSearchDialog::SaveToModule_Impl()
    2189             : {
    2190           0 :     if ( !pSearchItem )
    2191           0 :         return;
    2192             : 
    2193           0 :     if ( m_pLayoutBtn->IsChecked() )
    2194             :     {
    2195           0 :         pSearchItem->SetSearchString ( m_pSearchTmplLB->GetSelectEntry() );
    2196           0 :         pSearchItem->SetReplaceString( m_pReplaceTmplLB->GetSelectEntry() );
    2197             :     }
    2198             :     else
    2199             :     {
    2200           0 :         pSearchItem->SetSearchString ( m_pSearchLB->GetText() );
    2201           0 :         pSearchItem->SetReplaceString( m_pReplaceLB->GetText() );
    2202           0 :         Remember_Impl( m_pSearchLB->GetText(), true );
    2203             :     }
    2204             : 
    2205           0 :     pSearchItem->SetRegExp( false );
    2206           0 :     pSearchItem->SetLevenshtein( false );
    2207           0 :     if (GetCheckBoxValue(m_pRegExpBtn))
    2208           0 :         pSearchItem->SetRegExp( true );
    2209           0 :     else if (GetCheckBoxValue(m_pSimilarityBox))
    2210           0 :         pSearchItem->SetLevenshtein( true );
    2211             : 
    2212           0 :     pSearchItem->SetWordOnly(GetCheckBoxValue(m_pWordBtn));
    2213           0 :     pSearchItem->SetBackward(GetCheckBoxValue(m_pBackwardsBtn));
    2214           0 :     pSearchItem->SetNotes(GetCheckBoxValue(m_pNotesBtn));
    2215           0 :     pSearchItem->SetPattern(GetCheckBoxValue(m_pLayoutBtn));
    2216           0 :     pSearchItem->SetSelection(GetCheckBoxValue(m_pSelectionBtn));
    2217           0 :     pSearchItem->SetUseAsianOptions(GetCheckBoxValue(m_pJapOptionsCB));
    2218             : 
    2219           0 :     SvtSearchOptions aOpt;
    2220           0 :     aOpt.SetIgnoreDiacritics_CTL(GetCheckBoxValue(m_pIgnoreDiacritics));
    2221           0 :     aOpt.SetIgnoreKashida_CTL(GetCheckBoxValue(m_pIgnoreKashida));
    2222           0 :     aOpt.Commit();
    2223             : 
    2224           0 :     sal_Int32 nFlags = GetTransliterationFlags();
    2225           0 :     if( !pSearchItem->IsUseAsianOptions())
    2226             :         nFlags &= (TransliterationModules_IGNORE_CASE |
    2227           0 :                    TransliterationModules_IGNORE_WIDTH );
    2228           0 :     if (GetCheckBoxValue(m_pIgnoreDiacritics))
    2229           0 :         nFlags |= TransliterationModulesExtra::IGNORE_DIACRITICS_CTL;
    2230           0 :     if (GetCheckBoxValue(m_pIgnoreKashida))
    2231           0 :         nFlags |= TransliterationModulesExtra::IGNORE_KASHIDA_CTL;
    2232           0 :     pSearchItem->SetTransliterationFlags( nFlags );
    2233             : 
    2234           0 :     if ( !bWriter )
    2235             :     {
    2236           0 :         if ( m_pCalcSearchInLB->GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND )
    2237           0 :             pSearchItem->SetCellType( static_cast<SvxSearchCellType>(m_pCalcSearchInLB->GetSelectEntryPos()) );
    2238             : 
    2239           0 :         pSearchItem->SetRowDirection( m_pRowsBtn->IsChecked() );
    2240           0 :         pSearchItem->SetAllTables( m_pAllSheetsCB->IsChecked() );
    2241             :     }
    2242             : 
    2243           0 :     pSearchItem->SetCommand( SvxSearchCmd::FIND );
    2244           0 :     nModifyFlag = 0;
    2245           0 :     const SfxPoolItem* ppArgs[] = { pSearchItem, 0 };
    2246           0 :     rBindings.GetDispatcher()->Execute( SID_SEARCH_ITEM, SfxCallMode::SLOT, ppArgs );
    2247             : }
    2248             : 
    2249             : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >
    2250           0 :         SvxSearchDialog::GetComponentInterface( bool bCreate )
    2251             : {
    2252             :     ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > xPeer
    2253           0 :         (Window::GetComponentInterface(false));
    2254           0 :     if ( !xPeer.is() && bCreate )
    2255             :     {
    2256           0 :         ::com::sun::star::awt::XWindowPeer* mxPeer = new VCLXSvxFindReplaceDialog(this);
    2257           0 :         SetComponentInterface(mxPeer);
    2258           0 :         return mxPeer;
    2259             :     }
    2260             :     else
    2261           0 :         return xPeer;
    2262             : }
    2263             : 
    2264       35780 : SFX_IMPL_CHILDWINDOW_WITHID(SvxSearchDialogWrapper, SID_SEARCH_DLG);
    2265             : 
    2266             : 
    2267             : 
    2268           0 : SvxSearchDialogWrapper::SvxSearchDialogWrapper( vcl::Window* _pParent, sal_uInt16 nId,
    2269             :                                                 SfxBindings* pBindings,
    2270             :                                                 SfxChildWinInfo* pInfo )
    2271             :     : SfxChildWindow( _pParent, nId )
    2272           0 :     , dialog (VclPtr<SvxSearchDialog>::Create(_pParent, this, *pBindings))
    2273             : {
    2274           0 :     pWindow = dialog.get();
    2275           0 :     dialog->Initialize( pInfo );
    2276             : 
    2277           0 :     pBindings->Update( SID_SEARCH_ITEM );
    2278           0 :     pBindings->Update( SID_SEARCH_OPTIONS );
    2279           0 :     pBindings->Update( SID_SEARCH_SEARCHSET );
    2280           0 :     pBindings->Update( SID_SEARCH_REPLACESET );
    2281           0 :     eChildAlignment = SfxChildAlignment::NOALIGNMENT;
    2282           0 :     dialog->bConstruct = false;
    2283           0 : }
    2284             : 
    2285           0 : SvxSearchDialogWrapper::~SvxSearchDialogWrapper ()
    2286             : {
    2287           0 : }
    2288             : 
    2289             : 
    2290             : 
    2291             : 
    2292           0 : SfxChildWinInfo SvxSearchDialogWrapper::GetInfo() const
    2293             : {
    2294           0 :     SfxChildWinInfo aInfo = SfxChildWindow::GetInfo();
    2295           0 :     aInfo.bVisible = false;
    2296           0 :     return aInfo;
    2297             : }
    2298             : 
    2299             : 
    2300          20 : static vcl::Window* lcl_GetSearchLabelWindow()
    2301             : {
    2302             :     css::uno::Reference< css::beans::XPropertySet > xPropSet(
    2303          20 :             SfxViewFrame::Current()->GetFrame().GetFrameInterface(), css::uno::UNO_QUERY_THROW);
    2304          40 :     css::uno::Reference< css::frame::XLayoutManager > xLayoutManager;
    2305          20 :     xPropSet->getPropertyValue("LayoutManager") >>= xLayoutManager;
    2306             :     css::uno::Reference< css::ui::XUIElement > xUIElement =
    2307          40 :         xLayoutManager->getElement("private:resource/toolbar/findbar");
    2308          20 :     if (!xUIElement.is())
    2309          20 :         return 0;
    2310             :     css::uno::Reference< css::awt::XWindow > xWindow(
    2311           0 :             xUIElement->getRealInterface(), css::uno::UNO_QUERY_THROW);
    2312           0 :     VclPtr< ToolBox > pToolBox = static_cast<ToolBox*>( VCLUnoHelper::GetWindow(xWindow).get() );
    2313           0 :     for (size_t i = 0; pToolBox && i < pToolBox->GetItemCount(); ++i)
    2314           0 :         if (pToolBox->GetItemCommand(i) == ".uno:SearchLabel")
    2315           0 :             return pToolBox->GetItemWindow(i);
    2316          20 :     return 0;
    2317             : }
    2318             : 
    2319          20 : void SvxSearchDialogWrapper::SetSearchLabel(const SearchLabel& rSL)
    2320             : {
    2321          20 :     OUString sStr;
    2322          20 :     if (rSL == SL_End)
    2323           2 :         sStr = SVX_RESSTR(RID_SVXSTR_SEARCH_END);
    2324          18 :     else if (rSL == SL_Start)
    2325           0 :         sStr = SVX_RESSTR(RID_SVXSTR_SEARCH_START);
    2326          18 :     else if (rSL == SL_EndSheet)
    2327           0 :         sStr = SVX_RESSTR(RID_SVXSTR_SEARCH_END_SHEET);
    2328          18 :     else if (rSL == SL_NotFound)
    2329           1 :         sStr = SVX_RESSTR(RID_SVXSTR_SEARCH_NOT_FOUND);
    2330             : 
    2331          20 :     if (vcl::Window *pSearchLabel = lcl_GetSearchLabelWindow())
    2332             :     {
    2333           0 :         if (sStr.isEmpty())
    2334           0 :             pSearchLabel->Hide();
    2335             :         else
    2336             :         {
    2337           0 :             pSearchLabel->SetText(sStr);
    2338           0 :             pSearchLabel->Show();
    2339             :         }
    2340             :     }
    2341          20 :     if (SvxSearchDialogWrapper *pWrp = static_cast<SvxSearchDialogWrapper*>( SfxViewFrame::Current()->
    2342          20 :             GetChildWindow( SvxSearchDialogWrapper::GetChildWindowId() )))
    2343           0 :         pWrp->getDialog()->SetSearchLabel(sStr);
    2344         410 : }
    2345             : 
    2346             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11