LCOV - code coverage report
Current view: top level - svx/source/tbxctrls - tbunosearchcontrollers.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 564 0.0 %
Date: 2014-04-14 Functions: 0 118 0.0 %
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             : #include <tbunosearchcontrollers.hxx>
      21             : 
      22             : #include <svx/dialogs.hrc>
      23             : #include <svx/dialmgr.hxx>
      24             : 
      25             : #include <comphelper/processfactory.hxx>
      26             : #include <cppuhelper/supportsservice.hxx>
      27             : #include <com/sun/star/beans/XPropertySet.hpp>
      28             : #include <com/sun/star/frame/XLayoutManager.hpp>
      29             : #include <com/sun/star/i18n/TransliterationModules.hpp>
      30             : #include <com/sun/star/i18n/TransliterationModulesExtra.hpp>
      31             : #include <com/sun/star/text/XTextRange.hpp>
      32             : #include <com/sun/star/ui/XUIElement.hpp>
      33             : #include <com/sun/star/util/URL.hpp>
      34             : #include <com/sun/star/util/URLTransformer.hpp>
      35             : 
      36             : #include <svl/ctloptions.hxx>
      37             : #include <svl/srchitem.hxx>
      38             : #include <toolkit/helper/vclunohelper.hxx>
      39             : #include <vcl/toolbox.hxx>
      40             : #include <vcl/svapp.hxx>
      41             : #include <osl/mutex.hxx>
      42             : #include <rtl/ref.hxx>
      43             : #include <rtl/instance.hxx>
      44             : 
      45             : #include <vcl/fixed.hxx>
      46             : 
      47             : using namespace css;
      48             : 
      49             : namespace {
      50             : 
      51             : static const char SEARCHITEM_COMMAND[] = "SearchItem.Command";
      52             : static const char SEARCHITEM_SEARCHSTRING[] = "SearchItem.SearchString";
      53             : static const char SEARCHITEM_SEARCHBACKWARD[] = "SearchItem.Backward";
      54             : static const char SEARCHITEM_SEARCHFLAGS[] = "SearchItem.SearchFlags";
      55             : static const char SEARCHITEM_TRANSLITERATEFLAGS[] = "SearchItem.TransliterateFlags";
      56             : static const char SEARCHITEM_ALGORITHMTYPE[] = "SearchItem.AlgorithmType";
      57             : 
      58             : static const char COMMAND_EXECUTESEARCH[] = ".uno:ExecuteSearch";
      59             : static const char COMMAND_FINDTEXT[] = ".uno:FindText";
      60             : static const char COMMAND_DOWNSEARCH[] = ".uno:DownSearch";
      61             : static const char COMMAND_UPSEARCH[] = ".uno:UpSearch";
      62             : static const char COMMAND_EXITSEARCH[] = ".uno:ExitSearch";
      63             : static const char COMMAND_MATCHCASE[] = ".uno:MatchCase";
      64             : static const char COMMAND_APPENDSEARCHHISTORY[] = "AppendSearchHistory";
      65             : 
      66             : static const sal_Int32       REMEMBER_SIZE = 10;
      67             : 
      68           0 : void impl_executeSearch( const css::uno::Reference< css::uno::XComponentContext >& rxContext,
      69             :                          const css::uno::Reference< css::frame::XFrame >& xFrame,
      70             :                          const ToolBox* pToolBox,
      71             :                          const sal_Bool aSearchBackwards = false,
      72             :                          const sal_Bool aFindAll = false )
      73             : {
      74           0 :     css::uno::Reference< css::util::XURLTransformer > xURLTransformer( css::util::URLTransformer::create( rxContext ) );
      75           0 :     css::util::URL aURL;
      76           0 :     aURL.Complete = OUString(COMMAND_EXECUTESEARCH);
      77           0 :     xURLTransformer->parseStrict(aURL);
      78             : 
      79           0 :     OUString sFindText;
      80           0 :     sal_Bool aMatchCase = false;
      81           0 :     if ( pToolBox )
      82             :     {
      83           0 :         sal_uInt16 nItemCount = pToolBox->GetItemCount();
      84           0 :         for ( sal_uInt16 i=0; i<nItemCount; ++i )
      85             :         {
      86           0 :             OUString sItemCommand = pToolBox->GetItemCommand(i);
      87           0 :             if ( sItemCommand == COMMAND_FINDTEXT )
      88             :             {
      89           0 :                 Window* pItemWin = pToolBox->GetItemWindow(i);
      90           0 :                 if (pItemWin)
      91           0 :                     sFindText = pItemWin->GetText();
      92           0 :             } else if ( sItemCommand == COMMAND_MATCHCASE )
      93             :             {
      94           0 :                 CheckBox* pItemWin = (CheckBox*) pToolBox->GetItemWindow(i);
      95           0 :                 if (pItemWin)
      96           0 :                     aMatchCase = pItemWin->IsChecked();
      97             :             }
      98           0 :         }
      99             :     }
     100             : 
     101           0 :     css::uno::Sequence< css::beans::PropertyValue > lArgs(6);
     102           0 :     lArgs[0].Name = OUString(SEARCHITEM_SEARCHSTRING);
     103           0 :     lArgs[0].Value <<= sFindText;
     104           0 :     lArgs[1].Name = OUString(SEARCHITEM_SEARCHBACKWARD);
     105           0 :     lArgs[1].Value <<= aSearchBackwards;
     106           0 :     lArgs[2].Name = OUString(SEARCHITEM_SEARCHFLAGS);
     107           0 :     lArgs[2].Value <<= (sal_Int32)0;
     108           0 :     lArgs[3].Name = OUString(SEARCHITEM_TRANSLITERATEFLAGS);
     109           0 :     SvtCTLOptions aCTLOptions;
     110           0 :     sal_Int32 nFlags = 0;
     111           0 :     nFlags |= (!aMatchCase ? static_cast<int>(com::sun::star::i18n::TransliterationModules_IGNORE_CASE) : 0);
     112           0 :     nFlags |= (aCTLOptions.IsCTLFontEnabled() ? com::sun::star::i18n::TransliterationModulesExtra::IGNORE_DIACRITICS_CTL:0 );
     113           0 :     lArgs[3].Value <<= nFlags;
     114           0 :     lArgs[4].Name = OUString(SEARCHITEM_COMMAND);
     115           0 :     lArgs[4].Value <<= (sal_Int16)(aFindAll ?
     116           0 :         SVX_SEARCHCMD_FIND_ALL : SVX_SEARCHCMD_FIND );
     117           0 :     lArgs[5].Name = OUString(SEARCHITEM_ALGORITHMTYPE);
     118           0 :     lArgs[5].Value <<= (sal_Int16)0;  // 0 == SearchAlgorithms_ABSOLUTE
     119             : 
     120           0 :     css::uno::Reference< css::frame::XDispatchProvider > xDispatchProvider(xFrame, css::uno::UNO_QUERY);
     121           0 :     if ( xDispatchProvider.is() )
     122             :     {
     123           0 :         css::uno::Reference< css::frame::XDispatch > xDispatch = xDispatchProvider->queryDispatch( aURL, OUString(), 0 );
     124           0 :         if ( xDispatch.is() && !aURL.Complete.isEmpty() )
     125           0 :             xDispatch->dispatch( aURL, lArgs );
     126           0 :     }
     127           0 : }
     128             : 
     129           0 : FindTextFieldControl::FindTextFieldControl( Window* pParent, WinBits nStyle,
     130             :     css::uno::Reference< css::frame::XFrame >& xFrame,
     131             :     const css::uno::Reference< css::uno::XComponentContext >& xContext) :
     132             :     ComboBox( pParent, nStyle ),
     133             :     m_xFrame(xFrame),
     134           0 :     m_xContext(xContext)
     135             : {
     136           0 :     SetPlaceholderText(SVX_RESSTR(RID_SVXSTR_FINDBAR_FIND));
     137           0 :     EnableAutocomplete(true, true);
     138           0 : }
     139             : 
     140           0 : FindTextFieldControl::~FindTextFieldControl()
     141             : {
     142           0 : }
     143             : 
     144           0 : void FindTextFieldControl::Remember_Impl(const OUString& rStr)
     145             : {
     146           0 :     sal_uInt16 nCount = GetEntryCount();
     147             : 
     148           0 :     for (sal_uInt16 i=0; i<nCount; ++i)
     149             :     {
     150           0 :         if ( rStr == GetEntry(i))
     151           0 :             return;
     152             :     }
     153             : 
     154           0 :     if (nCount == REMEMBER_SIZE)
     155           0 :         RemoveEntryAt(REMEMBER_SIZE-1);
     156             : 
     157           0 :     InsertEntry(rStr, 0);
     158             : }
     159             : 
     160           0 : void FindTextFieldControl::SetTextToSelected_Impl()
     161             : {
     162           0 :     OUString aString;
     163             : 
     164             :     try
     165             :     {
     166           0 :         css::uno::Reference<css::frame::XController> xController(m_xFrame->getController(), css::uno::UNO_QUERY_THROW);
     167           0 :         css::uno::Reference<css::frame::XModel> xModel(xController->getModel(), css::uno::UNO_QUERY_THROW);
     168           0 :         css::uno::Reference<css::container::XIndexAccess> xIndexAccess(xModel->getCurrentSelection(), css::uno::UNO_QUERY_THROW);
     169           0 :         if (xIndexAccess->getCount() > 0)
     170             :         {
     171           0 :             css::uno::Reference<css::text::XTextRange> xTextRange(xIndexAccess->getByIndex(0), css::uno::UNO_QUERY_THROW);
     172           0 :             aString = xTextRange->getString();
     173           0 :         }
     174             :     }
     175           0 :     catch ( ... )
     176             :     {
     177             :     }
     178             : 
     179           0 :     if ( !aString.isEmpty() )
     180             :     {
     181           0 :         SetText( aString );
     182           0 :         GetModifyHdl().Call(this); // FIXME why SetText doesn't trigger this?
     183           0 :     }
     184           0 : }
     185             : 
     186           0 : bool FindTextFieldControl::PreNotify( NotifyEvent& rNEvt )
     187             : {
     188           0 :     bool nRet= ComboBox::PreNotify( rNEvt );
     189             : 
     190           0 :     switch ( rNEvt.GetType() )
     191             :     {
     192             :         case EVENT_KEYINPUT:
     193             :         {
     194           0 :             const KeyEvent* pKeyEvent = rNEvt.GetKeyEvent();
     195           0 :             sal_Bool bShift = pKeyEvent->GetKeyCode().IsShift();
     196           0 :             sal_Bool bMod1 = pKeyEvent->GetKeyCode().IsMod1();
     197           0 :             sal_uInt16 nCode = pKeyEvent->GetKeyCode().GetCode();
     198             : 
     199           0 :             if ( KEY_ESCAPE == nCode || (bMod1 && (KEY_F == nCode)) )
     200             :             {
     201           0 :                 nRet = true;
     202           0 :                 GrabFocusToDocument();
     203             : 
     204             :                 // hide the findbar
     205           0 :                 css::uno::Reference< css::beans::XPropertySet > xPropSet(m_xFrame, css::uno::UNO_QUERY);
     206           0 :                 if (xPropSet.is())
     207             :                 {
     208           0 :                     css::uno::Reference< css::frame::XLayoutManager > xLayoutManager;
     209           0 :                     css::uno::Any aValue = xPropSet->getPropertyValue("LayoutManager");
     210           0 :                     aValue >>= xLayoutManager;
     211           0 :                     if (xLayoutManager.is())
     212             :                     {
     213           0 :                         const OUString sResourceURL( "private:resource/toolbar/findbar" );
     214           0 :                         xLayoutManager->hideElement( sResourceURL );
     215           0 :                         xLayoutManager->destroyElement( sResourceURL );
     216           0 :                     }
     217           0 :                 }
     218             :             }
     219             : 
     220           0 :             if ( KEY_RETURN == nCode || (bMod1 && (KEY_G == nCode)) || (KEY_F3 == nCode) )
     221             :             {
     222           0 :                 Remember_Impl(GetText());
     223             : 
     224           0 :                 Window* pWindow = GetParent();
     225           0 :                 ToolBox* pToolBox = (ToolBox*)pWindow;
     226             : 
     227           0 :                 impl_executeSearch( m_xContext, m_xFrame, pToolBox, bShift);
     228           0 :                 nRet = true;
     229             :             }
     230           0 :             break;
     231             :         }
     232             : 
     233             :         case EVENT_GETFOCUS:
     234           0 :             SetSelection( Selection( SELECTION_MIN, SELECTION_MAX ) );
     235           0 :             break;
     236             :     }
     237             : 
     238           0 :     return nRet;
     239             : }
     240             : 
     241             : 
     242             : 
     243             : // SearchToolbarControllersManager
     244             : 
     245           0 : SearchToolbarControllersManager::SearchToolbarControllersManager()
     246             : {
     247           0 : }
     248             : 
     249           0 : SearchToolbarControllersManager::~SearchToolbarControllersManager()
     250             : {
     251           0 : }
     252             : 
     253             : namespace
     254             : {
     255             :     class theSearchToolbarControllersManager
     256             :         : public rtl::Static<SearchToolbarControllersManager,
     257             :             theSearchToolbarControllersManager>
     258             :     {
     259             :     };
     260             : }
     261             : 
     262           0 : SearchToolbarControllersManager& SearchToolbarControllersManager::createControllersManager()
     263             : {
     264           0 :     return theSearchToolbarControllersManager::get();
     265             : }
     266             : 
     267           0 : void SearchToolbarControllersManager::saveSearchHistory(const FindTextFieldControl* pFindTextFieldControl)
     268             : {
     269           0 :     sal_uInt16 nECount( pFindTextFieldControl->GetEntryCount() );
     270           0 :     m_aSearchStrings.resize( nECount );
     271           0 :     for( sal_uInt16 i=0; i<nECount; ++i )
     272             :     {
     273           0 :         m_aSearchStrings[i] = pFindTextFieldControl->GetEntry(i);
     274             :     }
     275           0 : }
     276             : 
     277           0 : void SearchToolbarControllersManager::loadSearchHistory(FindTextFieldControl* pFindTextFieldControl)
     278             : {
     279           0 :     for( sal_uInt16 i=0; i<m_aSearchStrings.size(); ++i )
     280             :     {
     281           0 :         pFindTextFieldControl->InsertEntry(m_aSearchStrings[i],i);
     282             :     }
     283           0 : }
     284             : 
     285           0 : void SearchToolbarControllersManager::registryController( const css::uno::Reference< css::frame::XFrame >& xFrame, const css::uno::Reference< css::frame::XStatusListener >& xStatusListener, const OUString& sCommandURL )
     286             : {
     287           0 :     SearchToolbarControllersMap::iterator pIt = aSearchToolbarControllersMap.find(xFrame);
     288           0 :     if (pIt == aSearchToolbarControllersMap.end())
     289             :     {
     290           0 :         SearchToolbarControllersVec lControllers(1);
     291           0 :         lControllers[0].Name = sCommandURL;
     292           0 :         lControllers[0].Value <<= xStatusListener;
     293           0 :         aSearchToolbarControllersMap.insert(SearchToolbarControllersMap::value_type(xFrame, lControllers));
     294             :     }
     295             :     else
     296             :     {
     297           0 :         sal_Int32 nSize = pIt->second.size();
     298           0 :         for (sal_Int32 i=0; i<nSize; ++i)
     299             :         {
     300           0 :             if (pIt->second[i].Name.equals(sCommandURL))
     301           0 :                 return;
     302             :         }
     303             : 
     304           0 :         pIt->second.resize(nSize+1);
     305           0 :         pIt->second[nSize].Name = sCommandURL;
     306           0 :         pIt->second[nSize].Value <<= xStatusListener;
     307             :     }
     308             : }
     309             : 
     310           0 : void SearchToolbarControllersManager::freeController( const css::uno::Reference< css::frame::XFrame >& xFrame, const css::uno::Reference< css::frame::XStatusListener >& /*xStatusListener*/, const OUString& sCommandURL )
     311             : {
     312           0 :     SearchToolbarControllersMap::iterator pIt = aSearchToolbarControllersMap.find(xFrame);
     313           0 :     if (pIt != aSearchToolbarControllersMap.end())
     314             :     {
     315           0 :         for (SearchToolbarControllersVec::iterator pItCtrl=pIt->second.begin(); pItCtrl!=pIt->second.end(); ++pItCtrl)
     316             :         {
     317           0 :             if (pItCtrl->Name.equals(sCommandURL))
     318             :             {
     319           0 :                 pIt->second.erase(pItCtrl);
     320           0 :                 break;
     321             :             }
     322             :         }
     323             : 
     324           0 :         if (pIt->second.empty())
     325           0 :             aSearchToolbarControllersMap.erase(pIt);
     326             :     }
     327           0 : }
     328             : 
     329           0 : css::uno::Reference< css::frame::XStatusListener > SearchToolbarControllersManager::findController( const css::uno::Reference< css::frame::XFrame >& xFrame, const OUString& sCommandURL )
     330             : {
     331           0 :     css::uno::Reference< css::frame::XStatusListener > xStatusListener;
     332             : 
     333           0 :     SearchToolbarControllersMap::iterator pIt = aSearchToolbarControllersMap.find(xFrame);
     334           0 :     if (pIt != aSearchToolbarControllersMap.end())
     335             :     {
     336           0 :         for (SearchToolbarControllersVec::iterator pItCtrl =pIt->second.begin(); pItCtrl != pIt->second.end(); ++pItCtrl)
     337             :         {
     338           0 :             if (pItCtrl->Name.equals(sCommandURL))
     339             :             {
     340           0 :                 pItCtrl->Value >>= xStatusListener;
     341           0 :                 break;
     342             :             }
     343             :         }
     344             :     }
     345             : 
     346           0 :     return xStatusListener;
     347             : }
     348             : 
     349             : 
     350             : // FindTextToolbarController
     351             : 
     352           0 : FindTextToolbarController::FindTextToolbarController( const css::uno::Reference< css::uno::XComponentContext >& rxContext )
     353             :     : svt::ToolboxController(rxContext, css::uno::Reference< css::frame::XFrame >(), OUString(COMMAND_FINDTEXT))
     354             :     , m_pFindTextFieldControl(NULL)
     355             :     , m_nDownSearchId(0)
     356           0 :     , m_nUpSearchId(0)
     357             : {
     358           0 : }
     359             : 
     360           0 : FindTextToolbarController::~FindTextToolbarController()
     361             : {
     362           0 : }
     363             : 
     364             : // XInterface
     365           0 : css::uno::Any SAL_CALL FindTextToolbarController::queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException, std::exception )
     366             : {
     367           0 :     css::uno::Any a = ToolboxController::queryInterface( aType );
     368           0 :     if ( a.hasValue() )
     369           0 :         return a;
     370             : 
     371           0 :     return ::cppu::queryInterface( aType, static_cast< css::lang::XServiceInfo* >( this ) );
     372             : }
     373             : 
     374           0 : void SAL_CALL FindTextToolbarController::acquire() throw ()
     375             : {
     376           0 :     ToolboxController::acquire();
     377           0 : }
     378             : 
     379           0 : void SAL_CALL FindTextToolbarController::release() throw ()
     380             : {
     381           0 :     ToolboxController::release();
     382           0 : }
     383             : 
     384             : // XServiceInfo
     385           0 : OUString SAL_CALL FindTextToolbarController::getImplementationName() throw( css::uno::RuntimeException, std::exception )
     386             : {
     387           0 :     return OUString("com.sun.star.svx.FindTextToolboxController");
     388             : }
     389             : 
     390           0 : sal_Bool SAL_CALL FindTextToolbarController::supportsService( const OUString& ServiceName ) throw( css::uno::RuntimeException, std::exception )
     391             : {
     392           0 :     return cppu::supportsService(this, ServiceName);
     393             : }
     394             : 
     395           0 : css::uno::Sequence< OUString > SAL_CALL FindTextToolbarController::getSupportedServiceNames() throw( css::uno::RuntimeException, std::exception )
     396             : {
     397           0 :     css::uno::Sequence< OUString > aSNS( 1 );
     398           0 :     aSNS[0] = "com.sun.star.frame.ToolbarController";
     399           0 :     return aSNS;
     400             : }
     401             : 
     402             : // XComponent
     403           0 : void SAL_CALL FindTextToolbarController::dispose() throw ( css::uno::RuntimeException, std::exception )
     404             : {
     405           0 :     SolarMutexGuard aSolarMutexGuard;
     406             : 
     407           0 :     SearchToolbarControllersManager::createControllersManager().freeController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
     408             : 
     409           0 :     svt::ToolboxController::dispose();
     410           0 :     SearchToolbarControllersManager::createControllersManager().saveSearchHistory(m_pFindTextFieldControl);
     411           0 :     delete m_pFindTextFieldControl;
     412           0 :     m_pFindTextFieldControl = 0;
     413           0 : }
     414             : 
     415             : // XInitialization
     416           0 : void SAL_CALL FindTextToolbarController::initialize( const css::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException, std::exception)
     417             : {
     418           0 :     svt::ToolboxController::initialize(aArguments);
     419             : 
     420           0 :     Window* pWindow = VCLUnoHelper::GetWindow( getParent() );
     421           0 :     ToolBox* pToolBox = (ToolBox*)pWindow;
     422           0 :     if ( pToolBox )
     423             :     {
     424           0 :         sal_uInt16 nItemCount = pToolBox->GetItemCount();
     425           0 :         for ( sal_uInt16 i=0; i<nItemCount; ++i )
     426             :         {
     427           0 :             OUString sItemCommand = pToolBox->GetItemCommand(i);
     428           0 :             if ( sItemCommand == COMMAND_DOWNSEARCH )
     429             :             {
     430           0 :                 pToolBox->EnableItem(i, false);
     431           0 :                 m_nDownSearchId = i;
     432             :             }
     433           0 :             else if ( sItemCommand == COMMAND_UPSEARCH )
     434             :             {
     435           0 :                 pToolBox->EnableItem(i, false);
     436           0 :                 m_nUpSearchId = i;
     437             :             }
     438           0 :         }
     439             :     }
     440             : 
     441           0 :     SearchToolbarControllersManager::createControllersManager().registryController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
     442           0 : }
     443             : 
     444           0 : css::uno::Reference< css::awt::XWindow > SAL_CALL FindTextToolbarController::createItemWindow( const css::uno::Reference< css::awt::XWindow >& Parent ) throw ( css::uno::RuntimeException, std::exception )
     445             : {
     446           0 :     css::uno::Reference< css::awt::XWindow > xItemWindow;
     447             : 
     448           0 :     css::uno::Reference< css::awt::XWindow > xParent( Parent );
     449           0 :     Window* pParent = VCLUnoHelper::GetWindow( xParent );
     450           0 :     if ( pParent )
     451             :     {
     452           0 :         ToolBox* pToolbar =  ( ToolBox* )pParent;
     453           0 :         m_pFindTextFieldControl = new FindTextFieldControl( pToolbar, WinBits( WB_DROPDOWN | WB_VSCROLL), m_xFrame, m_xContext  );
     454             : 
     455           0 :         Size aSize(250, m_pFindTextFieldControl->GetTextHeight() + 200);
     456           0 :         m_pFindTextFieldControl->SetSizePixel( aSize );
     457           0 :         m_pFindTextFieldControl->SetModifyHdl(LINK(this, FindTextToolbarController, EditModifyHdl));
     458           0 :         SearchToolbarControllersManager::createControllersManager().loadSearchHistory(m_pFindTextFieldControl);
     459             :     }
     460           0 :     xItemWindow = VCLUnoHelper::GetInterface( m_pFindTextFieldControl );
     461             : 
     462           0 :     return xItemWindow;
     463             : }
     464             : 
     465             : // XStatusListener
     466           0 : void SAL_CALL FindTextToolbarController::statusChanged( const css::frame::FeatureStateEvent& rEvent ) throw ( css::uno::RuntimeException, std::exception )
     467             : {
     468           0 :     SolarMutexGuard aSolarMutexGuard;
     469           0 :     if ( m_bDisposed )
     470           0 :         return;
     471             : 
     472           0 :     OUString aFeatureURL = rEvent.FeatureURL.Complete;
     473           0 :     if ( aFeatureURL == "AppendSearchHistory" )
     474             :     {
     475           0 :         m_pFindTextFieldControl->Remember_Impl(m_pFindTextFieldControl->GetText());
     476           0 :     }
     477             : }
     478             : 
     479           0 : IMPL_LINK_NOARG(FindTextToolbarController, EditModifyHdl)
     480             : {
     481             :     // enable or disable item DownSearch/UpSearch of findbar
     482           0 :     Window* pWindow = VCLUnoHelper::GetWindow( getParent() );
     483           0 :     ToolBox* pToolBox = (ToolBox*)pWindow;
     484           0 :     if ( pToolBox && m_pFindTextFieldControl )
     485             :     {
     486           0 :         if (!m_pFindTextFieldControl->GetText().isEmpty())
     487             :         {
     488           0 :             if ( !pToolBox->IsItemEnabled(m_nDownSearchId) )
     489           0 :                 pToolBox->EnableItem(m_nDownSearchId, true);
     490           0 :             if ( !pToolBox->IsItemEnabled(m_nUpSearchId) )
     491           0 :                 pToolBox->EnableItem(m_nUpSearchId, true);
     492             :         }
     493             :         else
     494             :         {
     495           0 :             if ( pToolBox->IsItemEnabled(m_nDownSearchId) )
     496           0 :                 pToolBox->EnableItem(m_nDownSearchId, false);
     497           0 :             if ( pToolBox->IsItemEnabled(m_nUpSearchId) )
     498           0 :                 pToolBox->EnableItem(m_nUpSearchId, false);
     499             :         }
     500             :     }
     501             : 
     502           0 :     return 0;
     503             : }
     504             : 
     505             : 
     506             : // class UpDownSearchToolboxController
     507             : 
     508           0 : UpDownSearchToolboxController::UpDownSearchToolboxController( const css::uno::Reference< css::uno::XComponentContext > & rxContext, Type eType )
     509             :     : svt::ToolboxController( rxContext,
     510             :             css::uno::Reference< css::frame::XFrame >(),
     511             :             (eType == UP) ? OUString( COMMAND_UPSEARCH ):  OUString( COMMAND_DOWNSEARCH ) ),
     512           0 :       meType( eType )
     513             : {
     514           0 : }
     515             : 
     516           0 : UpDownSearchToolboxController::~UpDownSearchToolboxController()
     517             : {
     518           0 : }
     519             : 
     520             : // XInterface
     521           0 : css::uno::Any SAL_CALL UpDownSearchToolboxController::queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException, std::exception )
     522             : {
     523           0 :     css::uno::Any a = ToolboxController::queryInterface( aType );
     524           0 :     if ( a.hasValue() )
     525           0 :         return a;
     526             : 
     527           0 :     return ::cppu::queryInterface( aType, static_cast< css::lang::XServiceInfo* >( this ) );
     528             : }
     529             : 
     530           0 : void SAL_CALL UpDownSearchToolboxController::acquire() throw ()
     531             : {
     532           0 :     ToolboxController::acquire();
     533           0 : }
     534             : 
     535           0 : void SAL_CALL UpDownSearchToolboxController::release() throw ()
     536             : {
     537           0 :     ToolboxController::release();
     538           0 : }
     539             : 
     540             : // XServiceInfo
     541           0 : OUString SAL_CALL UpDownSearchToolboxController::getImplementationName() throw( css::uno::RuntimeException, std::exception )
     542             : {
     543           0 :     return meType == UpDownSearchToolboxController::UP?
     544             :         OUString( "com.sun.star.svx.UpSearchToolboxController" ) :
     545           0 :         OUString( "com.sun.star.svx.DownSearchToolboxController" );
     546             : }
     547             : 
     548           0 : sal_Bool SAL_CALL UpDownSearchToolboxController::supportsService( const OUString& ServiceName ) throw( css::uno::RuntimeException, std::exception )
     549             : {
     550           0 :     return cppu::supportsService(this, ServiceName);
     551             : }
     552             : 
     553           0 : css::uno::Sequence< OUString > SAL_CALL UpDownSearchToolboxController::getSupportedServiceNames() throw( css::uno::RuntimeException, std::exception )
     554             : {
     555           0 :     css::uno::Sequence< OUString > aSNS( 1 );
     556           0 :     aSNS[0] = "com.sun.star.frame.ToolbarController";
     557           0 :     return aSNS;
     558             : }
     559             : 
     560             : // XComponent
     561           0 : void SAL_CALL UpDownSearchToolboxController::dispose() throw ( css::uno::RuntimeException, std::exception )
     562             : {
     563           0 :     SolarMutexGuard aSolarMutexGuard;
     564             : 
     565           0 :     SearchToolbarControllersManager::createControllersManager().freeController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
     566             : 
     567           0 :     svt::ToolboxController::dispose();
     568           0 : }
     569             : 
     570             : // XInitialization
     571           0 : void SAL_CALL UpDownSearchToolboxController::initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException, std::exception )
     572             : {
     573           0 :     svt::ToolboxController::initialize( aArguments );
     574           0 :     SearchToolbarControllersManager::createControllersManager().registryController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
     575           0 : }
     576             : 
     577             : // XToolbarController
     578           0 : void SAL_CALL UpDownSearchToolboxController::execute( sal_Int16 /*KeyModifier*/ ) throw ( css::uno::RuntimeException, std::exception )
     579             : {
     580           0 :     if ( m_bDisposed )
     581           0 :         throw css::lang::DisposedException();
     582             : 
     583           0 :     Window* pWindow = VCLUnoHelper::GetWindow( getParent() );
     584           0 :     ToolBox* pToolBox = (ToolBox*)pWindow;
     585             : 
     586           0 :     impl_executeSearch(m_xContext, m_xFrame, pToolBox, sal_Bool( meType == UP ));
     587             : 
     588           0 :     css::frame::FeatureStateEvent aEvent;
     589           0 :     aEvent.FeatureURL.Complete = OUString(COMMAND_APPENDSEARCHHISTORY);
     590           0 :     css::uno::Reference< css::frame::XStatusListener > xStatusListener = SearchToolbarControllersManager::createControllersManager().findController(m_xFrame, COMMAND_FINDTEXT);
     591           0 :     if (xStatusListener.is())
     592           0 :         xStatusListener->statusChanged( aEvent );
     593           0 : }
     594             : 
     595             : // XStatusListener
     596           0 : void SAL_CALL UpDownSearchToolboxController::statusChanged( const css::frame::FeatureStateEvent& /*rEvent*/ ) throw ( css::uno::RuntimeException, std::exception )
     597             : {
     598           0 : }
     599             : 
     600             : 
     601             : // MatchCaseToolboxController
     602             : 
     603           0 : MatchCaseToolboxController::MatchCaseToolboxController( const css::uno::Reference< css::uno::XComponentContext >& rxContext )
     604             :     : svt::ToolboxController( rxContext,
     605             :         css::uno::Reference< css::frame::XFrame >(),
     606             :         OUString(COMMAND_MATCHCASE) )
     607           0 :     , m_pMatchCaseControl(NULL)
     608             : {
     609           0 : }
     610             : 
     611           0 : MatchCaseToolboxController::~MatchCaseToolboxController()
     612             : {
     613           0 : }
     614             : 
     615             : // XInterface
     616           0 : css::uno::Any SAL_CALL MatchCaseToolboxController::queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException, std::exception )
     617             : {
     618           0 :     css::uno::Any a = ToolboxController::queryInterface( aType );
     619           0 :     if ( a.hasValue() )
     620           0 :         return a;
     621             : 
     622           0 :     return ::cppu::queryInterface( aType, static_cast< css::lang::XServiceInfo* >( this ) );
     623             : }
     624             : 
     625           0 : void SAL_CALL MatchCaseToolboxController::acquire() throw ()
     626             : {
     627           0 :     ToolboxController::acquire();
     628           0 : }
     629             : 
     630           0 : void SAL_CALL MatchCaseToolboxController::release() throw ()
     631             : {
     632           0 :     ToolboxController::release();
     633           0 : }
     634             : 
     635             : // XServiceInfo
     636           0 : OUString SAL_CALL MatchCaseToolboxController::getImplementationName() throw( css::uno::RuntimeException, std::exception )
     637             : {
     638           0 :     return OUString( "com.sun.star.svx.MatchCaseToolboxController" );
     639             : }
     640             : 
     641           0 : sal_Bool SAL_CALL MatchCaseToolboxController::supportsService( const OUString& ServiceName ) throw( css::uno::RuntimeException, std::exception )
     642             : {
     643           0 :     return cppu::supportsService(this, ServiceName);
     644             : }
     645             : 
     646           0 : css::uno::Sequence< OUString > SAL_CALL MatchCaseToolboxController::getSupportedServiceNames() throw( css::uno::RuntimeException, std::exception )
     647             : {
     648           0 :     css::uno::Sequence< OUString > aSNS( 1 );
     649           0 :     aSNS[0] = "com.sun.star.frame.ToolbarController";
     650           0 :     return aSNS;
     651             : }
     652             : 
     653             : // XComponent
     654           0 : void SAL_CALL MatchCaseToolboxController::dispose() throw ( css::uno::RuntimeException, std::exception )
     655             : {
     656           0 :     SolarMutexGuard aSolarMutexGuard;
     657             : 
     658           0 :     SearchToolbarControllersManager::createControllersManager().freeController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
     659             : 
     660           0 :     svt::ToolboxController::dispose();
     661             : 
     662           0 :     delete m_pMatchCaseControl;
     663           0 :     m_pMatchCaseControl = 0;
     664           0 : }
     665             : 
     666             : // XInitialization
     667           0 : void SAL_CALL MatchCaseToolboxController::initialize( const css::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException, std::exception)
     668             : {
     669           0 :     svt::ToolboxController::initialize(aArguments);
     670             : 
     671           0 :     SearchToolbarControllersManager::createControllersManager().registryController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
     672           0 : }
     673             : 
     674           0 : css::uno::Reference< css::awt::XWindow > SAL_CALL MatchCaseToolboxController::createItemWindow( const css::uno::Reference< css::awt::XWindow >& Parent ) throw ( css::uno::RuntimeException, std::exception )
     675             : {
     676           0 :     css::uno::Reference< css::awt::XWindow > xItemWindow;
     677             : 
     678           0 :     css::uno::Reference< css::awt::XWindow > xParent( Parent );
     679           0 :     Window* pParent = VCLUnoHelper::GetWindow( xParent );
     680           0 :     if ( pParent )
     681             :     {
     682           0 :         ToolBox* pToolbar = (ToolBox* )pParent;
     683           0 :         m_pMatchCaseControl = new CheckBox( pToolbar, 0 );
     684           0 :         m_pMatchCaseControl->SetText( SVX_RESSTR( RID_SVXSTR_FINDBAR_MATCHCASE ) );
     685           0 :         Size aSize( m_pMatchCaseControl->GetOptimalSize() );
     686           0 :         m_pMatchCaseControl->SetSizePixel( aSize );
     687             :     }
     688           0 :     xItemWindow = VCLUnoHelper::GetInterface( m_pMatchCaseControl );
     689             : 
     690           0 :     return xItemWindow;
     691             : }
     692             : 
     693             : // XStatusListener
     694           0 : void SAL_CALL MatchCaseToolboxController::statusChanged( const css::frame::FeatureStateEvent& ) throw ( css::uno::RuntimeException, std::exception )
     695             : {
     696           0 : }
     697             : 
     698             : 
     699             : // class FindAllToolboxController
     700             : 
     701           0 : FindAllToolboxController::FindAllToolboxController( const css::uno::Reference< css::uno::XComponentContext > & rxContext )
     702             :     : svt::ToolboxController( rxContext,
     703             :             css::uno::Reference< css::frame::XFrame >(),
     704           0 :             OUString( COMMAND_EXITSEARCH ) )
     705             : {
     706           0 : }
     707             : 
     708           0 : FindAllToolboxController::~FindAllToolboxController()
     709             : {
     710           0 : }
     711             : 
     712             : // XInterface
     713           0 : css::uno::Any SAL_CALL FindAllToolboxController::queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException, std::exception )
     714             : {
     715           0 :     css::uno::Any a = ToolboxController::queryInterface( aType );
     716           0 :     if ( a.hasValue() )
     717           0 :         return a;
     718             : 
     719           0 :     return ::cppu::queryInterface( aType, static_cast< css::lang::XServiceInfo* >( this ) );
     720             : }
     721             : 
     722           0 : void SAL_CALL FindAllToolboxController::acquire() throw ()
     723             : {
     724           0 :     ToolboxController::acquire();
     725           0 : }
     726             : 
     727           0 : void SAL_CALL FindAllToolboxController::release() throw ()
     728             : {
     729           0 :     ToolboxController::release();
     730           0 : }
     731             : 
     732             : // XServiceInfo
     733           0 : OUString SAL_CALL FindAllToolboxController::getImplementationName() throw( css::uno::RuntimeException, std::exception )
     734             : {
     735           0 :     return OUString( "com.sun.star.svx.FindAllToolboxController" );
     736             : }
     737             : 
     738             : 
     739           0 : sal_Bool SAL_CALL FindAllToolboxController::supportsService( const OUString& ServiceName ) throw( css::uno::RuntimeException, std::exception )
     740             : {
     741           0 :     return cppu::supportsService(this, ServiceName);
     742             : }
     743             : 
     744           0 : css::uno::Sequence< OUString > SAL_CALL FindAllToolboxController::getSupportedServiceNames() throw( css::uno::RuntimeException, std::exception )
     745             : {
     746           0 :     css::uno::Sequence< OUString > aSNS( 1 );
     747           0 :     aSNS[0] = "com.sun.star.frame.ToolbarController";
     748           0 :     return aSNS;
     749             : }
     750             : 
     751             : // XComponent
     752           0 : void SAL_CALL FindAllToolboxController::dispose() throw ( css::uno::RuntimeException, std::exception )
     753             : {
     754           0 :     SolarMutexGuard aSolarMutexGuard;
     755             : 
     756           0 :     SearchToolbarControllersManager::createControllersManager().freeController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
     757             : 
     758           0 :     svt::ToolboxController::dispose();
     759           0 : }
     760             : 
     761             : // XInitialization
     762           0 : void SAL_CALL FindAllToolboxController::initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException, std::exception )
     763             : {
     764           0 :     svt::ToolboxController::initialize( aArguments );
     765           0 :     SearchToolbarControllersManager::createControllersManager().registryController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
     766           0 : }
     767             : 
     768             : // XToolbarController
     769           0 : void SAL_CALL FindAllToolboxController::execute( sal_Int16 /*KeyModifier*/ ) throw ( css::uno::RuntimeException, std::exception )
     770             : {
     771           0 :     if ( m_bDisposed )
     772           0 :         throw css::lang::DisposedException();
     773             : 
     774           0 :     Window* pWindow = VCLUnoHelper::GetWindow( getParent() );
     775           0 :     ToolBox* pToolBox = (ToolBox*)pWindow;
     776             : 
     777           0 :     impl_executeSearch(m_xContext, m_xFrame, pToolBox, false, true);
     778           0 : }
     779             : 
     780             : // XStatusListener
     781           0 : void SAL_CALL FindAllToolboxController::statusChanged( const css::frame::FeatureStateEvent& /*rEvent*/ ) throw ( css::uno::RuntimeException, std::exception )
     782             : {
     783           0 : }
     784             : 
     785             : 
     786             : // class ExitSearchToolboxController
     787             : 
     788           0 : ExitSearchToolboxController::ExitSearchToolboxController( const css::uno::Reference< css::uno::XComponentContext > & rxContext )
     789             :     : svt::ToolboxController( rxContext,
     790             :             css::uno::Reference< css::frame::XFrame >(),
     791           0 :             OUString( COMMAND_EXITSEARCH ) )
     792             : {
     793           0 : }
     794             : 
     795           0 : ExitSearchToolboxController::~ExitSearchToolboxController()
     796             : {
     797           0 : }
     798             : 
     799             : // XInterface
     800           0 : css::uno::Any SAL_CALL ExitSearchToolboxController::queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException, std::exception )
     801             : {
     802           0 :     css::uno::Any a = ToolboxController::queryInterface( aType );
     803           0 :     if ( a.hasValue() )
     804           0 :         return a;
     805             : 
     806           0 :     return ::cppu::queryInterface( aType, static_cast< css::lang::XServiceInfo* >( this ) );
     807             : }
     808             : 
     809           0 : void SAL_CALL ExitSearchToolboxController::acquire() throw ()
     810             : {
     811           0 :     ToolboxController::acquire();
     812           0 : }
     813             : 
     814           0 : void SAL_CALL ExitSearchToolboxController::release() throw ()
     815             : {
     816           0 :     ToolboxController::release();
     817           0 : }
     818             : 
     819             : // XServiceInfo
     820           0 : OUString SAL_CALL ExitSearchToolboxController::getImplementationName() throw( css::uno::RuntimeException, std::exception )
     821             : {
     822           0 :     return OUString( "com.sun.star.svx.ExitFindbarToolboxController" );
     823             : }
     824             : 
     825             : 
     826           0 : sal_Bool SAL_CALL ExitSearchToolboxController::supportsService( const OUString& ServiceName ) throw( css::uno::RuntimeException, std::exception )
     827             : {
     828           0 :     return cppu::supportsService(this, ServiceName);
     829             : }
     830             : 
     831           0 : css::uno::Sequence< OUString > SAL_CALL ExitSearchToolboxController::getSupportedServiceNames() throw( css::uno::RuntimeException, std::exception )
     832             : {
     833           0 :     css::uno::Sequence< OUString > aSNS( 1 );
     834           0 :     aSNS[0] = "com.sun.star.frame.ToolbarController";
     835           0 :     return aSNS;
     836             : }
     837             : 
     838             : // XComponent
     839           0 : void SAL_CALL ExitSearchToolboxController::dispose() throw ( css::uno::RuntimeException, std::exception )
     840             : {
     841           0 :     SolarMutexGuard aSolarMutexGuard;
     842             : 
     843           0 :     SearchToolbarControllersManager::createControllersManager().freeController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
     844             : 
     845           0 :     svt::ToolboxController::dispose();
     846           0 : }
     847             : 
     848             : // XInitialization
     849           0 : void SAL_CALL ExitSearchToolboxController::initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException, std::exception )
     850             : {
     851           0 :     svt::ToolboxController::initialize( aArguments );
     852           0 :     SearchToolbarControllersManager::createControllersManager().registryController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
     853           0 : }
     854             : 
     855             : // XToolbarController
     856           0 : void SAL_CALL ExitSearchToolboxController::execute( sal_Int16 /*KeyModifier*/ ) throw ( css::uno::RuntimeException, std::exception )
     857             : {
     858           0 :     Window *pFocusWindow = Application::GetFocusWindow();
     859           0 :     if ( pFocusWindow )
     860           0 :         pFocusWindow->GrabFocusToDocument();
     861             : 
     862             :     // hide the findbar
     863           0 :     css::uno::Reference< css::beans::XPropertySet > xPropSet(m_xFrame, css::uno::UNO_QUERY);
     864           0 :     if (xPropSet.is())
     865             :     {
     866           0 :         css::uno::Reference< css::frame::XLayoutManager > xLayoutManager;
     867           0 :         css::uno::Any aValue = xPropSet->getPropertyValue("LayoutManager");
     868           0 :         aValue >>= xLayoutManager;
     869           0 :         if (xLayoutManager.is())
     870             :         {
     871           0 :             const OUString sResourceURL( "private:resource/toolbar/findbar" );
     872           0 :             xLayoutManager->hideElement( sResourceURL );
     873           0 :             xLayoutManager->destroyElement( sResourceURL );
     874           0 :         }
     875           0 :     }
     876           0 : }
     877             : 
     878             : // XStatusListener
     879           0 : void SAL_CALL ExitSearchToolboxController::statusChanged( const css::frame::FeatureStateEvent& /*rEvent*/ ) throw ( css::uno::RuntimeException, std::exception )
     880             : {
     881           0 : }
     882             : 
     883             : 
     884             : // class SearchLabelToolboxController
     885             : 
     886           0 : SearchLabelToolboxController::SearchLabelToolboxController( const css::uno::Reference< css::uno::XComponentContext > & rxContext )
     887             :     : svt::ToolboxController( rxContext,
     888             :             css::uno::Reference< css::frame::XFrame >(),
     889           0 :             OUString( ".uno:SearchLabel" ) )
     890             : {
     891           0 : }
     892             : 
     893           0 : SearchLabelToolboxController::~SearchLabelToolboxController()
     894             : {
     895           0 : }
     896             : 
     897             : // XInterface
     898           0 : css::uno::Any SAL_CALL SearchLabelToolboxController::queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException, std::exception )
     899             : {
     900           0 :     css::uno::Any a = ToolboxController::queryInterface( aType );
     901           0 :     if ( a.hasValue() )
     902           0 :         return a;
     903             : 
     904           0 :     return ::cppu::queryInterface( aType, static_cast< css::lang::XServiceInfo* >( this ) );
     905             : }
     906             : 
     907           0 : void SAL_CALL SearchLabelToolboxController::acquire() throw ()
     908             : {
     909           0 :     ToolboxController::acquire();
     910           0 : }
     911             : 
     912           0 : void SAL_CALL SearchLabelToolboxController::release() throw ()
     913             : {
     914           0 :     ToolboxController::release();
     915           0 : }
     916             : 
     917             : // XServiceInfo
     918           0 : OUString SAL_CALL SearchLabelToolboxController::getImplementationName() throw( css::uno::RuntimeException, std::exception )
     919             : {
     920           0 :     return OUString( "com.sun.star.svx.SearchLabelToolboxController" );
     921             : }
     922             : 
     923             : 
     924           0 : sal_Bool SAL_CALL SearchLabelToolboxController::supportsService( const OUString& ServiceName ) throw( css::uno::RuntimeException, std::exception )
     925             : {
     926           0 :     return cppu::supportsService(this, ServiceName);
     927             : }
     928             : 
     929           0 : css::uno::Sequence< OUString > SAL_CALL SearchLabelToolboxController::getSupportedServiceNames() throw( css::uno::RuntimeException, std::exception )
     930             : {
     931           0 :     css::uno::Sequence< OUString > aSNS( 1 );
     932           0 :     aSNS[0] = "com.sun.star.frame.ToolbarController";
     933           0 :     return aSNS;
     934             : }
     935             : 
     936             : // XComponent
     937           0 : void SAL_CALL SearchLabelToolboxController::dispose() throw ( css::uno::RuntimeException, std::exception )
     938             : {
     939           0 :     SolarMutexGuard aSolarMutexGuard;
     940             : 
     941           0 :     SearchToolbarControllersManager::createControllersManager().freeController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
     942             : 
     943           0 :     svt::ToolboxController::dispose();
     944           0 : }
     945             : 
     946             : // XInitialization
     947           0 : void SAL_CALL SearchLabelToolboxController::initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException, std::exception )
     948             : {
     949           0 :     svt::ToolboxController::initialize( aArguments );
     950           0 :     SearchToolbarControllersManager::createControllersManager().registryController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
     951           0 : }
     952             : 
     953             : // XStatusListener
     954           0 : void SAL_CALL SearchLabelToolboxController::statusChanged( const css::frame::FeatureStateEvent& ) throw ( css::uno::RuntimeException, std::exception )
     955             : {
     956           0 : }
     957             : 
     958           0 : css::uno::Reference< css::awt::XWindow > SAL_CALL SearchLabelToolboxController::createItemWindow( const css::uno::Reference< css::awt::XWindow >& Parent ) throw ( css::uno::RuntimeException, std::exception )
     959             : {
     960           0 :     Window *pSL= new FixedText(VCLUnoHelper::GetWindow( Parent ));
     961           0 :     pSL->SetSizePixel(Size(250, 25));
     962           0 :     return VCLUnoHelper::GetInterface(pSL);
     963             : }
     964             : 
     965             : 
     966             : // class FindbarDispatcher
     967             : 
     968           0 : FindbarDispatcher::FindbarDispatcher()
     969             : {
     970           0 : }
     971             : 
     972           0 : FindbarDispatcher::~FindbarDispatcher()
     973             : {
     974           0 :     m_xFrame = NULL;
     975           0 : }
     976             : 
     977             : // XInterface
     978           0 : css::uno::Any SAL_CALL FindbarDispatcher::queryInterface( const css::uno::Type& aType ) throw( css::uno::RuntimeException, std::exception )
     979             : {
     980             :     css::uno::Any aReturn( ::cppu::queryInterface( aType,
     981             :         static_cast< css::lang::XServiceInfo* >(this),
     982             :         static_cast< css::lang::XInitialization* >(this),
     983             :         static_cast< css::frame::XDispatchProvider* >(this),
     984           0 :         static_cast< css::frame::XDispatch* >(this)) );
     985             : 
     986           0 :     if ( aReturn.hasValue() )
     987           0 :         return aReturn;
     988             : 
     989           0 :     return OWeakObject::queryInterface( aType );
     990             : }
     991             : 
     992           0 : void SAL_CALL FindbarDispatcher::acquire() throw()
     993             : {
     994           0 :     OWeakObject::acquire();
     995           0 : }
     996             : 
     997           0 : void SAL_CALL FindbarDispatcher::release() throw()
     998             : {
     999           0 :     OWeakObject::release();
    1000           0 : }
    1001             : 
    1002             : // XServiceInfo
    1003           0 : OUString SAL_CALL FindbarDispatcher::getImplementationName() throw( css::uno::RuntimeException, std::exception )
    1004             : {
    1005           0 :     return OUString("com.sun.star.comp.svx.Impl.FindbarDispatcher");
    1006             : }
    1007             : 
    1008           0 : sal_Bool SAL_CALL FindbarDispatcher::supportsService( const OUString& ServiceName ) throw( css::uno::RuntimeException, std::exception )
    1009             : {
    1010           0 :     return cppu::supportsService(this, ServiceName);
    1011             : }
    1012             : 
    1013           0 : css::uno::Sequence< OUString > SAL_CALL FindbarDispatcher::getSupportedServiceNames() throw( css::uno::RuntimeException, std::exception )
    1014             : {
    1015           0 :     css::uno::Sequence< OUString > aSNS( 2 );
    1016           0 :     aSNS[0] = "com.sun.star.comp.svx.FindbarDispatcher";
    1017           0 :     aSNS[1] = "com.sun.star.frame.ProtocolHandler";
    1018           0 :     return aSNS;
    1019             : }
    1020             : 
    1021             : // XInitialization
    1022           0 : void SAL_CALL FindbarDispatcher::initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException, std::exception )
    1023             : {
    1024           0 :     if ( aArguments.getLength() )
    1025           0 :         aArguments[0] >>= m_xFrame;
    1026           0 : }
    1027             : 
    1028             : // XDispatchProvider
    1029           0 : css::uno::Reference< css::frame::XDispatch > SAL_CALL FindbarDispatcher::queryDispatch( const css::util::URL& aURL, const OUString& /*sTargetFrameName*/, sal_Int32 /*nSearchFlags*/ ) throw( css::uno::RuntimeException, std::exception )
    1030             : {
    1031           0 :     css::uno::Reference< css::frame::XDispatch > xDispatch;
    1032             : 
    1033           0 :     if ( aURL.Protocol == "vnd.sun.star.findbar:" )
    1034           0 :         xDispatch = this;
    1035             : 
    1036           0 :     return xDispatch;
    1037             : }
    1038             : 
    1039           0 : css::uno::Sequence < css::uno::Reference< css::frame::XDispatch > > SAL_CALL FindbarDispatcher::queryDispatches( const css::uno::Sequence < css::frame::DispatchDescriptor >& seqDescripts ) throw( css::uno::RuntimeException, std::exception )
    1040             : {
    1041           0 :     sal_Int32 nCount = seqDescripts.getLength();
    1042           0 :     css::uno::Sequence < css::uno::Reference < XDispatch > > lDispatcher( nCount );
    1043             : 
    1044           0 :     for( sal_Int32 i=0; i<nCount; ++i )
    1045           0 :         lDispatcher[i] = queryDispatch( seqDescripts[i].FeatureURL, seqDescripts[i].FrameName, seqDescripts[i].SearchFlags );
    1046             : 
    1047           0 :     return lDispatcher;
    1048             : }
    1049             : 
    1050             : // XDispatch
    1051           0 : void SAL_CALL FindbarDispatcher::dispatch( const css::util::URL& aURL, const css::uno::Sequence < css::beans::PropertyValue >& /*lArgs*/ ) throw( css::uno::RuntimeException, std::exception )
    1052             : {
    1053             :     //vnd.sun.star.findbar:FocusToFindbar  - set cursor to the FindTextFieldControl of the findbar
    1054           0 :     if ( aURL.Path == "FocusToFindbar" )
    1055             :     {
    1056           0 :         css::uno::Reference< css::beans::XPropertySet > xPropSet(m_xFrame, css::uno::UNO_QUERY);
    1057           0 :         if(!xPropSet.is())
    1058           0 :             return;
    1059             : 
    1060           0 :         css::uno::Reference< css::frame::XLayoutManager > xLayoutManager;
    1061           0 :         css::uno::Any aValue = xPropSet->getPropertyValue("LayoutManager");
    1062           0 :         aValue >>= xLayoutManager;
    1063           0 :         if (!xLayoutManager.is())
    1064           0 :             return;
    1065             : 
    1066           0 :         const OUString sResourceURL( "private:resource/toolbar/findbar" );
    1067           0 :         css::uno::Reference< css::ui::XUIElement > xUIElement = xLayoutManager->getElement(sResourceURL);
    1068           0 :         if (!xUIElement.is())
    1069             :         {
    1070             :             // show the findbar if necessary
    1071           0 :             xLayoutManager->createElement( sResourceURL );
    1072           0 :             xLayoutManager->showElement( sResourceURL );
    1073           0 :             xUIElement = xLayoutManager->getElement( sResourceURL );
    1074           0 :             if ( !xUIElement.is() )
    1075           0 :                 return;
    1076             :         }
    1077             : 
    1078           0 :         css::uno::Reference< css::awt::XWindow > xWindow(xUIElement->getRealInterface(), css::uno::UNO_QUERY);
    1079           0 :         Window* pWindow = VCLUnoHelper::GetWindow( xWindow );
    1080           0 :         ToolBox* pToolBox = (ToolBox*)pWindow;
    1081           0 :         if ( pToolBox )
    1082             :         {
    1083           0 :             sal_uInt16 nItemCount = pToolBox->GetItemCount();
    1084           0 :             for ( sal_uInt16 i=0; i<nItemCount; ++i )
    1085             :             {
    1086           0 :                 OUString sItemCommand = pToolBox->GetItemCommand(i);
    1087           0 :                 if ( sItemCommand == COMMAND_FINDTEXT )
    1088             :                 {
    1089           0 :                     Window* pItemWin = pToolBox->GetItemWindow( i );
    1090           0 :                     if ( pItemWin )
    1091             :                     {
    1092           0 :                         FindTextFieldControl* pFindTextFieldControl = dynamic_cast<FindTextFieldControl*>(pItemWin);
    1093           0 :                         if ( pFindTextFieldControl )
    1094           0 :                             pFindTextFieldControl->SetTextToSelected_Impl();
    1095           0 :                         SolarMutexGuard aSolarMutexGuard;
    1096           0 :                         pItemWin->GrabFocus();
    1097           0 :                         return;
    1098             :                     }
    1099             :                 }
    1100           0 :             }
    1101           0 :         }
    1102             :     }
    1103             : }
    1104             : 
    1105           0 : void SAL_CALL FindbarDispatcher::addStatusListener( const css::uno::Reference< css::frame::XStatusListener >& /*xControl*/, const css::util::URL& /*aURL*/ ) throw ( css::uno::RuntimeException, std::exception )
    1106             : {
    1107           0 : }
    1108             : 
    1109           0 : void SAL_CALL FindbarDispatcher::removeStatusListener( const css::uno::Reference< css::frame::XStatusListener >& /*xControl*/, const css::util::URL& /*aURL*/ ) throw ( css::uno::RuntimeException, std::exception )
    1110             : {
    1111           0 : }
    1112             : 
    1113             : }
    1114             : 
    1115             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1116           0 : com_sun_star_svx_FindTextToolboxController_get_implementation(
    1117             :     css::uno::XComponentContext *context,
    1118             :     css::uno::Sequence<css::uno::Any> const &)
    1119             : {
    1120           0 :     return cppu::acquire(new FindTextToolbarController(context));
    1121             : }
    1122             : 
    1123             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1124           0 : com_sun_star_svx_ExitFindbarToolboxController_get_implementation(
    1125             :     css::uno::XComponentContext *context,
    1126             :     css::uno::Sequence<css::uno::Any> const &)
    1127             : {
    1128           0 :     return cppu::acquire(new ExitSearchToolboxController(context));
    1129             : }
    1130             : 
    1131             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1132           0 : com_sun_star_svx_UpSearchToolboxController_get_implementation(
    1133             :     css::uno::XComponentContext *context,
    1134             :     css::uno::Sequence<css::uno::Any> const &)
    1135             : {
    1136           0 :     return cppu::acquire(new UpDownSearchToolboxController(context, UpDownSearchToolboxController::UP));
    1137             : }
    1138             : 
    1139             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1140           0 : com_sun_star_svx_DownSearchToolboxController_get_implementation(
    1141             :     css::uno::XComponentContext *context,
    1142             :     css::uno::Sequence<css::uno::Any> const &)
    1143             : {
    1144           0 :     return cppu::acquire(new UpDownSearchToolboxController(context, UpDownSearchToolboxController::DOWN));
    1145             : }
    1146             : 
    1147             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1148           0 : com_sun_star_svx_MatchCaseToolboxController_get_implementation(
    1149             :     css::uno::XComponentContext *context,
    1150             :     css::uno::Sequence<css::uno::Any> const &)
    1151             : {
    1152           0 :     return cppu::acquire(new MatchCaseToolboxController(context));
    1153             : }
    1154             : 
    1155             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1156           0 : com_sun_star_svx_FindAllToolboxController_get_implementation(
    1157             :     css::uno::XComponentContext *context,
    1158             :     css::uno::Sequence<css::uno::Any> const &)
    1159             : {
    1160           0 :     return cppu::acquire(new FindAllToolboxController(context));
    1161             : }
    1162             : 
    1163             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1164           0 : com_sun_star_svx_SearchLabelToolboxController_get_implementation(
    1165             :     css::uno::XComponentContext *context,
    1166             :     css::uno::Sequence<css::uno::Any> const &)
    1167             : {
    1168           0 :     return cppu::acquire(new SearchLabelToolboxController(context));
    1169             : }
    1170             : 
    1171             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1172           0 : com_sun_star_comp_svx_Impl_FindbarDispatcher_get_implementation(
    1173             :     SAL_UNUSED_PARAMETER css::uno::XComponentContext *,
    1174             :     css::uno::Sequence<css::uno::Any> const &)
    1175             : {
    1176           0 :     return cppu::acquire(new FindbarDispatcher);
    1177             : }
    1178             : 
    1179             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10