home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Libraries / Aidan's Class Libraries / Source / Action / KeyboardHandler.cpp < prev    next >
Encoding:
Text File  |  1997-07-13  |  1.6 KB  |  80 lines  |  [TEXT/CWIE]

  1. //Copyright (c) 1997 Aidan Cully
  2. //All rights reserved
  3.  
  4. #include <Menus.h>
  5. #include "CLKeyboardHandler.h"
  6. #include "CLActionHandler.h"
  7.  
  8. TKeyboardHandler *TKeyboardHandler::shKeyboard;
  9.  
  10. TKeyboardHandler::TKeyboardHandler()
  11. {
  12.     shKeyboard= this;
  13. }
  14.  
  15. TKeyboardHandler *TKeyboardHandler::GetKeyboard()
  16. {
  17.     return( shKeyboard );
  18. }
  19.  
  20. void TKeyboardHandler::NewDispatcher()
  21. {
  22.     mhListeners.MoveLast();
  23.     mhListeners.AddNext( 0 );
  24. }
  25.  
  26. void TKeyboardHandler::OldDispatcher()
  27. {
  28.     mhListeners.MoveLast();
  29.     mhListeners.Remove();
  30. }
  31.  
  32. void TKeyboardHandler::SetListener( MKeyboardListener *listener )
  33. {
  34.     mhListeners.MoveLast();
  35.     mhListeners.SetData( listener );
  36. }
  37.  
  38. MKeyboardListener *TKeyboardHandler::GetListener()
  39. {
  40.     if( !mhListeners.MoveLast() )
  41.         return( 0 );
  42.     MKeyboardListener *listener;
  43.     mhListeners.GetData( listener );
  44.     return( listener );
  45. }
  46.  
  47. void TKeyboardHandler::DispatchEvent( const EventRecord &ev )
  48. {
  49.     if( ev.modifiers&cmdKey ) {
  50.         if( MActionHandler::sCurHandler )
  51.             MActionHandler::sCurHandler->HandleAction( ::MenuKey( ev.message&charCodeMask ) );
  52.     } else {
  53.         BuildEvent( ev );
  54.     }
  55. }
  56.  
  57. void TKeyboardHandler::BuildEvent( const EventRecord &ev )
  58. {
  59.     if( !mhListeners.MoveLast() )
  60.         return;
  61.     TKeyEvent kev;
  62.     kev.when= ev.when;
  63.     kev.scanCode= (ev.message&keyCodeMask)>>8;
  64.     kev.asciiCode= ev.message&charCodeMask;
  65.     kev.keyWhat= (ev.what==keyDown);
  66.     MKeyboardListener *listener;
  67.     mhListeners.GetData( listener );
  68.     if( listener )
  69.         listener->RespondKeyboard( &kev );
  70. }
  71.  
  72. Boolean TKeyboardHandler::IsKeyDown( UINT8 key )
  73. {
  74.     KeyMap keys;
  75.     ::GetKeys( keys );
  76.     for( int i= 0; i<4; i++ )
  77.         if( keys[key/8]&(1<<(key%8)) )
  78.             return( true );
  79.     return( false );
  80. }