OpenTracker

An Open Architecture for Reconfigurable Tracking based on XML | Contact

QtMouseEventSinkBase.h

Go to the documentation of this file.
00001 /* ========================================================================
00002  * Copyright (c) 2006,
00003  * Institute for Computer Graphics and Vision
00004  * Graz University of Technology
00005  * All rights reserved.
00006  *
00007  * Redistribution and use in source and binary forms, with or without
00008  * modification, are permitted provided that the following conditions are
00009  * met:
00010  *
00011  * Redistributions of source code must retain the above copyright notice,
00012  * this list of conditions and the following disclaimer.
00013  *
00014  * Redistributions in binary form must reproduce the above copyright
00015  * notice, this list of conditions and the following disclaimer in the
00016  * documentation and/or other materials provided with the distribution.
00017  *
00018  * Neither the name of the Graz University of Technology nor the names of
00019  * its contributors may be used to endorse or promote products derived from
00020  * this software without specific prior written permission.
00021  *
00022  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
00023  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
00024  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00025  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
00026  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00027  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00028  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00029  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00030  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00031  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00032  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00033  * ========================================================================
00034  * PROJECT: OpenTracker
00035  * ======================================================================== */
00045 #ifndef OTQT_QTMOUSEEVENTSINKBASE_H
00046 #define OTQT_QTMOUSEEVENTSINKBASE_H
00047 #include <dllinclude.h>
00048 #if USE_OTQT
00049 
00050 #include "OTQtMath.h"
00051 #include <core/Event.h>
00052 #include <core/Node.h>
00053 #include <core/StringTable.h>
00054 
00055 namespace ot {
00056 
00057 //--------------------------------------------------------------------------------
00154 class OPENTRACKER_API QtMouseEventSinkBase : public Node {
00155 public:  // typedefs, constants
00156 
00158   enum StateFlag {
00160     EVENT_PENDING_SIGNAL = 0x01,
00162     EVENT_ACQUIRE_LOCK = 0x02,
00165     POS_THRESH_FILTER = 0x04,
00168     ORIENT_THRESH_FILTER = 0x08,
00172     CONSUME_EVENTS = 0x10,
00176     EVENT_CONSUME_SIGNAL = 0x20
00177   };
00178 
00179 protected:
00181   typedef unsigned short state_t;
00182 
00183 public: // Ctor etc
00192   QtMouseEventSinkBase(StringTable & xml_attrib_table);
00193   virtual ~QtMouseEventSinkBase() { };
00194 
00195 private:
00196   QtMouseEventSinkBase();
00197   QtMouseEventSinkBase(QtMouseEventSinkBase const & ref);
00198   QtMouseEventSinkBase & operator = (QtMouseEventSinkBase const & ref);
00199 
00200 public:
00201 
00203 
00237   virtual void onEventGenerated(Event & event, Node & generator) = 0;
00243   inline virtual int isEventGenerator() { return true; }
00244 
00251   inline bool isEventPending() const { return (state_ & EVENT_PENDING_SIGNAL); };
00255   inline void resetPendingEventBit() { state_ &= ~EVENT_PENDING_SIGNAL; };
00260   inline Event const & getCurrentEvent() const { return curr_event_; };
00266   inline Event const & getPreviousEvent() const { return prev_event_; };
00277   bool enableState(StateFlag flag, bool enable = true);
00285   void forwardEvent(Event & event);
00286 
00287 protected:
00288 
00296   bool isInsidePosThreshSphere(Event const & event) const;
00308   bool isInsideOrientThreshCone(Event const & event) const;
00316   void acquireEvent(Event const & event);
00317 
00318 protected:
00320   state_t state_;
00322   Event curr_event_;
00324   Event prev_event_;
00326   StringTable xml_attrib_table_;
00329   float POS_THRESH_RADIUS;
00331   float ORIENT_THRESH_QUAT[4];
00332 
00333 public:
00335   friend class QtMouseEventModule;
00336 };
00337 
00338 } // namespace ot
00339 
00340 #endif // USE_OTQT
00341 
00342 #endif // OTQT_QTMOUSEEVENTSINKBASE_H
00343 
00344 /*
00345  * ------------------------------------------------------------
00346  *   End of QtMouseEventSinkBase.h
00347  * ------------------------------------------------------------
00348  *   Automatic Emacs configuration follows.
00349  *   Local Variables:
00350  *   mode:c++
00351  *   c-basic-offset: 4
00352  *   eval: (c-set-offset 'substatement-open 0)
00353  *   eval: (c-set-offset 'case-label '+)
00354  *   eval: (c-set-offset 'statement 'c-lineup-runin-statements)
00355  *   eval: (setq indent-tabs-mode nil)
00356  *   End:
00357  * ------------------------------------------------------------
00358  */

copyright (c) 2006 Graz University of Technology