1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sd.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski #include "fuinsert.hxx"
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielski #include <comphelper/storagehelper.hxx>
30*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
31*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx>
32*b1cdbd2cSJim Jagielski #include <svx/svxdlg.hxx>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/embed/NoVisualAreaSizeException.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/embed/Aspects.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/chart2/XChartDocument.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/FillStyle.hpp>
38*b1cdbd2cSJim Jagielski
39*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
40*b1cdbd2cSJim Jagielski #include <svl/urihelper.hxx>
41*b1cdbd2cSJim Jagielski #include <sfx2/msgpool.hxx>
42*b1cdbd2cSJim Jagielski #include <svtools/sores.hxx>
43*b1cdbd2cSJim Jagielski #include <svtools/insdlg.hxx>
44*b1cdbd2cSJim Jagielski #include <sfx2/request.hxx>
45*b1cdbd2cSJim Jagielski #include <svl/globalnameitem.hxx>
46*b1cdbd2cSJim Jagielski #include <unotools/pathoptions.hxx>
47*b1cdbd2cSJim Jagielski #include <svx/pfiledlg.hxx>
48*b1cdbd2cSJim Jagielski #include <svx/dialogs.hrc>
49*b1cdbd2cSJim Jagielski #include <sfx2/linkmgr.hxx>
50*b1cdbd2cSJim Jagielski #include <svx/svdetc.hxx>
51*b1cdbd2cSJim Jagielski #include <avmedia/mediawindow.hxx>
52*b1cdbd2cSJim Jagielski #ifndef _UNOTOOLS_UCBSTREAMHELPER_HXX
53*b1cdbd2cSJim Jagielski #include <unotools/ucbstreamhelper.hxx>
54*b1cdbd2cSJim Jagielski #endif
55*b1cdbd2cSJim Jagielski #include <sfx2/printer.hxx>
56*b1cdbd2cSJim Jagielski #include <sot/clsids.hxx>
57*b1cdbd2cSJim Jagielski #include <svtools/sfxecode.hxx>
58*b1cdbd2cSJim Jagielski #include <svtools/transfer.hxx>
59*b1cdbd2cSJim Jagielski #include <svl/urlbmk.hxx>
60*b1cdbd2cSJim Jagielski #include <svx/svdobj.hxx>
61*b1cdbd2cSJim Jagielski #include <svx/svdograf.hxx>
62*b1cdbd2cSJim Jagielski #include <svx/svdoole2.hxx>
63*b1cdbd2cSJim Jagielski #include <svx/svdomedia.hxx>
64*b1cdbd2cSJim Jagielski #ifndef _EDITENG_HXX //autogen
65*b1cdbd2cSJim Jagielski #include <editeng/editeng.hxx>
66*b1cdbd2cSJim Jagielski #endif
67*b1cdbd2cSJim Jagielski #include <sot/storage.hxx>
68*b1cdbd2cSJim Jagielski #include <sot/formats.hxx>
69*b1cdbd2cSJim Jagielski #include <svx/svdpagv.hxx>
70*b1cdbd2cSJim Jagielski #ifndef _MSGBOX_HXX //autogen
71*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
72*b1cdbd2cSJim Jagielski #endif
73*b1cdbd2cSJim Jagielski #include <sfx2/opengrf.hxx>
74*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
75*b1cdbd2cSJim Jagielski #include <svx/charthelper.hxx>
76*b1cdbd2cSJim Jagielski
77*b1cdbd2cSJim Jagielski #include "app.hrc"
78*b1cdbd2cSJim Jagielski #include "misc.hxx"
79*b1cdbd2cSJim Jagielski #include "sdresid.hxx"
80*b1cdbd2cSJim Jagielski #include "View.hxx"
81*b1cdbd2cSJim Jagielski #include "app.hxx"
82*b1cdbd2cSJim Jagielski #include "Window.hxx"
83*b1cdbd2cSJim Jagielski #include "drawview.hxx"
84*b1cdbd2cSJim Jagielski #include "DrawViewShell.hxx"
85*b1cdbd2cSJim Jagielski #include "DrawDocShell.hxx"
86*b1cdbd2cSJim Jagielski #include "GraphicDocShell.hxx"
87*b1cdbd2cSJim Jagielski #include "strings.hrc"
88*b1cdbd2cSJim Jagielski #include "drawdoc.hxx"
89*b1cdbd2cSJim Jagielski #include "sdgrffilter.hxx"
90*b1cdbd2cSJim Jagielski #include "sdxfer.hxx"
91*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
92*b1cdbd2cSJim Jagielski #include "undo/undoobjects.hxx"
93*b1cdbd2cSJim Jagielski #include "glob.hrc"
94*b1cdbd2cSJim Jagielski
95*b1cdbd2cSJim Jagielski using namespace com::sun::star;
96*b1cdbd2cSJim Jagielski
97*b1cdbd2cSJim Jagielski namespace sd {
98*b1cdbd2cSJim Jagielski
99*b1cdbd2cSJim Jagielski TYPEINIT1( FuInsertGraphic, FuPoor );
100*b1cdbd2cSJim Jagielski TYPEINIT1( FuInsertClipboard, FuPoor );
101*b1cdbd2cSJim Jagielski TYPEINIT1( FuInsertOLE, FuPoor );
102*b1cdbd2cSJim Jagielski TYPEINIT1( FuInsertAVMedia, FuPoor );
103*b1cdbd2cSJim Jagielski
104*b1cdbd2cSJim Jagielski /*************************************************************************
105*b1cdbd2cSJim Jagielski |*
106*b1cdbd2cSJim Jagielski |* FuInsertGraphic::Konstruktor
107*b1cdbd2cSJim Jagielski |*
108*b1cdbd2cSJim Jagielski \************************************************************************/
109*b1cdbd2cSJim Jagielski
FuInsertGraphic(ViewShell * pViewSh,::sd::Window * pWin,::sd::View * pView,SdDrawDocument * pDoc,SfxRequest & rReq)110*b1cdbd2cSJim Jagielski FuInsertGraphic::FuInsertGraphic (
111*b1cdbd2cSJim Jagielski ViewShell* pViewSh,
112*b1cdbd2cSJim Jagielski ::sd::Window* pWin,
113*b1cdbd2cSJim Jagielski ::sd::View* pView,
114*b1cdbd2cSJim Jagielski SdDrawDocument* pDoc,
115*b1cdbd2cSJim Jagielski SfxRequest& rReq)
116*b1cdbd2cSJim Jagielski : FuPoor(pViewSh, pWin, pView, pDoc, rReq)
117*b1cdbd2cSJim Jagielski {
118*b1cdbd2cSJim Jagielski }
119*b1cdbd2cSJim Jagielski
Create(ViewShell * pViewSh,::sd::Window * pWin,::sd::View * pView,SdDrawDocument * pDoc,SfxRequest & rReq)120*b1cdbd2cSJim Jagielski FunctionReference FuInsertGraphic::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq )
121*b1cdbd2cSJim Jagielski {
122*b1cdbd2cSJim Jagielski FunctionReference xFunc( new FuInsertGraphic( pViewSh, pWin, pView, pDoc, rReq ) );
123*b1cdbd2cSJim Jagielski xFunc->DoExecute(rReq);
124*b1cdbd2cSJim Jagielski return xFunc;
125*b1cdbd2cSJim Jagielski }
126*b1cdbd2cSJim Jagielski
127*b1cdbd2cSJim Jagielski #ifdef _MSC_VER
128*b1cdbd2cSJim Jagielski #pragma optimize ( "", off )
129*b1cdbd2cSJim Jagielski #endif
130*b1cdbd2cSJim Jagielski
DoExecute(SfxRequest &)131*b1cdbd2cSJim Jagielski void FuInsertGraphic::DoExecute( SfxRequest& )
132*b1cdbd2cSJim Jagielski {
133*b1cdbd2cSJim Jagielski SvxOpenGraphicDialog aDlg(SdResId(STR_INSERTGRAPHIC));
134*b1cdbd2cSJim Jagielski
135*b1cdbd2cSJim Jagielski if( aDlg.Execute() == GRFILTER_OK )
136*b1cdbd2cSJim Jagielski {
137*b1cdbd2cSJim Jagielski Graphic aGraphic;
138*b1cdbd2cSJim Jagielski int nError = aDlg.GetGraphic(aGraphic);
139*b1cdbd2cSJim Jagielski if( nError == GRFILTER_OK )
140*b1cdbd2cSJim Jagielski {
141*b1cdbd2cSJim Jagielski if( mpViewShell && mpViewShell->ISA(DrawViewShell))
142*b1cdbd2cSJim Jagielski {
143*b1cdbd2cSJim Jagielski sal_Int8 nAction = DND_ACTION_COPY;
144*b1cdbd2cSJim Jagielski SdrObject* pPickObj = mpView->GetEmptyPresentationObject( PRESOBJ_GRAPHIC );
145*b1cdbd2cSJim Jagielski bool bSelectionReplaced(false);
146*b1cdbd2cSJim Jagielski
147*b1cdbd2cSJim Jagielski if( pPickObj )
148*b1cdbd2cSJim Jagielski {
149*b1cdbd2cSJim Jagielski nAction = DND_ACTION_LINK;
150*b1cdbd2cSJim Jagielski }
151*b1cdbd2cSJim Jagielski else if(1 == mpView->GetMarkedObjectCount())
152*b1cdbd2cSJim Jagielski {
153*b1cdbd2cSJim Jagielski pPickObj = mpView->GetMarkedObjectByIndex(0);
154*b1cdbd2cSJim Jagielski nAction = DND_ACTION_MOVE;
155*b1cdbd2cSJim Jagielski bSelectionReplaced = true;
156*b1cdbd2cSJim Jagielski }
157*b1cdbd2cSJim Jagielski
158*b1cdbd2cSJim Jagielski Point aPos;
159*b1cdbd2cSJim Jagielski Rectangle aRect(aPos, mpWindow->GetOutputSizePixel() );
160*b1cdbd2cSJim Jagielski aPos = aRect.Center();
161*b1cdbd2cSJim Jagielski aPos = mpWindow->PixelToLogic(aPos);
162*b1cdbd2cSJim Jagielski SdrGrafObj* pGrafObj = mpView->InsertGraphic(aGraphic, nAction, aPos, pPickObj, NULL);
163*b1cdbd2cSJim Jagielski
164*b1cdbd2cSJim Jagielski if(pGrafObj && aDlg.IsAsLink())
165*b1cdbd2cSJim Jagielski {
166*b1cdbd2cSJim Jagielski // store link only?
167*b1cdbd2cSJim Jagielski String aFltName(aDlg.GetCurrentFilter());
168*b1cdbd2cSJim Jagielski String aPath(aDlg.GetPath());
169*b1cdbd2cSJim Jagielski pGrafObj->SetGraphicLink(aPath, aFltName);
170*b1cdbd2cSJim Jagielski }
171*b1cdbd2cSJim Jagielski
172*b1cdbd2cSJim Jagielski if(bSelectionReplaced && pGrafObj)
173*b1cdbd2cSJim Jagielski {
174*b1cdbd2cSJim Jagielski mpView->MarkObj(pGrafObj, mpView->GetSdrPageView());
175*b1cdbd2cSJim Jagielski }
176*b1cdbd2cSJim Jagielski }
177*b1cdbd2cSJim Jagielski }
178*b1cdbd2cSJim Jagielski else
179*b1cdbd2cSJim Jagielski {
180*b1cdbd2cSJim Jagielski SdGRFFilter::HandleGraphicFilterError( (sal_uInt16)nError, GraphicFilter::GetGraphicFilter()->GetLastError().nStreamError );
181*b1cdbd2cSJim Jagielski }
182*b1cdbd2cSJim Jagielski }
183*b1cdbd2cSJim Jagielski }
184*b1cdbd2cSJim Jagielski
185*b1cdbd2cSJim Jagielski #ifdef _MSC_VER
186*b1cdbd2cSJim Jagielski #pragma optimize ( "", on )
187*b1cdbd2cSJim Jagielski #endif
188*b1cdbd2cSJim Jagielski
189*b1cdbd2cSJim Jagielski /*************************************************************************
190*b1cdbd2cSJim Jagielski |*
191*b1cdbd2cSJim Jagielski |* FuInsertClipboard::Konstruktor
192*b1cdbd2cSJim Jagielski |*
193*b1cdbd2cSJim Jagielski \************************************************************************/
194*b1cdbd2cSJim Jagielski
FuInsertClipboard(ViewShell * pViewSh,::sd::Window * pWin,::sd::View * pView,SdDrawDocument * pDoc,SfxRequest & rReq)195*b1cdbd2cSJim Jagielski FuInsertClipboard::FuInsertClipboard (
196*b1cdbd2cSJim Jagielski ViewShell* pViewSh,
197*b1cdbd2cSJim Jagielski ::sd::Window* pWin,
198*b1cdbd2cSJim Jagielski ::sd::View* pView,
199*b1cdbd2cSJim Jagielski SdDrawDocument* pDoc,
200*b1cdbd2cSJim Jagielski SfxRequest& rReq)
201*b1cdbd2cSJim Jagielski : FuPoor(pViewSh, pWin, pView, pDoc, rReq)
202*b1cdbd2cSJim Jagielski {
203*b1cdbd2cSJim Jagielski }
204*b1cdbd2cSJim Jagielski
Create(ViewShell * pViewSh,::sd::Window * pWin,::sd::View * pView,SdDrawDocument * pDoc,SfxRequest & rReq)205*b1cdbd2cSJim Jagielski FunctionReference FuInsertClipboard::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq )
206*b1cdbd2cSJim Jagielski {
207*b1cdbd2cSJim Jagielski FunctionReference xFunc( new FuInsertClipboard( pViewSh, pWin, pView, pDoc, rReq ) );
208*b1cdbd2cSJim Jagielski xFunc->DoExecute(rReq);
209*b1cdbd2cSJim Jagielski return xFunc;
210*b1cdbd2cSJim Jagielski }
211*b1cdbd2cSJim Jagielski
DoExecute(SfxRequest &)212*b1cdbd2cSJim Jagielski void FuInsertClipboard::DoExecute( SfxRequest& )
213*b1cdbd2cSJim Jagielski {
214*b1cdbd2cSJim Jagielski TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( mpWindow ) );
215*b1cdbd2cSJim Jagielski sal_uLong nFormatId;
216*b1cdbd2cSJim Jagielski
217*b1cdbd2cSJim Jagielski SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
218*b1cdbd2cSJim Jagielski SfxAbstractPasteDialog* pDlg = pFact->CreatePasteDialog( mpViewShell->GetActiveWindow() );
219*b1cdbd2cSJim Jagielski if ( pDlg )
220*b1cdbd2cSJim Jagielski {
221*b1cdbd2cSJim Jagielski const String aEmptyString;
222*b1cdbd2cSJim Jagielski ::com::sun::star::datatransfer::DataFlavor aFlavor;
223*b1cdbd2cSJim Jagielski
224*b1cdbd2cSJim Jagielski pDlg->Insert( SOT_FORMATSTR_ID_EMBED_SOURCE, aEmptyString );
225*b1cdbd2cSJim Jagielski pDlg->Insert( SOT_FORMATSTR_ID_LINK_SOURCE, aEmptyString );
226*b1cdbd2cSJim Jagielski pDlg->Insert( SOT_FORMATSTR_ID_DRAWING, aEmptyString );
227*b1cdbd2cSJim Jagielski pDlg->Insert( SOT_FORMATSTR_ID_SVXB, aEmptyString );
228*b1cdbd2cSJim Jagielski pDlg->Insert( FORMAT_GDIMETAFILE, aEmptyString );
229*b1cdbd2cSJim Jagielski pDlg->Insert( FORMAT_BITMAP, aEmptyString );
230*b1cdbd2cSJim Jagielski pDlg->Insert( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK, aEmptyString );
231*b1cdbd2cSJim Jagielski pDlg->Insert( FORMAT_STRING, aEmptyString );
232*b1cdbd2cSJim Jagielski pDlg->Insert( SOT_FORMATSTR_ID_HTML, aEmptyString );
233*b1cdbd2cSJim Jagielski pDlg->Insert( FORMAT_RTF, aEmptyString );
234*b1cdbd2cSJim Jagielski pDlg->Insert( SOT_FORMATSTR_ID_EDITENGINE, aEmptyString );
235*b1cdbd2cSJim Jagielski
236*b1cdbd2cSJim Jagielski //TODO/MBA: testing
237*b1cdbd2cSJim Jagielski nFormatId = pDlg->GetFormat( aDataHelper );
238*b1cdbd2cSJim Jagielski if( nFormatId && aDataHelper.GetTransferable().is() )
239*b1cdbd2cSJim Jagielski {
240*b1cdbd2cSJim Jagielski sal_Int8 nAction = DND_ACTION_COPY;
241*b1cdbd2cSJim Jagielski
242*b1cdbd2cSJim Jagielski if( !mpView->InsertData( aDataHelper,
243*b1cdbd2cSJim Jagielski mpWindow->PixelToLogic( Rectangle( Point(), mpWindow->GetOutputSizePixel() ).Center() ),
244*b1cdbd2cSJim Jagielski nAction, sal_False, nFormatId ) &&
245*b1cdbd2cSJim Jagielski ( mpViewShell && mpViewShell->ISA( DrawViewShell ) ) )
246*b1cdbd2cSJim Jagielski {
247*b1cdbd2cSJim Jagielski DrawViewShell* pDrViewSh = static_cast<DrawViewShell*>(mpViewShell);
248*b1cdbd2cSJim Jagielski INetBookmark aINetBookmark( aEmptyStr, aEmptyStr );
249*b1cdbd2cSJim Jagielski
250*b1cdbd2cSJim Jagielski if( ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK ) &&
251*b1cdbd2cSJim Jagielski aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK, aINetBookmark ) ) ||
252*b1cdbd2cSJim Jagielski ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR ) &&
253*b1cdbd2cSJim Jagielski aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR, aINetBookmark ) ) ||
254*b1cdbd2cSJim Jagielski ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR ) &&
255*b1cdbd2cSJim Jagielski aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR, aINetBookmark ) ) )
256*b1cdbd2cSJim Jagielski {
257*b1cdbd2cSJim Jagielski pDrViewSh->InsertURLField( aINetBookmark.GetURL(), aINetBookmark.GetDescription(), aEmptyStr, NULL );
258*b1cdbd2cSJim Jagielski }
259*b1cdbd2cSJim Jagielski }
260*b1cdbd2cSJim Jagielski }
261*b1cdbd2cSJim Jagielski
262*b1cdbd2cSJim Jagielski delete pDlg;
263*b1cdbd2cSJim Jagielski }
264*b1cdbd2cSJim Jagielski }
265*b1cdbd2cSJim Jagielski
266*b1cdbd2cSJim Jagielski
267*b1cdbd2cSJim Jagielski /*************************************************************************
268*b1cdbd2cSJim Jagielski |*
269*b1cdbd2cSJim Jagielski |* FuInsertOLE::Konstruktor
270*b1cdbd2cSJim Jagielski |*
271*b1cdbd2cSJim Jagielski \************************************************************************/
272*b1cdbd2cSJim Jagielski
FuInsertOLE(ViewShell * pViewSh,::sd::Window * pWin,::sd::View * pView,SdDrawDocument * pDoc,SfxRequest & rReq)273*b1cdbd2cSJim Jagielski FuInsertOLE::FuInsertOLE (
274*b1cdbd2cSJim Jagielski ViewShell* pViewSh,
275*b1cdbd2cSJim Jagielski ::sd::Window* pWin,
276*b1cdbd2cSJim Jagielski ::sd::View* pView,
277*b1cdbd2cSJim Jagielski SdDrawDocument* pDoc,
278*b1cdbd2cSJim Jagielski SfxRequest& rReq)
279*b1cdbd2cSJim Jagielski : FuPoor(pViewSh, pWin, pView, pDoc, rReq)
280*b1cdbd2cSJim Jagielski {
281*b1cdbd2cSJim Jagielski }
282*b1cdbd2cSJim Jagielski
Create(ViewShell * pViewSh,::sd::Window * pWin,::sd::View * pView,SdDrawDocument * pDoc,SfxRequest & rReq)283*b1cdbd2cSJim Jagielski FunctionReference FuInsertOLE::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq )
284*b1cdbd2cSJim Jagielski {
285*b1cdbd2cSJim Jagielski FunctionReference xFunc( new FuInsertOLE( pViewSh, pWin, pView, pDoc, rReq ) );
286*b1cdbd2cSJim Jagielski xFunc->DoExecute(rReq);
287*b1cdbd2cSJim Jagielski return xFunc;
288*b1cdbd2cSJim Jagielski }
289*b1cdbd2cSJim Jagielski
DoExecute(SfxRequest & rReq)290*b1cdbd2cSJim Jagielski void FuInsertOLE::DoExecute( SfxRequest& rReq )
291*b1cdbd2cSJim Jagielski {
292*b1cdbd2cSJim Jagielski if ( nSlotId == SID_ATTR_TABLE ||
293*b1cdbd2cSJim Jagielski nSlotId == SID_INSERT_DIAGRAM ||
294*b1cdbd2cSJim Jagielski nSlotId == SID_INSERT_MATH )
295*b1cdbd2cSJim Jagielski {
296*b1cdbd2cSJim Jagielski PresObjKind ePresObjKind = (nSlotId == SID_INSERT_DIAGRAM) ? PRESOBJ_CHART : PRESOBJ_OBJECT;
297*b1cdbd2cSJim Jagielski
298*b1cdbd2cSJim Jagielski SdrObject* pPickObj = mpView->GetEmptyPresentationObject( ePresObjKind );
299*b1cdbd2cSJim Jagielski
300*b1cdbd2cSJim Jagielski /**********************************************************************
301*b1cdbd2cSJim Jagielski * Diagramm oder StarCalc-Tabelle einfuegen
302*b1cdbd2cSJim Jagielski **********************************************************************/
303*b1cdbd2cSJim Jagielski
304*b1cdbd2cSJim Jagielski ::rtl::OUString aObjName;
305*b1cdbd2cSJim Jagielski SvGlobalName aName;
306*b1cdbd2cSJim Jagielski if (nSlotId == SID_INSERT_DIAGRAM)
307*b1cdbd2cSJim Jagielski aName = SvGlobalName( SO3_SCH_CLASSID);
308*b1cdbd2cSJim Jagielski else if (nSlotId == SID_ATTR_TABLE)
309*b1cdbd2cSJim Jagielski aName = SvGlobalName(SO3_SC_CLASSID);
310*b1cdbd2cSJim Jagielski else if (nSlotId == SID_INSERT_MATH)
311*b1cdbd2cSJim Jagielski aName = SvGlobalName(SO3_SM_CLASSID);
312*b1cdbd2cSJim Jagielski
313*b1cdbd2cSJim Jagielski uno::Reference < embed::XEmbeddedObject > xObj = mpViewShell->GetViewFrame()->GetObjectShell()->
314*b1cdbd2cSJim Jagielski GetEmbeddedObjectContainer().CreateEmbeddedObject( aName.GetByteSequence(), aObjName );
315*b1cdbd2cSJim Jagielski if ( xObj.is() )
316*b1cdbd2cSJim Jagielski {
317*b1cdbd2cSJim Jagielski sal_Int64 nAspect = embed::Aspects::MSOLE_CONTENT;
318*b1cdbd2cSJim Jagielski
319*b1cdbd2cSJim Jagielski MapUnit aUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( xObj->getMapUnit( nAspect ) );
320*b1cdbd2cSJim Jagielski
321*b1cdbd2cSJim Jagielski Rectangle aRect;
322*b1cdbd2cSJim Jagielski if( pPickObj )
323*b1cdbd2cSJim Jagielski {
324*b1cdbd2cSJim Jagielski aRect = pPickObj->GetLogicRect();
325*b1cdbd2cSJim Jagielski
326*b1cdbd2cSJim Jagielski awt::Size aSz;
327*b1cdbd2cSJim Jagielski aSz.Width = aRect.GetWidth();
328*b1cdbd2cSJim Jagielski aSz.Height = aRect.GetHeight();
329*b1cdbd2cSJim Jagielski xObj->setVisualAreaSize( nAspect, aSz );
330*b1cdbd2cSJim Jagielski }
331*b1cdbd2cSJim Jagielski else
332*b1cdbd2cSJim Jagielski {
333*b1cdbd2cSJim Jagielski awt::Size aSz;
334*b1cdbd2cSJim Jagielski try
335*b1cdbd2cSJim Jagielski {
336*b1cdbd2cSJim Jagielski aSz = xObj->getVisualAreaSize( nAspect );
337*b1cdbd2cSJim Jagielski }
338*b1cdbd2cSJim Jagielski catch ( embed::NoVisualAreaSizeException& )
339*b1cdbd2cSJim Jagielski {
340*b1cdbd2cSJim Jagielski // the default size will be set later
341*b1cdbd2cSJim Jagielski }
342*b1cdbd2cSJim Jagielski
343*b1cdbd2cSJim Jagielski Size aSize( aSz.Width, aSz.Height );
344*b1cdbd2cSJim Jagielski
345*b1cdbd2cSJim Jagielski if (aSize.Height() == 0 || aSize.Width() == 0)
346*b1cdbd2cSJim Jagielski {
347*b1cdbd2cSJim Jagielski // Rechteck mit ausgewogenem Kantenverhaeltnis
348*b1cdbd2cSJim Jagielski aSize.Width() = 14100;
349*b1cdbd2cSJim Jagielski aSize.Height() = 10000;
350*b1cdbd2cSJim Jagielski Size aTmp = OutputDevice::LogicToLogic( aSize, MAP_100TH_MM, aUnit );
351*b1cdbd2cSJim Jagielski aSz.Width = aTmp.Width();
352*b1cdbd2cSJim Jagielski aSz.Height = aTmp.Height();
353*b1cdbd2cSJim Jagielski xObj->setVisualAreaSize( nAspect, aSz );
354*b1cdbd2cSJim Jagielski }
355*b1cdbd2cSJim Jagielski else
356*b1cdbd2cSJim Jagielski {
357*b1cdbd2cSJim Jagielski aSize = OutputDevice::LogicToLogic(aSize, aUnit, MAP_100TH_MM);
358*b1cdbd2cSJim Jagielski }
359*b1cdbd2cSJim Jagielski
360*b1cdbd2cSJim Jagielski Point aPos;
361*b1cdbd2cSJim Jagielski Rectangle aWinRect(aPos, mpWindow->GetOutputSizePixel() );
362*b1cdbd2cSJim Jagielski aPos = aWinRect.Center();
363*b1cdbd2cSJim Jagielski aPos = mpWindow->PixelToLogic(aPos);
364*b1cdbd2cSJim Jagielski aPos.X() -= aSize.Width() / 2;
365*b1cdbd2cSJim Jagielski aPos.Y() -= aSize.Height() / 2;
366*b1cdbd2cSJim Jagielski aRect = Rectangle(aPos, aSize);
367*b1cdbd2cSJim Jagielski }
368*b1cdbd2cSJim Jagielski
369*b1cdbd2cSJim Jagielski SdrOle2Obj* pOleObj = new SdrOle2Obj( svt::EmbeddedObjectRef( xObj, nAspect ), aObjName, aRect );
370*b1cdbd2cSJim Jagielski SdrPageView* pPV = mpView->GetSdrPageView();
371*b1cdbd2cSJim Jagielski
372*b1cdbd2cSJim Jagielski // if we have a pick obj we need to make this new ole a pres obj replacing the current pick obj
373*b1cdbd2cSJim Jagielski if( pPickObj )
374*b1cdbd2cSJim Jagielski {
375*b1cdbd2cSJim Jagielski SdPage* pPage = static_cast< SdPage* >(pPickObj->GetPage());
376*b1cdbd2cSJim Jagielski if(pPage && pPage->IsPresObj(pPickObj))
377*b1cdbd2cSJim Jagielski {
378*b1cdbd2cSJim Jagielski pPage->InsertPresObj( pOleObj, ePresObjKind );
379*b1cdbd2cSJim Jagielski pOleObj->SetUserCall(pPickObj->GetUserCall());
380*b1cdbd2cSJim Jagielski }
381*b1cdbd2cSJim Jagielski
382*b1cdbd2cSJim Jagielski // #123468# we need to end text edit before replacing the object. There cannot yet
383*b1cdbd2cSJim Jagielski // being text typed (else it would not be an EmptyPresObj anymore), but it may be
384*b1cdbd2cSJim Jagielski // in text edit mode
385*b1cdbd2cSJim Jagielski if(mpView->IsTextEdit())
386*b1cdbd2cSJim Jagielski {
387*b1cdbd2cSJim Jagielski mpView->SdrEndTextEdit();
388*b1cdbd2cSJim Jagielski }
389*b1cdbd2cSJim Jagielski }
390*b1cdbd2cSJim Jagielski
391*b1cdbd2cSJim Jagielski bool bRet = true;
392*b1cdbd2cSJim Jagielski if( pPickObj )
393*b1cdbd2cSJim Jagielski mpView->ReplaceObjectAtView(pPickObj, *pPV, pOleObj, sal_True );
394*b1cdbd2cSJim Jagielski else
395*b1cdbd2cSJim Jagielski bRet = mpView->InsertObjectAtView(pOleObj, *pPV, SDRINSERT_SETDEFLAYER);
396*b1cdbd2cSJim Jagielski
397*b1cdbd2cSJim Jagielski if( bRet )
398*b1cdbd2cSJim Jagielski {
399*b1cdbd2cSJim Jagielski if (nSlotId == SID_INSERT_DIAGRAM)
400*b1cdbd2cSJim Jagielski {
401*b1cdbd2cSJim Jagielski pOleObj->SetProgName( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "StarChart" ) ) );
402*b1cdbd2cSJim Jagielski }
403*b1cdbd2cSJim Jagielski else if (nSlotId == SID_ATTR_TABLE)
404*b1cdbd2cSJim Jagielski {
405*b1cdbd2cSJim Jagielski pOleObj->SetProgName( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "StarCalc" ) ) );
406*b1cdbd2cSJim Jagielski }
407*b1cdbd2cSJim Jagielski else if (nSlotId == SID_INSERT_MATH)
408*b1cdbd2cSJim Jagielski {
409*b1cdbd2cSJim Jagielski pOleObj->SetProgName( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "StarMath" ) ) );
410*b1cdbd2cSJim Jagielski }
411*b1cdbd2cSJim Jagielski
412*b1cdbd2cSJim Jagielski //HMHmpView->HideMarkHdl();
413*b1cdbd2cSJim Jagielski pOleObj->SetLogicRect(aRect);
414*b1cdbd2cSJim Jagielski Size aTmp( OutputDevice::LogicToLogic( aRect.GetSize(), MAP_100TH_MM, aUnit ) );
415*b1cdbd2cSJim Jagielski awt::Size aVisualSize;
416*b1cdbd2cSJim Jagielski aVisualSize.Width = aTmp.Width();
417*b1cdbd2cSJim Jagielski aVisualSize.Height = aTmp.Height();
418*b1cdbd2cSJim Jagielski xObj->setVisualAreaSize( nAspect, aVisualSize );
419*b1cdbd2cSJim Jagielski mpViewShell->ActivateObject(pOleObj, SVVERB_SHOW);
420*b1cdbd2cSJim Jagielski
421*b1cdbd2cSJim Jagielski if (nSlotId == SID_INSERT_DIAGRAM)
422*b1cdbd2cSJim Jagielski {
423*b1cdbd2cSJim Jagielski // note, that this call modified the chart model which
424*b1cdbd2cSJim Jagielski // results in a change notification. So call this after
425*b1cdbd2cSJim Jagielski // everything else is finished.
426*b1cdbd2cSJim Jagielski ChartHelper::AdaptDefaultsForChart( xObj );
427*b1cdbd2cSJim Jagielski }
428*b1cdbd2cSJim Jagielski }
429*b1cdbd2cSJim Jagielski }
430*b1cdbd2cSJim Jagielski else
431*b1cdbd2cSJim Jagielski {
432*b1cdbd2cSJim Jagielski ErrorHandler::HandleError(* new StringErrorInfo(ERRCODE_SFX_OLEGENERAL,
433*b1cdbd2cSJim Jagielski aEmptyStr ) );
434*b1cdbd2cSJim Jagielski }
435*b1cdbd2cSJim Jagielski }
436*b1cdbd2cSJim Jagielski else
437*b1cdbd2cSJim Jagielski {
438*b1cdbd2cSJim Jagielski /**********************************************************************
439*b1cdbd2cSJim Jagielski * Objekt einfuegen
440*b1cdbd2cSJim Jagielski **********************************************************************/
441*b1cdbd2cSJim Jagielski sal_Int64 nAspect = embed::Aspects::MSOLE_CONTENT;
442*b1cdbd2cSJim Jagielski sal_Bool bCreateNew = sal_False;
443*b1cdbd2cSJim Jagielski uno::Reference < embed::XEmbeddedObject > xObj;
444*b1cdbd2cSJim Jagielski uno::Reference < embed::XStorage > xStorage = comphelper::OStorageHelper::GetTemporaryStorage();
445*b1cdbd2cSJim Jagielski SvObjectServerList aServerLst;
446*b1cdbd2cSJim Jagielski ::rtl::OUString aName;
447*b1cdbd2cSJim Jagielski
448*b1cdbd2cSJim Jagielski ::rtl::OUString aIconMediaType;
449*b1cdbd2cSJim Jagielski uno::Reference< io::XInputStream > xIconMetaFile;
450*b1cdbd2cSJim Jagielski
451*b1cdbd2cSJim Jagielski SFX_REQUEST_ARG( rReq, pNameItem, SfxGlobalNameItem, SID_INSERT_OBJECT, sal_False );
452*b1cdbd2cSJim Jagielski if ( nSlotId == SID_INSERT_OBJECT && pNameItem )
453*b1cdbd2cSJim Jagielski {
454*b1cdbd2cSJim Jagielski SvGlobalName aClassName = pNameItem->GetValue();
455*b1cdbd2cSJim Jagielski xObj = mpViewShell->GetViewFrame()->GetObjectShell()->
456*b1cdbd2cSJim Jagielski GetEmbeddedObjectContainer().CreateEmbeddedObject( aClassName.GetByteSequence(), aName );
457*b1cdbd2cSJim Jagielski }
458*b1cdbd2cSJim Jagielski else
459*b1cdbd2cSJim Jagielski {
460*b1cdbd2cSJim Jagielski switch ( nSlotId )
461*b1cdbd2cSJim Jagielski {
462*b1cdbd2cSJim Jagielski case SID_INSERT_OBJECT :
463*b1cdbd2cSJim Jagielski {
464*b1cdbd2cSJim Jagielski aServerLst.FillInsertObjects();
465*b1cdbd2cSJim Jagielski if (mpDoc->GetDocumentType() == DOCUMENT_TYPE_DRAW)
466*b1cdbd2cSJim Jagielski {
467*b1cdbd2cSJim Jagielski aServerLst.Remove( GraphicDocShell::Factory().GetClassId() );
468*b1cdbd2cSJim Jagielski }
469*b1cdbd2cSJim Jagielski else
470*b1cdbd2cSJim Jagielski {
471*b1cdbd2cSJim Jagielski aServerLst.Remove( DrawDocShell::Factory().GetClassId() );
472*b1cdbd2cSJim Jagielski }
473*b1cdbd2cSJim Jagielski
474*b1cdbd2cSJim Jagielski // intentionally no break!
475*b1cdbd2cSJim Jagielski }
476*b1cdbd2cSJim Jagielski case SID_INSERT_PLUGIN :
477*b1cdbd2cSJim Jagielski case SID_INSERT_FLOATINGFRAME :
478*b1cdbd2cSJim Jagielski {
479*b1cdbd2cSJim Jagielski SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
480*b1cdbd2cSJim Jagielski SfxAbstractInsertObjectDialog* pDlg =
481*b1cdbd2cSJim Jagielski pFact->CreateInsertObjectDialog( mpViewShell->GetActiveWindow(), SD_MOD()->GetSlotPool()->GetSlot(nSlotId)->GetCommandString(),
482*b1cdbd2cSJim Jagielski xStorage, &aServerLst );
483*b1cdbd2cSJim Jagielski if ( pDlg )
484*b1cdbd2cSJim Jagielski {
485*b1cdbd2cSJim Jagielski pDlg->Execute();
486*b1cdbd2cSJim Jagielski bCreateNew = pDlg->IsCreateNew();
487*b1cdbd2cSJim Jagielski xObj = pDlg->GetObject();
488*b1cdbd2cSJim Jagielski
489*b1cdbd2cSJim Jagielski xIconMetaFile = pDlg->GetIconIfIconified( &aIconMediaType );
490*b1cdbd2cSJim Jagielski if ( xIconMetaFile.is() )
491*b1cdbd2cSJim Jagielski nAspect = embed::Aspects::MSOLE_ICON;
492*b1cdbd2cSJim Jagielski
493*b1cdbd2cSJim Jagielski if ( xObj.is() )
494*b1cdbd2cSJim Jagielski mpViewShell->GetObjectShell()->GetEmbeddedObjectContainer().InsertEmbeddedObject( xObj, aName );
495*b1cdbd2cSJim Jagielski DELETEZ( pDlg );
496*b1cdbd2cSJim Jagielski }
497*b1cdbd2cSJim Jagielski
498*b1cdbd2cSJim Jagielski break;
499*b1cdbd2cSJim Jagielski }
500*b1cdbd2cSJim Jagielski case SID_INSERT_SOUND :
501*b1cdbd2cSJim Jagielski case SID_INSERT_VIDEO :
502*b1cdbd2cSJim Jagielski {
503*b1cdbd2cSJim Jagielski // create special filedialog for plugins
504*b1cdbd2cSJim Jagielski SvxPluginFileDlg aPluginFileDialog (mpWindow, nSlotId);
505*b1cdbd2cSJim Jagielski if( ERRCODE_NONE == aPluginFileDialog.Execute () )
506*b1cdbd2cSJim Jagielski {
507*b1cdbd2cSJim Jagielski // get URL
508*b1cdbd2cSJim Jagielski String aStrURL(aPluginFileDialog.GetPath());
509*b1cdbd2cSJim Jagielski INetURLObject aURL( aStrURL, INET_PROT_FILE );
510*b1cdbd2cSJim Jagielski if( aURL.GetProtocol() != INET_PROT_NOT_VALID )
511*b1cdbd2cSJim Jagielski {
512*b1cdbd2cSJim Jagielski // create a plugin object
513*b1cdbd2cSJim Jagielski xObj = mpViewShell->GetObjectShell()->GetEmbeddedObjectContainer().CreateEmbeddedObject( SvGlobalName( SO3_PLUGIN_CLASSID ).GetByteSequence(), aName );
514*b1cdbd2cSJim Jagielski }
515*b1cdbd2cSJim Jagielski
516*b1cdbd2cSJim Jagielski if ( xObj.is() && svt::EmbeddedObjectRef::TryRunningState( xObj ) )
517*b1cdbd2cSJim Jagielski {
518*b1cdbd2cSJim Jagielski // set properties from dialog
519*b1cdbd2cSJim Jagielski uno::Reference < embed::XComponentSupplier > xSup( xObj, uno::UNO_QUERY );
520*b1cdbd2cSJim Jagielski if ( xSup.is() )
521*b1cdbd2cSJim Jagielski {
522*b1cdbd2cSJim Jagielski uno::Reference < beans::XPropertySet > xSet( xSup->getComponent(), uno::UNO_QUERY );
523*b1cdbd2cSJim Jagielski if ( xSet.is() )
524*b1cdbd2cSJim Jagielski {
525*b1cdbd2cSJim Jagielski xSet->setPropertyValue( ::rtl::OUString::createFromAscii("PluginURL"),
526*b1cdbd2cSJim Jagielski uno::makeAny( ::rtl::OUString( aURL.GetMainURL( INetURLObject::NO_DECODE ) ) ) );
527*b1cdbd2cSJim Jagielski }
528*b1cdbd2cSJim Jagielski }
529*b1cdbd2cSJim Jagielski }
530*b1cdbd2cSJim Jagielski else
531*b1cdbd2cSJim Jagielski {
532*b1cdbd2cSJim Jagielski // PlugIn konnte nicht erzeugt werden
533*b1cdbd2cSJim Jagielski String aStrErr( SdResId( STR_ERROR_OBJNOCREATE_PLUGIN ) );
534*b1cdbd2cSJim Jagielski String aMask;
535*b1cdbd2cSJim Jagielski aMask += sal_Unicode('%');
536*b1cdbd2cSJim Jagielski aStrErr.SearchAndReplace( aMask, aStrURL );
537*b1cdbd2cSJim Jagielski ErrorBox( mpWindow, WB_3DLOOK | WB_OK, aStrErr ).Execute();
538*b1cdbd2cSJim Jagielski }
539*b1cdbd2cSJim Jagielski }
540*b1cdbd2cSJim Jagielski }
541*b1cdbd2cSJim Jagielski }
542*b1cdbd2cSJim Jagielski }
543*b1cdbd2cSJim Jagielski
544*b1cdbd2cSJim Jagielski try
545*b1cdbd2cSJim Jagielski {
546*b1cdbd2cSJim Jagielski if (xObj.is())
547*b1cdbd2cSJim Jagielski {
548*b1cdbd2cSJim Jagielski //TODO/LATER: needs status for RESIZEONPRINTERCHANGE
549*b1cdbd2cSJim Jagielski //if( SVOBJ_MISCSTATUS_RESIZEONPRINTERCHANGE & xObj->getStatus( nAspect ) )
550*b1cdbd2cSJim Jagielski // aIPObj->OnDocumentPrinterChanged( mpDocSh->GetPrinter(sal_False) );
551*b1cdbd2cSJim Jagielski
552*b1cdbd2cSJim Jagielski sal_Bool bInsertNewObject = sal_True;
553*b1cdbd2cSJim Jagielski
554*b1cdbd2cSJim Jagielski Size aSize;
555*b1cdbd2cSJim Jagielski MapUnit aMapUnit = MAP_100TH_MM;
556*b1cdbd2cSJim Jagielski if ( nAspect != embed::Aspects::MSOLE_ICON )
557*b1cdbd2cSJim Jagielski {
558*b1cdbd2cSJim Jagielski awt::Size aSz;
559*b1cdbd2cSJim Jagielski try
560*b1cdbd2cSJim Jagielski {
561*b1cdbd2cSJim Jagielski aSz = xObj->getVisualAreaSize( nAspect );
562*b1cdbd2cSJim Jagielski }
563*b1cdbd2cSJim Jagielski catch( embed::NoVisualAreaSizeException& )
564*b1cdbd2cSJim Jagielski {
565*b1cdbd2cSJim Jagielski // the default size will be set later
566*b1cdbd2cSJim Jagielski }
567*b1cdbd2cSJim Jagielski
568*b1cdbd2cSJim Jagielski aSize =Size( aSz.Width, aSz.Height );
569*b1cdbd2cSJim Jagielski
570*b1cdbd2cSJim Jagielski aMapUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( xObj->getMapUnit( nAspect ) );
571*b1cdbd2cSJim Jagielski if (aSize.Height() == 0 || aSize.Width() == 0)
572*b1cdbd2cSJim Jagielski {
573*b1cdbd2cSJim Jagielski // Rechteck mit ausgewogenem Kantenverhaeltnis
574*b1cdbd2cSJim Jagielski aSize.Width() = 14100;
575*b1cdbd2cSJim Jagielski aSize.Height() = 10000;
576*b1cdbd2cSJim Jagielski Size aTmp = OutputDevice::LogicToLogic( aSize, MAP_100TH_MM, aMapUnit );
577*b1cdbd2cSJim Jagielski aSz.Width = aTmp.Width();
578*b1cdbd2cSJim Jagielski aSz.Height = aTmp.Height();
579*b1cdbd2cSJim Jagielski xObj->setVisualAreaSize( nAspect, aSz );
580*b1cdbd2cSJim Jagielski }
581*b1cdbd2cSJim Jagielski else
582*b1cdbd2cSJim Jagielski {
583*b1cdbd2cSJim Jagielski aSize = OutputDevice::LogicToLogic(aSize, aMapUnit, MAP_100TH_MM);
584*b1cdbd2cSJim Jagielski }
585*b1cdbd2cSJim Jagielski }
586*b1cdbd2cSJim Jagielski
587*b1cdbd2cSJim Jagielski if ( mpView->AreObjectsMarked() )
588*b1cdbd2cSJim Jagielski {
589*b1cdbd2cSJim Jagielski /**********************************************************
590*b1cdbd2cSJim Jagielski * Ist ein leeres OLE-Objekt vorhanden?
591*b1cdbd2cSJim Jagielski **********************************************************/
592*b1cdbd2cSJim Jagielski const SdrMarkList& rMarkList = mpView->GetMarkedObjectList();
593*b1cdbd2cSJim Jagielski
594*b1cdbd2cSJim Jagielski if (rMarkList.GetMarkCount() == 1)
595*b1cdbd2cSJim Jagielski {
596*b1cdbd2cSJim Jagielski SdrMark* pMark = rMarkList.GetMark(0);
597*b1cdbd2cSJim Jagielski SdrObject* pObj = pMark->GetMarkedSdrObj();
598*b1cdbd2cSJim Jagielski
599*b1cdbd2cSJim Jagielski if (pObj->GetObjInventor() == SdrInventor &&
600*b1cdbd2cSJim Jagielski pObj->GetObjIdentifier() == OBJ_OLE2)
601*b1cdbd2cSJim Jagielski {
602*b1cdbd2cSJim Jagielski if ( !( (SdrOle2Obj*) pObj)->GetObjRef().is() )
603*b1cdbd2cSJim Jagielski {
604*b1cdbd2cSJim Jagielski /**************************************************
605*b1cdbd2cSJim Jagielski * Das leere OLE-Objekt bekommt ein neues IPObj
606*b1cdbd2cSJim Jagielski **************************************************/
607*b1cdbd2cSJim Jagielski bInsertNewObject = sal_False;
608*b1cdbd2cSJim Jagielski pObj->SetEmptyPresObj(sal_False);
609*b1cdbd2cSJim Jagielski ( (SdrOle2Obj*) pObj)->SetOutlinerParaObject(NULL);
610*b1cdbd2cSJim Jagielski ( (SdrOle2Obj*) pObj)->SetObjRef(xObj);
611*b1cdbd2cSJim Jagielski ( (SdrOle2Obj*) pObj)->SetPersistName(aName);
612*b1cdbd2cSJim Jagielski ( (SdrOle2Obj*) pObj)->SetName(aName);
613*b1cdbd2cSJim Jagielski ( (SdrOle2Obj*) pObj)->SetAspect(nAspect);
614*b1cdbd2cSJim Jagielski Rectangle aRect = ( (SdrOle2Obj*) pObj)->GetLogicRect();
615*b1cdbd2cSJim Jagielski
616*b1cdbd2cSJim Jagielski //HMHmpView->HideMarkHdl();
617*b1cdbd2cSJim Jagielski
618*b1cdbd2cSJim Jagielski if ( nAspect == embed::Aspects::MSOLE_ICON )
619*b1cdbd2cSJim Jagielski {
620*b1cdbd2cSJim Jagielski if( xIconMetaFile.is() )
621*b1cdbd2cSJim Jagielski ( (SdrOle2Obj*) pObj)->SetGraphicToObj( xIconMetaFile, aIconMediaType );
622*b1cdbd2cSJim Jagielski }
623*b1cdbd2cSJim Jagielski else
624*b1cdbd2cSJim Jagielski {
625*b1cdbd2cSJim Jagielski Size aTmp = OutputDevice::LogicToLogic( aRect.GetSize(), MAP_100TH_MM, aMapUnit );
626*b1cdbd2cSJim Jagielski awt::Size aSz( aTmp.Width(), aTmp.Height() );
627*b1cdbd2cSJim Jagielski xObj->setVisualAreaSize( nAspect, aSz );
628*b1cdbd2cSJim Jagielski }
629*b1cdbd2cSJim Jagielski }
630*b1cdbd2cSJim Jagielski }
631*b1cdbd2cSJim Jagielski }
632*b1cdbd2cSJim Jagielski }
633*b1cdbd2cSJim Jagielski
634*b1cdbd2cSJim Jagielski if (bInsertNewObject)
635*b1cdbd2cSJim Jagielski {
636*b1cdbd2cSJim Jagielski /**************************************************************
637*b1cdbd2cSJim Jagielski * Ein neues OLE-Objekt wird erzeugt
638*b1cdbd2cSJim Jagielski **************************************************************/
639*b1cdbd2cSJim Jagielski SdrPageView* pPV = mpView->GetSdrPageView();
640*b1cdbd2cSJim Jagielski Size aPageSize = pPV->GetPage()->GetSize();
641*b1cdbd2cSJim Jagielski
642*b1cdbd2cSJim Jagielski // get the size from the iconified object
643*b1cdbd2cSJim Jagielski ::svt::EmbeddedObjectRef aObjRef( xObj, nAspect );
644*b1cdbd2cSJim Jagielski if ( nAspect == embed::Aspects::MSOLE_ICON )
645*b1cdbd2cSJim Jagielski {
646*b1cdbd2cSJim Jagielski aObjRef.SetGraphicStream( xIconMetaFile, aIconMediaType );
647*b1cdbd2cSJim Jagielski MapMode aMapMode( MAP_100TH_MM );
648*b1cdbd2cSJim Jagielski aSize = aObjRef.GetSize( &aMapMode );
649*b1cdbd2cSJim Jagielski }
650*b1cdbd2cSJim Jagielski
651*b1cdbd2cSJim Jagielski Point aPnt ((aPageSize.Width() - aSize.Width()) / 2,
652*b1cdbd2cSJim Jagielski (aPageSize.Height() - aSize.Height()) / 2);
653*b1cdbd2cSJim Jagielski Rectangle aRect (aPnt, aSize);
654*b1cdbd2cSJim Jagielski
655*b1cdbd2cSJim Jagielski SdrOle2Obj* pObj = new SdrOle2Obj( aObjRef, aName, aRect);
656*b1cdbd2cSJim Jagielski
657*b1cdbd2cSJim Jagielski if( mpView->InsertObjectAtView(pObj, *pPV, SDRINSERT_SETDEFLAYER) )
658*b1cdbd2cSJim Jagielski {
659*b1cdbd2cSJim Jagielski // #73279# Math objects change their object size during InsertObject.
660*b1cdbd2cSJim Jagielski // New size must be set in SdrObject, or a wrong scale will be set at
661*b1cdbd2cSJim Jagielski // ActivateObject.
662*b1cdbd2cSJim Jagielski
663*b1cdbd2cSJim Jagielski if ( nAspect != embed::Aspects::MSOLE_ICON )
664*b1cdbd2cSJim Jagielski {
665*b1cdbd2cSJim Jagielski try
666*b1cdbd2cSJim Jagielski {
667*b1cdbd2cSJim Jagielski awt::Size aSz = xObj->getVisualAreaSize( nAspect );
668*b1cdbd2cSJim Jagielski
669*b1cdbd2cSJim Jagielski Size aNewSize = Window::LogicToLogic( Size( aSz.Width, aSz.Height ),
670*b1cdbd2cSJim Jagielski MapMode( aMapUnit ), MapMode( MAP_100TH_MM ) );
671*b1cdbd2cSJim Jagielski if ( aNewSize != aSize )
672*b1cdbd2cSJim Jagielski {
673*b1cdbd2cSJim Jagielski aRect.SetSize( aNewSize );
674*b1cdbd2cSJim Jagielski pObj->SetLogicRect( aRect );
675*b1cdbd2cSJim Jagielski }
676*b1cdbd2cSJim Jagielski }
677*b1cdbd2cSJim Jagielski catch( embed::NoVisualAreaSizeException& )
678*b1cdbd2cSJim Jagielski {}
679*b1cdbd2cSJim Jagielski }
680*b1cdbd2cSJim Jagielski
681*b1cdbd2cSJim Jagielski if (bCreateNew)
682*b1cdbd2cSJim Jagielski {
683*b1cdbd2cSJim Jagielski //HMHmpView->HideMarkHdl();
684*b1cdbd2cSJim Jagielski pObj->SetLogicRect(aRect);
685*b1cdbd2cSJim Jagielski
686*b1cdbd2cSJim Jagielski if ( nAspect != embed::Aspects::MSOLE_ICON )
687*b1cdbd2cSJim Jagielski {
688*b1cdbd2cSJim Jagielski Size aTmp = OutputDevice::LogicToLogic( aRect.GetSize(), MAP_100TH_MM, aMapUnit );
689*b1cdbd2cSJim Jagielski awt::Size aSz( aTmp.Width(), aTmp.Height() );
690*b1cdbd2cSJim Jagielski xObj->setVisualAreaSize( nAspect, aSz );
691*b1cdbd2cSJim Jagielski }
692*b1cdbd2cSJim Jagielski
693*b1cdbd2cSJim Jagielski mpViewShell->ActivateObject(pObj, SVVERB_SHOW);
694*b1cdbd2cSJim Jagielski }
695*b1cdbd2cSJim Jagielski
696*b1cdbd2cSJim Jagielski Size aVisSizePixel = mpWindow->GetOutputSizePixel();
697*b1cdbd2cSJim Jagielski Rectangle aVisAreaWin = mpWindow->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) );
698*b1cdbd2cSJim Jagielski mpViewShell->VisAreaChanged(aVisAreaWin);
699*b1cdbd2cSJim Jagielski mpDocSh->SetVisArea(aVisAreaWin);
700*b1cdbd2cSJim Jagielski }
701*b1cdbd2cSJim Jagielski }
702*b1cdbd2cSJim Jagielski }
703*b1cdbd2cSJim Jagielski }
704*b1cdbd2cSJim Jagielski catch (uno::Exception&)
705*b1cdbd2cSJim Jagielski {
706*b1cdbd2cSJim Jagielski // For some reason the object can not be inserted. For example
707*b1cdbd2cSJim Jagielski // because it is password protected and is not properly unlocked.
708*b1cdbd2cSJim Jagielski }
709*b1cdbd2cSJim Jagielski }
710*b1cdbd2cSJim Jagielski }
711*b1cdbd2cSJim Jagielski
712*b1cdbd2cSJim Jagielski
713*b1cdbd2cSJim Jagielski /*************************************************************************
714*b1cdbd2cSJim Jagielski |*
715*b1cdbd2cSJim Jagielski |* FuInsertAVMedia::Konstruktor
716*b1cdbd2cSJim Jagielski |*
717*b1cdbd2cSJim Jagielski \************************************************************************/
718*b1cdbd2cSJim Jagielski
FuInsertAVMedia(ViewShell * pViewSh,::sd::Window * pWin,::sd::View * pView,SdDrawDocument * pDoc,SfxRequest & rReq)719*b1cdbd2cSJim Jagielski FuInsertAVMedia::FuInsertAVMedia(
720*b1cdbd2cSJim Jagielski ViewShell* pViewSh,
721*b1cdbd2cSJim Jagielski ::sd::Window* pWin,
722*b1cdbd2cSJim Jagielski ::sd::View* pView,
723*b1cdbd2cSJim Jagielski SdDrawDocument* pDoc,
724*b1cdbd2cSJim Jagielski SfxRequest& rReq)
725*b1cdbd2cSJim Jagielski : FuPoor(pViewSh, pWin, pView, pDoc, rReq)
726*b1cdbd2cSJim Jagielski {
727*b1cdbd2cSJim Jagielski }
728*b1cdbd2cSJim Jagielski
Create(ViewShell * pViewSh,::sd::Window * pWin,::sd::View * pView,SdDrawDocument * pDoc,SfxRequest & rReq)729*b1cdbd2cSJim Jagielski FunctionReference FuInsertAVMedia::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq )
730*b1cdbd2cSJim Jagielski {
731*b1cdbd2cSJim Jagielski FunctionReference xFunc( new FuInsertAVMedia( pViewSh, pWin, pView, pDoc, rReq ) );
732*b1cdbd2cSJim Jagielski xFunc->DoExecute(rReq);
733*b1cdbd2cSJim Jagielski return xFunc;
734*b1cdbd2cSJim Jagielski }
735*b1cdbd2cSJim Jagielski
DoExecute(SfxRequest & rReq)736*b1cdbd2cSJim Jagielski void FuInsertAVMedia::DoExecute( SfxRequest& rReq )
737*b1cdbd2cSJim Jagielski {
738*b1cdbd2cSJim Jagielski ::rtl::OUString aURL;
739*b1cdbd2cSJim Jagielski const SfxItemSet* pReqArgs = rReq.GetArgs();
740*b1cdbd2cSJim Jagielski bool bAPI = false;
741*b1cdbd2cSJim Jagielski
742*b1cdbd2cSJim Jagielski if( pReqArgs )
743*b1cdbd2cSJim Jagielski {
744*b1cdbd2cSJim Jagielski const SfxStringItem* pStringItem = PTR_CAST( SfxStringItem, &pReqArgs->Get( rReq.GetSlot() ) );
745*b1cdbd2cSJim Jagielski
746*b1cdbd2cSJim Jagielski if( pStringItem )
747*b1cdbd2cSJim Jagielski {
748*b1cdbd2cSJim Jagielski aURL = pStringItem->GetValue();
749*b1cdbd2cSJim Jagielski bAPI = aURL.getLength();
750*b1cdbd2cSJim Jagielski }
751*b1cdbd2cSJim Jagielski }
752*b1cdbd2cSJim Jagielski
753*b1cdbd2cSJim Jagielski if( bAPI || ::avmedia::MediaWindow::executeMediaURLDialog( mpWindow, aURL ) )
754*b1cdbd2cSJim Jagielski {
755*b1cdbd2cSJim Jagielski Size aPrefSize;
756*b1cdbd2cSJim Jagielski
757*b1cdbd2cSJim Jagielski if( mpWindow )
758*b1cdbd2cSJim Jagielski mpWindow->EnterWait();
759*b1cdbd2cSJim Jagielski
760*b1cdbd2cSJim Jagielski if( !::avmedia::MediaWindow::isMediaURL( aURL, true, &aPrefSize ) )
761*b1cdbd2cSJim Jagielski {
762*b1cdbd2cSJim Jagielski if( mpWindow )
763*b1cdbd2cSJim Jagielski mpWindow->LeaveWait();
764*b1cdbd2cSJim Jagielski
765*b1cdbd2cSJim Jagielski if( !bAPI )
766*b1cdbd2cSJim Jagielski ::avmedia::MediaWindow::executeFormatErrorBox( mpWindow );
767*b1cdbd2cSJim Jagielski }
768*b1cdbd2cSJim Jagielski else
769*b1cdbd2cSJim Jagielski {
770*b1cdbd2cSJim Jagielski Point aPos;
771*b1cdbd2cSJim Jagielski Size aSize;
772*b1cdbd2cSJim Jagielski sal_Int8 nAction = DND_ACTION_COPY;
773*b1cdbd2cSJim Jagielski
774*b1cdbd2cSJim Jagielski if( aPrefSize.Width() && aPrefSize.Height() )
775*b1cdbd2cSJim Jagielski {
776*b1cdbd2cSJim Jagielski if( mpWindow )
777*b1cdbd2cSJim Jagielski aSize = mpWindow->PixelToLogic( aPrefSize, MAP_100TH_MM );
778*b1cdbd2cSJim Jagielski else
779*b1cdbd2cSJim Jagielski aSize = Application::GetDefaultDevice()->PixelToLogic( aPrefSize, MAP_100TH_MM );
780*b1cdbd2cSJim Jagielski }
781*b1cdbd2cSJim Jagielski else
782*b1cdbd2cSJim Jagielski aSize = Size( 5000, 5000 );
783*b1cdbd2cSJim Jagielski
784*b1cdbd2cSJim Jagielski if( mpWindow )
785*b1cdbd2cSJim Jagielski {
786*b1cdbd2cSJim Jagielski aPos = mpWindow->PixelToLogic( Rectangle( aPos, mpWindow->GetOutputSizePixel() ).Center() );
787*b1cdbd2cSJim Jagielski aPos.X() -= aSize.Width() >> 1;
788*b1cdbd2cSJim Jagielski aPos.Y() -= aSize.Height() >> 1;
789*b1cdbd2cSJim Jagielski }
790*b1cdbd2cSJim Jagielski
791*b1cdbd2cSJim Jagielski mpView->InsertMediaURL( aURL, nAction, aPos, aSize ) ;
792*b1cdbd2cSJim Jagielski
793*b1cdbd2cSJim Jagielski if( mpWindow )
794*b1cdbd2cSJim Jagielski mpWindow->LeaveWait();
795*b1cdbd2cSJim Jagielski }
796*b1cdbd2cSJim Jagielski }
797*b1cdbd2cSJim Jagielski }
798*b1cdbd2cSJim Jagielski
799*b1cdbd2cSJim Jagielski } // end of namespace sd
800