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

Generated by: LCOV version 1.11