xref: /aoo41x/main/sc/source/ui/drawfunc/fuins1.cxx (revision 52f1c2ee)
1b3f79822SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3b3f79822SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4b3f79822SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5b3f79822SAndrew Rist  * distributed with this work for additional information
6b3f79822SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7b3f79822SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8b3f79822SAndrew Rist  * "License"); you may not use this file except in compliance
9b3f79822SAndrew Rist  * with the License.  You may obtain a copy of the License at
10b3f79822SAndrew Rist  *
11b3f79822SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12b3f79822SAndrew Rist  *
13b3f79822SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14b3f79822SAndrew Rist  * software distributed under the License is distributed on an
15b3f79822SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16b3f79822SAndrew Rist  * KIND, either express or implied.  See the License for the
17b3f79822SAndrew Rist  * specific language governing permissions and limitations
18b3f79822SAndrew Rist  * under the License.
19b3f79822SAndrew Rist  *
20b3f79822SAndrew Rist  *************************************************************/
21b3f79822SAndrew Rist 
22b3f79822SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sc.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <sfx2/opengrf.hxx>
28cdf0e10cSrcweir #include <svx/svdograf.hxx>
29cdf0e10cSrcweir #include <svx/svdomedia.hxx>
30cdf0e10cSrcweir #include <svx/svdpage.hxx>
31cdf0e10cSrcweir #include <svx/svdpagv.hxx>
32cdf0e10cSrcweir #include <svx/svdview.hxx>
33cdf0e10cSrcweir #include <svtools/filter.hxx>
34cdf0e10cSrcweir #include <svl/stritem.hxx>
35cdf0e10cSrcweir #include <vcl/msgbox.hxx>
36cdf0e10cSrcweir #include <tools/urlobj.hxx>
37cdf0e10cSrcweir #include <avmedia/mediawindow.hxx>
38cdf0e10cSrcweir #include <vcl/svapp.hxx>
39cdf0e10cSrcweir 
40cdf0e10cSrcweir #include "fuinsert.hxx"
41cdf0e10cSrcweir #include "tabvwsh.hxx"
42cdf0e10cSrcweir #include "drwlayer.hxx"
43cdf0e10cSrcweir #include "drawview.hxx"
44cdf0e10cSrcweir #include "document.hxx"
45cdf0e10cSrcweir #include "scresid.hxx"
46cdf0e10cSrcweir #include "progress.hxx"
47cdf0e10cSrcweir #include "sc.hrc"
48*52f1c2eeSArmin Le Grand #include "globstr.hrc"
49cdf0e10cSrcweir 
50cdf0e10cSrcweir 
51cdf0e10cSrcweir 
52cdf0e10cSrcweir ////========================================================================
53cdf0e10cSrcweir ////	class ImportProgress
54cdf0e10cSrcweir ////
55cdf0e10cSrcweir ////  Bemerkung:
56cdf0e10cSrcweir ////	Diese Klasse stellt lediglich den Handler fuer den ImportProgress des
57cdf0e10cSrcweir ////	Grafikfilters bereit.
58cdf0e10cSrcweir ////========================================================================
59cdf0e10cSrcweir //
60cdf0e10cSrcweir //class ImportProgress
61cdf0e10cSrcweir //{
62cdf0e10cSrcweir //public:
63cdf0e10cSrcweir //		ImportProgress( GraphicFilter& rFilter );
64cdf0e10cSrcweir //		~ImportProgress();
65cdf0e10cSrcweir //
66cdf0e10cSrcweir //	DECL_LINK( Update, GraphicFilter* );
67cdf0e10cSrcweir //
68cdf0e10cSrcweir //private:
69cdf0e10cSrcweir //	ScProgress aProgress;
70cdf0e10cSrcweir //};
71cdf0e10cSrcweir //
72cdf0e10cSrcweir ////------------------------------------------------------------------------
73cdf0e10cSrcweir //
74cdf0e10cSrcweir //ImportProgress::ImportProgress( GraphicFilter& rFilter )
75cdf0e10cSrcweir //	: aProgress( NULL, // SfxViewFrame*, NULL == alle Docs locken
76cdf0e10cSrcweir //				 String( ScResId(STR_INSERTGRAPHIC) ),
77cdf0e10cSrcweir //				 100 )
78cdf0e10cSrcweir //{
79cdf0e10cSrcweir //	rFilter.SetUpdatePercentHdl( LINK( this, ImportProgress, Update) );
80cdf0e10cSrcweir //}
81cdf0e10cSrcweir //
82cdf0e10cSrcweir ////------------------------------------------------------------------------
83cdf0e10cSrcweir //
84cdf0e10cSrcweir //__EXPORT ImportProgress::~ImportProgress()
85cdf0e10cSrcweir //{
86cdf0e10cSrcweir //	aProgress.SetState( 100 );
87cdf0e10cSrcweir //}
88cdf0e10cSrcweir //
89cdf0e10cSrcweir ////------------------------------------------------------------------------
90cdf0e10cSrcweir //
91cdf0e10cSrcweir //IMPL_LINK( ImportProgress, Update, GraphicFilter*, pGraphicFilter )
92cdf0e10cSrcweir //{
93cdf0e10cSrcweir //	aProgress.SetState( pGraphicFilter->GetPercent() );
94cdf0e10cSrcweir //	return 0;
95cdf0e10cSrcweir //}
96cdf0e10cSrcweir 
97cdf0e10cSrcweir 
98cdf0e10cSrcweir //------------------------------------------------------------------------
99cdf0e10cSrcweir 
ScLimitSizeOnDrawPage(Size & rSize,Point & rPos,const Size & rPage)100cdf0e10cSrcweir void SC_DLLPUBLIC ScLimitSizeOnDrawPage( Size& rSize, Point& rPos, const Size& rPage )
101cdf0e10cSrcweir {
102cdf0e10cSrcweir 	if ( !rPage.Width() || !rPage.Height() )
103cdf0e10cSrcweir 		return;
104cdf0e10cSrcweir 
105cdf0e10cSrcweir 	Size aPageSize = rPage;
106cdf0e10cSrcweir 	sal_Bool bNegative = aPageSize.Width() < 0;
107cdf0e10cSrcweir 	if ( bNegative )
108cdf0e10cSrcweir 	{
109cdf0e10cSrcweir 		//	make everything positive temporarily
110cdf0e10cSrcweir 		aPageSize.Width() = -aPageSize.Width();
111cdf0e10cSrcweir 		rPos.X() = -rPos.X() - rSize.Width();
112cdf0e10cSrcweir 	}
113cdf0e10cSrcweir 
114cdf0e10cSrcweir 	if ( rSize.Width() > aPageSize.Width() || rSize.Height() > aPageSize.Height() )
115cdf0e10cSrcweir 	{
116cdf0e10cSrcweir 		double fX = aPageSize.Width()  / (double) rSize.Width();
117cdf0e10cSrcweir 		double fY = aPageSize.Height() / (double) rSize.Height();
118cdf0e10cSrcweir 
119cdf0e10cSrcweir 		if ( fX < fY )
120cdf0e10cSrcweir 		{
121cdf0e10cSrcweir 			rSize.Width()  = aPageSize.Width();
122cdf0e10cSrcweir 			rSize.Height() = (long) ( rSize.Height() * fX );
123cdf0e10cSrcweir 		}
124cdf0e10cSrcweir 		else
125cdf0e10cSrcweir 		{
126cdf0e10cSrcweir 			rSize.Height() = aPageSize.Height();
127cdf0e10cSrcweir 			rSize.Width()  = (long) ( rSize.Width() * fY );
128cdf0e10cSrcweir 		}
129cdf0e10cSrcweir 
130cdf0e10cSrcweir 		if (!rSize.Width())
131cdf0e10cSrcweir 			rSize.Width() = 1;
132cdf0e10cSrcweir 		if (!rSize.Height())
133cdf0e10cSrcweir 			rSize.Height() = 1;
134cdf0e10cSrcweir 	}
135cdf0e10cSrcweir 
136cdf0e10cSrcweir 	if ( rPos.X() + rSize.Width() > aPageSize.Width() )
137cdf0e10cSrcweir 		rPos.X() = aPageSize.Width() - rSize.Width();
138cdf0e10cSrcweir 	if ( rPos.Y() + rSize.Height() > aPageSize.Height() )
139cdf0e10cSrcweir 		rPos.Y() = aPageSize.Height() - rSize.Height();
140cdf0e10cSrcweir 
141cdf0e10cSrcweir 	if ( bNegative )
142cdf0e10cSrcweir 		rPos.X() = -rPos.X() - rSize.Width();		// back to real position
143cdf0e10cSrcweir }
144cdf0e10cSrcweir 
145cdf0e10cSrcweir //------------------------------------------------------------------------
146cdf0e10cSrcweir 
lcl_InsertGraphic(const Graphic & rGraphic,const String & rFileName,const String & rFilterName,sal_Bool bAsLink,sal_Bool bApi,ScTabViewShell * pViewSh,Window * pWindow,SdrView * pView)147cdf0e10cSrcweir void lcl_InsertGraphic( const Graphic& rGraphic,
148cdf0e10cSrcweir 						const String& rFileName, const String& rFilterName, sal_Bool bAsLink, sal_Bool bApi,
149cdf0e10cSrcweir 						ScTabViewShell*	pViewSh, Window* pWindow, SdrView* pView )
150cdf0e10cSrcweir {
151*52f1c2eeSArmin Le Grand 	ScDrawView* pDrawView = pViewSh->GetScDrawView();
152*52f1c2eeSArmin Le Grand 
153*52f1c2eeSArmin Le Grand     // #123922# check if an existing object is selected; if yes, evtl. replace
154*52f1c2eeSArmin Le Grand     // the graphic for a SdrGraphObj (including link state updates) or adapt the fill
155*52f1c2eeSArmin Le Grand     // style for other objects
156*52f1c2eeSArmin Le Grand     if(pDrawView && 1 == pDrawView->GetMarkedObjectCount())
157*52f1c2eeSArmin Le Grand     {
158*52f1c2eeSArmin Le Grand         SdrObject* pPickObj = pDrawView->GetMarkedObjectByIndex(0);
159*52f1c2eeSArmin Le Grand 
160*52f1c2eeSArmin Le Grand         if(pPickObj)
161*52f1c2eeSArmin Le Grand         {
162*52f1c2eeSArmin Le Grand             //sal_Int8 nAction(DND_ACTION_MOVE);
163*52f1c2eeSArmin Le Grand             //Point aPos;
164*52f1c2eeSArmin Le Grand             const String aBeginUndo(ScGlobal::GetRscString(STR_UNDO_DRAGDROP));
165*52f1c2eeSArmin Le Grand             const String aEmpty;
166*52f1c2eeSArmin Le Grand 
167*52f1c2eeSArmin Le Grand             SdrObject* pResult = pDrawView->ApplyGraphicToObject(
168*52f1c2eeSArmin Le Grand                 *pPickObj,
169*52f1c2eeSArmin Le Grand                 rGraphic,
170*52f1c2eeSArmin Le Grand                 aBeginUndo,
171*52f1c2eeSArmin Le Grand                 bAsLink ? rFileName : aEmpty,
172*52f1c2eeSArmin Le Grand                 bAsLink ? rFilterName : aEmpty);
173*52f1c2eeSArmin Le Grand 
174*52f1c2eeSArmin Le Grand             if(pResult)
175*52f1c2eeSArmin Le Grand             {
176*52f1c2eeSArmin Le Grand                 // we are done; mark the modified/new object
177*52f1c2eeSArmin Le Grand                 pDrawView->MarkObj(pResult, pDrawView->GetSdrPageView());
178*52f1c2eeSArmin Le Grand                 return;
179*52f1c2eeSArmin Le Grand             }
180*52f1c2eeSArmin Le Grand         }
181*52f1c2eeSArmin Le Grand     }
182*52f1c2eeSArmin Le Grand 
183cdf0e10cSrcweir 	//	#74778# set the size so the graphic has its original pixel size
184cdf0e10cSrcweir 	//	at 100% view scale (as in SetMarkedOriginalSize),
185cdf0e10cSrcweir 	//	instead of respecting the current view scale
186*52f1c2eeSArmin Le Grand     MapMode aSourceMap = rGraphic.GetPrefMapMode();
187cdf0e10cSrcweir 	MapMode aDestMap( MAP_100TH_MM );
188cdf0e10cSrcweir 	if ( aSourceMap.GetMapUnit() == MAP_PIXEL && pDrawView )
189cdf0e10cSrcweir 	{
190cdf0e10cSrcweir 		Fraction aScaleX, aScaleY;
191cdf0e10cSrcweir 		pDrawView->CalcNormScale( aScaleX, aScaleY );
192cdf0e10cSrcweir 		aDestMap.SetScaleX(aScaleX);
193cdf0e10cSrcweir 		aDestMap.SetScaleY(aScaleY);
194cdf0e10cSrcweir 	}
195cdf0e10cSrcweir 	Size aLogicSize = pWindow->LogicToLogic(
196cdf0e10cSrcweir 							rGraphic.GetPrefSize(), &aSourceMap, &aDestMap );
197cdf0e10cSrcweir 
198cdf0e10cSrcweir 	//	Limit size
199cdf0e10cSrcweir 
200cdf0e10cSrcweir 	SdrPageView* pPV  = pView->GetSdrPageView();
201cdf0e10cSrcweir 	SdrPage* pPage = pPV->GetPage();
202cdf0e10cSrcweir 	Point aInsertPos = pViewSh->GetInsertPos();
203cdf0e10cSrcweir 
204cdf0e10cSrcweir 	ScViewData* pData = pViewSh->GetViewData();
205cdf0e10cSrcweir 	if ( pData->GetDocument()->IsNegativePage( pData->GetTabNo() ) )
206cdf0e10cSrcweir 		aInsertPos.X() -= aLogicSize.Width();		// move position to left edge
207cdf0e10cSrcweir 
208cdf0e10cSrcweir 	ScLimitSizeOnDrawPage( aLogicSize, aInsertPos, pPage->GetSize() );
209cdf0e10cSrcweir 
210cdf0e10cSrcweir 	Rectangle aRect ( aInsertPos, aLogicSize );
211cdf0e10cSrcweir 
212cdf0e10cSrcweir 	SdrGrafObj* pObj = new SdrGrafObj( rGraphic, aRect );
213cdf0e10cSrcweir 
214cdf0e10cSrcweir     // #118522# calling SetGraphicLink here doesn't work
215cdf0e10cSrcweir 
216cdf0e10cSrcweir 	//	#49961# Path is no longer used as name for the graphics object
217cdf0e10cSrcweir 
218cdf0e10cSrcweir 	ScDrawLayer* pLayer = (ScDrawLayer*) pView->GetModel();
219cdf0e10cSrcweir 	String aName = pLayer->GetNewGraphicName();					// "Grafik x"
220cdf0e10cSrcweir 	pObj->SetName(aName);
221cdf0e10cSrcweir 
222cdf0e10cSrcweir 	//	don't select if from (dispatch) API, to allow subsequent cell operations
223cdf0e10cSrcweir 	sal_uLong nInsOptions = bApi ? SDRINSERT_DONTMARK : 0;
224cdf0e10cSrcweir 	pView->InsertObjectAtView( pObj, *pPV, nInsOptions );
225cdf0e10cSrcweir 
226cdf0e10cSrcweir     // #118522# SetGraphicLink has to be used after inserting the object,
227cdf0e10cSrcweir     // otherwise an empty graphic is swapped in and the contact stuff crashes.
228cdf0e10cSrcweir     // See #i37444#.
229cdf0e10cSrcweir 	if ( bAsLink )
230cdf0e10cSrcweir 		pObj->SetGraphicLink( rFileName, rFilterName );
231cdf0e10cSrcweir }
232cdf0e10cSrcweir 
233cdf0e10cSrcweir //------------------------------------------------------------------------
234cdf0e10cSrcweir 
lcl_InsertMedia(const::rtl::OUString & rMediaURL,bool bApi,ScTabViewShell * pViewSh,Window * pWindow,SdrView * pView,const Size & rPrefSize)235cdf0e10cSrcweir void lcl_InsertMedia( const ::rtl::OUString& rMediaURL, bool bApi,
236cdf0e10cSrcweir 					  ScTabViewShell* pViewSh, Window* pWindow, SdrView* pView,
237cdf0e10cSrcweir 					  const Size& rPrefSize )
238cdf0e10cSrcweir {
239cdf0e10cSrcweir 	SdrPageView* 	pPV  = pView->GetSdrPageView();
240cdf0e10cSrcweir 	SdrPage* 		pPage = pPV->GetPage();
241cdf0e10cSrcweir 	ScViewData* 	pData = pViewSh->GetViewData();
242cdf0e10cSrcweir 	Point 			aInsertPos( pViewSh->GetInsertPos() );
243cdf0e10cSrcweir 	Size 			aSize;
244cdf0e10cSrcweir 
245cdf0e10cSrcweir 	if( rPrefSize.Width() && rPrefSize.Height() )
246cdf0e10cSrcweir 	{
247cdf0e10cSrcweir 		if( pWindow )
248cdf0e10cSrcweir 			aSize = pWindow->PixelToLogic( rPrefSize, MAP_100TH_MM );
249cdf0e10cSrcweir 		else
250cdf0e10cSrcweir 			aSize = Application::GetDefaultDevice()->PixelToLogic( rPrefSize, MAP_100TH_MM );
251cdf0e10cSrcweir 	}
252cdf0e10cSrcweir 	else
253cdf0e10cSrcweir 		aSize = Size( 5000, 5000 );
254cdf0e10cSrcweir 
255cdf0e10cSrcweir 	ScLimitSizeOnDrawPage( aSize, aInsertPos, pPage->GetSize() );
256cdf0e10cSrcweir 
257cdf0e10cSrcweir 	if( pData->GetDocument()->IsNegativePage( pData->GetTabNo() ) )
258cdf0e10cSrcweir 		aInsertPos.X() -= aSize.Width();
259cdf0e10cSrcweir 
260cdf0e10cSrcweir 	SdrMediaObj* pObj = new SdrMediaObj( Rectangle( aInsertPos, aSize ) );
261cdf0e10cSrcweir 
262cdf0e10cSrcweir 	pObj->setURL( rMediaURL );
263cdf0e10cSrcweir 	pView->InsertObjectAtView( pObj, *pPV, bApi ? SDRINSERT_DONTMARK : 0 );
264cdf0e10cSrcweir }
265cdf0e10cSrcweir 
266cdf0e10cSrcweir /*************************************************************************
267cdf0e10cSrcweir |*
268cdf0e10cSrcweir |* FuInsertGraphic::Konstruktor
269cdf0e10cSrcweir |*
270cdf0e10cSrcweir \************************************************************************/
271cdf0e10cSrcweir 
272cdf0e10cSrcweir #ifdef _MSC_VER
273cdf0e10cSrcweir #pragma optimize("",off)
274cdf0e10cSrcweir #endif
275cdf0e10cSrcweir 
FuInsertGraphic(ScTabViewShell * pViewSh,Window * pWin,ScDrawView * pViewP,SdrModel * pDoc,SfxRequest & rReq)276cdf0e10cSrcweir FuInsertGraphic::FuInsertGraphic( ScTabViewShell*	pViewSh,
277cdf0e10cSrcweir 								  Window*			pWin,
278cdf0e10cSrcweir                                   ScDrawView*       pViewP,
279cdf0e10cSrcweir 								  SdrModel*			pDoc,
280cdf0e10cSrcweir 								  SfxRequest&		rReq )
281cdf0e10cSrcweir        : FuPoor(pViewSh, pWin, pViewP, pDoc, rReq)
282cdf0e10cSrcweir {
283cdf0e10cSrcweir 	const SfxItemSet* pReqArgs = rReq.GetArgs();
284cdf0e10cSrcweir 	const SfxPoolItem* pItem;
285cdf0e10cSrcweir 	if ( pReqArgs &&
286cdf0e10cSrcweir 		 pReqArgs->GetItemState( SID_INSERT_GRAPHIC, sal_True, &pItem ) == SFX_ITEM_SET )
287cdf0e10cSrcweir 	{
288cdf0e10cSrcweir 		String aFileName = ((const SfxStringItem*)pItem)->GetValue();
289cdf0e10cSrcweir 
290cdf0e10cSrcweir 		String aFilterName;
291cdf0e10cSrcweir 		if ( pReqArgs->GetItemState( FN_PARAM_FILTER, sal_True, &pItem ) == SFX_ITEM_SET )
292cdf0e10cSrcweir 			aFilterName = ((const SfxStringItem*)pItem)->GetValue();
293cdf0e10cSrcweir 
294cdf0e10cSrcweir 		sal_Bool bAsLink = sal_False;
295cdf0e10cSrcweir 		if ( pReqArgs->GetItemState( FN_PARAM_1, sal_True, &pItem ) == SFX_ITEM_SET )
296cdf0e10cSrcweir 			bAsLink = ((const SfxBoolItem*)pItem)->GetValue();
297cdf0e10cSrcweir 
298cdf0e10cSrcweir 		Graphic aGraphic;
299cdf0e10cSrcweir         int nError = GraphicFilter::LoadGraphic( aFileName, aFilterName, aGraphic, GraphicFilter::GetGraphicFilter() );
300cdf0e10cSrcweir         if ( nError == GRFILTER_OK )
301cdf0e10cSrcweir         {
302cdf0e10cSrcweir 			lcl_InsertGraphic( aGraphic, aFileName, aFilterName, bAsLink, sal_True, pViewSh, pWindow, pView );
303cdf0e10cSrcweir         }
304cdf0e10cSrcweir 	}
305cdf0e10cSrcweir 	else
306cdf0e10cSrcweir 	{
307cdf0e10cSrcweir 		SvxOpenGraphicDialog aDlg(ScResId(STR_INSERTGRAPHIC));
308cdf0e10cSrcweir 
309cdf0e10cSrcweir 		if( aDlg.Execute() == GRFILTER_OK )
310cdf0e10cSrcweir 		{
311cdf0e10cSrcweir 			Graphic aGraphic;
312cdf0e10cSrcweir             int nError = aDlg.GetGraphic(aGraphic);
313cdf0e10cSrcweir 			if( nError == GRFILTER_OK )
314cdf0e10cSrcweir 			{
315cdf0e10cSrcweir 				String aFileName = aDlg.GetPath();
316cdf0e10cSrcweir 				String aFilterName = aDlg.GetCurrentFilter();
317cdf0e10cSrcweir 				sal_Bool bAsLink = aDlg.IsAsLink();
318cdf0e10cSrcweir 
319cdf0e10cSrcweir 				lcl_InsertGraphic( aGraphic, aFileName, aFilterName, bAsLink, sal_False, pViewSh, pWindow, pView );
320cdf0e10cSrcweir 
321cdf0e10cSrcweir 				//	append items for recording
322cdf0e10cSrcweir 				rReq.AppendItem( SfxStringItem( SID_INSERT_GRAPHIC, aFileName ) );
323cdf0e10cSrcweir 				rReq.AppendItem( SfxStringItem( FN_PARAM_FILTER, aFilterName ) );
324cdf0e10cSrcweir 				rReq.AppendItem( SfxBoolItem( FN_PARAM_1, bAsLink ) );
325cdf0e10cSrcweir 				rReq.Done();
326cdf0e10cSrcweir 			}
327cdf0e10cSrcweir 			else
328cdf0e10cSrcweir 			{
329cdf0e10cSrcweir 				//	error is handled in SvxOpenGraphicDialog::GetGraphic
330cdf0e10cSrcweir 
331cdf0e10cSrcweir #if 0
332cdf0e10cSrcweir 				sal_uInt16 nRes = 0;
333cdf0e10cSrcweir 				switch ( nError )
334cdf0e10cSrcweir 				{
335cdf0e10cSrcweir 					case GRFILTER_OPENERROR:	nRes = SCSTR_GRFILTER_OPENERROR;	break;
336cdf0e10cSrcweir 					case GRFILTER_IOERROR:		nRes = SCSTR_GRFILTER_IOERROR;		break;
337cdf0e10cSrcweir 					case GRFILTER_FORMATERROR:	nRes = SCSTR_GRFILTER_FORMATERROR;	break;
338cdf0e10cSrcweir 					case GRFILTER_VERSIONERROR:	nRes = SCSTR_GRFILTER_VERSIONERROR;	break;
339cdf0e10cSrcweir 					case GRFILTER_FILTERERROR:	nRes = SCSTR_GRFILTER_FILTERERROR;	break;
340cdf0e10cSrcweir 					case GRFILTER_TOOBIG:		nRes = SCSTR_GRFILTER_TOOBIG;		break;
341cdf0e10cSrcweir 				}
342cdf0e10cSrcweir 				if ( nRes )
343cdf0e10cSrcweir 				{
344cdf0e10cSrcweir 					InfoBox aInfoBox( pWindow, String(ScResId(nRes)) );
345cdf0e10cSrcweir 					aInfoBox.Execute();
346cdf0e10cSrcweir 				}
347cdf0e10cSrcweir 				else
348cdf0e10cSrcweir 				{
349cdf0e10cSrcweir 					sal_uLong nStreamError = GetGrfFilter()->GetLastError().nStreamError;
350cdf0e10cSrcweir 					if( ERRCODE_NONE != nStreamError )
351cdf0e10cSrcweir 						ErrorHandler::HandleError( nStreamError );
352cdf0e10cSrcweir 				}
353cdf0e10cSrcweir #endif
354cdf0e10cSrcweir 			}
355cdf0e10cSrcweir 		}
356cdf0e10cSrcweir 	}
357cdf0e10cSrcweir }
358cdf0e10cSrcweir 
359cdf0e10cSrcweir /*************************************************************************
360cdf0e10cSrcweir |*
361cdf0e10cSrcweir |* FuInsertGraphic::Destruktor
362cdf0e10cSrcweir |*
363cdf0e10cSrcweir \************************************************************************/
364cdf0e10cSrcweir 
~FuInsertGraphic()365cdf0e10cSrcweir FuInsertGraphic::~FuInsertGraphic()
366cdf0e10cSrcweir {
367cdf0e10cSrcweir }
368cdf0e10cSrcweir 
369cdf0e10cSrcweir /*************************************************************************
370cdf0e10cSrcweir |*
371cdf0e10cSrcweir |* FuInsertGraphic::Function aktivieren
372cdf0e10cSrcweir |*
373cdf0e10cSrcweir \************************************************************************/
374cdf0e10cSrcweir 
Activate()375cdf0e10cSrcweir void FuInsertGraphic::Activate()
376cdf0e10cSrcweir {
377cdf0e10cSrcweir 	FuPoor::Activate();
378cdf0e10cSrcweir }
379cdf0e10cSrcweir 
380cdf0e10cSrcweir /*************************************************************************
381cdf0e10cSrcweir |*
382cdf0e10cSrcweir |* FuInsertGraphic::Function deaktivieren
383cdf0e10cSrcweir |*
384cdf0e10cSrcweir \************************************************************************/
385cdf0e10cSrcweir 
Deactivate()386cdf0e10cSrcweir void FuInsertGraphic::Deactivate()
387cdf0e10cSrcweir {
388cdf0e10cSrcweir 	FuPoor::Deactivate();
389cdf0e10cSrcweir }
390cdf0e10cSrcweir 
391cdf0e10cSrcweir /*************************************************************************
392cdf0e10cSrcweir |*
393cdf0e10cSrcweir |* FuInsertMedia::Konstruktor
394cdf0e10cSrcweir |*
395cdf0e10cSrcweir \************************************************************************/
396cdf0e10cSrcweir 
FuInsertMedia(ScTabViewShell * pViewSh,Window * pWin,ScDrawView * pViewP,SdrModel * pDoc,SfxRequest & rReq)397cdf0e10cSrcweir FuInsertMedia::FuInsertMedia( ScTabViewShell*	pViewSh,
398cdf0e10cSrcweir 							  Window*			pWin,
399cdf0e10cSrcweir                               ScDrawView*       pViewP,
400cdf0e10cSrcweir 							  SdrModel*			pDoc,
401cdf0e10cSrcweir 							  SfxRequest&		rReq ) :
402cdf0e10cSrcweir     FuPoor(pViewSh, pWin, pViewP, pDoc, rReq)
403cdf0e10cSrcweir {
404cdf0e10cSrcweir 	::rtl::OUString 	aURL;
405cdf0e10cSrcweir 	const SfxItemSet*	pReqArgs = rReq.GetArgs();
406cdf0e10cSrcweir 	bool				bAPI = false;
407cdf0e10cSrcweir 
408cdf0e10cSrcweir 	if( pReqArgs )
409cdf0e10cSrcweir 	{
410cdf0e10cSrcweir 		const SfxStringItem* pStringItem = PTR_CAST( SfxStringItem, &pReqArgs->Get( rReq.GetSlot() ) );
411cdf0e10cSrcweir 
412cdf0e10cSrcweir 		if( pStringItem )
413cdf0e10cSrcweir 		{
414cdf0e10cSrcweir 			aURL = pStringItem->GetValue();
415cdf0e10cSrcweir 			bAPI = aURL.getLength();
416cdf0e10cSrcweir 		}
417cdf0e10cSrcweir 	}
418cdf0e10cSrcweir 
419cdf0e10cSrcweir 	if( bAPI || ::avmedia::MediaWindow::executeMediaURLDialog( pWindow, aURL ) )
420cdf0e10cSrcweir 	{
421cdf0e10cSrcweir 		Size aPrefSize;
422cdf0e10cSrcweir 
423cdf0e10cSrcweir 		if( pWin )
424cdf0e10cSrcweir 			pWin->EnterWait();
425cdf0e10cSrcweir 
426cdf0e10cSrcweir 		if( !::avmedia::MediaWindow::isMediaURL( aURL, true, &aPrefSize ) )
427cdf0e10cSrcweir 		{
428cdf0e10cSrcweir 			if( pWin )
429cdf0e10cSrcweir 				pWin->LeaveWait();
430cdf0e10cSrcweir 
431cdf0e10cSrcweir 			if( !bAPI )
432cdf0e10cSrcweir 				::avmedia::MediaWindow::executeFormatErrorBox( pWindow );
433cdf0e10cSrcweir 		}
434cdf0e10cSrcweir 		else
435cdf0e10cSrcweir 		{
436cdf0e10cSrcweir 			lcl_InsertMedia( aURL, bAPI, pViewSh, pWindow, pView, aPrefSize );
437cdf0e10cSrcweir 
438cdf0e10cSrcweir 			if( pWin )
439cdf0e10cSrcweir 				pWin->LeaveWait();
440cdf0e10cSrcweir 		}
441cdf0e10cSrcweir 	}
442cdf0e10cSrcweir }
443cdf0e10cSrcweir 
444cdf0e10cSrcweir /*************************************************************************
445cdf0e10cSrcweir |*
446cdf0e10cSrcweir |* FuInsertMedia::Destruktor
447cdf0e10cSrcweir |*
448cdf0e10cSrcweir \************************************************************************/
449cdf0e10cSrcweir 
~FuInsertMedia()450cdf0e10cSrcweir FuInsertMedia::~FuInsertMedia()
451cdf0e10cSrcweir {
452cdf0e10cSrcweir }
453cdf0e10cSrcweir 
454cdf0e10cSrcweir /*************************************************************************
455cdf0e10cSrcweir |*
456cdf0e10cSrcweir |* FuInsertMedia::Function aktivieren
457cdf0e10cSrcweir |*
458cdf0e10cSrcweir \************************************************************************/
459cdf0e10cSrcweir 
Activate()460cdf0e10cSrcweir void FuInsertMedia::Activate()
461cdf0e10cSrcweir {
462cdf0e10cSrcweir 	FuPoor::Activate();
463cdf0e10cSrcweir }
464cdf0e10cSrcweir 
465cdf0e10cSrcweir /*************************************************************************
466cdf0e10cSrcweir |*
467cdf0e10cSrcweir |* FuInsertMedia::Function deaktivieren
468cdf0e10cSrcweir |*
469cdf0e10cSrcweir \************************************************************************/
470cdf0e10cSrcweir 
Deactivate()471cdf0e10cSrcweir void FuInsertMedia::Deactivate()
472cdf0e10cSrcweir {
473cdf0e10cSrcweir 	FuPoor::Deactivate();
474cdf0e10cSrcweir }
475