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