/************************************************************** * * 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_sw.hxx" #include #include "globals.hrc" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace ::com::sun::star; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::scanner; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::datatransfer::clipboard; /* -----------------02.06.98 15:31------------------- * * --------------------------------------------------*/ SwView_Impl::SwView_Impl(SwView* pShell) : pxXTextView(new uno::Reference), pView(pShell), eShellMode(SHELL_MODE_TEXT), pConfigItem(0), nMailMergeRestartPage(0), bMailMergeSourceView(sal_True), m_pDocInserter(NULL), m_pRequest(NULL), m_bSelectObject(false), m_bEditingPositionSet(false) { *pxXTextView = new SwXTextView(pView); xDisProvInterceptor = new SwXDispatchProviderInterceptor(*pView); } /*-----------------13.12.97 09:51------------------- --------------------------------------------------*/ SwView_Impl::~SwView_Impl() { Reference xDispTunnel(xDisProvInterceptor, UNO_QUERY); SwXDispatchProviderInterceptor* pInterceptor = 0; if(xDispTunnel.is() && 0 != (pInterceptor = reinterpret_cast< SwXDispatchProviderInterceptor * >( sal::static_int_cast< sal_IntPtr >( xDispTunnel->getSomething(SwXDispatchProviderInterceptor::getUnoTunnelId()))))) { pInterceptor->Invalidate(); } view::XSelectionSupplier* pTextView = pxXTextView->get(); ((SwXTextView*)pTextView)->Invalidate(); delete pxXTextView; if( xScanEvtLstnr.is() ) pScanEvtLstnr->ViewDestroyed(); if( xClipEvtLstnr.is() ) { pClipEvtLstnr->AddRemoveListener( sal_False ); pClipEvtLstnr->ViewDestroyed(); } delete pConfigItem; delete m_pDocInserter; delete m_pRequest; } /*-----------------13.12.97 09:54------------------- --------------------------------------------------*/ void SwView_Impl::SetShellMode(ShellModes eSet) { eShellMode = eSet; } /*-----------------13.12.97 09:59------------------- --------------------------------------------------*/ view::XSelectionSupplier* SwView_Impl::GetUNOObject() { return pxXTextView->get(); } /* -----------------02.06.98 15:29------------------- * * --------------------------------------------------*/ SwXTextView* SwView_Impl::GetUNOObject_Impl() { view::XSelectionSupplier* pTextView = pxXTextView->get(); return ((SwXTextView*)pTextView); } /* -----------------------------29.05.00 09:04-------------------------------- ---------------------------------------------------------------------------*/ void SwView_Impl::ExecuteScan( SfxRequest& rReq ) { sal_uInt16 nSlot = rReq.GetSlot(); switch(nSlot) { case SID_TWAIN_SELECT: { sal_Bool bDone = sal_False; Reference< XScannerManager > xScanMgr = SW_MOD()->GetScannerManager(); if( xScanMgr.is() ) { try { const Sequence< ScannerContext > aContexts( xScanMgr->getAvailableScanners() ); if( aContexts.getLength() ) { ScannerContext aContext( aContexts.getConstArray()[ 0 ] ); bDone = xScanMgr->configureScanner( aContext ); } } catch(...) { } } if( bDone ) rReq.Done(); else { rReq.Ignore(); // KA 04.07.2002 // InfoBox( 0, SW_RES(MSG_SCAN_NOSOURCE) ).Execute(); } } break; case SID_TWAIN_TRANSFER: { sal_Bool bDone = sal_False; Reference< XScannerManager > xScanMgr = SW_MOD()->GetScannerManager(); if( xScanMgr.is() ) { SwScannerEventListener& rListener = GetScannerEventListener(); try { const Sequence< scanner::ScannerContext >aContexts( xScanMgr->getAvailableScanners() ); if( aContexts.getLength() ) { Reference< XEventListener > xLstner = &rListener; xScanMgr->startScan( aContexts.getConstArray()[ 0 ], xLstner ); bDone = sal_True; } } catch(...) { } } if( !bDone ) { InfoBox( 0, SW_RES(MSG_SCAN_NOSOURCE) ).Execute(); rReq.Ignore(); } else { rReq.Done(); SfxBindings& rBind = pView->GetViewFrame()->GetBindings(); rBind.Invalidate( SID_TWAIN_SELECT ); rBind.Invalidate( SID_TWAIN_TRANSFER ); } } break; } } /* -----------------------------29.05.00 08:26-------------------------------- ---------------------------------------------------------------------------*/ SwScannerEventListener& SwView_Impl::GetScannerEventListener() { if(!xScanEvtLstnr.is()) xScanEvtLstnr = pScanEvtLstnr = new SwScannerEventListener(*pView); return *pScanEvtLstnr; } void SwView_Impl::AddClipboardListener() { if(!xClipEvtLstnr.is()) { xClipEvtLstnr = pClipEvtLstnr = new SwClipboardChangeListener( *pView ); pClipEvtLstnr->AddRemoveListener( sal_True ); } } /* -----------------3/31/2003 11:42AM---------------- --------------------------------------------------*/ void SwView_Impl::Invalidate() { GetUNOObject_Impl()->Invalidate(); Reference< XUnoTunnel > xTunnel(xTransferable.get(), UNO_QUERY); if(xTunnel.is()) { SwTransferable* pTransferable = reinterpret_cast< SwTransferable * >( sal::static_int_cast< sal_IntPtr >( xTunnel->getSomething(SwTransferable::getUnoTunnelId()))); if(pTransferable) pTransferable->Invalidate(); } } /* -----------------3/31/2003 12:40PM---------------- --------------------------------------------------*/ void SwView_Impl::AddTransferable(SwTransferable& rTransferable) { //prevent removing of the non-referenced SwTransferable rTransferable.m_refCount++;; { xTransferable = Reference (&rTransferable); } rTransferable.m_refCount--; } void SwView_Impl::StartDocumentInserter( const String& rFactory, const Link& rEndDialogHdl ) { delete m_pDocInserter; m_pDocInserter = new ::sfx2::DocumentInserter( 0, rFactory ); m_pDocInserter->StartExecuteModal( rEndDialogHdl ); } SfxMedium* SwView_Impl::CreateMedium() { return m_pDocInserter->CreateMedium(); } void SwView_Impl::InitRequest( const SfxRequest& rRequest ) { delete m_pRequest; m_pRequest = new SfxRequest( rRequest ); } // ------------------------- SwScannerEventListener --------------------- SwScannerEventListener::~SwScannerEventListener() { } void SAL_CALL SwScannerEventListener::disposing( const EventObject& rEventObject) throw(uno::RuntimeException) { vos::OGuard aGuard(Application::GetSolarMutex()); #if defined WNT || defined UNX if( pView ) pView->ScannerEventHdl( rEventObject ); #endif } // ------------------------- SwClipboardChangeListener --------------------- SwClipboardChangeListener::~SwClipboardChangeListener() { } void SAL_CALL SwClipboardChangeListener::disposing( const EventObject& /*rEventObject*/ ) throw ( RuntimeException ) { } void SAL_CALL SwClipboardChangeListener::changedContents( const CLIP_NMSPC::ClipboardEvent& rEventObject ) throw ( RuntimeException ) { const ::vos::OGuard aGuard( Application::GetSolarMutex() ); if( pView ) { { TransferableDataHelper aDataHelper( rEventObject.Contents ); SwWrtShell& rSh = pView->GetWrtShell(); pView->nLastPasteDestination = SwTransferable::GetSotDestination( rSh ); pView->bPasteState = aDataHelper.GetXTransferable().is() && SwTransferable::IsPaste( rSh, aDataHelper ); pView->bPasteSpecialState = aDataHelper.GetXTransferable().is() && SwTransferable::IsPasteSpecial( rSh, aDataHelper ); } SfxBindings& rBind = pView->GetViewFrame()->GetBindings(); rBind.Invalidate( SID_PASTE ); rBind.Invalidate( SID_PASTE_SPECIAL ); rBind.Invalidate( SID_CLIPBOARD_FORMAT_ITEMS ); } } void SwClipboardChangeListener::AddRemoveListener( sal_Bool bAdd ) { pView->AddRemoveClipboardListener( Reference< XClipboardListener >( this ), bAdd ); }