aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Common/XUI/XUI_Ctrl_4JEdit.cpp
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/Common/XUI/XUI_Ctrl_4JEdit.cpp
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/Common/XUI/XUI_Ctrl_4JEdit.cpp')
-rw-r--r--Minecraft.Client/Common/XUI/XUI_Ctrl_4JEdit.cpp200
1 files changed, 200 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/XUI/XUI_Ctrl_4JEdit.cpp b/Minecraft.Client/Common/XUI/XUI_Ctrl_4JEdit.cpp
new file mode 100644
index 00000000..cc3afeca
--- /dev/null
+++ b/Minecraft.Client/Common/XUI/XUI_Ctrl_4JEdit.cpp
@@ -0,0 +1,200 @@
+#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;
+}