From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.Client/Common/UI/UIScene_MessageBox.cpp | 161 ++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 Minecraft.Client/Common/UI/UIScene_MessageBox.cpp (limited to 'Minecraft.Client/Common/UI/UIScene_MessageBox.cpp') diff --git a/Minecraft.Client/Common/UI/UIScene_MessageBox.cpp b/Minecraft.Client/Common/UI/UIScene_MessageBox.cpp new file mode 100644 index 00000000..6b8dc552 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_MessageBox.cpp @@ -0,0 +1,161 @@ +#include "stdafx.h" +#include "UI.h" +#include "UIScene_MessageBox.h" + +UIScene_MessageBox::UIScene_MessageBox(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer) +{ + // Setup all the Iggy references we need for this scene + initialiseMovie(); + + MessageBoxInfo *param = (MessageBoxInfo *)initData; + + m_buttonCount = param->uiOptionC; + + IggyDataValue result; + IggyDataValue value[2]; + value[0].type = IGGY_DATATYPE_number; + value[0].number = param->uiOptionC; + + value[1].type = IGGY_DATATYPE_number; + value[1].number = param->dwFocusButton; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcInit , 2 , value ); + + int buttonIndex = 0; + if(param->uiOptionC > 3) + { + m_buttonButtons[eControl_Button0].init(app.GetString(param->uiOptionA[buttonIndex]),buttonIndex); + ++buttonIndex; + } + if(param->uiOptionC > 2) + { + m_buttonButtons[eControl_Button1].init(app.GetString(param->uiOptionA[buttonIndex]),buttonIndex); + ++buttonIndex; + } + if(param->uiOptionC > 1) + { + m_buttonButtons[eControl_Button2].init(app.GetString(param->uiOptionA[buttonIndex]),buttonIndex); + ++buttonIndex; + } + m_buttonButtons[eControl_Button3].init(app.GetString(param->uiOptionA[buttonIndex]),buttonIndex); + + m_labelTitle.init(app.GetString(param->uiTitle)); + m_labelContent.init(app.GetString(param->uiText)); + + out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcAutoResize , 0 , NULL ); + + m_Func = param->Func; + m_lpParam = param->lpParam; + + parentLayer->addComponent(iPad,eUIComponent_MenuBackground); + + // 4J-TomK - rebuild touch after auto resize +#ifdef __PSVITA__ + ui.TouchBoxRebuild(this); +#endif +} + +UIScene_MessageBox::~UIScene_MessageBox() +{ + m_parentLayer->removeComponent(eUIComponent_MenuBackground); +} + +wstring UIScene_MessageBox::getMoviePath() +{ + if(app.GetLocalPlayerCount() > 1 && !m_parentLayer->IsFullscreenGroup()) + { + return L"MessageBoxSplit"; + } + else + { + return L"MessageBox"; + } +} + +void UIScene_MessageBox::updateTooltips() +{ + ui.SetTooltips( m_parentLayer->IsFullscreenGroup()?XUSER_INDEX_ANY:m_iPad, IDS_TOOLTIPS_SELECT, IDS_TOOLTIPS_CANCEL); +} + +void UIScene_MessageBox::handleReload() +{ + IggyDataValue result; + IggyDataValue value[2]; + value[0].type = IGGY_DATATYPE_number; + value[0].number = m_buttonCount; + + value[1].type = IGGY_DATATYPE_number; + value[1].number = (F64)getControlFocus(); + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcInit , 2 , value ); + + out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcAutoResize , 0 , NULL ); +} + +void UIScene_MessageBox::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) +{ + //app.DebugPrintf("UIScene_DebugOverlay handling input for pad %d, key %d, down- %s, pressed- %s, released- %s\n", iPad, key, down?"TRUE":"FALSE", pressed?"TRUE":"FALSE", released?"TRUE":"FALSE"); + ui.AnimateKeyPress(m_iPad, key, repeat, pressed, released); + switch(key) + { + case ACTION_MENU_CANCEL: + if(pressed) + { + navigateBack(); + if(m_Func) m_Func(m_lpParam, iPad, C4JStorage::EMessage_Cancelled); + } + break; + case ACTION_MENU_OK: +#ifdef __ORBIS__ + case ACTION_MENU_TOUCHPAD_PRESS: +#endif + sendInputToMovie(key, repeat, pressed, released); + break; + case ACTION_MENU_UP: + case ACTION_MENU_DOWN: + sendInputToMovie(key, repeat, pressed, released); + break; + } + handled = true; +} + +void UIScene_MessageBox::handlePress(F64 controlId, F64 childId) +{ + C4JStorage::EMessageResult result = C4JStorage::EMessage_Cancelled; + switch((int)controlId) + { + case 0: + result = C4JStorage::EMessage_ResultAccept; + break; + case 1: + result = C4JStorage::EMessage_ResultDecline; + break; + case 2: + result = C4JStorage::EMessage_ResultThirdOption; + break; + case 3: + result = C4JStorage::EMessage_ResultFourthOption; + break; + } + + navigateBack(); + if(m_Func) m_Func(m_lpParam, m_iPad, result); +} + +bool UIScene_MessageBox::hasFocus(int iPad) +{ + // 4J-JEV: Fix for PS4 #5204 - [TRC][R4033] The application can be locked up by second user logging out of the system. + if (m_iPad == 255) + { + // Message box is for everyone + return bHasFocus; + } + else if (ProfileManager.IsSignedIn(m_iPad)) + { + // Owner is still present + return bHasFocus && (iPad == m_iPad); + } + else + { + // Original owner has left so let everyone interact + return bHasFocus; + } +} \ No newline at end of file -- cgit v1.2.3