static LRESULT CALLBACK inputControlManager_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
/**************************************************
Character Key Input
**************************************************/
case WM_CHAR:
{
inputManager_PC::p().ProcessCharInput(WM_CHAR, wParam);
}
break;
}
}
class inputCKeyboard* m_pKeyboard;
bool inputManager_PC::Init (int a_Value)
{
if (a_Value == PT_SYSTEM)
{
m_pKeyboard = new inputCKeyboard("Keyboard_0");
}
}
inputCKeyboard::inputCKeyboard(char* a_pName, int a_HardwareId , int a_ControllerGroup) : inputCBase (a_pName, a_HardwareId , a_ControllerGroup)
{
SetType(C_KEYBOARD);
RequestCallbackListSize(eGuiCBase::CB_SHARED_MAX);
}
inputCBase::inputCBase(char* a_pName, int a_HardwareId, int a_ControllerGroup)
{
CREATE_MANAGED(inputCBase, DM_INPUT_CONTROLS, a_pName);
// #define CREATE_MANAGED(value, index, name) m_pDataManaged = new DM_DATA_P_S<value>(index, this, name);
// DM_DATA_P_S(int a_Slot, void* a_pParent, const char* a_pName) : DM_DATA_P(a_Slot, a_pParent, a_pName){};
// DM_DATA_P::DM_DATA_P(int a_Slot, void* a_pParent, const char* a_pName)
//{
//m_pParent = a_pParent;
//dataManager::p().AddData(a_Slot, this, a_pName);
//}
SetControllerGroup(a_ControllerGroup);
m_HardwareId = a_HardwareId;
}
void inputManager_PC::ProcessCharInput(“WM_CHAR,’c’”)
{
// Process Keyboard
if (m_pKeyboard)
{
// Set the key information and tag the change
m_pKeyboard->HardwareId() = ‘c’;
m_pKeyboard->ChangeState(eGuiCBase::CB_SELECT);
}
}
bool inputCKeyboard::ChangeState(int a_NewState, void* a_Data)
{
// Keys automatic release on select
bool result = inputCBase::ChangeState(a_NewState, a_Data);
if (a_NewState == eGuiCBase::CB_SELECT)
{
inputCBase::ChangeState(eGuiCBase::CB_NORMAL);
}
return result;
}
virtual bool ChangeState(int a_NewState, void* a_Data = 0) {SetState(a_NewState, a_Data); return true;}
void guiCBase::SetState (int a_NewState, void* a_pData)
{
if (m_State == a_NewState)
return;
m_State = a_NewState;
CallCallback(a_NewState, a_pData);
CallCallback(eGuiCBase::CB_ON_CHANGE, a_pData);
}
inline void guiCBase::CallCallback (int a_Value, void* a_pData)
{
if ((m_CallbackList.IsItemValid(a_Value)) && (a_Value >= eGuiCBase::CB_BASE_BEGIN))
{
CallCallbackEx( m_CallbackList.ItemP(a_Value), a_pData);
}
}
void guiCBase::CallCallbackEx(LL_List* a_pList, void* a_pData)
{
if (a_pList == NULL)
return;
LL_ForEach_B(a_pList)
CB_Imp_GuiC_Callback* pCallback = LL_ForEach_GetData(CB_Imp_GuiC_Callback, CB_Imp_GuiC_Callback::m_Link);
if (pCallback->m_CallbackMask.m_Mask&m_CallbackMask)
pCallback->Call_CB(this, a_pData);
LL_ForEach_E
}