This code was not tested and breaks in Release builds, reverting to restore
functionality of the nightly. All in-game menus do not work and generating
a world crashes.
This reverts commit a9be52c41a.
201 lines
5.6 KiB
C++
201 lines
5.6 KiB
C++
#include "stdafx.h"
|
|
#include "XUI_Ctrl_4JEdit.h"
|
|
|
|
|
|
|
|
HRESULT CXuiCtrl4JEdit::OnInit(XUIMessageInit* pInitData, BOOL& rfHandled)
|
|
{
|
|
HRESULT hr=S_OK;
|
|
|
|
// set a limit for the text box
|
|
m_uTextLimit=XUI_4JEDIT_MAX_CHARS-1;
|
|
XuiEditSetTextLimit(m_hObj,m_uTextLimit);
|
|
// Find the text limit. (Add one for NULL terminator)
|
|
//m_uTextLimit = min( XuiEditGetTextLimit(m_hObj) + 1, XUI_4JEDIT_MAX_CHARS);
|
|
|
|
ZeroMemory( wchText , sizeof(WCHAR)*(m_uTextLimit+1) );
|
|
|
|
m_bReadOnly = false;
|
|
m_uiTitle = 0;
|
|
m_uiText =0;
|
|
m_eKeyboardMode=C_4JInput::EKeyboardMode_Default;
|
|
return hr;
|
|
}
|
|
|
|
|
|
HRESULT CXuiCtrl4JEdit::SetTextLimit(int iLimit)
|
|
{
|
|
CXuiCtrl4JEdit *pThis;
|
|
HRESULT hr = XuiObjectFromHandle(m_hObj, (void **) &pThis);
|
|
if (FAILED(hr))
|
|
return hr;
|
|
if(iLimit<XUI_4JEDIT_MAX_CHARS)
|
|
{
|
|
pThis->m_uTextLimit=iLimit;
|
|
XuiEditSetTextLimit(pThis->m_hObj,iLimit);
|
|
ZeroMemory( pThis->wchText , sizeof(WCHAR)*XUI_4JEDIT_MAX_CHARS );
|
|
}
|
|
return S_OK;
|
|
}
|
|
HRESULT CXuiCtrl4JEdit::SetCaretPosition(int iPos)
|
|
{
|
|
CXuiCtrl4JEdit *pThis;
|
|
HRESULT hr = XuiObjectFromHandle(m_hObj, (void **) &pThis);
|
|
if (FAILED(hr))
|
|
return hr;
|
|
XuiEditSetCaretPosition(pThis->m_hObj,iPos);
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiCtrl4JEdit::SetTitleAndText(unsigned int uiTitle, unsigned int uiText)
|
|
{
|
|
CXuiCtrl4JEdit *pThis;
|
|
HRESULT hr = XuiObjectFromHandle(m_hObj, (void **) &pThis);
|
|
if (FAILED(hr))
|
|
return hr;
|
|
pThis->m_uiTitle=uiTitle;
|
|
pThis->m_uiText=uiText;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiCtrl4JEdit::SetReadOnly(bool bReadOnly)
|
|
{
|
|
// Attempt to make the change on the actual original version of this object that XUI made itself, rather
|
|
// than the copy we make ourselves and then map to it, which shares the same handle
|
|
CXuiCtrl4JEdit *pThis;
|
|
HRESULT hr = XuiObjectFromHandle(m_hObj, (void **) &pThis);
|
|
if (FAILED(hr))
|
|
return hr;
|
|
pThis->m_bReadOnly = bReadOnly;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiCtrl4JEdit::SetKeyboardType(C_4JInput::EKeyboardMode eKeyboardMode)
|
|
{
|
|
CXuiCtrl4JEdit *pThis;
|
|
HRESULT hr = XuiObjectFromHandle(m_hObj, (void **) &pThis);
|
|
if (FAILED(hr))
|
|
return hr;
|
|
pThis->m_eKeyboardMode= eKeyboardMode;
|
|
return S_OK;
|
|
}
|
|
|
|
// HRESULT CXuiCtrl4JEdit::SetIPMode(bool bIPMode)
|
|
// {
|
|
// // Attempt to make the change on the actual original version of this object that XUI made itself, rather
|
|
// // than the copy we make ourselves and then map to it, which shares the same handle
|
|
// CXuiCtrl4JEdit *pThis;
|
|
// HRESULT hr = XuiObjectFromHandle(m_hObj, (void **) &pThis);
|
|
// if (FAILED(hr))
|
|
// return hr;
|
|
// pThis->m_bIPMode= bIPMode;
|
|
//
|
|
// return S_OK;
|
|
// }
|
|
|
|
// HRESULT CXuiCtrl4JEdit::SetExtendedMode(bool bExtendedMode)
|
|
// {
|
|
// // Attempt to make the change on the actual original version of this object that XUI made itself, rather
|
|
// // than the copy we make ourselves and then map to it, which shares the same handle
|
|
// CXuiCtrl4JEdit *pThis;
|
|
// HRESULT hr = XuiObjectFromHandle(m_hObj, (void **) &pThis);
|
|
// if (FAILED(hr))
|
|
// return hr;
|
|
// pThis->m_bExtendedMode= bExtendedMode;
|
|
//
|
|
// return S_OK;
|
|
// }
|
|
|
|
HRESULT CXuiCtrl4JEdit::OnChar(XUIMessageChar* pInputData, BOOL& rfHandled)
|
|
{
|
|
CXuiCtrl4JEdit *pThis;
|
|
HRESULT hr = XuiObjectFromHandle(m_hObj, (void **) &pThis);
|
|
if (FAILED(hr))
|
|
return hr;
|
|
|
|
HXUIOBJ hBaseObj;
|
|
|
|
// need to send the key down to the base object, so that when we notify the parent, the edit control has been updated with the right text
|
|
hr=XuiGetBaseObject(pThis->m_hObj,&hBaseObj);
|
|
|
|
XUIMessage xuiMsg;
|
|
XUIMessageChar xuiMsgChar;
|
|
XuiMessageChar( &xuiMsg, &xuiMsgChar, pInputData->wch, pInputData->dwFlags, pInputData->UserIndex );
|
|
// Send the XM_CHAR message.
|
|
XuiSendMessage( hBaseObj, &xuiMsg );
|
|
|
|
rfHandled = TRUE;
|
|
SendNotifyValueChanged((int)pInputData->wch);
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CXuiCtrl4JEdit::OnKeyDown(XUIMessageInput* pInputData, BOOL& rfHandled)
|
|
{
|
|
CXuiCtrl4JEdit *pThis;
|
|
HRESULT hr = XuiObjectFromHandle(m_hObj, (void **) &pThis);
|
|
if (FAILED(hr))
|
|
return hr;
|
|
|
|
ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode);
|
|
|
|
//HRESULT hr = S_OK;
|
|
|
|
if( pThis->m_bReadOnly ) return hr;
|
|
|
|
// Find the text limit. (Add one for NULL terminator)
|
|
//m_uTextLimit = min( XuiEditGetTextLimit(m_hObj) + 1, XUI_4JEDIT_MAX_CHARS);
|
|
|
|
if((((pInputData->dwKeyCode == VK_PAD_A) && (pInputData->wch == 0)) || (pInputData->dwKeyCode == VK_PAD_START)) && !(pInputData->dwFlags & XUI_INPUT_FLAG_REPEAT))
|
|
{
|
|
pThis->RequestKeyboard(pInputData->UserIndex);
|
|
rfHandled = TRUE;
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
void CXuiCtrl4JEdit::RequestKeyboard(int iPad)
|
|
{
|
|
InputManager.RequestKeyboard(m_uiTitle,GetText(),m_uiText,iPad,wchText,m_uTextLimit+1,&CXuiCtrl4JEdit::KeyboardReturned,this,m_eKeyboardMode,app.GetStringTable());
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT CXuiCtrl4JEdit::SendNotifyValueChanged(int iValue)
|
|
{
|
|
CXuiCtrl4JEdit *pThis;
|
|
HRESULT hr = XuiObjectFromHandle(m_hObj, (void **) &pThis);
|
|
if (FAILED(hr))
|
|
return hr;
|
|
HXUIOBJ hParent;
|
|
//HRESULT hr=S_OK;
|
|
XUIMessage msg;
|
|
XUINotify msgNotify;
|
|
XUINotifyValueChanged msgNotifyValueChanged;
|
|
|
|
XuiElementGetParent(pThis->m_hObj, &hParent);
|
|
XuiNotifyValueChanged(&msg, &msgNotify, &msgNotifyValueChanged, XuiGetOuter(pThis->m_hObj), iValue);
|
|
XuiBubbleMessage(XuiGetOuter(hParent), &msg);
|
|
|
|
return hr;
|
|
}
|
|
|
|
int CXuiCtrl4JEdit::KeyboardReturned(void *pParam,bool bSet)
|
|
{
|
|
CXuiCtrl4JEdit* pClass = (CXuiCtrl4JEdit*)pParam;
|
|
HRESULT hr = S_OK;
|
|
|
|
if(bSet)
|
|
{
|
|
pClass->SetText(pClass->wchText);
|
|
// need to move the caret to the end of the newly set text
|
|
XuiEditSetCaretPosition(pClass->m_hObj, (int)wcsnlen(pClass->wchText, 50));
|
|
pClass->SendNotifyValueChanged(10); // 10 for a return
|
|
}
|
|
|
|
return hr;
|
|
}
|