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 #ifndef INCLUDED_SLIDESHOW_DELAYEVENT_HXX 24 #define INCLUDED_SLIDESHOW_DELAYEVENT_HXX 25 26 #include <boost/function.hpp> 27 28 #include "event.hxx" 29 #include "debug.hxx" 30 #include <boost/noncopyable.hpp> 31 32 namespace slideshow { 33 namespace internal { 34 35 /** Event, which delays the functor call the given amount of time 36 */ 37 class Delay : public Event, private ::boost::noncopyable 38 { 39 public: 40 typedef ::boost::function0<void> FunctorT; 41 42 template <typename FuncT> 43 Delay( FuncT const& func, 44 double nTimeout 45 #if OSL_DEBUG_LEVEL > 1 46 , const ::rtl::OUString& rsDescription 47 ) : Event(rsDescription), 48 #else 49 ) : 50 #endif 51 mnTimeout(nTimeout), maFunc(func), mbWasFired(false) {} 52 53 Delay( const boost::function0<void>& func, 54 double nTimeout 55 #if OSL_DEBUG_LEVEL > 1 56 , const ::rtl::OUString& rsDescription 57 ) : Event(rsDescription), 58 #else 59 ) : 60 #endif 61 mnTimeout(nTimeout), 62 maFunc(func), 63 mbWasFired(false) {} 64 65 // Event: 66 virtual bool fire(); 67 virtual bool isCharged() const; 68 virtual double getActivationTime( double nCurrentTime ) const; 69 // Disposable: 70 virtual void dispose(); 71 72 private: 73 double const mnTimeout; 74 FunctorT maFunc; 75 bool mbWasFired; 76 }; 77 78 #if OSL_DEBUG_LEVEL <= 1 79 80 /** Generate delay event 81 82 @param func 83 Functor to call when the event fires. 84 85 @param nTimeout 86 Timeout in seconds, to wait until functor is called. 87 88 @return generated delay event 89 */ 90 template <typename FuncT> 91 inline EventSharedPtr makeDelay_( FuncT const& func, double nTimeout ) 92 { 93 return EventSharedPtr( new Delay( func, nTimeout ) ); 94 } 95 96 /** Generate immediate event 97 98 @param func 99 Functor to call when the event fires. 100 101 @return generated immediate event. 102 */ 103 template <typename FuncT> 104 inline EventSharedPtr makeEvent_( FuncT const& func ) 105 { 106 return EventSharedPtr( new Delay( func, 0.0 ) ); 107 } 108 109 110 // Strip away description. 111 #define makeDelay(f, t, d) makeDelay_(f, t) 112 #define makeEvent(f, d) makeEvent_(f) 113 114 #else // OSL_DEBUG_LEVEL > 1 115 116 class Delay_ : public Delay { 117 public: 118 template <typename FuncT> 119 Delay_( FuncT const& func, double nTimeout, 120 char const* from_function, char const* from_file, int from_line, 121 const ::rtl::OUString& rsDescription) 122 : Delay(func, nTimeout, rsDescription), 123 FROM_FUNCTION(from_function), 124 FROM_FILE(from_file), FROM_LINE(from_line) {} 125 126 char const* const FROM_FUNCTION; 127 char const* const FROM_FILE; 128 int const FROM_LINE; 129 }; 130 131 template <typename FuncT> 132 inline EventSharedPtr makeDelay_( 133 FuncT const& func, double nTimeout, 134 char const* from_function, char const* from_file, int from_line, 135 const ::rtl::OUString& rsDescription) 136 { 137 return EventSharedPtr( new Delay_( func, nTimeout, 138 from_function, from_file, from_line, rsDescription) ); 139 } 140 141 #define makeDelay(f, t, d) makeDelay_(f, t, \ 142 BOOST_CURRENT_FUNCTION, __FILE__, __LINE__, \ 143 ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(d))) 144 #define makeEvent(f, d) makeDelay_(f, 0.0, \ 145 BOOST_CURRENT_FUNCTION, __FILE__, __LINE__, \ 146 ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(d))) 147 148 #endif // OSL_DEBUG_LEVEL <= 1 149 150 } // namespace internal 151 } // namespace presentation 152 153 #endif /* INCLUDED_SLIDESHOW_DELAYEVENT_HXX */ 154