1*5293aa41SIngo Weinhold //------------------------------------------------------------------------------ 2*5293aa41SIngo Weinhold // Copyright (c) 2001-2002, OpenBeOS 3*5293aa41SIngo Weinhold // 4*5293aa41SIngo Weinhold // Permission is hereby granted, free of charge, to any person obtaining a 5*5293aa41SIngo Weinhold // copy of this software and associated documentation files (the "Software"), 6*5293aa41SIngo Weinhold // to deal in the Software without restriction, including without limitation 7*5293aa41SIngo Weinhold // the rights to use, copy, modify, merge, publish, distribute, sublicense, 8*5293aa41SIngo Weinhold // and/or sell copies of the Software, and to permit persons to whom the 9*5293aa41SIngo Weinhold // Software is furnished to do so, subject to the following conditions: 10*5293aa41SIngo Weinhold // 11*5293aa41SIngo Weinhold // The above copyright notice and this permission notice shall be included in 12*5293aa41SIngo Weinhold // all copies or substantial portions of the Software. 13*5293aa41SIngo Weinhold // 14*5293aa41SIngo Weinhold // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15*5293aa41SIngo Weinhold // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16*5293aa41SIngo Weinhold // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17*5293aa41SIngo Weinhold // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18*5293aa41SIngo Weinhold // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19*5293aa41SIngo Weinhold // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20*5293aa41SIngo Weinhold // DEALINGS IN THE SOFTWARE. 21*5293aa41SIngo Weinhold // 22*5293aa41SIngo Weinhold // File Name: MessageEvent.cpp 23*5293aa41SIngo Weinhold // Author: Ingo Weinhold (bonefish@users.sf.net) 24*5293aa41SIngo Weinhold // YellowBites (http://www.yellowbites.com) 25*5293aa41SIngo Weinhold // Description: A special event that sends a message when executed. 26*5293aa41SIngo Weinhold //------------------------------------------------------------------------------ 27*5293aa41SIngo Weinhold 28*5293aa41SIngo Weinhold #include <Handler.h> 29*5293aa41SIngo Weinhold #include <Looper.h> 30*5293aa41SIngo Weinhold 31*5293aa41SIngo Weinhold #include "MessageEvent.h" 32*5293aa41SIngo Weinhold 33*5293aa41SIngo Weinhold /*! \class MessageEvent 34*5293aa41SIngo Weinhold \brief A special event that sends a message when executed. 35*5293aa41SIngo Weinhold 36*5293aa41SIngo Weinhold The constructors set the "auto delete" flag to \c true by default. It can 37*5293aa41SIngo Weinhold be changed by SetAutoDelete(), but note, that the object's creator is 38*5293aa41SIngo Weinhold responsible for its destruction then. 39*5293aa41SIngo Weinhold */ 40*5293aa41SIngo Weinhold 41*5293aa41SIngo Weinhold /*! \var BMessage MessageEvent::fMessage 42*5293aa41SIngo Weinhold \brief Message to be sent. 43*5293aa41SIngo Weinhold */ 44*5293aa41SIngo Weinhold 45*5293aa41SIngo Weinhold /*! \var BMessenger MessageEvent::fMessenger 46*5293aa41SIngo Weinhold \brief Message target. 47*5293aa41SIngo Weinhold 48*5293aa41SIngo Weinhold Valid only, if \a fHandler is \c NULL. 49*5293aa41SIngo Weinhold */ 50*5293aa41SIngo Weinhold 51*5293aa41SIngo Weinhold /*! \var BHandler *MessageEvent::fHandler 52*5293aa41SIngo Weinhold \brief Message target. 53*5293aa41SIngo Weinhold 54*5293aa41SIngo Weinhold May be \c NULL, then \a fMessenger specifies the message target. 55*5293aa41SIngo Weinhold */ 56*5293aa41SIngo Weinhold 57*5293aa41SIngo Weinhold 58*5293aa41SIngo Weinhold // constructor 59*5293aa41SIngo Weinhold /*! \brief Creates a new MessageEvent with a target BHandler and a message 60*5293aa41SIngo Weinhold command. 61*5293aa41SIngo Weinhold 62*5293aa41SIngo Weinhold \note The supplied BHandler must be valid the whole life time of the 63*5293aa41SIngo Weinhold MessageEvent. 64*5293aa41SIngo Weinhold 65*5293aa41SIngo Weinhold \param time The time at which the message shall be sent. 66*5293aa41SIngo Weinhold \param handler The BHandler to which the message shall be delivered. 67*5293aa41SIngo Weinhold \param command The "what" field of the message to be sent. 68*5293aa41SIngo Weinhold */ 69*5293aa41SIngo Weinhold MessageEvent::MessageEvent(bigtime_t time, BHandler* handler, uint32 command) 70*5293aa41SIngo Weinhold : Event(time, true), 71*5293aa41SIngo Weinhold fMessage(command), 72*5293aa41SIngo Weinhold fMessenger(), 73*5293aa41SIngo Weinhold fHandler(handler) 74*5293aa41SIngo Weinhold { 75*5293aa41SIngo Weinhold } 76*5293aa41SIngo Weinhold 77*5293aa41SIngo Weinhold // constructor 78*5293aa41SIngo Weinhold /*! \brief Creates a new MessageEvent with a target BHandler and a message. 79*5293aa41SIngo Weinhold 80*5293aa41SIngo Weinhold The caller retains ownership of the supplied message. It can savely be 81*5293aa41SIngo Weinhold deleted after the constructor returns. 82*5293aa41SIngo Weinhold 83*5293aa41SIngo Weinhold \note The supplied BHandler must be valid the whole life time of the 84*5293aa41SIngo Weinhold MessageEvent. 85*5293aa41SIngo Weinhold 86*5293aa41SIngo Weinhold \param time The time at which the message shall be sent. 87*5293aa41SIngo Weinhold \param handler The BHandler to which the message shall be delivered. 88*5293aa41SIngo Weinhold \param message The message to be sent. 89*5293aa41SIngo Weinhold */ 90*5293aa41SIngo Weinhold MessageEvent::MessageEvent(bigtime_t time, BHandler* handler, 91*5293aa41SIngo Weinhold const BMessage *message) 92*5293aa41SIngo Weinhold : Event(time, true), 93*5293aa41SIngo Weinhold fMessage(*message), 94*5293aa41SIngo Weinhold fMessenger(), 95*5293aa41SIngo Weinhold fHandler(handler) 96*5293aa41SIngo Weinhold { 97*5293aa41SIngo Weinhold } 98*5293aa41SIngo Weinhold 99*5293aa41SIngo Weinhold // constructor 100*5293aa41SIngo Weinhold /*! \brief Creates a new MessageEvent with a target BMessenger and a message 101*5293aa41SIngo Weinhold command. 102*5293aa41SIngo Weinhold \param time The time at which the message shall be sent. 103*5293aa41SIngo Weinhold \param messenger The BMessenger specifying the target to which the message 104*5293aa41SIngo Weinhold shall be delivered. 105*5293aa41SIngo Weinhold \param command The "what" field of the message to be sent. 106*5293aa41SIngo Weinhold */ 107*5293aa41SIngo Weinhold MessageEvent::MessageEvent(bigtime_t time, const BMessenger& messenger, 108*5293aa41SIngo Weinhold uint32 command) 109*5293aa41SIngo Weinhold : Event(time, true), 110*5293aa41SIngo Weinhold fMessage(command), 111*5293aa41SIngo Weinhold fMessenger(messenger), 112*5293aa41SIngo Weinhold fHandler(NULL) 113*5293aa41SIngo Weinhold { 114*5293aa41SIngo Weinhold } 115*5293aa41SIngo Weinhold 116*5293aa41SIngo Weinhold // constructor 117*5293aa41SIngo Weinhold /*! \brief Creates a new MessageEvent with a target BMessenger and a message. 118*5293aa41SIngo Weinhold 119*5293aa41SIngo Weinhold The caller retains ownership of the supplied message. It can savely be 120*5293aa41SIngo Weinhold deleted after the constructor returns. 121*5293aa41SIngo Weinhold 122*5293aa41SIngo Weinhold \param time The time at which the message shall be sent. 123*5293aa41SIngo Weinhold \param messenger The BMessenger specifying the target to which the message 124*5293aa41SIngo Weinhold shall be delivered. 125*5293aa41SIngo Weinhold \param message The message to be sent. 126*5293aa41SIngo Weinhold */ 127*5293aa41SIngo Weinhold MessageEvent::MessageEvent(bigtime_t time, const BMessenger& messenger, 128*5293aa41SIngo Weinhold const BMessage *message) 129*5293aa41SIngo Weinhold : Event(time, true), 130*5293aa41SIngo Weinhold fMessage(*message), 131*5293aa41SIngo Weinhold fMessenger(messenger), 132*5293aa41SIngo Weinhold fHandler(NULL) 133*5293aa41SIngo Weinhold { 134*5293aa41SIngo Weinhold } 135*5293aa41SIngo Weinhold 136*5293aa41SIngo Weinhold // destructor 137*5293aa41SIngo Weinhold /*! \brief Frees all resources associated with the object. 138*5293aa41SIngo Weinhold */ 139*5293aa41SIngo Weinhold MessageEvent::~MessageEvent() 140*5293aa41SIngo Weinhold { 141*5293aa41SIngo Weinhold } 142*5293aa41SIngo Weinhold 143*5293aa41SIngo Weinhold // Do 144*5293aa41SIngo Weinhold /*! \brief Hook method invoked when the event is executed. 145*5293aa41SIngo Weinhold 146*5293aa41SIngo Weinhold Implements Event. Delivers the message to the target. 147*5293aa41SIngo Weinhold 148*5293aa41SIngo Weinhold \param queue The event queue executing the event. 149*5293aa41SIngo Weinhold \return \c true, if the object shall be deleted, \c false otherwise. 150*5293aa41SIngo Weinhold */ 151*5293aa41SIngo Weinhold bool 152*5293aa41SIngo Weinhold MessageEvent::Do(EventQueue *queue) 153*5293aa41SIngo Weinhold { 154*5293aa41SIngo Weinhold if (fHandler) { 155*5293aa41SIngo Weinhold if (BLooper* looper = fHandler->Looper()) 156*5293aa41SIngo Weinhold looper->PostMessage(&fMessage, fHandler); 157*5293aa41SIngo Weinhold } else 158*5293aa41SIngo Weinhold fMessenger.SendMessage(&fMessage); 159*5293aa41SIngo Weinhold return false; 160*5293aa41SIngo Weinhold } 161*5293aa41SIngo Weinhold 162