diff options
Diffstat (limited to 'sfx2/source/view')
-rw-r--r-- | sfx2/source/view/frame.cxx | 2 | ||||
-rw-r--r-- | sfx2/source/view/frame2.cxx | 2 | ||||
-rw-r--r-- | sfx2/source/view/frmload.cxx | 11 | ||||
-rw-r--r-- | sfx2/source/view/makefile.mk | 65 | ||||
-rw-r--r-- | sfx2/source/view/orgmgr.cxx | 2 | ||||
-rw-r--r-- | sfx2/source/view/printer.cxx | 2 | ||||
-rw-r--r-- | sfx2/source/view/prnmon.cxx | 495 | ||||
-rw-r--r-- | sfx2/source/view/sfxbasecontroller.cxx | 6 | ||||
-rw-r--r-- | sfx2/source/view/view.hrc | 6 | ||||
-rw-r--r-- | sfx2/source/view/viewfac.cxx | 2 | ||||
-rw-r--r-- | sfx2/source/view/viewfrm.cxx | 25 | ||||
-rw-r--r-- | sfx2/source/view/viewfrm2.cxx | 2 | ||||
-rw-r--r-- | sfx2/source/view/viewprn.cxx | 2 | ||||
-rw-r--r-- | sfx2/source/view/viewsh.cxx | 890 |
14 files changed, 502 insertions, 1010 deletions
diff --git a/sfx2/source/view/frame.cxx b/sfx2/source/view/frame.cxx index 090e94ecb63f..49deab951843 100644 --- a/sfx2/source/view/frame.cxx +++ b/sfx2/source/view/frame.cxx @@ -234,7 +234,7 @@ sal_uInt16 SfxFrame::PrepareClose_Impl( sal_Bool bUI, sal_Bool bForBrowsing ) bOther = ( &pFrame->GetFrame() != this ); } - SFX_APP()->NotifyEvent( SfxEventHint(SFX_EVENT_PREPARECLOSEVIEW, GlobalEventConfig::GetEventName( STR_EVENT_PREPARECLOSEVIEW ), pCur) ); + SFX_APP()->NotifyEvent( SfxViewEventHint(SFX_EVENT_PREPARECLOSEVIEW, GlobalEventConfig::GetEventName( STR_EVENT_PREPARECLOSEVIEW ), pCur, GetController() ) ); if ( bOther ) // if there are other views only the current view of this frame must be asked diff --git a/sfx2/source/view/frame2.cxx b/sfx2/source/view/frame2.cxx index 36edd34c973d..ef963b36d7bb 100644 --- a/sfx2/source/view/frame2.cxx +++ b/sfx2/source/view/frame2.cxx @@ -30,7 +30,7 @@ #include "impframe.hxx" #include "objshimp.hxx" -#include "sfxhelp.hxx" +#include "sfx2/sfxhelp.hxx" #include "workwin.hxx" #include "sfx2/app.hxx" diff --git a/sfx2/source/view/frmload.cxx b/sfx2/source/view/frmload.cxx index df252b831803..a4707f03d364 100644 --- a/sfx2/source/view/frmload.cxx +++ b/sfx2/source/view/frmload.cxx @@ -30,7 +30,6 @@ #include "frmload.hxx" #include "objshimp.hxx" -#include "viewfac.hxx" #include "sfx2/app.hxx" #include "sfx2/dispatch.hxx" #include "sfx2/docfac.hxx" @@ -45,6 +44,7 @@ #include "sfx2/sfxuno.hxx" #include "sfx2/viewfrm.hxx" #include "sfx2/viewsh.hxx" +#include "sfx2/viewfac.hxx" /** === begin UNO includes === **/ #include <com/sun/star/container/XContainerQuery.hpp> @@ -216,11 +216,10 @@ const SfxFilter* SfxFrameLoader_Impl::impl_getFilterFromServiceName_nothrow( con ::rtl::OUString sFilterName; try { - ::framework::RequestFilterSelect* pRequest = new ::framework::RequestFilterSelect( i_rDocumentURL ); - Reference< XInteractionRequest > xRequest ( pRequest ); - i_rxHandler->handle( xRequest ); - if( !pRequest->isAbort() ) - sFilterName = pRequest->getFilter(); + ::framework::RequestFilterSelect aRequest( i_rDocumentURL ); + i_rxHandler->handle( aRequest.GetRequest() ); + if( !aRequest.isAbort() ) + sFilterName = aRequest.getFilter(); } catch( const Exception& ) { diff --git a/sfx2/source/view/makefile.mk b/sfx2/source/view/makefile.mk deleted file mode 100644 index 9c257f4c9f75..000000000000 --- a/sfx2/source/view/makefile.mk +++ /dev/null @@ -1,65 +0,0 @@ -#************************************************************************* -# -# 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. -# -#************************************************************************* - - - -PRJ=..$/.. - -PRJNAME= sfx2 -TARGET= view -ENABLE_EXCEPTIONS= TRUE - -# --- Settings ----------------------------------------------------- - -.INCLUDE : settings.mk -.INCLUDE : $(PRJ)$/util$/makefile.pmk - -# --- Files -------------------------------------------------------- - -SRS1NAME=$(TARGET) -SRC1FILES = \ - view.src - -SLOFILES = \ - $(SLO)$/ipclient.obj \ - $(SLO)$/viewsh.obj \ - $(SLO)$/frmload.obj \ - $(SLO)$/frame.obj \ - $(SLO)$/frame2.obj \ - $(SLO)$/printer.obj \ - $(SLO)$/viewprn.obj \ - $(SLO)$/viewfac.obj \ - $(SLO)$/orgmgr.obj \ - $(SLO)$/viewfrm.obj \ - $(SLO)$/viewfrm2.obj \ - $(SLO)$/sfxbasecontroller.obj \ - $(SLO)$/userinputinterception.obj - -# --- Targets ------------------------------------------------------- - -.INCLUDE : target.mk - diff --git a/sfx2/source/view/orgmgr.cxx b/sfx2/source/view/orgmgr.cxx index b15392372b19..6c92cd448adf 100644 --- a/sfx2/source/view/orgmgr.cxx +++ b/sfx2/source/view/orgmgr.cxx @@ -53,7 +53,7 @@ #include "docvor.hxx" #include "orgmgr.hxx" #include "sfxtypes.hxx" -#include "sfxresid.hxx" +#include "sfx2/sfxresid.hxx" #include "view.hrc" #include <sfx2/docfilt.hxx> #include "fltfnc.hxx" diff --git a/sfx2/source/view/printer.cxx b/sfx2/source/view/printer.cxx index 46a96bafab9a..310c1a58a578 100644 --- a/sfx2/source/view/printer.cxx +++ b/sfx2/source/view/printer.cxx @@ -44,7 +44,7 @@ #include <sfx2/prnmon.hxx> #include <sfx2/viewsh.hxx> #include <sfx2/tabdlg.hxx> -#include "sfxresid.hxx" +#include "sfx2/sfxresid.hxx" #include "view.hrc" #ifdef MSC diff --git a/sfx2/source/view/prnmon.cxx b/sfx2/source/view/prnmon.cxx deleted file mode 100644 index a4e96ab1065e..000000000000 --- a/sfx2/source/view/prnmon.cxx +++ /dev/null @@ -1,495 +0,0 @@ -/************************************************************************* - * - * 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_sfx2.hxx" -#include <com/sun/star/view/PrintableState.hpp> -#include <com/sun/star/util/XCloseable.hpp> -#include <com/sun/star/util/XCloseBroadcaster.hpp> -#include <com/sun/star/util/XCloseListener.hpp> -#include <com/sun/star/util/CloseVetoException.hpp> -#include <vcl/fixed.hxx> -#include <vcl/msgbox.hxx> -#include <svtools/asynclink.hxx> - -#include <unotools/printwarningoptions.hxx> -#include <svl/eitem.hxx> - -#ifndef GCC -#endif - -#include <sfx2/prnmon.hxx> -#include <sfx2/viewsh.hxx> -#include <sfx2/viewfrm.hxx> -#include <sfx2/objsh.hxx> -#include <sfx2/docfile.hxx> -#include "sfxtypes.hxx" -#include <sfx2/progress.hxx> -#include <sfx2/bindings.hxx> -#include "sfxresid.hxx" -#include <sfx2/event.hxx> -#include <sfx2/request.hxx> -#include <sfx2/app.hxx> - -#include "view.hrc" - -//------------------------------------------------------------------------ - -#define SFX_TITLE_MAXLEN_PRINTMONITOR 22 - -//------------------------------------------------------------------------ - -struct SfxPrintMonitor_Impl: public ModelessDialog -{ - - SfxPrintMonitor_Impl( Window *pParent, SfxViewShell *rpViewShell ); - virtual BOOL Close(); - - SfxViewShell* pViewShell; - FixedText aDocName; - FixedText aPrinting; - FixedText aPrinter; - FixedText aPrintInfo; - CancelButton aCancel; -}; - -//------------------------------------------------------------------------- - -struct SfxPrintProgress_Impl : public SfxListener -{ - SfxPrintMonitor_Impl* pMonitor; - SfxViewShell* pViewShell; - SfxPrinter* pPrinter; - SfxPrinter* pOldPrinter; - USHORT nLastPage; - BOOL bRunning; - BOOL bCancel; - BOOL bDeleteOnEndPrint; - BOOL bShow; - BOOL bCallbacks; - BOOL bOldEnablePrintFile; - BOOL bOldFlag; - BOOL bRestoreFlag; - BOOL bAborted; - svtools::AsynchronLink aDeleteLink; - Link aCancelHdl; - -private: - DECL_LINK( CancelHdl, Button * ); - DECL_STATIC_LINK( SfxPrintProgress_Impl, DeleteHdl, SfxPrintProgress * ); - -public: - SfxPrintProgress_Impl( SfxViewShell* pTheViewShell, SfxPrinter* pThePrinter ); - ~SfxPrintProgress_Impl(); - - void Delete( SfxPrintProgress* pAntiImpl ) { aDeleteLink.Call( pAntiImpl ); } - SfxViewShell* GetViewShell() const { return pViewShell; } - BOOL SetPage( USHORT nPage, const String &rPage ); - void CreateMonitor(); - virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); -}; - -void SfxPrintProgress_Impl::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint ) -{ - SfxPrintingHint* pPrintHint = PTR_CAST( SfxPrintingHint, &rHint ); - if ( pPrintHint ) - { - if ( pPrintHint->GetWhich() == -2 ) - CancelHdl(0); - } -} - -//------------------------------------------------------------------------ - -SfxPrintMonitor_Impl::SfxPrintMonitor_Impl( Window* pParent, SfxViewShell* rpViewShell ) : - ModelessDialog( pParent, SfxResId( DLG_PRINTMONITOR ) ), - pViewShell ( rpViewShell ), - aDocName ( this, SfxResId( FT_DOCNAME ) ), - aPrinting ( this, SfxResId( FT_PRINTING ) ), - aPrinter ( this, SfxResId( FT_PRINTER ) ), - aPrintInfo ( this, SfxResId( FT_PRINTINFO ) ), - aCancel ( this, SfxResId( PB_CANCELPRNMON ) ) -{ - if( rpViewShell->GetPrinter()->GetCapabilities( PRINTER_CAPABILITIES_EXTERNALDIALOG ) != 0 ) - { - String aPrep( SfxResId( STR_FT_PREPARATION ) ); - aPrinting.SetText( aPrep ); - aPrinter.Show( FALSE ); - } - FreeResource(); -} - -//------------------------------------------------------------------------ - -IMPL_STATIC_LINK_NOINSTANCE( SfxPrintProgress_Impl, DeleteHdl, SfxPrintProgress*, pAntiImpl ) -{ - delete pAntiImpl; - return 0; -} - -void actualizePrintCancelState(CancelButton& rButton, const SfxObjectShell* pShell) -{ - sal_Bool bEnableCancelButton = sal_True; - if (pShell) - bEnableCancelButton = pShell->Stamp_GetPrintCancelState(); - - if (!bEnableCancelButton) - rButton.Disable(); - else - rButton.Enable(); -} - -//------------------------------------------------------------------------ - -SfxPrintProgress_Impl::SfxPrintProgress_Impl( SfxViewShell* pTheViewShell, - SfxPrinter* pThePrinter ) : - - pMonitor ( 0 ), - pViewShell ( pTheViewShell ), - pPrinter ( pThePrinter ), - pOldPrinter ( NULL ), - nLastPage ( 0 ), - bRunning ( TRUE ), - bCancel ( FALSE ), - bDeleteOnEndPrint ( FALSE ), - bShow ( FALSE ), - bCallbacks ( FALSE ), - bOldEnablePrintFile ( FALSE ), - bOldFlag ( TRUE ), - bRestoreFlag ( FALSE ), - bAborted ( FALSE ), - aDeleteLink ( STATIC_LINK( this, SfxPrintProgress_Impl, DeleteHdl ) ) -{ - StartListening( *pViewShell->GetObjectShell() ); -} - -void SfxPrintProgress_Impl::CreateMonitor() -{ - // mark monitor to been shown in first status indication - bShow = TRUE; - - if ( !pMonitor ) - { - Window* pParent = pViewShell->GetWindow(); - pMonitor = new SfxPrintMonitor_Impl( pParent, pViewShell ); - pMonitor->aDocName.SetText( pViewShell->GetObjectShell()->GetTitle( SFX_TITLE_MAXLEN_PRINTMONITOR ) ); - pMonitor->aPrinter.SetText( pViewShell->GetPrinter()->GetName() ); - - // Stampit enable/dsiable cancel button - actualizePrintCancelState( pMonitor->aCancel, pViewShell->GetObjectShell() ); - pMonitor->aCancel.SetClickHdl( LINK( this, SfxPrintProgress_Impl, CancelHdl ) ); - } -} - -//------------------------------------------------------------------------ - -SfxPrintProgress_Impl::~SfxPrintProgress_Impl() -{ -} - -//------------------------------------------------------------------------ - -BOOL SfxPrintProgress_Impl::SetPage( USHORT nPage, const String &rPage ) -{ - // wurde der Druckauftrag abgebrochen? - if ( bCancel || !pMonitor ) - return FALSE; - - // Stampit enable/dsiable cancel button - actualizePrintCancelState(pMonitor->aCancel, pViewShell->GetObjectShell()); - - nLastPage = nPage; - String aStrPrintInfo = String( SfxResId( STR_PAGE ) ); - if ( !rPage.Len() ) - aStrPrintInfo += String::CreateFromInt32( nLastPage ); - else - aStrPrintInfo += rPage; - pMonitor->aPrintInfo.SetText( aStrPrintInfo ); - pMonitor->Update(); - return TRUE; -} - -//------------------------------------------------------------------------ - -IMPL_LINK( SfxPrintProgress_Impl, CancelHdl, Button *, EMPTYARG ) -{ - if ( !pViewShell->GetPrinter()->IsJobActive() && pViewShell->GetPrinter()->IsPrinting() ) - // we are still in StartJob, cancelling now might lead to a crash - return 0; - - if ( pMonitor ) - pMonitor->Hide(); - - pViewShell->GetObjectShell()->Broadcast( SfxPrintingHint( com::sun::star::view::PrintableState_JOB_ABORTED, NULL, NULL ) ); - pViewShell->GetPrinter()->AbortJob(); - bCancel = TRUE; - - if ( aCancelHdl.IsSet() ) - aCancelHdl.Call( this ); - - bAborted = TRUE; - return 0; -} - -BOOL SfxPrintMonitor_Impl::Close() -{ - BOOL bAgree = pViewShell ? pViewShell->GetObjectShell()->Stamp_GetPrintCancelState() : TRUE; - if (!bAgree) - return FALSE; - else - return ModelessDialog::Close(); -} - -//-------------------------------------------------------------------- - -SfxPrintProgress::SfxPrintProgress( SfxViewShell* pViewSh, FASTBOOL bShow ) -: SfxProgress( pViewSh->GetViewFrame()->GetObjectShell(), - String(SfxResId(STR_PRINTING)), 1, FALSE ), - pImp( new SfxPrintProgress_Impl( pViewSh, pViewSh->GetPrinter() ) ) -{ - #if 0 - pImp->pPrinter->SetEndPrintHdl( LINK( this, SfxPrintProgress, EndPrintNotify ) ); - pImp->pPrinter->SetErrorHdl( LINK( this, SfxPrintProgress, PrintErrorNotify ) ); - pImp->pPrinter->SetStartPrintHdl( LINK( this, SfxPrintProgress, StartPrintNotify ) ); - pImp->bCallbacks = TRUE; - #endif - - SfxObjectShell* pDoc = pViewSh->GetObjectShell(); - SFX_ITEMSET_ARG( pDoc->GetMedium()->GetItemSet(), pItem, SfxBoolItem, SID_HIDDEN, FALSE ); - if ( pItem && pItem->GetValue() ) - bShow = FALSE; - - if ( bShow ) - pImp->CreateMonitor(); - - Lock(); - if ( !SvtPrintWarningOptions().IsModifyDocumentOnPrintingAllowed() ) - { - pImp->bRestoreFlag = TRUE; - pImp->bOldFlag = pDoc->IsEnableSetModified(); - if ( pImp->bOldFlag ) - pDoc->EnableSetModified( FALSE ); - } -} - -//-------------------------------------------------------------------- - -SfxPrintProgress::~SfxPrintProgress() -{ - // k"onnte auch schon weg sein (in EndPrintNotify) - DELETEZ(pImp->pMonitor); - - // ggf. Callbacks entfermen - if ( pImp->bCallbacks ) - { - // pImp->pPrinter->SetEndPrintHdl( Link() ); - pImp->pPrinter->SetErrorHdl( Link() ); - pImp->bCallbacks = FALSE; - } - - // ggf. vorherigen Drucker wieder einsetzen - if ( pImp->pOldPrinter ) - pImp->pViewShell->SetPrinter( pImp->pOldPrinter, SFX_PRINTER_PRINTER ); - else - // ggf. vorherigen Print-To-File-Status zuruecksetzen - pImp->pViewShell->GetPrinter()->EnablePrintFile( pImp->bOldEnablePrintFile ); - - // EndPrint-Notification an Frame - //pImp->pViewShell->GetViewFrame()->GetFrame().Lock_Impl(FALSE); - pImp->EndListening( *(pImp->pViewShell->GetObjectShell()) ); - - // the following call might destroy the view or even the document - pImp->pViewShell->CheckOwnerShip_Impl(); - delete pImp; -} - -//-------------------------------------------------------------------- - -BOOL SfxPrintProgress::SetState( ULONG nValue, ULONG nNewRange ) -{ - if ( pImp->bShow ) - { - pImp->bShow = FALSE; - if ( pImp->pMonitor ) - { - pImp->pMonitor->Show(); - pImp->pMonitor->Update(); - } - } - - return pImp->SetPage( (USHORT)nValue, GetStateText_Impl() ) && - SfxProgress::SetState( nValue, nNewRange ); -} - -//-------------------------------------------------------------------- - -void SfxPrintProgress::SetText( const String& rText ) -{ - if ( pImp->pMonitor ) - { - pImp->pMonitor->SetText( rText ); - pImp->pMonitor->Update(); - } - SfxProgress::SetText( rText ); -} - -//------------------------------------------------------------------------ - -IMPL_LINK_INLINE_START( SfxPrintProgress, PrintErrorNotify, void *, EMPTYARG ) -{ - if ( pImp->pMonitor ) - pImp->pMonitor->Hide(); - // AbortJob calls EndPrint hdl, so do not delete pImp just now - BOOL bWasDeleteOnEndPrint = pImp->bDeleteOnEndPrint; - pImp->bDeleteOnEndPrint = FALSE; - pImp->pPrinter->AbortJob(); - InfoBox( pImp->GetViewShell()->GetWindow(), - String( SfxResId(STR_ERROR_PRINT) ) ).Execute(); - if ( pImp->bRestoreFlag && pImp->pViewShell->GetObjectShell()->IsEnableSetModified() != pImp->bOldFlag ) - pImp->pViewShell->GetObjectShell()->EnableSetModified( pImp->bOldFlag ); - pImp->GetViewShell()->GetObjectShell()->Broadcast( SfxPrintingHint( com::sun::star::view::PrintableState_JOB_FAILED, NULL, NULL ) ); - // now we can clean up like normally EndPrint hdl does - if( bWasDeleteOnEndPrint ) - { - DELETEZ(pImp->pMonitor); - delete this; - } - return 0; -} -IMPL_LINK_INLINE_END( SfxPrintProgress, PrintErrorNotify, void *, EMPTYARG ) - -//------------------------------------------------------------------------ - -IMPL_LINK( SfxPrintProgress, StartPrintNotify, void *, EMPTYARG ) -{ - SfxObjectShell *pObjShell = pImp->pViewShell->GetObjectShell(); - SFX_APP()->NotifyEvent(SfxEventHint(SFX_EVENT_PRINTDOC, GlobalEventConfig::GetEventName( STR_EVENT_PRINTDOC ), pObjShell)); - pObjShell->Broadcast( SfxPrintingHint( com::sun::star::view::PrintableState_JOB_STARTED, NULL, NULL ) ); - return 0; -} - -IMPL_LINK( SfxPrintProgress, EndPrintNotify, void *, EMPTYARG ) -{ - if ( pImp->pMonitor ) - pImp->pMonitor->Hide(); - - SfxViewShell* pViewShell = pImp->pViewShell; - - // Slots enablen - pViewShell->Invalidate( SID_PRINTDOC ); - pViewShell->Invalidate( SID_PRINTDOCDIRECT ); - pViewShell->Invalidate( SID_SETUPPRINTER ); - - // . . . falls der Printer im System umgestellt wurde, hier Aenderung - // nachziehen. - //! if( pMDI->IsPrinterChanged() ) pMDI->Changed( 0L ); - - // Callbacks rausnehmen - // pImp->pPrinter->SetEndPrintHdl( Link() ); - pImp->pPrinter->SetErrorHdl( Link() ); - pImp->bCallbacks = FALSE; - - // ggf. alten Printer wieder einsetzen - if ( pImp->pOldPrinter ) - { - // Fix #59613#: niemals den aktuellen Printer synchron abschiessen ! - // Da sowieso immer bDeleteOnEndPrint gesetzt wird, wird der der Drucker im - // dtor vom Printprogress ( dann aber asynchron !! ) zur"uckgesetzt. -/* - pImp->pViewShell->SetPrinter( pImp->pOldPrinter, SFX_PRINTER_PRINTER ); - pImp->pOldPrinter = 0; - pImp->pPrinter = 0; - */ - } - else - // ggf. vorherigen Print-To-File-Status zuruecksetzen - pViewShell->GetPrinter()->EnablePrintFile( pImp->bOldEnablePrintFile ); - - // it is possible that after printing the document or view is deleted (because the VieShell got the ownership) - // so first clean up - if ( pImp->bRestoreFlag && pViewShell->GetObjectShell()->IsEnableSetModified() != pImp->bOldFlag ) - pViewShell->GetObjectShell()->EnableSetModified( TRUE ); - - pViewShell->GetObjectShell()->Broadcast( SfxPrintingHint( com::sun::star::view::PrintableState_JOB_COMPLETED, NULL, NULL ) ); - if ( pImp->bDeleteOnEndPrint ) - { - DELETEZ(pImp->pMonitor); - delete this; - } - else - { - DBG_ASSERT( !pImp->pOldPrinter, "Unable to restore printer!" ); - pImp->bRunning = FALSE; - } - - return 0; -} - -//------------------------------------------------------------------------ - -void SfxPrintProgress::DeleteOnEndPrint() -{ - UnLock(); // jetzt schon, wg. Drucken im Thread -#ifndef WNT - // da das Drucken im 'Thread' unter Windows zu undefiniert ist bleibt der - // Print-Monitor dort stehen, auf den anderen Plattformen kann man dann - // weiterarbeiten, also kommt das Teil weg - DELETEZ( pImp->pMonitor ); -#endif - - pImp->bDeleteOnEndPrint = TRUE; - if ( !pImp->bRunning ) - delete this; -} - -//------------------------------------------------------------------------ - -void SfxPrintProgress::RestoreOnEndPrint( SfxPrinter *pOldPrinter, - BOOL bOldEnablePrintFile ) -{ - pImp->pOldPrinter = pOldPrinter; - pImp->bOldEnablePrintFile = bOldEnablePrintFile; -} - -//------------------------------------------------------------------------ - -void SfxPrintProgress::RestoreOnEndPrint( SfxPrinter *pOldPrinter ) -{ - RestoreOnEndPrint( pOldPrinter, FALSE ); -} - -//------------------------------------------------------------------------ - -void SfxPrintProgress::SetCancelHdl( const Link& aCancelHdl ) -{ - pImp->aCancelHdl = aCancelHdl; -} - -BOOL SfxPrintProgress::IsAborted() const -{ - return pImp->bAborted; -} diff --git a/sfx2/source/view/sfxbasecontroller.cxx b/sfx2/source/view/sfxbasecontroller.cxx index 19aa4b75ee0f..b8ad1cfc61f7 100644 --- a/sfx2/source/view/sfxbasecontroller.cxx +++ b/sfx2/source/view/sfxbasecontroller.cxx @@ -93,7 +93,7 @@ #include <hash_map> #include <sfx2/event.hxx> -#include "viewfac.hxx" +#include "sfx2/viewfac.hxx" #define OMULTITYPEINTERFACECONTAINERHELPER ::cppu::OMultiTypeInterfaceContainerHelper #define OINTERFACECONTAINERHELPER ::cppu::OInterfaceContainerHelper @@ -639,7 +639,7 @@ void SAL_CALL SfxBaseController::attachFrame( const REFERENCE< XFRAME >& xFrame ConnectSfxFrame_Impl( E_CONNECT ); // attaching the frame to the controller is the last step in the creation of a new view, so notify this - SfxEventHint aHint( SFX_EVENT_VIEWCREATED, GlobalEventConfig::GetEventName( STR_EVENT_VIEWCREATED ), m_pData->m_pViewShell->GetObjectShell() ); + SfxViewEventHint aHint( SFX_EVENT_VIEWCREATED, GlobalEventConfig::GetEventName( STR_EVENT_VIEWCREATED ), m_pData->m_pViewShell->GetObjectShell(), uno::Reference< frame::XController2 >( this ) ); SFX_APP()->NotifyEvent( aHint ); } } @@ -1069,7 +1069,7 @@ void SAL_CALL SfxBaseController::dispose() throw( ::com::sun::star::uno::Runtime pView = SfxViewFrame::GetNext( *pView, pDoc ); } - SFX_APP()->NotifyEvent( SfxEventHint(SFX_EVENT_CLOSEVIEW, GlobalEventConfig::GetEventName( STR_EVENT_CLOSEVIEW ), pDoc ) ); + SFX_APP()->NotifyEvent( SfxViewEventHint(SFX_EVENT_CLOSEVIEW, GlobalEventConfig::GetEventName( STR_EVENT_CLOSEVIEW ), pDoc, uno::Reference< frame::XController2 >( this ) ) ); if ( !pView ) SFX_APP()->NotifyEvent( SfxEventHint(SFX_EVENT_CLOSEDOC, GlobalEventConfig::GetEventName( STR_EVENT_CLOSEDOC ), pDoc) ); diff --git a/sfx2/source/view/view.hrc b/sfx2/source/view/view.hrc index 243dcd56e4c8..3dce1ec795bb 100644 --- a/sfx2/source/view/view.hrc +++ b/sfx2/source/view/view.hrc @@ -41,12 +41,6 @@ #define STR_NOSTARTPRINTER (RID_SFX_VIEW_START+ 9) #define STR_PRINTING (RID_SFX_VIEW_START+10) -#ifndef STR_UNDO -#define STR_UNDO (RID_SFX_VIEW_START+11) -#define STR_REDO (RID_SFX_VIEW_START+12) -#define STR_REPEAT (RID_SFX_VIEW_START+13) -#endif - #define DLG_PRINTMONITOR (RID_SFX_VIEW_START) #define FT_DOCNAME 1 #define FT_PRINTING 2 diff --git a/sfx2/source/view/viewfac.cxx b/sfx2/source/view/viewfac.cxx index f9469e8a9f88..3eed678420dd 100644 --- a/sfx2/source/view/viewfac.cxx +++ b/sfx2/source/view/viewfac.cxx @@ -30,8 +30,8 @@ // INCLUDE --------------------------------------------------------------- #include <sfx2/app.hxx> +#include "sfx2/viewfac.hxx" #include <rtl/ustrbuf.hxx> -#include "viewfac.hxx" // STATIC DATA ----------------------------------------------------------- diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx index 6222721d9b83..dbadbc54ebd4 100644 --- a/sfx2/source/view/viewfrm.cxx +++ b/sfx2/source/view/viewfrm.cxx @@ -36,12 +36,8 @@ #include <com/sun/star/frame/XLayoutManager.hpp> #include <com/sun/star/frame/XComponentLoader.hpp> -#ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_ #include <toolkit/unohlp.hxx> -#endif -#ifndef _SPLITWIN_HXX //autogen #include <vcl/splitwin.hxx> -#endif #include <unotools/moduleoptions.hxx> #include <svl/intitem.hxx> #include <svl/visitem.hxx> @@ -50,9 +46,7 @@ #include <svl/slstitm.hxx> #include <svl/whiter.hxx> #include <svl/undo.hxx> -#ifndef _MSGBOX_HXX //autogen #include <vcl/msgbox.hxx> -#endif #include <svtools/sfxecode.hxx> #include <svtools/ehdl.hxx> #include <tools/diagnose_ex.h> @@ -98,6 +92,8 @@ #include <comphelper/storagehelper.hxx> #include <svtools/asynclink.hxx> #include <svl/sharecontrolfile.hxx> +#include <svtools/svtools.hrc> +#include <svtools/svtdata.hxx> #include <framework/framelistanalyzer.hxx> #include <boost/optional.hpp> @@ -113,9 +109,6 @@ using ::com::sun::star::document::XViewDataSupplier; using ::com::sun::star::container::XIndexContainer; namespace css = ::com::sun::star; -#ifndef GCC -#endif - // wg. ViewFrame::Current #include "appdata.hxx" #include <sfx2/taskpane.hxx> @@ -132,10 +125,10 @@ namespace css = ::com::sun::star; #include <sfx2/request.hxx> #include <sfx2/docfac.hxx> #include <sfx2/ipclient.hxx> -#include "sfxresid.hxx" +#include "sfx2/sfxresid.hxx" #include "appbas.hxx" #include <sfx2/objitem.hxx> -#include "viewfac.hxx" +#include "sfx2/viewfac.hxx" #include <sfx2/event.hxx> #include "fltfnc.hxx" #include <sfx2/docfile.hxx> @@ -152,7 +145,7 @@ namespace css = ::com::sun::star; #include "workwin.hxx" #include "helper.hxx" #include "macro.hxx" -#include "minfitem.hxx" +#include "sfx2/minfitem.hxx" #include "../appl/app.hrc" #include "impviewframe.hxx" @@ -1030,8 +1023,8 @@ void SfxViewFrame::StateHistory_Impl( SfxItemSet &rSet ) if ( pShUndoMgr && pShUndoMgr->GetUndoActionCount() ) { - String aTmp( SfxResId( STR_UNDO ) ); - aTmp += pShUndoMgr->GetUndoActionComment(0); + String aTmp( SvtResId( STR_UNDO ) ); + aTmp+= pShUndoMgr->GetUndoActionComment(0); rSet.Put( SfxStringItem( SID_UNDO, aTmp ) ); } else @@ -1039,7 +1032,7 @@ void SfxViewFrame::StateHistory_Impl( SfxItemSet &rSet ) if ( pShUndoMgr && pShUndoMgr->GetRedoActionCount() ) { - String aTmp( SfxResId(STR_REDO) ); + String aTmp( SvtResId(STR_REDO) ); aTmp += pShUndoMgr->GetRedoActionComment(0); rSet.Put( SfxStringItem( SID_REDO, aTmp ) ); } @@ -1049,7 +1042,7 @@ void SfxViewFrame::StateHistory_Impl( SfxItemSet &rSet ) if ( pShUndoMgr && pTarget && pShUndoMgr->GetRepeatActionCount() && pShUndoMgr->CanRepeat(*pTarget, 0) ) { - String aTmp( SfxResId(STR_REPEAT) ); + String aTmp( SvtResId(STR_REPEAT) ); aTmp += pShUndoMgr->GetRepeatActionComment(*pTarget, 0); rSet.Put( SfxStringItem( SID_REPEAT, aTmp ) ); } diff --git a/sfx2/source/view/viewfrm2.cxx b/sfx2/source/view/viewfrm2.cxx index 480b5307df2e..05ce981a51b6 100644 --- a/sfx2/source/view/viewfrm2.cxx +++ b/sfx2/source/view/viewfrm2.cxx @@ -30,7 +30,7 @@ #include "impviewframe.hxx" #include "statcach.hxx" -#include "viewfac.hxx" +#include "sfx2/viewfac.hxx" #include "workwin.hxx" #include "sfx2/app.hxx" diff --git a/sfx2/source/view/viewprn.cxx b/sfx2/source/view/viewprn.cxx index d1cfd8c2d181..4ef4244f28e6 100644 --- a/sfx2/source/view/viewprn.cxx +++ b/sfx2/source/view/viewprn.cxx @@ -50,7 +50,7 @@ #include "viewimp.hxx" #include <sfx2/viewfrm.hxx> #include <sfx2/prnmon.hxx> -#include "sfxresid.hxx" +#include "sfx2/sfxresid.hxx" #include <sfx2/request.hxx> #include <sfx2/objsh.hxx> #include "sfxtypes.hxx" diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx index 968d0cbe8676..ca3452e24168 100644 --- a/sfx2/source/view/viewsh.cxx +++ b/sfx2/source/view/viewsh.cxx @@ -44,7 +44,6 @@ #include <com/sun/star/system/SystemShellExecuteFlags.hpp> #include <com/sun/star/container/XContainerQuery.hpp> #include <com/sun/star/frame/XStorable.hpp> -#include <com/sun/star/datatransfer/clipboard/XClipboardNotifier.hpp> #include <com/sun/star/datatransfer/clipboard/XClipboard.hpp> #include <cppuhelper/implbase1.hxx> @@ -70,7 +69,7 @@ #include "view.hrc" #include <sfx2/viewsh.hxx> #include "viewimp.hxx" -#include "sfxresid.hxx" +#include "sfx2/sfxresid.hxx" #include <sfx2/request.hxx> #include <sfx2/templdlg.hxx> #include <sfx2/printer.hxx> @@ -81,8 +80,8 @@ #include "view.hrc" #include "sfxlocal.hrc" #include <sfx2/sfxbasecontroller.hxx> +#include "sfx2/mailmodelapi.hxx" #include <sfx2/viewfrm.hxx> -#include "mailmodelapi.hxx" #include <sfx2/event.hxx> #include <sfx2/fcontnr.hxx> #include <sfx2/ipclient.hxx> @@ -115,7 +114,9 @@ DBG_NAME(SfxViewShell) class SfxClipboardChangeListener : public ::cppu::WeakImplHelper1< datatransfer::clipboard::XClipboardListener > { - SfxViewShell* pViewShell; +public: + SfxClipboardChangeListener( SfxViewShell* pView, const uno::Reference< datatransfer::clipboard::XClipboardNotifier >& xClpbrdNtfr ); + virtual ~SfxClipboardChangeListener(); // XEventListener virtual void SAL_CALL disposing( const lang::EventObject& rEventObject ) @@ -125,21 +126,46 @@ class SfxClipboardChangeListener : public ::cppu::WeakImplHelper1< virtual void SAL_CALL changedContents( const datatransfer::clipboard::ClipboardEvent& rEventObject ) throw ( uno::RuntimeException ); -public: - SfxClipboardChangeListener( SfxViewShell* pView ); - virtual ~SfxClipboardChangeListener(); + void DisconnectViewShell() { m_pViewShell = NULL; } + void ChangedContents(); + + enum AsyncExecuteCmd + { + ASYNCEXECUTE_CMD_DISPOSING, + ASYNCEXECUTE_CMD_CHANGEDCONTENTS + }; - void DisconnectViewShell() { pViewShell = NULL; } + struct AsyncExecuteInfo + { + AsyncExecuteInfo( AsyncExecuteCmd eCmd, uno::Reference< datatransfer::clipboard::XClipboardListener > xThis, SfxClipboardChangeListener* pListener ) : + m_eCmd( eCmd ), m_xThis( xThis ), m_pListener( pListener ) {} + + AsyncExecuteCmd m_eCmd; + uno::Reference< datatransfer::clipboard::XClipboardListener > m_xThis; + SfxClipboardChangeListener* m_pListener; + }; + +private: + SfxViewShell* m_pViewShell; + uno::Reference< datatransfer::clipboard::XClipboardNotifier > m_xClpbrdNtfr; + uno::Reference< lang::XComponent > m_xCtrl; + + DECL_STATIC_LINK( SfxClipboardChangeListener, AsyncExecuteHdl_Impl, AsyncExecuteInfo* ); }; -SfxClipboardChangeListener::SfxClipboardChangeListener( SfxViewShell* pView ) -: pViewShell( 0 ) +SfxClipboardChangeListener::SfxClipboardChangeListener( SfxViewShell* pView, const uno::Reference< datatransfer::clipboard::XClipboardNotifier >& xClpbrdNtfr ) + : m_pViewShell( 0 ), m_xClpbrdNtfr( xClpbrdNtfr ) { - uno::Reference < lang::XComponent > xCtrl( pView->GetController(), uno::UNO_QUERY ); - if ( xCtrl.is() ) + m_xCtrl = uno::Reference < lang::XComponent >( pView->GetController(), uno::UNO_QUERY ); + if ( m_xCtrl.is() ) + { + m_xCtrl->addEventListener( uno::Reference < lang::XEventListener > ( static_cast < lang::XEventListener* >( this ) ) ); + m_pViewShell = pView; + } + if ( m_xClpbrdNtfr.is() ) { - xCtrl->addEventListener( uno::Reference < lang::XEventListener > ( static_cast < lang::XEventListener* >( this ) ) ); - pViewShell = pView; + m_xClpbrdNtfr->addClipboardListener( uno::Reference< datatransfer::clipboard::XClipboardListener >( + static_cast< datatransfer::clipboard::XClipboardListener* >( this ))); } } @@ -147,34 +173,68 @@ SfxClipboardChangeListener::~SfxClipboardChangeListener() { } -void SAL_CALL SfxClipboardChangeListener::disposing( const lang::EventObject& /*rEventObject*/ ) -throw ( uno::RuntimeException ) +void SfxClipboardChangeListener::ChangedContents() { - // either clipboard or ViewShell is going to be destroyed -> no interest in listening anymore const ::vos::OGuard aGuard( Application::GetSolarMutex() ); - if ( pViewShell ) + if( m_pViewShell ) { - uno::Reference < lang::XComponent > xCtrl( pViewShell->GetController(), uno::UNO_QUERY ); - if ( xCtrl.is() ) - xCtrl->removeEventListener( uno::Reference < lang::XEventListener > ( static_cast < lang::XEventListener* >( this ) ) ); - pViewShell->AddRemoveClipboardListener( uno::Reference < datatransfer::clipboard::XClipboardListener > (this), FALSE ); - pViewShell = 0; + SfxBindings& rBind = m_pViewShell->GetViewFrame()->GetBindings(); + rBind.Invalidate( SID_PASTE ); + rBind.Invalidate( SID_PASTE_SPECIAL ); + rBind.Invalidate( SID_CLIPBOARD_FORMAT_ITEMS ); } } -void SAL_CALL SfxClipboardChangeListener::changedContents( const datatransfer::clipboard::ClipboardEvent& ) - throw ( RuntimeException ) +IMPL_STATIC_LINK_NOINSTANCE( SfxClipboardChangeListener, AsyncExecuteHdl_Impl, AsyncExecuteInfo*, pAsyncExecuteInfo ) { - const ::vos::OGuard aGuard( Application::GetSolarMutex() ); - if( pViewShell ) + if ( pAsyncExecuteInfo ) { - SfxBindings& rBind = pViewShell->GetViewFrame()->GetBindings(); - rBind.Invalidate( SID_PASTE ); - rBind.Invalidate( SID_PASTE_SPECIAL ); - rBind.Invalidate( SID_CLIPBOARD_FORMAT_ITEMS ); + uno::Reference< datatransfer::clipboard::XClipboardListener > xThis( pAsyncExecuteInfo->m_xThis ); + if ( pAsyncExecuteInfo->m_pListener ) + { + if ( pAsyncExecuteInfo->m_eCmd == ASYNCEXECUTE_CMD_DISPOSING ) + pAsyncExecuteInfo->m_pListener->DisconnectViewShell(); + else if ( pAsyncExecuteInfo->m_eCmd == ASYNCEXECUTE_CMD_CHANGEDCONTENTS ) + pAsyncExecuteInfo->m_pListener->ChangedContents(); + } } + delete pAsyncExecuteInfo; + + return 0; +} + +void SAL_CALL SfxClipboardChangeListener::disposing( const lang::EventObject& /*rEventObject*/ ) +throw ( uno::RuntimeException ) +{ + // Either clipboard or ViewShell is going to be destroyed -> no interest in listening anymore + uno::Reference< lang::XComponent > xCtrl( m_xCtrl ); + uno::Reference< datatransfer::clipboard::XClipboardNotifier > xNotify( m_xClpbrdNtfr ); + + uno::Reference< datatransfer::clipboard::XClipboardListener > xThis( static_cast< datatransfer::clipboard::XClipboardListener* >( this )); + if ( xCtrl.is() ) + xCtrl->removeEventListener( uno::Reference < lang::XEventListener > ( static_cast < lang::XEventListener* >( this ))); + if ( xNotify.is() ) + xNotify->removeClipboardListener( xThis ); + + // Make asynchronous call to avoid locking SolarMutex which is the + // root for many deadlocks, especially in conjuction with the "Windows" + // based single thread apartment clipboard code! + AsyncExecuteInfo* pInfo = new AsyncExecuteInfo( ASYNCEXECUTE_CMD_DISPOSING, xThis, this ); + Application::PostUserEvent( STATIC_LINK( 0, SfxClipboardChangeListener, AsyncExecuteHdl_Impl ), pInfo ); +} + +void SAL_CALL SfxClipboardChangeListener::changedContents( const datatransfer::clipboard::ClipboardEvent& ) + throw ( RuntimeException ) +{ + // Make asynchronous call to avoid locking SolarMutex which is the + // root for many deadlocks, especially in conjuction with the "Windows" + // based single thread apartment clipboard code! + uno::Reference< datatransfer::clipboard::XClipboardListener > xThis( static_cast< datatransfer::clipboard::XClipboardListener* >( this )); + AsyncExecuteInfo* pInfo = new AsyncExecuteInfo( ASYNCEXECUTE_CMD_CHANGEDCONTENTS, xThis, this ); + Application::PostUserEvent( STATIC_LINK( 0, SfxClipboardChangeListener, AsyncExecuteHdl_Impl ), pInfo ); } +//========================================================================= static ::rtl::OUString RetrieveLabelFromCommand( const ::rtl::OUString& rCommandURL, @@ -260,7 +320,7 @@ SfxViewShell_Impl::SfxViewShell_Impl(USHORT const nFlags) //========================================================================= SFX_IMPL_INTERFACE(SfxViewShell,SfxShell,SfxResId(0)) { - SFX_CHILDWINDOW_REGISTRATION( SID_MAIL_CHILDWIN ); + SFX_CHILDWINDOW_REGISTRATION( SID_MAIL_CHILDWIN ); } TYPEINIT2(SfxViewShell,SfxShell,SfxListener); @@ -379,27 +439,27 @@ enum ETypeFamily void SfxViewShell::ExecMisc_Impl( SfxRequest &rReq ) { - const USHORT nId = rReq.GetSlot(); - switch( nId ) - { - case SID_STYLE_FAMILY : + const USHORT nId = rReq.GetSlot(); + switch( nId ) { - SFX_REQUEST_ARG(rReq, pItem, SfxUInt16Item, nId, FALSE); - if (pItem) + case SID_STYLE_FAMILY : + { + SFX_REQUEST_ARG(rReq, pItem, SfxUInt16Item, nId, FALSE); + if (pItem) { pImp->m_nFamily = pItem->GetValue(); } - break; - } + break; + } - case SID_STYLE_CATALOG: - { - SfxTemplateCatalog aCatalog( - SFX_APP()->GetTopWindow(), &GetViewFrame()->GetBindings()); - aCatalog.Execute(); + case SID_STYLE_CATALOG: + { + SfxTemplateCatalog aCatalog( + SFX_APP()->GetTopWindow(), &GetViewFrame()->GetBindings()); + aCatalog.Execute(); rReq.Ignore(); - break; - } + break; + } case SID_ACTIVATE_STYLE_APPLY: { com::sun::star::uno::Reference< com::sun::star::frame::XFrame > xFrame( @@ -459,85 +519,85 @@ void SfxViewShell::ExecMisc_Impl( SfxRequest &rReq ) rReq.Done(); } break; - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - case SID_MAIL_SENDDOCASMS: - case SID_MAIL_SENDDOCASOOO: - case SID_MAIL_SENDDOCASPDF: - case SID_MAIL_SENDDOC: + case SID_MAIL_SENDDOCASMS: + case SID_MAIL_SENDDOCASOOO: + case SID_MAIL_SENDDOCASPDF: + case SID_MAIL_SENDDOC: case SID_MAIL_SENDDOCASFORMAT: - { - SfxObjectShell* pDoc = GetObjectShell(); - if ( pDoc && pDoc->QueryHiddenInformation( - WhenSaving, &GetViewFrame()->GetWindow() ) != RET_YES ) - break; + { + SfxObjectShell* pDoc = GetObjectShell(); + if ( pDoc && pDoc->QueryHiddenInformation( + WhenSaving, &GetViewFrame()->GetWindow() ) != RET_YES ) + break; - if ( SvtInternalOptions().MailUIEnabled() ) + if ( SvtInternalOptions().MailUIEnabled() ) { GetViewFrame()->SetChildWindow( SID_MAIL_CHILDWIN, TRUE ); } else { - SfxMailModel aModel; + SfxMailModel aModel; rtl::OUString aDocType; - SFX_REQUEST_ARG(rReq, pMailSubject, SfxStringItem, SID_MAIL_SUBJECT, FALSE ); - if ( pMailSubject ) - aModel.SetSubject( pMailSubject->GetValue() ); + SFX_REQUEST_ARG(rReq, pMailSubject, SfxStringItem, SID_MAIL_SUBJECT, FALSE ); + if ( pMailSubject ) + aModel.SetSubject( pMailSubject->GetValue() ); - SFX_REQUEST_ARG(rReq, pMailRecipient, SfxStringItem, SID_MAIL_RECIPIENT, FALSE ); - if ( pMailRecipient ) - { - String aRecipient( pMailRecipient->GetValue() ); - String aMailToStr( String::CreateFromAscii( "mailto:" )); + SFX_REQUEST_ARG(rReq, pMailRecipient, SfxStringItem, SID_MAIL_RECIPIENT, FALSE ); + if ( pMailRecipient ) + { + String aRecipient( pMailRecipient->GetValue() ); + String aMailToStr( String::CreateFromAscii( "mailto:" )); - if ( aRecipient.Search( aMailToStr ) == 0 ) - aRecipient = aRecipient.Erase( 0, aMailToStr.Len() ); - aModel.AddAddress( aRecipient, SfxMailModel::ROLE_TO ); - } + if ( aRecipient.Search( aMailToStr ) == 0 ) + aRecipient = aRecipient.Erase( 0, aMailToStr.Len() ); + aModel.AddAddress( aRecipient, SfxMailModel::ROLE_TO ); + } SFX_REQUEST_ARG(rReq, pMailDocType, SfxStringItem, SID_TYPE_NAME, FALSE ); if ( pMailDocType ) aDocType = pMailDocType->GetValue(); uno::Reference < frame::XFrame > xFrame( pFrame->GetFrame().GetFrameInterface() ); - SfxMailModel::SendMailResult eResult = SfxMailModel::SEND_MAIL_ERROR; + SfxMailModel::SendMailResult eResult = SfxMailModel::SEND_MAIL_ERROR; if ( nId == SID_MAIL_SENDDOC ) - eResult = aModel.SaveAndSend( xFrame, rtl::OUString() ); - else - if ( nId == SID_MAIL_SENDDOCASPDF ) + eResult = aModel.SaveAndSend( xFrame, rtl::OUString() ); + else + if ( nId == SID_MAIL_SENDDOCASPDF ) eResult = aModel.SaveAndSend( xFrame, rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "pdf_Portable_Document_Format" ))); else - if ( nId == SID_MAIL_SENDDOCASMS ) + if ( nId == SID_MAIL_SENDDOCASMS ) { aDocType = impl_searchFormatTypeForApp(xFrame, E_MS_DOC); if (aDocType.getLength() > 0) eResult = aModel.SaveAndSend( xFrame, aDocType ); } else - if ( nId == SID_MAIL_SENDDOCASOOO ) + if ( nId == SID_MAIL_SENDDOCASOOO ) { aDocType = impl_searchFormatTypeForApp(xFrame, E_OOO_DOC); if (aDocType.getLength() > 0) eResult = aModel.SaveAndSend( xFrame, aDocType ); } - if ( eResult == SfxMailModel::SEND_MAIL_ERROR ) - { - InfoBox aBox( SFX_APP()->GetTopWindow(), SfxResId( MSG_ERROR_SEND_MAIL )); - aBox.Execute(); + if ( eResult == SfxMailModel::SEND_MAIL_ERROR ) + { + InfoBox aBox( SFX_APP()->GetTopWindow(), SfxResId( MSG_ERROR_SEND_MAIL )); + aBox.Execute(); rReq.Ignore(); - } + } else rReq.Done(); - } + } - break; - } + break; + } - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - case SID_WEBHTML: - { + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + case SID_WEBHTML: + { static const char HTML_DOCUMENT_TYPE[] = "writer_web_HTML"; static const char HTML_GRAPHIC_TYPE[] = "graphic_HTML"; const sal_Int32 FILTERFLAG_EXPORT = 0x00000002; @@ -657,25 +717,25 @@ void SfxViewShell::ExecMisc_Impl( SfxRequest &rReq ) ::rtl::OUString::createFromAscii( "com.sun.star.system.SystemShellExecute" )), css::uno::UNO_QUERY ); - BOOL bRet( TRUE ); + BOOL bRet( TRUE ); if ( xSystemShellExecute.is() ) { try { - xSystemShellExecute->execute( - aFileURL, ::rtl::OUString(), SystemShellExecuteFlags::DEFAULTS ); + xSystemShellExecute->execute( + aFileURL, ::rtl::OUString(), SystemShellExecuteFlags::DEFAULTS ); } catch ( uno::Exception& ) { - vos::OGuard aGuard( Application::GetSolarMutex() ); + vos::OGuard aGuard( Application::GetSolarMutex() ); Window *pParent = SFX_APP()->GetTopWindow(); - ErrorBox( pParent, SfxResId( MSG_ERROR_NO_WEBBROWSER_FOUND )).Execute(); + ErrorBox( pParent, SfxResId( MSG_ERROR_NO_WEBBROWSER_FOUND )).Execute(); bRet = FALSE; } } rReq.Done(bRet); - break; + break; } else { @@ -685,97 +745,97 @@ void SfxViewShell::ExecMisc_Impl( SfxRequest &rReq ) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - case SID_PLUGINS_ACTIVE: - { - SFX_REQUEST_ARG(rReq, pShowItem, SfxBoolItem, nId, FALSE); + case SID_PLUGINS_ACTIVE: + { + SFX_REQUEST_ARG(rReq, pShowItem, SfxBoolItem, nId, FALSE); bool const bActive = (pShowItem) ? pShowItem->GetValue() : !pImp->m_bPlugInsActive; - // ggf. recorden - if ( !rReq.IsAPI() ) - rReq.AppendItem( SfxBoolItem( nId, bActive ) ); + // ggf. recorden + if ( !rReq.IsAPI() ) + rReq.AppendItem( SfxBoolItem( nId, bActive ) ); - // Jetzt schon DONE aufrufen, da die Argumente evtl. einen Pool - // benutzen, der demn"achst weg ist - rReq.Done(TRUE); + // Jetzt schon DONE aufrufen, da die Argumente evtl. einen Pool + // benutzen, der demn"achst weg ist + rReq.Done(TRUE); - // ausfuehren + // ausfuehren if (!pShowItem || (bActive != pImp->m_bPlugInsActive)) - { - SfxFrame* pTopFrame = &GetFrame()->GetTopFrame(); - if ( pTopFrame != &GetFrame()->GetFrame() ) - { - // FramesetDocument - SfxViewShell *pShell = pTopFrame->GetCurrentViewFrame()->GetViewShell(); - if ( pShell->GetInterface()->GetSlot( nId ) ) - pShell->ExecuteSlot( rReq ); - break; - } - - SfxFrameIterator aIter( *pTopFrame ); - while ( pTopFrame ) - { - if ( pTopFrame->GetCurrentViewFrame() ) - { - SfxViewShell *pView = pTopFrame->GetCurrentViewFrame()->GetViewShell(); - if ( pView ) { + SfxFrame* pTopFrame = &GetFrame()->GetTopFrame(); + if ( pTopFrame != &GetFrame()->GetFrame() ) + { + // FramesetDocument + SfxViewShell *pShell = pTopFrame->GetCurrentViewFrame()->GetViewShell(); + if ( pShell->GetInterface()->GetSlot( nId ) ) + pShell->ExecuteSlot( rReq ); + break; + } + + SfxFrameIterator aIter( *pTopFrame ); + while ( pTopFrame ) + { + if ( pTopFrame->GetCurrentViewFrame() ) + { + SfxViewShell *pView = pTopFrame->GetCurrentViewFrame()->GetViewShell(); + if ( pView ) + { pView->pImp->m_bPlugInsActive = bActive; Rectangle aVisArea = GetObjectShell()->GetVisArea(); VisAreaChanged(aVisArea); - // the plugins might need change in their state - SfxInPlaceClientList *pClients = pView->GetIPClientList_Impl(FALSE); - if ( pClients ) - { - for (USHORT n=0; n < pClients->Count(); n++) - { - SfxInPlaceClient* pIPClient = pClients->GetObject(n); - if ( pIPClient ) - pView->CheckIPClient_Impl( pIPClient, aVisArea ); + // the plugins might need change in their state + SfxInPlaceClientList *pClients = pView->GetIPClientList_Impl(FALSE); + if ( pClients ) + { + for (USHORT n=0; n < pClients->Count(); n++) + { + SfxInPlaceClient* pIPClient = pClients->GetObject(n); + if ( pIPClient ) + pView->CheckIPClient_Impl( pIPClient, aVisArea ); + } + } + } + } + + if ( !pTopFrame->GetParentFrame() ) + pTopFrame = aIter.FirstFrame(); + else + pTopFrame = aIter.NextFrame( *pTopFrame ); } - } } - } - if ( !pTopFrame->GetParentFrame() ) - pTopFrame = aIter.FirstFrame(); - else - pTopFrame = aIter.NextFrame( *pTopFrame ); + break; } - } - - break; } - } } //-------------------------------------------------------------------- void SfxViewShell::GetState_Impl( SfxItemSet &rSet ) { - DBG_CHKTHIS(SfxViewShell, 0); + DBG_CHKTHIS(SfxViewShell, 0); - SfxWhichIter aIter( rSet ); - for ( USHORT nSID = aIter.FirstWhich(); nSID; nSID = aIter.NextWhich() ) - { - switch ( nSID ) + SfxWhichIter aIter( rSet ); + for ( USHORT nSID = aIter.FirstWhich(); nSID; nSID = aIter.NextWhich() ) { - case SID_STYLE_CATALOG: - { + switch ( nSID ) + { + case SID_STYLE_CATALOG: + { if ( !GetViewFrame()->KnowsChildWindow( SID_STYLE_DESIGNER ) ) - rSet.DisableItem( nSID ); - break; - } + rSet.DisableItem( nSID ); + break; + } - // Printer-Funktionen - case SID_PRINTDOC: - case SID_PRINTDOCDIRECT: - case SID_SETUPPRINTER: - case SID_PRINTER_NAME: - { + // Printer-Funktionen + case SID_PRINTDOC: + case SID_PRINTDOCDIRECT: + case SID_SETUPPRINTER: + case SID_PRINTER_NAME: + { bool bEnabled = pImp->m_bCanPrint && !pImp->m_nPrinterLocks; - bEnabled = bEnabled && !Application::GetSettings().GetMiscSettings().GetDisablePrinting(); + bEnabled = bEnabled && !Application::GetSettings().GetMiscSettings().GetDisablePrinting(); if ( bEnabled ) { SfxPrinter *pPrinter = GetPrinter(FALSE); @@ -804,68 +864,68 @@ void SfxViewShell::GetState_Impl( SfxItemSet &rSet ) } bEnabled = !pPrinter || !pPrinter->IsPrinting(); } - if ( !bEnabled ) - { - // will now be handled by requeing the request - /* rSet.DisableItem( SID_PRINTDOC ); - rSet.DisableItem( SID_PRINTDOCDIRECT ); - rSet.DisableItem( SID_SETUPPRINTER ); */ - } - break; - } + if ( !bEnabled ) + { + // will now be handled by requeing the request + /* rSet.DisableItem( SID_PRINTDOC ); + rSet.DisableItem( SID_PRINTDOCDIRECT ); + rSet.DisableItem( SID_SETUPPRINTER ); */ + } + break; + } - // Mail-Funktionen - case SID_MAIL_SENDDOCASPDF: - case SID_MAIL_SENDDOC: + // Mail-Funktionen + case SID_MAIL_SENDDOCASPDF: + case SID_MAIL_SENDDOC: case SID_MAIL_SENDDOCASFORMAT: - { + { BOOL bEnable = !GetViewFrame()->HasChildWindow( SID_MAIL_CHILDWIN ); - if ( !bEnable ) - rSet.DisableItem( nSID ); - break; - } + if ( !bEnable ) + rSet.DisableItem( nSID ); + break; + } - // PlugIns running - case SID_PLUGINS_ACTIVE: - { + // PlugIns running + case SID_PLUGINS_ACTIVE: + { rSet.Put( SfxBoolItem( SID_PLUGINS_ACTIVE, !pImp->m_bPlugInsActive) ); - break; - } + break; + } /* - // SelectionText - case SID_SELECTION_TEXT: - { - rSet.Put( SfxStringItem( SID_SELECTION_TEXT, GetSelectionText() ) ); - break; - } + // SelectionText + case SID_SELECTION_TEXT: + { + rSet.Put( SfxStringItem( SID_SELECTION_TEXT, GetSelectionText() ) ); + break; + } - // SelectionTextExt - case SID_SELECTION_TEXT_EXT: - { - rSet.Put( SfxStringItem( SID_SELECTION_TEXT_EXT, GetSelectionText(TRUE) ) ); - break; - } + // SelectionTextExt + case SID_SELECTION_TEXT_EXT: + { + rSet.Put( SfxStringItem( SID_SELECTION_TEXT_EXT, GetSelectionText(TRUE) ) ); + break; + } */ - case SID_STYLE_FAMILY : - { + case SID_STYLE_FAMILY : + { rSet.Put( SfxUInt16Item( SID_STYLE_FAMILY, pImp->m_nFamily ) ); - break; - } + break; + } + } } - } } //-------------------------------------------------------------------- void SfxViewShell::SetZoomFactor( const Fraction &rZoomX, - const Fraction &rZoomY ) + const Fraction &rZoomY ) { - DBG_ASSERT( GetWindow(), "no window" ); - MapMode aMap( GetWindow()->GetMapMode() ); - aMap.SetScaleX( rZoomX ); - aMap.SetScaleY( rZoomY ); - GetWindow()->SetMapMode( aMap ); + DBG_ASSERT( GetWindow(), "no window" ); + MapMode aMap( GetWindow()->GetMapMode() ); + aMap.SetScaleX( rZoomX ); + aMap.SetScaleY( rZoomY ); + GetWindow()->SetMapMode( aMap ); } //-------------------------------------------------------------------- @@ -873,37 +933,37 @@ ErrCode SfxViewShell::DoVerb(long /*nVerb*/) /* [Beschreibung] - Virtuelle Methode, um am selektierten Objekt ein Verb auszuf"uhren. + Virtuelle Methode, um am selektierten Objekt ein Verb auszuf"uhren. Da dieses Objekt nur den abgeleiteten Klassen bekannt ist, muss DoVerb dort "uberschrieben werden. */ { - return ERRCODE_SO_NOVERBS; + return ERRCODE_SO_NOVERBS; } //-------------------------------------------------------------------- void SfxViewShell::OutplaceActivated( sal_Bool bActive, SfxInPlaceClient* /*pClient*/ ) { - if ( !bActive ) - GetFrame()->GetFrame().Appear(); + if ( !bActive ) + GetFrame()->GetFrame().Appear(); } //-------------------------------------------------------------------- void SfxViewShell::InplaceActivating( SfxInPlaceClient* /*pClient*/ ) { - // TODO/LATER: painting of the bitmap can be stopped, it is required if CLIPCHILDREN problem #i25788# is not solved, - // but may be the bug will not affect the real office vcl windows, then it is not required + // TODO/LATER: painting of the bitmap can be stopped, it is required if CLIPCHILDREN problem #i25788# is not solved, + // but may be the bug will not affect the real office vcl windows, then it is not required } //-------------------------------------------------------------------- void SfxViewShell::InplaceDeactivated( SfxInPlaceClient* /*pClient*/ ) { - // TODO/LATER: paint the replacement image in normal way if the painting was stopped + // TODO/LATER: paint the replacement image in normal way if the painting was stopped } //-------------------------------------------------------------------- @@ -943,26 +1003,26 @@ SfxInPlaceClient* SfxViewShell::FindIPClient ) const { SfxInPlaceClientList *pClients = GetIPClientList_Impl(FALSE); - if ( !pClients ) - return 0; + if ( !pClients ) + return 0; - if( !pObjParentWin ) - pObjParentWin = GetWindow(); - for (USHORT n=0; n < pClients->Count(); n++) - { - SfxInPlaceClient *pIPClient = (SfxInPlaceClient*) pClients->GetObject(n); + if( !pObjParentWin ) + pObjParentWin = GetWindow(); + for (USHORT n=0; n < pClients->Count(); n++) + { + SfxInPlaceClient *pIPClient = (SfxInPlaceClient*) pClients->GetObject(n); if ( pIPClient->GetObject() == xObj && pIPClient->GetEditWin() == pObjParentWin ) - return pIPClient; - } + return pIPClient; + } - return 0; + return 0; } //-------------------------------------------------------------------- SfxInPlaceClient* SfxViewShell::GetIPClient() const { - return GetUIActiveClient(); + return GetUIActiveClient(); } //-------------------------------------------------------------------- @@ -971,15 +1031,15 @@ SfxInPlaceClient* SfxViewShell::GetUIActiveIPClient_Impl() const { // this method is needed as long as SFX still manages the border space for ChildWindows (see SfxFrame::Resize) SfxInPlaceClientList *pClients = GetIPClientList_Impl(FALSE); - if ( !pClients ) - return 0; + if ( !pClients ) + return 0; - for (USHORT n=0; n < pClients->Count(); n++) - { + for (USHORT n=0; n < pClients->Count(); n++) + { SfxInPlaceClient* pIPClient = pClients->GetObject(n); if ( pIPClient->IsUIActive() ) return pIPClient; - } + } return NULL; } @@ -987,15 +1047,15 @@ SfxInPlaceClient* SfxViewShell::GetUIActiveIPClient_Impl() const SfxInPlaceClient* SfxViewShell::GetUIActiveClient() const { SfxInPlaceClientList *pClients = GetIPClientList_Impl(FALSE); - if ( !pClients ) - return 0; + if ( !pClients ) + return 0; - for (USHORT n=0; n < pClients->Count(); n++) - { + for (USHORT n=0; n < pClients->Count(); n++) + { SfxInPlaceClient* pIPClient = pClients->GetObject(n); if ( pIPClient->IsObjectUIActive() ) return pIPClient; - } + } return NULL; } @@ -1004,34 +1064,34 @@ SfxInPlaceClient* SfxViewShell::GetUIActiveClient() const void SfxViewShell::Activate( BOOL bMDI ) { - DBG_CHKTHIS(SfxViewShell, 0); - if ( bMDI ) - { - SfxObjectShell *pSh = GetViewFrame()->GetObjectShell(); - if ( pSh->GetModel().is() ) - pSh->GetModel()->setCurrentController( GetViewFrame()->GetFrame().GetController() ); + DBG_CHKTHIS(SfxViewShell, 0); + if ( bMDI ) + { + SfxObjectShell *pSh = GetViewFrame()->GetObjectShell(); + if ( pSh->GetModel().is() ) + pSh->GetModel()->setCurrentController( GetViewFrame()->GetFrame().GetController() ); SetCurrentDocument(); - } + } } //-------------------------------------------------------------------- void SfxViewShell::Deactivate(BOOL /*bMDI*/) { - DBG_CHKTHIS(SfxViewShell, 0); + DBG_CHKTHIS(SfxViewShell, 0); } //-------------------------------------------------------------------- void SfxViewShell::AdjustPosSizePixel ( - const Point& /*rToolOffset*/,// linke obere Ecke der Tools im Frame-Window - const Size& /*rSize*/ // gesamte zur Verf"ugung stehende Gr"o\se + const Point& /*rToolOffset*/,// linke obere Ecke der Tools im Frame-Window + const Size& /*rSize*/ // gesamte zur Verf"ugung stehende Gr"o\se ) { - DBG_CHKTHIS(SfxViewShell, 0); + DBG_CHKTHIS(SfxViewShell, 0); } //-------------------------------------------------------------------- @@ -1040,18 +1100,18 @@ void SfxViewShell::Move() /* [Beschreibung] - Diese virtuelle Methode wird gerufen, wenn das Fenster, in dem die - SfxViewShell dargestellt wird eine StarView-Move() Nachricht erh"alt. + Diese virtuelle Methode wird gerufen, wenn das Fenster, in dem die + SfxViewShell dargestellt wird eine StarView-Move() Nachricht erh"alt. - Die Basisimplementierung braucht nicht gerufen zu werden. + Die Basisimplementierung braucht nicht gerufen zu werden. - [Anmerkung] + [Anmerkung] - Diese Methode kann dazu verwendet werden, eine Selektion abzubrechen, - um durch das Moven des Fensters erzeugte Maus-Bewegungen anzufangen. + Diese Methode kann dazu verwendet werden, eine Selektion abzubrechen, + um durch das Moven des Fensters erzeugte Maus-Bewegungen anzufangen. - Zur Zeit funktioniert die Benachrichtigung nicht In-Place. + Zur Zeit funktioniert die Benachrichtigung nicht In-Place. */ { @@ -1061,102 +1121,102 @@ void SfxViewShell::Move() void SfxViewShell::OuterResizePixel ( - const Point& /*rToolOffset*/,// linke obere Ecke der Tools im Frame-Window - const Size& /*rSize*/ // gesamte zur Verf"ugung stehende Gr"o\se + const Point& /*rToolOffset*/,// linke obere Ecke der Tools im Frame-Window + const Size& /*rSize*/ // gesamte zur Verf"ugung stehende Gr"o\se ) /* [Beschreibung] Diese Methode muss ueberladen werden, um auf "Anderungen der Groesse - der View zu reagieren. Dabei definieren wir die View als das Edit-Window - zuz"uglich der um das Edit-Window angeordnenten Tools (z.B. Lineale). + der View zu reagieren. Dabei definieren wir die View als das Edit-Window + zuz"uglich der um das Edit-Window angeordnenten Tools (z.B. Lineale). - Das Edit-Window darf weder in Gr"o\se noch Position ver"andert werden. + Das Edit-Window darf weder in Gr"o\se noch Position ver"andert werden. - Die Vis-Area der SfxObjectShell, dessen Skalierung und Position - d"urfen hier ver"andert werden. Der Hauptanwendungsfall ist dabei, - das Ver"andern der Gr"o\se der Vis-Area. + Die Vis-Area der SfxObjectShell, dessen Skalierung und Position + d"urfen hier ver"andert werden. Der Hauptanwendungsfall ist dabei, + das Ver"andern der Gr"o\se der Vis-Area. - "Andert sich durch die neue Berechnung der Border, so mu\s dieser - mit <SfxViewShell::SetBorderPixel(const SvBorder&)> gesetzt werden. - Erst nach Aufruf von 'SetBorderPixel' ist das Positionieren von - Tools erlaubt. + "Andert sich durch die neue Berechnung der Border, so mu\s dieser + mit <SfxViewShell::SetBorderPixel(const SvBorder&)> gesetzt werden. + Erst nach Aufruf von 'SetBorderPixel' ist das Positionieren von + Tools erlaubt. - [Beispiel] + [Beispiel] - void AppViewSh::OuterViewResizePixel( const Point &rOfs, const Size &rSz ) - { - // Tool-Positionen und Gr"o\sen von au\sen berechnen, NICHT setzen! - // (wegen folgender Border-Berechnung) - Point aHLinPos...; Size aHLinSz...; - ... - - // Border f"ur Tools passend zu rSize berechnen und setzen - SvBorder aBorder... - SetBorderPixel( aBorder ); // ab jetzt sind Positionierungen erlaubt - - // Tools anordnen - pHLin->SetPosSizePixel( aHLinPos, aHLinSz ); - ... - } + void AppViewSh::OuterViewResizePixel( const Point &rOfs, const Size &rSz ) + { + // Tool-Positionen und Gr"o\sen von au\sen berechnen, NICHT setzen! + // (wegen folgender Border-Berechnung) + Point aHLinPos...; Size aHLinSz...; + ... + + // Border f"ur Tools passend zu rSize berechnen und setzen + SvBorder aBorder... + SetBorderPixel( aBorder ); // ab jetzt sind Positionierungen erlaubt + + // Tools anordnen + pHLin->SetPosSizePixel( aHLinPos, aHLinSz ); + ... + } - [Querverweise] + [Querverweise] - <SfxViewShell::InnerResizePixel(const Point&,const Size& rSize)> + <SfxViewShell::InnerResizePixel(const Point&,const Size& rSize)> */ { - DBG_CHKTHIS(SfxViewShell, 0); - SetBorderPixel( SvBorder() ); + DBG_CHKTHIS(SfxViewShell, 0); + SetBorderPixel( SvBorder() ); } //-------------------------------------------------------------------- void SfxViewShell::InnerResizePixel ( - const Point& /*rToolOffset*/,// linke obere Ecke der Tools im Frame-Window - const Size& /*rSize*/ // dem Edit-Win zur Verf"ugung stehende Gr"o\se + const Point& /*rToolOffset*/,// linke obere Ecke der Tools im Frame-Window + const Size& /*rSize*/ // dem Edit-Win zur Verf"ugung stehende Gr"o\se ) /* [Beschreibung] Diese Methode muss ueberladen werden, um auf "Anderungen der Groesse - des Edit-Windows zu reagieren. + des Edit-Windows zu reagieren. - Das Edit-Window darf weder in Gr"o\se noch Position ver"andert werden. - Weder die Vis-Area der SfxObjectShell noch dessen Skalierung oder - Position d"urfen ver"andert werden. + Das Edit-Window darf weder in Gr"o\se noch Position ver"andert werden. + Weder die Vis-Area der SfxObjectShell noch dessen Skalierung oder + Position d"urfen ver"andert werden. - "Andert sich durch die neue Berechnung der Border, so mu\s dieser - mit <SfxViewShell::SetBorderPixel(const SvBorder&)> gesetzt werden. - Erst nach Aufruf von 'SetBorderPixel' ist das Positionieren von - Tools erlaubt. + "Andert sich durch die neue Berechnung der Border, so mu\s dieser + mit <SfxViewShell::SetBorderPixel(const SvBorder&)> gesetzt werden. + Erst nach Aufruf von 'SetBorderPixel' ist das Positionieren von + Tools erlaubt. - [Beispiel] + [Beispiel] - void AppViewSh::InnerViewResizePixel( const Point &rOfs, const Size &rSz ) - { - // Tool-Positionen und Gr"o\sen von innen berechnen, NICHT setzen! - // (wegen folgender Border-Berechnung) - Point aHLinPos...; Size aHLinSz...; - ... - - // Border f"ur Tools passend zu rSz berechnen und setzen - SvBorder aBorder... - SetBorderPixel( aBorder ); // ab jetzt sind Positionierungen erlaubt - - // Tools anordnen - pHLin->SetPosSizePixel( aHLinPos, aHLinSz ); - ... - } + void AppViewSh::InnerViewResizePixel( const Point &rOfs, const Size &rSz ) + { + // Tool-Positionen und Gr"o\sen von innen berechnen, NICHT setzen! + // (wegen folgender Border-Berechnung) + Point aHLinPos...; Size aHLinSz...; + ... + + // Border f"ur Tools passend zu rSz berechnen und setzen + SvBorder aBorder... + SetBorderPixel( aBorder ); // ab jetzt sind Positionierungen erlaubt + + // Tools anordnen + pHLin->SetPosSizePixel( aHLinPos, aHLinSz ); + ... + } - [Querverweise] + [Querverweise] - <SfxViewShell::OuterResizePixel(const Point&,const Size& rSize)> + <SfxViewShell::OuterResizePixel(const Point&,const Size& rSize)> */ { @@ -1216,11 +1276,11 @@ void SfxViewShell::SetWindow /* [Beschreibung] - Mit dieser Methode wird der SfxViewShell das Datenfenster mitgeteilt. - Dieses wird f"ur den In-Place-Container und f"ur das korrekte - Wiederherstellen des Focus ben"otigt. + Mit dieser Methode wird der SfxViewShell das Datenfenster mitgeteilt. + Dieses wird f"ur den In-Place-Container und f"ur das korrekte + Wiederherstellen des Focus ben"otigt. - Selbst In-Place-aktiv ist das Umsetzen des ViewPort-Windows verboten. + Selbst In-Place-aktiv ist das Umsetzen des ViewPort-Windows verboten. */ { @@ -1245,9 +1305,9 @@ void SfxViewShell::SetWindow if ( bHadFocus && pWindow ) pWindow->GrabFocus(); - //TODO/CLEANUP - //brauchen wir die Methode doch noch?! - //SFX_APP()->GrabFocus( pWindow ); + //TODO/CLEANUP + //brauchen wir die Methode doch noch?! + //SFX_APP()->GrabFocus( pWindow ); } //-------------------------------------------------------------------- @@ -1262,18 +1322,17 @@ Size SfxViewShell::GetOptimalSizePixel() const SfxViewShell::SfxViewShell ( - SfxViewFrame* pViewFrame, /* <SfxViewFrame>, in dem diese View - dargestellt wird */ + SfxViewFrame* pViewFrame, /* <SfxViewFrame>, in dem diese View dargestellt wird */ USHORT nFlags /* siehe <SfxViewShell-Flags> */ ) : SfxShell(this) , pImp( new SfxViewShell_Impl(nFlags) ) - ,pIPClientList( 0 ) - ,pFrame(pViewFrame) - ,pSubShell(0) - ,pWindow(0) - ,bNoNewWindow( 0 != (nFlags & SFX_VIEW_NO_NEWWINDOW) ) + ,pIPClientList( 0 ) + ,pFrame(pViewFrame) + ,pSubShell(0) + ,pWindow(0) + ,bNoNewWindow( 0 != (nFlags & SFX_VIEW_NO_NEWWINDOW) ) { DBG_CTOR(SfxViewShell, 0); @@ -1382,12 +1441,12 @@ SfxViewShell* SfxViewShell::Get( const Reference< XController>& i_rController ) SdrView* SfxViewShell::GetDrawView() const -/* [Beschreibung] +/* [Beschreibung] - Diese virtuelle Methode mu\s von den Subklassen "uberladen werden, wenn - der Property-Editor zur Verf"ugung stehen soll. + Diese virtuelle Methode mu\s von den Subklassen "uberladen werden, wenn + der Property-Editor zur Verf"ugung stehen soll. - Die Default-Implementierung liefert immer 0. + Die Default-Implementierung liefert immer 0. */ { @@ -1398,27 +1457,27 @@ SdrView* SfxViewShell::GetDrawView() const String SfxViewShell::GetSelectionText ( - BOOL /*bCompleteWords*/ /* FALSE (default) - Nur der tats"achlich selektierte Text wird - zur"uckgegeben. - - TRUE - Der selektierte Text wird soweit erweitert, - da\s nur ganze W"orter zur"uckgegeben werden. - Als Worttrenner gelten White-Spaces und die + BOOL /*bCompleteWords*/ /* FALSE (default) + Nur der tats"achlich selektierte Text wird + zur"uckgegeben. + + TRUE + Der selektierte Text wird soweit erweitert, + da\s nur ganze W"orter zur"uckgegeben werden. + Als Worttrenner gelten White-Spaces und die Satzzeichen ".,;" sowie einfache und doppelte - Anf"uhrungszeichen. - */ + Anf"uhrungszeichen. + */ ) /* [Beschreibung] - Diese Methode kann von Anwendungsprogrammierer "uberladen werden, - um einen Text zur"uckzuliefern, der in der aktuellen Selektion - steht. Dieser wird z.B. beim Versenden (email) verwendet. + Diese Methode kann von Anwendungsprogrammierer "uberladen werden, + um einen Text zur"uckzuliefern, der in der aktuellen Selektion + steht. Dieser wird z.B. beim Versenden (email) verwendet. Mit "CompleteWords == TRUE" ger"ufen, reicht z.B. auch der Cursor, - der in einer URL steht, um die gesamte URL zu liefern. + der in einer URL steht, um die gesamte URL zu liefern. */ { @@ -1431,9 +1490,9 @@ BOOL SfxViewShell::HasSelection( BOOL ) const /* [Beschreibung] - Mit dieser virtuellen Methode kann z.B. ein Dialog abfragen, ob in der - aktuellen View etwas selektiert ist. Wenn der Parameter <BOOL> TRUE ist, - wird abgefragt, ob Text selektiert ist. + Mit dieser virtuellen Methode kann z.B. ein Dialog abfragen, ob in der + aktuellen View etwas selektiert ist. Wenn der Parameter <BOOL> TRUE ist, + wird abgefragt, ob Text selektiert ist. */ { @@ -1446,16 +1505,16 @@ void SfxViewShell::SetSubShell( SfxShell *pShell ) /* [Beschreibung] - Mit dieser Methode kann eine Selektions- oder Cursor-Shell angemeldet - werden, die automatisch unmittelbar nach der SfxViewShell auf den - SfxDispatcher gepusht wird, und automatisch umittelbar vor ihr - gepoppt wird. + Mit dieser Methode kann eine Selektions- oder Cursor-Shell angemeldet + werden, die automatisch unmittelbar nach der SfxViewShell auf den + SfxDispatcher gepusht wird, und automatisch umittelbar vor ihr + gepoppt wird. - Ist die SfxViewShell-Instanz bereits gepusht, dann wird pShell - sofort ebenfalls gepusht. Wird mit SetSubShell eine andere SfxShell - Instanz angemeldet, als vorher angemeldet war, wird die zuvor angemeldete - ggf. automatisch gepoppt. Mit pShell==0 kann daher die aktuelle - Sub-Shell abgemeldet werden. + Ist die SfxViewShell-Instanz bereits gepusht, dann wird pShell + sofort ebenfalls gepusht. Wird mit SetSubShell eine andere SfxShell + Instanz angemeldet, als vorher angemeldet war, wird die zuvor angemeldete + ggf. automatisch gepoppt. Mit pShell==0 kann daher die aktuelle + Sub-Shell abgemeldet werden. */ { @@ -1557,6 +1616,7 @@ void SfxViewShell::ReadUserData(const String&, BOOL ) void SfxViewShell::ReadUserDataSequence ( const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >&, sal_Bool ) { } + void SfxViewShell::WriteUserDataSequence ( ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >&, sal_Bool ) { } @@ -1567,8 +1627,8 @@ void SfxViewShell::WriteUserDataSequence ( ::com::sun::star::uno::Sequence < ::c SfxViewShell* SfxViewShell::GetFirst ( - const TypeId* pType, - BOOL bOnlyVisible + const TypeId* pType, + BOOL bOnlyVisible ) { // search for a SfxViewShell of the specified type @@ -1702,24 +1762,24 @@ FASTBOOL SfxViewShell::KeyInput( const KeyEvent &rKeyEvent ) /* [Beschreibung] - Diese Methode f"uhrt das KeyEvent 'rKeyEvent' "uber die an dieser - SfxViewShell direkt oder indirekt (z.B. via Applikation) konfigurierten - Tasten (Accelerator) aus. + Diese Methode f"uhrt das KeyEvent 'rKeyEvent' "uber die an dieser + SfxViewShell direkt oder indirekt (z.B. via Applikation) konfigurierten + Tasten (Accelerator) aus. - [R"uckgabewert] + [R"uckgabewert] - FASTBOOL TRUE - die Taste ist konfiguriert, der betreffende - Handler wurde gerufen + FASTBOOL TRUE + die Taste ist konfiguriert, der betreffende + Handler wurde gerufen - FALSE - die Taste ist nicht konfiguriert, es konnte - also kein Handler gerufen werden + FALSE + die Taste ist nicht konfiguriert, es konnte + also kein Handler gerufen werden - [Querverweise] - <SfxApplication::KeyInput(const KeyEvent&)> + [Querverweise] + <SfxApplication::KeyInput(const KeyEvent&)> */ { return ExecKey_Impl(rKeyEvent); @@ -1736,9 +1796,9 @@ void SfxViewShell::ShowCursor( FASTBOOL /*bOn*/ ) /* [Beschreibung] - Diese Methode mu\s von Subklassen "uberladen werden, damit vom SFx - aus der Cursor ein- und ausgeschaltet werden kann. Dies geschieht - z.B. bei laufendem <SfxProgress>. + Diese Methode mu\s von Subklassen "uberladen werden, damit vom SFx + aus der Cursor ein- und ausgeschaltet werden kann. Dies geschieht + z.B. bei laufendem <SfxProgress>. */ { @@ -1750,15 +1810,15 @@ void SfxViewShell::GotFocus() const /* [Beschreibung] - Diese Methode mu\s vom Applikationsentwickler gerufen werden, wenn - das Edit-Window den Focus erhalten hat. Der SFx hat so z.B. die - M"oglichkeit, den Accelerator einzuschalten. + Diese Methode mu\s vom Applikationsentwickler gerufen werden, wenn + das Edit-Window den Focus erhalten hat. Der SFx hat so z.B. die + M"oglichkeit, den Accelerator einzuschalten. - [Anmerkung] + [Anmerkung] - <StarView> liefert leider keine M"oglichkeit, solche Events - 'von der Seite' einzuh"angen. + <StarView> liefert leider keine M"oglichkeit, solche Events + 'von der Seite' einzuh"angen. */ { @@ -1838,10 +1898,10 @@ void SfxViewShell::CheckIPClient_Impl( SfxInPlaceClient *pIPClient, const Rectan // this method is called when either a client is created or the "Edit/Plugins" checkbox is checked if ( !pIPClient->IsObjectInPlaceActive() && pImp->m_bPlugInsActive ) { - // object in client is currently not active - // check if the object wants to be activated always or when it becomes at least partially visible - // TODO/LATER: maybe we should use the scaled area instead of the ObjArea?! - if ( bAlwaysActive || (bActiveWhenVisible && rVisArea.IsOver(pIPClient->GetObjArea())) ) + // object in client is currently not active + // check if the object wants to be activated always or when it becomes at least partially visible + // TODO/LATER: maybe we should use the scaled area instead of the ObjArea?! + if ( bAlwaysActive || (bActiveWhenVisible && rVisArea.IsOver(pIPClient->GetObjArea())) ) { try { @@ -1854,11 +1914,11 @@ void SfxViewShell::CheckIPClient_Impl( SfxInPlaceClient *pIPClient, const Rectan } else if (!pImp->m_bPlugInsActive) { - // object in client is currently active and "Edit/Plugins" checkbox is selected - // check if the object wants to be activated always or when it becomes at least partially visible + // object in client is currently active and "Edit/Plugins" checkbox is selected + // check if the object wants to be activated always or when it becomes at least partially visible // in this case selecting of the "Edit/Plugin" checkbox should let such objects deactivate - if ( bAlwaysActive || bActiveWhenVisible ) - pIPClient->GetObject()->changeState( embed::EmbedStates::RUNNING ); + if ( bAlwaysActive || bActiveWhenVisible ) + pIPClient->GetObject()->changeState( embed::EmbedStates::RUNNING ); } } @@ -1874,9 +1934,9 @@ void SfxViewShell::DiscardClients_Impl() /* [Beschreibung] - Diese Methode dient dazu, vor dem Schlie\sen eines Dokuments das - Speichern der Objekte zu verhindern, wenn der Benutzer Schlie\en ohne - Speichern gew"ahlt hatte. + Diese Methode dient dazu, vor dem Schlie\sen eines Dokuments das + Speichern der Objekte zu verhindern, wenn der Benutzer Schlie\en ohne + Speichern gew"ahlt hatte. */ { @@ -1982,9 +2042,9 @@ void SfxViewShell::JumpToMark( const String& rMark ) { SfxStringItem aMarkItem( SID_JUMPTOMARK, rMark ); GetViewFrame()->GetDispatcher()->Execute( - SID_JUMPTOMARK, - SFX_CALLMODE_SYNCHRON|SFX_CALLMODE_RECORD, - &aMarkItem, 0L ); + SID_JUMPTOMARK, + SFX_CALLMODE_SYNCHRON|SFX_CALLMODE_RECORD, + &aMarkItem, 0L ); } //------------------------------------------------------------------------ @@ -2005,8 +2065,7 @@ void SfxViewShell::SetController( SfxBaseController* pController ) if ( pImp->xClipboardListener.is() ) pImp->xClipboardListener->DisconnectViewShell(); - pImp->xClipboardListener = new SfxClipboardChangeListener( this ); - AddRemoveClipboardListener( pImp->xClipboardListener.get(), TRUE ); + pImp->xClipboardListener = new SfxClipboardChangeListener( this, GetClipboardNotifier() ); } Reference < XController > SfxViewShell::GetController() @@ -2072,19 +2131,19 @@ void Change( Menu* pMenu, SfxViewShell* pView ) } -BOOL SfxViewShell::TryContextMenuInterception( Menu& rIn, const ::rtl::OUString& rMenuIdentifier, Menu*& rpOut, ::com::sun::star::ui::ContextMenuExecuteEvent aEvent ) +BOOL SfxViewShell::TryContextMenuInterception( Menu& rIn, const ::rtl::OUString& rMenuIdentifier, Menu*& rpOut, ui::ContextMenuExecuteEvent aEvent ) { rpOut = NULL; BOOL bModified = FALSE; // create container from menu - // #110897# + // #110897# // aEvent.ActionTriggerContainer = ::framework::ActionTriggerHelper::CreateActionTriggerContainerFromMenu( &rIn ); aEvent.ActionTriggerContainer = ::framework::ActionTriggerHelper::CreateActionTriggerContainerFromMenu( ::comphelper::getProcessServiceFactory(), &rIn, &rMenuIdentifier ); // get selection from controller - aEvent.Selection = ::com::sun::star::uno::Reference < ::com::sun::star::view::XSelectionSupplier > ( GetController(), ::com::sun::star::uno::UNO_QUERY ); + aEvent.Selection = uno::Reference < view::XSelectionSupplier > ( GetController(), uno::UNO_QUERY ); // call interceptors ::cppu::OInterfaceIteratorHelper aIt( pImp->aInterceptorContainer ); @@ -2092,22 +2151,22 @@ BOOL SfxViewShell::TryContextMenuInterception( Menu& rIn, const ::rtl::OUString& { try { - ::com::sun::star::ui::ContextMenuInterceptorAction eAction = - ((::com::sun::star::ui::XContextMenuInterceptor*)aIt.next())->notifyContextMenuExecute( aEvent ); + ui::ContextMenuInterceptorAction eAction = + ((ui::XContextMenuInterceptor*)aIt.next())->notifyContextMenuExecute( aEvent ); switch ( eAction ) { - case ::com::sun::star::ui::ContextMenuInterceptorAction_CANCELLED : + case ui::ContextMenuInterceptorAction_CANCELLED : // interceptor does not want execution return FALSE; - case ::com::sun::star::ui::ContextMenuInterceptorAction_EXECUTE_MODIFIED : + case ui::ContextMenuInterceptorAction_EXECUTE_MODIFIED : // interceptor wants his modified menu to be executed bModified = TRUE; break; - case ::com::sun::star::ui::ContextMenuInterceptorAction_CONTINUE_MODIFIED : + case ui::ContextMenuInterceptorAction_CONTINUE_MODIFIED : // interceptor has modified menu, but allows for calling other interceptors bModified = TRUE; continue; - case ::com::sun::star::ui::ContextMenuInterceptorAction_IGNORED : + case ui::ContextMenuInterceptorAction_IGNORED : // interceptor is indifferent continue; default: @@ -2115,7 +2174,7 @@ BOOL SfxViewShell::TryContextMenuInterception( Menu& rIn, const ::rtl::OUString& continue; } } - catch( ::com::sun::star::uno::RuntimeException& ) + catch( uno::RuntimeException& ) { aIt.remove(); } @@ -2154,8 +2213,8 @@ void SfxViewShell::CheckOwnerShip_Impl() BOOL bSuccess = FALSE; if (pImp->m_bGotOwnership) { - com::sun::star::uno::Reference < com::sun::star::util::XCloseable > xModel( - GetObjectShell()->GetModel(), com::sun::star::uno::UNO_QUERY ); + uno::Reference < util::XCloseable > xModel( + GetObjectShell()->GetModel(), uno::UNO_QUERY ); if ( xModel.is() ) { try @@ -2164,7 +2223,7 @@ void SfxViewShell::CheckOwnerShip_Impl() xModel->close( sal_True ); bSuccess = TRUE; } - catch ( com::sun::star::util::CloseVetoException& ) + catch ( util::CloseVetoException& ) { } } @@ -2173,15 +2232,15 @@ void SfxViewShell::CheckOwnerShip_Impl() if (!bSuccess && pImp->m_bGotFrameOwnership) { // document couldn't be closed or it shouldn't, now try at least to close the frame - com::sun::star::uno::Reference < com::sun::star::util::XCloseable > xFrame( - GetViewFrame()->GetFrame().GetFrameInterface(), com::sun::star::uno::UNO_QUERY ); + uno::Reference < util::XCloseable > xFrame( + GetViewFrame()->GetFrame().GetFrameInterface(), com::sun::star::uno::UNO_QUERY ); if ( xFrame.is() ) { try { xFrame->close( sal_True ); } - catch ( com::sun::star::util::CloseVetoException& ) + catch ( util::CloseVetoException& ) { } } @@ -2191,9 +2250,7 @@ void SfxViewShell::CheckOwnerShip_Impl() long SfxViewShell::HandleNotifyEvent_Impl( NotifyEvent& rEvent ) { if (pImp->m_pController.is()) - { return pImp->m_pController->HandleEvent_Impl( rEvent ); - } return 0; } @@ -2212,7 +2269,7 @@ BOOL SfxViewShell::HasMouseClickListeners_Impl() void SfxViewShell::SetAdditionalPrintOptions( const com::sun::star::uno::Sequence < com::sun::star::beans::PropertyValue >& rOpts ) { pImp->aPrintOpts = rOpts; -// GetObjectShell()->Broadcast( SfxPrintingHint( -3, NULL, NULL, rOpts ) ); +// GetObjectShell()->Broadcast( SfxPrintingHint( -3, NULL, NULL, rOpts ) ); } BOOL SfxViewShell::Escape() @@ -2228,11 +2285,20 @@ Reference< view::XRenderable > SfxViewShell::GetRenderable() { Reference< frame::XModel > xModel( pObj->GetModel() ); if( xModel.is() ) - xRender = Reference< view::XRenderable >( xModel, UNO_QUERY ); + xRender = Reference< view::XRenderable >( xModel, UNO_QUERY ); } return xRender; } +uno::Reference< datatransfer::clipboard::XClipboardNotifier > SfxViewShell::GetClipboardNotifier() +{ + uno::Reference< datatransfer::clipboard::XClipboardNotifier > xClipboardNotifier; + if ( GetViewFrame() ) + xClipboardNotifier = uno::Reference< datatransfer::clipboard::XClipboardNotifier >( GetViewFrame()->GetWindow().GetClipboard(), uno::UNO_QUERY ); + + return xClipboardNotifier; +} + void SfxViewShell::AddRemoveClipboardListener( const uno::Reference < datatransfer::clipboard::XClipboardListener >& rClp, BOOL bAdd ) { try |