1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_dbaccess.hxx" 30 31 #ifndef DBACCESS_ASYNCMODALDIALOG_HXX 32 #include "asyncmodaldialog.hxx" 33 #endif 34 35 /** === begin UNO includes === **/ 36 #ifndef _COM_SUN_STAR_LANG_ILLEGALARGUMENTEXCEPTION_HPP_ 37 #include <com/sun/star/lang/IllegalArgumentException.hpp> 38 #endif 39 /** === end UNO includes === **/ 40 41 #ifndef _SV_SVAPP_HXX 42 #include <vcl/svapp.hxx> 43 #endif 44 #ifndef TOOLS_DIAGNOSE_EX_H 45 #include <tools/diagnose_ex.h> 46 #endif 47 48 //........................................................................ 49 namespace dbaui 50 { 51 //........................................................................ 52 53 /** === begin UNO using === **/ 54 using ::com::sun::star::uno::Reference; 55 using ::com::sun::star::ui::dialogs::XExecutableDialog; 56 using ::com::sun::star::lang::IllegalArgumentException; 57 using ::com::sun::star::uno::Exception; 58 /** === end UNO using === **/ 59 60 //==================================================================== 61 //= AsyncDialogExecutor 62 //==================================================================== 63 class DialogExecutor_Impl 64 { 65 Reference< XExecutableDialog > m_xDialog; 66 67 public: 68 DialogExecutor_Impl( const Reference< XExecutableDialog >& _rxDialog ) 69 :m_xDialog( _rxDialog ) 70 { 71 } 72 73 void execute() 74 { 75 Application::PostUserEvent( LINK( this, DialogExecutor_Impl, onExecute ) ); 76 } 77 78 protected: 79 ~DialogExecutor_Impl() 80 { 81 } 82 83 private: 84 DECL_LINK( onExecute, void* ); 85 }; 86 87 //-------------------------------------------------------------------- 88 IMPL_LINK( DialogExecutor_Impl, onExecute, void*, /* _notInterestedIn */ ) 89 { 90 try 91 { 92 m_xDialog->execute(); 93 } 94 catch( const Exception& ) 95 { 96 DBG_UNHANDLED_EXCEPTION(); 97 } 98 99 delete this; 100 return 0L; 101 } 102 103 //==================================================================== 104 //= AsyncDialogExecutor 105 //==================================================================== 106 //-------------------------------------------------------------------- 107 void AsyncDialogExecutor::executeModalDialogAsync( const Reference< XExecutableDialog >& _rxDialog ) 108 { 109 if ( !_rxDialog.is() ) 110 throw IllegalArgumentException(); 111 112 113 DialogExecutor_Impl* pExecutor = new DialogExecutor_Impl( _rxDialog ); 114 pExecutor->execute(); 115 // will delete itself 116 } 117 118 //........................................................................ 119 } // namespace dbaui 120 //........................................................................ 121 122