* Copyright 1999-2009 Jeremy Friesner
* Copyright 2009 Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Jeremy Friesner
*/
#include "MetaKeyStateMap.h"
#include <stdio.h>
#include <string.h>
#include "BitFieldTesters.h"
MetaKeyStateMap::MetaKeyStateMap()
:
fKeyName(NULL)
{
}
MetaKeyStateMap::MetaKeyStateMap(const char* name)
{
SetInfo(name);
}
void
MetaKeyStateMap::SetInfo(const char* keyName)
{
fKeyName = new char[strlen(keyName) + 1];
strcpy(fKeyName, keyName);
}
MetaKeyStateMap::~MetaKeyStateMap()
{
delete [] fKeyName;
int nr = fStateDescs.CountItems();
for (int i = 0; i < nr; i++)
delete [] ((const char*) fStateDescs.ItemAt(i));
nr = fStateTesters.CountItems();
for (int j = 0; j < nr; j++)
delete ((BitFieldTester*) fStateTesters.ItemAt(j));
}
void
MetaKeyStateMap::AddState(const char* d, const BitFieldTester* t)
{
char* copy = new char[strlen(d) + 1];
strcpy(copy, d);
fStateDescs.AddItem(copy);
fStateTesters.AddItem((void *)t);
}
int
MetaKeyStateMap::GetNumStates() const
{
return fStateTesters.CountItems();
}
const BitFieldTester*
MetaKeyStateMap::GetNthStateTester(int stateNum) const
{
return ((const BitFieldTester*) fStateTesters.ItemAt(stateNum));
}
const char*
MetaKeyStateMap::GetNthStateDesc(int stateNum) const
{
return ((const char*) fStateDescs.ItemAt(stateNum));
}
const char*
MetaKeyStateMap::GetName() const
{
return fKeyName;
}