move backing component dnd support into the large thumbnail areas

of the backing window

Change-Id: Icf399a8834a25de43909769be08854134991885a
This commit is contained in:
Caolán McNamara
2013-09-06 13:55:59 +01:00
parent f96771165e
commit e7dd69d97a
4 changed files with 53 additions and 31 deletions

View File

@@ -73,9 +73,6 @@ class BackingComp : public css::lang::XTypeProvider
/** the owner frame of this component. */
css::uno::Reference< css::frame::XFrame > m_xFrame;
/** helper for drag&drop. */
css::uno::Reference< css::datatransfer::dnd::XDropTargetListener > m_xDropTargetListener;
//______________________________________
// interface

View File

@@ -21,8 +21,6 @@
#include "backingwindow.hxx"
#include <svtools/openfiledroptargetlistener.hxx>
#include <helpid.hrc>
#include <com/sun/star/beans/NamedValue.hpp>
@@ -31,7 +29,6 @@
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/awt/Toolkit.hpp>
#include <com/sun/star/awt/XDataTransferProviderAccess.hpp>
#include <com/sun/star/datatransfer/dnd/XDropTarget.hpp>
#include <com/sun/star/awt/KeyEvent.hpp>
#include <com/sun/star/awt/KeyModifier.hpp>
#include <com/sun/star/frame/XLayoutManager.hpp>
@@ -453,18 +450,6 @@ void SAL_CALL BackingComp::attachFrame( /*IN*/ const css::uno::Reference< css::f
// safe the frame reference
m_xFrame = xFrame;
// establish drag&drop mode
OpenFileDropTargetListener* pDropListener = new OpenFileDropTargetListener( m_xContext, m_xFrame);
m_xDropTargetListener = css::uno::Reference< css::datatransfer::dnd::XDropTargetListener >(static_cast< ::cppu::OWeakObject* >(pDropListener), css::uno::UNO_QUERY);
css::uno::Reference< css::awt::XToolkit2 > xToolkit = css::awt::Toolkit::create( m_xContext );
css::uno::Reference< css::datatransfer::dnd::XDropTarget > xDropTarget = xToolkit->getDropTarget(m_xWindow);
if (xDropTarget.is())
{
xDropTarget->addDropTargetListener(m_xDropTargetListener);
xDropTarget->setActive(sal_True);
}
// initialize the component and it's parent window
css::uno::Reference< css::awt::XWindow > xParentWindow = xFrame->getContainerWindow();
WorkWindow* pParent = (WorkWindow*)VCLUnoHelper::GetWindow(xParentWindow);
@@ -668,19 +653,6 @@ void SAL_CALL BackingComp::dispose()
xDispatch->dispatch(aURL, css::uno::Sequence< css::beans::PropertyValue>());
}
// deregister drag&drop helper
if (m_xDropTargetListener.is())
{
css::uno::Reference< css::awt::XToolkit2 > xToolkit = css::awt::Toolkit::create( m_xContext );
css::uno::Reference< css::datatransfer::dnd::XDropTarget > xDropTarget = xToolkit->getDropTarget(m_xWindow);
if (xDropTarget.is())
{
xDropTarget->removeDropTargetListener(m_xDropTargetListener);
xDropTarget->setActive(sal_False);
}
m_xDropTargetListener = css::uno::Reference< css::datatransfer::dnd::XDropTargetListener >();
}
// stop listening at the window
if (m_xWindow.is())
{

View File

@@ -24,6 +24,7 @@
#include <unotools/dynamicmenuoptions.hxx>
#include <svtools/langhelp.hxx>
#include <svtools/openfiledroptargetlistener.hxx>
#include <svtools/colorcfg.hxx>
#include <comphelper/processfactory.hxx>
@@ -127,6 +128,18 @@ BackingWindow::BackingWindow( Window* i_pParent ) :
get( mpImpressTemplateThumbnails, "impress_templates");
get( mpDrawTemplateThumbnails, "draw_templates");
maDndWindows.push_back(mpAllRecentThumbnails);
maDndWindows.push_back(mpWriterRecentThumbnails);
maDndWindows.push_back(mpCalcRecentThumbnails);
maDndWindows.push_back(mpImpressRecentThumbnails);
maDndWindows.push_back(mpDrawRecentThumbnails);
maDndWindows.push_back(mpDatabaseRecentThumbnails);
maDndWindows.push_back(mpMathRecentThumbnails);
maDndWindows.push_back(mpWriterTemplateThumbnails);
maDndWindows.push_back(mpCalcTemplateThumbnails);
maDndWindows.push_back(mpImpressTemplateThumbnails);
maDndWindows.push_back(mpDrawTemplateThumbnails);
try
{
mxContext.set( ::comphelper::getProcessComponentContext(), uno::UNO_SET_THROW );
@@ -188,6 +201,25 @@ BackingWindow::~BackingWindow()
mpCalcTemplateThumbnails ->setOpenTemplateHdl(Link());
mpImpressTemplateThumbnails ->setOpenTemplateHdl(Link());
mpDrawTemplateThumbnails ->setOpenTemplateHdl(Link());
// deregister drag&drop helper
if (mxDropTargetListener.is())
{
for (std::vector<Window*>::iterator aI = maDndWindows.begin(),
aEnd = maDndWindows.end(); aI != aEnd; ++aI)
{
Window *pDndWin = *aI;
css::uno::Reference< css::datatransfer::dnd::XDropTarget > xDropTarget =
pDndWin->GetDropTarget();
if (xDropTarget.is())
{
xDropTarget->removeDropTargetListener(mxDropTargetListener);
xDropTarget->setActive(false);
}
}
mxDropTargetListener = css::uno::Reference< css::datatransfer::dnd::XDropTargetListener >();
}
}
IMPL_LINK( BackingWindow, WindowEventListener, VclSimpleEvent*, pEvent )
@@ -416,6 +448,22 @@ void BackingWindow::setOwningFrame( const com::sun::star::uno::Reference< com::s
mxFrame = xFrame;
if( ! mbInitControls )
initControls();
// establish drag&drop mode
mxDropTargetListener.set(new OpenFileDropTargetListener(mxContext, mxFrame));
for (std::vector<Window*>::iterator aI = maDndWindows.begin(),
aEnd = maDndWindows.end(); aI != aEnd; ++aI)
{
Window *pDndWin = *aI;
css::uno::Reference< css::datatransfer::dnd::XDropTarget > xDropTarget =
pDndWin->GetDropTarget();
if (xDropTarget.is())
{
xDropTarget->addDropTargetListener(mxDropTargetListener);
xDropTarget->setActive(true);
}
}
}
void BackingWindow::Resize()

View File

@@ -34,6 +34,7 @@
#include <svtools/acceleratorexecute.hxx>
#include <unotools/moduleoptions.hxx>
#include <com/sun/star/datatransfer/dnd/XDropTarget.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/frame/XDispatchProvider.hpp>
#include <com/sun/star/frame/XDesktop.hpp>
@@ -50,6 +51,8 @@ class BackingWindow
com::sun::star::uno::Reference<com::sun::star::frame::XDispatchProvider > mxDesktopDispatchProvider;
com::sun::star::uno::Reference<com::sun::star::frame::XFrame> mxFrame;
com::sun::star::uno::Reference< com::sun::star::frame::XDesktop2 > mxDesktop;
/** helper for drag&drop. */
com::sun::star::uno::Reference< com::sun::star::datatransfer::dnd::XDropTargetListener > mxDropTargetListener;
PushButton* mpOpenButton;
PushButton* mpTemplateButton;
@@ -97,6 +100,8 @@ class BackingWindow
TemplateLocalView* mpImpressTemplateThumbnails;
TemplateLocalView* mpDrawTemplateThumbnails;
std::vector<Window*> maDndWindows;
Rectangle maStartCentButtons;
bool mbInitControls;