svn merge -r 21041:21301 https://svn.blender.org/svnroot/bf-blender/branches/blender2...
[blender.git] / source / gameengine / GameLogic / SCA_KeyboardSensor.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  * Sensor for keyboard input
29  */
30
31 #ifndef __KX_KEYBOARDSENSOR
32 #define __KX_KEYBOARDSENSOR
33
34 #include "SCA_ISensor.h"
35 #include "BoolValue.h"
36 #include <list>
37
38 /**
39  * The keyboard sensor listens to the keyboard, and passes on events
40  * on selected keystrokes. It has an alternate mode in which it logs
41  * keypresses to a property. Note that these modes are not mutually
42  * exclusive.  */
43 class SCA_KeyboardSensor : public SCA_ISensor
44 {
45         Py_Header;
46         class SCA_KeyboardManager*      m_pKeyboardMgr;
47
48
49         /**
50          * the key this sensor is sensing for
51          */
52         int                                                     m_hotkey;
53         short int                                       m_qual,m_qual2;
54         short int                                       m_val;
55         /**
56          * If this toggle is true, all incoming key events generate a
57          * response.
58          */
59         bool                                            m_bAllKeys;
60
61         /**
62          * The name of the property to which logged text is appended. If
63          * this property is not defined, no logging takes place.
64          */
65         STR_String      m_targetprop;
66         /**
67          * The property that indicates whether or not to log text when in
68          * loggin mode. If the property equals 0, no loggin is done. For
69          * all other values, logging is active. Logging can only become
70          * active if there is a property to log to. Logging is independant
71          * from hotkey settings. */
72         STR_String      m_toggleprop;
73
74         /**
75          * Log the keystrokes from the current input buffer.
76          */
77         void LogKeystrokes(void);
78         
79         /**
80          * Adds this key-code to the target prop.
81          */
82         void AddToTargetProp(int keyIndex);
83
84         /**
85          * Tests whether shift is pressed.
86          */
87         bool IsShifted(void);
88         
89 public:
90         SCA_KeyboardSensor(class SCA_KeyboardManager* keybdmgr,
91                                            short int hotkey,
92                                            short int qual,
93                                            short int qual2,
94                                            bool bAllKeys,
95                                            const STR_String& targetProp,
96                                            const STR_String& toggleProp,
97                                            SCA_IObject* gameobj);
98         virtual ~SCA_KeyboardSensor();
99         virtual CValue* GetReplica();
100         virtual void Init();
101
102
103         short int GetHotkey();
104         virtual bool Evaluate();
105         virtual bool IsPositiveTrigger();
106         bool    TriggerOnAllKeys();
107
108         /* --------------------------------------------------------------------- */
109         /* Python interface ---------------------------------------------------- */
110         /* --------------------------------------------------------------------- */
111
112         //Deprecated functions ----->
113         /** 1. GetKey : check which key this sensor looks at */
114         KX_PYMETHOD_DOC_NOARGS(SCA_KeyboardSensor,GetKey);
115         /** 2. SetKey: change the key to look at */
116         KX_PYMETHOD_DOC_VARARGS(SCA_KeyboardSensor,SetKey);
117         /** 3. GetHold1 : set the first bucky bit */
118         KX_PYMETHOD_DOC_NOARGS(SCA_KeyboardSensor,GetHold1);
119         /** 4. SetHold1: change the first bucky bit */
120         KX_PYMETHOD_DOC_VARARGS(SCA_KeyboardSensor,SetHold1);
121         /** 5. GetHold2 : set the second bucky bit */
122         KX_PYMETHOD_DOC_NOARGS(SCA_KeyboardSensor,GetHold2);
123         /** 6. SetHold2: change the second bucky bit */
124         KX_PYMETHOD_DOC_VARARGS(SCA_KeyboardSensor,SetHold2);
125         /** 9. GetPressedKeys: */
126         KX_PYMETHOD_DOC_NOARGS(SCA_KeyboardSensor,GetPressedKeys); 
127         /** 9. GetCurrrentlyPressedKeys: */
128         KX_PYMETHOD_DOC_NOARGS(SCA_KeyboardSensor,GetCurrentlyPressedKeys); 
129         // <------
130         
131         // KeyEvents: 
132         KX_PYMETHOD_DOC_NOARGS(SCA_KeyboardSensor,getEventList); 
133         // KeyStatus: 
134         KX_PYMETHOD_DOC_O(SCA_KeyboardSensor,getKeyStatus);
135         
136         static PyObject*        pyattr_get_events(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
137 };
138
139
140 /**
141  * Transform keycodes to something printable.
142  */
143 char ToCharacter(int keyIndex, bool shifted);
144
145 /**
146  * Determine whether this character can be printed. We cannot use
147  * the library functions here, because we need to test our own
148  * keycodes. */
149 bool IsPrintable(int keyIndex);
150
151 /**
152  * Tests whether this is a delete key.
153  */     
154 bool IsDelete(int keyIndex);
155
156
157 #endif //__KX_KEYBOARDSENSOR
158
159
160