1/* 2 * Copyright 2001-2005, Haiku. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Erik Jaesler (erik@cgsoftware.com) 7 */ 8#ifndef _MESSAGE_FILTER_H 9#define _MESSAGE_FILTER_H 10 11 12#include <Handler.h> 13 14 15class BMessage; 16 17// filter_hook Return Codes and Protocol --------------------------------------- 18enum filter_result { 19 B_SKIP_MESSAGE, 20 B_DISPATCH_MESSAGE 21}; 22 23typedef filter_result (*filter_hook) 24 (BMessage* message, BHandler** target, BMessageFilter* filter); 25 26 27// BMessageFilter invocation criteria ------------------------------------------ 28enum message_delivery { 29 B_ANY_DELIVERY, 30 B_DROPPED_DELIVERY, 31 B_PROGRAMMED_DELIVERY 32}; 33 34enum message_source { 35 B_ANY_SOURCE, 36 B_REMOTE_SOURCE, 37 B_LOCAL_SOURCE 38}; 39 40 41// BMessageFilter Class -------------------------------------------------------- 42class BMessageFilter { 43 public: 44 BMessageFilter(uint32 what, 45 filter_hook func = NULL); 46 BMessageFilter(message_delivery delivery, 47 message_source source, filter_hook func = NULL); 48 BMessageFilter(message_delivery delivery, 49 message_source source, uint32 what, 50 filter_hook func = NULL); 51 BMessageFilter(const BMessageFilter& filter); 52 BMessageFilter(const BMessageFilter* filter); 53 virtual ~BMessageFilter(); 54 55 BMessageFilter& operator=(const BMessageFilter& from); 56 57 // Hook function; ignored if filter_hook is non-NULL 58 virtual filter_result Filter(BMessage* message, BHandler** _target); 59 60 message_delivery MessageDelivery() const; 61 message_source MessageSource() const; 62 uint32 Command() const; 63 bool FiltersAnyCommand() const; 64 BLooper* Looper() const; 65 66 private: 67 friend class BLooper; 68 friend class BHandler; 69 70 virtual void _ReservedMessageFilter1(); 71 virtual void _ReservedMessageFilter2(); 72 73 void SetLooper(BLooper* owner); 74 filter_hook FilterFunction() const; 75 bool fFiltersAny; 76 uint32 fWhat; 77 message_delivery fDelivery; 78 message_source fSource; 79 BLooper *fLooper; 80 filter_hook fFilterFunction; 81 uint32 _reserved[3]; 82}; 83 84#endif // _MESSAGE_FILTER_H 85