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

Generated by: LCOV version 1.10