xref: /haiku/headers/private/shared/Keymap.h (revision bd336e3abc7e939d2db16cff48d4cb9a2fe0dc60)
1b44c25deSAxel Dörfler /*
2b44c25deSAxel Dörfler  * Copyright 2004-2010, Haiku, Inc. All Rights Reserved.
3b44c25deSAxel Dörfler  * Distributed under the terms of the MIT License.
4b44c25deSAxel Dörfler  *
5b44c25deSAxel Dörfler  * Authors:
6b44c25deSAxel Dörfler  *		Jérôme Duval
7b44c25deSAxel Dörfler  *		Axel Dörfler, axeld@pinc-software.de.
8b44c25deSAxel Dörfler  */
9b44c25deSAxel Dörfler #ifndef _KEYMAP_H
10b44c25deSAxel Dörfler #define _KEYMAP_H
11b44c25deSAxel Dörfler 
12b44c25deSAxel Dörfler 
13b44c25deSAxel Dörfler #include <DataIO.h>
14b44c25deSAxel Dörfler #include <InterfaceDefs.h>
15*bd336e3aSJohn Scipione #include <ObjectList.h>
16b44c25deSAxel Dörfler 
17b44c25deSAxel Dörfler 
18b44c25deSAxel Dörfler class BKeymap {
19b44c25deSAxel Dörfler public:
20b44c25deSAxel Dörfler 								BKeymap();
21b44c25deSAxel Dörfler 	virtual						~BKeymap();
22b44c25deSAxel Dörfler 
23b44c25deSAxel Dörfler 			status_t			SetTo(const char* path);
24b44c25deSAxel Dörfler 			status_t			SetTo(BDataIO& stream);
25b44c25deSAxel Dörfler 			status_t			SetToCurrent();
26b44c25deSAxel Dörfler 			status_t			SetToDefault();
27b44c25deSAxel Dörfler 			void				Unset();
28b44c25deSAxel Dörfler 
29b44c25deSAxel Dörfler 			bool				IsModifierKey(uint32 keyCode) const;
30b44c25deSAxel Dörfler 			uint32				Modifier(uint32 keyCode) const;
31b44c25deSAxel Dörfler 			uint32				KeyForModifier(uint32 modifier) const;
32b19e758bSAxel Dörfler 			uint8				ActiveDeadKey(uint32 keyCode,
33b19e758bSAxel Dörfler 									uint32 modifiers) const;
34b19e758bSAxel Dörfler 			uint8				DeadKey(uint32 keyCode, uint32 modifiers,
35b44c25deSAxel Dörfler 									bool* isEnabled = NULL) const;
36b44c25deSAxel Dörfler 			bool				IsDeadSecondKey(uint32 keyCode,
37b44c25deSAxel Dörfler 									uint32 modifiers,
38b44c25deSAxel Dörfler 									uint8 activeDeadKey) const;
39b44c25deSAxel Dörfler 			void				GetChars(uint32 keyCode, uint32 modifiers,
40b44c25deSAxel Dörfler 									uint8 activeDeadKey, char** chars,
41b44c25deSAxel Dörfler 									int32* numBytes) const;
42*bd336e3aSJohn Scipione 			status_t			GetModifiedCharacters(const char* in,
43*bd336e3aSJohn Scipione 									int32 inModifiers, int32 outModifiers,
44*bd336e3aSJohn Scipione 									BObjectList<const char>* _outList);
45b44c25deSAxel Dörfler 
Map()46b44c25deSAxel Dörfler 			const key_map&		Map() const { return fKeys; }
47b44c25deSAxel Dörfler 
48b44c25deSAxel Dörfler 			bool				operator==(const BKeymap& other) const;
49b44c25deSAxel Dörfler 			bool				operator!=(const BKeymap& other) const;
50b44c25deSAxel Dörfler 
51b44c25deSAxel Dörfler 			BKeymap&			operator=(const BKeymap& other);
52b44c25deSAxel Dörfler 
53b44c25deSAxel Dörfler protected:
54b44c25deSAxel Dörfler 			int32				Offset(uint32 keyCode, uint32 modifiers,
55b44c25deSAxel Dörfler 									uint32* _table = NULL) const;
56b44c25deSAxel Dörfler 			uint8				DeadKeyIndex(int32 offset) const;
57b44c25deSAxel Dörfler 
58b44c25deSAxel Dörfler protected:
59b44c25deSAxel Dörfler 			char*				fChars;
60b44c25deSAxel Dörfler 			key_map				fKeys;
61b44c25deSAxel Dörfler 			uint32				fCharsSize;
62b44c25deSAxel Dörfler };
63b44c25deSAxel Dörfler 
64b44c25deSAxel Dörfler 
65b44c25deSAxel Dörfler #endif	// KEYMAP_H
66