00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef __CH_EventManager__
00033 #define __CH_EventManager__
00034
00035 #include "CH_API.h"
00036 #include <UT/UT_HashTable.h>
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 typedef enum {
00047 CH_UNCHANGED,
00048
00049 CH_CHANNELS_DELETED,
00050 CH_CHANNELS_ADDED,
00051 CH_CHANNELS_MAJOR_CHANGE,
00052 CH_CHANNEL_CHANGED,
00053 CH_CHANNEL_UICHANGED,
00054 CH_PARM_ENABLE_CHANGED,
00055 CH_CHANNELS_MOVED,
00056 CH_PERMISSION_CHANGED,
00057
00058
00059 CH_GROUP_CREATED,
00060 CH_GROUP_REMOVED,
00061 CH_GROUP_RENAMED,
00062 CH_GROUP_MOVED,
00063 CH_GROUP_SELCHANGED,
00064 CH_GROUP_CURCHANGED,
00065 CH_GROUP_CHANGED,
00066
00067 CH_SCOPE_CHANGED,
00068 CH_SCOPE_PIN_CHANGED,
00069 CH_SCOPE_SELECTION_CHANGED,
00070 CH_SCOPE_DISPLAY_CHANGED,
00071
00072 CH_CHANGE_TYPE_COUNT
00073 } CH_CHANGE_TYPE;
00074
00075 CH_API extern const char * CHeventNames[CH_CHANGE_TYPE_COUNT];
00076
00077 class CH_API CH_EventHandler
00078 {
00079 public:
00080 CH_EventHandler() {}
00081 virtual ~CH_EventHandler() {}
00082 virtual void event( CH_CHANGE_TYPE, void * );
00083
00084 static CH_EventHandler *newHandler()
00085 {
00086 return new CH_EventHandler;
00087 }
00088 };
00089
00090 typedef CH_EventHandler *(*CH_EventHandlerCreator)();
00091
00092
00093 class CH_Collection;
00094
00095 class CH_API CH_EventHandlerHash: public CH_EventHandler
00096 {
00097 public:
00098 CH_EventHandlerHash();
00099 virtual ~CH_EventHandlerHash();
00100 virtual void event( CH_CHANGE_TYPE, void * );
00101
00102 static CH_EventHandler *newHandler()
00103 {
00104 return new CH_EventHandlerHash;
00105 }
00106 private:
00107 UT_HashTable myOccurred[CH_CHANGE_TYPE_COUNT];
00108 bool myScopeChanged;
00109 CH_Collection *myRootCollection;
00110 };
00111
00112 class CH_API CH_EventManager
00113 {
00114 public:
00115 CH_EventManager();
00116 virtual ~CH_EventManager();
00117
00118 void beginHandlingEvents( CH_EventHandlerCreator creator );
00119 void endHandlingEvents();
00120
00121 CH_EventHandler *getHandler();
00122
00123 private:
00124 CH_EventHandler *myDefaultHandler;
00125 CH_EventHandler *myCurrentHandler;
00126 int myLevels;
00127 };
00128
00129 CH_API CH_EventManager *CHgetEventManager();
00130
00131
00132 CH_API void CHevent( CH_CHANGE_TYPE, void * );
00133
00134 class CH_API CH_AutoEventHandler
00135 {
00136 public:
00137 CH_AutoEventHandler( CH_EventHandlerCreator creator )
00138 {
00139 CHgetEventManager()->beginHandlingEvents( creator );
00140 }
00141
00142 ~CH_AutoEventHandler()
00143 {
00144 CHgetEventManager()->endHandlingEvents();
00145 }
00146 };
00147
00148 #endif