001        package com.croftsoft.apps.neuro;
002         
003        import java.awt.event.*;
004    
005        import com.croftsoft.core.gui.controller.NilController;
006        import com.croftsoft.core.lang.NullArgumentException;
007        import com.croftsoft.core.lang.lifecycle.Startable;
008    import com.croftsoft.core.util.slot.Slot;
009    
010        /***********************************************************************
011        * Neuro controller.
012        * 
013        * Modifies the Model based on user input.
014        * 
015        * @version
016        *   $Id: NeuroController.java,v 1.5 2008/09/20 05:01:49 croft Exp $
017        * @since
018        *   2008-08-17
019        * @author
020        *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
021        ***********************************************************************/
022    
023        public final class  NeuroController
024          extends NilController
025          implements Startable
026        ////////////////////////////////////////////////////////////////////////
027        ////////////////////////////////////////////////////////////////////////
028        {
029           
030        private final Slot<NeuroMessage>  requestSlot;
031         
032        //
033         
034        private boolean
035          keyFPressed,
036          mouseClicked,
037          spacePressed;
038         
039        ////////////////////////////////////////////////////////////////////////
040        // constructor method
041        ////////////////////////////////////////////////////////////////////////
042         
043        public  NeuroController ( final Slot<NeuroMessage>  requestSlot )
044        ////////////////////////////////////////////////////////////////////////
045        {
046          NullArgumentException.checkArgs ( this.requestSlot = requestSlot );
047        }
048         
049        ////////////////////////////////////////////////////////////////////////
050        // listener methods
051        ////////////////////////////////////////////////////////////////////////
052        
053        @Override
054        public void  keyPressed ( final KeyEvent  keyEvent )
055        ////////////////////////////////////////////////////////////////////////
056        {
057          switch ( keyEvent.getKeyCode ( ) )
058          {
059            case KeyEvent.VK_SPACE:
060              
061              spacePressed = true;
062              
063              break;
064              
065            case KeyEvent.VK_F:
066              
067              keyFPressed = true;
068              
069              break;
070              
071            default:
072              
073              // ignore
074          }
075        }
076         
077        @Override
078        public void  mouseClicked ( final MouseEvent  mouseEvent )
079        ////////////////////////////////////////////////////////////////////////
080        {
081          mouseClicked = true;
082        }
083         
084        ////////////////////////////////////////////////////////////////////////
085        // lifecycle methods
086        ////////////////////////////////////////////////////////////////////////
087         
088        public void  start ( )
089        ////////////////////////////////////////////////////////////////////////
090        {
091          keyFPressed  = false;
092          
093          mouseClicked = false;
094          
095          spacePressed = false;
096        }
097         
098        @Override
099        public void  update ( )
100        ////////////////////////////////////////////////////////////////////////
101        {
102          if ( keyFPressed )
103          {
104            keyFPressed = !requestSlot.offer (
105              NeuroMessage.TOGGLE_FRAME_RATE_REQUEST_INSTANCE );
106          }
107          
108          if ( mouseClicked )
109          {
110            mouseClicked = !requestSlot.offer (
111              NeuroMessage.TOGGLE_CHANNEL_REQUEST_INSTANCE );
112          }
113          
114          if ( spacePressed )
115          {
116            spacePressed = !requestSlot.offer (
117              NeuroMessage.TOGGLE_PAUSE_REQUEST_INSTANCE );
118          }
119        }
120         
121        ////////////////////////////////////////////////////////////////////////
122        ////////////////////////////////////////////////////////////////////////
123        }