Kill SfxAppToolBoxControl_Impl
(cherry picked from commit 273121f8d7e277e35c8e5a8aad46ef0c103ebc03) Conflicts: sfx2/inc/sfx2/mnuitem.hxx sfx2/inc/sfx2/tbxctrl.hxx sfx2/source/appl/appreg.cxx sfx2/source/menu/mnuitem.cxx sfx2/source/toolbox/tbxitem.cxx Change-Id: I6d0750d89ad009f82c5552d971537b78e45426f2 Silence warning C4706 (cherry picked from commit 0b373b3e4c45d09c40a8949e9366adb9b991de4b) Change-Id: Id497469eba8288565145c47c84b7938a1316c21a
This commit is contained in:
committed by
Caolán McNamara
parent
a089ed2bf9
commit
a1748501d8
@@ -312,7 +312,7 @@ static sal_Bool Impl_ExistURLInMenu(
|
||||
{
|
||||
sal_Bool bValidFallback( sal_False );
|
||||
sal_uInt16 nCount( 0 );
|
||||
if ( rPopupMenu.is() && ( nCount = rPopupMenu->getItemCount() ) && sURL.getLength() )
|
||||
if ( rPopupMenu.is() && ( nCount = rPopupMenu->getItemCount() ) != 0 && sURL.getLength() )
|
||||
{
|
||||
for ( sal_uInt16 n = 0; n < nCount; ++n )
|
||||
{
|
||||
|
@@ -33,6 +33,9 @@ struct SfxMenuCtrlFactory;
|
||||
#include <tools/string.hxx>
|
||||
#include <sfx2/ctrlitem.hxx>
|
||||
|
||||
#include <com/sun/star/frame/XDispatch.hpp>
|
||||
#include <com/sun/star/util/URL.hpp>
|
||||
|
||||
class SFX2_DLLPUBLIC SfxMenuControl: public SfxControllerItem
|
||||
{
|
||||
String aTitle;
|
||||
@@ -116,6 +119,31 @@ inline SfxVirtualMenu* SfxMenuControl::GetPopupMenu() const
|
||||
void Class::RegisterControl(sal_uInt16 nSlotId, SfxModule *pMod) \
|
||||
{ SfxMenuControl::RegisterMenuControl( pMod, new SfxMenuCtrlFactory( \
|
||||
Class::CreateImpl, TYPE(nItemClass), nSlotId ) ); }
|
||||
|
||||
class SfxAppMenuControl_Impl : public SfxMenuControl
|
||||
{
|
||||
PopupMenu* pMenu;
|
||||
sal_uIntPtr m_nSymbolsStyle;
|
||||
sal_Bool m_bShowMenuImages;
|
||||
|
||||
protected:
|
||||
DECL_LINK( Activate, Menu * ); // Needed to support high contrast images
|
||||
|
||||
public:
|
||||
SFX_DECL_MENU_CONTROL();
|
||||
SfxAppMenuControl_Impl( sal_uInt16 nPos, Menu& rMenu, SfxBindings& rBindings );
|
||||
~SfxAppMenuControl_Impl();
|
||||
|
||||
struct ExecuteInfo
|
||||
{
|
||||
::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > xDispatch;
|
||||
::com::sun::star::util::URL aTargetURL;
|
||||
::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > aArgs;
|
||||
};
|
||||
|
||||
DECL_STATIC_LINK( SfxAppMenuControl_Impl, ExecuteHdl_Impl, ExecuteInfo* );
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
|
@@ -313,44 +313,6 @@ public:
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
class SfxAppToolBoxControl_Impl : public SfxToolBoxControl
|
||||
|
||||
/* [Description]
|
||||
|
||||
Internal helper class for the pop-up menu <AppMenu_Impl> under new
|
||||
start in the SDT.
|
||||
*/
|
||||
|
||||
{
|
||||
public:
|
||||
SFX_DECL_TOOLBOX_CONTROL();
|
||||
SfxAppToolBoxControl_Impl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rBox );
|
||||
~SfxAppToolBoxControl_Impl();
|
||||
void SetImage( const String& rFacName );
|
||||
|
||||
struct ExecuteInfo
|
||||
{
|
||||
::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > xDispatch;
|
||||
::com::sun::star::util::URL aTargetURL;
|
||||
::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > aArgs;
|
||||
};
|
||||
|
||||
DECL_STATIC_LINK( SfxAppToolBoxControl_Impl, ExecuteHdl_Impl, ExecuteInfo* );
|
||||
|
||||
protected:
|
||||
virtual void Click();
|
||||
using SfxToolBoxControl::Select;
|
||||
virtual void Select( sal_Bool );
|
||||
virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState );
|
||||
virtual SfxPopupWindow* CreatePopupWindow();
|
||||
DECL_LINK( Activate, Menu * );
|
||||
private:
|
||||
String aLastURL;
|
||||
PopupMenu* pMenu;
|
||||
sal_uIntPtr m_nSymbolsStyle;
|
||||
sal_Bool m_bShowMenuImages;
|
||||
};
|
||||
|
||||
/** Toolbox that implements recent files menu for the Open file toolbar button.
|
||||
|
||||
To use that, the appropriate Sfx*Item (like Open, OpenFromCalc, or
|
||||
|
@@ -62,8 +62,6 @@ void SfxApplication::Registrations_Impl()
|
||||
// Controller
|
||||
SfxToolBoxControl::RegisterControl(SID_REPEAT);
|
||||
SfxURLToolBoxControl_Impl::RegisterControl(SID_OPENURL);
|
||||
SfxAppToolBoxControl_Impl::RegisterControl( SID_NEWDOCDIRECT );
|
||||
SfxAppToolBoxControl_Impl::RegisterControl( SID_AUTOPILOTMENU );
|
||||
SfxRecentFilesToolBoxControl::RegisterControl( SID_OPENDOC );
|
||||
};
|
||||
|
||||
|
@@ -24,13 +24,15 @@
|
||||
|
||||
#include <string>
|
||||
#include <com/sun/star/uno/Reference.h>
|
||||
#include <com/sun/star/beans/PropertyValue.hpp>
|
||||
#include <com/sun/star/frame/Desktop.hpp>
|
||||
#include <com/sun/star/frame/XDispatch.hpp>
|
||||
#include <com/sun/star/frame/XDispatchProvider.hpp>
|
||||
#include <com/sun/star/frame/XFrame.hpp>
|
||||
#include <com/sun/star/util/URL.hpp>
|
||||
#include <com/sun/star/beans/PropertyValue.hpp>
|
||||
#include <comphelper/processfactory.hxx>
|
||||
#include <com/sun/star/util/URLTransformer.hpp>
|
||||
#include <com/sun/star/util/XURLTransformer.hpp>
|
||||
#include <comphelper/processfactory.hxx>
|
||||
#include <tools/urlobj.hxx>
|
||||
#include <svl/eitem.hxx>
|
||||
#include <svl/stritem.hxx>
|
||||
@@ -291,6 +293,99 @@ PopupMenu* SfxMenuControl::GetPopup () const
|
||||
return 0;
|
||||
}
|
||||
|
||||
long Select_Impl( void* pHdl, void* pVoid );
|
||||
|
||||
SFX_IMPL_MENU_CONTROL( SfxAppMenuControl_Impl, SfxStringItem );
|
||||
|
||||
SfxAppMenuControl_Impl::SfxAppMenuControl_Impl(
|
||||
sal_uInt16 nPos, Menu& rMenu, SfxBindings& rBindings )
|
||||
: SfxMenuControl( nPos, rBindings ), pMenu(0)
|
||||
{
|
||||
String aText = rMenu.GetItemText( nPos );
|
||||
|
||||
// Determine the current background color setting for menus
|
||||
const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings();
|
||||
m_nSymbolsStyle = rSettings.GetSymbolsStyle();
|
||||
m_bShowMenuImages = rSettings.GetUseImagesInMenus();
|
||||
|
||||
::framework::MenuConfiguration aConf( ::comphelper::getProcessComponentContext() );
|
||||
Reference<com::sun::star::frame::XFrame> aXFrame( GetBindings().GetDispatcher_Impl()->GetFrame()->GetFrame().GetFrameInterface() );
|
||||
pMenu = aConf.CreateBookmarkMenu( aXFrame, GetId() == SID_NEWDOCDIRECT ? BOOKMARK_NEWMENU : BOOKMARK_WIZARDMENU );
|
||||
if( pMenu )
|
||||
{
|
||||
pMenu->SetSelectHdl( Link( &(this->GetBindings()), Select_Impl ) );
|
||||
pMenu->SetActivateHdl( LINK(this, SfxAppMenuControl_Impl, Activate) );
|
||||
rMenu.SetPopupMenu( nPos, pMenu );
|
||||
}
|
||||
}
|
||||
|
||||
SfxAppMenuControl_Impl::~SfxAppMenuControl_Impl()
|
||||
{
|
||||
delete pMenu;
|
||||
}
|
||||
|
||||
IMPL_LINK( SfxAppMenuControl_Impl, Activate, Menu *, pActMenu )
|
||||
{
|
||||
if ( pActMenu )
|
||||
{
|
||||
const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings();
|
||||
sal_uIntPtr nSymbolsStyle = rSettings.GetSymbolsStyle();
|
||||
sal_Bool bShowMenuImages = rSettings.GetUseImagesInMenus();
|
||||
|
||||
if (( nSymbolsStyle != m_nSymbolsStyle ) ||
|
||||
( bShowMenuImages != m_bShowMenuImages ))
|
||||
{
|
||||
m_nSymbolsStyle = nSymbolsStyle;
|
||||
m_bShowMenuImages = bShowMenuImages;
|
||||
|
||||
sal_uInt16 nCount = pActMenu->GetItemCount();
|
||||
for ( sal_uInt16 nSVPos = 0; nSVPos < nCount; nSVPos++ )
|
||||
{
|
||||
sal_uInt16 nItemId = pActMenu->GetItemId( nSVPos );
|
||||
if ( pActMenu->GetItemType( nSVPos ) != MENUITEM_SEPARATOR )
|
||||
{
|
||||
if ( bShowMenuImages )
|
||||
{
|
||||
sal_Bool bImageSet = sal_False;
|
||||
::rtl::OUString aImageId;
|
||||
::framework::MenuConfiguration::Attributes* pMenuAttributes =
|
||||
(::framework::MenuConfiguration::Attributes*)pMenu->GetUserValue( nItemId );
|
||||
|
||||
if ( pMenuAttributes )
|
||||
aImageId = pMenuAttributes->aImageId; // Retrieve image id from menu attributes
|
||||
|
||||
if ( aImageId.getLength() > 0 )
|
||||
{
|
||||
Reference< ::com::sun::star::frame::XFrame > xFrame;
|
||||
Image aImage = GetImage( xFrame, aImageId, sal_False );
|
||||
if ( !!aImage )
|
||||
{
|
||||
bImageSet = sal_True;
|
||||
pActMenu->SetItemImage( nItemId, aImage );
|
||||
}
|
||||
}
|
||||
|
||||
String aCmd( pActMenu->GetItemCommand( nItemId ) );
|
||||
if ( !bImageSet && aCmd.Len() )
|
||||
{
|
||||
Image aImage = SvFileInformationManager::GetImage(
|
||||
INetURLObject(aCmd), sal_False );
|
||||
if ( !!aImage )
|
||||
pActMenu->SetItemImage( nItemId, aImage );
|
||||
}
|
||||
}
|
||||
else
|
||||
pActMenu->SetItemImage( nItemId, Image() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sal_True;
|
||||
}
|
||||
|
||||
return sal_False;
|
||||
}
|
||||
|
||||
SfxUnoMenuControl* SfxMenuControl::CreateControl( const String& rCmd,
|
||||
sal_uInt16 nId, Menu& rMenu, const String& sItemText,
|
||||
SfxBindings& rBindings, SfxVirtualMenu* pVirt)
|
||||
@@ -317,4 +412,54 @@ SfxUnoMenuControl::~SfxUnoMenuControl()
|
||||
pUnoCtrl->release();
|
||||
}
|
||||
|
||||
long Select_Impl( void* /*pHdl*/, void* pVoid )
|
||||
{
|
||||
Menu* pMenu = (Menu*)pVoid;
|
||||
String aURL( pMenu->GetItemCommand( pMenu->GetCurItemId() ) );
|
||||
|
||||
if( !aURL.Len() )
|
||||
return 0;
|
||||
|
||||
Reference < ::com::sun::star::frame::XDesktop2 > xDesktop =
|
||||
::com::sun::star::frame::Desktop::create( ::comphelper::getProcessComponentContext() );
|
||||
|
||||
URL aTargetURL;
|
||||
aTargetURL.Complete = aURL;
|
||||
Reference < XURLTransformer > xTrans( URLTransformer::create( ::comphelper::getProcessComponentContext() ) );
|
||||
xTrans->parseStrict( aTargetURL );
|
||||
|
||||
Reference < XDispatch > xDisp;
|
||||
if ( aTargetURL.Protocol.compareToAscii("slot:") == COMPARE_EQUAL )
|
||||
xDisp = xDesktop->queryDispatch( aTargetURL, OUString(), 0 );
|
||||
else
|
||||
{
|
||||
OUString aTargetFrame( OUString("_blank") );
|
||||
::framework::MenuConfiguration::Attributes* pMenuAttributes =
|
||||
(::framework::MenuConfiguration::Attributes*)pMenu->GetUserValue( pMenu->GetCurItemId() );
|
||||
|
||||
if ( pMenuAttributes )
|
||||
aTargetFrame = pMenuAttributes->aTargetFrame;
|
||||
|
||||
xDisp = xDesktop->queryDispatch( aTargetURL, aTargetFrame , 0 );
|
||||
}
|
||||
|
||||
if ( xDisp.is() )
|
||||
{
|
||||
SfxAppMenuControl_Impl::ExecuteInfo* pExecuteInfo = new SfxAppMenuControl_Impl::ExecuteInfo;
|
||||
pExecuteInfo->xDispatch = xDisp;
|
||||
pExecuteInfo->aTargetURL = aTargetURL;
|
||||
pExecuteInfo->aArgs = Sequence< PropertyValue >();
|
||||
Application::PostUserEvent( STATIC_LINK( 0, SfxAppMenuControl_Impl, ExecuteHdl_Impl), pExecuteInfo );
|
||||
}
|
||||
|
||||
return sal_True;
|
||||
}
|
||||
|
||||
IMPL_STATIC_LINK_NOINSTANCE( SfxAppMenuControl_Impl, ExecuteHdl_Impl, ExecuteInfo*, pExecuteInfo )
|
||||
{
|
||||
pExecuteInfo->xDispatch->dispatch( pExecuteInfo->aTargetURL, pExecuteInfo->aArgs );
|
||||
delete pExecuteInfo;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
|
@@ -108,7 +108,6 @@ using namespace ::com::sun::star::ui;
|
||||
//====================================================================
|
||||
|
||||
SFX_IMPL_TOOLBOX_CONTROL_ARG(SfxToolBoxControl, SfxStringItem, sal_True);
|
||||
SFX_IMPL_TOOLBOX_CONTROL(SfxAppToolBoxControl_Impl, SfxStringItem);
|
||||
SFX_IMPL_TOOLBOX_CONTROL(SfxRecentFilesToolBoxControl, SfxStringItem);
|
||||
|
||||
static Window* GetTopMostParentSystemWindow( Window* pWindow )
|
||||
@@ -1392,362 +1391,6 @@ void SfxPopupWindow::Delete()
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
SfxAppToolBoxControl_Impl::SfxAppToolBoxControl_Impl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rBox )
|
||||
: SfxToolBoxControl( nSlotId, nId, rBox )
|
||||
, pMenu( 0 )
|
||||
{
|
||||
rBox.SetHelpId( nId, HID_TBXCONTROL_FILENEW );
|
||||
rBox.SetItemBits( nId, rBox.GetItemBits( nId ) | TIB_DROPDOWN);
|
||||
|
||||
// Determine the current background color of the menus
|
||||
const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings();
|
||||
m_nSymbolsStyle = rSettings.GetSymbolsStyle();
|
||||
m_bShowMenuImages = rSettings.GetUseImagesInMenus();
|
||||
|
||||
SetImage( String() );
|
||||
}
|
||||
|
||||
SfxAppToolBoxControl_Impl::~SfxAppToolBoxControl_Impl()
|
||||
{
|
||||
delete pMenu;
|
||||
}
|
||||
|
||||
//_____________________________________________________
|
||||
/*
|
||||
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 *pMenu
|
||||
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 pFallback
|
||||
contains the fallback URL in case we return FALSE
|
||||
Must point to valid memory!
|
||||
|
||||
@param pImage
|
||||
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 - otherwise.
|
||||
*/
|
||||
sal_Bool Impl_ExistURLInMenu( const PopupMenu *pMenu ,
|
||||
String &sURL ,
|
||||
String *pFallback ,
|
||||
Image *pImage )
|
||||
{
|
||||
sal_Bool bValidFallback = sal_False;
|
||||
if (pMenu && sURL.Len())
|
||||
{
|
||||
sal_uInt16 c = pMenu->GetItemCount();
|
||||
for (sal_uInt16 p=0; p<c; ++p)
|
||||
{
|
||||
sal_uInt16 nId = pMenu->GetItemId(p);
|
||||
String aCmd( pMenu->GetItemCommand(nId) );
|
||||
|
||||
if (!bValidFallback && aCmd.Len())
|
||||
{
|
||||
*pFallback = aCmd;
|
||||
bValidFallback = sal_True;
|
||||
}
|
||||
|
||||
if (aCmd.Search(sURL)==0)//match even if the menu command is more detailed (maybe an additional query) #i28667#
|
||||
{
|
||||
sURL = aCmd;
|
||||
*pImage = pMenu->GetItemImage( nId );
|
||||
return sal_True;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!bValidFallback)
|
||||
{
|
||||
*pFallback = "private:factory/" + SvtModuleOptions().GetDefaultModuleName();
|
||||
}
|
||||
|
||||
return sal_False;
|
||||
}
|
||||
|
||||
long Select_Impl( void* pHdl, void* pVoid );
|
||||
|
||||
SfxPopupWindow* SfxAppToolBoxControl_Impl::CreatePopupWindow()
|
||||
{
|
||||
ToolBox& rBox = GetToolBox();
|
||||
::Rectangle aRect( rBox.GetItemRect( GetId() ) );
|
||||
|
||||
if ( !pMenu )
|
||||
{
|
||||
::framework::MenuConfiguration aConf( m_xContext );
|
||||
if ( m_aCommandURL == ".uno:AddDirect" )
|
||||
pMenu = aConf.CreateBookmarkMenu( m_xFrame, BOOKMARK_NEWMENU );
|
||||
else
|
||||
pMenu = aConf.CreateBookmarkMenu( m_xFrame, BOOKMARK_WIZARDMENU );
|
||||
}
|
||||
|
||||
if ( pMenu )
|
||||
{
|
||||
pMenu->SetSelectHdl( Link( NULL, Select_Impl ) );
|
||||
pMenu->SetActivateHdl( LINK( this, SfxAppToolBoxControl_Impl, Activate ));
|
||||
rBox.SetItemDown( GetId(), sal_True );
|
||||
sal_uInt16 nSelected = pMenu->Execute( &rBox, aRect, POPUPMENU_EXECUTE_DOWN );
|
||||
if ( nSelected )
|
||||
{
|
||||
aLastURL = pMenu->GetItemCommand( nSelected );
|
||||
SetImage( pMenu->GetItemCommand( nSelected ) );
|
||||
}
|
||||
|
||||
rBox.SetItemDown( GetId(), sal_False );
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SfxAppToolBoxControl_Impl::SetImage( const String &rURL )
|
||||
{
|
||||
/* 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 ... */
|
||||
String aURL = rURL;
|
||||
String sFallback;
|
||||
Image aMenuImage;
|
||||
sal_Bool bValid = Impl_ExistURLInMenu(pMenu,aURL,&sFallback,&aMenuImage);
|
||||
if (!bValid)
|
||||
aURL = sFallback;
|
||||
|
||||
sal_Bool bBig = SvtMiscOptions().AreCurrentSymbolsLarge();
|
||||
Image aImage = SvFileInformationManager::GetImageNoDefault( INetURLObject( aURL ), bBig );
|
||||
if ( !aImage )
|
||||
aImage = !!aMenuImage ? aMenuImage :
|
||||
SvFileInformationManager::GetImage( INetURLObject( aURL ), bBig );
|
||||
Size aBigSize( GetToolBox().GetDefaultImageSize() );
|
||||
if ( bBig && aImage.GetSizePixel() != aBigSize )
|
||||
{
|
||||
BitmapEx aScaleBmpEx( aImage.GetBitmapEx() );
|
||||
aScaleBmpEx.Scale( aBigSize, BMP_SCALE_BESTQUALITY );
|
||||
GetToolBox().SetItemImage( GetId(), Image( aScaleBmpEx ) );
|
||||
}
|
||||
else
|
||||
GetToolBox().SetItemImage( GetId(), aImage );
|
||||
aLastURL = aURL;
|
||||
}
|
||||
|
||||
void SfxAppToolBoxControl_Impl::StateChanged
|
||||
(
|
||||
sal_uInt16 nSlotId,
|
||||
SfxItemState eState,
|
||||
const SfxPoolItem* pState
|
||||
)
|
||||
{
|
||||
if ( pState && pState->ISA(SfxStringItem) )
|
||||
{
|
||||
// Important step for following SetImage() call!
|
||||
// It needs the valid pMenu item to fullfill it's specification
|
||||
// to check for supported URLs ...
|
||||
if ( !pMenu )
|
||||
{
|
||||
::framework::MenuConfiguration aConf( m_xContext );
|
||||
// This toolbox controller is used for two popup menus (new documents and wizards!). Create the correct
|
||||
// popup menu according to the slot ID our controller has been initialized with.
|
||||
if ( nSlotId == SID_NEWDOCDIRECT )
|
||||
pMenu = aConf.CreateBookmarkMenu( m_xFrame, BOOKMARK_NEWMENU );
|
||||
else
|
||||
pMenu = aConf.CreateBookmarkMenu( m_xFrame, BOOKMARK_WIZARDMENU );
|
||||
}
|
||||
|
||||
GetToolBox().EnableItem( GetId(), eState != SFX_ITEM_DISABLED );
|
||||
SetImage(((const SfxStringItem*)pState)->GetValue());
|
||||
}
|
||||
else
|
||||
SfxToolBoxControl::StateChanged( nSlotId, eState, pState );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
void SfxAppToolBoxControl_Impl::Select( sal_Bool bMod1 )
|
||||
{
|
||||
if( aLastURL.Len() )
|
||||
{
|
||||
URL aTargetURL;
|
||||
Reference< XDispatch > xDispatch;
|
||||
Reference< XDispatchProvider > xDispatchProvider( getFrameInterface(), UNO_QUERY );
|
||||
|
||||
if ( xDispatchProvider.is() )
|
||||
{
|
||||
aTargetURL.Complete = aLastURL;
|
||||
getURLTransformer()->parseStrict( aTargetURL );
|
||||
|
||||
OUString aTarget( OUString("_default"));
|
||||
if ( pMenu )
|
||||
{
|
||||
::framework::MenuConfiguration::Attributes* pMenuAttributes =
|
||||
(::framework::MenuConfiguration::Attributes*)pMenu->GetUserValue( pMenu->GetCurItemId() );
|
||||
|
||||
if ( pMenuAttributes )
|
||||
aTarget = pMenuAttributes->aTargetFrame;
|
||||
}
|
||||
|
||||
xDispatch = xDispatchProvider->queryDispatch( aTargetURL, aTarget, 0 );
|
||||
|
||||
if ( xDispatch.is() )
|
||||
{
|
||||
Sequence< PropertyValue > aArgs( 1 );
|
||||
|
||||
aArgs[0].Name = OUString("Referer");
|
||||
aArgs[0].Value = makeAny( OUString(SFX_REFERER_USER ) );
|
||||
|
||||
ExecuteInfo* pExecuteInfo = new ExecuteInfo;
|
||||
pExecuteInfo->xDispatch = xDispatch;
|
||||
pExecuteInfo->aTargetURL = aTargetURL;
|
||||
pExecuteInfo->aArgs = aArgs;
|
||||
Application::PostUserEvent( STATIC_LINK(0, SfxAppToolBoxControl_Impl, ExecuteHdl_Impl), pExecuteInfo );
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
SfxToolBoxControl::Select( bMod1 );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
long Select_Impl( void* /*pHdl*/, void* pVoid )
|
||||
{
|
||||
Menu* pMenu = (Menu*)pVoid;
|
||||
String aURL( pMenu->GetItemCommand( pMenu->GetCurItemId() ) );
|
||||
|
||||
if( !aURL.Len() )
|
||||
return 0;
|
||||
|
||||
Reference < ::com::sun::star::frame::XDesktop2 > xDesktop =
|
||||
::com::sun::star::frame::Desktop::create( ::comphelper::getProcessComponentContext() );
|
||||
|
||||
URL aTargetURL;
|
||||
aTargetURL.Complete = aURL;
|
||||
Reference < XURLTransformer > xTrans( URLTransformer::create( ::comphelper::getProcessComponentContext() ) );
|
||||
xTrans->parseStrict( aTargetURL );
|
||||
|
||||
Reference < XDispatch > xDisp;
|
||||
if ( aTargetURL.Protocol.compareToAscii("slot:") == COMPARE_EQUAL )
|
||||
xDisp = xDesktop->queryDispatch( aTargetURL, OUString(), 0 );
|
||||
else
|
||||
{
|
||||
OUString aTargetFrame( OUString("_blank") );
|
||||
::framework::MenuConfiguration::Attributes* pMenuAttributes =
|
||||
(::framework::MenuConfiguration::Attributes*)pMenu->GetUserValue( pMenu->GetCurItemId() );
|
||||
|
||||
if ( pMenuAttributes )
|
||||
aTargetFrame = pMenuAttributes->aTargetFrame;
|
||||
|
||||
xDisp = xDesktop->queryDispatch( aTargetURL, aTargetFrame , 0 );
|
||||
}
|
||||
|
||||
if ( xDisp.is() )
|
||||
{
|
||||
SfxAppToolBoxControl_Impl::ExecuteInfo* pExecuteInfo = new SfxAppToolBoxControl_Impl::ExecuteInfo;
|
||||
pExecuteInfo->xDispatch = xDisp;
|
||||
pExecuteInfo->aTargetURL = aTargetURL;
|
||||
pExecuteInfo->aArgs = Sequence< PropertyValue >();
|
||||
Application::PostUserEvent( STATIC_LINK( 0, SfxAppToolBoxControl_Impl, ExecuteHdl_Impl), pExecuteInfo );
|
||||
}
|
||||
|
||||
return sal_True;
|
||||
}
|
||||
|
||||
IMPL_LINK( SfxAppToolBoxControl_Impl, Activate, Menu *, pActMenu )
|
||||
{
|
||||
if ( pActMenu )
|
||||
{
|
||||
const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings();
|
||||
sal_uIntPtr nSymbolsStyle = rSettings.GetSymbolsStyle();
|
||||
sal_Bool bShowMenuImages = rSettings.GetUseImagesInMenus();
|
||||
|
||||
if (( nSymbolsStyle != m_nSymbolsStyle ) ||
|
||||
( bShowMenuImages != m_bShowMenuImages ))
|
||||
{
|
||||
m_nSymbolsStyle = nSymbolsStyle;
|
||||
m_bShowMenuImages = bShowMenuImages;
|
||||
|
||||
sal_uInt16 nCount = pActMenu->GetItemCount();
|
||||
for ( sal_uInt16 nSVPos = 0; nSVPos < nCount; nSVPos++ )
|
||||
{
|
||||
sal_uInt16 nId = pActMenu->GetItemId( nSVPos );
|
||||
if ( pActMenu->GetItemType( nSVPos ) != MENUITEM_SEPARATOR )
|
||||
{
|
||||
if ( bShowMenuImages )
|
||||
{
|
||||
sal_Bool bImageSet = sal_False;
|
||||
OUString aImageId;
|
||||
::framework::MenuConfiguration::Attributes* pMenuAttributes =
|
||||
(::framework::MenuConfiguration::Attributes*)pMenu->GetUserValue( nId );
|
||||
|
||||
if ( pMenuAttributes )
|
||||
aImageId = pMenuAttributes->aImageId; // Retrieve image id from menu attributes
|
||||
|
||||
if ( !aImageId.isEmpty() )
|
||||
{
|
||||
Reference< ::com::sun::star::frame::XFrame > xFrame;
|
||||
Image aImage = GetImage( xFrame, aImageId, false );
|
||||
if ( !!aImage )
|
||||
{
|
||||
bImageSet = sal_True;
|
||||
pActMenu->SetItemImage( nId, aImage );
|
||||
}
|
||||
}
|
||||
|
||||
String aCmd( pActMenu->GetItemCommand( nId ) );
|
||||
if ( !bImageSet && aCmd.Len() )
|
||||
{
|
||||
Image aImage = SvFileInformationManager::GetImage(
|
||||
INetURLObject(aCmd), false );
|
||||
if ( !!aImage )
|
||||
pActMenu->SetItemImage( nId, aImage );
|
||||
}
|
||||
}
|
||||
else
|
||||
pActMenu->SetItemImage( nId, Image() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sal_True;
|
||||
}
|
||||
|
||||
return sal_False;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
IMPL_STATIC_LINK_NOINSTANCE( SfxAppToolBoxControl_Impl, ExecuteHdl_Impl, ExecuteInfo*, pExecuteInfo )
|
||||
{
|
||||
/* i62706: Don't catch all exceptions. We hide all problems here and are not able
|
||||
to handle them on higher levels.
|
||||
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 );
|
||||
delete pExecuteInfo;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
void SfxAppToolBoxControl_Impl::Click( )
|
||||
{
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
SfxRecentFilesToolBoxControl::SfxRecentFilesToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rBox )
|
||||
: SfxToolBoxControl( nSlotId, nId, rBox )
|
||||
{
|
||||
|
Reference in New Issue
Block a user