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 #if ! defined INCLUDED_DP_INTERACT_H 25 #define INCLUDED_DP_INTERACT_H 26 27 #include "rtl/ref.hxx" 28 #include "cppuhelper/implbase1.hxx" 29 #include "com/sun/star/uno/XComponentContext.hpp" 30 #include "com/sun/star/ucb/XCommandEnvironment.hpp" 31 #include "com/sun/star/task/XAbortChannel.hpp" 32 #include "dp_misc_api.hxx" 33 34 namespace css = ::com::sun::star; 35 36 namespace dp_misc 37 { 38 39 inline void progressUpdate( 40 ::rtl::OUString const & status, 41 css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv ) 42 { 43 if (xCmdEnv.is()) { 44 css::uno::Reference<css::ucb::XProgressHandler> xProgressHandler( 45 xCmdEnv->getProgressHandler() ); 46 if (xProgressHandler.is()) { 47 xProgressHandler->update( css::uno::makeAny(status) ); 48 } 49 } 50 } 51 52 //============================================================================== 53 class ProgressLevel 54 { 55 css::uno::Reference<css::ucb::XProgressHandler> m_xProgressHandler; 56 57 public: 58 inline ~ProgressLevel(); 59 inline ProgressLevel( 60 css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv, 61 ::rtl::OUString const & status ); 62 63 inline void update( ::rtl::OUString const & status ) const; 64 inline void update( css::uno::Any const & status ) const; 65 }; 66 67 //______________________________________________________________________________ 68 inline ProgressLevel::ProgressLevel( 69 css::uno::Reference< css::ucb::XCommandEnvironment > const & xCmdEnv, 70 ::rtl::OUString const & status ) 71 { 72 if (xCmdEnv.is()) 73 m_xProgressHandler = xCmdEnv->getProgressHandler(); 74 if (m_xProgressHandler.is()) 75 m_xProgressHandler->push( css::uno::makeAny(status) ); 76 } 77 78 //______________________________________________________________________________ 79 inline ProgressLevel::~ProgressLevel() 80 { 81 if (m_xProgressHandler.is()) 82 m_xProgressHandler->pop(); 83 } 84 85 //______________________________________________________________________________ 86 inline void ProgressLevel::update( ::rtl::OUString const & status ) const 87 { 88 if (m_xProgressHandler.is()) 89 m_xProgressHandler->update( css::uno::makeAny(status) ); 90 } 91 92 //______________________________________________________________________________ 93 inline void ProgressLevel::update( css::uno::Any const & status ) const 94 { 95 if (m_xProgressHandler.is()) 96 m_xProgressHandler->update( status ); 97 } 98 99 //############################################################################## 100 101 /** @return true if ia handler is present and any selection has been chosen 102 */ 103 DESKTOP_DEPLOYMENTMISC_DLLPUBLIC bool interactContinuation( 104 css::uno::Any const & request, 105 css::uno::Type const & continuation, 106 css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv, 107 bool * pcont, bool * pabort ); 108 109 //############################################################################## 110 111 //============================================================================== 112 class DESKTOP_DEPLOYMENTMISC_DLLPUBLIC AbortChannel : 113 public ::cppu::WeakImplHelper1<css::task::XAbortChannel> 114 { 115 bool m_aborted; 116 css::uno::Reference<css::task::XAbortChannel> m_xNext; 117 118 public: 119 inline AbortChannel() : m_aborted( false ) {} 120 inline static AbortChannel * get( 121 css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel ) 122 { return static_cast<AbortChannel *>(xAbortChannel.get()); } 123 124 inline bool isAborted() const { return m_aborted; } 125 126 // XAbortChannel 127 virtual void SAL_CALL sendAbort() throw (css::uno::RuntimeException); 128 129 class SAL_DLLPRIVATE Chain 130 { 131 const ::rtl::Reference<AbortChannel> m_abortChannel; 132 public: 133 inline Chain( 134 ::rtl::Reference<AbortChannel> const & abortChannel, 135 css::uno::Reference<css::task::XAbortChannel> const & xNext ) 136 : m_abortChannel( abortChannel ) 137 { if (m_abortChannel.is()) m_abortChannel->m_xNext = xNext; } 138 inline ~Chain() 139 { if (m_abortChannel.is()) m_abortChannel->m_xNext.clear(); } 140 }; 141 friend class Chain; 142 }; 143 144 } 145 146 #endif 147