Kaydet (Commit) f60424b2 authored tarafından Jan Holesovsky's avatar Jan Holesovsky

bnc#816516: Implement easy access to the recent documents.

This adds a dropdown to the 'Open' toolbar tool.

Change-Id: I5b4aa99476e721c1479152b46bbc79cc0b095318
üst f486c562
......@@ -162,7 +162,7 @@ public:
#define SFX_DECL_TOOLBOX_CONTROL() \
static SfxToolBoxControl* CreateImpl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox &rTbx ); \
static void RegisterControl(sal_uInt16 nSlotId = 0, SfxModule *pMod=NULL)
static void SFX2_DLLPUBLIC RegisterControl(sal_uInt16 nSlotId = 0, SfxModule *pMod=NULL)
/* For special ToolBox controls, such as a font selection box or toolbox
tear-off floating windows, an appropriate Item-Subclass of SfxTooBoxControl
......@@ -351,6 +351,23 @@ private:
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
OpenFromWriter) has to have SlotType = SfxStringItem, and the appropriate
module initialization has to call RegisterControl().
*/
class SfxRecentFilesToolBoxControl : public SfxToolBoxControl
{
public:
SFX_DECL_TOOLBOX_CONTROL();
SfxRecentFilesToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rBox );
virtual ~SfxRecentFilesToolBoxControl();
protected:
virtual SfxPopupWindow* CreatePopupWindow();
};
class SfxReloadToolBoxControl_Impl : public SfxToolBoxControl
{
protected:
......
......@@ -8333,6 +8333,9 @@ SfxVoidItem OpenFromCalc SID_OPEN_CALC
RecordPerSet;
Synchron;
/* status: */
SlotType = SfxStringItem
/* config: */
AccelConfig = TRUE,
MenuConfig = TRUE,
......
......@@ -172,6 +172,8 @@ void ScDLL::Init()
ScMediaShell ::RegisterInterface(pMod);
ScPageBreakShell ::RegisterInterface(pMod);
SfxRecentFilesToolBoxControl::RegisterControl(SID_OPEN_CALC, pMod);
// eigene Controller
ScTbxInsertCtrl ::RegisterControl(SID_TBXCTL_INSERT, pMod);
ScTbxInsertCtrl ::RegisterControl(SID_TBXCTL_INSCELLS, pMod);
......
......@@ -4358,6 +4358,9 @@ SfxObjectItem Open SID_OPENDOC
RecordPerSet;
Asynchron;
/* status: */
SlotType = SfxStringItem
/* config: */
AccelConfig = TRUE,
MenuConfig = TRUE,
......
......@@ -64,6 +64,7 @@ void SfxApplication::Registrations_Impl()
SfxURLToolBoxControl_Impl::RegisterControl(SID_OPENURL);
SfxAppToolBoxControl_Impl::RegisterControl( SID_NEWDOCDIRECT );
SfxAppToolBoxControl_Impl::RegisterControl( SID_AUTOPILOTMENU );
SfxRecentFilesToolBoxControl::RegisterControl( SID_OPENDOC );
};
//--------------------------------------------------------------------
......
......@@ -25,7 +25,9 @@
#include <string> // prevent conflict with STL includes
#include <com/sun/star/uno/Reference.h>
#include <com/sun/star/frame/XFrame.hpp>
#include <com/sun/star/awt/XPopupMenu.hpp>
#include <com/sun/star/awt/XWindow.hpp>
#include <com/sun/star/awt/XWindowPeer.hpp>
#include <com/sun/star/util/URL.hpp>
#include <com/sun/star/util/URLTransformer.hpp>
#include <com/sun/star/util/XURLTransformer.hpp>
......@@ -38,6 +40,7 @@
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/frame/XLayoutManager.hpp>
#include <com/sun/star/frame/XPopupMenuController.hpp>
#include <com/sun/star/frame/status/ItemStatus.hpp>
#include <com/sun/star/frame/status/ItemState.hpp>
#include <com/sun/star/ui/XUIElementFactory.hpp>
......@@ -92,6 +95,7 @@
#include "virtmenu.hxx"
#include "sfx2/imagemgr.hxx"
using namespace ::com::sun::star;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::frame;
using namespace ::com::sun::star::frame::status;
......@@ -105,6 +109,7 @@ 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 )
{
......@@ -1741,4 +1746,55 @@ void SfxAppToolBoxControl_Impl::Click( )
{
}
//--------------------------------------------------------------------
SfxRecentFilesToolBoxControl::SfxRecentFilesToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rBox )
: SfxToolBoxControl( nSlotId, nId, rBox )
{
rBox.SetItemBits( nId, rBox.GetItemBits( nId ) | TIB_DROPDOWN);
}
SfxRecentFilesToolBoxControl::~SfxRecentFilesToolBoxControl()
{
}
SfxPopupWindow* SfxRecentFilesToolBoxControl::CreatePopupWindow()
{
ToolBox& rBox = GetToolBox();
sal_uInt16 nItemId = GetId();
::Rectangle aRect( rBox.GetItemRect( nItemId ) );
Sequence< Any > aArgs( 2 );
PropertyValue aPropValue;
aPropValue.Name = "CommandURL";
aPropValue.Value <<= OUString( ".uno:RecentFileList" );
aArgs[0] <<= aPropValue;
aPropValue.Name = "Frame";
aPropValue.Value <<= m_xFrame;
aArgs[1] <<= aPropValue;
uno::Reference< frame::XPopupMenuController > xPopupController( m_xContext->getServiceManager()->createInstanceWithArgumentsAndContext(
"com.sun.star.comp.framework.RecentFilesMenuController", aArgs, m_xContext ), UNO_QUERY );
uno::Reference< awt::XPopupMenu > xPopupMenu( m_xContext->getServiceManager()->createInstanceWithContext(
"com.sun.star.awt.PopupMenu", m_xContext ), uno::UNO_QUERY );
if ( xPopupController.is() && xPopupMenu.is() )
{
xPopupController->setPopupMenu( xPopupMenu );
rBox.SetItemDown( nItemId, sal_True );
Reference< awt::XWindowPeer > xPeer( getParent(), uno::UNO_QUERY );
if ( xPeer.is() )
xPopupMenu->execute( xPeer, VCLUnoHelper::ConvertToAWTRect( aRect ), 0 );
rBox.SetItemDown( nItemId, sal_False );
}
return 0;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -10401,6 +10401,9 @@ SfxVoidItem OpenFromWriter FN_OPEN_FILE
RecordPerSet;
Synchron;
/* status: */
SlotType = SfxStringItem
/* config: */
AccelConfig = TRUE,
MenuConfig = TRUE,
......
......@@ -292,6 +292,8 @@ void SwDLL::RegisterInterfaces()
void SwDLL::RegisterControls()
{
SwModule* pMod = SW_MOD();
SfxRecentFilesToolBoxControl::RegisterControl( FN_OPEN_FILE, pMod );
SvxTbxCtlDraw::RegisterControl(SID_INSERT_DRAW, pMod );
SvxTbxCtlAlign::RegisterControl(SID_OBJECT_ALIGN, pMod );
SwTbxAnchor::RegisterControl(FN_TOOL_ANCHOR, pMod );
......
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