Open Inventor Reference
MeVis/ThirdParty/Sources/Inventor/inventor/lib/database/include/Inventor/sensors/SoSensor.h
Go to the documentation of this file.
00001 /*
00002  *
00003  *  Copyright (C) 2000 Silicon Graphics, Inc.  All Rights Reserved. 
00004  *
00005  *  This library is free software; you can redistribute it and/or
00006  *  modify it under the terms of the GNU Lesser General Public
00007  *  License as published by the Free Software Foundation; either
00008  *  version 2.1 of the License, or (at your option) any later version.
00009  *
00010  *  This library is distributed in the hope that it will be useful,
00011  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013  *  Lesser General Public License for more details.
00014  *
00015  *  Further, this software is distributed without any warranty that it is
00016  *  free of the rightful claim of any third person regarding infringement
00017  *  or the like.  Any license provided herein, whether implied or
00018  *  otherwise, applies only to this software file.  Patent licenses, if
00019  *  any, provided herein do not apply to combinations of this program with
00020  *  other software, or any other product whatsoever.
00021  * 
00022  *  You should have received a copy of the GNU Lesser General Public
00023  *  License along with this library; if not, write to the Free Software
00024  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00025  *
00026  *  Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
00027  *  Mountain View, CA  94043, or:
00028  * 
00029  *  http://www.sgi.com 
00030  * 
00031  *  For further information regarding this notice, see: 
00032  * 
00033  *  http://oss.sgi.com/projects/GenInfo/NoticeExplan/
00034  *
00035  */
00036 
00037 
00038 /*
00039  * Copyright (C) 1990,91,92   Silicon Graphics, Inc.
00040  *
00041  _______________________________________________________________________
00042  ______________  S I L I C O N   G R A P H I C S   I N C .  ____________
00043  |
00044  |   $Revision: 1.1.1.1 $
00045  |
00046  |   Description:
00047  |      Defines the SoSensor base class. 
00048  |      The sensor hierarchy is:
00049  |
00050  |              *SoSensor
00051  |                      *SoDelayQueueSensor
00052  |                              *SoDataSensor
00053  |                                      SoNodeSensor
00054  |                                      SoPathSensor
00055  |                                      SoFieldSensor
00056  |                              SoIdleSensor
00057  |                              SoOneShotSensor
00058  |                      *SoTimerQueueSensor
00059  |                              SoAlarmSensor
00060  |                              SoTimerSensor
00061  |
00062  |      * means the class is abstract.
00063  |
00064  |      Sensors provide a callback mechanism based on some event: a
00065  |      particular time being reached, a change to a scene graph, or
00066  |      lack of other events to process.
00067  |
00068  |   Author(s)          : Nick Thompson, Paul Strauss, Gavin Bell
00069  |
00070  ______________  S I L I C O N   G R A P H I C S   I N C .  ____________
00071  _______________________________________________________________________
00072  */
00073 
00074 #ifndef  _SO_SENSOR_
00075 #define  _SO_SENSOR_
00076 
00077 #include <Inventor/SbBasic.h>
00078 
00079 class SoField;
00080 class SoMField;
00081 class SoSensor;
00082 
00088 
00089 typedef void SoSensorCB(void *data, SoSensor *sensor);
00090 
00093 
00106 
00107 
00108 class INVENTOR_API SoSensor {
00109 
00110   public:
00111 
00113     SoSensor()                          { func = NULL; funcData = NULL; }
00114     SoSensor(SoSensorCB *f, void *d)    { func = f;    funcData = d; }
00115 
00117     virtual ~SoSensor();
00118 
00123     void                setFunction(SoSensorCB *f)      { func = f;     }
00125     void                setData(void *d)                { funcData = d; }
00128     SoSensorCB *        getFunction() const             { return func; }
00131     void *              getData() const                 { return funcData; }
00132 
00134     virtual void        schedule() = 0;
00135 
00137     virtual void        unschedule() = 0;
00138 
00140     virtual SbBool      isScheduled() const = 0;
00141 
00142   SoINTERNAL public:
00144     static void         initClass();
00145 
00147     virtual void        trigger();
00148 
00151     virtual SbBool      isBefore(const SoSensor *s) const = 0;
00152 
00154     void                setNextInQueue(SoSensor *next) { nextInQueue = next; }
00155     SoSensor *          getNextInQueue() const         { return nextInQueue; }
00156 
00157   protected:
00158     SoSensorCB *        func;           
00159     void *              funcData;       
00160 
00161   private:
00162     SoSensor            *nextInQueue;   
00163 };
00164 
00165 #endif /* _SO_SENSOR_ */