/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /************************************************************************* * * 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 * * for a copy of the LGPLv3 License. * ************************************************************************/ // includes ****************************************************************** #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "partwnd.hxx" #include #include #include #include #include //**************************************************************************** // SfxPartChildWnd_Impl //**************************************************************************** SFX_IMPL_DOCKINGWINDOW( SfxPartChildWnd_Impl, SID_BROWSER ); SfxPartChildWnd_Impl::SfxPartChildWnd_Impl ( Window* pParentWnd, sal_uInt16 nId, SfxBindings* pBindings, SfxChildWinInfo* pInfo ) : SfxChildWindow( pParentWnd, nId ) { // Create Window pWindow = new SfxPartDockWnd_Impl( pBindings, this, pParentWnd, WB_STDDOCKWIN | WB_CLIPCHILDREN | WB_SIZEABLE | WB_3DLOOK ); eChildAlignment = SFX_ALIGN_TOP; if ( pInfo ) pInfo->nFlags |= SFX_CHILDWIN_FORCEDOCK; ((SfxDockingWindow*)pWindow)->SetFloatingSize( Size( 175, 175 ) ); pWindow->SetSizePixel( Size( 175, 175 ) ); ( ( SfxDockingWindow* ) pWindow )->Initialize( pInfo ); SetHideNotDelete( sal_True ); } SfxPartChildWnd_Impl::~SfxPartChildWnd_Impl() { ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > xFrame = GetFrame(); // If xFrame=NULL release pMgr! Because this window lives longer then the manager! // In these case we got a xFrame->dispose() call from outside ... and has release our // frame reference in our own DisposingListener. // But don't do it, if xFrame already exist. Then dispose() must come from inside ... // and we need a valid pMgr for further operations ... SfxPartDockWnd_Impl* pWin = (SfxPartDockWnd_Impl*) pWindow; if ( pWin && xFrame == pWin->GetBindings().GetActiveFrame() ) pWin->GetBindings().SetActiveFrame( NULL ); } sal_Bool SfxPartChildWnd_Impl::QueryClose() { return ( (SfxPartDockWnd_Impl*)pWindow )->QueryClose(); } //**************************************************************************** // SfxPartDockWnd_Impl //**************************************************************************** SfxPartDockWnd_Impl::SfxPartDockWnd_Impl ( SfxBindings* pBind, SfxChildWindow* pChildWin, Window* pParent, WinBits nBits ) : SfxDockingWindow( pBind, pChildWin, pParent, nBits ) { ::com::sun::star::uno::Reference < ::com::sun::star::frame::XFrame > xFrame( ::comphelper::getProcessServiceFactory()->createInstance( DEFINE_CONST_UNICODE("com.sun.star.frame.Frame") ), ::com::sun::star::uno::UNO_QUERY ); xFrame->initialize( VCLUnoHelper::GetInterface ( this ) ); ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xPropSet( xFrame, ::com::sun::star::uno::UNO_QUERY ); try { const ::rtl::OUString aLayoutManager( RTL_CONSTASCII_USTRINGPARAM( "LayoutManager" )); ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xLMPropSet; ::com::sun::star::uno::Any a = xPropSet->getPropertyValue( aLayoutManager ); if ( a >>= xLMPropSet ) { const ::rtl::OUString aAutomaticToolbars( RTL_CONSTASCII_USTRINGPARAM( "AutomaticToolbars" )); xLMPropSet->setPropertyValue( aAutomaticToolbars, ::com::sun::star::uno::Any( sal_False )); } } catch( ::com::sun::star::uno::RuntimeException& ) { throw; } catch( ::com::sun::star::uno::Exception& ) { } pChildWin->SetFrame( xFrame ); if ( pBind->GetDispatcher() ) { ::com::sun::star::uno::Reference < ::com::sun::star::frame::XFramesSupplier > xSupp ( pBind->GetDispatcher()->GetFrame()->GetFrame().GetFrameInterface(), ::com::sun::star::uno::UNO_QUERY ); if ( xSupp.is() ) xSupp->getFrames()->append( xFrame ); } else { OSL_FAIL("Bindings without Dispatcher!"); } } //**************************************************************************** SfxPartDockWnd_Impl::~SfxPartDockWnd_Impl() { } //**************************************************************************** void SfxPartDockWnd_Impl::Resize() /* [Description] Adjusting the size of the controls wrt the new window size */ { SfxDockingWindow::Resize(); } //**************************************************************************** sal_Bool SfxPartDockWnd_Impl::QueryClose() { sal_Bool bClose = sal_True; SfxChildWindow* pChild = GetChildWindow_Impl(); if( pChild ) { ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > xFrame = pChild->GetFrame(); if( xFrame.is() ) { ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController > xCtrl = xFrame->getController(); if( xCtrl.is() ) bClose = xCtrl->suspend( sal_True ); } } return bClose; } //**************************************************************************** long SfxPartDockWnd_Impl::Notify( NotifyEvent& rEvt ) { if( rEvt.GetType() == EVENT_GETFOCUS ) { SfxChildWindow* pChild = GetChildWindow_Impl(); if( pChild ) { ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > xFrame = pChild->GetFrame(); if( xFrame.is() ) xFrame->activate(); } } return SfxDockingWindow::Notify( rEvt ); } void SfxPartDockWnd_Impl::FillInfo( SfxChildWinInfo& rInfo ) const { SfxDockingWindow::FillInfo( rInfo ); rInfo.bVisible = sal_False; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */