1/* 2 * Copyright 2006-2007, Haiku. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Stephan A��mus <superstippi@gmx.de> 7 */ 8#ifndef NOTIFIER_H 9#define NOTIFIER_H 10 11#include <List.h> 12 13class Listener; 14 15class Notifier { 16 public: 17 Notifier(); 18 virtual ~Notifier(); 19 20 bool AddListener(Listener* listener); 21 bool RemoveListener(Listener* listener); 22 23 int32 CountListeners() const; 24 Listener* ListenerAtFast(int32 index) const; 25 26 void Notify() const; 27 28 void SuspendNotifications(bool suspend); 29 30 bool HasPendingNotifications() const 31 { return fPendingNotifications; } 32 33 private: 34 BList fListeners; 35 36 int32 fSuspended; 37 mutable bool fPendingNotifications; 38}; 39 40class AutoNotificationSuspender { 41 public: 42 AutoNotificationSuspender(Notifier* object) 43 : fObject(object) 44 { 45 fObject->SuspendNotifications(true); 46 } 47 48 virtual ~AutoNotificationSuspender() 49 { 50 fObject->SuspendNotifications(false); 51 } 52 private: 53 Notifier* fObject; 54}; 55 56#endif // NOTIFIER_H 57