diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/Common/UI/UIScene_Keyboard.cpp | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.Client/Common/UI/UIScene_Keyboard.cpp')
| -rw-r--r-- | Minecraft.Client/Common/UI/UIScene_Keyboard.cpp | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/UI/UIScene_Keyboard.cpp b/Minecraft.Client/Common/UI/UIScene_Keyboard.cpp new file mode 100644 index 00000000..fb1cc301 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_Keyboard.cpp @@ -0,0 +1,181 @@ +#include "stdafx.h" +#include "UI.h" +#include "UIScene_Keyboard.h" + +#define KEYBOARD_DONE_TIMER_ID 0 +#define KEYBOARD_DONE_TIMER_TIME 100 + +UIScene_Keyboard::UIScene_Keyboard(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer) +{ + // Setup all the Iggy references we need for this scene + initialiseMovie(); + + m_EnterTextLabel.init(L"Enter Sign Text"); + + m_KeyboardTextInput.init(L"", -1); + m_KeyboardTextInput.SetCharLimit(15); + + m_ButtonSpace.init(L"Space", -1); + m_ButtonCursorLeft.init(L"Cursor Left", -1); + m_ButtonCursorRight.init(L"Cursor Right", -1); + m_ButtonCaps.init(L"Caps", -1); + m_ButtonDone.init(L"Done", 0); // only the done button needs an id, the others will never call back! + m_ButtonSymbols.init(L"Symbols", -1); + m_ButtonBackspace.init(L"Backspace", -1); + + // Initialise function keyboard Buttons and set alternative symbol button string + wstring label = L"Abc"; + IggyStringUTF16 stringVal; + stringVal.string = (IggyUTF16*)label.c_str(); + stringVal.length = label.length(); + + IggyDataValue result; + IggyDataValue value[1]; + value[0].type = IGGY_DATATYPE_string_UTF16; + value[0].string16 = stringVal; + + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcInitFunctionButtons , 1 , value ); + + m_bKeyboardDonePressed = false; + + parentLayer->addComponent(iPad,eUIComponent_MenuBackground); +} + +UIScene_Keyboard::~UIScene_Keyboard() +{ + m_parentLayer->removeComponent(eUIComponent_MenuBackground); +} + +wstring UIScene_Keyboard::getMoviePath() +{ + if(app.GetLocalPlayerCount() > 1 && !m_parentLayer->IsFullscreenGroup()) + { + return L"KeyboardSplit"; + } + else + { + return L"Keyboard"; + } +} + +void UIScene_Keyboard::updateTooltips() +{ + ui.SetTooltips( DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK, -1, -1); +} + +bool UIScene_Keyboard::allowRepeat(int key) +{ + // 4J - TomK - we want to allow X and Y repeats! + switch(key) + { + case ACTION_MENU_OK: + case ACTION_MENU_CANCEL: + case ACTION_MENU_A: + case ACTION_MENU_B: + case ACTION_MENU_PAUSEMENU: + //case ACTION_MENU_X: + //case ACTION_MENU_Y: + return false; + } + return true; +} + +void UIScene_Keyboard::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) +{ + IggyDataValue result; + IggyResult out; + + if(repeat || pressed) + { + switch(key) + { + case ACTION_MENU_CANCEL: + navigateBack(); + handled = true; + break; + case ACTION_MENU_X: // X + out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcBackspaceButtonPressed, 0 , NULL ); + handled = true; + break; + case ACTION_MENU_PAGEUP: // LT + out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSymbolButtonPressed, 0 , NULL ); + handled = true; + break; + case ACTION_MENU_Y: // Y + out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSpaceButtonPressed, 0 , NULL ); + handled = true; + break; + case ACTION_MENU_STICK_PRESS: // LS + out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcCapsButtonPressed, 0 , NULL ); + handled = true; + break; + case ACTION_MENU_LEFT_SCROLL: // LB + out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcCursorLeftButtonPressed, 0 , NULL ); + handled = true; + break; + case ACTION_MENU_RIGHT_SCROLL: // RB + out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcCursorRightButtonPressed, 0 , NULL ); + handled = true; + break; + case ACTION_MENU_PAUSEMENU: // Start + if(!m_bKeyboardDonePressed) + { + out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcDoneButtonPressed, 0 , NULL ); + + // kick off done timer + addTimer(KEYBOARD_DONE_TIMER_ID,KEYBOARD_DONE_TIMER_TIME); + m_bKeyboardDonePressed = true; + } + handled = true; + break; + } + } + + switch(key) + { + case ACTION_MENU_OK: + case ACTION_MENU_LEFT: + case ACTION_MENU_RIGHT: + case ACTION_MENU_UP: + case ACTION_MENU_DOWN: + sendInputToMovie(key, repeat, pressed, released); + handled = true; + break; + } +} + +void UIScene_Keyboard::handlePress(F64 controlId, F64 childId) +{ + if((int)controlId == 0) + { + // Done has been pressed. At this point we can query for the input string and pass it on to wherever it is needed. + // we can not query for m_KeyboardTextInput.getLabel() here because we're in an iggy callback so we need to wait a frame. + if(!m_bKeyboardDonePressed) + { + // kick off done timer + addTimer(KEYBOARD_DONE_TIMER_ID,KEYBOARD_DONE_TIMER_TIME); + m_bKeyboardDonePressed = true; + } + } +} + +void UIScene_Keyboard::handleTimerComplete(int id) +{ + if(id == KEYBOARD_DONE_TIMER_ID) + { + // remove timer + killTimer(KEYBOARD_DONE_TIMER_ID); + + // we're done here! + KeyboardDonePressed(); + } +} + +void UIScene_Keyboard::KeyboardDonePressed() +{ + // Debug + app.DebugPrintf("UI Keyboard - DONE - [%ls]\n", m_KeyboardTextInput.getLabel()); + + // ToDo: Keyboard can now pass on its final string value and close itself down + navigateBack(); +}
\ No newline at end of file |
