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