⛏️ index : haiku.git

/*
 * Copyright 2004-2011 Haiku Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *		JΓ©rΓ΄me Duval
 *		Axel DΓΆrfler, axeld@pinc-software.de.
 */
#ifndef KEYMAP_H
#define KEYMAP_H


#include <Keymap.h>

#include <Entry.h>
#include <Messenger.h>
#include <String.h>


enum dead_key_index {
	kDeadKeyAcute = 1,
	kDeadKeyGrave,
	kDeadKeyCircumflex,
	kDeadKeyDiaeresis,
	kDeadKeyTilde
};


class Keymap : public BKeymap {
public:
								Keymap();
								~Keymap();

			void				SetTarget(BMessenger target,
									BMessage* modificationMessage);

			status_t			Load(const entry_ref& ref);
			status_t			Save(const entry_ref& ref);

			void				DumpKeymap();

			status_t			SetModifier(uint32 keyCode, uint32 modifier);

			void				SetDeadKeyEnabled(uint32 keyCode,
									uint32 modifiers, bool enabled);
			void				GetDeadKeyTrigger(dead_key_index deadKeyIndex,
									BString& outTrigger);
			void				SetDeadKeyTrigger(dead_key_index deadKeyIndex,
									const BString& trigger);

			status_t			RestoreSystemDefault();
			status_t			Use();

			void				SetKey(uint32 keyCode, uint32 modifiers,
									int8 deadKey, const char* bytes,
									int32 numBytes = -1);

			void				SetName(const char* name);

			const key_map&		Map() const { return fKeys; }
			key_map&			Map() { return fKeys; }

			Keymap&				operator=(const Keymap& other);

private:
			bool				_SetChars(int32 offset, const char* bytes,
									int32 numBytes);

private:
			char				fName[B_FILE_NAME_LENGTH];

			BMessenger			fTarget;
			BMessage*			fModificationMessage;
};


#endif	// KEYMAP_H