00001 // @(#)root/base:$Id: TMessageHandler.h 22415 2008-03-01 11:00:27Z rdm $ 00002 // Author: Rene Brun 11/11/99 00003 00004 /************************************************************************* 00005 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. * 00006 * All rights reserved. * 00007 * * 00008 * For the licensing terms see $ROOTSYS/LICENSE. * 00009 * For the list of contributors see $ROOTSYS/README/CREDITS. * 00010 *************************************************************************/ 00011 00012 #ifndef ROOT_TMessageHandler 00013 #define ROOT_TMessageHandler 00014 00015 00016 ////////////////////////////////////////////////////////////////////////// 00017 // // 00018 // TMessageHandler // 00019 // // 00020 // Handle messages that might be generated by the system. // 00021 // By default a handler only keeps track of the different messages // 00022 // generated for a specific class. By deriving from this class and // 00023 // overriding Notify() one can implement custom message handling. // 00024 // In Notify() one has access to the message id and the object // 00025 // generating the message. One can install more than one message // 00026 // handler per class. A message handler can be removed or again // 00027 // added when needed. // 00028 // // 00029 ////////////////////////////////////////////////////////////////////////// 00030 00031 #ifndef ROOT_TNamed 00032 #include "TNamed.h" 00033 #endif 00034 #ifndef ROOT_TQObject 00035 #include "TQObject.h" 00036 #endif 00037 00038 class TMessageHandler : public TNamed, public TQObject { 00039 00040 protected: 00041 const TClass *fClass; // class for which message has to be handled 00042 const TObject *fMessObj; // object generating message 00043 Int_t fMessId; // message id (often matching specific enum in fClass) 00044 Int_t fSize; // number of different messages handled 00045 Int_t *fCnts; // count per message 00046 Int_t *fMessIds; // message ids 00047 Bool_t fDerived; // if true handle messages also for derived classes 00048 00049 void *GetSender() { return this; } //used to set gTQSender 00050 00051 public: 00052 TMessageHandler(const TClass *cl, Bool_t derived = kTRUE); 00053 TMessageHandler(const char *cl, Bool_t derived = kTRUE); 00054 virtual ~TMessageHandler(); 00055 00056 Int_t GetSize() const { return fSize; } 00057 virtual Int_t GetMessageCount(Int_t messId) const; 00058 virtual Int_t GetTotalMessageCount() const; 00059 Bool_t HandleDerived() const { return fDerived; } 00060 virtual void HandleMessage(Int_t id, const TObject *obj); 00061 00062 virtual void Print(Option_t *option= "") const; 00063 00064 virtual void Add(); 00065 virtual void Remove(); 00066 virtual Bool_t Notify(); 00067 00068 virtual void Added() { Emit("Added()"); } //*SIGNAL* 00069 virtual void Removed() { Emit("Removed()"); } //*SIGNAL* 00070 virtual void Notified() { Emit("Notified()"); } //*SIGNAL* 00071 00072 ClassDef(TMessageHandler,0) // Generic message handler 00073 }; 00074 00075 #endif