summaryrefslogtreecommitdiff
path: root/framework/source/tabwin/tabwinfactory.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'framework/source/tabwin/tabwinfactory.cxx')
-rw-r--r--framework/source/tabwin/tabwinfactory.cxx176
1 files changed, 176 insertions, 0 deletions
diff --git a/framework/source/tabwin/tabwinfactory.cxx b/framework/source/tabwin/tabwinfactory.cxx
new file mode 100644
index 000000000000..87d48ddac7aa
--- /dev/null
+++ b/framework/source/tabwin/tabwinfactory.cxx
@@ -0,0 +1,176 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_framework.hxx"
+#include <tabwin/tabwinfactory.hxx>
+#include <tabwin/tabwindow.hxx>
+
+//_________________________________________________________________________________________________________________
+// my own includes
+//_________________________________________________________________________________________________________________
+#include <threadhelp/resetableguard.hxx>
+
+//_________________________________________________________________________________________________________________
+// interface includes
+//_________________________________________________________________________________________________________________
+#include <com/sun/star/util/XURLTransformer.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/awt/XTopWindow.hpp>
+#include <com/sun/star/awt/WindowAttribute.hpp>
+
+//_________________________________________________________________________________________________________________
+// includes of other projects
+//_________________________________________________________________________________________________________________
+#include <vcl/svapp.hxx>
+#include <tools/urlobj.hxx>
+#include <rtl/ustrbuf.hxx>
+
+//_________________________________________________________________________________________________________________
+// Defines
+//_________________________________________________________________________________________________________________
+//
+
+using namespace rtl;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::beans;
+using namespace com::sun::star::util;
+
+namespace framework
+{
+
+//*****************************************************************************************************************
+// XInterface, XTypeProvider, XServiceInfo
+//*****************************************************************************************************************
+DEFINE_XSERVICEINFO_ONEINSTANCESERVICE ( TabWinFactory ,
+ ::cppu::OWeakObject ,
+ SERVICENAME_TABWINFACTORY ,
+ IMPLEMENTATIONNAME_TABWINFACTORY
+ )
+
+DEFINE_INIT_SERVICE ( TabWinFactory, {} )
+
+TabWinFactory::TabWinFactory( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceManager ) :
+ ThreadHelpBase( &Application::GetSolarMutex() )
+ , m_xServiceManager( xServiceManager )
+{
+}
+
+TabWinFactory::~TabWinFactory()
+{
+}
+
+css::uno::Reference< css::uno::XInterface > SAL_CALL TabWinFactory::createInstanceWithContext(
+ const css::uno::Reference< css::uno::XComponentContext >& Context )
+throw ( css::uno::Exception, css::uno::RuntimeException )
+{
+ css::uno::Sequence< css::uno::Any > aArgs;
+
+ return createInstanceWithArgumentsAndContext( aArgs, Context );
+}
+
+css::uno::Reference< css::uno::XInterface > SAL_CALL TabWinFactory::createInstanceWithArgumentsAndContext(
+ const css::uno::Sequence< css::uno::Any >& Arguments, const css::uno::Reference< css::uno::XComponentContext >& )
+throw ( css::uno::Exception, css::uno::RuntimeException )
+{
+ const rtl::OUString aTopWindowArgName( RTL_CONSTASCII_USTRINGPARAM( "TopWindow" ));
+
+ /* SAFE AREA ----------------------------------------------------------------------------------------------- */
+ ResetableGuard aLock( m_aLock );
+ css::uno::Reference< css::awt::XToolkit > xToolkit = m_xToolkit;
+ css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR( m_xServiceManager );
+ aLock.unlock();
+ /* SAFE AREA ----------------------------------------------------------------------------------------------- */
+
+ css::uno::Reference< css::uno::XInterface > xReturn;
+ css::uno::Reference< css::awt::XTopWindow > xTopWindow;
+ css::beans::PropertyValue aPropValue;
+
+ for ( sal_Int32 i = 0; i < Arguments.getLength(); i++ )
+ {
+ if ( Arguments[i] >>= aPropValue )
+ {
+ if ( aPropValue.Name == aTopWindowArgName )
+ aPropValue.Value >>= xTopWindow;
+ }
+ }
+
+ if ( !xToolkit.is() && xSMGR.is() )
+ {
+ xToolkit = css::uno::Reference< css::awt::XToolkit >( xSMGR->createInstance( SERVICENAME_VCLTOOLKIT ), css::uno::UNO_QUERY );
+ if ( xToolkit.is() )
+ {
+ /* SAFE AREA ----------------------------------------------------------------------------------------------- */
+ aLock.lock();
+ m_xToolkit = xToolkit;
+ aLock.unlock();
+ /* SAFE AREA ----------------------------------------------------------------------------------------------- */
+ }
+ }
+
+ if ( !xTopWindow.is() )
+ {
+ if ( xToolkit.is() )
+ {
+ // describe window properties.
+ css::awt::WindowDescriptor aDescriptor;
+ aDescriptor.Type = css::awt::WindowClass_TOP ;
+ aDescriptor.ParentIndex = -1 ;
+ aDescriptor.Parent = css::uno::Reference< css::awt::XWindowPeer >() ;
+ aDescriptor.Bounds = css::awt::Rectangle(0,0,0,0) ;
+ aDescriptor.WindowAttributes = css::awt::WindowAttribute::BORDER|
+ css::awt::WindowAttribute::SIZEABLE|
+ css::awt::WindowAttribute::MOVEABLE|
+ css::awt::WindowAttribute::CLOSEABLE|
+ css::awt::WindowAttribute::MINSIZE;
+
+ // create a parent window
+ xTopWindow = css::uno::Reference< css::awt::XTopWindow >(
+ xToolkit->createWindow( aDescriptor ), css::uno::UNO_QUERY );
+ }
+ }
+
+ if ( xTopWindow.is() )
+ {
+ TabWindow* pTabWindow = new TabWindow( xSMGR );
+
+ css::uno::Sequence< css::uno::Any > aArgs( 1 );
+
+ aPropValue.Name = aTopWindowArgName;
+ aPropValue.Value = css::uno::makeAny( xTopWindow );
+ aArgs[0] = css::uno::makeAny( aPropValue );
+ pTabWindow->initialize( aArgs );
+
+ xReturn = css::uno::Reference< css::uno::XInterface >(
+ static_cast< OWeakObject* >( pTabWindow ), css::uno::UNO_QUERY );
+ }
+
+ return xReturn;
+}
+
+}