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 #ifndef _COMPHELPER_INTERACTION_HXX_ 25 #define _COMPHELPER_INTERACTION_HXX_ 26 27 #include <comphelper/uno3.hxx> 28 #include <cppuhelper/implbase1.hxx> 29 #include <com/sun/star/task/XInteractionApprove.hpp> 30 #include <com/sun/star/task/XInteractionDisapprove.hpp> 31 #include <com/sun/star/task/XInteractionAbort.hpp> 32 #include <com/sun/star/task/XInteractionRetry.hpp> 33 #include <com/sun/star/task/XInteractionPassword.hpp> 34 #include <com/sun/star/task/XInteractionRequest.hpp> 35 #include "comphelper/comphelperdllapi.h" 36 37 //......................................................................... 38 namespace comphelper 39 { 40 //......................................................................... 41 42 //========================================================================= 43 //= OInteractionSelect 44 //========================================================================= 45 /** base class for concrete XInteractionContinuation implementations.<p/> 46 Instances of the classes maintain a flag indicating if the handler was called. 47 */ 48 class OInteractionSelect 49 { 50 sal_Bool m_bSelected : 1; /// indicates if the select event occurred 51 52 protected: OInteractionSelect()53 OInteractionSelect() : m_bSelected(sal_False) { } 54 55 public: 56 /// determines whether or not this handler was selected wasSelected() const57 sal_Bool wasSelected() const { return m_bSelected; } 58 /// resets the state to "not selected", so you may reuse the handler reset()59 void reset() { m_bSelected = sal_False; } 60 61 protected: implSelected()62 void implSelected() { m_bSelected = sal_True; } 63 }; 64 65 //========================================================================= 66 //= OInteraction 67 //========================================================================= 68 /** template for instantiating concret interaction handlers<p/> 69 the template argument must eb an interface derived from XInteractionContinuation 70 */ 71 template <class INTERACTION> 72 class OInteraction 73 :public ::cppu::WeakImplHelper1< INTERACTION > 74 ,public OInteractionSelect 75 { 76 public: OInteraction()77 OInteraction() { } 78 79 // XInteractionContinuation 80 virtual void SAL_CALL select( ) throw(::com::sun::star::uno::RuntimeException); 81 }; 82 83 //......................................................................... 84 template <class INTERACTION> select()85 void SAL_CALL OInteraction< INTERACTION >::select( ) throw(::com::sun::star::uno::RuntimeException) 86 { 87 implSelected(); 88 } 89 90 //========================================================================= 91 //= OInteractionApprove 92 //========================================================================= 93 typedef OInteraction< ::com::sun::star::task::XInteractionApprove > OInteractionApprove; 94 95 //========================================================================= 96 //= OInteractionDispprove 97 //========================================================================= 98 typedef OInteraction< ::com::sun::star::task::XInteractionDisapprove > OInteractionDisapprove; 99 100 //========================================================================= 101 //= OInteractionAbort 102 //========================================================================= 103 typedef OInteraction< ::com::sun::star::task::XInteractionAbort > OInteractionAbort; 104 105 //========================================================================= 106 //= OInteractionRetry 107 //========================================================================= 108 typedef OInteraction< ::com::sun::star::task::XInteractionRetry > OInteractionRetry; 109 110 //========================================================================= 111 //= OInteractionPassword 112 //========================================================================= 113 class COMPHELPER_DLLPUBLIC OInteractionPassword : public OInteraction< ::com::sun::star::task::XInteractionPassword > 114 { 115 public: OInteractionPassword()116 OInteractionPassword() 117 { 118 } 119 OInteractionPassword(const::rtl::OUString & _rInitialPassword)120 OInteractionPassword( const ::rtl::OUString& _rInitialPassword ) 121 :m_sPassword( _rInitialPassword ) 122 { 123 } 124 125 // XInteractionPassword 126 virtual void SAL_CALL setPassword( const ::rtl::OUString& _Password ) throw (::com::sun::star::uno::RuntimeException); 127 virtual ::rtl::OUString SAL_CALL getPassword( ) throw (::com::sun::star::uno::RuntimeException); 128 129 private: 130 ::rtl::OUString m_sPassword; 131 }; 132 133 //========================================================================= 134 //= OInteractionRequest 135 //========================================================================= 136 typedef ::cppu::WeakImplHelper1 < ::com::sun::star::task::XInteractionRequest 137 > OInteractionRequest_Base; 138 /** implements an interaction request (<type scope="com.sun.star.task">XInteractionRequest</type>)<p/> 139 at run time, you can freely add any interaction continuation objects 140 */ 141 class COMPHELPER_DLLPUBLIC OInteractionRequest : public OInteractionRequest_Base 142 { 143 ::com::sun::star::uno::Any 144 m_aRequest; /// the request we represent 145 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > 146 m_aContinuations; /// all registered continuations 147 148 public: 149 OInteractionRequest(const ::com::sun::star::uno::Any& _rRequestDescription); 150 151 /// add a new continuation 152 void addContinuation(const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >& _rxContinuation); 153 /// clear all continuations 154 void clearContinuations(); 155 156 // XInteractionRequest 157 virtual ::com::sun::star::uno::Any SAL_CALL getRequest( ) throw(::com::sun::star::uno::RuntimeException); 158 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > SAL_CALL getContinuations( ) throw(::com::sun::star::uno::RuntimeException); 159 }; 160 //......................................................................... 161 } // namespace comphelper 162 //......................................................................... 163 164 #endif // _COMPHELPER_INTERACTION_HXX_ 165 166 167