framework::PopupMenuController clean-up
Changed the name, it is not a PopupMenuController, but a ToolbarController that shows a PopupMenu filled at runtime by a PopupMenuController Make it a base class for other ToolbarController components, there is no sense to make it a component by itself Use this base class for three new pure UNO ToolbarController's (cherry picked from commit 9d1015051c92900def3d465d2eb8bf179f19a398) Conflicts: framework/Library_fwk.mk framework/inc/uielement/popupmenucontroller.hxx framework/source/uielement/popupmenucontroller.cxx officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu Change-Id: I2f5ec06df098d65ffaa17a8f7f6f3ea8774b43c3
This commit is contained in:
committed by
Caolán McNamara
parent
44b2fb6164
commit
a659ac906a
@@ -104,11 +104,11 @@ $(eval $(call gb_Library_add_exception_objects,fwk,\
|
|||||||
framework/source/loadenv/loadenv \
|
framework/source/loadenv/loadenv \
|
||||||
framework/source/loadenv/targethelper \
|
framework/source/loadenv/targethelper \
|
||||||
framework/source/register/registerservices \
|
framework/source/register/registerservices \
|
||||||
|
framework/source/services/ContextChangeEventMultiplexer \
|
||||||
framework/source/services/autorecovery \
|
framework/source/services/autorecovery \
|
||||||
framework/source/services/backingcomp \
|
framework/source/services/backingcomp \
|
||||||
framework/source/services/backingwindow \
|
framework/source/services/backingwindow \
|
||||||
framework/source/services/desktop \
|
framework/source/services/desktop \
|
||||||
framework/source/services/ContextChangeEventMultiplexer \
|
|
||||||
framework/source/services/frame \
|
framework/source/services/frame \
|
||||||
framework/source/services/modulemanager \
|
framework/source/services/modulemanager \
|
||||||
framework/source/services/pathsettings \
|
framework/source/services/pathsettings \
|
||||||
@@ -143,6 +143,7 @@ $(eval $(call gb_Library_add_exception_objects,fwk,\
|
|||||||
framework/source/uielement/menubarmerger \
|
framework/source/uielement/menubarmerger \
|
||||||
framework/source/uielement/menubarwrapper \
|
framework/source/uielement/menubarwrapper \
|
||||||
framework/source/uielement/objectmenucontroller \
|
framework/source/uielement/objectmenucontroller \
|
||||||
|
framework/source/uielement/popuptoolbarcontroller \
|
||||||
framework/source/uielement/progressbarwrapper \
|
framework/source/uielement/progressbarwrapper \
|
||||||
framework/source/uielement/recentfilesmenucontroller \
|
framework/source/uielement/recentfilesmenucontroller \
|
||||||
framework/source/uielement/spinfieldtoolbarcontroller \
|
framework/source/uielement/spinfieldtoolbarcontroller \
|
||||||
@@ -161,8 +162,8 @@ $(eval $(call gb_Library_add_exception_objects,fwk,\
|
|||||||
framework/source/uifactory/factoryconfiguration \
|
framework/source/uifactory/factoryconfiguration \
|
||||||
framework/source/uifactory/menubarfactory \
|
framework/source/uifactory/menubarfactory \
|
||||||
framework/source/uifactory/statusbarfactory \
|
framework/source/uifactory/statusbarfactory \
|
||||||
framework/source/uifactory/uicontrollerfactory \
|
|
||||||
framework/source/uifactory/toolboxfactory \
|
framework/source/uifactory/toolboxfactory \
|
||||||
|
framework/source/uifactory/uicontrollerfactory \
|
||||||
framework/source/uifactory/uielementfactorymanager \
|
framework/source/uifactory/uielementfactorymanager \
|
||||||
framework/source/uifactory/windowcontentfactorymanager \
|
framework/source/uifactory/windowcontentfactorymanager \
|
||||||
framework/source/xml/acceleratorconfigurationreader \
|
framework/source/xml/acceleratorconfigurationreader \
|
||||||
|
@@ -68,7 +68,6 @@ $(eval $(call gb_Library_add_exception_objects,fwl,\
|
|||||||
framework/source/uielement/langselectionmenucontroller \
|
framework/source/uielement/langselectionmenucontroller \
|
||||||
framework/source/uielement/macrosmenucontroller \
|
framework/source/uielement/macrosmenucontroller \
|
||||||
framework/source/uielement/newmenucontroller \
|
framework/source/uielement/newmenucontroller \
|
||||||
framework/source/uielement/popupmenucontroller \
|
|
||||||
framework/source/uielement/toolbarsmenucontroller \
|
framework/source/uielement/toolbarsmenucontroller \
|
||||||
))
|
))
|
||||||
|
|
||||||
|
@@ -1,74 +0,0 @@
|
|||||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
||||||
/*
|
|
||||||
* This file is part of the LibreOffice project.
|
|
||||||
*
|
|
||||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
*
|
|
||||||
* This file incorporates work covered by the following license notice:
|
|
||||||
*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed
|
|
||||||
* with this work for additional information regarding copyright
|
|
||||||
* ownership. The ASF licenses this file to you under the Apache
|
|
||||||
* License, Version 2.0 (the "License"); you may not use this file
|
|
||||||
* except in compliance with the License. You may obtain a copy of
|
|
||||||
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __FRAMEWORK_POPUPMENUCONTROLLER_HXX_
|
|
||||||
#define __FRAMEWORK_POPUPMENUCONTROLLER_HXX_
|
|
||||||
|
|
||||||
#include <com/sun/star/lang/XServiceInfo.hpp>
|
|
||||||
#include <com/sun/star/frame/XPopupMenuController.hpp>
|
|
||||||
|
|
||||||
#include "svtools/toolboxcontroller.hxx"
|
|
||||||
#include "boost/scoped_ptr.hpp"
|
|
||||||
|
|
||||||
#include <macros/xserviceinfo.hxx>
|
|
||||||
|
|
||||||
class Window;
|
|
||||||
|
|
||||||
namespace framework
|
|
||||||
{
|
|
||||||
class PopupMenuControllerImpl;
|
|
||||||
|
|
||||||
class PopupMenuController : public svt::ToolboxController, public ::com::sun::star::lang::XServiceInfo
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
PopupMenuController( const com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >& rxContext );
|
|
||||||
~PopupMenuController();
|
|
||||||
|
|
||||||
// XInterface
|
|
||||||
virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& aType ) throw (::com::sun::star::uno::RuntimeException);
|
|
||||||
virtual void SAL_CALL acquire() throw ();
|
|
||||||
virtual void SAL_CALL release() throw ();
|
|
||||||
|
|
||||||
// XServiceInfo
|
|
||||||
DECLARE_XSERVICEINFO
|
|
||||||
|
|
||||||
// XComponent
|
|
||||||
virtual void SAL_CALL dispose() throw (::com::sun::star::uno::RuntimeException);
|
|
||||||
|
|
||||||
// XStatusListener
|
|
||||||
virtual void SAL_CALL statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event ) throw ( ::com::sun::star::uno::RuntimeException );
|
|
||||||
|
|
||||||
// XToolbarController
|
|
||||||
virtual void SAL_CALL execute( sal_Int16 KeyModifier ) throw (::com::sun::star::uno::RuntimeException);
|
|
||||||
virtual void SAL_CALL click() throw (::com::sun::star::uno::RuntimeException);
|
|
||||||
virtual void SAL_CALL doubleClick() throw (::com::sun::star::uno::RuntimeException);
|
|
||||||
virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > SAL_CALL createPopupWindow() throw (::com::sun::star::uno::RuntimeException);
|
|
||||||
virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > SAL_CALL createItemWindow( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow >& Parent ) throw (::com::sun::star::uno::RuntimeException);
|
|
||||||
|
|
||||||
bool CreatePopupMenuController() throw (::com::sun::star::uno::Exception);
|
|
||||||
|
|
||||||
::com::sun::star::uno::Reference< ::com::sun::star::frame::XPopupMenuController > mxPopupMenuController;
|
|
||||||
::com::sun::star::uno::Reference< com::sun::star::awt::XPopupMenu > mxPopupMenu;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace framework
|
|
||||||
|
|
||||||
#endif // __FRAMEWORK_POPUPMENUCONTROLLER_HXX_
|
|
||||||
|
|
||||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
96
framework/inc/uielement/popuptoolbarcontroller.hxx
Normal file
96
framework/inc/uielement/popuptoolbarcontroller.hxx
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the LibreOffice project.
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*
|
||||||
|
* This file incorporates work covered by the following license notice:
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed
|
||||||
|
* with this work for additional information regarding copyright
|
||||||
|
* ownership. The ASF licenses this file to you under the Apache
|
||||||
|
* License, Version 2.0 (the "License"); you may not use this file
|
||||||
|
* except in compliance with the License. You may obtain a copy of
|
||||||
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||||
|
*/
|
||||||
|
#ifndef __FRAMEWORK_UIELEMENT_POPUPMENU_TOOLBARCONTROLLER_HXX__
|
||||||
|
#define __FRAMEWORK_UIELEMENT_POPUPMENU_TOOLBARCONTROLLER_HXX__
|
||||||
|
|
||||||
|
#include <com/sun/star/awt/XPopupMenu.hpp>
|
||||||
|
#include <com/sun/star/frame/XPopupMenuController.hpp>
|
||||||
|
#include <com/sun/star/frame/XUIControllerFactory.hpp>
|
||||||
|
#include <com/sun/star/lang/XServiceInfo.hpp>
|
||||||
|
#include <cppuhelper/implbase1.hxx>
|
||||||
|
#include <macros/xserviceinfo.hxx>
|
||||||
|
#include <svtools/toolboxcontroller.hxx>
|
||||||
|
|
||||||
|
namespace framework
|
||||||
|
{
|
||||||
|
class PopupMenuToolbarController : public svt::ToolboxController
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~PopupMenuToolbarController();
|
||||||
|
|
||||||
|
// XComponent
|
||||||
|
virtual void SAL_CALL dispose() throw ( ::com::sun::star::uno::RuntimeException );
|
||||||
|
// XInitialization
|
||||||
|
virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
|
||||||
|
// XToolbarController
|
||||||
|
virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > SAL_CALL createPopupWindow() throw (::com::sun::star::uno::RuntimeException);
|
||||||
|
// XStatusListener
|
||||||
|
virtual void SAL_CALL statusChanged( const ::com::sun::star::frame::FeatureStateEvent& rEvent ) throw ( ::com::sun::star::uno::RuntimeException );
|
||||||
|
|
||||||
|
protected:
|
||||||
|
PopupMenuToolbarController( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext,
|
||||||
|
const OUString &rPopupCommand = OUString() );
|
||||||
|
virtual void functionExecuted( const OUString &rCommand );
|
||||||
|
virtual sal_uInt16 getDropDownStyle() const;
|
||||||
|
void createPopupMenuController();
|
||||||
|
|
||||||
|
com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > m_xContext;
|
||||||
|
sal_Bool m_bHasController;
|
||||||
|
com::sun::star::uno::Reference< com::sun::star::awt::XPopupMenu > m_xPopupMenu;
|
||||||
|
|
||||||
|
private:
|
||||||
|
OUString m_aPopupCommand;
|
||||||
|
com::sun::star::uno::Reference< com::sun::star::frame::XUIControllerFactory > m_xPopupMenuFactory;
|
||||||
|
com::sun::star::uno::Reference< com::sun::star::frame::XPopupMenuController > m_xPopupMenuController;
|
||||||
|
};
|
||||||
|
|
||||||
|
class OpenToolbarController : public PopupMenuToolbarController
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
OpenToolbarController( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext );
|
||||||
|
|
||||||
|
// XServiceInfo
|
||||||
|
DECLARE_XSERVICEINFO
|
||||||
|
};
|
||||||
|
|
||||||
|
class NewToolbarController : public PopupMenuToolbarController
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NewToolbarController( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext );
|
||||||
|
|
||||||
|
// XServiceInfo
|
||||||
|
DECLARE_XSERVICEINFO
|
||||||
|
private:
|
||||||
|
void functionExecuted( const OUString &rCommand );
|
||||||
|
void SAL_CALL statusChanged( const ::com::sun::star::frame::FeatureStateEvent& rEvent ) throw ( ::com::sun::star::uno::RuntimeException );
|
||||||
|
void setItemImage( const OUString &rCommand );
|
||||||
|
};
|
||||||
|
|
||||||
|
class WizardsToolbarController : public PopupMenuToolbarController
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
WizardsToolbarController( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext );
|
||||||
|
|
||||||
|
// XServiceInfo
|
||||||
|
DECLARE_XSERVICEINFO
|
||||||
|
private:
|
||||||
|
sal_uInt16 getDropDownStyle() const;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@@ -71,6 +71,7 @@
|
|||||||
#include <services/substitutepathvars.hxx>
|
#include <services/substitutepathvars.hxx>
|
||||||
#include <services/pathsettings.hxx>
|
#include <services/pathsettings.hxx>
|
||||||
#include <services/ContextChangeEventMultiplexer.hxx>
|
#include <services/ContextChangeEventMultiplexer.hxx>
|
||||||
|
#include <uielement/popuptoolbarcontroller.hxx>
|
||||||
|
|
||||||
COMPONENTGETFACTORY ( fwk,
|
COMPONENTGETFACTORY ( fwk,
|
||||||
IFFACTORY( ::framework::URLTransformer ) else
|
IFFACTORY( ::framework::URLTransformer ) else
|
||||||
@@ -112,7 +113,10 @@ COMPONENTGETFACTORY ( fwk,
|
|||||||
IFFACTORY( ::framework::TabWindowService ) else
|
IFFACTORY( ::framework::TabWindowService ) else
|
||||||
IFFACTORY( ::framework::SubstitutePathVariables ) else
|
IFFACTORY( ::framework::SubstitutePathVariables ) else
|
||||||
IFFACTORY( ::framework::PathSettings ) else
|
IFFACTORY( ::framework::PathSettings ) else
|
||||||
IFFACTORY( ::framework::ContextChangeEventMultiplexer )
|
IFFACTORY( ::framework::ContextChangeEventMultiplexer ) else
|
||||||
|
IFFACTORY( ::framework::OpenToolbarController ) else
|
||||||
|
IFFACTORY( ::framework::NewToolbarController ) else
|
||||||
|
IFFACTORY( ::framework::WizardsToolbarController )
|
||||||
)
|
)
|
||||||
|
|
||||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||||
|
@@ -50,7 +50,6 @@
|
|||||||
#include <uielement/macrosmenucontroller.hxx>
|
#include <uielement/macrosmenucontroller.hxx>
|
||||||
#include <uielement/newmenucontroller.hxx>
|
#include <uielement/newmenucontroller.hxx>
|
||||||
#include <uielement/toolbarsmenucontroller.hxx>
|
#include <uielement/toolbarsmenucontroller.hxx>
|
||||||
#include <uielement/popupmenucontroller.hxx>
|
|
||||||
|
|
||||||
COMPONENTGETFACTORY ( fwl,
|
COMPONENTGETFACTORY ( fwl,
|
||||||
IFFACTORY( ::framework::MediaTypeDetectionHelper )
|
IFFACTORY( ::framework::MediaTypeDetectionHelper )
|
||||||
@@ -70,8 +69,7 @@ COMPONENTGETFACTORY ( fwl,
|
|||||||
IFFACTORY( ::framework::FooterMenuController ) else
|
IFFACTORY( ::framework::FooterMenuController ) else
|
||||||
IFFACTORY( ::framework::HeaderMenuController ) else
|
IFFACTORY( ::framework::HeaderMenuController ) else
|
||||||
IFFACTORY( ::framework::LanguageSelectionMenuController ) else
|
IFFACTORY( ::framework::LanguageSelectionMenuController ) else
|
||||||
IFFACTORY( ::framework::Oxt_Handler ) else
|
IFFACTORY( ::framework::Oxt_Handler )
|
||||||
IFFACTORY( ::framework::PopupMenuController )
|
|
||||||
)
|
)
|
||||||
|
|
||||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||||
|
@@ -1,235 +0,0 @@
|
|||||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
||||||
/*
|
|
||||||
* This file is part of the LibreOffice project.
|
|
||||||
*
|
|
||||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
*
|
|
||||||
* This file incorporates work covered by the following license notice:
|
|
||||||
*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed
|
|
||||||
* with this work for additional information regarding copyright
|
|
||||||
* ownership. The ASF licenses this file to you under the Apache
|
|
||||||
* License, Version 2.0 (the "License"); you may not use this file
|
|
||||||
* except in compliance with the License. You may obtain a copy of
|
|
||||||
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include <com/sun/star/awt/PopupMenu.hpp>
|
|
||||||
#include <com/sun/star/frame/PopupMenuControllerFactory.hpp>
|
|
||||||
#include <com/sun/star/frame/XPopupMenuController.hpp>
|
|
||||||
|
|
||||||
#include <toolkit/helper/vclunohelper.hxx>
|
|
||||||
|
|
||||||
#include <rtl/ref.hxx>
|
|
||||||
|
|
||||||
#include <vcl/toolbox.hxx>
|
|
||||||
#include <vcl/menu.hxx>
|
|
||||||
#include <vcl/svapp.hxx>
|
|
||||||
#include <osl/mutex.hxx>
|
|
||||||
|
|
||||||
#include "uielement/popupmenucontroller.hxx"
|
|
||||||
#include "services.h"
|
|
||||||
|
|
||||||
using namespace ::com::sun::star;
|
|
||||||
using namespace ::com::sun::star::uno;
|
|
||||||
using namespace ::com::sun::star::lang;
|
|
||||||
using namespace ::com::sun::star::frame;
|
|
||||||
using namespace ::com::sun::star::beans;
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
namespace framework
|
|
||||||
{
|
|
||||||
|
|
||||||
DEFINE_XSERVICEINFO_MULTISERVICE_2 ( PopupMenuController ,
|
|
||||||
OWeakObject ,
|
|
||||||
OUString( "com.sun.star.frame.ToolbarController" ) ,
|
|
||||||
OUString( "com.sun.star.comp.framework.PopupMenuController" )
|
|
||||||
)
|
|
||||||
|
|
||||||
DEFINE_INIT_SERVICE ( PopupMenuController, {} )
|
|
||||||
|
|
||||||
class PopupMenuControllerImpl
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
//========================================================================
|
|
||||||
// class PopupMenuController REMOVE REMOVE REMOVE
|
|
||||||
//========================================================================
|
|
||||||
|
|
||||||
PopupMenuController::PopupMenuController( const Reference< uno::XComponentContext >& rxContext )
|
|
||||||
: svt::ToolboxController( rxContext, Reference< frame::XFrame >(), OUString() )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
|
|
||||||
PopupMenuController::~PopupMenuController()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
// XInterface
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
|
|
||||||
Any SAL_CALL PopupMenuController::queryInterface( const Type& aType ) throw (RuntimeException)
|
|
||||||
{
|
|
||||||
Any a( ToolboxController::queryInterface( aType ) );
|
|
||||||
if ( a.hasValue() )
|
|
||||||
return a;
|
|
||||||
|
|
||||||
return ::cppu::queryInterface( aType, static_cast< lang::XServiceInfo* >( this ));
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
|
|
||||||
void SAL_CALL PopupMenuController::acquire() throw ()
|
|
||||||
{
|
|
||||||
ToolboxController::acquire();
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
|
|
||||||
void SAL_CALL PopupMenuController::release() throw ()
|
|
||||||
{
|
|
||||||
ToolboxController::release();
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
// XComponent
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
|
|
||||||
void SAL_CALL PopupMenuController::dispose() throw (RuntimeException)
|
|
||||||
{
|
|
||||||
if( mxPopupMenuController.is() )
|
|
||||||
{
|
|
||||||
Reference< XComponent > xComponent( mxPopupMenuController, UNO_QUERY );
|
|
||||||
if( xComponent.is() )
|
|
||||||
xComponent->dispose();
|
|
||||||
mxPopupMenuController.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
mxPopupMenu.clear();
|
|
||||||
|
|
||||||
svt::ToolboxController::dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
// XStatusListener
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
|
|
||||||
void SAL_CALL PopupMenuController::statusChanged( const frame::FeatureStateEvent& rEvent ) throw ( RuntimeException )
|
|
||||||
{
|
|
||||||
svt::ToolboxController::statusChanged(rEvent);
|
|
||||||
enable( rEvent.IsEnabled );
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
// XToolbarController
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
|
|
||||||
void SAL_CALL PopupMenuController::execute( sal_Int16 KeyModifier ) throw (RuntimeException)
|
|
||||||
{
|
|
||||||
svt::ToolboxController::execute( KeyModifier );
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
|
|
||||||
void SAL_CALL PopupMenuController::click() throw (RuntimeException)
|
|
||||||
{
|
|
||||||
svt::ToolboxController::click();
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
|
|
||||||
void SAL_CALL PopupMenuController::doubleClick() throw (RuntimeException)
|
|
||||||
{
|
|
||||||
svt::ToolboxController::doubleClick();
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
|
|
||||||
bool PopupMenuController::CreatePopupMenuController() throw (Exception)
|
|
||||||
{
|
|
||||||
Reference< XMultiComponentFactory > xPopupMenuControllerRegistration = PopupMenuControllerFactory::create( m_xContext );
|
|
||||||
|
|
||||||
Sequence< Any > aSeq( 2 );
|
|
||||||
PropertyValue aPropValue;
|
|
||||||
|
|
||||||
aPropValue.Name = OUString( "ModuleIdentifier" );
|
|
||||||
aPropValue.Value <<= getModuleName();
|
|
||||||
aSeq[0] <<= aPropValue;
|
|
||||||
aPropValue.Name = OUString( "Frame" );
|
|
||||||
aPropValue.Value <<= m_xFrame;
|
|
||||||
aSeq[1] <<= aPropValue;
|
|
||||||
|
|
||||||
Reference< XPopupMenuController > xPopupMenuController( xPopupMenuControllerRegistration->createInstanceWithArgumentsAndContext( getCommandURL(), aSeq, m_xContext ), UNO_QUERY );
|
|
||||||
if ( xPopupMenuController.is() )
|
|
||||||
{
|
|
||||||
mxPopupMenuController = xPopupMenuController;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Reference< awt::XWindow > SAL_CALL PopupMenuController::createPopupWindow() throw (RuntimeException)
|
|
||||||
{
|
|
||||||
SolarMutexGuard aSolarLock;
|
|
||||||
|
|
||||||
Reference< awt::XWindow > xRet;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ToolBox* pToolBox = dynamic_cast< ToolBox* >( VCLUnoHelper::GetWindow( getParent() ) );
|
|
||||||
if( !pToolBox )
|
|
||||||
return xRet;
|
|
||||||
|
|
||||||
// get selected button
|
|
||||||
sal_uInt16 nItemId = pToolBox->GetDownItemId();
|
|
||||||
if( !nItemId )
|
|
||||||
return xRet;
|
|
||||||
|
|
||||||
::Rectangle aRect( pToolBox->GetItemRect( nItemId ) );
|
|
||||||
|
|
||||||
if( !mxPopupMenuController.is() && !CreatePopupMenuController() )
|
|
||||||
return xRet;
|
|
||||||
|
|
||||||
if( !mxPopupMenu.is() )
|
|
||||||
{
|
|
||||||
mxPopupMenu = awt::PopupMenu::create(m_xContext);
|
|
||||||
mxPopupMenuController->setPopupMenu( mxPopupMenu );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mxPopupMenuController->updatePopupMenu();
|
|
||||||
|
|
||||||
}
|
|
||||||
pToolBox->SetItemDown( nItemId, sal_True );
|
|
||||||
Reference< awt::XWindowPeer > xPeer( getParent(), UNO_QUERY_THROW );
|
|
||||||
mxPopupMenu->execute( xPeer, VCLUnoHelper::ConvertToAWTRect( aRect ), 0 );
|
|
||||||
pToolBox->SetItemDown( nItemId, sal_False );
|
|
||||||
}
|
|
||||||
catch( const Exception& )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
return xRet;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
|
|
||||||
Reference< awt::XWindow > SAL_CALL PopupMenuController::createItemWindow( const Reference< awt::XWindow >& /*Parent*/ ) throw (RuntimeException)
|
|
||||||
{
|
|
||||||
return Reference< awt::XWindow >();
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
406
framework/source/uielement/popuptoolbarcontroller.cxx
Normal file
406
framework/source/uielement/popuptoolbarcontroller.cxx
Normal file
@@ -0,0 +1,406 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the LibreOffice project.
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*
|
||||||
|
* This file incorporates work covered by the following license notice:
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed
|
||||||
|
* with this work for additional information regarding copyright
|
||||||
|
* ownership. The ASF licenses this file to you under the Apache
|
||||||
|
* License, Version 2.0 (the "License"); you may not use this file
|
||||||
|
* except in compliance with the License. You may obtain a copy of
|
||||||
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <uielement/popuptoolbarcontroller.hxx>
|
||||||
|
#include <comphelper/processfactory.hxx>
|
||||||
|
#include <svtools/imagemgr.hxx>
|
||||||
|
#include <svtools/miscopt.hxx>
|
||||||
|
#include <toolkit/helper/vclunohelper.hxx>
|
||||||
|
#include <tools/urlobj.hxx>
|
||||||
|
#include <unotools/moduleoptions.hxx>
|
||||||
|
#include <vcl/svapp.hxx>
|
||||||
|
#include <vcl/toolbox.hxx>
|
||||||
|
|
||||||
|
#include <com/sun/star/awt/PopupMenuDirection.hpp>
|
||||||
|
#include <com/sun/star/frame/PopupMenuControllerFactory.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
#define UNO_COMMAND_RECENT_FILE_LIST ".uno:RecentFileList"
|
||||||
|
|
||||||
|
namespace css = ::com::sun::star;
|
||||||
|
|
||||||
|
namespace framework
|
||||||
|
{
|
||||||
|
|
||||||
|
PopupMenuToolbarController::PopupMenuToolbarController(
|
||||||
|
const css::uno::Reference< css::uno::XComponentContext >& xContext,
|
||||||
|
const OUString &rPopupCommand )
|
||||||
|
: svt::ToolboxController()
|
||||||
|
, m_xContext( xContext )
|
||||||
|
, m_bHasController( sal_False )
|
||||||
|
, m_aPopupCommand( rPopupCommand )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
PopupMenuToolbarController::~PopupMenuToolbarController()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void SAL_CALL PopupMenuToolbarController::dispose()
|
||||||
|
throw ( css::uno::RuntimeException )
|
||||||
|
{
|
||||||
|
svt::ToolboxController::dispose();
|
||||||
|
|
||||||
|
osl::MutexGuard aGuard( m_aMutex );
|
||||||
|
if( m_xPopupMenuController.is() )
|
||||||
|
{
|
||||||
|
css::uno::Reference< css::lang::XComponent > xComponent(
|
||||||
|
m_xPopupMenuController, css::uno::UNO_QUERY );
|
||||||
|
if( xComponent.is() )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
xComponent->dispose();
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{}
|
||||||
|
}
|
||||||
|
m_xPopupMenuController.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_xContext.clear();
|
||||||
|
m_xPopupMenuFactory.clear();
|
||||||
|
m_xPopupMenu.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SAL_CALL PopupMenuToolbarController::initialize(
|
||||||
|
const css::uno::Sequence< css::uno::Any >& aArguments )
|
||||||
|
throw ( css::uno::Exception, css::uno::RuntimeException )
|
||||||
|
{
|
||||||
|
ToolboxController::initialize( aArguments );
|
||||||
|
|
||||||
|
osl::MutexGuard aGuard( m_aMutex );
|
||||||
|
if ( !m_aPopupCommand.getLength() )
|
||||||
|
m_aPopupCommand = m_aCommandURL;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_xPopupMenuFactory.set(
|
||||||
|
css::frame::PopupMenuControllerFactory::create( m_xContext ) );
|
||||||
|
m_bHasController = m_xPopupMenuFactory->hasController(
|
||||||
|
m_aPopupCommand, getModuleName() );
|
||||||
|
}
|
||||||
|
catch (const css::uno::Exception& e)
|
||||||
|
{
|
||||||
|
OSL_TRACE( "PopupMenuToolbarController - caught an exception! %s",
|
||||||
|
rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr() );
|
||||||
|
(void) e;
|
||||||
|
}
|
||||||
|
|
||||||
|
SolarMutexGuard aSolarLock;
|
||||||
|
ToolBox* pToolBox = static_cast< ToolBox* >( VCLUnoHelper::GetWindow( getParent() ) );
|
||||||
|
if ( pToolBox )
|
||||||
|
{
|
||||||
|
ToolBoxItemBits nCurStyle( pToolBox->GetItemBits( m_nToolBoxId ) );
|
||||||
|
ToolBoxItemBits nSetStyle( getDropDownStyle() );
|
||||||
|
pToolBox->SetItemBits( m_nToolBoxId,
|
||||||
|
m_bHasController ?
|
||||||
|
nCurStyle | nSetStyle :
|
||||||
|
nCurStyle & ~nSetStyle );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SAL_CALL
|
||||||
|
PopupMenuToolbarController::statusChanged(
|
||||||
|
const css::frame::FeatureStateEvent& rEvent )
|
||||||
|
throw ( css::uno::RuntimeException )
|
||||||
|
{
|
||||||
|
// TODO move to base class
|
||||||
|
|
||||||
|
svt::ToolboxController::statusChanged( rEvent );
|
||||||
|
enable( rEvent.IsEnabled );
|
||||||
|
}
|
||||||
|
|
||||||
|
css::uno::Reference< css::awt::XWindow > SAL_CALL
|
||||||
|
PopupMenuToolbarController::createPopupWindow()
|
||||||
|
throw ( css::uno::RuntimeException )
|
||||||
|
{
|
||||||
|
css::uno::Reference< css::awt::XWindow > xRet;
|
||||||
|
|
||||||
|
osl::MutexGuard aGuard( m_aMutex );
|
||||||
|
if ( !m_bHasController )
|
||||||
|
return xRet;
|
||||||
|
|
||||||
|
createPopupMenuController();
|
||||||
|
|
||||||
|
SolarMutexGuard aSolarLock;
|
||||||
|
ToolBox* pToolBox = static_cast< ToolBox* >( VCLUnoHelper::GetWindow( getParent() ) );
|
||||||
|
if ( !pToolBox )
|
||||||
|
return xRet;
|
||||||
|
|
||||||
|
pToolBox->SetItemDown( m_nToolBoxId, sal_True );
|
||||||
|
sal_uInt16 nId = m_xPopupMenu->execute(
|
||||||
|
css::uno::Reference< css::awt::XWindowPeer >( getParent(), css::uno::UNO_QUERY ),
|
||||||
|
VCLUnoHelper::ConvertToAWTRect( pToolBox->GetItemRect( m_nToolBoxId ) ),
|
||||||
|
css::awt::PopupMenuDirection::EXECUTE_DEFAULT );
|
||||||
|
pToolBox->SetItemDown( m_nToolBoxId, sal_False );
|
||||||
|
|
||||||
|
if ( nId )
|
||||||
|
functionExecuted( m_xPopupMenu->getCommand( nId ) );
|
||||||
|
|
||||||
|
return xRet;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PopupMenuToolbarController::functionExecuted( const OUString &/*rCommand*/)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
sal_uInt16 PopupMenuToolbarController::getDropDownStyle() const
|
||||||
|
{
|
||||||
|
return TIB_DROPDOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PopupMenuToolbarController::createPopupMenuController()
|
||||||
|
{
|
||||||
|
if( !m_bHasController )
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ( !m_xPopupMenuController.is() )
|
||||||
|
{
|
||||||
|
css::uno::Sequence< css::uno::Any > aArgs( 2 );
|
||||||
|
css::beans::PropertyValue aProp;
|
||||||
|
|
||||||
|
aProp.Name = DECLARE_ASCII( "Frame" );
|
||||||
|
aProp.Value <<= m_xFrame;
|
||||||
|
aArgs[0] <<= aProp;
|
||||||
|
|
||||||
|
aProp.Name = DECLARE_ASCII( "ModuleIdentifier" );
|
||||||
|
aProp.Value <<= getModuleName();
|
||||||
|
aArgs[1] <<= aProp;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_xPopupMenu.set(
|
||||||
|
m_xContext->getServiceManager()->createInstanceWithContext(
|
||||||
|
DECLARE_ASCII( "com.sun.star.awt.PopupMenu" ), m_xContext ),
|
||||||
|
css::uno::UNO_QUERY_THROW );
|
||||||
|
m_xPopupMenuController.set(
|
||||||
|
m_xPopupMenuFactory->createInstanceWithArgumentsAndContext(
|
||||||
|
m_aPopupCommand, aArgs, m_xContext), css::uno::UNO_QUERY_THROW );
|
||||||
|
|
||||||
|
m_xPopupMenuController->setPopupMenu( m_xPopupMenu );
|
||||||
|
}
|
||||||
|
catch ( const css::uno::Exception &e )
|
||||||
|
{
|
||||||
|
m_xPopupMenu.clear();
|
||||||
|
OSL_TRACE( "PopupMenuToolbarController - caught an exception! %s",
|
||||||
|
OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr() );
|
||||||
|
(void) e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_XSERVICEINFO_MULTISERVICE_2( WizardsToolbarController,
|
||||||
|
::cppu::OWeakObject,
|
||||||
|
DECLARE_ASCII("com.sun.star.frame.ToolbarController"),
|
||||||
|
DECLARE_ASCII("org.apache.openoffice.comp.framework.WizardsToolbarController")
|
||||||
|
)
|
||||||
|
|
||||||
|
DEFINE_INIT_SERVICE( WizardsToolbarController, {} )
|
||||||
|
|
||||||
|
WizardsToolbarController::WizardsToolbarController(
|
||||||
|
const css::uno::Reference< css::uno::XComponentContext >& xContext )
|
||||||
|
: PopupMenuToolbarController( xContext )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
sal_uInt16 WizardsToolbarController::getDropDownStyle() const
|
||||||
|
{
|
||||||
|
return TIB_DROPDOWNONLY;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_XSERVICEINFO_MULTISERVICE_2( OpenToolbarController,
|
||||||
|
::cppu::OWeakObject,
|
||||||
|
DECLARE_ASCII("com.sun.star.frame.ToolbarController"),
|
||||||
|
DECLARE_ASCII("org.apache.openoffice.comp.framework.OpenToolbarController")
|
||||||
|
)
|
||||||
|
|
||||||
|
DEFINE_INIT_SERVICE( OpenToolbarController, {} )
|
||||||
|
|
||||||
|
OpenToolbarController::OpenToolbarController(
|
||||||
|
const css::uno::Reference< css::uno::XComponentContext >& xContext )
|
||||||
|
: PopupMenuToolbarController( xContext, DECLARE_ASCII( UNO_COMMAND_RECENT_FILE_LIST ) )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DEFINE_XSERVICEINFO_MULTISERVICE_2( NewToolbarController,
|
||||||
|
::cppu::OWeakObject,
|
||||||
|
DECLARE_ASCII("com.sun.star.frame.ToolbarController"),
|
||||||
|
DECLARE_ASCII("org.apache.openoffice.comp.framework.NewToolbarController")
|
||||||
|
)
|
||||||
|
|
||||||
|
DEFINE_INIT_SERVICE( NewToolbarController, {} )
|
||||||
|
|
||||||
|
NewToolbarController::NewToolbarController(
|
||||||
|
const css::uno::Reference< css::uno::XComponentContext >& xContext )
|
||||||
|
: PopupMenuToolbarController( xContext )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void SAL_CALL
|
||||||
|
NewToolbarController::statusChanged(
|
||||||
|
const css::frame::FeatureStateEvent& rEvent )
|
||||||
|
throw ( css::uno::RuntimeException )
|
||||||
|
{
|
||||||
|
if ( rEvent.IsEnabled )
|
||||||
|
{
|
||||||
|
OUString aState;
|
||||||
|
rEvent.State >>= aState;
|
||||||
|
// set the image even if the state is not a string
|
||||||
|
// this will set the image of the default module
|
||||||
|
setItemImage( aState );
|
||||||
|
}
|
||||||
|
|
||||||
|
enable( rEvent.IsEnabled );
|
||||||
|
}
|
||||||
|
|
||||||
|
void NewToolbarController::functionExecuted( const OUString &rCommand )
|
||||||
|
{
|
||||||
|
setItemImage( rCommand );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
it return the existing state of the given URL in the popupmenu of this toolbox control.
|
||||||
|
|
||||||
|
If the given URL can be located as an action command of one menu item of the
|
||||||
|
popup menu of this control, we return sal_True. Otherwhise we return sal_False.
|
||||||
|
Further we return a fallback URL, in case we have to return sal_False. Because
|
||||||
|
the outside code must select a valid item of the popup menu everytime ...
|
||||||
|
and we define it here. By the way this m ethod was written to handle
|
||||||
|
error situations gracefully. E.g. it can be called during creation time
|
||||||
|
but then we have no valid menu. For this case we know another fallback URL.
|
||||||
|
Then we return the private:factory/ URL of the default factory.
|
||||||
|
|
||||||
|
@param rPopupMenu
|
||||||
|
pounts to the popup menu, on which item we try to locate the given URL
|
||||||
|
Can be NULL! Search will be supressed then.
|
||||||
|
|
||||||
|
@param sURL
|
||||||
|
the URL for searching
|
||||||
|
|
||||||
|
@param sFallback
|
||||||
|
contains the fallback URL in case we return FALSE
|
||||||
|
Must point to valid memory!
|
||||||
|
|
||||||
|
@param aImage
|
||||||
|
contains the image of the menu for the URL.
|
||||||
|
|
||||||
|
@return sal_True - if URL could be located as an item of the popup menu.
|
||||||
|
sal_False - otherwhise.
|
||||||
|
*/
|
||||||
|
static sal_Bool Impl_ExistURLInMenu(
|
||||||
|
const css::uno::Reference< css::awt::XPopupMenu > &rPopupMenu,
|
||||||
|
OUString &sURL,
|
||||||
|
OUString &sFallback,
|
||||||
|
Image &aImage )
|
||||||
|
{
|
||||||
|
sal_Bool bValidFallback( sal_False );
|
||||||
|
sal_uInt16 nCount( 0 );
|
||||||
|
if ( rPopupMenu.is() && ( nCount = rPopupMenu->getItemCount() ) && sURL.getLength() )
|
||||||
|
{
|
||||||
|
for ( sal_uInt16 n = 0; n < nCount; ++n )
|
||||||
|
{
|
||||||
|
sal_uInt16 nId = rPopupMenu->getItemId( n );
|
||||||
|
OUString aCmd( rPopupMenu->getCommand( nId ) );
|
||||||
|
|
||||||
|
if ( !bValidFallback && aCmd.getLength() )
|
||||||
|
{
|
||||||
|
sFallback = aCmd;
|
||||||
|
bValidFallback = sal_True;
|
||||||
|
}
|
||||||
|
|
||||||
|
// match even if the menu command is more detailed
|
||||||
|
// (maybe an additional query) #i28667#
|
||||||
|
if ( aCmd.match( sURL ) )
|
||||||
|
{
|
||||||
|
sURL = aCmd;
|
||||||
|
const css::uno::Reference< css::graphic::XGraphic > xGraphic(
|
||||||
|
rPopupMenu->getItemImage( nId ) );
|
||||||
|
if ( xGraphic.is() )
|
||||||
|
aImage = Image( xGraphic );
|
||||||
|
return sal_True;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !bValidFallback )
|
||||||
|
{
|
||||||
|
OUStringBuffer aBuffer;
|
||||||
|
aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "private:factory/" ) );
|
||||||
|
aBuffer.append( SvtModuleOptions().GetDefaultModuleName() );
|
||||||
|
sFallback = aBuffer.makeStringAndClear();
|
||||||
|
}
|
||||||
|
|
||||||
|
return sal_False;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** We accept URL's here only, which exist as items of our internal popup menu.
|
||||||
|
All other ones will be ignored and a fallback is used.
|
||||||
|
*/
|
||||||
|
void NewToolbarController::setItemImage( const OUString &rCommand )
|
||||||
|
{
|
||||||
|
SolarMutexGuard aSolarLock;
|
||||||
|
ToolBox* pToolBox = static_cast< ToolBox* >( VCLUnoHelper::GetWindow( getParent() ) );
|
||||||
|
if ( !pToolBox )
|
||||||
|
return;
|
||||||
|
|
||||||
|
OUString aURL = rCommand;
|
||||||
|
OUString sFallback;
|
||||||
|
Image aMenuImage;
|
||||||
|
|
||||||
|
sal_Bool bValid( Impl_ExistURLInMenu( m_xPopupMenu, aURL, sFallback, aMenuImage ) );
|
||||||
|
// do not change aURL if Impl_ExistURLInMenu returned sal_False
|
||||||
|
// this allows later initialization of the PopupMenuController on createPopupWindow()
|
||||||
|
// and works even if SvFileInformationManager does not know the module
|
||||||
|
if ( !aURL.getLength() )
|
||||||
|
aURL = sFallback;
|
||||||
|
|
||||||
|
sal_Bool bBig = SvtMiscOptions().AreCurrentSymbolsLarge();
|
||||||
|
|
||||||
|
INetURLObject aURLObj( aURL );
|
||||||
|
Image aImage = SvFileInformationManager::GetImageNoDefault( aURLObj, bBig );
|
||||||
|
if ( !aImage )
|
||||||
|
{
|
||||||
|
if ( !!aMenuImage )
|
||||||
|
aImage = aMenuImage;
|
||||||
|
else if ( !bValid )
|
||||||
|
// If SvFileInformationManager didn't know the module, try with the default
|
||||||
|
aImage = SvFileInformationManager::GetImageNoDefault( INetURLObject( sFallback ), bBig );
|
||||||
|
|
||||||
|
if ( !aImage )
|
||||||
|
aImage = SvFileInformationManager::GetImage( aURLObj, bBig );
|
||||||
|
}
|
||||||
|
|
||||||
|
// if everything failed, just use the image associated with the toolbar item command
|
||||||
|
if ( !aImage )
|
||||||
|
return;
|
||||||
|
|
||||||
|
Size aBigSize( pToolBox->GetDefaultImageSize() );
|
||||||
|
if ( bBig && aImage.GetSizePixel() != aBigSize )
|
||||||
|
{
|
||||||
|
BitmapEx aScaleBmpEx( aImage.GetBitmapEx() );
|
||||||
|
aScaleBmpEx.Scale( aBigSize, BMP_SCALE_INTERPOLATE );
|
||||||
|
pToolBox->SetItemImage( m_nToolBoxId, Image( aScaleBmpEx ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pToolBox->SetItemImage( m_nToolBoxId, aImage );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@@ -137,4 +137,13 @@
|
|||||||
<implementation name="com.sun.star.comp.framework.TabWindowService">
|
<implementation name="com.sun.star.comp.framework.TabWindowService">
|
||||||
<service name="com.sun.star.ui.dialogs.TabContainerWindow"/>
|
<service name="com.sun.star.ui.dialogs.TabContainerWindow"/>
|
||||||
</implementation>
|
</implementation>
|
||||||
|
<implementation name="org.apache.openoffice.comp.framework.OpenToolbarController">
|
||||||
|
<service name="com.sun.star.frame.ToolbarController"/>
|
||||||
|
</implementation>
|
||||||
|
<implementation name="org.apache.openoffice.comp.framework.NewToolbarController">
|
||||||
|
<service name="com.sun.star.frame.ToolbarController"/>
|
||||||
|
</implementation>
|
||||||
|
<implementation name="org.apache.openoffice.comp.framework.WizardsToolbarController">
|
||||||
|
<service name="com.sun.star.frame.ToolbarController"/>
|
||||||
|
</implementation>
|
||||||
</component>
|
</component>
|
||||||
|
@@ -58,9 +58,6 @@
|
|||||||
<implementation name="com.sun.star.comp.framework.OXTFileHandler">
|
<implementation name="com.sun.star.comp.framework.OXTFileHandler">
|
||||||
<service name="com.sun.star.frame.ContentHandler"/>
|
<service name="com.sun.star.frame.ContentHandler"/>
|
||||||
</implementation>
|
</implementation>
|
||||||
<implementation name="com.sun.star.comp.framework.PopupMenuController">
|
|
||||||
<service name="com.sun.star.frame.ToolbarController"/>
|
|
||||||
</implementation>
|
|
||||||
<implementation name="com.sun.star.comp.framework.PopupMenuControllerDispatcher">
|
<implementation name="com.sun.star.comp.framework.PopupMenuControllerDispatcher">
|
||||||
<service name="com.sun.star.frame.ProtocolHandler"/>
|
<service name="com.sun.star.frame.ProtocolHandler"/>
|
||||||
</implementation>
|
</implementation>
|
||||||
|
@@ -561,6 +561,39 @@
|
|||||||
<value>com.sun.star.report.ReportToolboxController</value>
|
<value>com.sun.star.report.ReportToolboxController</value>
|
||||||
</prop>
|
</prop>
|
||||||
</node>
|
</node>
|
||||||
|
<node oor:name="org.apache.openoffice.comp.framework.OpenToolbarController" oor:op="replace">
|
||||||
|
<prop oor:name="Command">
|
||||||
|
<value>.uno:Open</value>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="Module">
|
||||||
|
<value/>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="Controller">
|
||||||
|
<value>org.apache.openoffice.comp.framework.OpenToolbarController</value>
|
||||||
|
</prop>
|
||||||
|
</node>
|
||||||
|
<node oor:name="org.apache.openoffice.comp.framework.NewToolbarController" oor:op="replace">
|
||||||
|
<prop oor:name="Command">
|
||||||
|
<value>.uno:AddDirect</value>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="Module">
|
||||||
|
<value/>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="Controller">
|
||||||
|
<value>org.apache.openoffice.comp.framework.NewToolbarController</value>
|
||||||
|
</prop>
|
||||||
|
</node>
|
||||||
|
<node oor:name="org.apache.openoffice.comp.framework.WizardsToolbarController" oor:op="replace">
|
||||||
|
<prop oor:name="Command">
|
||||||
|
<value>.uno:AutoPilotMenu</value>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="Module">
|
||||||
|
<value/>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="Controller">
|
||||||
|
<value>org.apache.openoffice.comp.framework.WizardsToolbarController</value>
|
||||||
|
</prop>
|
||||||
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node oor:name="StatusBar">
|
<node oor:name="StatusBar">
|
||||||
<node oor:name="c1" oor:op="replace">
|
<node oor:name="c1" oor:op="replace">
|
||||||
|
Reference in New Issue
Block a user