| /************************************************************** |
| * |
| * 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 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_sfx2.hxx" |
| |
| // includes ****************************************************************** |
| #include <com/sun/star/awt/XWindow.hpp> |
| #include <com/sun/star/task/XStatusIndicator.hpp> |
| #include <com/sun/star/uno/Reference.h> |
| #include <com/sun/star/uno/Sequence.hxx> |
| #include <com/sun/star/beans/PropertyValue.hpp> |
| #include <com/sun/star/util/URL.hpp> |
| #include <com/sun/star/frame/XFrame.hpp> |
| #include <com/sun/star/util/XCloseable.hpp> |
| #include <com/sun/star/util/CloseVetoException.hpp> |
| #include <com/sun/star/lang/XComponent.hpp> |
| #include <com/sun/star/lang/DisposedException.hpp> |
| #include <com/sun/star/frame/XController.hpp> |
| #include <com/sun/star/beans/XPropertySet.hpp> |
| #include <com/sun/star/awt/PosSize.hpp> |
| #ifndef _UNOTOOLS_PROCESSFACTORY_HXX |
| #include <comphelper/processfactory.hxx> |
| #endif |
| |
| #include <toolkit/helper/vclunohelper.hxx> |
| |
| #include <sfx2/sfxsids.hrc> |
| #include "partwnd.hxx" |
| #include <sfx2/bindings.hxx> |
| #include <sfx2/dispatch.hxx> |
| #include <sfx2/viewfrm.hxx> |
| #include <sfx2/frame.hxx> |
| #include <sfx2/sfxuno.hxx> |
| |
| //**************************************************************************** |
| // 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 ) |
| { |
| // Window erzeugen |
| 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 != NULL && !xFrame.is() ) |
| // pWin->ReleaseChildWindow_Impl(); |
| /* |
| // Release frame and window. |
| // If frame reference is valid here ... start dieing from inside by calling dispose(). |
| SetFrame( NULL ); |
| pWindow = NULL; |
| */ |
| if ( pWin && xFrame == pWin->GetBindings().GetActiveFrame() ) |
| pWin->GetBindings().SetActiveFrame( NULL ); |
| /* |
| if( xFrame.is() ) |
| { |
| try |
| { |
| ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloseable > xCloseable ( xFrame, ::com::sun::star::uno::UNO_QUERY ); |
| ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > xDisposeable( xFrame, ::com::sun::star::uno::UNO_QUERY ); |
| if (xCloseable.is()) |
| xCloseable->close(sal_True); |
| else |
| if (xDisposeable.is()) |
| xDisposeable->dispose(); |
| } |
| catch( ::com::sun::star::util::CloseVetoException& ) |
| { |
| } |
| catch( ::com::sun::star::lang::DisposedException& ) |
| { |
| } |
| } |
| */ |
| } |
| |
| 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 { |
| DBG_ERROR("Bindings without Dispatcher!"); |
| } |
| } |
| |
| //**************************************************************************** |
| |
| SfxPartDockWnd_Impl::~SfxPartDockWnd_Impl() |
| { |
| } |
| |
| //**************************************************************************** |
| |
| Rectangle impl_Rectangle_Struct2Object( const ::com::sun::star::awt::Rectangle& aRectangleStruct ) |
| { |
| return Rectangle(aRectangleStruct.X,aRectangleStruct.Y,aRectangleStruct.Width,aRectangleStruct.Height); |
| } |
| |
| void SfxPartDockWnd_Impl::Resize() |
| |
| /* [Beschreibung] |
| Anpassung der Gr"osse der Controls an die neue Windowgr"osse |
| */ |
| |
| { |
| 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; |
| } |
| |
| |