4jcraft/Minecraft.Client/Platform/Common/XUI/XUI_Ctrl_SliderWrapper.cpp
2026-03-22 12:40:22 -05:00

159 lines
4.3 KiB
C++

#include "../../Minecraft.World/Platform/stdafx.h"
#include "XUI_Ctrl_SliderWrapper.h"
#define NO_SOUND_TIMER 0
HRESULT CXuiCtrlSliderWrapper::OnInit(XUIMessageInit* pInitData,
BOOL& bHandled) {
void* pObj;
HXUIOBJ hObjChild;
XuiElementGetChildById(m_hObj, L"FocusSink", &hObjChild);
XuiObjectFromHandle(hObjChild, &pObj);
m_pFocusSink = (CXuiControl*)pObj;
XuiElementGetChildById(m_hObj, L"XuiSlider", &hObjChild);
XuiObjectFromHandle(hObjChild, &pObj);
m_pSlider = (CXuiSlider*)pObj;
m_sliderActive = false;
m_bDisplayVal = true;
m_bPlaySound = false; // make this false to avoid a sound being played in
// the first setting of the slider value in a scene
XuiSetTimer(m_hObj, NO_SOUND_TIMER, 50);
bHandled = TRUE;
return S_OK;
}
HRESULT CXuiCtrlSliderWrapper::OnKeyDown(XUIMessageInput* pInputData,
BOOL& rfHandled) {
ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode);
// switch(pInputData->dwKeyCode)
// {
// case VK_PAD_A:
// // 4J-PB - IGNORE !
// if(m_sliderActive)
// {
// m_pFocusSink->SetFocus(pInputData->UserIndex);
// m_sliderActive = false;
// }
// else
// {
// m_pSlider->SetFocus(pInputData->UserIndex);
// m_sliderActive = true;
// }
// rfHandled = TRUE;
//
// break;
// default:
// m_pSlider->SetFocus(pInputData->UserIndex);
// m_sliderActive = false;
// break;
//
// }
//
return S_OK;
}
HRESULT CXuiCtrlSliderWrapper::OnNotifyValueChanged(
HXUIOBJ hObjSource, XUINotifyValueChanged* pValueChangedData,
BOOL& rfHandled) {
XUIMessage Message;
XUINotify Notify;
XUINotifyValueChanged MsgValueChanged;
HRESULT hr;
HXUIOBJ hObj;
if (m_bPlaySound) {
m_bPlaySound = false;
CXuiSceneBase::PlayUISFX(eSFX_Scroll);
XuiSetTimer(m_hObj, NO_SOUND_TIMER, 150);
}
// app.DebugPrintf("Slider val changed - %d\n",pValueChangedData->nValue);
XuiNotifyValueChanged(&Message, &Notify, &MsgValueChanged, hObjSource,
pValueChangedData->nValue);
hr = GetParent(&hObj);
if (HRESULT_SUCCEEDED(hr)) {
hr = XuiBubbleMessage(hObj, &Message);
rfHandled = TRUE;
}
return S_OK;
}
HRESULT CXuiCtrlSliderWrapper::OnTimer(XUIMessageTimer* pData,
BOOL& rfHandled) {
if (pData->nId == NO_SOUND_TIMER) {
XuiKillTimer(m_hObj, NO_SOUND_TIMER);
m_bPlaySound = true;
}
return S_OK;
}
HRESULT CXuiCtrlSliderWrapper::SetValue(int nValue) {
CXuiCtrlSliderWrapper* pThis;
HRESULT hr = XuiObjectFromHandle(m_hObj, (void**)&pThis);
if (FAILED(hr)) return hr;
pThis->m_pSlider->SetValue(nValue);
return S_OK;
}
HRESULT CXuiCtrlSliderWrapper::SetValueDisplay(bool show) {
CXuiCtrlSliderWrapper* pThis;
HXUIOBJ hVisual, hText;
HRESULT hr = XuiObjectFromHandle(m_hObj, (void**)&pThis);
if (FAILED(hr)) return hr;
hr = XuiControlGetVisual(pThis->m_pSlider->m_hObj, &hVisual);
hr = XuiElementGetChildById(hVisual, L"Text_Value", &hText);
if (hText != NULL) {
XuiElementSetShow(hText, show);
}
return S_OK;
}
LPCWSTR CXuiCtrlSliderWrapper::GetText() {
CXuiCtrlSliderWrapper* pThis;
HRESULT hr = XuiObjectFromHandle(m_hObj, (void**)&pThis);
if (FAILED(hr)) return NULL;
return pThis->m_pSlider->GetText();
// return S_OK;
}
HRESULT CXuiCtrlSliderWrapper::SetText(LPCWSTR text, int iDataAssoc) {
CXuiCtrlSliderWrapper* pThis;
HRESULT hr = XuiObjectFromHandle(m_hObj, (void**)&pThis);
if (FAILED(hr)) return hr;
// if there's a data assoc value, find the right control for it
if (iDataAssoc != 0) {
}
pThis->m_pSlider->SetText(text);
return hr;
}
HXUIOBJ CXuiCtrlSliderWrapper::GetSlider() {
CXuiCtrlSliderWrapper* pThis;
HRESULT hr = XuiObjectFromHandle(m_hObj, (void**)&pThis);
if (FAILED(hr)) return NULL;
return pThis->m_pSlider->m_hObj;
}
HRESULT CXuiCtrlSliderWrapper::SetRange(int nRangeMin, int nRangeMax) {
CXuiCtrlSliderWrapper* pThis;
HRESULT hr = XuiObjectFromHandle(m_hObj, (void**)&pThis);
if (FAILED(hr)) return hr;
pThis->m_pSlider->SetRange(nRangeMin, nRangeMax);
return S_OK;
}