diff options
Diffstat (limited to 'Minecraft.Client/Common/UI/UIControl_Base.cpp')
| -rw-r--r-- | Minecraft.Client/Common/UI/UIControl_Base.cpp | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/UI/UIControl_Base.cpp b/Minecraft.Client/Common/UI/UIControl_Base.cpp new file mode 100644 index 00000000..18af2f63 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIControl_Base.cpp @@ -0,0 +1,112 @@ +#include "stdafx.h" +#include "UI.h" +#include "UIControl.h" +#include "..\..\..\Minecraft.World\StringHelpers.h" +#include "..\..\..\Minecraft.World\JavaMath.h" + +UIControl_Base::UIControl_Base() +{ + m_bLabelChanged = false; + m_label = L""; + m_id = 0; +} + +bool UIControl_Base::setupControl(UIScene *scene, IggyValuePath *parent, const string &controlName) +{ + bool success = UIControl::setupControl(scene,parent,controlName); + + m_setLabelFunc = registerFastName(L"SetLabel"); + m_initFunc = registerFastName(L"Init"); + m_funcGetLabel = registerFastName(L"GetLabel"); + m_funcCheckLabelWidths = registerFastName(L"CheckLabelWidths"); + + return success; +} + +void UIControl_Base::tick() +{ + UIControl::tick(); + + if(m_bLabelChanged) + { + //app.DebugPrintf("Calling SetLabel - '%ls'\n", m_label.c_str()); + m_bLabelChanged = false; + + IggyDataValue result; + IggyDataValue value[1]; + value[0].type = IGGY_DATATYPE_string_UTF16; + IggyStringUTF16 stringVal; + + stringVal.string = (IggyUTF16*)m_label.c_str(); + stringVal.length = m_label.length(); + value[0].string16 = stringVal; + + IggyResult out = IggyPlayerCallMethodRS ( m_parentScene->getMovie() , &result, getIggyValuePath() , m_setLabelFunc , 1 , value ); + } +} + +void UIControl_Base::setLabel(const wstring &label, bool instant, bool force) +{ + if( force || ((!m_label.empty() || !label.empty()) && m_label.compare(label) != 0) ) m_bLabelChanged = true; + m_label = label; + + if(m_bLabelChanged && instant) + { + m_bLabelChanged = false; + + IggyDataValue result; + IggyDataValue value[1]; + value[0].type = IGGY_DATATYPE_string_UTF16; + IggyStringUTF16 stringVal; + + stringVal.string = (IggyUTF16*)m_label.c_str(); + stringVal.length = m_label.length(); + value[0].string16 = stringVal; + + IggyResult out = IggyPlayerCallMethodRS ( m_parentScene->getMovie() , &result, getIggyValuePath() , m_setLabelFunc , 1 , value ); + } +} + +void UIControl_Base::setLabel(const string &label) +{ + wstring wlabel = convStringToWstring(label); + setLabel(wlabel); +} + +const wchar_t* UIControl_Base::getLabel() +{ + IggyDataValue result; + IggyResult out = IggyPlayerCallMethodRS ( m_parentScene->getMovie() , &result, getIggyValuePath() , m_funcGetLabel , 0 , NULL ); + + if(result.type == IGGY_DATATYPE_string_UTF16) + { + m_label = wstring( (wchar_t *)result.string16.string, result.string16.length); + } + + return m_label.c_str(); +} + +void UIControl_Base::setAllPossibleLabels(int labelCount, wchar_t labels[][256]) +{ + IggyDataValue result; + IggyDataValue *value = new IggyDataValue[labelCount]; + IggyStringUTF16 * stringVal = new IggyStringUTF16[labelCount]; + + for(unsigned int i = 0; i < labelCount; ++i) + { + stringVal[i].string = (IggyUTF16 *)labels[i]; + stringVal[i].length = wcslen(labels[i]); + value[i].type = IGGY_DATATYPE_string_UTF16; + value[i].string16 = stringVal[i]; + } + + IggyResult out = IggyPlayerCallMethodRS ( m_parentScene->getMovie() , &result, getIggyValuePath() , m_funcCheckLabelWidths , labelCount , value ); + + delete [] value; + delete [] stringVal; +} + +bool UIControl_Base::hasFocus() +{ + return m_parentScene->controlHasFocus( this ); +} |
