optionally use guarded alloc for tiles compositor, also replace allocation functions...
[blender.git] / source / gameengine / GameLogic / SCA_KeyboardSensor.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 /** \file SCA_KeyboardSensor.h
29  *  \ingroup gamelogic
30  *  \brief Sensor for keyboard input
31  */
32
33 #ifndef __SCA_KEYBOARDSENSOR_H__
34 #define __SCA_KEYBOARDSENSOR_H__
35
36 #include "SCA_ISensor.h"
37 #include "BoolValue.h"
38 #include <list>
39
40 /**
41  * The keyboard sensor listens to the keyboard, and passes on events
42  * on selected keystrokes. It has an alternate mode in which it logs
43  * keypresses to a property. Note that these modes are not mutually
44  * exclusive.  */
45 class SCA_KeyboardSensor : public SCA_ISensor
46 {
47         Py_Header
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 independent
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                                            short int exitKey);
99         virtual ~SCA_KeyboardSensor();
100         virtual CValue* GetReplica();
101         virtual void Init();
102
103
104         short int GetHotkey();
105         virtual bool Evaluate();
106         virtual bool IsPositiveTrigger();
107         bool    TriggerOnAllKeys();
108
109 #ifdef WITH_PYTHON
110         /* --------------------------------------------------------------------- */
111         /* Python interface ---------------------------------------------------- */
112         /* --------------------------------------------------------------------- */
113
114         // KeyEvents: 
115         KX_PYMETHOD_DOC_NOARGS(SCA_KeyboardSensor,getEventList);
116         // KeyStatus: 
117         KX_PYMETHOD_DOC_O(SCA_KeyboardSensor,getKeyStatus);
118         
119         static PyObject*        pyattr_get_events(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
120 #endif
121 };
122
123
124 /**
125  * Transform keycodes to something printable.
126  */
127 char ToCharacter(int keyIndex, bool shifted);
128
129 /**
130  * Determine whether this character can be printed. We cannot use
131  * the library functions here, because we need to test our own
132  * keycodes. */
133 bool IsPrintable(int keyIndex);
134
135 /**
136  * Tests whether this is a delete key.
137  */     
138 bool IsDelete(int keyIndex);
139
140
141 #endif //__SCA_KEYBOARDSENSOR_H__
142
143
144