fwk: Constructor feature for single-instance TaskCreatorService.
Change-Id: I9e994ebb4822458039709690aa5dd0a7f75735ac
This commit is contained in:
@@ -30,6 +30,7 @@
|
|||||||
#include <com/sun/star/frame/XFrame.hpp>
|
#include <com/sun/star/frame/XFrame.hpp>
|
||||||
#include <com/sun/star/frame/XFrameActionListener.hpp>
|
#include <com/sun/star/frame/XFrameActionListener.hpp>
|
||||||
#include <com/sun/star/lang/XEventListener.hpp>
|
#include <com/sun/star/lang/XEventListener.hpp>
|
||||||
|
#include <com/sun/star/uno/XComponentContext.hpp>
|
||||||
|
|
||||||
#include <unotools/moduleoptions.hxx>
|
#include <unotools/moduleoptions.hxx>
|
||||||
#include <cppuhelper/implbase2.hxx>
|
#include <cppuhelper/implbase2.hxx>
|
||||||
|
@@ -1,148 +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 INCLUDED_FRAMEWORK_INC_SERVICES_TASKCREATORSRV_HXX
|
|
||||||
#define INCLUDED_FRAMEWORK_INC_SERVICES_TASKCREATORSRV_HXX
|
|
||||||
|
|
||||||
#include <threadhelp/threadhelpbase.hxx>
|
|
||||||
#include <macros/xinterface.hxx>
|
|
||||||
#include <macros/xtypeprovider.hxx>
|
|
||||||
#include <macros/xserviceinfo.hxx>
|
|
||||||
#include <general.h>
|
|
||||||
#include <stdtypes.h>
|
|
||||||
|
|
||||||
#include <com/sun/star/uno/XInterface.hpp>
|
|
||||||
#include <com/sun/star/frame/XFrame2.hpp>
|
|
||||||
#include <com/sun/star/lang/XTypeProvider.hpp>
|
|
||||||
#include <com/sun/star/lang/XServiceInfo.hpp>
|
|
||||||
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
|
|
||||||
#include <com/sun/star/lang/XSingleServiceFactory.hpp>
|
|
||||||
#include <com/sun/star/awt/Rectangle.hpp>
|
|
||||||
|
|
||||||
#include <cppuhelper/implbase2.hxx>
|
|
||||||
#include <comphelper/sequenceashashmap.hxx>
|
|
||||||
|
|
||||||
//_______________________________________________
|
|
||||||
// definition
|
|
||||||
|
|
||||||
/// [XFrame] if it's set, it will be used as parent frame for the new created frame.
|
|
||||||
const char ARGUMENT_PARENTFRAME[] = "ParentFrame"; // XFrame
|
|
||||||
|
|
||||||
/** [OUString] if it's not a special name (beginning with "_" ... which are not allowed here!)
|
|
||||||
it will be set as the API name of the new created frame.
|
|
||||||
*/
|
|
||||||
const char ARGUMENT_FRAMENAME[] = "FrameName"; // OUString
|
|
||||||
|
|
||||||
/// [sal_Bool] If its set to sal_True we will make the new created frame visible.
|
|
||||||
const char ARGUMENT_MAKEVISIBLE[] = "MakeVisible"; // sal_Bool
|
|
||||||
|
|
||||||
/** [sal_Bool] If not "ContainerWindow" property is set it force creation of a
|
|
||||||
top level window as new container window.
|
|
||||||
*/
|
|
||||||
const char ARGUMENT_CREATETOPWINDOW[] = "CreateTopWindow"; // sal_Bool
|
|
||||||
|
|
||||||
/// [Rectangle] Place the new created frame on this place and resize the container window.
|
|
||||||
const char ARGUMENT_POSSIZE[] = "PosSize"; // Rectangle
|
|
||||||
|
|
||||||
/// [XWindow] an outside created window, used as container window of the new created frame.
|
|
||||||
const char ARGUMENT_CONTAINERWINDOW[] = "ContainerWindow"; // XWindow
|
|
||||||
|
|
||||||
/** [sal_Bool] enable/disable special mode, where this frame will be part of
|
|
||||||
the persistent window state feature suitable for any office module window
|
|
||||||
*/
|
|
||||||
const char ARGUMENT_SUPPORTPERSISTENTWINDOWSTATE[] = "SupportPersistentWindowState"; // sal_Bool
|
|
||||||
|
|
||||||
/** [sal_Bool] enable/disable special mode, where the title bar of our
|
|
||||||
the new created frame will be updated automaticly.
|
|
||||||
Default = ON !
|
|
||||||
*/
|
|
||||||
const char ARGUMENT_ENABLE_TITLEBARUPDATE[] = "EnableTitleBarUpdate"; // sal_Bool
|
|
||||||
|
|
||||||
|
|
||||||
namespace framework
|
|
||||||
{
|
|
||||||
|
|
||||||
//_______________________________________________
|
|
||||||
/**
|
|
||||||
* TODO document me
|
|
||||||
*/
|
|
||||||
class TaskCreatorService : // attention! Must be the first base class to guarentee right initialize lock ...
|
|
||||||
private ThreadHelpBase,
|
|
||||||
public ::cppu::WeakImplHelper2<
|
|
||||||
css::lang::XServiceInfo,
|
|
||||||
css::lang::XSingleServiceFactory>
|
|
||||||
{
|
|
||||||
//___________________________________________
|
|
||||||
// member
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
//---------------------------------------
|
|
||||||
/** @short the global uno service manager.
|
|
||||||
@descr Must be used to create own needed services.
|
|
||||||
*/
|
|
||||||
css::uno::Reference< css::uno::XComponentContext > m_xContext;
|
|
||||||
|
|
||||||
//___________________________________________
|
|
||||||
// interface
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
TaskCreatorService(const css::uno::Reference< css::uno::XComponentContext >& xContext);
|
|
||||||
virtual ~TaskCreatorService( );
|
|
||||||
|
|
||||||
// XInterface, XTypeProvider, XServiceInfo
|
|
||||||
DECLARE_XSERVICEINFO
|
|
||||||
|
|
||||||
// XSingleServiceFactory
|
|
||||||
virtual css::uno::Reference< css::uno::XInterface > SAL_CALL createInstance()
|
|
||||||
throw(css::uno::Exception ,
|
|
||||||
css::uno::RuntimeException);
|
|
||||||
|
|
||||||
virtual css::uno::Reference< css::uno::XInterface > SAL_CALL createInstanceWithArguments(const css::uno::Sequence< css::uno::Any >& lArguments)
|
|
||||||
throw(css::uno::Exception ,
|
|
||||||
css::uno::RuntimeException);
|
|
||||||
//___________________________________________
|
|
||||||
// helper
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
css::uno::Reference< css::awt::XWindow > implts_createContainerWindow( const css::uno::Reference< css::awt::XWindow >& xParentWindow ,
|
|
||||||
const css::awt::Rectangle& aPosSize ,
|
|
||||||
sal_Bool bTopWindow );
|
|
||||||
|
|
||||||
void implts_applyDocStyleToWindow(const css::uno::Reference< css::awt::XWindow >& xWindow) const;
|
|
||||||
|
|
||||||
css::uno::Reference< css::frame::XFrame2 > implts_createFrame( const css::uno::Reference< css::frame::XFrame >& xParentFrame ,
|
|
||||||
const css::uno::Reference< css::awt::XWindow >& xContainerWindow ,
|
|
||||||
const OUString& sName );
|
|
||||||
|
|
||||||
void implts_establishWindowStateListener( const css::uno::Reference< css::frame::XFrame2 >& xFrame );
|
|
||||||
void implts_establishTitleBarUpdate( const css::uno::Reference< css::frame::XFrame2 >& xFrame );
|
|
||||||
|
|
||||||
void implts_establishDocModifyListener( const css::uno::Reference< css::frame::XFrame2 >& xFrame );
|
|
||||||
|
|
||||||
OUString impl_filterNames( const OUString& sName );
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace framework
|
|
||||||
|
|
||||||
#endif // INCLUDED_FRAMEWORK_INC_SERVICES_TASKCREATORSRV_HXX
|
|
||||||
|
|
||||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
58
framework/inc/taskcreatordefs.hxx
Normal file
58
framework/inc/taskcreatordefs.hxx
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
/* -*- 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 INCLUDED_FRAMEWORK_INC_TASKCREATORDEFS_HXX
|
||||||
|
#define INCLUDED_FRAMEWORK_INC_TASKCREATORDEFS_HXX
|
||||||
|
|
||||||
|
/// [XFrame] if it's set, it will be used as parent frame for the new created frame.
|
||||||
|
const char ARGUMENT_PARENTFRAME[] = "ParentFrame"; // XFrame
|
||||||
|
|
||||||
|
/** [OUString] if it's not a special name (beginning with "_" ... which are not allowed here!)
|
||||||
|
it will be set as the API name of the new created frame.
|
||||||
|
*/
|
||||||
|
const char ARGUMENT_FRAMENAME[] = "FrameName"; // OUString
|
||||||
|
|
||||||
|
/// [sal_Bool] If its set to sal_True we will make the new created frame visible.
|
||||||
|
const char ARGUMENT_MAKEVISIBLE[] = "MakeVisible"; // sal_Bool
|
||||||
|
|
||||||
|
/** [sal_Bool] If not "ContainerWindow" property is set it force creation of a
|
||||||
|
top level window as new container window.
|
||||||
|
*/
|
||||||
|
const char ARGUMENT_CREATETOPWINDOW[] = "CreateTopWindow"; // sal_Bool
|
||||||
|
|
||||||
|
/// [Rectangle] Place the new created frame on this place and resize the container window.
|
||||||
|
const char ARGUMENT_POSSIZE[] = "PosSize"; // Rectangle
|
||||||
|
|
||||||
|
/// [XWindow] an outside created window, used as container window of the new created frame.
|
||||||
|
const char ARGUMENT_CONTAINERWINDOW[] = "ContainerWindow"; // XWindow
|
||||||
|
|
||||||
|
/** [sal_Bool] enable/disable special mode, where this frame will be part of
|
||||||
|
the persistent window state feature suitable for any office module window
|
||||||
|
*/
|
||||||
|
const char ARGUMENT_SUPPORTPERSISTENTWINDOWSTATE[] = "SupportPersistentWindowState"; // sal_Bool
|
||||||
|
|
||||||
|
/** [sal_Bool] enable/disable special mode, where the title bar of our
|
||||||
|
the new created frame will be updated automaticly.
|
||||||
|
Default = ON !
|
||||||
|
*/
|
||||||
|
const char ARGUMENT_ENABLE_TITLEBARUPDATE[] = "EnableTitleBarUpdate"; // sal_Bool
|
||||||
|
|
||||||
|
#endif // INCLUDED_FRAMEWORK_INC_TASKCREATORDEFS_HXX
|
||||||
|
|
||||||
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
@@ -18,10 +18,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <classes/taskcreator.hxx>
|
#include <classes/taskcreator.hxx>
|
||||||
#include "services/taskcreatorsrv.hxx"
|
|
||||||
#include <threadhelp/readguard.hxx>
|
#include <threadhelp/readguard.hxx>
|
||||||
#include <loadenv/targethelper.hxx>
|
#include <loadenv/targethelper.hxx>
|
||||||
#include <services.h>
|
#include <services.h>
|
||||||
|
#include <taskcreatordefs.hxx>
|
||||||
|
|
||||||
#include <com/sun/star/frame/Desktop.hpp>
|
#include <com/sun/star/frame/Desktop.hpp>
|
||||||
#include <com/sun/star/frame/TaskCreator.hpp>
|
#include <com/sun/star/frame/TaskCreator.hpp>
|
||||||
|
@@ -40,7 +40,6 @@
|
|||||||
#include "uiconfiguration/windowstateconfiguration.hxx"
|
#include "uiconfiguration/windowstateconfiguration.hxx"
|
||||||
#include <uifactory/statusbarfactory.hxx>
|
#include <uifactory/statusbarfactory.hxx>
|
||||||
#include <services/sessionlistener.hxx>
|
#include <services/sessionlistener.hxx>
|
||||||
#include <services/taskcreatorsrv.hxx>
|
|
||||||
|
|
||||||
#include <services/ContextChangeEventMultiplexer.hxx>
|
#include <services/ContextChangeEventMultiplexer.hxx>
|
||||||
|
|
||||||
@@ -53,7 +52,6 @@ COMPONENTGETFACTORY ( fwk,
|
|||||||
IFFACTORY( ::framework::StatusBarFactory ) else
|
IFFACTORY( ::framework::StatusBarFactory ) else
|
||||||
IFFACTORY( ::framework::SessionListener ) else
|
IFFACTORY( ::framework::SessionListener ) else
|
||||||
IFFACTORY( ::framework::SessionListener ) else
|
IFFACTORY( ::framework::SessionListener ) else
|
||||||
IFFACTORY( ::framework::TaskCreatorService ) else
|
|
||||||
IFFACTORY( ::framework::ContextChangeEventMultiplexer )
|
IFFACTORY( ::framework::ContextChangeEventMultiplexer )
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -17,58 +17,107 @@
|
|||||||
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "services/taskcreatorsrv.hxx"
|
|
||||||
|
|
||||||
#include <helper/persistentwindowstate.hxx>
|
#include <helper/persistentwindowstate.hxx>
|
||||||
#include <helper/tagwindowasmodified.hxx>
|
#include <helper/tagwindowasmodified.hxx>
|
||||||
#include <helper/titlebarupdate.hxx>
|
#include <helper/titlebarupdate.hxx>
|
||||||
#include <threadhelp/readguard.hxx>
|
|
||||||
#include <threadhelp/writeguard.hxx>
|
|
||||||
#include <loadenv/targethelper.hxx>
|
#include <loadenv/targethelper.hxx>
|
||||||
#include <services.h>
|
#include <taskcreatordefs.hxx>
|
||||||
|
|
||||||
#include <com/sun/star/frame/Frame.hpp>
|
#include <com/sun/star/frame/Frame.hpp>
|
||||||
#include <com/sun/star/frame/XController.hpp>
|
#include <com/sun/star/frame/XFrame2.hpp>
|
||||||
#include <com/sun/star/frame/XModel.hpp>
|
|
||||||
#include <com/sun/star/frame/XDesktop.hpp>
|
#include <com/sun/star/frame/XDesktop.hpp>
|
||||||
|
#include <com/sun/star/awt/Rectangle.hpp>
|
||||||
#include <com/sun/star/awt/Toolkit.hpp>
|
#include <com/sun/star/awt/Toolkit.hpp>
|
||||||
#include <com/sun/star/awt/XTopWindow.hpp>
|
|
||||||
#include <com/sun/star/awt/WindowDescriptor.hpp>
|
#include <com/sun/star/awt/WindowDescriptor.hpp>
|
||||||
#include <com/sun/star/awt/WindowAttribute.hpp>
|
#include <com/sun/star/awt/WindowAttribute.hpp>
|
||||||
#include <com/sun/star/awt/VclWindowPeerAttribute.hpp>
|
#include <com/sun/star/awt/VclWindowPeerAttribute.hpp>
|
||||||
|
#include <com/sun/star/lang/XServiceInfo.hpp>
|
||||||
|
#include <com/sun/star/lang/XSingleServiceFactory.hpp>
|
||||||
|
|
||||||
|
#include <comphelper/sequenceashashmap.hxx>
|
||||||
|
#include <cppuhelper/compbase2.hxx>
|
||||||
|
#include <cppuhelper/supportsservice.hxx>
|
||||||
#include <svtools/colorcfg.hxx>
|
#include <svtools/colorcfg.hxx>
|
||||||
#include <vcl/svapp.hxx>
|
|
||||||
|
|
||||||
#include <toolkit/helper/vclunohelper.hxx>
|
#include <toolkit/helper/vclunohelper.hxx>
|
||||||
|
#include <vcl/svapp.hxx>
|
||||||
#include <vcl/window.hxx>
|
#include <vcl/window.hxx>
|
||||||
|
|
||||||
//_______________________________________________
|
using namespace framework;
|
||||||
// namespaces
|
|
||||||
|
|
||||||
namespace framework
|
namespace {
|
||||||
|
|
||||||
|
typedef ::cppu::WeakComponentImplHelper2<
|
||||||
|
css::lang::XServiceInfo,
|
||||||
|
css::lang::XSingleServiceFactory> TaskCreatorService_BASE;
|
||||||
|
|
||||||
|
class TaskCreatorService : private osl::Mutex,
|
||||||
|
public TaskCreatorService_BASE
|
||||||
{
|
{
|
||||||
//-----------------------------------------------
|
private:
|
||||||
DEFINE_XSERVICEINFO_ONEINSTANCESERVICE_2(TaskCreatorService ,
|
|
||||||
::cppu::OWeakObject ,
|
|
||||||
"com.sun.star.frame.TaskCreator",
|
|
||||||
IMPLEMENTATIONNAME_FWK_TASKCREATOR)
|
|
||||||
|
|
||||||
//-----------------------------------------------
|
//---------------------------------------
|
||||||
DEFINE_INIT_SERVICE(
|
/** @short the global uno service manager.
|
||||||
TaskCreatorService,
|
@descr Must be used to create own needed services.
|
||||||
{
|
*/
|
||||||
/*Attention
|
css::uno::Reference< css::uno::XComponentContext > m_xContext;
|
||||||
I think we don't need any mutex or lock here ... because we are called by our own static method impl_createInstance()
|
|
||||||
to create a new instance of this class by our own supported service factory.
|
public:
|
||||||
see macro DEFINE_XSERVICEINFO_MULTISERVICE and "impl_initService()" for further information!
|
|
||||||
*/
|
TaskCreatorService(const css::uno::Reference< css::uno::XComponentContext >& xContext);
|
||||||
}
|
virtual ~TaskCreatorService( );
|
||||||
)
|
|
||||||
|
virtual OUString SAL_CALL getImplementationName()
|
||||||
|
throw (css::uno::RuntimeException)
|
||||||
|
{
|
||||||
|
return OUString("com.sun.star.comp.framework.TaskCreator");
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual sal_Bool SAL_CALL supportsService(OUString const & ServiceName)
|
||||||
|
throw (css::uno::RuntimeException)
|
||||||
|
{
|
||||||
|
return cppu::supportsService(this, ServiceName);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames()
|
||||||
|
throw (css::uno::RuntimeException)
|
||||||
|
{
|
||||||
|
css::uno::Sequence< OUString > aSeq(1);
|
||||||
|
aSeq[0] = OUString("com.sun.star.frame.TaskCreator");
|
||||||
|
return aSeq;
|
||||||
|
}
|
||||||
|
|
||||||
|
// XSingleServiceFactory
|
||||||
|
virtual css::uno::Reference< css::uno::XInterface > SAL_CALL createInstance()
|
||||||
|
throw(css::uno::Exception ,
|
||||||
|
css::uno::RuntimeException);
|
||||||
|
|
||||||
|
virtual css::uno::Reference< css::uno::XInterface > SAL_CALL createInstanceWithArguments(const css::uno::Sequence< css::uno::Any >& lArguments)
|
||||||
|
throw(css::uno::Exception ,
|
||||||
|
css::uno::RuntimeException);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
css::uno::Reference< css::awt::XWindow > implts_createContainerWindow( const css::uno::Reference< css::awt::XWindow >& xParentWindow ,
|
||||||
|
const css::awt::Rectangle& aPosSize ,
|
||||||
|
sal_Bool bTopWindow );
|
||||||
|
|
||||||
|
void implts_applyDocStyleToWindow(const css::uno::Reference< css::awt::XWindow >& xWindow) const;
|
||||||
|
|
||||||
|
css::uno::Reference< css::frame::XFrame2 > implts_createFrame( const css::uno::Reference< css::frame::XFrame >& xParentFrame ,
|
||||||
|
const css::uno::Reference< css::awt::XWindow >& xContainerWindow ,
|
||||||
|
const OUString& sName );
|
||||||
|
|
||||||
|
void implts_establishWindowStateListener( const css::uno::Reference< css::frame::XFrame2 >& xFrame );
|
||||||
|
void implts_establishTitleBarUpdate( const css::uno::Reference< css::frame::XFrame2 >& xFrame );
|
||||||
|
|
||||||
|
void implts_establishDocModifyListener( const css::uno::Reference< css::frame::XFrame2 >& xFrame );
|
||||||
|
|
||||||
|
OUString impl_filterNames( const OUString& sName );
|
||||||
|
};
|
||||||
|
|
||||||
//-----------------------------------------------
|
//-----------------------------------------------
|
||||||
TaskCreatorService::TaskCreatorService(const css::uno::Reference< css::uno::XComponentContext >& xContext)
|
TaskCreatorService::TaskCreatorService(const css::uno::Reference< css::uno::XComponentContext >& xContext)
|
||||||
: ThreadHelpBase (&Application::GetSolarMutex())
|
: TaskCreatorService_BASE(*static_cast<osl::Mutex *>(this))
|
||||||
, m_xContext (xContext )
|
, m_xContext (xContext )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -185,14 +234,8 @@ css::uno::Reference< css::awt::XWindow > TaskCreatorService::implts_createContai
|
|||||||
const css::awt::Rectangle& aPosSize ,
|
const css::awt::Rectangle& aPosSize ,
|
||||||
sal_Bool bTopWindow )
|
sal_Bool bTopWindow )
|
||||||
{
|
{
|
||||||
// SAFE ->
|
|
||||||
ReadGuard aReadLock( m_aLock );
|
|
||||||
css::uno::Reference< css::uno::XComponentContext > xContext = m_xContext;
|
|
||||||
aReadLock.unlock();
|
|
||||||
// <- SAFE
|
|
||||||
|
|
||||||
// get toolkit to create task container window
|
// get toolkit to create task container window
|
||||||
css::uno::Reference< css::awt::XToolkit2 > xToolkit = css::awt::Toolkit::create( xContext );
|
css::uno::Reference< css::awt::XToolkit2 > xToolkit = css::awt::Toolkit::create( m_xContext );
|
||||||
|
|
||||||
// Check if child frames can be created really. We need at least a valid window at the parent frame ...
|
// Check if child frames can be created really. We need at least a valid window at the parent frame ...
|
||||||
css::uno::Reference< css::awt::XWindowPeer > xParentWindowPeer;
|
css::uno::Reference< css::awt::XWindowPeer > xParentWindowPeer;
|
||||||
@@ -248,14 +291,8 @@ css::uno::Reference< css::frame::XFrame2 > TaskCreatorService::implts_createFram
|
|||||||
const css::uno::Reference< css::awt::XWindow >& xContainerWindow,
|
const css::uno::Reference< css::awt::XWindow >& xContainerWindow,
|
||||||
const OUString& sName )
|
const OUString& sName )
|
||||||
{
|
{
|
||||||
// SAFE ->
|
|
||||||
ReadGuard aReadLock( m_aLock );
|
|
||||||
css::uno::Reference< css::uno::XComponentContext > xContext = m_xContext;
|
|
||||||
aReadLock.unlock();
|
|
||||||
// <- SAFE
|
|
||||||
|
|
||||||
// create new frame.
|
// create new frame.
|
||||||
css::uno::Reference< css::frame::XFrame2 > xNewFrame = css::frame::Frame::create( xContext );
|
css::uno::Reference< css::frame::XFrame2 > xNewFrame = css::frame::Frame::create( m_xContext );
|
||||||
|
|
||||||
// Set window on frame.
|
// Set window on frame.
|
||||||
// Do it before calling any other interface methods ...
|
// Do it before calling any other interface methods ...
|
||||||
@@ -281,17 +318,11 @@ css::uno::Reference< css::frame::XFrame2 > TaskCreatorService::implts_createFram
|
|||||||
//-----------------------------------------------
|
//-----------------------------------------------
|
||||||
void TaskCreatorService::implts_establishWindowStateListener( const css::uno::Reference< css::frame::XFrame2 >& xFrame )
|
void TaskCreatorService::implts_establishWindowStateListener( const css::uno::Reference< css::frame::XFrame2 >& xFrame )
|
||||||
{
|
{
|
||||||
// SAFE ->
|
|
||||||
ReadGuard aReadLock( m_aLock );
|
|
||||||
css::uno::Reference< css::uno::XComponentContext > xContext = m_xContext;
|
|
||||||
aReadLock.unlock();
|
|
||||||
// <- SAFE
|
|
||||||
|
|
||||||
// Special feature: It's allowed for frames using a top level window only!
|
// Special feature: It's allowed for frames using a top level window only!
|
||||||
// We must create a special listener service and couple it with the new created task frame.
|
// We must create a special listener service and couple it with the new created task frame.
|
||||||
// He will restore or save the window state of it ...
|
// He will restore or save the window state of it ...
|
||||||
// See used classes for further information too.
|
// See used classes for further information too.
|
||||||
PersistentWindowState* pPersistentStateHandler = new PersistentWindowState( xContext );
|
PersistentWindowState* pPersistentStateHandler = new PersistentWindowState( m_xContext );
|
||||||
css::uno::Reference< css::lang::XInitialization > xInit(static_cast< ::cppu::OWeakObject* >(pPersistentStateHandler), css::uno::UNO_QUERY_THROW);
|
css::uno::Reference< css::lang::XInitialization > xInit(static_cast< ::cppu::OWeakObject* >(pPersistentStateHandler), css::uno::UNO_QUERY_THROW);
|
||||||
|
|
||||||
css::uno::Sequence< css::uno::Any > lInitData(1);
|
css::uno::Sequence< css::uno::Any > lInitData(1);
|
||||||
@@ -316,13 +347,7 @@ void TaskCreatorService::implts_establishDocModifyListener( const css::uno::Refe
|
|||||||
//-----------------------------------------------
|
//-----------------------------------------------
|
||||||
void TaskCreatorService::implts_establishTitleBarUpdate( const css::uno::Reference< css::frame::XFrame2 >& xFrame )
|
void TaskCreatorService::implts_establishTitleBarUpdate( const css::uno::Reference< css::frame::XFrame2 >& xFrame )
|
||||||
{
|
{
|
||||||
// SAFE ->
|
TitleBarUpdate* pHelper = new TitleBarUpdate (m_xContext);
|
||||||
ReadGuard aReadLock( m_aLock );
|
|
||||||
css::uno::Reference< css::uno::XComponentContext > xContext = m_xContext;
|
|
||||||
aReadLock.unlock();
|
|
||||||
// <- SAFE
|
|
||||||
|
|
||||||
TitleBarUpdate* pHelper = new TitleBarUpdate (xContext);
|
|
||||||
css::uno::Reference< css::lang::XInitialization > xInit(static_cast< ::cppu::OWeakObject* >(pHelper), css::uno::UNO_QUERY_THROW);
|
css::uno::Reference< css::lang::XInitialization > xInit(static_cast< ::cppu::OWeakObject* >(pHelper), css::uno::UNO_QUERY_THROW);
|
||||||
|
|
||||||
css::uno::Sequence< css::uno::Any > lInitData(1);
|
css::uno::Sequence< css::uno::Any > lInitData(1);
|
||||||
@@ -338,6 +363,31 @@ OUString TaskCreatorService::impl_filterNames( const OUString& sName )
|
|||||||
return sFiltered;
|
return sFiltered;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace framework
|
struct Instance {
|
||||||
|
explicit Instance(
|
||||||
|
css::uno::Reference<css::uno::XComponentContext> const & context):
|
||||||
|
instance(
|
||||||
|
static_cast<cppu::OWeakObject *>(new TaskCreatorService(context)))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
css::uno::Reference<css::uno::XInterface> instance;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Singleton:
|
||||||
|
public rtl::StaticWithArg<
|
||||||
|
Instance, css::uno::Reference<css::uno::XComponentContext>, Singleton>
|
||||||
|
{};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
|
||||||
|
com_sun_star_comp_framework_TaskCreator_get_implementation(
|
||||||
|
css::uno::XComponentContext *context,
|
||||||
|
css::uno::Sequence<css::uno::Any> const &)
|
||||||
|
{
|
||||||
|
return cppu::acquire(static_cast<cppu::OWeakObject *>(
|
||||||
|
Singleton::get(context).instance.get()));
|
||||||
|
}
|
||||||
|
|
||||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||||
|
@@ -121,7 +121,8 @@
|
|||||||
constructor="com_sun_star_comp_framework_StatusIndicatorFactory_get_implementation">
|
constructor="com_sun_star_comp_framework_StatusIndicatorFactory_get_implementation">
|
||||||
<service name="com.sun.star.task.StatusIndicatorFactory"/>
|
<service name="com.sun.star.task.StatusIndicatorFactory"/>
|
||||||
</implementation>
|
</implementation>
|
||||||
<implementation name="com.sun.star.comp.framework.TaskCreator">
|
<implementation name="com.sun.star.comp.framework.TaskCreator"
|
||||||
|
constructor="com_sun_star_comp_framework_TaskCreator_get_implementation">
|
||||||
<service name="com.sun.star.frame.TaskCreator"/>
|
<service name="com.sun.star.frame.TaskCreator"/>
|
||||||
</implementation>
|
</implementation>
|
||||||
<implementation name="com.sun.star.comp.framework.ToolBarControllerFactory"
|
<implementation name="com.sun.star.comp.framework.ToolBarControllerFactory"
|
||||||
|
@@ -59,6 +59,7 @@ core_constructor_list = [
|
|||||||
"com_sun_star_comp_framework_PathSettings_get_implementation",
|
"com_sun_star_comp_framework_PathSettings_get_implementation",
|
||||||
"com_sun_star_comp_framework_PathSubstitution_get_implementation",
|
"com_sun_star_comp_framework_PathSubstitution_get_implementation",
|
||||||
"com_sun_star_comp_framework_StatusIndicatorFactory_get_implementation",
|
"com_sun_star_comp_framework_StatusIndicatorFactory_get_implementation",
|
||||||
|
"com_sun_star_comp_framework_TaskCreator_get_implementation",
|
||||||
"com_sun_star_comp_framework_ToolBarControllerFactory_get_implementation",
|
"com_sun_star_comp_framework_ToolBarControllerFactory_get_implementation",
|
||||||
"com_sun_star_comp_framework_UIConfigurationManager_get_implementation",
|
"com_sun_star_comp_framework_UIConfigurationManager_get_implementation",
|
||||||
"com_sun_star_comp_framework_UIElementFactoryManager_get_implementation",
|
"com_sun_star_comp_framework_UIElementFactoryManager_get_implementation",
|
||||||
|
Reference in New Issue
Block a user