mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-25 10:33:36 +00:00
192 lines
6.2 KiB
C++
192 lines
6.2 KiB
C++
#include "../../Minecraft.World/Platform/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 = std::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 = std::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;
|
|
}
|