00001 #ifndef COIN_SOSENSORMANAGER_H
00002 #define COIN_SOSENSORMANAGER_H
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 #include <Inventor/SbBasic.h>
00028
00029 class SoDelayQueueSensor;
00030 class SoTimerQueueSensor;
00031 class SoTimerSensor;
00032 class SbTime;
00033
00034 class COIN_DLL_API SoSensorManager {
00035 public:
00036 SoSensorManager(void);
00037 ~SoSensorManager();
00038
00039 void insertDelaySensor(SoDelayQueueSensor * s);
00040 void insertTimerSensor(SoTimerQueueSensor * s);
00041 void removeDelaySensor(SoDelayQueueSensor * s);
00042 void removeTimerSensor(SoTimerQueueSensor * s);
00043
00044 void setChangedCallback(void (*func)(void *), void * data);
00045
00046 void rescheduleTimer(SoTimerSensor * s);
00047 void removeRescheduledTimer(SoTimerQueueSensor * s);
00048
00049 void processDelayQueue(SbBool isidle);
00050 void processImmediateQueue(void);
00051 void processTimerQueue(void);
00052
00053 SbBool isDelaySensorPending(void);
00054 SbBool isTimerSensorPending(SbTime & tm);
00055
00056 void setDelaySensorTimeout(const SbTime & t);
00057 const SbTime & getDelaySensorTimeout(void);
00058
00059 int doSelect(int nfds, void * readfds, void * writefds,
00060 void * exceptfds, struct timeval * userTimeOut);
00061
00062 private:
00063 void notifyChanged(void);
00064
00065 int mergeTimerQueues(void);
00066 int mergeDelayQueues(void);
00067
00068 class SoSensorManagerP * pimpl;
00069 friend class SoSensorManagerP;
00070 };
00071
00072 #endif // !COIN_SOSENSORMANAGER_H