xref: /trunk/main/svx/source/gallery2/galmisc.cxx (revision 45fd3b9a)
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_svx.hxx"
26 
27 #include <unotools/streamwrap.hxx>
28 #include <unotools/ucbstreamhelper.hxx>
29 #include <unotools/processfactory.hxx>
30 #include <ucbhelper/content.hxx>
31 #include <tools/resmgr.hxx>
32 #include <tools/urlobj.hxx>
33 #include <svl/solar.hrc>
34 #include <svl/urihelper.hxx>
35 #include <svtools/filter.hxx>
36 #include <svl/itempool.hxx>
37 #include <sfx2/docfile.hxx>
38 #include <avmedia/mediawindow.hxx>
39 #include <vcl/svapp.hxx>
40 
41 #include "svtools/filter.hxx"
42 #include <svx/svdpage.hxx>
43 #include <svx/svdograf.hxx>
44 #include <svx/fmmodel.hxx>
45 #include <svx/fmview.hxx>
46 #include <svx/unomodel.hxx>
47 #include "codec.hxx"
48 #include "gallery.hrc"
49 #include "svx/gallery1.hxx"
50 #include "svx/galtheme.hxx"
51 #include "svx/galmisc.hxx"
52 #include <com/sun/star/sdbc/XResultSet.hpp>
53 #include <com/sun/star/ucb/XContentAccess.hpp>
54 #include <com/sun/star/ucb/TransferInfo.hpp>
55 #include <com/sun/star/ucb/NameClash.hpp>
56 
57 // --------------
58 // - Namespaces -
59 // --------------
60 
61 using namespace ::rtl;
62 using namespace ::com::sun::star;
63 
64 // ----------
65 // - ResMgr -
66 // ----------
67 
GetGalleryResMgr()68 ResMgr* GetGalleryResMgr()
69 {
70 	static ResMgr* pGalleryResMgr = NULL;
71 
72 	if( !pGalleryResMgr )
73 	{
74 		ByteString aResMgrName( "gal" );
75 		pGalleryResMgr = ResMgr::CreateResMgr(
76 			aResMgrName.GetBuffer(), Application::GetSettings().GetUILocale() );
77 	}
78 
79 	return pGalleryResMgr;
80 }
81 
82 // -------------------------
83 // - GalleryResGetBitmapEx -
84 // -------------------------
85 
GalleryResGetBitmapEx(sal_uInt32 nId)86 BitmapEx GalleryResGetBitmapEx( sal_uInt32 nId )
87 {
88     BitmapEx aBmpEx( GAL_RESID( nId ) );
89 
90     if( !aBmpEx.IsTransparent() )
91             aBmpEx = BitmapEx( aBmpEx.GetBitmap(), COL_LIGHTMAGENTA );
92 
93     return aBmpEx;
94 }
95 
96 // ----------------------
97 // - SgaUserDataFactory -
98 // ----------------------
99 
IMPL_LINK(SgaUserDataFactory,MakeUserData,SdrObjFactory *,pObjFactory)100 IMPL_LINK( SgaUserDataFactory, MakeUserData, SdrObjFactory*, pObjFactory )
101 {
102 	if ( pObjFactory->nInventor == IV_IMAPINFO && pObjFactory->nIdentifier == ID_IMAPINFO )
103 		pObjFactory->pNewData = new SgaIMapInfo;
104 
105 	return 0L;
106 }
107 
108 // ------------------------
109 // - GalleryGraphicImport -
110 // ------------------------
111 
GalleryGraphicImport(const INetURLObject & rURL,Graphic & rGraphic,String & rFilterName,sal_Bool bShowProgress)112 sal_uInt16 GalleryGraphicImport( const INetURLObject& rURL, Graphic& rGraphic,
113 				             String& rFilterName, sal_Bool bShowProgress )
114 {
115 	sal_uInt16		nRet = SGA_IMPORT_NONE;
116 	SfxMedium	aMedium( rURL.GetMainURL( INetURLObject::NO_DECODE ), STREAM_READ, sal_True );
117 	String		aFilterName;
118 
119 	aMedium.DownLoad();
120 
121 	SvStream* pIStm = aMedium.GetInStream();
122 
123 	if( pIStm )
124 	{
125 		GraphicFilter*		pGraphicFilter = GraphicFilter::GetGraphicFilter();
126 		GalleryProgress*	pProgress = bShowProgress ? new GalleryProgress( pGraphicFilter ) : NULL;
127 		sal_uInt16				nFormat;
128 
129 		if( !pGraphicFilter->ImportGraphic( rGraphic, rURL.GetMainURL( INetURLObject::NO_DECODE ), *pIStm, GRFILTER_FORMAT_DONTKNOW, &nFormat ) )
130 		{
131 			rFilterName = pGraphicFilter->GetImportFormatName( nFormat );
132 			nRet = SGA_IMPORT_FILE;
133 		}
134 
135 		delete pProgress;
136 	}
137 
138 	return nRet;
139 }
140 
141 // -----------------------
142 // - GallerySvDrawImport -
143 // -----------------------
144 
GallerySvDrawImport(SvStream & rIStm,SdrModel & rModel)145 sal_Bool GallerySvDrawImport( SvStream& rIStm, SdrModel& rModel )
146 {
147 	sal_uInt32  nVersion;
148     sal_Bool    bRet = sal_False;
149 
150 	if( GalleryCodec::IsCoded( rIStm, nVersion ) )
151 	{
152 		SvMemoryStream	aMemStm( 65535, 65535 );
153 		GalleryCodec	aCodec( rIStm );
154 
155 		aCodec.Read( aMemStm );
156 		aMemStm.Seek( 0UL );
157 
158         if( 1 == nVersion )
159         {
160 			DBG_ERROR( "staroffice binary file formats are no longer supported inside the gallery!" );
161 		    bRet = false;
162         }
163         else if( 2 == nVersion )
164         {
165             // recall to read as XML
166             bRet = GallerySvDrawImport( aMemStm, rModel );
167         }
168  	}
169 	else
170 	{
171         // read as XML
172     	uno::Reference< io::XInputStream > xInputStream( new utl::OInputStreamWrapper( rIStm ) );
173 
174 		rModel.GetItemPool().SetDefaultMetric( SFX_MAPUNIT_100TH_MM );
175 		uno::Reference< lang::XComponent > xComponent;
176 
177 		bRet = SvxDrawingLayerImport( &rModel, xInputStream, xComponent, "com.sun.star.comp.Draw.XMLOasisImporter" );
178 		if( !bRet || (rModel.GetPageCount() == 0) )
179 		{
180 			rIStm.Seek(0);
181 			bRet = SvxDrawingLayerImport( &rModel, xInputStream, xComponent, "com.sun.star.comp.Draw.XMLImporter" );
182 		}
183 
184 	}
185 
186 	return bRet;
187 }
188 
189 // ---------------------
190 // - CreateIMapGraphic -
191 // ---------------------
192 
CreateIMapGraphic(const FmFormModel & rModel,Graphic & rGraphic,ImageMap & rImageMap)193 sal_Bool CreateIMapGraphic( const FmFormModel& rModel, Graphic& rGraphic, ImageMap& rImageMap )
194 {
195 	sal_Bool bRet = sal_False;
196 
197 	if ( rModel.GetPageCount() )
198 	{
199 		const SdrPage*		pPage = rModel.GetPage( 0 );
200 		const SdrObject*	pObj = pPage->GetObj( 0 );
201 
202 		if ( pPage->GetObjCount() == 1 && pObj->ISA( SdrGrafObj ) )
203 		{
204 			const sal_uInt16 nCount = pObj->GetUserDataCount();
205 
206 			// gibt es in den User-Daten eine IMap-Information?
207 			for ( sal_uInt16 i = 0; i < nCount; i++ )
208 			{
209 				const SdrObjUserData* pUserData = pObj->GetUserData( i );
210 
211 				if ( ( pUserData->GetInventor() == IV_IMAPINFO ) && ( pUserData->GetId() == ID_IMAPINFO ) )
212 				{
213 					rGraphic = ( (SdrGrafObj*) pObj )->GetGraphic();
214 					rImageMap = ( (SgaIMapInfo*) pUserData )->GetImageMap();
215 					bRet = sal_True;
216 					break;
217 				}
218 			}
219 		}
220 	}
221 
222 	return bRet;
223 }
224 
225 // --------------------
226 // - GetReducedString -
227 // --------------------
228 
GetReducedString(const INetURLObject & rURL,sal_uIntPtr nMaxLen)229 String GetReducedString( const INetURLObject& rURL, sal_uIntPtr nMaxLen )
230 {
231     String aReduced( rURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ) );
232 
233     aReduced = aReduced.GetToken( aReduced.GetTokenCount( '/' ) - 1, '/' );
234 
235     if( INET_PROT_PRIV_SOFFICE != rURL.GetProtocol() )
236     {
237         sal_Unicode     aDelimiter;
238    	    const String    aPath( rURL.getFSysPath( INetURLObject::FSYS_DETECT, &aDelimiter ) );
239         const String    aName( aReduced );
240 
241         if( aPath.Len() > nMaxLen )
242         {
243             aReduced = aPath.Copy( 0, (sal_uInt16)( nMaxLen - aName.Len() - 4 ) );
244     	    aReduced += String( RTL_CONSTASCII_USTRINGPARAM( "..." ) );
245             aReduced += aDelimiter;
246 		    aReduced += aName;
247         }
248         else
249             aReduced = aPath;
250     }
251 
252     return aReduced;
253 }
254 
255 // -----------------------------------------------------------------------------
256 
GetSvDrawStreamNameFromURL(const INetURLObject & rSvDrawObjURL)257 String GetSvDrawStreamNameFromURL( const INetURLObject& rSvDrawObjURL )
258 {
259 	String aRet;
260 
261 	if( rSvDrawObjURL.GetProtocol() == INET_PROT_PRIV_SOFFICE &&
262 		String(rSvDrawObjURL.GetMainURL( INetURLObject::NO_DECODE )).GetTokenCount( '/' ) == 3 )
263 	{
264 		aRet = String(rSvDrawObjURL.GetMainURL( INetURLObject::NO_DECODE )).GetToken( 2, '/' );
265 	}
266 
267 	return aRet;
268 }
269 
270 // -----------------------------------------------------------------------------
271 
FileExists(const INetURLObject & rURL)272 sal_Bool FileExists( const INetURLObject& rURL )
273 {
274 	sal_Bool bRet = sal_False;
275 
276 	if( rURL.GetProtocol() != INET_PROT_NOT_VALID )
277 	{
278 		try
279 		{
280 			::ucbhelper::Content		aCnt( rURL.GetMainURL( INetURLObject::NO_DECODE ), uno::Reference< ucb::XCommandEnvironment >() );
281 			OUString	aTitle;
282 
283 			aCnt.getPropertyValue( OUString::createFromAscii( "Title" ) ) >>= aTitle;
284 			bRet = ( aTitle.getLength() > 0 );
285 		}
286 		catch( const ucb::ContentCreationException& )
287 		{
288 		}
289 		catch( const uno::RuntimeException& )
290 		{
291 		}
292 	    catch( const uno::Exception& )
293 	    {
294 	    }
295 	}
296 
297 	return bRet;
298 }
299 
300 // -----------------------------------------------------------------------------
301 
CreateDir(const INetURLObject & rURL)302 sal_Bool CreateDir( const INetURLObject& rURL )
303 {
304 	sal_Bool bRet = FileExists( rURL );
305 
306 	if( !bRet )
307 	{
308 		try
309 		{
310 			uno::Reference< ucb::XCommandEnvironment >	aCmdEnv;
311 			INetURLObject							aNewFolderURL( rURL );
312 			INetURLObject							aParentURL( aNewFolderURL ); aParentURL.removeSegment();
313 			::ucbhelper::Content					aParent( aParentURL.GetMainURL( INetURLObject::NO_DECODE ), aCmdEnv );
314 			uno::Sequence< OUString >				aProps( 1 );
315 			uno::Sequence< uno::Any >				aValues( 1 );
316 
317 			aProps.getArray()[ 0 ] = OUString::createFromAscii( "Title" );
318 			aValues.getArray()[ 0 ] = uno::makeAny( OUString( aNewFolderURL.GetName() ) );
319 
320         ::ucbhelper::Content aContent( aNewFolderURL.GetMainURL( INetURLObject::NO_DECODE ), aCmdEnv );
321         bRet = aParent.insertNewContent( OUString::createFromAscii( "application/vnd.sun.staroffice.fsys-folder" ), aProps, aValues, aContent );
322 		}
323 		catch( const ucb::ContentCreationException& )
324 		{
325 		}
326 		catch( const uno::RuntimeException& )
327 		{
328 		}
329 	    catch( const uno::Exception& )
330 	    {
331 	    }
332 	}
333 
334 	return bRet;
335 }
336 
337 // -----------------------------------------------------------------------------
338 
CopyFile(const INetURLObject & rSrcURL,const INetURLObject & rDstURL)339 sal_Bool CopyFile(  const INetURLObject& rSrcURL, const INetURLObject& rDstURL )
340 {
341 	sal_Bool bRet = sal_False;
342 
343 	try
344 	{
345 		::ucbhelper::Content aDestPath( rDstURL.GetMainURL( INetURLObject::NO_DECODE ), uno::Reference< ucb::XCommandEnvironment >() );
346 
347 		aDestPath.executeCommand( OUString::createFromAscii( "transfer" ),
348 								  uno::makeAny( ucb::TransferInfo( sal_False, rSrcURL.GetMainURL( INetURLObject::NO_DECODE ),
349 												rDstURL.GetName(), ucb::NameClash::OVERWRITE ) ) );
350 		bRet = sal_True;
351 	}
352 	catch( const ucb::ContentCreationException& )
353 	{
354 	}
355 	catch( const uno::RuntimeException& )
356 	{
357 	}
358 	catch( const uno::Exception& )
359 	{
360 	}
361 
362 	return bRet;
363 }
364 
365 // -----------------------------------------------------------------------------
366 
KillFile(const INetURLObject & rURL)367 sal_Bool KillFile( const INetURLObject& rURL )
368 {
369 	sal_Bool bRet = FileExists( rURL );
370 
371 	if( bRet )
372 	{
373 		try
374 		{
375 			::ucbhelper::Content aCnt( rURL.GetMainURL( INetURLObject::NO_DECODE ), uno::Reference< ucb::XCommandEnvironment >() );
376 			aCnt.executeCommand( OUString::createFromAscii( "delete" ), uno::makeAny( sal_Bool( sal_True ) ) );
377 		}
378 		catch( const ucb::ContentCreationException& )
379 		{
380 			bRet = sal_False;
381 		}
382 		catch( const uno::RuntimeException& )
383 		{
384 			bRet = sal_False;
385 		}
386 	    catch( const uno::Exception& )
387 	    {
388             bRet = sal_False;
389 	    }
390 	}
391 
392 	return bRet;
393 }
394 
395 // -------------------
396 // - GalleryProgress -
397 // -------------------
DBG_NAME(GalleryProgress)398 DBG_NAME(GalleryProgress)
399 
400 GalleryProgress::GalleryProgress( GraphicFilter* pFilter ) :
401 	mpFilter( pFilter )
402 {
403     DBG_CTOR(GalleryProgress,NULL);
404 
405 	uno::Reference< lang::XMultiServiceFactory > xMgr( ::utl::getProcessServiceFactory() );
406 
407 	if( xMgr.is() )
408 	{
409 		uno::Reference< awt::XProgressMonitor >	xMonitor( xMgr->createInstance(
410 													  ::rtl::OUString::createFromAscii( "com.sun.star.awt.XProgressMonitor" ) ),
411 													  uno::UNO_QUERY );
412 
413 		if ( xMonitor.is() )
414 		{
415 			mxProgressBar = uno::Reference< awt::XProgressBar >( xMonitor, uno::UNO_QUERY );
416 
417 			if( mxProgressBar.is() )
418 			{
419 				String aProgressText;
420 
421 				if( mpFilter )
422 				{
423 					aProgressText = String( GAL_RESID( RID_SVXSTR_GALLERY_FILTER ) );
424 //					mpFilter->SetUpdatePercentHdl( LINK( this, GalleryProgress, Update ) );		// sj: progress wasn't working up from SO7 at all
425 //																								// so I am removing this. The gallery progress should
426 //																								// be changed to use the XStatusIndicator instead of XProgressMonitor
427 				}
428 				else
429 					aProgressText = String( RTL_CONSTASCII_USTRINGPARAM( "Gallery" ) );
430 
431 				xMonitor->addText( String( RTL_CONSTASCII_USTRINGPARAM( "Gallery" ) ), aProgressText, sal_False ) ;
432 				mxProgressBar->setRange( 0, GALLERY_PROGRESS_RANGE );
433 			}
434 		}
435 	}
436 }
437 
438 // ------------------------------------------------------------------------
439 
~GalleryProgress()440 GalleryProgress::~GalleryProgress()
441 {
442 //	if( mpFilter )
443 //		mpFilter->SetUpdatePercentHdl( Link() );
444 
445     DBG_DTOR(GalleryProgress,NULL);
446 }
447 
448 // ------------------------------------------------------------------------
449 
Update(sal_uIntPtr nVal,sal_uIntPtr nMaxVal)450 void GalleryProgress::Update( sal_uIntPtr nVal, sal_uIntPtr nMaxVal )
451 {
452 	if( mxProgressBar.is() && nMaxVal )
453 		mxProgressBar->setValue( Min( (sal_uIntPtr)( (double) nVal / nMaxVal * GALLERY_PROGRESS_RANGE ), (sal_uIntPtr) GALLERY_PROGRESS_RANGE ) );
454 }
455 
456 // -----------------------
457 // - GalleryTransferable -
458 // -----------------------
DBG_NAME(GalleryTransferable)459 DBG_NAME(GalleryTransferable)
460 
461 GalleryTransferable::GalleryTransferable( GalleryTheme* pTheme, sal_uIntPtr nObjectPos, bool bLazy ) :
462 	mpTheme( pTheme ),
463 	meObjectKind( mpTheme->GetObjectKind( nObjectPos ) ),
464 	mnObjectPos( nObjectPos ),
465 	mpGraphicObject( NULL ),
466 	mpImageMap( NULL ),
467 	mpURL( NULL )
468 {
469     DBG_CTOR(GalleryTransferable,NULL);
470 
471     InitData( bLazy );
472 }
473 
474 // ------------------------------------------------------------------------
475 
~GalleryTransferable()476 GalleryTransferable::~GalleryTransferable()
477 {
478 
479     DBG_DTOR(GalleryTransferable,NULL);
480 }
481 
482 // ------------------------------------------------------------------------
483 
InitData(bool bLazy)484 void GalleryTransferable::InitData( bool bLazy )
485 {
486     switch( meObjectKind )
487     {
488         case( SGA_OBJ_SVDRAW ):
489         {
490             if( !bLazy )
491             {
492                 if( !mpGraphicObject )
493                 {
494                     Graphic aGraphic;
495 
496                     if( mpTheme->GetGraphic( mnObjectPos, aGraphic ) )
497                         mpGraphicObject = new GraphicObject( aGraphic );
498                 }
499 
500                 if( !mxModelStream.Is() )
501                 {
502                     mxModelStream = new SotStorageStream( String() );
503                     mxModelStream->SetBufferSize( 16348 );
504 
505                     if( !mpTheme->GetModelStream( mnObjectPos, mxModelStream ) )
506                         mxModelStream.Clear();
507                     else
508                         mxModelStream->Seek( 0 );
509                 }
510             }
511         }
512         break;
513 
514         case( SGA_OBJ_ANIM ):
515         case( SGA_OBJ_BMP ):
516         case( SGA_OBJ_INET ):
517         case( SGA_OBJ_SOUND ):
518         {
519             if( !mpURL )
520             {
521                 mpURL = new INetURLObject;
522 
523                 if( !mpTheme->GetURL( mnObjectPos, *mpURL ) )
524                     delete mpURL, mpURL = NULL;
525             }
526 
527             if( ( SGA_OBJ_SOUND != meObjectKind ) && !mpGraphicObject )
528             {
529                 Graphic aGraphic;
530 
531                 if( mpTheme->GetGraphic( mnObjectPos, aGraphic ) )
532                     mpGraphicObject = new GraphicObject( aGraphic );
533             }
534         }
535         break;
536 
537     	default:
538             DBG_ERROR( "GalleryTransferable::GalleryTransferable: invalid object type" );
539         break;
540 	}
541 }
542 
543 // ------------------------------------------------------------------------
544 
AddSupportedFormats()545 void GalleryTransferable::AddSupportedFormats()
546 {
547     if( SGA_OBJ_SVDRAW == meObjectKind )
548     {
549         AddFormat( SOT_FORMATSTR_ID_DRAWING );
550         AddFormat( SOT_FORMATSTR_ID_SVXB );
551         AddFormat( FORMAT_GDIMETAFILE );
552         AddFormat( FORMAT_BITMAP );
553     }
554     else
555     {
556         if( mpURL )
557             AddFormat( FORMAT_FILE );
558 
559         if( mpGraphicObject )
560         {
561             AddFormat( SOT_FORMATSTR_ID_SVXB );
562 
563             if( mpGraphicObject->GetType() == GRAPHIC_GDIMETAFILE )
564             {
565                 AddFormat( FORMAT_GDIMETAFILE );
566                 AddFormat( FORMAT_BITMAP );
567             }
568             else
569             {
570                 AddFormat( FORMAT_BITMAP );
571                 AddFormat( FORMAT_GDIMETAFILE );
572             }
573         }
574     }
575 }
576 
577 // ------------------------------------------------------------------------
578 
GetData(const datatransfer::DataFlavor & rFlavor)579 sal_Bool GalleryTransferable::GetData( const datatransfer::DataFlavor& rFlavor )
580 {
581 	sal_uInt32	nFormat = SotExchange::GetFormat( rFlavor );
582 	sal_Bool	bRet = sal_False;
583 
584 	InitData( false );
585 
586 	if( ( SOT_FORMATSTR_ID_DRAWING == nFormat ) && ( SGA_OBJ_SVDRAW == meObjectKind ) )
587 	{
588         bRet = ( mxModelStream.Is() && SetObject( &mxModelStream, 0, rFlavor ) );
589 	}
590 	else if( ( SOT_FORMATSTR_ID_SVIM == nFormat ) && mpImageMap )
591 	{
592         // TODO/MBA: do we need a BaseURL here?!
593         bRet = SetImageMap( *mpImageMap, rFlavor );
594 	}
595 	else if( ( FORMAT_FILE == nFormat ) && mpURL )
596 	{
597 		bRet = SetString( mpURL->GetMainURL( INetURLObject::NO_DECODE ), rFlavor );
598 	}
599 	else if( ( SOT_FORMATSTR_ID_SVXB == nFormat ) && mpGraphicObject )
600 	{
601 		bRet = SetGraphic( mpGraphicObject->GetGraphic(), rFlavor );
602 	}
603 	else if( ( FORMAT_GDIMETAFILE == nFormat ) && mpGraphicObject )
604 	{
605 		bRet = SetGDIMetaFile( mpGraphicObject->GetGraphic().GetGDIMetaFile(), rFlavor );
606 	}
607 	else if( ( FORMAT_BITMAP == nFormat ) && mpGraphicObject )
608 	{
609 		bRet = SetBitmapEx( mpGraphicObject->GetGraphic().GetBitmapEx(), rFlavor );
610 	}
611 
612 	return bRet;
613 }
614 
615 // ------------------------------------------------------------------------
616 
WriteObject(SotStorageStreamRef & rxOStm,void * pUserObject,sal_uInt32,const datatransfer::DataFlavor &)617 sal_Bool GalleryTransferable::WriteObject( SotStorageStreamRef& rxOStm, void* pUserObject,
618 										   sal_uInt32, const datatransfer::DataFlavor& )
619 {
620 	sal_Bool bRet = sal_False;
621 
622 	if( pUserObject )
623 	{
624         *rxOStm << *static_cast< SotStorageStream* >( pUserObject );
625 		bRet = ( rxOStm->GetError() == ERRCODE_NONE );
626 	}
627 
628 	return bRet;
629 }
630 
631 // ------------------------------------------------------------------------
632 
DragFinished(sal_Int8 nDropAction)633 void GalleryTransferable::DragFinished( sal_Int8 nDropAction )
634 {
635 	mpTheme->SetDragging( sal_False );
636 	mpTheme->SetDragPos( 0 );
637 	if ( nDropAction )
638 	{
639 		Window *pFocusWindow = Application::GetFocusWindow();
640 		if ( pFocusWindow )
641 			pFocusWindow->GrabFocusToDocument();
642 	}
643 }
644 
645 // ------------------------------------------------------------------------
646 
ObjectReleased()647 void GalleryTransferable::ObjectReleased()
648 {
649     mxModelStream.Clear();
650 	delete mpGraphicObject, mpGraphicObject = NULL;
651 	delete mpImageMap, mpImageMap = NULL;
652 	delete mpURL, mpURL = NULL;
653 }
654 
655 // ------------------------------------------------------------------------
656 
CopyToClipboard(Window * pWindow)657 void GalleryTransferable::CopyToClipboard( Window* pWindow )
658 {
659 	TransferableHelper::CopyToClipboard( pWindow );
660 }
661 
662 // ------------------------------------------------------------------------
663 
StartDrag(Window * pWindow,sal_Int8 nDragSourceActions,sal_Int32 nDragPointer,sal_Int32 nDragImage)664 void GalleryTransferable::StartDrag( Window* pWindow, sal_Int8 nDragSourceActions,
665 									 sal_Int32 nDragPointer, sal_Int32 nDragImage )
666 {
667     INetURLObject aURL;
668 
669     if( mpTheme->GetURL( mnObjectPos, aURL ) && ( aURL.GetProtocol() != INET_PROT_NOT_VALID ) )
670     {
671     	mpTheme->SetDragging( sal_True );
672 	    mpTheme->SetDragPos( mnObjectPos );
673 		TransferableHelper::StartDrag( pWindow, nDragSourceActions, nDragPointer, nDragImage );
674     }
675 }
676