summaryrefslogtreecommitdiff
path: root/framework/source
diff options
context:
space:
mode:
authorKrisztian Pinter <pin.terminator@gmail.com>2013-07-31 20:43:18 +0200
committerJan Holesovsky <kendy@suse.cz>2013-08-06 19:56:29 +0200
commitb60f6da2e13706dddc42d1045af95ad633e1829f (patch)
tree2a78225ccc56e20da6c7264aa1a981e6dd647e69 /framework/source
parenta9770af052e5c3d9de893ef84c608479c03f06a7 (diff)
startcenter: Move BackingComp & BackingWindow to sfx2
BackingWindow will use ThumbnailView from sfx2 and it had to be moved to avoid a circular dependency Change-Id: I33a5982ed9e51307476c837f3f534ded7ed38ee0
Diffstat (limited to 'framework/source')
-rw-r--r--framework/source/register/registerservices.cxx2
-rw-r--r--framework/source/services/backingcomp.cxx842
-rw-r--r--framework/source/services/backingwindow.cxx691
-rw-r--r--framework/source/services/backingwindow.hxx132
4 files changed, 0 insertions, 1667 deletions
diff --git a/framework/source/register/registerservices.cxx b/framework/source/register/registerservices.cxx
index 8ec134ccb726..bf3105b08d33 100644
--- a/framework/source/register/registerservices.cxx
+++ b/framework/source/register/registerservices.cxx
@@ -40,7 +40,6 @@
#include <services/modulemanager.hxx>
#include <jobs/jobexecutor.hxx>
#include <jobs/jobdispatch.hxx>
-#include <services/backingcomp.hxx>
#include <services/layoutmanager.hxx>
#include <uifactory/uielementfactorymanager.hxx>
#include <uifactory/uicontrollerfactory.hxx>
@@ -79,7 +78,6 @@ COMPONENTGETFACTORY ( fwk,
IFFACTORY( ::framework::Frame ) else
IFFACTORY( ::framework::JobExecutor ) else
IFFACTORY( ::framework::JobDispatch ) else
- IFFACTORY( ::framework::BackingComp ) else
IFFACTORY( ::framework::LayoutManager ) else
IFFACTORY( ::framework::UIElementFactoryManager ) else
IFFACTORY( ::framework::PopupMenuControllerFactory ) else
diff --git a/framework/source/services/backingcomp.cxx b/framework/source/services/backingcomp.cxx
deleted file mode 100644
index 89a757de7192..000000000000
--- a/framework/source/services/backingcomp.cxx
+++ /dev/null
@@ -1,842 +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 "services/backingcomp.hxx"
-
-#include "backingwindow.hxx"
-
-#include <threadhelp/readguard.hxx>
-#include <threadhelp/writeguard.hxx>
-#include <classes/droptargetlistener.hxx>
-#include <targets.h>
-#include <properties.h>
-#include <services.h>
-
-#include <helpid.hrc>
-
-#include <com/sun/star/beans/NamedValue.hpp>
-#include <com/sun/star/util/XURLTransformer.hpp>
-#include <com/sun/star/frame/XDispatchProvider.hpp>
-#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>
-#include <com/sun/star/util/URLTransformer.hpp>
-
-#include <comphelper/processfactory.hxx>
-#include <cppuhelper/typeprovider.hxx>
-#include <cppuhelper/factory.hxx>
-#include <toolkit/helper/vclunohelper.hxx>
-#include <vcl/keycod.hxx>
-#include <vcl/wrkwin.hxx>
-#include <vcl/svapp.hxx>
-#include <rtl/ustrbuf.hxx>
-
-#include <svl/solar.hrc>
-#include <svl/urihelper.hxx>
-#include <osl/file.hxx>
-#include <unotools/configmgr.hxx>
-
-#include <unotools/bootstrap.hxx>
-
-namespace framework
-{
-
-//_______________________________________________
-
-//_______________________________________________
-
-BackingComp::BackingComp( const css::uno::Reference< css::uno::XComponentContext >& xContext )
- : ThreadHelpBase (&Application::GetSolarMutex() )
- , m_xContext (xContext )
-{
-}
-
-//_______________________________________________
-
-BackingComp::~BackingComp()
-{
-}
-
-//_______________________________________________
-
-/** return information about supported interfaces.
-
- Some interfaces are supported by his class directly, but some other ones are
- used by aggregation. An instance of this class must provide some window interfaces.
- But it must represent a VCL window behind such interfaces too! So we use an internal
- saved window member to ask it for it's interfaces and return it. But we must be aware then,
- that it can be destroyed from outside too ...
-
- @param aType
- describe the required interface type
-
- @return An Any holding the instance, which provides the queried interface.
- Note: There exist two possible results ... this instance itself and her window member!
- */
-
-css::uno::Any SAL_CALL BackingComp::queryInterface( /*IN*/ const css::uno::Type& aType )
- throw(css::uno::RuntimeException)
-{
- css::uno::Any aResult;
-
- // first look for own supported interfaces
- aResult = ::cppu::queryInterface(
- aType,
- static_cast< css::lang::XTypeProvider* >(this),
- static_cast< css::lang::XServiceInfo* >(this),
- static_cast< css::lang::XInitialization* >(this),
- static_cast< css::frame::XController* >(this),
- static_cast< css::lang::XComponent* >(this),
- static_cast< css::lang::XEventListener* >(this),
- static_cast< css::awt::XKeyListener* >(static_cast< css::lang::XEventListener* >(this)));
-
- // then look for supported window interfaces
- // Note: They exist only, if this instance was initialized
- // with a valid window reference. It's aggregation on demand ...
- if (!aResult.hasValue())
- {
- /* SAFE { */
- ReadGuard aReadLock(m_aLock);
- if (m_xWindow.is())
- aResult = m_xWindow->queryInterface(aType);
- aReadLock.unlock();
- /* } SAFE */
- }
-
- // look for XWeak and XInterface
- if (!aResult.hasValue())
- aResult = OWeakObject::queryInterface(aType);
-
- return aResult;
-}
-
-//_______________________________________________
-
-/** increase ref count of this instance.
- */
-
-void SAL_CALL BackingComp::acquire()
- throw()
-{
- OWeakObject::acquire();
-}
-
-//_______________________________________________
-
-/** decrease ref count of this instance.
- */
-
-void SAL_CALL BackingComp::release()
- throw()
-{
- OWeakObject::release();
-}
-
-//_______________________________________________
-
-/** return collection about all supported interfaces.
-
- Optimize this method !
- We initialize a static variable only one time.
- And we don't must use a mutex at every call!
- For the first call; pTypeCollection is NULL -
- for the second call pTypeCollection is different from NULL!
-
- @return A list of all supported interface types.
-*/
-
-css::uno::Sequence< css::uno::Type > SAL_CALL BackingComp::getTypes()
- throw(css::uno::RuntimeException)
-{
- static ::cppu::OTypeCollection* pTypeCollection = NULL;
- if (!pTypeCollection)
- {
- /* GLOBAL SAFE { */
- ::osl::MutexGuard aGlobalLock(::osl::Mutex::getGlobalMutex());
- // Control these pointer again ... it can be, that another instance will be faster then this one!
- if (!pTypeCollection)
- {
- /* LOCAL SAFE { */
- ReadGuard aReadLock(m_aLock);
- css::uno::Reference< css::lang::XTypeProvider > xProvider(m_xWindow, css::uno::UNO_QUERY);
- aReadLock.unlock();
- /* } LOCAL SAFE */
-
- css::uno::Sequence< css::uno::Type > lWindowTypes;
- if (xProvider.is())
- lWindowTypes = xProvider->getTypes();
-
- static ::cppu::OTypeCollection aTypeCollection(
- ::getCppuType((const ::com::sun::star::uno::Reference< css::lang::XInitialization >*)NULL ),
- ::getCppuType((const ::com::sun::star::uno::Reference< css::lang::XTypeProvider >*)NULL ),
- ::getCppuType((const ::com::sun::star::uno::Reference< css::lang::XServiceInfo >*)NULL ),
- ::getCppuType((const ::com::sun::star::uno::Reference< css::frame::XController >*)NULL ),
- ::getCppuType((const ::com::sun::star::uno::Reference< css::lang::XComponent >*)NULL ),
- lWindowTypes);
-
- pTypeCollection = &aTypeCollection;
- }
- /* } GLOBAL SAFE */
- }
- return pTypeCollection->getTypes();
-}
-
-//_______________________________________________
-
-/** create one unique Id for all instances of this class.
-
- Optimize this method
- We initialize a static variable only one time. And we don't must use a mutex at every call!
- For the first call; pID is NULL - for the second call pID is different from NULL!
-
- @return A byte array, which represent the unique id.
-*/
-
-css::uno::Sequence< sal_Int8 > SAL_CALL BackingComp::getImplementationId()
- throw(css::uno::RuntimeException)
-{
- static ::cppu::OImplementationId* pID = NULL;
- if (!pID)
- {
- /* GLOBAL SAFE { */
- ::osl::MutexGuard aLock(::osl::Mutex::getGlobalMutex());
- // Control these pointer again ... it can be, that another instance will be faster then this one!
- if (!pID)
- {
- static ::cppu::OImplementationId aID(sal_False);
- pID = &aID;
- }
- /* } GLOBAL SAFE */
- }
- return pID->getImplementationId();
-}
-
-//_______________________________________________
-
-/** returns a static implementation name for this UNO service.
-
- Because this value is needed at different places and our class is used
- by some generic macros too, we have to use a static impl method for that!
-
- @see impl_getStaticImplementationName()
- @see IMPLEMENTATIONNAME
-
- @return The implementation name of this class.
-*/
-
-OUString SAL_CALL BackingComp::getImplementationName()
- throw(css::uno::RuntimeException)
-{
- return impl_getStaticImplementationName();
-}
-
-//_______________________________________________
-
-/** returns information about supported services.
-
- Because this value is needed at different places and our class is used
- by some generic macros too, we have to use a static impl method for that!
-
- @see impl_getStaticSupportedServiceNames()
- @see SERVICENAME
-
- @return <TRUE/> if the queried service is supported;
- <br><FALSE/> otherwise.
-*/
-
-sal_Bool SAL_CALL BackingComp::supportsService( /*IN*/ const OUString& sServiceName )
- throw(css::uno::RuntimeException)
-{
- return (
- sServiceName.equals("com.sun.star.frame.StartModule") ||
- sServiceName.equals(SERVICENAME_FRAMECONTROLLER)
- );
-}
-
-//_______________________________________________
-
-/** returns collection of supported services.
-
- Because this value is needed at different places and our class is used
- by some generic macros too, we have to use a static impl method for that!
-
- @see impl_getStaticSupportedServiceNames()
- @see SERVICENAME
-
- @return A list of all supported uno service names.
-*/
-
-css::uno::Sequence< OUString > SAL_CALL BackingComp::getSupportedServiceNames()
- throw(css::uno::RuntimeException)
-{
- return impl_getStaticSupportedServiceNames();
-}
-
-//_______________________________________________
-
-/** returns static implementation name.
-
- Because this value is needed at different places and our class is used
- by some generic macros too, we have to use a static impl method for that!
-
- @see impl_getStaticSupportedServiceNames()
- @see SERVICENAME
-
- @return The implementation name of this class.
-*/
-
-OUString BackingComp::impl_getStaticImplementationName()
-{
- return IMPLEMENTATIONNAME_STARTMODULE;
-}
-
-//_______________________________________________
-
-/** returns static list of supported service names.
-
- Because this value is needed at different places and our class is used
- by some generic macros too, we have to use a static impl method for that!
-
- @see impl_getStaticSupportedServiceNames()
- @see SERVICENAME
-
- @return A list of all supported uno service names.
-*/
-
-css::uno::Sequence< OUString > BackingComp::impl_getStaticSupportedServiceNames()
-{
- css::uno::Sequence< OUString > lNames(1);
- lNames[0] = "com.sun.star.frame.StartModule";
- return lNames;
-}
-
-//_______________________________________________
-
-/** returns a new instance of this class.
-
- This factory method is registered inside the UNO runtime
- and will be called for every createInstance() request from outside,
- which wish to use this service.
-
- @param xSMGR
- reference to the uno service manager, which call us
- We use it too, to set it at the new created instance.
-
- @return A new instance as uno reference.
-*/
-
-css::uno::Reference< css::uno::XInterface > SAL_CALL BackingComp::impl_createInstance( /*IN*/ const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR )
- throw(css::uno::Exception)
-{
- BackingComp* pObject = new BackingComp(comphelper::getComponentContext(xSMGR));
- return css::uno::Reference< css::uno::XInterface >(static_cast< ::cppu::OWeakObject* >(pObject), css::uno::UNO_QUERY);
-}
-
-//_______________________________________________
-
-/** returns a new factory instance for instances of this class.
-
- It uses a helper class of the cppuhelper project as factory.
- It will be initialized with all neccessary information and
- will be able afterwards to create instance of this class.
- This factory call us back inside our method impl_createInstance().
- So we can create and initialize ourself. Only filtering of creation
- requests will be done by this factory.
-
- @param xSMGR
- reference to the uno service manager, which call us
-
- @return A new instance of our factory.
-*/
-
-css::uno::Reference< css::lang::XSingleServiceFactory > BackingComp::impl_createFactory( /*IN*/ const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR )
-{
- css::uno::Reference< css::lang::XSingleServiceFactory > xReturn(
- cppu::createSingleFactory(
- xSMGR,
- BackingComp::impl_getStaticImplementationName(),
- BackingComp::impl_createInstance,
- BackingComp::impl_getStaticSupportedServiceNames()));
- return xReturn;
-}
-
-//_______________________________________________
-
-/**
- attach this component to a target frame.
-
- We has to use the container window of this frame as parent window of our own component window.
- But it's not allowed to work with it realy. May another component used it too.
- Currently we need it only to create our child component window and support it's
- interfaces inside our queryInterface() method. The user of us must have e.g. the
- XWindow interface of it to be able to call setComponent(xWindow,xController) at the
- frame!
-
- May he will do the following things:
-
- <listing>
- XController xBackingComp = (XController)UnoRuntime.queryInterface(
- XController.class,
- xSMGR.createInstance(SERVICENAME_STARTMODULE));
-
- // at this time XWindow isn't present at this instance!
- XWindow xBackingComp = (XWindow)UnoRuntime.queryInterface(
- XWindow.class,
- xBackingComp);
-
- // attach controller to the frame
- // We will use it's container window, to create
- // the component window. From now we offer the window interfaces!
- xBackingComp.attachFrame(xFrame);
-
- XWindow xBackingComp = (XWindow)UnoRuntime.queryInterface(
- XWindow.class,
- xBackingComp);
-
- // Our user can set us at the frame as new component
- xFrame.setComponent(xBackingWin, xBackingComp);
-
- // But that had no effect to our view state.
- // We must be started to create our UI elements like e.g. menu, title, background ...
- XInitialization xBackingInit = (XInitialization)UnoRuntime.queryInterface(
- XInitialization.class,
- xBackingComp);
-
- xBackingInit.initialize(lArgs);
- </listing>
-
- @param xFrame
- reference to our new target frame
-
- @throw com::sun::star::uno::RuntimeException
- if the given frame reference is wrong or component window couldn't be created
- successfully.
- We throw it too, if we already attached to a frame. Because we don't support
- reparenting of our component window on demand!
-*/
-
-void SAL_CALL BackingComp::attachFrame( /*IN*/ const css::uno::Reference< css::frame::XFrame >& xFrame )
- throw (css::uno::RuntimeException)
-{
- /* SAFE */
- WriteGuard aWriteLock(m_aLock);
-
- // check some required states
- if (m_xFrame.is())
- throw css::uno::RuntimeException(
- OUString("already attached"),
- static_cast< ::cppu::OWeakObject* >(this));
-
- if (!xFrame.is())
- throw css::uno::RuntimeException(
- OUString("invalid frame reference"),
- static_cast< ::cppu::OWeakObject* >(this));
-
- if (!m_xWindow.is())
- return; // disposed
-
- // safe the frame reference
- m_xFrame = xFrame;
-
- // establish drag&drop mode
- ::framework::DropTargetListener* pDropListener = new ::framework::DropTargetListener( 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);
- Window* pWindow = VCLUnoHelper::GetWindow(m_xWindow);
-
- // disable full screen mode of the frame!
- if (pParent && pParent->IsFullScreenMode())
- {
- pParent->ShowFullScreenMode(sal_False);
- pParent->SetMenuBarMode(MENUBAR_MODE_NORMAL);
- }
-
- // create the menu bar for the backing component
- css::uno::Reference< css::beans::XPropertySet > xPropSet(m_xFrame, css::uno::UNO_QUERY_THROW);
- css::uno::Reference< css::frame::XLayoutManager > xLayoutManager;
- xPropSet->getPropertyValue(FRAME_PROPNAME_LAYOUTMANAGER) >>= xLayoutManager;
- if (xLayoutManager.is())
- {
- xLayoutManager->lock();
- xLayoutManager->createElement( DECLARE_ASCII( "private:resource/menubar/menubar" ));
- xLayoutManager->unlock();
- }
-
- if (pWindow)
- {
- // set help ID for our canvas
- pWindow->SetHelpId(HID_BACKINGWINDOW);
- }
-
- // inform BackingWindow about frame
- BackingWindow* pBack = dynamic_cast<BackingWindow*>(pWindow );
- if( pBack )
- pBack->setOwningFrame( m_xFrame );
-
- aWriteLock.unlock();
- /* } SAFE */
-}
-
-//_______________________________________________
-
-/** not supported.
-
- This component does not know any model. It will be represented by a window and
- it's controller only.
-
- return <FALSE/> everytime.
- */
-
-sal_Bool SAL_CALL BackingComp::attachModel( /*IN*/ const css::uno::Reference< css::frame::XModel >& )
- throw (css::uno::RuntimeException)
-{
- return sal_False;
-}
-
-//_______________________________________________
-
-/** not supported.
-
- This component does not know any model. It will be represented by a window and
- it's controller only.
-
- return An empty reference every time.
- */
-
-css::uno::Reference< css::frame::XModel > SAL_CALL BackingComp::getModel()
- throw (css::uno::RuntimeException)
-{
- return css::uno::Reference< css::frame::XModel >();
-}
-
-//_______________________________________________
-
-/** not supported.
-
- return An empty value.
- */
-
-css::uno::Any SAL_CALL BackingComp::getViewData()
- throw (css::uno::RuntimeException)
-{
- return css::uno::Any();
-}
-
-//_______________________________________________
-
-/** not supported.
-
- @param aData
- not used.
- */
-
-void SAL_CALL BackingComp::restoreViewData( /*IN*/ const css::uno::Any& )
- throw (css::uno::RuntimeException)
-{
-}
-
-//_______________________________________________
-
-/** returns the attached frame for this component.
-
- @see attachFrame()
-
- @return The internaly saved frame reference.
- Can be null, if attachFrame() was not called before.
- */
-
-css::uno::Reference< css::frame::XFrame > SAL_CALL BackingComp::getFrame()
- throw (css::uno::RuntimeException)
-{
- /* SAFE { */
- ReadGuard aReadLock(m_aLock);
- return m_xFrame;
- /* } SAFE */
-}
-
-//_______________________________________________
-
-/** ask controller for it's current working state.
-
- If somehwere whish to close this component, it must suspend the controller before.
- That will be a chance for it to disagree with that AND show any UI for a possible
- UI user.
-
- @param bSuspend
- If its set to sal_True this controller should be suspended.
- sal_False will resuspend it.
-
- @return sal_True if the request could be finished successfully; sal_False otherwise.
- */
-
-sal_Bool SAL_CALL BackingComp::suspend( /*IN*/ sal_Bool )
- throw (css::uno::RuntimeException)
-{
- /* FIXME ... implemented by using default :-( */
- return sal_True;
-}
-
-//_______________________________________________
-
-/** callback from our window member.
-
- Our internal saved window wish to die. It will be disposed from outside (may be the frame)
- and inform us. We must release its reference only here. Of course we check the given reference
- here and reject callback from unknown sources.
-
- Note: deregistration as listener isnt neccessary here. The broadcaster do it automaticly.
-
- @param aEvent
- describe the broadcaster of this callback
-
- @throw ::com::sun::star::uno::RuntimeException
- if the broadcaster doesn't represent the expected window reference.
-*/
-
-void SAL_CALL BackingComp::disposing( /*IN*/ const css::lang::EventObject& aEvent )
- throw(css::uno::RuntimeException)
-{
- // Attention: dont free m_pAccExec here! see comments inside dtor and
- // keyPressed() for further details.
-
- /* SAFE { */
- WriteGuard aWriteLock(m_aLock);
-
- if (!aEvent.Source.is() || aEvent.Source!=m_xWindow || !m_xWindow.is())
- throw css::uno::RuntimeException(
- OUString("unexpected source or called twice"),
- static_cast< ::cppu::OWeakObject* >(this));
-
- m_xWindow = css::uno::Reference< css::awt::XWindow >();
-
- aWriteLock.unlock();
- /* } SAFE */
-}
-
-//_______________________________________________
-
-/** kill this instance.
-
- It can be called from our owner frame only. But there is no possibility to check the calli.
- We have to release all our internal used resources and die. From this point we can throw
- DisposedExceptions for every further interface request ... but current implementation doesn`t do so ...
-
-*/
-
-void SAL_CALL BackingComp::dispose()
- throw(css::uno::RuntimeException)
-{
- /* SAFE { */
- WriteGuard aWriteLock(m_aLock);
-
- // kill the menu
- css::util::URL aURL;
- aURL.Complete = DECLARE_ASCII(".uno:close");
- css::uno::Reference< css::util::XURLTransformer > xParser = css::util::URLTransformer::create(m_xContext);
- if (xParser.is())
- xParser->parseStrict(aURL);
-
- css::uno::Reference< css::frame::XDispatchProvider > xProvider(m_xFrame, css::uno::UNO_QUERY);
- if (xProvider.is())
- {
- css::uno::Reference< css::frame::XDispatch > xDispatch = xProvider->queryDispatch(aURL, SPECIALTARGET_MENUBAR, 0);
- if (xDispatch.is())
- 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())
- {
- css::uno::Reference< css::lang::XComponent > xBroadcaster(m_xWindow, css::uno::UNO_QUERY);
- if (xBroadcaster.is())
- {
- css::uno::Reference< css::lang::XEventListener > xEventThis(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY);
- xBroadcaster->removeEventListener(xEventThis);
- }
- css::uno::Reference< css::awt::XKeyListener > xKeyThis(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY);
- m_xWindow->removeKeyListener(xKeyThis);
- m_xWindow = css::uno::Reference< css::awt::XWindow >();
- }
-
- // forget all other used references
- m_xFrame.clear();
- m_xContext.clear();
-
- aWriteLock.unlock();
- /* } SAFE */
-}
-
-//_______________________________________________
-
-/** not supported.
-
- @param xListener
- not used.
-
- @throw ::com::sun::star::uno::RuntimeException
- because the listener expect to be holded alive by this container.
- We must inform it about this unsupported feature.
- */
-
-void SAL_CALL BackingComp::addEventListener( /*IN*/ const css::uno::Reference< css::lang::XEventListener >& )
- throw(css::uno::RuntimeException)
-{
- throw css::uno::RuntimeException(
- OUString("not supported"),
- static_cast< ::cppu::OWeakObject* >(this));
-}
-
-//_______________________________________________
-
-/** not supported.
-
- Because registration is not supported too, we must do nothing here. Nobody can call this method realy.
-
- @param xListener
- not used.
- */
-
-void SAL_CALL BackingComp::removeEventListener( /*IN*/ const css::uno::Reference< css::lang::XEventListener >& )
- throw(css::uno::RuntimeException)
-{
-}
-
-//_______________________________________________
-
-/**
- force initialiation for this component.
-
- Inside attachFrame() we created our component window. But it was not allowed there, to
- initialitze it. E.g. the menu must be set at the container window of the frame, which
- is our parent window. But may at that time another component used it.
- That's why our creator has to inform us, when it's time to initialize us realy.
- Currently only calling of this method must be done. But further implementatoins
- can use special in parameter to configure this initialization ...
-
- @param lArgs
- currently not used
-
- @throw com::sun::star::uno::RuntimeException
- if some resources are missing
- Means if may be attachedFrame() wasn't called before.
- */
-
-void SAL_CALL BackingComp::initialize( /*IN*/ const css::uno::Sequence< css::uno::Any >& lArgs )
- throw(css::uno::Exception, css::uno::RuntimeException)
-{
- /* SAFE { */
- WriteGuard aWriteLock(m_aLock);
-
- if (m_xWindow.is())
- throw css::uno::Exception(
- OUString("already initialized"),
- static_cast< ::cppu::OWeakObject* >(this));
-
- css::uno::Reference< css::awt::XWindow > xParentWindow;
- if (
- (lArgs.getLength()!=1 ) ||
- (!(lArgs[0] >>= xParentWindow)) ||
- (!xParentWindow.is() )
- )
- {
- throw css::uno::Exception(
- OUString("wrong or corrupt argument list"),
- static_cast< ::cppu::OWeakObject* >(this));
- }
-
- // create the component window
- Window* pParent = VCLUnoHelper::GetWindow(xParentWindow);
- Window* pWindow = new BackingWindow(pParent);
- m_xWindow = VCLUnoHelper::GetInterface(pWindow);
-
- if (!m_xWindow.is())
- throw css::uno::RuntimeException(
- OUString("couldn't create component window"),
- static_cast< ::cppu::OWeakObject* >(this));
-
- // start listening for window disposing
- // It's set at our owner frame as component window later too. So it will may be disposed there ...
- css::uno::Reference< css::lang::XComponent > xBroadcaster(m_xWindow, css::uno::UNO_QUERY);
- if (xBroadcaster.is())
- xBroadcaster->addEventListener(static_cast< css::lang::XEventListener* >(this));
-
- m_xWindow->setVisible(sal_True);
-
- aWriteLock.unlock();
- /* } SAFE */
-}
-
-//_______________________________________________
-
-/**
- */
-
-void SAL_CALL BackingComp::keyPressed( /*IN*/ const css::awt::KeyEvent& )
- throw(css::uno::RuntimeException)
-{
-}
-
-//_______________________________________________
-
-/**
- */
-
-void SAL_CALL BackingComp::keyReleased( /*IN*/ const css::awt::KeyEvent& )
- throw(css::uno::RuntimeException)
-{
- /* Attention
- Please use keyPressed() instead of this method. Otherwhise it would be possible, that
- - a key input may be first switch to the backing mode
- - and this component register itself as key listener too
- - and it's first event will be a keyRealeased() for the already well known event, which switched to the backing mode!
- So it will be handled twice! document => backing mode => exit app ...
- */
-}
-
-} // namespace framework
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/framework/source/services/backingwindow.cxx b/framework/source/services/backingwindow.cxx
deleted file mode 100644
index 3043e02d1b0f..000000000000
--- a/framework/source/services/backingwindow.cxx
+++ /dev/null
@@ -1,691 +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 "backingwindow.hxx"
-#include <services.h>
-
-#include <vcl/svapp.hxx>
-#include <vcl/virdev.hxx>
-
-#include <unotools/dynamicmenuoptions.hxx>
-#include <svtools/langhelp.hxx>
-#include <svtools/colorcfg.hxx>
-
-#include <comphelper/processfactory.hxx>
-#include <comphelper/sequenceashashmap.hxx>
-
-#include <toolkit/awt/vclxmenu.hxx>
-
-#include <com/sun/star/frame/Desktop.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/container/XNameAccess.hpp>
-#include <com/sun/star/configuration/theDefaultProvider.hpp>
-#include <com/sun/star/system/SystemShellExecute.hpp>
-#include <com/sun/star/system/SystemShellExecuteFlags.hpp>
-#include <com/sun/star/util/URLTransformer.hpp>
-#include <com/sun/star/frame/PopupMenuControllerFactory.hpp>
-
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::frame;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star;
-using namespace framework;
-
-const char RECENT_FILE_LIST[] = ".uno:RecentFileList";
-
-const char WRITER_URL[] = "private:factory/swriter";
-const char CALC_URL[] = "private:factory/scalc";
-const char IMPRESS_WIZARD_URL[] = "private:factory/simpress?slot=6686";
-const char DRAW_URL[] = "private:factory/sdraw";
-const char BASE_URL[] = "private:factory/sdatabase?Interactive";
-const char MATH_URL[] = "private:factory/smath";
-const char TEMPLATE_URL[] = "slot:5500";
-const char OPEN_URL[] = ".uno:Open";
-
-const int nItemId_Extensions = 1;
-const int nItemId_Info = 3;
-const int nItemId_TplRep = 4;
-
-const int nShadowTop = 30;
-const int nShadowLeft = 30;
-const int nShadowRight = 30;
-const int nShadowBottom = 30;
-
-const int nPaddingTop = 30;
-const int nPaddingLeft = 50;
-const int nPaddingRight = 50;
-const int nPaddingBottom = 30;
-
-const int nLogoHeight = 150;
-
-BackingWindow::BackingWindow( Window* i_pParent ) :
- Window( i_pParent ),
- mbInitControls( false ),
- mnHideExternalLinks( 0 ),
- mpAccExec( NULL )
-{
- m_pUIBuilder = new VclBuilder(this, getUIRootDir(),
- "modules/StartModule/ui/startcenter.ui",
- "StartCenter" );
- get(mpWriterButton, "writer");
- get(mpCalcButton, "calc");
- get(mpImpressButton, "impress");
- get(mpOpenButton, "open");
- get(mpDrawButton, "draw");
- get(mpDBButton, "database");
- get(mpMathButton, "math");
- get(mpTemplateButton, "templates");
-
- get(mpExtensionsButton, "extension");
- get(mpInfoButton, "info");
- get(mpTplRepButton, "add_temp");
-
- get(mpStartCenterContainer, "sccontainer");
-
- try
- {
- mxContext.set( ::comphelper::getProcessComponentContext(), uno::UNO_SET_THROW );
- Reference<lang::XMultiServiceFactory> xConfig = configuration::theDefaultProvider::get( mxContext );
- Sequence<Any> args(1);
- PropertyValue val(
- "nodepath",
- 0,
- Any(OUString("/org.openoffice.Office.Common/Help/StartCenter")),
- PropertyState_DIRECT_VALUE);
- args.getArray()[0] <<= val;
- Reference<container::XNameAccess> xNameAccess(xConfig->createInstanceWithArguments(SERVICENAME_CFGREADACCESS,args), UNO_QUERY);
- if( xNameAccess.is() )
- {
- //throws css::container::NoSuchElementException, css::lang::WrappedTargetException
- Any value( xNameAccess->getByName("StartCenterHideExternalLinks") );
- mnHideExternalLinks = value.get<sal_Int32>();
- }
-
- mxPopupMenuFactory.set(
- frame::PopupMenuControllerFactory::create( mxContext ) );
- // TODO If there is no PopupMenuController, the button should be a nomral one not a MenuButton
- if ( mxPopupMenuFactory->hasController(
- OUString( RECENT_FILE_LIST ) , OUString("com.sun.star.frame.StartModule") ) )
- {
- mxPopupMenu.set( mxContext->getServiceManager()->createInstanceWithContext(
- OUString( "com.sun.star.awt.PopupMenu" ), mxContext ), uno::UNO_QUERY_THROW );
- }
- }
- catch (const Exception& e)
- {
- SAL_WARN( "fwk", "BackingWindow - caught an exception! " << e.Message );
- }
-
- // clean up resource stack
- //FreeResource();
-
- // fdo#34392: we do the layout dynamically, the layout depends on the font,
- // so we should handle data changed events (font changing) of the last child
- // control, at this point all the controls have updated settings (i.e. font).
-
- EnableChildTransparentMode();
-
- SetStyle( GetStyle() | WB_DIALOGCONTROL );
-
- // get dispatch provider
- Reference<XDesktop2> xDesktop = Desktop::create( comphelper::getProcessComponentContext() );
- mxDesktopDispatchProvider = xDesktop;
-
- mpWriterButton->SetHelpId( ".HelpId:StartCenter:WriterButton" );
- mpCalcButton->SetHelpId( ".HelpId:StartCenter:CalcButton" );
- mpImpressButton->SetHelpId( ".HelpId:StartCenter:ImpressButton" );
- mpDrawButton->SetHelpId( ".HelpId:StartCenter:DrawButton" );
- mpDBButton->SetHelpId( ".HelpId:StartCenter:DBButton" );
- mpMathButton->SetHelpId( ".HelpId:StartCenter:MathButton" );
- mpTemplateButton->SetHelpId( ".HelpId:StartCenter:TemplateButton" );
- mpOpenButton->SetHelpId( ".HelpId:StartCenter:OpenButton" );
- mpExtensionsButton->SetHelpId( ".HelpId:StartCenter:Extensions" );
- mpInfoButton->SetHelpId( ".HelpId:StartCenter:Info" );
- mpTplRepButton->SetHelpId( ".HelpId:StartCenter:TemplateRepository" );
-
- // init background
- initBackground();
-}
-
-
-BackingWindow::~BackingWindow()
-{
- if( mxPopupMenuController.is() )
- {
- Reference< lang::XComponent > xComponent( mxPopupMenuController, UNO_QUERY );
- if( xComponent.is() )
- {
- try
- {
- xComponent->dispose();
- }
- catch (...)
- {}
- }
- mxPopupMenuController.clear();
- }
- mxPopupMenuFactory.clear();
- mxPopupMenu.clear();
-}
-
-IMPL_LINK( BackingWindow, WindowEventListener, VclSimpleEvent*, pEvent )
-{
- VclWindowEvent* pWinEvent = dynamic_cast<VclWindowEvent*>( pEvent );
- if ( pWinEvent && pWinEvent->GetId() == VCLEVENT_WINDOW_DATACHANGED )
- {
- DataChangedEvent* pDCEvt =
- static_cast<DataChangedEvent*>( pWinEvent->GetData() );
- if ( pDCEvt->GetFlags() & SETTINGS_STYLE )
- {
- initBackground();
- Invalidate();
- // fdo#34392: Resize buttons to match the new text size.
- Resize();
- }
- }
- return 0;
-}
-
-void BackingWindow::prepareRecentFileMenu()
-{
- if( ! mxPopupMenu.is() )
- return;
-
- if ( !mxPopupMenuController.is() )
- {
- uno::Sequence< uno::Any > aArgs( 2 );
- beans::PropertyValue aProp;
-
- aProp.Name = OUString( "Frame" );
- aProp.Value <<= mxFrame;
- aArgs[0] <<= aProp;
-
- aProp.Name = OUString( "ModuleIdentifier" );
- aProp.Value <<= OUString("com.sun.star.frame.StartModule");
- aArgs[1] <<= aProp;
- try
- {
- mxPopupMenuController.set(
- mxPopupMenuFactory->createInstanceWithArgumentsAndContext(
- OUString( RECENT_FILE_LIST ), aArgs, mxContext),
- uno::UNO_QUERY_THROW );
- mxPopupMenuController->setPopupMenu( mxPopupMenu );
- }
- catch ( const Exception &e )
- {
- SAL_WARN( "fwk", "BackingWindow - caught an exception! " << e.Message );
- }
-
- PopupMenu *pRecentMenu = NULL;
- VCLXMenu* pTKMenu = VCLXMenu::GetImplementation( mxPopupMenu );
- if ( pTKMenu )
- pRecentMenu = dynamic_cast< PopupMenu * >( pTKMenu->GetMenu() );
- mpOpenButton->SetPopupMenu( pRecentMenu );
- }
-}
-
-void BackingWindow::initBackground()
-{
- SetBackground();
-
- // scale middle segment
- Size aMiddleSize;
- if( !! maBackgroundMiddle )
- aMiddleSize = maBackgroundMiddle.GetSizePixel();
-
- // load middle segment
- Application::LoadBrandBitmap ("shell/backing_space", maBackgroundMiddle);
-
- // and scale it to previous size
- if( aMiddleSize.Width() && aMiddleSize.Height() )
- maBackgroundMiddle.Scale( aMiddleSize );
-
- if( GetSettings().GetLayoutRTL() )
- {
- // replace images by RTL versions
- Application::LoadBrandBitmap ("shell/backing_rtl_right", maBackgroundLeft);
- Application::LoadBrandBitmap ("shell/backing_rtl_left", maBackgroundRight);
- }
- else
- {
- Application::LoadBrandBitmap ("shell/backing_left", maBackgroundLeft);
- Application::LoadBrandBitmap ("shell/backing_right", maBackgroundRight);
- }
-
- mpOpenButton->SetMenuMode( MENUBUTTON_MENUMODE_TIMED );
- mpOpenButton->SetActivateHdl( LINK( this, BackingWindow, ActivateHdl ) );
-
- // this will be moved to somewhere saner later
- mnSCWidth = 780;
- mnSCHeight = maBackgroundLeft.GetSizePixel().Height();
-}
-
-void BackingWindow::initControls()
-{
- if( mbInitControls )
- return;
-
- mbInitControls = true;
-
- // collect the URLs of the entries in the File/New menu
- SvtModuleOptions aModuleOptions;
- std::set< OUString > aFileNewAppsAvailable;
- SvtDynamicMenuOptions aOpt;
- Sequence < Sequence < PropertyValue > > aNewMenu = aOpt.GetMenu( E_NEWMENU );
- const OUString sURLKey( "URL" );
-
- const Sequence< PropertyValue >* pNewMenu = aNewMenu.getConstArray();
- const Sequence< PropertyValue >* pNewMenuEnd = aNewMenu.getConstArray() + aNewMenu.getLength();
- for ( ; pNewMenu != pNewMenuEnd; ++pNewMenu )
- {
- comphelper::SequenceAsHashMap aEntryItems( *pNewMenu );
- OUString sURL( aEntryItems.getUnpackedValueOrDefault( sURLKey, OUString() ) );
- if ( !sURL.isEmpty() )
- aFileNewAppsAvailable.insert( sURL );
- }
-
- setupButton( mpWriterButton, WRITER_URL, aFileNewAppsAvailable,
- aModuleOptions, SvtModuleOptions::E_SWRITER );
- setupButton( mpDrawButton, DRAW_URL, aFileNewAppsAvailable,
- aModuleOptions, SvtModuleOptions::E_SDRAW );
- setupButton( mpCalcButton, CALC_URL, aFileNewAppsAvailable,
- aModuleOptions, SvtModuleOptions::E_SCALC );
- setupButton( mpDBButton, BASE_URL, aFileNewAppsAvailable,
- aModuleOptions, SvtModuleOptions::E_SDATABASE );
- setupButton( mpImpressButton, IMPRESS_WIZARD_URL, aFileNewAppsAvailable,
- aModuleOptions, SvtModuleOptions::E_SIMPRESS );
- setupButton( mpMathButton, MATH_URL, aFileNewAppsAvailable,
- aModuleOptions, SvtModuleOptions::E_SMATH );
-
- setupButton( mpOpenButton, "", aFileNewAppsAvailable,
- aModuleOptions, SvtModuleOptions::E_SWRITER );
- setupButton( mpTemplateButton, "", aFileNewAppsAvailable,
- aModuleOptions, SvtModuleOptions::E_SWRITER );
-
- setupExternalLink( mpExtensionsButton );
- setupExternalLink( mpInfoButton );
- setupExternalLink( mpTplRepButton );
-
- Resize();
-
- mpWriterButton->GrabFocus();
-}
-
-void BackingWindow::setupButton( PushButton* pButton, const OUString &rURL,
- const std::set<OUString>& rURLS,
- SvtModuleOptions& rOpt, SvtModuleOptions::EModule eMod )
-{
- pButton->SetClickHdl( LINK( this, BackingWindow, ClickHdl ) );
-
- // disable the parts that are not installed
- if( !rURL.isEmpty() && (!rOpt.IsModuleInstalled( eMod ) || rURLS.find( rURL ) == rURLS.end()) )
- {
- pButton->Enable( sal_False );
- }
-
- // setup text - slighly larger font than normal labels on the texts
- Font aFont;
- aFont.SetSize( Size( 0, 11 ) );
- aFont.SetWeight( WEIGHT_NORMAL );
-
- pButton->SetFont( aFont );
- pButton->SetControlFont( aFont );
-}
-
-void BackingWindow::setupExternalLink( PushButton* pButton )
-{
- if( mnHideExternalLinks == 0 )
- pButton->Show();
- else
- pButton->Hide();
-
- pButton->SetClickHdl( LINK( this, BackingWindow, ExtLinkClickHdl ) );
-}
-
-void BackingWindow::Paint( const Rectangle& )
-{
- Resize();
-
- Wallpaper aBack( svtools::ColorConfig().GetColorValue(::svtools::APPBACKGROUND).nColor );
- Region aClip( Rectangle( Point( 0, 0 ), GetOutputSizePixel() ) );
-
- Rectangle aBmpRect(Point((GetOutputSizePixel().Width()-mnSCWidth)/2,
- (GetOutputSizePixel().Height()-mnSCHeight)/2),
- Size(mnSCWidth,mnSCHeight));
- aClip.Exclude( aBmpRect );
-
- Push( PUSH_CLIPREGION );
- IntersectClipRegion( aClip );
- DrawWallpaper( Rectangle( Point( 0, 0 ), GetOutputSizePixel() ), aBack );
- Pop();
-
- VirtualDevice aDev( *this );
- aDev.EnableRTL( IsRTLEnabled() );
- aDev.SetOutputSizePixel( aBmpRect.GetSize() );
- Point aOffset( Point( 0, 0 ) - aBmpRect.TopLeft());
- aDev.DrawWallpaper( Rectangle( aOffset, GetOutputSizePixel() ), aBack );
-
- maBackgroundMiddle.Scale(
- Size(mnSCWidth - maBackgroundLeft.GetSizePixel().Width() - maBackgroundRight.GetSizePixel().Width(),
- maBackgroundMiddle.GetSizePixel().Height()),
- BMP_SCALE_FAST);
-
- // draw bitmap
- Point aTL( 0, 0 );
- aDev.DrawBitmapEx( aTL, maBackgroundLeft );
- aTL.X() += maBackgroundLeft.GetSizePixel().Width();
- if( !!maBackgroundMiddle )
- {
- aDev.DrawBitmapEx( aTL, maBackgroundMiddle );
- aTL.X() += maBackgroundMiddle.GetSizePixel().Width();
- }
- aDev.DrawBitmapEx( aTL, maBackgroundRight );
-
- DrawOutDev( aBmpRect.TopLeft(), aBmpRect.GetSize(),
- Point( 0, 0 ), aBmpRect.GetSize(),
- aDev );
-}
-
-long BackingWindow::Notify( NotifyEvent& rNEvt )
-{
- if( rNEvt.GetType() == EVENT_KEYINPUT )
- {
- // try the 'normal' accelerators (so that eg. Ctrl+Q works)
- if( !mpAccExec )
- {
- mpAccExec = svt::AcceleratorExecute::createAcceleratorHelper();
- mpAccExec->init( comphelper::getProcessComponentContext(), mxFrame);
- }
-
- const KeyEvent* pEvt = rNEvt.GetKeyEvent();
- const KeyCode& rKeyCode(pEvt->GetKeyCode());
- if( pEvt && mpAccExec->execute(rKeyCode) )
- return 1;
-
- // #i110344# extrawurst: specialized arrow key control
- if( rKeyCode.GetModifier() == 0 )
- {
- if( rKeyCode.GetCode() == KEY_RIGHT )
- {
- if( mpWriterButton->HasFocus() )
- mpDrawButton->GrabFocus();
- else if( mpCalcButton->HasFocus() )
- mpDBButton->GrabFocus();
- else if( mpImpressButton->HasFocus() )
- mpMathButton->GrabFocus();
- else if( mpOpenButton->HasFocus() )
- mpTemplateButton->GrabFocus();
- return 1;
- }
- else if( rKeyCode.GetCode() == KEY_LEFT )
- {
- if( mpDrawButton->HasFocus() )
- mpWriterButton->GrabFocus();
- else if( mpDBButton->HasFocus() )
- mpCalcButton->GrabFocus();
- else if( mpMathButton->HasFocus() )
- mpImpressButton->GrabFocus();
- else if( mpTemplateButton->HasFocus() )
- mpOpenButton->GrabFocus();
- return 1;
- }
- else if( rKeyCode.GetCode() == KEY_UP )
- {
- // first column
- if( mpOpenButton->HasFocus() )
- mpImpressButton->GrabFocus();
- else if( mpImpressButton->HasFocus() )
- mpCalcButton->GrabFocus();
- else if( mpCalcButton->HasFocus() )
- mpWriterButton->GrabFocus();
- // second column
- else if( mpTemplateButton->HasFocus() )
- mpMathButton->GrabFocus();
- else if( mpMathButton->HasFocus() )
- mpDBButton->GrabFocus();
- else if( mpDBButton->HasFocus() )
- mpDrawButton->GrabFocus();
- return 1;
- }
- else if( rKeyCode.GetCode() == KEY_DOWN )
- {
- // first column
- if( mpWriterButton->HasFocus() )
- mpCalcButton->GrabFocus();
- else if( mpCalcButton->HasFocus() )
- mpImpressButton->GrabFocus();
- else if( mpImpressButton->HasFocus() )
- mpOpenButton->GrabFocus();
- // second column
- else if( mpDrawButton->HasFocus() )
- mpDBButton->GrabFocus();
- else if( mpDBButton->HasFocus() )
- mpMathButton->GrabFocus();
- else if( mpMathButton->HasFocus() )
- mpTemplateButton->GrabFocus();
- return 1;
- }
- }
- }
-
- return Window::Notify( rNEvt );
-}
-
-void BackingWindow::setOwningFrame( const com::sun::star::uno::Reference< com::sun::star::frame::XFrame >& xFrame )
-{
- mxFrame = xFrame;
- if( ! mbInitControls )
- initControls();
-}
-
-void BackingWindow::Resize()
-{
- maStartCentButtons = Rectangle(
- Point((GetOutputSizePixel().Width()-mnSCWidth)/2 + nShadowTop + nPaddingTop,
- (GetOutputSizePixel().Height()-mnSCHeight)/2 + nShadowLeft + nPaddingLeft + nLogoHeight),
- Size(mnSCWidth - nShadowLeft - nShadowRight - nPaddingLeft - nPaddingRight,
- mnSCHeight - nShadowTop - nShadowBottom - nPaddingTop - nPaddingBottom - nLogoHeight));
- if (isLayoutEnabled(this))
- VclContainer::setLayoutAllocation(*GetWindow(WINDOW_FIRSTCHILD),
- maStartCentButtons.TopLeft(), maStartCentButtons.GetSize());
-
- if( !IsInPaint())
- Invalidate();
-}
-
-IMPL_LINK( BackingWindow, ExtLinkClickHdl, Button*, pButton )
-{
- const char* pNode = NULL;
-
- if( pButton == mpExtensionsButton )
- pNode = "AddFeatureURL";
- else if( pButton == mpInfoButton )
- pNode = "InfoURL";
- else if( pButton == mpTplRepButton )
- pNode = "TemplateRepositoryURL";
-
- if( pNode )
- {
- const char* pNodePath = "/org.openoffice.Office.Common/Help/StartCenter";
- try
- {
- Reference<lang::XMultiServiceFactory> xConfig = configuration::theDefaultProvider::get( comphelper::getProcessComponentContext() );
- Sequence<Any> args(1);
- PropertyValue val(
- "nodepath",
- 0,
- Any(OUString::createFromAscii(pNodePath)),
- PropertyState_DIRECT_VALUE);
- args.getArray()[0] <<= val;
- Reference<container::XNameAccess> xNameAccess(xConfig->createInstanceWithArguments(SERVICENAME_CFGREADACCESS,args), UNO_QUERY);
- if( xNameAccess.is() )
- {
- OUString sURL;
- //throws css::container::NoSuchElementException, css::lang::WrappedTargetException
- Any value( xNameAccess->getByName(OUString::createFromAscii(pNode)) );
- sURL = value.get<OUString> ();
- localizeWebserviceURI(sURL);
-
- Reference< com::sun::star::system::XSystemShellExecute > xSystemShellExecute(
- com::sun::star::system::SystemShellExecute::create(comphelper::getProcessComponentContext()));
- //throws css::lang::IllegalArgumentException, css::system::SystemShellExecuteException
- xSystemShellExecute->execute( sURL, OUString(), com::sun::star::system::SystemShellExecuteFlags::URIS_ONLY);
- }
- }
- catch (const Exception&)
- {
- }
- }
- return 0;
-}
-
-IMPL_LINK( BackingWindow, ClickHdl, Button*, pButton )
-{
- // dispatch the appropriate URL and end the dialog
- if( pButton == mpWriterButton )
- dispatchURL( WRITER_URL );
- else if( pButton == mpCalcButton )
- dispatchURL( CALC_URL );
- else if( pButton == mpImpressButton )
- dispatchURL( IMPRESS_WIZARD_URL );
- else if( pButton == mpDrawButton )
- dispatchURL( DRAW_URL );
- else if( pButton == mpDBButton )
- dispatchURL( BASE_URL );
- else if( pButton == mpMathButton )
- dispatchURL( MATH_URL );
- else if( pButton == mpOpenButton )
- {
- Reference< XDispatchProvider > xFrame( mxFrame, UNO_QUERY );
-
- Sequence< com::sun::star::beans::PropertyValue > aArgs(1);
- PropertyValue* pArg = aArgs.getArray();
- pArg[0].Name = "Referer";
- pArg[0].Value <<= OUString("private:user");
-
- dispatchURL( OPEN_URL, OUString(), xFrame, aArgs );
- }
- else if( pButton == mpTemplateButton )
- {
- Reference< XDispatchProvider > xFrame( mxFrame, UNO_QUERY );
-
- Sequence< com::sun::star::beans::PropertyValue > aArgs(1);
- PropertyValue* pArg = aArgs.getArray();
- pArg[0].Name = OUString("Referer");
- pArg[0].Value <<= OUString("private:user");
-
- dispatchURL( TEMPLATE_URL, OUString(), xFrame, aArgs );
- }
- return 0;
-}
-
-IMPL_LINK( BackingWindow, ActivateHdl, Button*, pButton )
-{
- if( pButton == mpOpenButton )
- prepareRecentFileMenu();
- return 0;
-}
-
-struct ImplDelayedDispatch
-{
- Reference< XDispatch > xDispatch;
- com::sun::star::util::URL aDispatchURL;
- Sequence< PropertyValue > aArgs;
-
- ImplDelayedDispatch( const Reference< XDispatch >& i_xDispatch,
- const com::sun::star::util::URL& i_rURL,
- const Sequence< PropertyValue >& i_rArgs )
- : xDispatch( i_xDispatch ),
- aDispatchURL( i_rURL ),
- aArgs( i_rArgs )
- {
- }
- ~ImplDelayedDispatch() {}
-};
-
-static long implDispatchDelayed( void*, void* pArg )
-{
- struct ImplDelayedDispatch* pDispatch = reinterpret_cast<ImplDelayedDispatch*>(pArg);
- try
- {
- pDispatch->xDispatch->dispatch( pDispatch->aDispatchURL, pDispatch->aArgs );
- }
- catch (const Exception&)
- {
- }
-
- // clean up
- delete pDispatch;
-
- return 0;
-}
-
-void BackingWindow::dispatchURL( const OUString& i_rURL,
- const OUString& rTarget,
- const Reference< XDispatchProvider >& i_xProv,
- const Sequence< PropertyValue >& i_rArgs )
-{
- // if no special dispatch provider is given, get the desktop
- Reference< XDispatchProvider > xProvider( i_xProv.is() ? i_xProv : mxDesktopDispatchProvider );
-
- // check for dispatch provider
- if( !xProvider.is())
- return;
-
- // get an URL transformer to clean up the URL
- com::sun::star::util::URL aDispatchURL;
- aDispatchURL.Complete = i_rURL;
-
- Reference < com::sun::star::util::XURLTransformer > xURLTransformer(
- com::sun::star::util::URLTransformer::create( comphelper::getProcessComponentContext() ) );
- try
- {
- // clean up the URL
- xURLTransformer->parseStrict( aDispatchURL );
- // get a Dispatch for the URL and target
- Reference< XDispatch > xDispatch(
- xProvider->queryDispatch( aDispatchURL, rTarget, 0 )
- );
- // dispatch the URL
- if ( xDispatch.is() )
- {
- ImplDelayedDispatch* pDisp = new ImplDelayedDispatch( xDispatch, aDispatchURL, i_rArgs );
- sal_uLong nEventId = 0;
- if( ! Application::PostUserEvent( nEventId, Link( NULL, implDispatchDelayed ), pDisp ) )
- delete pDisp; // event could not be posted for unknown reason, at least don't leak
- }
- }
- catch (const com::sun::star::uno::RuntimeException&)
- {
- throw;
- }
- catch (const com::sun::star::uno::Exception&)
- {
- }
-}
-
-Size BackingWindow::GetOptimalSize() const
-{
- if (isLayoutEnabled(this))
- return VclContainer::getLayoutRequisition(*GetWindow(WINDOW_FIRSTCHILD));
-
- return Window::GetOptimalSize();
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab:*/
diff --git a/framework/source/services/backingwindow.hxx b/framework/source/services/backingwindow.hxx
deleted file mode 100644
index 1c58f9e6949b..000000000000
--- a/framework/source/services/backingwindow.hxx
+++ /dev/null
@@ -1,132 +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_BACKINGWINDOW_HXX
-#define FRAMEWORK_BACKINGWINDOW_HXX
-
-#include <rtl/ustring.hxx>
-
-#include <vcl/builder.hxx>
-#include <vcl/button.hxx>
-#include <vcl/menubtn.hxx>
-#include <vcl/bitmapex.hxx>
-#include <vcl/toolbox.hxx>
-#include <vcl/layout.hxx>
-
-#include <svtools/acceleratorexecute.hxx>
-#include <unotools/moduleoptions.hxx>
-
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/frame/XUIControllerFactory.hpp>
-#include <com/sun/star/frame/XPopupMenuController.hpp>
-#include <com/sun/star/awt/XPopupMenu.hpp>
-#include <com/sun/star/frame/XDispatchProvider.hpp>
-#include <com/sun/star/frame/XDesktop.hpp>
-#include <com/sun/star/frame/XFrame.hpp>
-#include <com/sun/star/frame/XTerminateListener.hpp>
-#include <com/sun/star/document/XEventListener.hpp>
-#include <com/sun/star/document/XEventBroadcaster.hpp>
-#include <com/sun/star/util/XURLTransformer.hpp>
-#include <com/sun/star/ui/dialogs/XFilePicker.hpp>
-#include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp>
-#include <com/sun/star/ui/dialogs/XFilterManager.hpp>
-#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
-#include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
-
-#include <set>
-
-class MnemonicGenerator;
-
-namespace framework
-{
- class BackingWindow : public Window, public VclBuilderContainer
- {
- com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > mxContext;
- 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::XUIControllerFactory > mxPopupMenuFactory;
- com::sun::star::uno::Reference< com::sun::star::frame::XPopupMenuController > mxPopupMenuController;
- com::sun::star::uno::Reference< com::sun::star::awt::XPopupMenu > mxPopupMenu;
-
- PushButton* mpWriterButton;
- PushButton* mpCalcButton;
- PushButton* mpImpressButton;
- MenuButton* mpOpenButton;
- PushButton* mpDrawButton;
- PushButton* mpDBButton;
- PushButton* mpMathButton;
- PushButton* mpTemplateButton;
-
- PushButton* mpExtensionsButton;
- PushButton* mpInfoButton;
- PushButton* mpTplRepButton;
-
- VclGrid* mpStartCenterContainer;
-
- BitmapEx maBackgroundLeft;
- BitmapEx maBackgroundMiddle;
- BitmapEx maBackgroundRight;
-
- Rectangle maStartCentButtons;
-
- bool mbInitControls;
- sal_Int32 mnHideExternalLinks;
- svt::AcceleratorExecute* mpAccExec;
-
- int mnSCWidth;
- int mnSCHeight;
-
- void setupButton( PushButton* pButton, const OUString& rURL, const std::set<OUString>& rURLS,
- SvtModuleOptions& rOpt, SvtModuleOptions::EModule eMod );
-
- void setupExternalLink( PushButton* pButton );
-
- void dispatchURL( const OUString& i_rURL,
- const OUString& i_rTarget = OUString( "_default" ),
- const com::sun::star::uno::Reference< com::sun::star::frame::XDispatchProvider >& i_xProv = com::sun::star::uno::Reference< com::sun::star::frame::XDispatchProvider >(),
- const com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& = com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >()
- );
-
- DECL_LINK( ClickHdl, Button* );
- DECL_LINK( ExtLinkClickHdl, Button* );
- DECL_LINK( ActivateHdl, Button* );
- DECL_LINK( WindowEventListener, VclSimpleEvent* );
-
- void initControls();
- void initBackground();
- void prepareRecentFileMenu();
-
- public:
- BackingWindow( Window* pParent );
- ~BackingWindow();
-
- virtual void Paint( const Rectangle& rRect );
- virtual void Resize();
- virtual long Notify( NotifyEvent& rNEvt );
-
- virtual Size GetOptimalSize() const;
-
- void setOwningFrame( const com::sun::star::uno::Reference< com::sun::star::frame::XFrame >& xFrame );
- };
-
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */