]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/Interaction/BaseInteractorStyle.h
Merge branch 'master' of ssh://git.creatis.insa-lyon.fr/cpPlugins
[cpPlugins.git] / lib / cpExtensions / Interaction / BaseInteractorStyle.h
index 1501f00297b4b48c06b78236d448d556def73cd9..119668b5dd4a17d4e221435c38c04ecd77d915d5 100644 (file)
  * =========================================================================
  */
 
+// -------------------------------------------------------------------------
+#define cpExtensions_BaseInteractorStyle_Commands( C )                  \
+  protected:                                                            \
+  std::map< T##C##Command, void* > m_##C##Commands;                     \
+public:                                                                 \
+  inline void Add##C##Command( T##C##Command c, void* d )               \
+  {                                                                     \
+    if( c != NULL )                                                     \
+    {                                                                   \
+      this->m_##C##Commands[ c ] = d;                                   \
+      this->Modified( );                                                \
+    }                                                                   \
+  }                                                                     \
+  inline void Remove##C##Command( T##C##Command c )                     \
+  {                                                                     \
+    std::map< T##C##Command, void* >::iterator i =                      \
+      this->m_##C##Commands.find( c );                                  \
+    if( i != this->m_##C##Commands.end( ) )                             \
+    {                                                                   \
+      this->m_##C##Commands.erase( i );                                 \
+      this->Modified( );                                                \
+    }                                                                   \
+  }
+
 // -------------------------------------------------------------------------
 #define BaseInteractorStyle_DIFF_TIME                           \
   std::chrono::duration_cast< std::chrono::milliseconds >(      \
@@ -49,31 +73,27 @@ namespace cpExtensions
       typedef void ( *TMouseWheelCommand )( void*, const int&, bool, bool, bool );
       typedef void ( *TKeyCommand )( void*, const char& );
       typedef void ( *TVoidCommand )( void* );
-
-    public:
-      static void SetSetDoubleClickDelay( long delay );
+      typedef TMouseCommand TMouseMoveCommand;
+      typedef TMouseCommand TMouseClickCommand;
+      typedef TMouseCommand TMouseDoubleClickCommand;
+      typedef TVoidCommand  TExposeCommand;
+      typedef TVoidCommand  TConfigureCommand;
+      typedef TVoidCommand  TEnterCommand;
+      typedef TVoidCommand  TLeaveCommand;
 
       // Associate callbacks for each event
-      void AddMouseMoveCommand( TMouseCommand command, void* data );
-      void AddMouseClickCommand( TMouseCommand command, void* data );
-      void AddMouseDoubleClickCommand( TMouseCommand command, void* data );
-      void AddMouseWheelCommand( TMouseWheelCommand command, void* data );
-      void AddKeyCommand( TKeyCommand command, void* data );
-      void AddExposeCommand( TVoidCommand command, void* data );
-      void AddConfigureCommand( TVoidCommand command, void* data );
-      void AddEnterCommand( TVoidCommand command, void* data );
-      void AddLeaveCommand( TVoidCommand command, void* data );
-
-      void RemoveMouseMoveCommand( TMouseCommand command );
-      void RemoveMouseClickCommand( TMouseCommand command );
-      void RemoveMouseDoubleClickCommand( TMouseCommand command );
-      void RemoveMouseWheelCommand( TMouseWheelCommand command );
-      void RemoveKeyCommand( TKeyCommand command );
-      void RemoveExposeCommand( TVoidCommand command );
-      void RemoveConfigureCommand( TVoidCommand command );
-      void RemoveEnterCommand( TVoidCommand command );
-      void RemoveLeaveCommand( TVoidCommand command );
+      cpExtensions_BaseInteractorStyle_Commands( MouseMove );
+      cpExtensions_BaseInteractorStyle_Commands( MouseClick );
+      cpExtensions_BaseInteractorStyle_Commands( MouseDoubleClick );
+      cpExtensions_BaseInteractorStyle_Commands( MouseWheel );
+      cpExtensions_BaseInteractorStyle_Commands( Key );
+      cpExtensions_BaseInteractorStyle_Commands( Expose );
+      cpExtensions_BaseInteractorStyle_Commands( Configure );
+      cpExtensions_BaseInteractorStyle_Commands( Enter );
+      cpExtensions_BaseInteractorStyle_Commands( Leave );
 
+    public:
+      static void SetSetDoubleClickDelay( long delay );
       void DelegateTDxEvent( unsigned long event, void* calldata );
 
       // Possible mouse motion events
@@ -103,10 +123,10 @@ namespace cpExtensions
 
       // Keyboard-related events
       virtual void OnChar( );
-      virtual void OnKeyDown( );
-      virtual void OnKeyUp( );
-      virtual void OnKeyPress( );
-      virtual void OnKeyRelease( );
+      virtual void OnKeyDown( )    { }
+      virtual void OnKeyUp( )      { }
+      virtual void OnKeyPress( )   { }
+      virtual void OnKeyRelease( ) { }
 
       // Other events
       virtual void OnExpose( );
@@ -142,17 +162,6 @@ namespace cpExtensions
     protected:
       double m_MotionFactor;
 
-      // Callbacks
-      std::map< TMouseCommand, void* >      m_MouseMoveCommands;
-      std::map< TMouseCommand, void* >      m_MouseClickCommands;
-      std::map< TMouseCommand, void* >      m_MouseDoubleClickCommands;
-      std::map< TMouseWheelCommand, void* > m_MouseWheelCommands;
-      std::map< TKeyCommand, void* >        m_KeyCommands;
-      std::map< TVoidCommand, void* >       m_ExposeCommands;
-      std::map< TVoidCommand, void* >       m_ConfigureCommands;
-      std::map< TVoidCommand, void* >       m_EnterCommands;
-      std::map< TVoidCommand, void* >       m_LeaveCommands;
-
       /**
        * Button events
        */