15293aa41SIngo Weinhold //------------------------------------------------------------------------------
2*2ca13760SColdfirex // Copyright (c) 2001-2002, Haiku
35293aa41SIngo Weinhold //
45293aa41SIngo Weinhold // Permission is hereby granted, free of charge, to any person obtaining a
55293aa41SIngo Weinhold // copy of this software and associated documentation files (the "Software"),
65293aa41SIngo Weinhold // to deal in the Software without restriction, including without limitation
75293aa41SIngo Weinhold // the rights to use, copy, modify, merge, publish, distribute, sublicense,
85293aa41SIngo Weinhold // and/or sell copies of the Software, and to permit persons to whom the
95293aa41SIngo Weinhold // Software is furnished to do so, subject to the following conditions:
105293aa41SIngo Weinhold //
115293aa41SIngo Weinhold // The above copyright notice and this permission notice shall be included in
125293aa41SIngo Weinhold // all copies or substantial portions of the Software.
135293aa41SIngo Weinhold //
145293aa41SIngo Weinhold // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
155293aa41SIngo Weinhold // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
165293aa41SIngo Weinhold // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
175293aa41SIngo Weinhold // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
185293aa41SIngo Weinhold // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
195293aa41SIngo Weinhold // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
205293aa41SIngo Weinhold // DEALINGS IN THE SOFTWARE.
215293aa41SIngo Weinhold //
225293aa41SIngo Weinhold // File Name: MessageEvent.cpp
235293aa41SIngo Weinhold // Author: Ingo Weinhold (bonefish@users.sf.net)
245293aa41SIngo Weinhold // YellowBites (http://www.yellowbites.com)
255293aa41SIngo Weinhold // Description: A special event that sends a message when executed.
265293aa41SIngo Weinhold //------------------------------------------------------------------------------
275293aa41SIngo Weinhold
285293aa41SIngo Weinhold #include <Handler.h>
295293aa41SIngo Weinhold #include <Looper.h>
305293aa41SIngo Weinhold
315293aa41SIngo Weinhold #include "MessageEvent.h"
325293aa41SIngo Weinhold
335293aa41SIngo Weinhold /*! \class MessageEvent
345293aa41SIngo Weinhold \brief A special event that sends a message when executed.
355293aa41SIngo Weinhold
365293aa41SIngo Weinhold The constructors set the "auto delete" flag to \c true by default. It can
375293aa41SIngo Weinhold be changed by SetAutoDelete(), but note, that the object's creator is
385293aa41SIngo Weinhold responsible for its destruction then.
395293aa41SIngo Weinhold */
405293aa41SIngo Weinhold
415293aa41SIngo Weinhold /*! \var BMessage MessageEvent::fMessage
425293aa41SIngo Weinhold \brief Message to be sent.
435293aa41SIngo Weinhold */
445293aa41SIngo Weinhold
455293aa41SIngo Weinhold /*! \var BMessenger MessageEvent::fMessenger
465293aa41SIngo Weinhold \brief Message target.
475293aa41SIngo Weinhold
485293aa41SIngo Weinhold Valid only, if \a fHandler is \c NULL.
495293aa41SIngo Weinhold */
505293aa41SIngo Weinhold
515293aa41SIngo Weinhold /*! \var BHandler *MessageEvent::fHandler
525293aa41SIngo Weinhold \brief Message target.
535293aa41SIngo Weinhold
545293aa41SIngo Weinhold May be \c NULL, then \a fMessenger specifies the message target.
555293aa41SIngo Weinhold */
565293aa41SIngo Weinhold
575293aa41SIngo Weinhold
585293aa41SIngo Weinhold // constructor
595293aa41SIngo Weinhold /*! \brief Creates a new MessageEvent with a target BHandler and a message
605293aa41SIngo Weinhold command.
615293aa41SIngo Weinhold
625293aa41SIngo Weinhold \note The supplied BHandler must be valid the whole life time of the
635293aa41SIngo Weinhold MessageEvent.
645293aa41SIngo Weinhold
655293aa41SIngo Weinhold \param time The time at which the message shall be sent.
665293aa41SIngo Weinhold \param handler The BHandler to which the message shall be delivered.
675293aa41SIngo Weinhold \param command The "what" field of the message to be sent.
685293aa41SIngo Weinhold */
MessageEvent(bigtime_t time,BHandler * handler,uint32 command)695293aa41SIngo Weinhold MessageEvent::MessageEvent(bigtime_t time, BHandler* handler, uint32 command)
705293aa41SIngo Weinhold : Event(time, true),
715293aa41SIngo Weinhold fMessage(command),
725293aa41SIngo Weinhold fMessenger(),
735293aa41SIngo Weinhold fHandler(handler)
745293aa41SIngo Weinhold {
755293aa41SIngo Weinhold }
765293aa41SIngo Weinhold
775293aa41SIngo Weinhold // constructor
785293aa41SIngo Weinhold /*! \brief Creates a new MessageEvent with a target BHandler and a message.
795293aa41SIngo Weinhold
805293aa41SIngo Weinhold The caller retains ownership of the supplied message. It can savely be
815293aa41SIngo Weinhold deleted after the constructor returns.
825293aa41SIngo Weinhold
835293aa41SIngo Weinhold \note The supplied BHandler must be valid the whole life time of the
845293aa41SIngo Weinhold MessageEvent.
855293aa41SIngo Weinhold
865293aa41SIngo Weinhold \param time The time at which the message shall be sent.
875293aa41SIngo Weinhold \param handler The BHandler to which the message shall be delivered.
885293aa41SIngo Weinhold \param message The message to be sent.
895293aa41SIngo Weinhold */
MessageEvent(bigtime_t time,BHandler * handler,const BMessage * message)905293aa41SIngo Weinhold MessageEvent::MessageEvent(bigtime_t time, BHandler* handler,
915293aa41SIngo Weinhold const BMessage *message)
925293aa41SIngo Weinhold : Event(time, true),
935293aa41SIngo Weinhold fMessage(*message),
945293aa41SIngo Weinhold fMessenger(),
955293aa41SIngo Weinhold fHandler(handler)
965293aa41SIngo Weinhold {
975293aa41SIngo Weinhold }
985293aa41SIngo Weinhold
995293aa41SIngo Weinhold // constructor
1005293aa41SIngo Weinhold /*! \brief Creates a new MessageEvent with a target BMessenger and a message
1015293aa41SIngo Weinhold command.
1025293aa41SIngo Weinhold \param time The time at which the message shall be sent.
1035293aa41SIngo Weinhold \param messenger The BMessenger specifying the target to which the message
1045293aa41SIngo Weinhold shall be delivered.
1055293aa41SIngo Weinhold \param command The "what" field of the message to be sent.
1065293aa41SIngo Weinhold */
MessageEvent(bigtime_t time,const BMessenger & messenger,uint32 command)1075293aa41SIngo Weinhold MessageEvent::MessageEvent(bigtime_t time, const BMessenger& messenger,
1085293aa41SIngo Weinhold uint32 command)
1095293aa41SIngo Weinhold : Event(time, true),
1105293aa41SIngo Weinhold fMessage(command),
1115293aa41SIngo Weinhold fMessenger(messenger),
1125293aa41SIngo Weinhold fHandler(NULL)
1135293aa41SIngo Weinhold {
1145293aa41SIngo Weinhold }
1155293aa41SIngo Weinhold
1165293aa41SIngo Weinhold // constructor
1175293aa41SIngo Weinhold /*! \brief Creates a new MessageEvent with a target BMessenger and a message.
1185293aa41SIngo Weinhold
1195293aa41SIngo Weinhold The caller retains ownership of the supplied message. It can savely be
1205293aa41SIngo Weinhold deleted after the constructor returns.
1215293aa41SIngo Weinhold
1225293aa41SIngo Weinhold \param time The time at which the message shall be sent.
1235293aa41SIngo Weinhold \param messenger The BMessenger specifying the target to which the message
1245293aa41SIngo Weinhold shall be delivered.
1255293aa41SIngo Weinhold \param message The message to be sent.
1265293aa41SIngo Weinhold */
MessageEvent(bigtime_t time,const BMessenger & messenger,const BMessage * message)1275293aa41SIngo Weinhold MessageEvent::MessageEvent(bigtime_t time, const BMessenger& messenger,
1285293aa41SIngo Weinhold const BMessage *message)
1295293aa41SIngo Weinhold : Event(time, true),
1305293aa41SIngo Weinhold fMessage(*message),
1315293aa41SIngo Weinhold fMessenger(messenger),
1325293aa41SIngo Weinhold fHandler(NULL)
1335293aa41SIngo Weinhold {
1345293aa41SIngo Weinhold }
1355293aa41SIngo Weinhold
1365293aa41SIngo Weinhold // destructor
1375293aa41SIngo Weinhold /*! \brief Frees all resources associated with the object.
1385293aa41SIngo Weinhold */
~MessageEvent()1395293aa41SIngo Weinhold MessageEvent::~MessageEvent()
1405293aa41SIngo Weinhold {
1415293aa41SIngo Weinhold }
1425293aa41SIngo Weinhold
1435293aa41SIngo Weinhold // Do
1445293aa41SIngo Weinhold /*! \brief Hook method invoked when the event is executed.
1455293aa41SIngo Weinhold
1465293aa41SIngo Weinhold Implements Event. Delivers the message to the target.
1475293aa41SIngo Weinhold
1485293aa41SIngo Weinhold \param queue The event queue executing the event.
1495293aa41SIngo Weinhold \return \c true, if the object shall be deleted, \c false otherwise.
1505293aa41SIngo Weinhold */
1515293aa41SIngo Weinhold bool
Do(EventQueue * queue)1525293aa41SIngo Weinhold MessageEvent::Do(EventQueue *queue)
1535293aa41SIngo Weinhold {
1545293aa41SIngo Weinhold if (fHandler) {
1555293aa41SIngo Weinhold if (BLooper* looper = fHandler->Looper())
1565293aa41SIngo Weinhold looper->PostMessage(&fMessage, fHandler);
1575293aa41SIngo Weinhold } else
1585293aa41SIngo Weinhold fMessenger.SendMessage(&fMessage);
1595293aa41SIngo Weinhold return false;
1605293aa41SIngo Weinhold }
1615293aa41SIngo Weinhold
162