xref: /trunk/main/cui/source/dialogs/insdlg.cxx (revision 268e7129)
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_cui.hxx"
26 
27 #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
28 #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
29 #include <com/sun/star/ui/dialogs/XFilePicker.hpp>
30 #include <com/sun/star/ui/dialogs/XFilterManager.hpp>
31 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
32 #include <com/sun/star/lang/XInitialization.hpp>
33 #include <comphelper/processfactory.hxx>
34 #include <com/sun/star/embed/EmbedStates.hpp>
35 #include <com/sun/star/beans/XPropertySet.hpp>
36 #include <com/sun/star/beans/PropertyValue.hpp>
37 #include <com/sun/star/embed/XInsertObjectDialog.hpp>
38 #include <com/sun/star/ucb/CommandAbortedException.hpp>
39 #include <com/sun/star/task/XInteractionHandler.hpp>
40 
41 #include "insdlg.hxx"
42 #include <dialmgr.hxx>
43 #include <svtools/sores.hxx>
44 
45 #include <stdio.h>
46 #include <tools/urlobj.hxx>
47 #include <tools/debug.hxx>
48 #include <svl/urihelper.hxx>
49 #include <svtools/svmedit.hxx>
50 #include <vcl/button.hxx>
51 #include <vcl/fixed.hxx>
52 #include <vcl/group.hxx>
53 #include <vcl/lstbox.hxx>
54 #include <vcl/msgbox.hxx>
55 #include <vcl/svapp.hxx>
56 #include <sot/clsids.hxx>
57 #include <sfx2/frmdescr.hxx>
58 #include <sfx2/viewsh.hxx>
59 #include <sfx2/filedlghelper.hxx>
60 #include <svl/ownlist.hxx>
61 #include <comphelper/seqstream.hxx>
62 
63 #include "svuidlg.hrc"
64 
65 #include <osl/file.hxx>
66 
67 #include <com/sun/star/container/XHierarchicalNameAccess.hpp>
68 #include <com/sun/star/container/XNameAccess.hpp>
69 #include <unotools/processfactory.hxx>
70 
71 using namespace ::com::sun::star;
72 using namespace ::com::sun::star::lang;
73 using namespace ::com::sun::star::uno;
74 using namespace ::com::sun::star::container;
75 using namespace ::com::sun::star::ui::dialogs;
76 using ::rtl::OUString;
77 
78 #define _SVSTDARR_STRINGSDTOR
79 #include <svl/svstdarr.hxx>
80 
81 
82 static String impl_getSvtResString( sal_uInt32 nId )
83 {
84     String aRet;
85     com::sun::star::lang::Locale aLocale = Application::GetSettings().GetUILocale();
86     ResMgr* pMgr = ResMgr::CreateResMgr( "svt", aLocale );
87     if( pMgr )
88     {
89         aRet = String( ResId( nId, *pMgr ) );
90         delete pMgr;
91     }
92     return aRet;
93 }
94 
95 sal_Bool InsertObjectDialog_Impl::IsCreateNew() const
96 {
97     return sal_False;
98 }
99 
100 uno::Reference< io::XInputStream > InsertObjectDialog_Impl::GetIconIfIconified( ::rtl::OUString* /*pGraphicMediaType*/ )
101 {
102 	return uno::Reference< io::XInputStream >();
103 }
104 
105 InsertObjectDialog_Impl::InsertObjectDialog_Impl( Window * pParent, const ResId & rResId, const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& xStorage )
106  : ModalDialog( pParent, rResId )
107  , m_xStorage( xStorage )
108  , aCnt( m_xStorage )
109 {
110 }
111 
112 // -----------------------------------------------------------------------
113 
114 IMPL_LINK_INLINE_START( SvInsertOleDlg, DoubleClickHdl, ListBox *, EMPTYARG )
115 {
116 	EndDialog( RET_OK );
117 	return 0;
118 }
119 IMPL_LINK_INLINE_END( SvInsertOleDlg, DoubleClickHdl, ListBox *, pListBox )
120 
121 // -----------------------------------------------------------------------
122 
123 IMPL_LINK( SvInsertOleDlg, BrowseHdl, PushButton *, EMPTYARG )
124 {
125     Reference< XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
126     if( xFactory.is() )
127     {
128         Reference< XFilePicker > xFilePicker( xFactory->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.FilePicker" ) ) ), UNO_QUERY );
129         DBG_ASSERT( xFilePicker.is(), "could not get FilePicker service" );
130 
131         Reference< XInitialization > xInit( xFilePicker, UNO_QUERY );
132         Reference< XFilterManager > xFilterMgr( xFilePicker, UNO_QUERY );
133         if( xInit.is() && xFilePicker.is() && xFilterMgr.is() )
134         {
135             Sequence< Any > aServiceType( 1 );
136             aServiceType[0] <<= TemplateDescription::FILEOPEN_SIMPLE;
137             xInit->initialize( aServiceType );
138 
139             // add filter
140             try
141             {
142                 xFilterMgr->appendFilter(
143                      OUString(),
144                      OUString( RTL_CONSTASCII_USTRINGPARAM( "*.*" ) )
145                      );
146             }
147             catch( IllegalArgumentException& )
148             {
149                 DBG_ASSERT( 0, "caught IllegalArgumentException when registering filter\n" );
150             }
151 
152             if( xFilePicker->execute() == ExecutableDialogResults::OK )
153             {
154                 Sequence< OUString > aPathSeq( xFilePicker->getFiles() );
155 				INetURLObject aObj( aPathSeq[0] );
156 				aEdFilepath.SetText( aObj.PathToFileName() );
157             }
158         }
159     }
160 
161 	return 0;
162 }
163 
164 // -----------------------------------------------------------------------
165 
166 IMPL_LINK( SvInsertOleDlg, RadioHdl, RadioButton *, EMPTYARG )
167 {
168 	if ( aRbNewObject.IsChecked() )
169 	{
170 		aLbObjecttype.Show();
171 		aEdFilepath.Hide();
172 		aBtnFilepath.Hide();
173 		aCbFilelink.Hide();
174 		aGbObject.SetText( _aOldStr );
175 	}
176 	else
177 	{
178         aCbFilelink.Show();
179 		aLbObjecttype.Hide();
180 		aEdFilepath.Show();
181 		aBtnFilepath.Show();
182 		aCbFilelink.Show();
183 		aGbObject.SetText( aStrFile );
184 	}
185 	return 0;
186 }
187 
188 // -----------------------------------------------------------------------
189 
190 void SvInsertOleDlg::SelectDefault()
191 {
192 	aLbObjecttype.SelectEntryPos( 0 );
193 }
194 
195 // -----------------------------------------------------------------------
196 SvInsertOleDlg::SvInsertOleDlg
197 (
198     Window* pParent,
199     const Reference < embed::XStorage >& xStorage,
200     const SvObjectServerList* pServers
201 )
202     : InsertObjectDialog_Impl( pParent, CUI_RES( MD_INSERT_OLEOBJECT ), xStorage ),
203     aRbNewObject( this, CUI_RES( RB_NEW_OBJECT ) ),
204     aRbObjectFromfile( this, CUI_RES( RB_OBJECT_FROMFILE ) ),
205     aGbObject( this, CUI_RES( GB_OBJECT ) ),
206     aLbObjecttype( this, CUI_RES( LB_OBJECTTYPE ) ),
207     aEdFilepath( this, CUI_RES( ED_FILEPATH ) ),
208     aBtnFilepath( this, CUI_RES( BTN_FILEPATH ) ),
209     aCbFilelink( this, CUI_RES( CB_FILELINK ) ),
210     aOKButton1( this, CUI_RES( 1 ) ),
211     aCancelButton1( this, CUI_RES( 1 ) ),
212     aHelpButton1( this, CUI_RES( 1 ) ),
213     aStrFile( CUI_RES( STR_FILE ) ),
214     m_pServers( pServers )
215 {
216     FreeResource();
217 	_aOldStr = aGbObject.GetText();
218     aLbObjecttype.SetDoubleClickHdl( LINK( this, SvInsertOleDlg, DoubleClickHdl ) );
219 	aBtnFilepath.SetClickHdl( LINK( this, SvInsertOleDlg, BrowseHdl ) );
220 	Link aLink( LINK( this, SvInsertOleDlg, RadioHdl ) );
221 	aRbNewObject.SetClickHdl( aLink );
222 	aRbObjectFromfile.SetClickHdl( aLink );
223 	aRbNewObject.Check( sal_True );
224 	RadioHdl( NULL );
225 	aBtnFilepath.SetAccessibleRelationMemberOf(&aGbObject);
226 }
227 
228 short SvInsertOleDlg::Execute()
229 {
230     short nRet = RET_OK;
231 	SvObjectServerList  aObjS;
232     if ( !m_pServers )
233 	{
234         // if no list was provided, take the complete one
235 		aObjS.FillInsertObjects();
236         m_pServers = &aObjS;
237 	}
238 
239     // fill listbox and select default
240     ListBox& rBox = GetObjectTypes();
241 	rBox.SetUpdateMode( sal_False );
242     for ( sal_uLong i = 0; i < m_pServers->Count(); i++ )
243         rBox.InsertEntry( (*m_pServers)[i].GetHumanName() );
244 	rBox.SetUpdateMode( sal_True );
245     SelectDefault();
246     ::rtl::OUString aName;
247 
248     DBG_ASSERT( m_xStorage.is(), "No storage!");
249     if ( m_xStorage.is() && ( nRet = Dialog::Execute() ) == RET_OK )
250 	{
251         String aFileName;
252         sal_Bool bLink = sal_False;
253         sal_Bool bCreateNew = IsCreateNew();
254         if ( bCreateNew )
255 		{
256             // create and insert new embedded object
257             String aServerName = rBox.GetSelectEntry();
258             const SvObjectServer* pS = m_pServers->Get( aServerName );
259 			if ( pS )
260 			{
261                 if( pS->GetClassName() == SvGlobalName( SO3_OUT_CLASSID ) )
262 				{
263 					try
264 					{
265                     	uno::Reference < embed::XInsertObjectDialog > xDialogCreator(
266 							::comphelper::getProcessServiceFactory()->createInstance(
267                             	::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.embed.MSOLEObjectSystemCreator")) ),
268 							uno::UNO_QUERY );
269 
270 						if ( xDialogCreator.is() )
271 						{
272 							aName = aCnt.CreateUniqueObjectName();
273                         	embed::InsertedObjectInfo aNewInf = xDialogCreator->createInstanceByDialog(
274 																	m_xStorage,
275 																	aName,
276                                     								uno::Sequence < beans::PropertyValue >() );
277 
278 							OSL_ENSURE( aNewInf.Object.is(), "The object must be created or an exception must be thrown!" );
279 							m_xObj = aNewInf.Object;
280 							for ( sal_Int32 nInd = 0; nInd < aNewInf.Options.getLength(); nInd++ )
281 								if ( aNewInf.Options[nInd].Name.equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Icon" ) ) ) )
282 								{
283 									aNewInf.Options[nInd].Value >>= m_aIconMetaFile;
284 								}
285 								else if ( aNewInf.Options[nInd].Name.equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IconFormat" ) ) ) )
286 								{
287 									datatransfer::DataFlavor aFlavor;
288 									if ( aNewInf.Options[nInd].Value >>= aFlavor )
289 										m_aIconMediaType = aFlavor.MimeType;
290 								}
291 
292 						}
293 					}
294 					catch( ucb::CommandAbortedException& )
295 					{
296 						// the user has pressed cancel
297 					}
298 					catch( uno::Exception& )
299 					{
300 						// TODO: Error handling
301 					}
302 				}
303                 else
304                 {
305                     // create object with desired ClassId
306                     m_xObj = aCnt.CreateEmbeddedObject( pS->GetClassName().GetByteSequence(), aName );
307                 }
308 
309                 if ( !m_xObj.is() )
310 				{
311                     if( aFileName.Len() )  // from OLE Dialog
312 					{
313 						// Objekt konnte nicht aus Datei erzeugt werden
314                         // global Resource from svtools (former so3 resource)
315                         String aErr( impl_getSvtResString( STR_ERROR_OBJNOCREATE_FROM_FILE ) );
316                         aErr.SearchAndReplace( String( '%' ), aFileName );
317                         ErrorBox( this, WB_3DLOOK | WB_OK, aErr ).Execute();
318 					}
319 					else
320 					{
321 						// Objekt konnte nicht erzeugt werden
322                         // global Resource from svtools (former so3 resource)
323                         String aErr( impl_getSvtResString( STR_ERROR_OBJNOCREATE ) );
324                         aErr.SearchAndReplace( String( '%' ), aServerName );
325                         ErrorBox( this, WB_3DLOOK | WB_OK, aErr ).Execute();
326 					}
327 				}
328 			}
329 		}
330 		else
331 		{
332             aFileName = GetFilePath();
333             INetURLObject aURL;
334             aURL.SetSmartProtocol( INET_PROT_FILE );
335             aURL.SetSmartURL( aFileName );
336             aFileName = aURL.GetMainURL( INetURLObject::NO_DECODE );
337             bLink = IsLinked();
338 
339             if ( aFileName.Len() )
340             {
341                 // create MediaDescriptor for file to create object from
342                 uno::Sequence < beans::PropertyValue > aMedium( 2 );
343                 aMedium[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "URL" ) );
344                 aMedium[0].Value <<= ::rtl::OUString( aFileName );
345 
346         		uno::Reference< task::XInteractionHandler > xInteraction;
347     			uno::Reference< lang::XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory();
348     			if ( xFactory.is() )
349         			xInteraction = uno::Reference< task::XInteractionHandler >(
350 						xFactory->createInstance(
351 							DEFINE_CONST_UNICODE("com.sun.star.task.InteractionHandler") ),
352 						uno::UNO_QUERY_THROW );
353 
354 				if ( xInteraction.is() )
355 				{
356                		aMedium[1].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "InteractionHandler" ) );
357                		aMedium[1].Value <<= xInteraction;
358 				}
359 				else
360 				{
361 					OSL_ASSERT( "Can not get InteractionHandler!\n" );
362 					aMedium.realloc( 1 );
363 				}
364 
365                 // create object from media descriptor
366 				if ( bLink )
367 					m_xObj = aCnt.InsertEmbeddedLink( aMedium, aName );
368 				else
369                 	m_xObj = aCnt.InsertEmbeddedObject( aMedium, aName );
370             }
371 
372             if ( !m_xObj.is() )
373 			{
374 				// Objekt konnte nicht aus Datei erzeugt werden
375                 // global Resource from svtools (former so3 resource)
376                 String aErr( impl_getSvtResString( STR_ERROR_OBJNOCREATE_FROM_FILE ) );
377                 aErr.SearchAndReplace( String( '%' ), aFileName );
378                 ErrorBox( this, WB_3DLOOK | WB_OK, aErr ).Execute();
379 			}
380 		}
381 	}
382 
383     m_pServers = 0;
384     return nRet;
385 }
386 
387 uno::Reference< io::XInputStream > SvInsertOleDlg::GetIconIfIconified( ::rtl::OUString* pGraphicMediaType )
388 {
389 	if ( m_aIconMetaFile.getLength() )
390 	{
391 		if ( pGraphicMediaType )
392 			*pGraphicMediaType = m_aIconMediaType;
393 
394 		return uno::Reference< io::XInputStream >( new ::comphelper::SequenceInputStream( m_aIconMetaFile ) );
395 	}
396 
397 	return uno::Reference< io::XInputStream >();
398 }
399 
400 IMPL_LINK( SvInsertPlugInDialog, BrowseHdl, PushButton *, EMPTYARG )
401 {
402     Sequence< OUString > aFilterNames, aFilterTypes;
403     void fillNetscapePluginFilters( Sequence< OUString >& rNames, Sequence< OUString >& rTypes );
404     fillNetscapePluginFilters( aFilterNames, aFilterTypes );
405 
406     Reference< XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
407     if( xFactory.is() )
408     {
409         Reference< XFilePicker > xFilePicker( xFactory->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.FilePicker" ) ) ), UNO_QUERY );
410         DBG_ASSERT( xFilePicker.is(), "could not get FilePicker service" );
411 
412         Reference< XInitialization > xInit( xFilePicker, UNO_QUERY );
413         Reference< XFilterManager > xFilterMgr( xFilePicker, UNO_QUERY );
414         if( xInit.is() && xFilePicker.is() && xFilterMgr.is() )
415         {
416             Sequence< Any > aServiceType( 1 );
417             aServiceType[0] <<= TemplateDescription::FILEOPEN_SIMPLE;
418             xInit->initialize( aServiceType );
419 
420             // add the filters
421             try
422             {
423                 const OUString* pNames = aFilterNames.getConstArray();
424                 const OUString* pTypes = aFilterTypes.getConstArray();
425                 for( int i = 0; i < aFilterNames.getLength(); i++ )
426                     xFilterMgr->appendFilter( pNames[i], pTypes[i] );
427             }
428             catch( IllegalArgumentException& )
429             {
430                 DBG_ASSERT( 0, "caught IllegalArgumentException when registering filter\n" );
431             }
432 
433             if( xFilePicker->execute() == ExecutableDialogResults::OK )
434             {
435                 Sequence< OUString > aPathSeq( xFilePicker->getFiles() );
436 				INetURLObject aObj( aPathSeq[0] );
437 				aEdFileurl.SetText( aObj.PathToFileName() );
438             }
439         }
440     }
441 
442 	return 0;
443 }
444 
445 // -----------------------------------------------------------------------
446 
447 SvInsertPlugInDialog::SvInsertPlugInDialog( Window* pParent, const uno::Reference < embed::XStorage >& xStorage )
448     : InsertObjectDialog_Impl( pParent, CUI_RES( MD_INSERT_OBJECT_PLUGIN ), xStorage ),
449     aGbFileurl( this, CUI_RES( GB_FILEURL ) ),
450     aEdFileurl( this, CUI_RES( ED_FILEURL ) ),
451     aBtnFileurl( this, CUI_RES( BTN_FILEURL ) ),
452     aGbPluginsOptions( this, CUI_RES( GB_PLUGINS_OPTIONS ) ),
453     aEdPluginsOptions( this, CUI_RES( ED_PLUGINS_OPTIONS ) ),
454     aOKButton1( this, CUI_RES( 1 ) ),
455     aCancelButton1( this, CUI_RES( 1 ) ),
456     aHelpButton1( this, CUI_RES( 1 ) ),
457     m_pURL(0)
458 {
459     FreeResource();
460     aBtnFileurl.SetClickHdl( LINK( this, SvInsertPlugInDialog, BrowseHdl ) );
461 }
462 
463 SvInsertPlugInDialog::~SvInsertPlugInDialog()
464 {
465     delete m_pURL;
466 }
467 
468 // -----------------------------------------------------------------------
469 
470 static void Plugin_ImplFillCommandSequence( const String& aCommands, uno::Sequence< beans::PropertyValue >& aCommandSequence )
471 {
472     sal_uInt16 nEaten;
473     SvCommandList aLst;
474     aLst.AppendCommands( aCommands, &nEaten );
475 
476     const sal_Int32 nCount = aLst.Count();
477 	aCommandSequence.realloc( nCount );
478 	for( sal_Int32 nIndex = 0; nIndex < nCount; nIndex++ )
479 	{
480         const SvCommand& rCommand = aLst[ nIndex ];
481 
482 		aCommandSequence[nIndex].Name = rCommand.GetCommand();
483 		aCommandSequence[nIndex].Handle = -1;
484 		aCommandSequence[nIndex].Value = makeAny( OUString( rCommand.GetArgument() ) );
485         aCommandSequence[nIndex].State = beans::PropertyState_DIRECT_VALUE;
486 	}
487 }
488 
489 short SvInsertPlugInDialog::Execute()
490 {
491     short nRet = RET_OK;
492     m_aCommands.Erase();
493     DBG_ASSERT( m_xStorage.is(), "No storage!");
494     if ( m_xStorage.is() && ( nRet = Dialog::Execute() ) == RET_OK )
495 	{
496         if ( !m_pURL )
497             m_pURL = new INetURLObject();
498 		else
499             *m_pURL = INetURLObject();
500 
501         m_aCommands = GetPlugInOptions();
502         String aURL = GetPlugInFile();
503 
504         // URL can be a valid and absolute URL or a system file name
505         m_pURL->SetSmartProtocol( INET_PROT_FILE );
506         if ( !aURL.Len() || m_pURL->SetSmartURL( aURL ) )
507 		{
508             // create a plugin object
509             ::rtl::OUString aName;
510             SvGlobalName aClassId( SO3_PLUGIN_CLASSID );
511             m_xObj = aCnt.CreateEmbeddedObject( aClassId.GetByteSequence(), aName );
512         }
513 
514         if ( m_xObj.is() )
515         {
516             // set properties from dialog
517             if ( m_xObj->getCurrentState() == embed::EmbedStates::LOADED )
518                 m_xObj->changeState( embed::EmbedStates::RUNNING );
519 
520             uno::Reference < beans::XPropertySet > xSet( m_xObj->getComponent(), uno::UNO_QUERY );
521             if ( xSet.is() )
522             {
523                 xSet->setPropertyValue( ::rtl::OUString::createFromAscii("PluginURL"),
524                         makeAny( ::rtl::OUString( m_pURL->GetMainURL( INetURLObject::NO_DECODE ) ) ) );
525                 uno::Sequence< beans::PropertyValue > aCommandSequence;
526                 Plugin_ImplFillCommandSequence( m_aCommands, aCommandSequence );
527                 xSet->setPropertyValue( ::rtl::OUString::createFromAscii("PluginCommands"), makeAny( aCommandSequence ) );
528             }
529 		}
530 		else
531 		{
532 			// PlugIn konnte nicht erzeugt werden
533             // global Resource from svtools (former so3 resource)
534             String aErr( impl_getSvtResString( STR_ERROR_OBJNOCREATE_PLUGIN ) );
535 			aErr.SearchAndReplace( String( '%' ), aURL );
536             ErrorBox( this, WB_3DLOOK | WB_OK, aErr ).Execute();
537 		}
538 	}
539 
540     return nRet;
541 }
542 
543 // class SvInsertAppletDlg -----------------------------------------------
544 
545 IMPL_LINK( SvInsertAppletDialog, BrowseHdl, PushButton *, EMPTYARG )
546 {
547     Reference< XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
548     if( xFactory.is() )
549     {
550         Reference< XFilePicker > xFilePicker( xFactory->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.FilePicker" ) ) ), UNO_QUERY );
551         DBG_ASSERT( xFilePicker.is(), "could not get FilePicker service" );
552 
553         Reference< XInitialization > xInit( xFilePicker, UNO_QUERY );
554         Reference< XFilterManager > xFilterMgr( xFilePicker, UNO_QUERY );
555         if( xInit.is() && xFilePicker.is() && xFilterMgr.is() )
556         {
557             Sequence< Any > aServiceType( 1 );
558             aServiceType[0] <<= TemplateDescription::FILEOPEN_SIMPLE;
559             xInit->initialize( aServiceType );
560 
561             // add filter
562             try
563             {
564                 xFilterMgr->appendFilter(
565                      OUString( RTL_CONSTASCII_USTRINGPARAM( "Applet" ) ),
566                      OUString( RTL_CONSTASCII_USTRINGPARAM( "*.class" ) )
567                      );
568             }
569             catch( IllegalArgumentException& )
570             {
571                 DBG_ASSERT( 0, "caught IllegalArgumentException when registering filter\n" );
572             }
573 
574             if( xFilePicker->execute() == ExecutableDialogResults::OK )
575             {
576                 Sequence< OUString > aPathSeq( xFilePicker->getFiles() );
577 
578 				INetURLObject aObj( aPathSeq[0] );
579                 aEdClassfile.SetText( aObj.getName() );
580                 aObj.removeSegment();
581 				aEdClasslocation.SetText( aObj.PathToFileName() );
582             }
583         }
584     }
585 
586 	return 0;
587 }
588 
589 // -----------------------------------------------------------------------
590 
591 SvInsertAppletDialog::SvInsertAppletDialog( Window* pParent, const uno::Reference < embed::XStorage >& xStorage )
592     : InsertObjectDialog_Impl( pParent, CUI_RES( MD_INSERT_OBJECT_APPLET ), xStorage ),
593     aFtClassfile( this, CUI_RES( FT_CLASSFILE ) ),
594     aEdClassfile( this, CUI_RES( ED_CLASSFILE ) ),
595     aFtClasslocation( this, CUI_RES( FT_CLASSLOCATION ) ),
596     aEdClasslocation( this, CUI_RES( ED_CLASSLOCATION ) ),
597     aBtnClass( this, CUI_RES( BTN_CLASS ) ),
598     aGbClass( this, CUI_RES( GB_CLASS ) ),
599     aEdAppletOptions( this, CUI_RES( ED_APPLET_OPTIONS ) ),
600     aGbAppletOptions( this, CUI_RES( GB_APPLET_OPTIONS ) ),
601     aOKButton1( this, CUI_RES( 1 ) ),
602     aCancelButton1( this, CUI_RES( 1 ) ),
603     aHelpButton1( this, CUI_RES( 1 ) ),
604     m_pURL(0)
605 {
606     FreeResource();
607     aBtnClass.SetClickHdl( LINK( this, SvInsertAppletDialog, BrowseHdl ) );
608 }
609 
610 SvInsertAppletDialog::SvInsertAppletDialog( Window* pParent, const uno::Reference < embed::XEmbeddedObject >& xObj )
611     : InsertObjectDialog_Impl( pParent, CUI_RES( MD_INSERT_OBJECT_APPLET ), uno::Reference < embed::XStorage >() ),
612     aFtClassfile( this, CUI_RES( FT_CLASSFILE ) ),
613     aEdClassfile( this, CUI_RES( ED_CLASSFILE ) ),
614     aFtClasslocation( this, CUI_RES( FT_CLASSLOCATION ) ),
615     aEdClasslocation( this, CUI_RES( ED_CLASSLOCATION ) ),
616     aBtnClass( this, CUI_RES( BTN_CLASS ) ),
617     aGbClass( this, CUI_RES( GB_CLASS ) ),
618     aEdAppletOptions( this, CUI_RES( ED_APPLET_OPTIONS ) ),
619     aGbAppletOptions( this, CUI_RES( GB_APPLET_OPTIONS ) ),
620     aOKButton1( this, CUI_RES( 1 ) ),
621     aCancelButton1( this, CUI_RES( 1 ) ),
622     aHelpButton1( this, CUI_RES( 1 ) ),
623     m_pURL(0)
624 {
625     m_xObj = xObj;
626     FreeResource();
627     aBtnClass.SetClickHdl( LINK( this, SvInsertAppletDialog, BrowseHdl ) );
628 }
629 
630 
631 SvInsertAppletDialog::~SvInsertAppletDialog()
632 {
633     delete m_pURL;
634 }
635 
636 short SvInsertAppletDialog::Execute()
637 {
638     short nRet = RET_OK;
639     m_aClass.Erase();
640     m_aCommands.Erase();
641 
642     sal_Bool bOK = sal_False;
643     uno::Reference < beans::XPropertySet > xSet;
644     if ( m_xObj.is() )
645 	{
646         try
647         {
648             if ( m_xObj->getCurrentState() == embed::EmbedStates::LOADED )
649                 m_xObj->changeState( embed::EmbedStates::RUNNING );
650             xSet = uno::Reference < beans::XPropertySet >( m_xObj->getComponent(), uno::UNO_QUERY );
651             ::rtl::OUString aStr;
652             uno::Any aAny = xSet->getPropertyValue( ::rtl::OUString::createFromAscii("AppletCode") );
653             if ( aAny >>= aStr )
654                 SetClass( aStr );
655             aAny = xSet->getPropertyValue( ::rtl::OUString::createFromAscii("AppletCodeBase") );
656             if ( aAny >>= aStr )
657                 SetClassLocation( aStr );
658             uno::Sequence< beans::PropertyValue > aCommands;
659             aAny = xSet->getPropertyValue( ::rtl::OUString::createFromAscii("AppletCommands") );
660             if ( aAny >>= aCommands )
661             {
662                 SvCommandList aList;
663                 aList.FillFromSequence( aCommands );
664                 SetAppletOptions( aList.GetCommands() );
665             }
666 
667             String aText( CUI_RES( STR_EDIT_APPLET ) );
668             SetText( aText );
669             bOK = sal_True;
670         }
671         catch ( uno::Exception& )
672         {
673             DBG_ERROR( "No Applet!" );
674         }
675 	}
676     else
677     {
678         DBG_ASSERT( m_xStorage.is(), "No storage!");
679         bOK = m_xStorage.is();
680     }
681 
682     if ( bOK && ( nRet = Dialog::Execute() ) == RET_OK )
683 	{
684         if ( !m_xObj.is() )
685         {
686             ::rtl::OUString aName;
687             SvGlobalName aClassId( SO3_APPLET_CLASSID );
688             m_xObj = aCnt.CreateEmbeddedObject( aClassId.GetByteSequence(), aName );
689             if ( m_xObj->getCurrentState() == embed::EmbedStates::LOADED )
690                 m_xObj->changeState( embed::EmbedStates::RUNNING );
691             xSet = uno::Reference < beans::XPropertySet >( m_xObj->getComponent(), uno::UNO_QUERY );
692         }
693 
694         if ( m_xObj.is() )
695         {
696             try
697             {
698                 sal_Bool bIPActive = m_xObj->getCurrentState() == embed::EmbedStates::INPLACE_ACTIVE;
699                 if ( bIPActive )
700                     m_xObj->changeState( embed::EmbedStates::RUNNING );
701 
702                 String aClassLocation = GetClassLocation();
703 
704                 // Hack, aFileName wird auch fuer Class benutzt
705                 m_aClass = GetClass();
706                 xSet->setPropertyValue( ::rtl::OUString::createFromAscii("AppletCode"), makeAny( ::rtl::OUString( m_aClass ) ) );
707 
708                 ::rtl::OUString tmp = aClassLocation;
709                 ::osl::File::getFileURLFromSystemPath(tmp, tmp);
710                 aClassLocation = tmp;
711                 xSet->setPropertyValue( ::rtl::OUString::createFromAscii("AppletCodeBase"), makeAny( tmp ) );
712                 m_aCommands = GetAppletOptions();
713 
714                 uno::Sequence< beans::PropertyValue > aCommandSequence;
715                 Plugin_ImplFillCommandSequence( m_aCommands, aCommandSequence );
716                 xSet->setPropertyValue( ::rtl::OUString::createFromAscii("AppletCommands"), makeAny( aCommandSequence ) );
717 
718                 if ( bIPActive )
719                     m_xObj->changeState( embed::EmbedStates::INPLACE_ACTIVE );
720             }
721             catch ( uno::Exception& )
722             {
723                 DBG_ERROR( "No Applet!" );
724             }
725         }
726     }
727 
728     return nRet;
729 }
730 
731 SfxInsertFloatingFrameDialog::SfxInsertFloatingFrameDialog( Window *pParent,
732                             const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& xStorage )
733     : InsertObjectDialog_Impl( pParent, CUI_RES( MD_INSERT_OBJECT_IFRAME ), xStorage )
734 	, aFTName ( this, CUI_RES( FT_FRAMENAME ) )
735 	, aEDName ( this, CUI_RES( ED_FRAMENAME ) )
736 	, aFTURL ( this, CUI_RES( FT_URL ) )
737 	, aEDURL ( this, CUI_RES( ED_URL ) )
738 	, aBTOpen ( this, CUI_RES(BT_FILEOPEN ) )
739 
740     , aFLScrolling ( this, CUI_RES( GB_SCROLLING ) )
741 	, aRBScrollingOn ( this, CUI_RES( RB_SCROLLINGON ) )
742 	, aRBScrollingOff ( this, CUI_RES( RB_SCROLLINGOFF ) )
743 	, aRBScrollingAuto ( this, CUI_RES( RB_SCROLLINGAUTO ) )
744     , aFLSepLeft( this, CUI_RES( FL_SEP_LEFT ) )
745     , aFLFrameBorder( this, CUI_RES( GB_BORDER ) )
746 	, aRBFrameBorderOn ( this, CUI_RES( RB_FRMBORDER_ON ) )
747 	, aRBFrameBorderOff ( this, CUI_RES( RB_FRMBORDER_OFF ) )
748     , aFLSepRight( this, CUI_RES( FL_SEP_RIGHT ) )
749     , aFLMargin( this, CUI_RES( GB_MARGIN ) )
750 	, aFTMarginWidth ( this, CUI_RES( FT_MARGINWIDTH ) )
751 	, aNMMarginWidth ( this, CUI_RES( NM_MARGINWIDTH ) )
752 	, aCBMarginWidthDefault( this, CUI_RES( CB_MARGINWIDTHDEFAULT ) )
753 	, aFTMarginHeight ( this, CUI_RES( FT_MARGINHEIGHT ) )
754 	, aNMMarginHeight ( this, CUI_RES( NM_MARGINHEIGHT ) )
755 	, aCBMarginHeightDefault( this, CUI_RES( CB_MARGINHEIGHTDEFAULT ) )
756     , aOKButton1( this, CUI_RES( 1 ) )
757     , aCancelButton1( this, CUI_RES( 1 ) )
758     , aHelpButton1( this, CUI_RES( 1 ) )
759 {
760 	FreeResource();
761 
762 	aFLSepLeft.SetStyle(aFLSepLeft.GetStyle()|WB_VERT);
763     aFLSepRight.SetStyle(aFLSepRight.GetStyle()|WB_VERT);
764 
765     Link aLink( STATIC_LINK( this, SfxInsertFloatingFrameDialog, CheckHdl ) );
766 	aCBMarginWidthDefault.SetClickHdl( aLink );
767 	aCBMarginHeightDefault.SetClickHdl( aLink );
768 
769     aCBMarginWidthDefault.Check();
770     aCBMarginHeightDefault.Check();
771     aRBScrollingAuto.Check();
772     aRBFrameBorderOn.Check();
773 
774     aBTOpen.SetClickHdl( STATIC_LINK( this, SfxInsertFloatingFrameDialog, OpenHdl ) );
775 }
776 
777 SfxInsertFloatingFrameDialog::SfxInsertFloatingFrameDialog( Window *pParent, const uno::Reference < embed::XEmbeddedObject >& xObj )
778     : InsertObjectDialog_Impl( pParent, CUI_RES( MD_INSERT_OBJECT_IFRAME ), uno::Reference < embed::XStorage >() )
779 	, aFTName ( this, CUI_RES( FT_FRAMENAME ) )
780 	, aEDName ( this, CUI_RES( ED_FRAMENAME ) )
781 	, aFTURL ( this, CUI_RES( FT_URL ) )
782 	, aEDURL ( this, CUI_RES( ED_URL ) )
783 	, aBTOpen ( this, CUI_RES(BT_FILEOPEN ) )
784 
785     , aFLScrolling ( this, CUI_RES( GB_SCROLLING ) )
786 	, aRBScrollingOn ( this, CUI_RES( RB_SCROLLINGON ) )
787 	, aRBScrollingOff ( this, CUI_RES( RB_SCROLLINGOFF ) )
788 	, aRBScrollingAuto ( this, CUI_RES( RB_SCROLLINGAUTO ) )
789 
790     , aFLSepLeft( this, CUI_RES( FL_SEP_LEFT ) )
791     , aFLFrameBorder( this, CUI_RES( GB_BORDER ) )
792 	, aRBFrameBorderOn ( this, CUI_RES( RB_FRMBORDER_ON ) )
793 	, aRBFrameBorderOff ( this, CUI_RES( RB_FRMBORDER_OFF ) )
794 
795     , aFLSepRight( this, CUI_RES( FL_SEP_RIGHT ) )
796     , aFLMargin( this, CUI_RES( GB_MARGIN ) )
797 	, aFTMarginWidth ( this, CUI_RES( FT_MARGINWIDTH ) )
798 	, aNMMarginWidth ( this, CUI_RES( NM_MARGINWIDTH ) )
799 	, aCBMarginWidthDefault( this, CUI_RES( CB_MARGINWIDTHDEFAULT ) )
800 	, aFTMarginHeight ( this, CUI_RES( FT_MARGINHEIGHT ) )
801 	, aNMMarginHeight ( this, CUI_RES( NM_MARGINHEIGHT ) )
802 	, aCBMarginHeightDefault( this, CUI_RES( CB_MARGINHEIGHTDEFAULT ) )
803     , aOKButton1( this, CUI_RES( 1 ) )
804     , aCancelButton1( this, CUI_RES( 1 ) )
805     , aHelpButton1( this, CUI_RES( 1 ) )
806 {
807 	FreeResource();
808 
809     m_xObj = xObj;
810 
811 	aFLSepLeft.SetStyle(aFLSepLeft.GetStyle()|WB_VERT);
812     aFLSepRight.SetStyle(aFLSepRight.GetStyle()|WB_VERT);
813 
814     Link aLink( STATIC_LINK( this, SfxInsertFloatingFrameDialog, CheckHdl ) );
815 	aCBMarginWidthDefault.SetClickHdl( aLink );
816 	aCBMarginHeightDefault.SetClickHdl( aLink );
817 
818     aCBMarginWidthDefault.Check();
819     aCBMarginHeightDefault.Check();
820     aRBScrollingAuto.Check();
821     aRBFrameBorderOn.Check();
822 
823     aBTOpen.SetClickHdl( STATIC_LINK( this, SfxInsertFloatingFrameDialog, OpenHdl ) );
824 }
825 
826 short SfxInsertFloatingFrameDialog::Execute()
827 {
828     short nRet = RET_OK;
829     sal_Bool bOK = sal_False;
830     uno::Reference < beans::XPropertySet > xSet;
831     if ( m_xObj.is() )
832 	{
833         try
834         {
835             if ( m_xObj->getCurrentState() == embed::EmbedStates::LOADED )
836                 m_xObj->changeState( embed::EmbedStates::RUNNING );
837             xSet = uno::Reference < beans::XPropertySet >( m_xObj->getComponent(), uno::UNO_QUERY );
838             ::rtl::OUString aStr;
839             uno::Any aAny = xSet->getPropertyValue( ::rtl::OUString::createFromAscii("FrameURL") );
840             if ( aAny >>= aStr )
841                 aEDURL.SetText( aStr );
842             aAny = xSet->getPropertyValue( ::rtl::OUString::createFromAscii("FrameName") );
843             if ( aAny >>= aStr )
844                 aEDName.SetText( aStr );
845 
846             sal_Int32 nSize = SIZE_NOT_SET;
847             aAny = xSet->getPropertyValue( ::rtl::OUString::createFromAscii("FrameMarginWidth") );
848             aAny >>= nSize;
849 
850             if ( nSize == SIZE_NOT_SET )
851             {
852                 aCBMarginWidthDefault.Check( sal_True );
853                 aNMMarginWidth.SetText( String::CreateFromInt32( DEFAULT_MARGIN_WIDTH )  );
854                 aFTMarginWidth.Enable( sal_False );
855                 aNMMarginWidth.Enable( sal_False );
856             }
857             else
858                 aNMMarginWidth.SetText( String::CreateFromInt32( nSize ) );
859 
860             aAny = xSet->getPropertyValue( ::rtl::OUString::createFromAscii("FrameMarginHeight") );
861             aAny >>= nSize;
862 
863             if ( nSize == SIZE_NOT_SET )
864             {
865                 aCBMarginHeightDefault.Check( sal_True );
866                 aNMMarginHeight.SetText( String::CreateFromInt32( DEFAULT_MARGIN_HEIGHT )  );
867                 aFTMarginHeight.Enable( sal_False );
868                 aNMMarginHeight.Enable( sal_False );
869             }
870             else
871                 aNMMarginHeight.SetText( String::CreateFromInt32( nSize ) );
872 
873             sal_Bool bScrollOn = sal_False;
874             sal_Bool bScrollOff = sal_False;
875             sal_Bool bScrollAuto = sal_False;
876 
877             sal_Bool bSet = sal_False;
878             aAny = xSet->getPropertyValue( ::rtl::OUString::createFromAscii("FrameIsAutoScroll") );
879             aAny >>= bSet;
880             if ( !bSet )
881             {
882                 aAny = xSet->getPropertyValue( ::rtl::OUString::createFromAscii("FrameIsScrollingMode") );
883                 aAny >>= bSet;
884                 bScrollOn = bSet;
885                 bScrollOff = !bSet;
886             }
887             else
888                 bScrollAuto = sal_True;
889 
890             aRBScrollingOn.Check( bScrollOn );
891             aRBScrollingOff.Check( bScrollOff );
892             aRBScrollingAuto.Check( bScrollAuto );
893 
894             bSet = sal_False;
895             aAny = xSet->getPropertyValue( ::rtl::OUString::createFromAscii("FrameIsAutoBorder") );
896             aAny >>= bSet;
897             if ( !bSet )
898             {
899                 aAny = xSet->getPropertyValue( ::rtl::OUString::createFromAscii("FrameIsBorder") );
900                 aAny >>= bSet;
901                 aRBFrameBorderOn.Check( bSet );
902                 aRBFrameBorderOff.Check( !bSet );
903             }
904 
905             SetUpdateMode( sal_True );
906             bOK = sal_True;
907         }
908         catch ( uno::Exception& )
909         {
910             DBG_ERROR( "No IFrame!" );
911         }
912 	}
913     else
914     {
915         DBG_ASSERT( m_xStorage.is(), "No storage!");
916         bOK = m_xStorage.is();
917     }
918 
919     if ( bOK && ( nRet = Dialog::Execute() ) == RET_OK )
920 	{
921         ::rtl::OUString aURL;
922         if ( aEDURL.GetText().Len() )
923         {
924             // URL can be a valid and absolute URL or a system file name
925             INetURLObject aObj;
926             aObj.SetSmartProtocol( INET_PROT_FILE );
927             if ( aObj.SetSmartURL( aEDURL.GetText() ) )
928                 aURL = aObj.GetMainURL( INetURLObject::NO_DECODE );
929         }
930 
931         if ( !m_xObj.is() && aURL.getLength() )
932 		{
933             // create the object
934             ::rtl::OUString aName;
935             SvGlobalName aClassId( SO3_IFRAME_CLASSID );
936             m_xObj = aCnt.CreateEmbeddedObject( aClassId.GetByteSequence(), aName );
937             if ( m_xObj->getCurrentState() == embed::EmbedStates::LOADED )
938                 m_xObj->changeState( embed::EmbedStates::RUNNING );
939             xSet = uno::Reference < beans::XPropertySet >( m_xObj->getComponent(), uno::UNO_QUERY );
940         }
941 
942         if ( m_xObj.is() )
943         {
944             try
945             {
946                 sal_Bool bIPActive = m_xObj->getCurrentState() == embed::EmbedStates::INPLACE_ACTIVE;
947                 if ( bIPActive )
948                     m_xObj->changeState( embed::EmbedStates::RUNNING );
949 
950                 ::rtl::OUString aName = aEDName.GetText();
951                 ScrollingMode eScroll = ScrollingNo;
952                 if ( aRBScrollingOn.IsChecked() )
953                     eScroll = ScrollingYes;
954                 if ( aRBScrollingOff.IsChecked() )
955                     eScroll = ScrollingNo;
956                 if ( aRBScrollingAuto.IsChecked() )
957                     eScroll = ScrollingAuto;
958 
959                 sal_Bool bHasBorder = aRBFrameBorderOn.IsChecked();
960 
961                 long lMarginWidth;
962                 if ( !aCBMarginWidthDefault.IsChecked() )
963                     lMarginWidth = (long) aNMMarginWidth.GetText().ToInt32();
964                 else
965                     lMarginWidth = SIZE_NOT_SET;
966 
967                 long lMarginHeight;
968                 if ( !aCBMarginHeightDefault.IsChecked() )
969                     lMarginHeight = (long) aNMMarginHeight.GetText().ToInt32();
970                 else
971                     lMarginHeight = SIZE_NOT_SET;
972 
973                 xSet->setPropertyValue( ::rtl::OUString::createFromAscii("FrameURL"), makeAny( aURL ) );
974                 xSet->setPropertyValue( ::rtl::OUString::createFromAscii("FrameName"), makeAny( aName ) );
975 
976                 if ( eScroll == ScrollingAuto )
977                     xSet->setPropertyValue( ::rtl::OUString::createFromAscii("FrameIsAutoScroll"),
978                         makeAny( sal_True ) );
979                 else
980                     xSet->setPropertyValue( ::rtl::OUString::createFromAscii("FrameIsScrollingMode"),
981                         makeAny( (sal_Bool) ( eScroll == ScrollingYes) ) );
982 
983                 //if ( aFrmDescr.IsFrameBorderSet() )
984                     xSet->setPropertyValue( ::rtl::OUString::createFromAscii("FrameIsBorder"),
985                         makeAny( bHasBorder ) );
986                 /*else
987                     xSet->setPropertyValue( ::rtl::OUString::createFromAscii("FrameIsAutoBorder"),
988                         makeAny( sal_True ) );*/
989 
990                 xSet->setPropertyValue( ::rtl::OUString::createFromAscii("FrameMarginWidth"),
991                     makeAny( sal_Int32( lMarginWidth ) ) );
992 
993                 xSet->setPropertyValue( ::rtl::OUString::createFromAscii("FrameMarginHeight"),
994                     makeAny( sal_Int32( lMarginHeight ) ) );
995 
996                 if ( bIPActive )
997                     m_xObj->changeState( embed::EmbedStates::INPLACE_ACTIVE );
998             }
999             catch ( uno::Exception& )
1000             {
1001                 DBG_ERROR( "No IFrame!" );
1002             }
1003         }
1004     }
1005 
1006     return nRet;
1007 }
1008 
1009 //------------------------------------------------------------------------------
1010 
1011 IMPL_STATIC_LINK( SfxInsertFloatingFrameDialog, CheckHdl, CheckBox*, pCB )
1012 {
1013 	if ( pCB == &pThis->aCBMarginWidthDefault )
1014 	{
1015 		if ( pCB->IsChecked() )
1016 			pThis->aNMMarginWidth.SetText( String::CreateFromInt32( DEFAULT_MARGIN_WIDTH ) );
1017 		pThis->aFTMarginWidth.Enable( !pCB->IsChecked() );
1018 		pThis->aNMMarginWidth.Enable( !pCB->IsChecked() );
1019 	}
1020 
1021 	if ( pCB == &pThis->aCBMarginHeightDefault )
1022 	{
1023 		if ( pCB->IsChecked() )
1024 			pThis->aNMMarginHeight.SetText( String::CreateFromInt32( DEFAULT_MARGIN_HEIGHT ) );
1025 		pThis->aFTMarginHeight.Enable( !pCB->IsChecked() );
1026 		pThis->aNMMarginHeight.Enable( !pCB->IsChecked() );
1027 	}
1028 
1029 	return 0L;
1030 }
1031 
1032 //------------------------------------------------------------------------------
1033 
1034 IMPL_STATIC_LINK( SfxInsertFloatingFrameDialog, OpenHdl, PushButton*, EMPTYARG )
1035 {
1036     Window* pOldParent = Application::GetDefDialogParent();
1037 	Application::SetDefDialogParent( pThis );
1038 
1039     // create the file dialog
1040 	sfx2::FileDialogHelper aFileDlg( WB_OPEN | SFXWB_PASSWORD, String() );
1041 
1042 	// set the title
1043     aFileDlg.SetTitle( OUString( String( CUI_RES( MD_INSERT_OBJECT_IFRAME ) ) ) );
1044 
1045 	// show the dialog
1046     if ( aFileDlg.Execute() == ERRCODE_NONE )
1047 		pThis->aEDURL.SetText(
1048 			INetURLObject( aFileDlg.GetPath() ).GetMainURL( INetURLObject::DECODE_WITH_CHARSET ) );
1049 
1050     Application::SetDefDialogParent( pOldParent );
1051 	return 0L;
1052 }
1053 
1054