1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sw.hxx" 26 #include <com/sun/star/embed/EmbedStates.hpp> 27 28 #ifndef _SFX_CLIENTSH_HXX 29 #include <sfx2/ipclient.hxx> 30 #endif 31 #include <sfx2/viewsh.hxx> 32 #include <sfx2/app.hxx> 33 #include <unotools/moduleoptions.hxx> 34 #include <sfx2/viewfrm.hxx> 35 36 #include <sot/exchange.hxx> 37 #include <fmtcntnt.hxx> 38 #include <fmtanchr.hxx> 39 #include <fesh.hxx> 40 #include <cntfrm.hxx> 41 #include <frmfmt.hxx> 42 #include <flyfrm.hxx> 43 #include <pam.hxx> 44 #include <doc.hxx> 45 #include <ndtxt.hxx> 46 #include <notxtfrm.hxx> 47 #include <ndole.hxx> 48 #include <swcli.hxx> 49 50 using namespace com::sun::star; 51 FindFlyFrm(const uno::Reference<embed::XEmbeddedObject> & xObj) const52SwFlyFrm *SwFEShell::FindFlyFrm( const uno::Reference < embed::XEmbeddedObject >& xObj ) const 53 { 54 SwFlyFrm *pFly = FindFlyFrm(); 55 if ( pFly && pFly->Lower() && pFly->Lower()->IsNoTxtFrm() ) 56 { 57 SwOLENode *pNd = ((SwNoTxtFrm*)pFly->Lower())->GetNode()->GetOLENode(); 58 if ( !pNd || pNd->GetOLEObj().GetOleRef() != xObj ) 59 pFly = 0; 60 } 61 else 62 pFly = 0; 63 64 if ( !pFly ) 65 { 66 //Kein Fly oder der falsche selektiert. Ergo muessen wir leider suchen. 67 sal_Bool bExist = sal_False; 68 SwStartNode *pStNd; 69 sal_uLong nSttIdx = GetNodes().GetEndOfAutotext().StartOfSectionIndex() + 1, 70 nEndIdx = GetNodes().GetEndOfAutotext().GetIndex(); 71 while( nSttIdx < nEndIdx && 72 0 != (pStNd = GetNodes()[ nSttIdx ]->GetStartNode()) ) 73 { 74 SwNode *pNd = GetNodes()[ nSttIdx+1 ]; 75 if ( pNd->IsOLENode() && 76 ((SwOLENode*)pNd)->GetOLEObj().GetOleRef() == xObj ) 77 { 78 bExist = sal_True; 79 SwFrm *pFrm = ((SwOLENode*)pNd)->getLayoutFrm( GetLayout() ); 80 if ( pFrm ) 81 pFly = pFrm->FindFlyFrm(); 82 break; 83 } 84 nSttIdx = pStNd->EndOfSectionIndex() + 1; 85 } 86 87 ASSERT( bExist, "OLE-Object unknown and FlyFrm not found." ); 88 } 89 return pFly; 90 } 91 92 GetUniqueOLEName() const93String SwFEShell::GetUniqueOLEName() const 94 { 95 return GetDoc()->GetUniqueOLEName(); 96 } 97 98 GetUniqueFrameName() const99String SwFEShell::GetUniqueFrameName() const 100 { 101 return GetDoc()->GetUniqueFrameName(); 102 } 103 104 MakeObjVisible(const uno::Reference<embed::XEmbeddedObject> & xObj) const105void SwFEShell::MakeObjVisible( const uno::Reference < embed::XEmbeddedObject >& xObj ) const 106 { 107 SwFlyFrm *pFly = FindFlyFrm( xObj ); 108 if ( pFly ) 109 { 110 SwRect aTmp( pFly->Prt() ); 111 aTmp += pFly->Frm().Pos(); 112 if ( !aTmp.IsOver( VisArea() ) ) 113 { 114 ((SwFEShell*)this)->StartAction(); 115 ((SwFEShell*)this)->MakeVisible( aTmp ); 116 ((SwFEShell*)this)->EndAction(); 117 } 118 } 119 } 120 FinishOLEObj()121sal_Bool SwFEShell::FinishOLEObj() // Server wird beendet 122 { 123 SfxInPlaceClient* pIPClient = GetSfxViewShell()->GetIPClient(); 124 if ( !pIPClient ) 125 return sal_False; 126 127 sal_Bool bRet = pIPClient->IsObjectInPlaceActive(); 128 if( bRet ) 129 { 130 uno::Reference < embed::XEmbeddedObject > xObj = pIPClient->GetObject(); 131 if( CNT_OLE == GetCntType() ) 132 ClearAutomaticContour(); 133 134 if( ((SwOleClient*)pIPClient)->IsCheckForOLEInCaption() != 135 IsCheckForOLEInCaption() ) 136 SetCheckForOLEInCaption( !IsCheckForOLEInCaption() ); 137 138 // leave UIActive state 139 pIPClient->DeactivateObject(); 140 } 141 return bRet; 142 } 143 144 145 146 147