1/* 2 * Copyright 1999-2009 Jeremy Friesner 3 * Copyright 2009 Haiku, Inc. All rights reserved. 4 * Distributed under the terms of the MIT License. 5 * 6 * Authors: 7 * Jeremy Friesner 8 */ 9 10 11#include "MetaKeyStateMap.h" 12 13 14#include <stdio.h> 15#include <string.h> 16 17 18#include "BitFieldTesters.h" 19 20 21MetaKeyStateMap::MetaKeyStateMap() 22 : 23 fKeyName(NULL) 24{ 25 // User MUST call SetInfo() before using! 26} 27 28 29MetaKeyStateMap::MetaKeyStateMap(const char* name) 30{ 31 SetInfo(name); 32} 33 34 35void 36MetaKeyStateMap::SetInfo(const char* keyName) 37{ 38 fKeyName = new char[strlen(keyName) + 1]; 39 strcpy(fKeyName, keyName); 40} 41 42 43MetaKeyStateMap::~MetaKeyStateMap() 44{ 45 delete [] fKeyName; 46 int nr = fStateDescs.CountItems(); 47 for (int i = 0; i < nr; i++) 48 delete [] ((const char*) fStateDescs.ItemAt(i)); 49 50 nr = fStateTesters.CountItems(); 51 for (int j = 0; j < nr; j++) 52 delete ((BitFieldTester*) fStateTesters.ItemAt(j)); 53 // _stateBits are stored in-line, no need to delete them 54} 55 56 57void 58MetaKeyStateMap::AddState(const char* d, const BitFieldTester* t) 59{ 60 char* copy = new char[strlen(d) + 1]; 61 strcpy(copy, d); 62 fStateDescs.AddItem(copy); 63 fStateTesters.AddItem((void *)t); 64} 65 66 67int 68MetaKeyStateMap::GetNumStates() const 69{ 70 return fStateTesters.CountItems(); 71} 72 73 74const BitFieldTester* 75MetaKeyStateMap::GetNthStateTester(int stateNum) const 76{ 77 return ((const BitFieldTester*) fStateTesters.ItemAt(stateNum)); 78} 79 80 81const char* 82MetaKeyStateMap::GetNthStateDesc(int stateNum) const 83{ 84 return ((const char*) fStateDescs.ItemAt(stateNum)); 85} 86 87 88const char* 89MetaKeyStateMap::GetName() const 90{ 91 return fKeyName; 92} 93