Kaydet (Commit) 8a429819 authored tarafından Wu Yan's avatar Wu Yan

findbar01: enhancements for findbar

üst 515792c3
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#ifndef __TBUNOSEARCHCONTROLLERS_HXX_
#define __TBUNOSEARCHCONTROLLERS_HXX_
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/frame/DispatchDescriptor.hpp>
#include <com/sun/star/frame/XDispatch.hpp>
#include <com/sun/star/frame/XDispatchHelper.hpp>
#include <com/sun/star/frame/XDispatchProvider.hpp>
#include <com/sun/star/frame/XStatusListener.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/lang/XInitialization.hpp>
#include <comphelper/sequenceasvector.hxx>
#include <cppuhelper/implbase1.hxx>
#include <cppuhelper/weak.hxx>
#include <svtools/toolboxcontroller.hxx>
#include <vcl/window.hxx>
#include <map>
namespace css = ::com::sun::star ;
namespace svx
{
class FindTextFieldControl;
struct ExecuteInfo
{
css::uno::Reference< css::frame::XDispatch > xDispatch;
css::util::URL aTargetURL;
css::uno::Sequence< css::beans::PropertyValue > aArgs;
};
class SearchToolbarControllersManager
{
public:
SearchToolbarControllersManager();
~SearchToolbarControllersManager();
static SearchToolbarControllersManager* createControllersManager();
void registryController( const css::uno::Reference< css::frame::XFrame >& xFrame, const css::uno::Reference< css::frame::XStatusListener >& xStatusListener, const ::rtl::OUString& sCommandURL );
void freeController ( const css::uno::Reference< css::frame::XFrame >& xFrame, const css::uno::Reference< css::frame::XStatusListener >& xStatusListener, const ::rtl::OUString& sCommandURL );
css::uno::Reference< css::frame::XStatusListener > findController( const css::uno::Reference< css::frame::XFrame >& xFrame, const ::rtl::OUString& sCommandURL );
private:
static SearchToolbarControllersManager* m_pInstance;
typedef ::comphelper::SequenceAsVector< css::beans::PropertyValue > SearchToolbarControllersVec;
typedef ::std::map< css::uno::Reference< css::frame::XFrame >, SearchToolbarControllersVec > SearchToolbarControllersMap;
SearchToolbarControllersMap aSearchToolbarControllersMap;
};
class FindTextToolbarController : public svt::ToolboxController,
public css::lang::XServiceInfo
{
public:
FindTextToolbarController( const css::uno::Reference< css::lang::XMultiServiceFactory > & rServiceManager );
~FindTextToolbarController();
// XInterface
virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException );
virtual void SAL_CALL acquire() throw ();
virtual void SAL_CALL release() throw ();
// XServiceInfo
virtual ::rtl::OUString SAL_CALL getImplementationName() throw( css::uno::RuntimeException );
virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw( css::uno::RuntimeException );
virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( css::uno::RuntimeException );
static ::rtl::OUString getImplementationName_Static() throw()
{
return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.svx.FindTextToolboxController" ));
}
static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static() throw();
// XComponent
virtual void SAL_CALL dispose() throw ( css::uno::RuntimeException );
// XInitialization
virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException );
// XToolbarController
virtual void SAL_CALL execute( sal_Int16 KeyModifier ) throw ( css::uno::RuntimeException);
virtual css::uno::Reference< css::awt::XWindow > SAL_CALL createItemWindow( const css::uno::Reference< css::awt::XWindow >& Parent ) throw ( css::uno::RuntimeException );
// XStatusListener
virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& Event ) throw ( css::uno::RuntimeException );
sal_Int32 getFontSizePixel( const Window* pWindow );
DECL_STATIC_LINK( FindTextToolbarController, ExecuteHdl_Impl, ExecuteInfo* );
DECL_LINK(EditModifyHdl, void*);
private:
css::uno::Reference< css::util::XURLTransformer > m_xURLTransformer;
FindTextFieldControl* m_pFindTextFieldControl;
USHORT m_nDownSearchId; // item position of findbar
USHORT m_nUpSearchId; // item position of findbar
};
class DownSearchToolboxController : public svt::ToolboxController,
public css::lang::XServiceInfo
{
public:
DownSearchToolboxController( const css::uno::Reference< css::lang::XMultiServiceFactory > & rServiceManager );
~DownSearchToolboxController();
// XInterface
virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException );
virtual void SAL_CALL acquire() throw ();
virtual void SAL_CALL release() throw ();
// XServiceInfo
virtual ::rtl::OUString SAL_CALL getImplementationName() throw( css::uno::RuntimeException );
virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw( css::uno::RuntimeException );
virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( css::uno::RuntimeException );
static ::rtl::OUString getImplementationName_Static() throw()
{
return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.svx.DownSearchToolboxController" ));
}
static css::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static() throw();
// XComponent
virtual void SAL_CALL dispose() throw ( css::uno::RuntimeException );
// XInitialization
virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException );
// XToolbarController
virtual void SAL_CALL execute( sal_Int16 KeyModifier ) throw ( css::uno::RuntimeException);
// XStatusListener
virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& rEvent ) throw ( css::uno::RuntimeException );
DECL_STATIC_LINK( DownSearchToolboxController, ExecuteHdl_Impl, ExecuteInfo* );
private :
css::uno::Reference< css::util::XURLTransformer > m_xURLTransformer;
};
class UpSearchToolboxController : public svt::ToolboxController,
public css::lang::XServiceInfo
{
public:
UpSearchToolboxController( const css::uno::Reference< css::lang::XMultiServiceFactory >& rServiceManager );
~UpSearchToolboxController();
// XInterface
virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException );
virtual void SAL_CALL acquire() throw ();
virtual void SAL_CALL release() throw ();
// XServiceInfo
virtual ::rtl::OUString SAL_CALL getImplementationName() throw( css::uno::RuntimeException );
virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw( css::uno::RuntimeException );
virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( css::uno::RuntimeException );
static ::rtl::OUString getImplementationName_Static() throw()
{
return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.svx.UpSearchToolboxController" ));
}
static css::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static() throw();
// XComponent
virtual void SAL_CALL dispose() throw ( css::uno::RuntimeException );
// XInitialization
virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException);
// XToolbarController
virtual void SAL_CALL execute( sal_Int16 KeyModifier ) throw ( css::uno::RuntimeException );
// XStatusListener
virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& rEvent ) throw ( css::uno::RuntimeException );
DECL_STATIC_LINK( UpSearchToolboxController, ExecuteHdl_Impl, ExecuteInfo* );
private :
css::uno::Reference< css::util::XURLTransformer > m_xURLTransformer;
};
// protocol handler for "vnd.sun.star.findbar:*" URLs
// The dispatch object will be used for shortcut commands for findbar
class FindbarDispatcher : public css::lang::XServiceInfo,
public css::lang::XInitialization,
public css::frame::XDispatchProvider,
public css::frame::XDispatch,
public ::cppu::OWeakObject
{
public:
FindbarDispatcher( const css::uno::Reference< css::lang::XMultiServiceFactory >& xFactory );
virtual ~FindbarDispatcher();
// XInterface
virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException );
virtual void SAL_CALL acquire() throw();
virtual void SAL_CALL release() throw();
// XServiceInfo
virtual ::rtl::OUString SAL_CALL getImplementationName() throw( css::uno::RuntimeException );
virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw( css::uno::RuntimeException );
virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( css::uno::RuntimeException );
static ::rtl::OUString getImplementationName_Static() throw()
{
return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.svx.Impl.FindbarDispatcher" ));
}
static css::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static() throw();
// XInitialization
virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException );
// XDispatchProvider
virtual css::uno::Reference< css::frame::XDispatch > SAL_CALL queryDispatch( const css::util::URL& aURL, const ::rtl::OUString& sTargetFrameName , sal_Int32 nSearchFlags ) throw( css::uno::RuntimeException );
virtual css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > SAL_CALL queryDispatches( const css::uno::Sequence< css::frame::DispatchDescriptor >& lDescriptions ) throw( css::uno::RuntimeException );
// XDispatch
virtual void SAL_CALL dispatch( const css::util::URL& aURL, const css::uno::Sequence< css::beans::PropertyValue >& lArguments ) throw( css::uno::RuntimeException );
virtual void SAL_CALL addStatusListener( const css::uno::Reference< css::frame::XStatusListener >& xListener, const css::util::URL& aURL ) throw( css::uno::RuntimeException );
virtual void SAL_CALL removeStatusListener( const css::uno::Reference< css::frame::XStatusListener >& xListener, const css::util::URL& aURL ) throw( css::uno::RuntimeException );
private:
css::uno::Reference< css::lang::XMultiServiceFactory > m_xFactory;
css::uno::Reference< css::frame::XFrame > m_xFrame;
};
// createInstance
css::uno::Reference< css::uno::XInterface > SAL_CALL FindTextToolbarController_createInstance( const css::uno::Reference< css::lang::XMultiServiceFactory >& rSMgr );
css::uno::Reference< css::uno::XInterface > SAL_CALL DownSearchToolboxController_createInstance( const css::uno::Reference< css::lang::XMultiServiceFactory >& rSMgr );
css::uno::Reference< css::uno::XInterface > SAL_CALL UpSearchToolboxController_createInstance( const css::uno::Reference< css::lang::XMultiServiceFactory >& rSMgr );
css::uno::Reference< css::uno::XInterface > SAL_CALL FindbarDispatcher_createInstance( const css::uno::Reference< css::lang::XMultiServiceFactory >& rSMgr );
}
#endif // __TBUNOSEARCHCONTROLLERS_HXX_
......@@ -62,7 +62,8 @@ LIB2OBJFILES= \
$(SLO)$/verttexttbxctrl.obj \
$(SLO)$/subtoolboxcontrol.obj \
$(SLO)$/tbxcolor.obj \
$(SLO)$/tbunocontroller.obj
$(SLO)$/tbunocontroller.obj \
$(SLO)$/tbunosearchcontrollers.obj
SLOFILES = $(LIB1OBJFILES) $(LIB2OBJFILES)
......
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
#include "tbunosearchcontrollers.hxx"
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/frame/XLayoutManager.hpp>
#include <com/sun/star/ui/XUIElement.hpp>
#include <com/sun/star/util/URL.hpp>
#include <toolkit/helper/vclunohelper.hxx>
#include <vcl/combobox.hxx>
#include <vcl/toolbox.hxx>
#include <vcl/svapp.hxx>
#include <vos/mutex.hxx>
namespace svx
{
static const ::rtl::OUString SEARCHITEM_SEARCHSTRING = ::rtl::OUString::createFromAscii("SearchItem.SearchString");
static const ::rtl::OUString SEARCHITEM_SEARCHBACKWARD = ::rtl::OUString::createFromAscii("SearchItem.Backward");
static const ::rtl::OUString COMMAND_FINDTEXT = ::rtl::OUString::createFromAscii(".uno:FindText") ;
static const ::rtl::OUString COMMAND_DOWNSEARCH = ::rtl::OUString::createFromAscii(".uno:DownSearch");
static const ::rtl::OUString COMMAND_UPSEARCH = ::rtl::OUString::createFromAscii(".uno:UpSearch") ;
static const ::rtl::OUString COMMAND_APPENDSEARCHHISTORY = ::rtl::OUString::createFromAscii("AppendSearchHistory") ;
class FindTextFieldControl : public ComboBox
{
public:
FindTextFieldControl( Window* pParent, WinBits nStyle,
css::uno::Reference< css::frame::XFrame >& xFrame,
css::uno::Reference< css::lang::XMultiServiceFactory >& xServiceManager );
virtual ~FindTextFieldControl();
virtual void Modify();
virtual long PreNotify( NotifyEvent& rNEvt );
void InitControls_Impl();
void Remember_Impl(const String& rStr);
private:
css::uno::Reference< css::frame::XFrame > m_xFrame;
css::uno::Reference < css::util::XURLTransformer > m_xURLTransformer;
css::uno::Reference< css::lang::XMultiServiceFactory > m_xServiceManager;
sal_Bool m_bToClearTextField;
};
FindTextFieldControl::FindTextFieldControl( Window* pParent, WinBits nStyle,
css::uno::Reference< css::frame::XFrame >& xFrame,
css::uno::Reference< css::lang::XMultiServiceFactory >& xServiceManager) :
ComboBox( pParent, nStyle ),
m_xFrame(xFrame),
m_xServiceManager(xServiceManager),
m_bToClearTextField(sal_True)
{
m_xURLTransformer = css::uno::Reference< css::util::XURLTransformer >( m_xServiceManager->createInstance(
rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.util.URLTransformer" ))),
css::uno::UNO_QUERY_THROW );
InitControls_Impl();
}
FindTextFieldControl::~FindTextFieldControl()
{
}
void FindTextFieldControl::InitControls_Impl()
{
SetText( String( ::rtl::OUString::createFromAscii("Find") ) );
SetControlForeground(COL_GRAY);
EnableAutocomplete(TRUE, TRUE);
}
void FindTextFieldControl::Remember_Impl(const String& rStr)
{
USHORT nCount = GetEntryCount();
for (USHORT i=0; i<nCount; ++i)
{
if ( rStr == GetEntry(i))
return;
}
InsertEntry(rStr, 0);
}
void FindTextFieldControl::Modify()
{
ComboBox::Modify();
SetControlForeground( Color( COL_BLACK ) );
}
long FindTextFieldControl::PreNotify( NotifyEvent& rNEvt )
{
long nRet= ComboBox::PreNotify( rNEvt );
switch ( rNEvt.GetType())
{
case EVENT_KEYINPUT:
{
const KeyEvent* pKeyEvent = rNEvt.GetKeyEvent();
sal_uInt16 nCode = pKeyEvent->GetKeyCode().GetCode();
sal_Bool bCtrl = pKeyEvent->GetKeyCode().IsMod1();
if (bCtrl && KEY_G== nCode)
GrabFocusToDocument();
if (KEY_RETURN == nCode)
{
vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() );
Remember_Impl(GetText());
css::uno::Reference< css::frame::XDispatch > xDispatch;
css::util::URL aTargetURL;
if ( m_xURLTransformer.is() )
{
aTargetURL.Complete = ::rtl::OUString::createFromAscii(".uno:ExecuteSearch");
m_xURLTransformer->parseStrict( aTargetURL );
css::uno::Reference< css::frame::XDispatchProvider > xDispatchProvider( m_xFrame, css::uno::UNO_QUERY);
if ( xDispatchProvider.is() )
xDispatch = xDispatchProvider->queryDispatch( aTargetURL, rtl::OUString(), 0 );
}
if ( xDispatch.is() && aTargetURL.Complete.getLength() > 0 )
{
::rtl::OUString sFindText = GetText();
css::uno::Sequence< css::beans::PropertyValue > aArgs( 2 );
aArgs[0].Name = SEARCHITEM_SEARCHSTRING;
aArgs[0].Value <<= sFindText;
aArgs[1].Name = SEARCHITEM_SEARCHBACKWARD;
aArgs[1].Value <<= sal_False;
// Execute dispatch asynchronously
ExecuteInfo* pExecuteInfo = new ExecuteInfo;
pExecuteInfo->xDispatch = xDispatch;
pExecuteInfo->aTargetURL = aTargetURL;
pExecuteInfo->aArgs = aArgs;
Application::PostUserEvent( STATIC_LINK(0, DownSearchToolboxController , ExecuteHdl_Impl), pExecuteInfo );
}
}
break;
}
case EVENT_GETFOCUS:
if ( m_bToClearTextField )
{
SetText( String() );
m_bToClearTextField = sal_False;
}
break;
case EVENT_LOSEFOCUS:
if ( GetText().Len() == 0 )
{
SetText( String( ::rtl::OUString::createFromAscii("Find") ) );
SetControlForeground(COL_GRAY);
m_bToClearTextField = sal_True;
}
break;
}
return nRet;
}
//-----------------------------------------------------------------------------------------------------------
// SearchToolbarControllersManager
SearchToolbarControllersManager* SearchToolbarControllersManager::m_pInstance = 0;
SearchToolbarControllersManager::SearchToolbarControllersManager()
{
}
SearchToolbarControllersManager::~SearchToolbarControllersManager()
{
}
SearchToolbarControllersManager* SearchToolbarControllersManager::createControllersManager()
{
if (!m_pInstance)
m_pInstance = new SearchToolbarControllersManager();
return m_pInstance;
}
void SearchToolbarControllersManager::registryController( const css::uno::Reference< css::frame::XFrame >& xFrame, const css::uno::Reference< css::frame::XStatusListener >& xStatusListener, const ::rtl::OUString& sCommandURL )
{
SearchToolbarControllersMap::iterator pIt = aSearchToolbarControllersMap.find(xFrame);
if (pIt == aSearchToolbarControllersMap.end())
{
SearchToolbarControllersVec lControllers(1);
lControllers[0].Name = sCommandURL;
lControllers[0].Value <<= xStatusListener;
aSearchToolbarControllersMap.insert(SearchToolbarControllersMap::value_type(xFrame, lControllers));
}
else
{
sal_Int32 nSize = pIt->second.size();
for (sal_Int32 i=0; i<nSize; ++i)
{
if (pIt->second[i].Name.equals(sCommandURL))
return;
}
pIt->second.resize(nSize+1);
pIt->second[nSize].Name = sCommandURL;
pIt->second[nSize].Value <<= xStatusListener;
}
}
void SearchToolbarControllersManager::freeController( const css::uno::Reference< css::frame::XFrame >& xFrame, const css::uno::Reference< css::frame::XStatusListener >& xStatusListener, const ::rtl::OUString& sCommandURL )
{
SearchToolbarControllersMap::iterator pIt = aSearchToolbarControllersMap.find(xFrame);
if (pIt != aSearchToolbarControllersMap.end())
{
for (SearchToolbarControllersVec::iterator pItCtrl=pIt->second.begin(); pItCtrl!=pIt->second.end(); ++pItCtrl)
{
if (pItCtrl->Name.equals(sCommandURL))
{
pIt->second.erase(pItCtrl);
break;
}
}
if (pIt->second.empty())
aSearchToolbarControllersMap.erase(pIt);
}
}
css::uno::Reference< css::frame::XStatusListener > SearchToolbarControllersManager::findController( const css::uno::Reference< css::frame::XFrame >& xFrame, const ::rtl::OUString& sCommandURL )
{
css::uno::Reference< css::frame::XStatusListener > xStatusListener;
SearchToolbarControllersMap::iterator pIt = aSearchToolbarControllersMap.find(xFrame);
if (pIt != aSearchToolbarControllersMap.end())
{
for (SearchToolbarControllersVec::iterator pItCtrl =pIt->second.begin(); pItCtrl != pIt->second.end(); ++pItCtrl)
{
if (pItCtrl->Name.equals(sCommandURL))
{
pItCtrl->Value >>= xStatusListener;
break;
}
}
}
return xStatusListener;
}
//-----------------------------------------------------------------------------------------------------------
// FindTextToolbarController
FindTextToolbarController::FindTextToolbarController( const css::uno::Reference< css::lang::XMultiServiceFactory >& rServiceManager )
:svt::ToolboxController( rServiceManager,
css::uno::Reference< css::frame::XFrame >(),
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FindText" )) )
{
m_xURLTransformer = css::uno::Reference< css::util::XURLTransformer >( m_xServiceManager->createInstance(
rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.util.URLTransformer" ))),
css::uno::UNO_QUERY_THROW );
}
FindTextToolbarController::~FindTextToolbarController()
{
}
// XInterface
css::uno::Any SAL_CALL FindTextToolbarController::queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException )
{
css::uno::Any a = ToolboxController::queryInterface( aType );
if ( a.hasValue() )
return a;
return ::cppu::queryInterface( aType, static_cast< css::lang::XServiceInfo* >( this ) );
}
void SAL_CALL FindTextToolbarController::acquire() throw ()
{
ToolboxController::acquire();
}
void SAL_CALL FindTextToolbarController::release() throw ()
{
ToolboxController::release();
}
// XServiceInfo
::rtl::OUString SAL_CALL FindTextToolbarController::getImplementationName() throw( css::uno::RuntimeException )
{
return getImplementationName_Static();
}
sal_Bool SAL_CALL FindTextToolbarController::supportsService( const ::rtl::OUString& ServiceName ) throw( css::uno::RuntimeException )
{
const css::uno::Sequence< ::rtl::OUString > aSNL( getSupportedServiceNames() );
const ::rtl::OUString * pArray = aSNL.getConstArray();
for( sal_Int32 i = 0; i < aSNL.getLength(); i++ )
if( pArray[i] == ServiceName )
return true;
return false;
}
css::uno::Sequence< ::rtl::OUString > SAL_CALL FindTextToolbarController::getSupportedServiceNames() throw( css::uno::RuntimeException )
{
return getSupportedServiceNames_Static();
}
css::uno::Sequence< ::rtl::OUString > FindTextToolbarController::getSupportedServiceNames_Static() throw()
{
css::uno::Sequence< ::rtl::OUString > aSNS( 1 );
aSNS.getArray()[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.ToolbarController" ) );
return aSNS;
}
// XComponent
void SAL_CALL FindTextToolbarController::dispose() throw ( css::uno::RuntimeException )
{
vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() );
SearchToolbarControllersManager::createControllersManager()->freeController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
svt::ToolboxController::dispose();
delete m_pFindTextFieldControl;
m_pFindTextFieldControl = 0;
}
// XInitialization
void SAL_CALL FindTextToolbarController::initialize( const css::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException)
{
svt::ToolboxController::initialize(aArguments);
Window* pWindow = VCLUnoHelper::GetWindow( getParent() );
ToolBox* pToolBox = (ToolBox*)pWindow;
if ( pToolBox )
{
USHORT nItemCount = pToolBox->GetItemCount();
for ( USHORT i=0; i<nItemCount; ++i )
{
::rtl::OUString sItemCommand = pToolBox->GetItemCommand(i);
if ( sItemCommand.equals( COMMAND_DOWNSEARCH ) )
m_nDownSearchId = i;
else if (sItemCommand.equals( COMMAND_UPSEARCH ))
m_nUpSearchId = i;
}
}
SearchToolbarControllersManager::createControllersManager()->registryController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
}
// XToolbarController
void SAL_CALL FindTextToolbarController::execute( sal_Int16 /*KeyModifier*/ ) throw ( css::uno::RuntimeException )
{
}
css::uno::Reference< css::awt::XWindow > SAL_CALL FindTextToolbarController::createItemWindow( const css::uno::Reference< css::awt::XWindow >& Parent ) throw ( css::uno::RuntimeException )
{
css::uno::Reference< css::awt::XWindow > xItemWindow;
css::uno::Reference< css::awt::XWindow > xParent( Parent );
Window* pParent = VCLUnoHelper::GetWindow( xParent );
if ( pParent )
{
ToolBox* pToolbar = ( ToolBox* )pParent;
m_pFindTextFieldControl = new FindTextFieldControl( pToolbar, WinBits( WB_DROPDOWN | WB_VSCROLL), m_xFrame, m_xServiceManager );
// Calculate height of the edit field according to the application font height
sal_Int32 nHeight = getFontSizePixel( m_pFindTextFieldControl );
nHeight += 200;
m_pFindTextFieldControl->SetSizePixel( Size( 100, nHeight ));
m_pFindTextFieldControl->SetModifyHdl(LINK(this, FindTextToolbarController, EditModifyHdl));
}
xItemWindow = VCLUnoHelper::GetInterface( m_pFindTextFieldControl );
return xItemWindow;
}
// XStatusListener
void SAL_CALL FindTextToolbarController::statusChanged( const css::frame::FeatureStateEvent& rEvent ) throw ( css::uno::RuntimeException )
{
vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() );
if ( m_bDisposed )
return;
::rtl::OUString aFeatureURL = rEvent.FeatureURL.Complete;
if (aFeatureURL.equalsAscii("AppendSearchHistory"))
{
m_pFindTextFieldControl->Remember_Impl(m_pFindTextFieldControl->GetText());
}
}
sal_Int32 FindTextToolbarController::getFontSizePixel( const Window* pWindow )
{
const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings();
const Font& rFont = rSettings.GetAppFont();
// Calculate height of the application font used by window
sal_Int32 nHeight = sal_Int32( rFont.GetHeight() );
::Size aPixelSize = pWindow->LogicToPixel( ::Size( 0, nHeight ), MAP_APPFONT );
return aPixelSize.Height();
}
IMPL_STATIC_LINK_NOINSTANCE( FindTextToolbarController, ExecuteHdl_Impl, ExecuteInfo*, pExecuteInfo )
{
const sal_uInt32 nRef = Application::ReleaseSolarMutex();
try
{
// Asynchronous execution as this can lead to our own destruction!
// Framework can recycle our current frame and the layout manager disposes all user interface
// elements if a component gets detached from its frame!
pExecuteInfo->xDispatch->dispatch( pExecuteInfo->aTargetURL, pExecuteInfo->aArgs );
}
catch ( css::uno::Exception& )
{
}
Application::AcquireSolarMutex( nRef );
delete pExecuteInfo;
return 0;
}
IMPL_LINK( FindTextToolbarController, EditModifyHdl, void *, EMPTYARG )
{
// enable or disable item DownSearch/UpSearch of findbar
Window* pWindow = VCLUnoHelper::GetWindow( getParent() );
ToolBox* pToolBox = (ToolBox*)pWindow;
if ( pToolBox && m_pFindTextFieldControl )
{
if (m_pFindTextFieldControl->GetText().Len()>0)
{
if ( !pToolBox->IsItemEnabled(m_nDownSearchId) )
pToolBox->EnableItem(m_nDownSearchId, sal_True);
if ( !pToolBox->IsItemEnabled(m_nUpSearchId) )
pToolBox->EnableItem(m_nUpSearchId, sal_True);
}
else
{
if ( pToolBox->IsItemEnabled(m_nDownSearchId) )
pToolBox->EnableItem(m_nDownSearchId, sal_False);
if ( pToolBox->IsItemEnabled(m_nUpSearchId) )
pToolBox->EnableItem(m_nUpSearchId, sal_False);
}
}
return 0;
}
//-----------------------------------------------------------------------------------------------------------
// class DownSearchToolboxController
DownSearchToolboxController::DownSearchToolboxController(const css::uno::Reference< css::lang::XMultiServiceFactory >& rServiceManager )
: svt::ToolboxController( rServiceManager,
css::uno::Reference< css::frame::XFrame >(),
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:DownSearch" )) )
{
m_xURLTransformer = css::uno::Reference< css::util::XURLTransformer >( m_xServiceManager->createInstance(
rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.util.URLTransformer" ))),
css::uno::UNO_QUERY_THROW );
}
DownSearchToolboxController::~DownSearchToolboxController()
{
}
// XInterface
css::uno::Any SAL_CALL DownSearchToolboxController::queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException )
{
css::uno::Any a = ToolboxController::queryInterface( aType );
if ( a.hasValue() )
return a;
return ::cppu::queryInterface( aType, static_cast< css::lang::XServiceInfo* >( this ) );
}
void SAL_CALL DownSearchToolboxController::acquire() throw ()
{
ToolboxController::acquire();
}
void SAL_CALL DownSearchToolboxController::release() throw ()
{
ToolboxController::release();
}
// XServiceInfo
::rtl::OUString SAL_CALL DownSearchToolboxController::getImplementationName() throw( css::uno::RuntimeException )
{
return getImplementationName_Static();
}
sal_Bool SAL_CALL DownSearchToolboxController::supportsService( const ::rtl::OUString& ServiceName ) throw( css::uno::RuntimeException )
{
const css::uno::Sequence< ::rtl::OUString > aSNL( getSupportedServiceNames() );
const ::rtl::OUString * pArray = aSNL.getConstArray();
for( sal_Int32 i = 0; i < aSNL.getLength(); i++ )
if( pArray[i] == ServiceName )
return true;
return false;
}
css::uno::Sequence< ::rtl::OUString > SAL_CALL DownSearchToolboxController::getSupportedServiceNames() throw( css::uno::RuntimeException )
{
return getSupportedServiceNames_Static();
}
css::uno::Sequence< ::rtl::OUString > DownSearchToolboxController::getSupportedServiceNames_Static() throw()
{
css::uno::Sequence< ::rtl::OUString > aSNS( 1 );
aSNS.getArray()[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.ToolbarController" ));
return aSNS;
}
// XComponent
void SAL_CALL DownSearchToolboxController::dispose() throw ( css::uno::RuntimeException )
{
vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() );
SearchToolbarControllersManager::createControllersManager()->freeController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
svt::ToolboxController::dispose();
}
// XInitialization
void SAL_CALL DownSearchToolboxController::initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException )
{
svt::ToolboxController::initialize( aArguments );
SearchToolbarControllersManager::createControllersManager()->registryController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
}
// XToolbarController
void SAL_CALL DownSearchToolboxController::execute( sal_Int16 /*KeyModifier*/ ) throw ( css::uno::RuntimeException)
{
if ( m_bDisposed )
throw css::lang::DisposedException();
vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() );
css::uno::Reference< css::frame::XDispatch > xDispatch;
css::util::URL aTargetURL;
if ( m_xURLTransformer.is() )
{
aTargetURL.Complete = ::rtl::OUString::createFromAscii(".uno:ExecuteSearch");
m_xURLTransformer->parseStrict( aTargetURL );
css::uno::Reference< css::frame::XDispatchProvider > xDispatchProvider( m_xFrame, css::uno::UNO_QUERY);
if ( xDispatchProvider.is() )
xDispatch = xDispatchProvider->queryDispatch( aTargetURL, rtl::OUString(), 0 );
}
if ( xDispatch.is() && aTargetURL.Complete.getLength() > 0 )
{
::rtl::OUString sFindText;
Window* pWindow = VCLUnoHelper::GetWindow( getParent() );
ToolBox* pToolBox = (ToolBox*)pWindow;
if ( pToolBox )
{
USHORT nItemCount = pToolBox->GetItemCount();
for ( USHORT i=0; i<nItemCount; ++i )
{
::rtl::OUString sItemCommand = pToolBox->GetItemCommand(i);
if ( sItemCommand.equals( COMMAND_FINDTEXT ) )
{
Window* pItemWin = pToolBox->GetItemWindow(i);
if (pItemWin)
sFindText = pItemWin->GetText();
break;
}
}
}
css::uno::Sequence< css::beans::PropertyValue > aArgs( 2 );
aArgs[0].Name = SEARCHITEM_SEARCHSTRING;
aArgs[0].Value <<= sFindText;
aArgs[1].Name = SEARCHITEM_SEARCHBACKWARD;
aArgs[1].Value <<= sal_False;
// Execute dispatch asynchronously
ExecuteInfo* pExecuteInfo = new ExecuteInfo;
pExecuteInfo->xDispatch = xDispatch;
pExecuteInfo->aTargetURL = aTargetURL;
pExecuteInfo->aArgs = aArgs;
Application::PostUserEvent( STATIC_LINK(0, DownSearchToolboxController , ExecuteHdl_Impl), pExecuteInfo );
css::frame::FeatureStateEvent aEvent;
css::util::URL aCommand;
aCommand.Complete = COMMAND_APPENDSEARCHHISTORY;
aEvent.FeatureURL = aCommand;
aEvent.IsEnabled = sal_True;
css::uno::Reference< css::frame::XStatusListener > xStatusListener = SearchToolbarControllersManager::createControllersManager()->findController(m_xFrame, COMMAND_FINDTEXT);
xStatusListener->statusChanged( aEvent );
}
}
// XStatusListener
void SAL_CALL DownSearchToolboxController::statusChanged( const css::frame::FeatureStateEvent& /*rEvent*/ ) throw ( css::uno::RuntimeException )
{
}
IMPL_STATIC_LINK_NOINSTANCE( DownSearchToolboxController, ExecuteHdl_Impl, ExecuteInfo*, pExecuteInfo )
{
const sal_uInt32 nRef = Application::ReleaseSolarMutex();
try
{
// Asynchronous execution as this can lead to our own destruction!
// Framework can recycle our current frame and the layout manager disposes all user interface
// elements if a component gets detached from its frame!
pExecuteInfo->xDispatch->dispatch( pExecuteInfo->aTargetURL, pExecuteInfo->aArgs );
}
catch ( css::uno::Exception& )
{
}
Application::AcquireSolarMutex( nRef );
delete pExecuteInfo;
return 0;
}
//-----------------------------------------------------------------------------------------------------------
// class UpSearchToolboxController
UpSearchToolboxController::UpSearchToolboxController( const css::uno::Reference< css::lang::XMultiServiceFactory > & rServiceManager )
:svt::ToolboxController( rServiceManager,
css::uno::Reference< css::frame::XFrame >(),
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:UpSearch" )) )
{
m_xURLTransformer = css::uno::Reference< css::util::XURLTransformer >( m_xServiceManager->createInstance(
rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.util.URLTransformer" ))),
css::uno::UNO_QUERY_THROW );
}
UpSearchToolboxController::~UpSearchToolboxController()
{
}
// XInterface
css::uno::Any SAL_CALL UpSearchToolboxController::queryInterface( const css::uno::Type& aType ) throw ( css::uno::RuntimeException )
{
css::uno::Any a = ToolboxController::queryInterface( aType );
if ( a.hasValue() )
return a;
return ::cppu::queryInterface( aType, static_cast< css::lang::XServiceInfo* >( this ) );
}
void SAL_CALL UpSearchToolboxController::acquire() throw ()
{
ToolboxController::acquire();
}
void SAL_CALL UpSearchToolboxController::release() throw ()
{
ToolboxController::release();
}
// XServiceInfo
::rtl::OUString SAL_CALL UpSearchToolboxController::getImplementationName() throw( css::uno::RuntimeException )
{
return getImplementationName_Static();
}
sal_Bool SAL_CALL UpSearchToolboxController::supportsService( const ::rtl::OUString& ServiceName ) throw( css::uno::RuntimeException )
{
const css::uno::Sequence< ::rtl::OUString > aSNL( getSupportedServiceNames() );
const ::rtl::OUString * pArray = aSNL.getConstArray();
for( sal_Int32 i = 0; i < aSNL.getLength(); i++ )
if( pArray[i] == ServiceName )
return true;
return false;
}
css::uno::Sequence< ::rtl::OUString > SAL_CALL UpSearchToolboxController::getSupportedServiceNames() throw( css::uno::RuntimeException )
{
return getSupportedServiceNames_Static();
}
css::uno::Sequence< ::rtl::OUString > UpSearchToolboxController::getSupportedServiceNames_Static() throw()
{
css::uno::Sequence< ::rtl::OUString > aSNS( 1 );
aSNS.getArray()[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.ToolbarController" ) );
return aSNS;
}
// XComponent
void SAL_CALL UpSearchToolboxController::dispose() throw ( css::uno::RuntimeException )
{
vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() );
SearchToolbarControllersManager::createControllersManager()->freeController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
svt::ToolboxController::dispose();
}
// XInitialization
void SAL_CALL UpSearchToolboxController::initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException )
{
svt::ToolboxController::initialize( aArguments );
SearchToolbarControllersManager::createControllersManager()->registryController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY), m_aCommandURL);
}
// XToolbarController
void SAL_CALL UpSearchToolboxController::execute( sal_Int16 /*KeyModifier*/ ) throw ( css::uno::RuntimeException )
{
if ( m_bDisposed )
throw css::lang::DisposedException();
vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() );
css::uno::Reference< css::frame::XDispatch > xDispatch;
css::util::URL aTargetURL;
if ( m_xURLTransformer.is() )
{
aTargetURL.Complete = ::rtl::OUString::createFromAscii(".uno:ExecuteSearch");
m_xURLTransformer->parseStrict( aTargetURL );
css::uno::Reference< css::frame::XDispatchProvider > xDispatchProvider( m_xFrame, css::uno::UNO_QUERY);
if ( xDispatchProvider.is() )
xDispatch = xDispatchProvider->queryDispatch( aTargetURL, rtl::OUString(), 0 );
}
if ( xDispatch.is() && aTargetURL.Complete.getLength() > 0 )
{
::rtl::OUString sFindText;
Window* pWindow = VCLUnoHelper::GetWindow( getParent() );
ToolBox* pToolBox = (ToolBox*)pWindow;
if ( pToolBox )
{
USHORT nItemCount = pToolBox->GetItemCount();
for ( USHORT i=0; i<nItemCount; ++i )
{
::rtl::OUString sItemCommand = pToolBox->GetItemCommand(i);
if ( sItemCommand.equals( COMMAND_FINDTEXT ) )
{
Window* pItemWin = pToolBox->GetItemWindow(i);
if (pItemWin)
sFindText = pItemWin->GetText();
break;
}
}
}
css::uno::Sequence< css::beans::PropertyValue > aArgs( 2 );
aArgs[0].Name = SEARCHITEM_SEARCHSTRING;
aArgs[0].Value <<= sFindText;
aArgs[1].Name = SEARCHITEM_SEARCHBACKWARD;
aArgs[1].Value <<= sal_True;
// Execute dispatch asynchronously
ExecuteInfo* pExecuteInfo = new ExecuteInfo;
pExecuteInfo->xDispatch = xDispatch;
pExecuteInfo->aTargetURL = aTargetURL;
pExecuteInfo->aArgs = aArgs;
Application::PostUserEvent( STATIC_LINK(0, UpSearchToolboxController , ExecuteHdl_Impl), pExecuteInfo );
css::frame::FeatureStateEvent aEvent;
css::util::URL aCommand;
aCommand.Complete = COMMAND_APPENDSEARCHHISTORY;
aEvent.FeatureURL = aCommand;
aEvent.IsEnabled = sal_True;
css::uno::Reference< css::frame::XStatusListener > xStatusListener = SearchToolbarControllersManager::createControllersManager()->findController(m_xFrame, COMMAND_FINDTEXT);
xStatusListener->statusChanged( aEvent );
}
}
// XStatusListener
void SAL_CALL UpSearchToolboxController::statusChanged( const css::frame::FeatureStateEvent& /*rEvent*/ ) throw ( css::uno::RuntimeException )
{
}
IMPL_STATIC_LINK_NOINSTANCE( UpSearchToolboxController, ExecuteHdl_Impl, ExecuteInfo*, pExecuteInfo )
{
const sal_uInt32 nRef = Application::ReleaseSolarMutex();
try
{
// Asynchronous execution as this can lead to our own destruction!
// Framework can recycle our current frame and the layout manager disposes all user interface
// elements if a component gets detached from its frame!
pExecuteInfo->xDispatch->dispatch( pExecuteInfo->aTargetURL, pExecuteInfo->aArgs );
}
catch ( css::uno::Exception& )
{
}
Application::AcquireSolarMutex( nRef );
delete pExecuteInfo;
return 0;
}
//-----------------------------------------------------------------------------------------------------------
// class FindbarDispatcher
FindbarDispatcher::FindbarDispatcher(const css::uno::Reference< css::lang::XMultiServiceFactory >& xFactory)
: m_xFactory( xFactory )
{
}
FindbarDispatcher::~FindbarDispatcher()
{
m_xFactory = NULL;
m_xFrame = NULL;
}
// XInterface
css::uno::Any SAL_CALL FindbarDispatcher::queryInterface( const css::uno::Type& aType ) throw( css::uno::RuntimeException )
{
css::uno::Any aReturn( ::cppu::queryInterface( aType,
static_cast< css::lang::XServiceInfo* >(this),
static_cast< css::lang::XInitialization* >(this),
static_cast< css::frame::XDispatchProvider* >(this),
static_cast< css::frame::XDispatch* >(this)) );
if ( aReturn.hasValue() )
return aReturn;
return OWeakObject::queryInterface( aType );
}
void SAL_CALL FindbarDispatcher::acquire() throw()
{
OWeakObject::acquire();
}
void SAL_CALL FindbarDispatcher::release() throw()
{
OWeakObject::release();
}
// XServiceInfo
::rtl::OUString SAL_CALL FindbarDispatcher::getImplementationName() throw( css::uno::RuntimeException )
{
return getImplementationName_Static();
}
sal_Bool SAL_CALL FindbarDispatcher::supportsService( const ::rtl::OUString& ServiceName ) throw( css::uno::RuntimeException )
{
return (
ServiceName.equalsAscii("com.sun.star.comp.svx.FindbarDispatcher") ||
ServiceName.equalsAscii("com.sun.star.frame.ProtocolHandler")
);
}
css::uno::Sequence< ::rtl::OUString > SAL_CALL FindbarDispatcher::getSupportedServiceNames() throw( css::uno::RuntimeException )
{
return getSupportedServiceNames_Static();
}
css::uno::Sequence< ::rtl::OUString > FindbarDispatcher::getSupportedServiceNames_Static() throw()
{
css::uno::Sequence< ::rtl::OUString > aSNS( 2 );
aSNS.getArray()[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.svx.FindbarDispatcher" ));
aSNS.getArray()[1] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.ProtocolHandler" ));
return aSNS;
}
// XInitialization
void SAL_CALL FindbarDispatcher::initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) throw ( css::uno::Exception, css::uno::RuntimeException )
{
if ( aArguments.getLength() )
{
aArguments[0] >>= m_xFrame;
}
}
// XDispatchProvider
css::uno::Reference< css::frame::XDispatch > SAL_CALL FindbarDispatcher::queryDispatch( const css::util::URL& aURL, const ::rtl::OUString& /*sTargetFrameName*/, sal_Int32 /*nSearchFlags*/ ) throw( css::uno::RuntimeException )
{
css::uno::Reference< css::frame::XDispatch > xDispatch;
if ( aURL.Protocol.equalsAscii("vnd.sun.star.findbar:") )
xDispatch = this;
return xDispatch;
}
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 )
{
sal_Int32 nCount = seqDescripts.getLength();
css::uno::Sequence < css::uno::Reference < XDispatch > > lDispatcher( nCount );
for( sal_Int32 i=0; i<nCount; ++i )
lDispatcher[i] = queryDispatch( seqDescripts[i].FeatureURL, seqDescripts[i].FrameName, seqDescripts[i].SearchFlags );
return lDispatcher;
}
// XDispatch
void SAL_CALL FindbarDispatcher::dispatch( const css::util::URL& aURL, const css::uno::Sequence < css::beans::PropertyValue >& /*lArgs*/ ) throw( css::uno::RuntimeException )
{
//vnd.sun.star.findbar:FocusToFindbar - set cursor to the FindTextFieldControl of the findbar
if ( aURL.Path.equalsAscii("FocusToFindbar") )
{
css::uno::Reference< css::beans::XPropertySet > xPropSet(m_xFrame, css::uno::UNO_QUERY);
if(!xPropSet.is())
return;
css::uno::Reference< css::frame::XLayoutManager > xLayoutManager;
css::uno::Any aValue = xPropSet->getPropertyValue( ::rtl::OUString::createFromAscii("LayoutManager") );
aValue >>= xLayoutManager;
if (!xLayoutManager.is())
return;
const ::rtl::OUString sResourceURL = ::rtl::OUString::createFromAscii("private:resource/toolbar/findbar");
css::uno::Reference< css::ui::XUIElement > xUIElement = xLayoutManager->getElement(sResourceURL);
if (!xUIElement.is())
return;
css::uno::Reference< css::awt::XWindow > xWindow(xUIElement->getRealInterface(), css::uno::UNO_QUERY);
Window* pWindow = VCLUnoHelper::GetWindow( xWindow );
ToolBox* pToolBox = (ToolBox*)pWindow;
if ( pToolBox )
{
USHORT nItemCount = pToolBox->GetItemCount();
for ( USHORT i=0; i<nItemCount; ++i )
{
::rtl::OUString sItemCommand = pToolBox->GetItemCommand(i);
if ( sItemCommand.equalsAscii(".uno:FindText") )
{
Window* pItemWin = pToolBox->GetItemWindow( i );
if ( pItemWin )
{
pItemWin->GrabFocus();
return;
}
}
}
}
}
}
void SAL_CALL FindbarDispatcher::addStatusListener( const css::uno::Reference< css::frame::XStatusListener >& /*xControl*/, const css::util::URL& /*aURL*/ ) throw ( css::uno::RuntimeException )
{
}
void SAL_CALL FindbarDispatcher::removeStatusListener( const css::uno::Reference< css::frame::XStatusListener >& /*xControl*/, const css::util::URL& /*aURL*/ ) throw ( css::uno::RuntimeException )
{
}
//-----------------------------------------------------------------------------------------------------------
// create Instance
css::uno::Reference< css::uno::XInterface > SAL_CALL FindTextToolbarController_createInstance(
const css::uno::Reference< css::lang::XMultiServiceFactory >& rSMgr )
{
return *new FindTextToolbarController( rSMgr );
}
css::uno::Reference< css::uno::XInterface > SAL_CALL DownSearchToolboxController_createInstance(
const css::uno::Reference< css::lang::XMultiServiceFactory >& rSMgr )
{
return *new DownSearchToolboxController( rSMgr );
}
css::uno::Reference< css::uno::XInterface > SAL_CALL UpSearchToolboxController_createInstance(
const css::uno::Reference< css::lang::XMultiServiceFactory >& rSMgr )
{
return *new UpSearchToolboxController( rSMgr );
}
css::uno::Reference< css::uno::XInterface > SAL_CALL FindbarDispatcher_createInstance(
const css::uno::Reference< css::lang::XMultiServiceFactory >& rSMgr )
{
return *new FindbarDispatcher( rSMgr );
}
//-----------------------------------------------------------------------------------------------------------
}
......@@ -39,6 +39,7 @@
#include "recoveryui.hxx"
#include "xmlgrhlp.hxx"
#include "tbunocontroller.hxx"
#include "tbunosearchcontrollers.hxx"
using namespace ::com::sun::star;
using namespace ::rtl;
......@@ -283,6 +284,12 @@ SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo (
writeInfo( pKey, svx::GraphicExporter_getImplementationName(), svx::GraphicExporter_getSupportedServiceNames() );
#endif
writeInfo( pKey, svx::FontHeightToolBoxControl::getImplementationName_Static(), svx::FontHeightToolBoxControl::getSupportedServiceNames_Static() );
writeInfo( pKey, svx::FindTextToolbarController::getImplementationName_Static(), svx::FindTextToolbarController::getSupportedServiceNames_Static() );
writeInfo( pKey, svx::DownSearchToolboxController::getImplementationName_Static(), svx::DownSearchToolboxController::getSupportedServiceNames_Static() );
writeInfo( pKey, svx::UpSearchToolboxController::getImplementationName_Static(), svx::UpSearchToolboxController::getSupportedServiceNames_Static() );
writeInfo( pKey, svx::FindbarDispatcher::getImplementationName_Static(), svx::FindbarDispatcher::getSupportedServiceNames_Static() );
writeInfo( pKey, ::unogallery::GalleryThemeProvider_getImplementationName(),::unogallery::GalleryThemeProvider_getSupportedServiceNames() );
// XPrimitiveFactory2D
......@@ -354,6 +361,34 @@ SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory (
svx::FontHeightToolBoxControl_createInstance,
svx::FontHeightToolBoxControl::getSupportedServiceNames_Static() );
}
else if ( svx::FindTextToolbarController::getImplementationName_Static().equalsAscii( pImplName ) )
{
xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
svx::FindTextToolbarController::getImplementationName_Static(),
svx::FindTextToolbarController_createInstance,
svx::FindTextToolbarController::getSupportedServiceNames_Static() );
}
else if ( svx::DownSearchToolboxController::getImplementationName_Static().equalsAscii( pImplName ) )
{
xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
svx::DownSearchToolboxController::getImplementationName_Static(),
svx::DownSearchToolboxController_createInstance,
svx::DownSearchToolboxController::getSupportedServiceNames_Static() );
}
else if ( svx::UpSearchToolboxController::getImplementationName_Static().equalsAscii( pImplName ) )
{
xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
svx::UpSearchToolboxController::getImplementationName_Static(),
svx::UpSearchToolboxController_createInstance,
svx::UpSearchToolboxController::getSupportedServiceNames_Static() );
}
else if ( svx::FindbarDispatcher::getImplementationName_Static().equalsAscii( pImplName ) )
{
xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
svx::FindbarDispatcher::getImplementationName_Static(),
svx::FindbarDispatcher_createInstance,
svx::FindbarDispatcher::getSupportedServiceNames_Static() );
}
else if( ::unogallery::GalleryThemeProvider_getImplementationName().equalsAscii( pImplName ) )
{
xFactory = ::cppu::createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment