00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "keyboardEventHandler.h"
00024 #include <iostream>
00025
00026 bool keyboardEventHandler::addFunction(int whatKey, functionType newFunction)
00027 {
00028 if ( keyFuncMap.end() != keyFuncMap.find( whatKey ))
00029 {
00030 std::cout << "duplicate key '" << whatKey << "' ignored." << std::endl;
00031 return false;
00032 }
00033 else
00034 {
00035 keyFuncMap[whatKey].keyFunction = newFunction;
00036 return true;
00037 }
00038 }
00039
00040 bool keyboardEventHandler::addFunction (int whatKey, keyStatusType keyPressStatus, functionType newFunction)
00041 {
00042 if (keyPressStatus == KEY_DOWN)
00043 {
00044 return addFunction(whatKey,newFunction);
00045 }
00046 else
00047 {
00048 if ( keyUPFuncMap.end() != keyUPFuncMap.find( whatKey ))
00049 {
00050 std::cout << "duplicate key '" << whatKey << "' ignored." << std::endl;
00051 return false;
00052 }
00053 else
00054 {
00055 keyUPFuncMap[whatKey].keyFunction = newFunction;
00056 return true;
00057 }
00058 }
00059 }
00060
00061 bool keyboardEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa)
00062 {
00063 bool newKeyDownEvent = false;
00064 bool newKeyUpEvent = false;
00065
00066 switch(ea.getEventType())
00067 {
00068 case(osgGA::GUIEventAdapter::KEYDOWN):
00069 {
00070 keyFunctionMap::iterator itr = keyFuncMap.find(ea.getKey());
00071 if (itr != keyFuncMap.end())
00072 {
00073 if ( (*itr).second.keyState == KEY_UP )
00074 {
00075 (*itr).second.keyState = KEY_DOWN;
00076 newKeyDownEvent = true;
00077 }
00078 if (newKeyDownEvent)
00079 {
00080 (*itr).second.keyFunction();
00081 newKeyDownEvent = false;
00082 }
00083 return true;
00084 }
00085 return false;
00086 }
00087 case(osgGA::GUIEventAdapter::KEYUP):
00088 {
00089 keyFunctionMap::iterator itr = keyFuncMap.find(ea.getKey());
00090 if (itr != keyFuncMap.end() )
00091 {
00092 (*itr).second.keyState = KEY_UP;
00093 }
00094 itr = keyUPFuncMap.find(ea.getKey());
00095 if (itr != keyUPFuncMap.end())
00096 {
00097 (*itr).second.keyFunction();
00098 return true;
00099 }
00100 return false;
00101 }
00102 default:
00103 return false;
00104 }
00105 }