1395 lines
34 KiB
C++
1395 lines
34 KiB
C++
//-------------------------------------------------------------------------------------------------
|
|
// Author: Márcio Martins
|
|
//
|
|
// Purpose:
|
|
// - An EditBox
|
|
//
|
|
// History:
|
|
// - [20/6/2003] created the file
|
|
//
|
|
//-------------------------------------------------------------------------------------------------
|
|
#include "StdAfx.h"
|
|
#include "UIEditBox.h"
|
|
#include "UISystem.h"
|
|
|
|
|
|
|
|
_DECLARE_SCRIPTABLEEX(CUIEditBox);
|
|
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
// Control and Shift Modifier Checking
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
|
#define CONTROLDOWN (m_pUISystem->GetIInput()->KeyDown(XKEY_LCONTROL) || m_pUISystem->GetIInput()->KeyDown(XKEY_RCONTROL))
|
|
#define SHIFTDOWN (m_pUISystem->GetIInput()->KeyDown(XKEY_LSHIFT) || m_pUISystem->GetIInput()->KeyDown(XKEY_RSHIFT))
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
CUIEditBox::CUIEditBox()
|
|
: m_iHAlignment(UIALIGN_LEFT),
|
|
m_iVAlignment(UIALIGN_MIDDLE),
|
|
m_cCursorColor(color4f(0.0f, 0.0f, 0.0f, 1.0f)),
|
|
m_iSelectionStart(0),
|
|
m_iSelectionCount(0),
|
|
m_iCursorPos(0),
|
|
m_fLeftSpacing(0),
|
|
m_fRightSpacing(0),
|
|
m_bMouseSelecting(0),
|
|
m_bMouseSelectingAll(0),
|
|
m_iMouseSelectionStart(0),
|
|
m_cSelectionColor(0.0f, 0.0f, 0.8f, 0.8f),
|
|
m_iPathSafe(0),
|
|
m_iNameSafe(0),
|
|
m_iUbiSafe(0),
|
|
m_iNumeric(0),
|
|
m_iMaxLength(0)
|
|
{
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
CUIEditBox::~CUIEditBox()
|
|
{
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
string CUIEditBox::GetClassName()
|
|
{
|
|
return UICLASSNAME_EDITBOX;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
LRESULT CUIEditBox::Update(unsigned int iMessage, WPARAM wParam, LPARAM lParam) //AMD Port
|
|
{
|
|
switch (iMessage)
|
|
{
|
|
case UIM_LBUTTONDBLCLICK:
|
|
{
|
|
m_bMouseSelectingAll = 1;
|
|
m_iSelectionStart = 0;
|
|
m_iSelectionCount = m_szText.size();
|
|
}
|
|
return 1;
|
|
case UIM_KEYUP:
|
|
if ((lParam == XKEY_RETURN) || (lParam == XKEY_NUMPADENTER))
|
|
{
|
|
OnCommand();
|
|
}
|
|
return 1;
|
|
case UIM_KEYDOWN:
|
|
return ProcessInput(iMessage, lParam, (char *)wParam);
|
|
case UIM_LBUTTONDOWN:
|
|
{
|
|
if (m_bMouseSelectingAll)
|
|
{
|
|
break;
|
|
}
|
|
|
|
IFFont *pFont = m_pUISystem->GetIFont(m_pFont);
|
|
UIRect pTextRect = GetTextRect();
|
|
|
|
int iCursorPosition = GetCursorPosition(UIM_GET_X_FLOAT(wParam), UIM_GET_Y_FLOAT(wParam), pTextRect, pFont);
|
|
|
|
if (iCursorPosition == -1)
|
|
{
|
|
iCursorPosition = m_iCursorPos;
|
|
}
|
|
|
|
if (!m_iSelectionCount && (m_pUISystem->GetIInput()->KeyDown(XKEY_LSHIFT) || m_pUISystem->GetIInput()->KeyDown(XKEY_RSHIFT)))
|
|
{
|
|
m_iSelectionStart = min(m_iCursorPos, iCursorPosition);
|
|
m_iSelectionCount = abs(iCursorPosition - m_iCursorPos);
|
|
}
|
|
else if (!m_bMouseSelecting)
|
|
{
|
|
m_iMouseSelectionStart = iCursorPosition;
|
|
m_iSelectionStart = iCursorPosition;
|
|
m_iSelectionCount = 0;
|
|
m_bMouseSelecting = 1;
|
|
}
|
|
else
|
|
{
|
|
m_iSelectionCount = abs(m_iMouseSelectionStart - iCursorPosition);
|
|
|
|
if (iCursorPosition <= m_iMouseSelectionStart)
|
|
{
|
|
m_iSelectionStart = iCursorPosition;
|
|
}
|
|
}
|
|
|
|
m_iCursorPos = iCursorPosition;
|
|
}
|
|
break;
|
|
case UIM_MOUSEUP:
|
|
{
|
|
m_bMouseSelectingAll = 0;
|
|
m_bMouseSelecting = 0;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return CUISystem::DefaultUpdate(this, iMessage, wParam, lParam);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::Draw(int iPass)
|
|
{
|
|
if (iPass != 0)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
m_pUISystem->BeginDraw(this);
|
|
|
|
// get the absolute widget rect
|
|
UIRect pAbsoluteRect(m_pRect);
|
|
|
|
m_pUISystem->GetAbsoluteXY(&pAbsoluteRect.fLeft, &pAbsoluteRect.fTop, m_pRect.fLeft, m_pRect.fTop, m_pParent);
|
|
|
|
|
|
// if transparent, draw only the clipped text
|
|
if ((GetStyle() & UISTYLE_TRANSPARENT) == 0)
|
|
{
|
|
// if shadowed, draw the shadow
|
|
if (GetStyle() & UISTYLE_SHADOWED)
|
|
{
|
|
m_pUISystem->DrawShadow(pAbsoluteRect, UI_DEFAULT_SHADOW_COLOR, UI_DEFAULT_SHADOW_BORDER_SIZE, this);
|
|
}
|
|
}
|
|
|
|
// if border is large enough to be visible, draw it
|
|
if (m_pBorder.fSize > 0.125f)
|
|
{
|
|
m_pUISystem->DrawBorder(pAbsoluteRect, m_pBorder);
|
|
m_pUISystem->AdjustRect(&pAbsoluteRect, pAbsoluteRect, m_pBorder.fSize);
|
|
}
|
|
|
|
// save the client area without the border,
|
|
// to draw a greyed quad later, if disabled
|
|
UIRect pGreyedRect = pAbsoluteRect;
|
|
|
|
if ((GetStyle() & UISTYLE_TRANSPARENT) == 0)
|
|
{
|
|
// if we are a textured button, draw the correct texture
|
|
if (m_pTexture.iTextureID > -1)
|
|
{
|
|
m_pUISystem->DrawImage(pAbsoluteRect, m_pTexture, m_cColor);
|
|
}
|
|
// if not textured, just draw the back quad
|
|
else
|
|
{
|
|
m_pUISystem->DrawQuad(pAbsoluteRect, m_cColor);
|
|
}
|
|
}
|
|
|
|
// get the font with the correct properties set
|
|
IFFont *pFont = m_pUISystem->GetIFont(m_pFont);
|
|
|
|
// get the text rectangle
|
|
UIRect pTextRect = UIRect(pAbsoluteRect.fLeft+m_fLeftSpacing, pAbsoluteRect.fTop, pAbsoluteRect.fWidth-m_fLeftSpacing-m_fRightSpacing, pAbsoluteRect.fHeight);
|
|
|
|
m_pUISystem->AdjustRect(&pTextRect, pTextRect, UI_DEFAULT_TEXT_BORDER_SIZE);
|
|
m_pUISystem->SetScissor(&pTextRect);
|
|
|
|
// if we have text, draw it
|
|
if (!m_szText.empty())
|
|
{
|
|
// if we have selected text, draw the selection background
|
|
if (m_iSelectionCount)
|
|
{
|
|
DrawSelection(m_iSelectionStart, m_iSelectionCount, pFont, pTextRect);
|
|
}
|
|
|
|
if (m_iStyle & UISTYLE_PASSWORD)
|
|
{
|
|
wchar_t szPassword[256] = {L'*'};
|
|
|
|
int iSize = min(m_szText.size(), 255);
|
|
szPassword[iSize] = 0;
|
|
|
|
for (int i = 1; i < iSize; i++)
|
|
{
|
|
szPassword[i] = szPassword[0];
|
|
}
|
|
|
|
m_pUISystem->DrawText(pTextRect, m_iHAlignment, m_iVAlignment, pFont, szPassword, 0);
|
|
}
|
|
else
|
|
{
|
|
m_pUISystem->DrawText(pTextRect, m_iHAlignment, m_iVAlignment, pFont, m_szText.c_str(), 0);
|
|
}
|
|
}
|
|
|
|
if (GetFlags() & UIFLAG_HAVEFOCUS)
|
|
{
|
|
// draw the blinking cursor
|
|
if (cry_sinf(m_pUISystem->GetISystem()->GetITimer()->GetCurrTime() * 3.0f * UI_DEFAULT_CURSOR_BLINK_SPEED) > 0.0f)
|
|
{
|
|
// get the cursor position
|
|
float fCursorX, fCursorY, fCursorHeight;
|
|
|
|
GetCursorCoord(&fCursorX, &fCursorY, &fCursorHeight, pTextRect, pFont);
|
|
|
|
if (m_pUISystem->PointInRect(pTextRect, fCursorX, fCursorY))
|
|
{
|
|
DrawCursor(pTextRect, pFont, fCursorX, fCursorY, fCursorHeight);
|
|
}
|
|
}
|
|
}
|
|
|
|
// draw a greyed quad ontop, if disabled
|
|
if ((m_iFlags & UIFLAG_ENABLED) == 0)
|
|
{
|
|
m_pUISystem->ResetDraw();
|
|
m_pUISystem->DrawGreyedQuad(pGreyedRect, m_cGreyedColor, m_iGreyedBlend);
|
|
}
|
|
|
|
m_pUISystem->EndDraw();
|
|
|
|
// draw the children
|
|
if (m_pUISystem->ShouldSortByZ())
|
|
{
|
|
SortChildrenByZ();
|
|
}
|
|
|
|
DrawChildren();
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
void CUIEditBox::InitializeTemplate(IScriptSystem *pScriptSystem)
|
|
{
|
|
_ScriptableEx<CUIEditBox>::InitializeTemplate(pScriptSystem);
|
|
|
|
REGISTER_COMMON_MEMBERS(pScriptSystem, CUIEditBox);
|
|
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, SetText);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, GetText);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, Clear);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, SetMaxLength);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, GetMaxLength);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, GetTextLength);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, SetVAlign);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, GetVAlign);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, SetHAlign);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, GetHAlign);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, SetSelectionStart);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, GetSelectionStart);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, SetSelectionCount);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, GetSelectionCount);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, SelectAll);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, DeselectAll);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, SetCursorPosition);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, GetCursorPosition);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, Cut);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, CopyToClipboard);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, CutToClipboard);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, PasteFromClipboard);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, SetCursorColor);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, GetCursorColor);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, SetTexture);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, GetTexture);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, SetCursorColor);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, GetCursorColor);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, SetNumeric);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, SetPathSafe);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, SetNameSafe);
|
|
REGISTER_SCRIPTOBJECT_MEMBER(pScriptSystem, CUIEditBox, SetPassword);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::Cut()
|
|
{
|
|
if (m_iSelectionCount < 1)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
m_szText.erase(m_iSelectionStart, m_iSelectionCount);
|
|
m_iCursorPos = m_iSelectionStart;
|
|
|
|
m_iSelectionStart = m_iSelectionCount = 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::CopyToClipboard()
|
|
{
|
|
#if !defined(LINUX)
|
|
if (m_szText.empty())
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if (!OpenClipboard(0))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
HGLOBAL hGlobal;
|
|
LPVOID pGlobal;
|
|
int iTextSize = m_szText.size();
|
|
|
|
if (GetSelectedCount())
|
|
{
|
|
iTextSize = GetSelectedCount();
|
|
}
|
|
|
|
hGlobal = GlobalAlloc(GHND, (iTextSize + 1) * sizeof(wchar_t));
|
|
pGlobal = GlobalLock (hGlobal);
|
|
|
|
memcpy(pGlobal, &m_szText.c_str()[GetSelectionStart()], iTextSize * sizeof(wchar_t));
|
|
((short *)pGlobal)[iTextSize] = 0;
|
|
|
|
GlobalUnlock(hGlobal);
|
|
|
|
EmptyClipboard();
|
|
SetClipboardData(CF_UNICODETEXT, hGlobal);
|
|
CloseClipboard();
|
|
|
|
OnChanged();
|
|
#endif
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::CutToClipboard()
|
|
{
|
|
if (CopyToClipboard())
|
|
{
|
|
Cut();
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::PasteFromClipboard()
|
|
{
|
|
#if !defined(LINUX)
|
|
HGLOBAL hGlobal;
|
|
LPVOID pGlobal;
|
|
bool bUnicode = true;
|
|
|
|
if (!IsClipboardFormatAvailable(CF_UNICODETEXT))
|
|
{
|
|
if (!IsClipboardFormatAvailable(CF_TEXT))
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
if (!OpenClipboard(0))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
hGlobal = GetClipboardData(CF_UNICODETEXT);
|
|
|
|
if (!hGlobal)
|
|
{
|
|
hGlobal = GetClipboardData(CF_TEXT);
|
|
|
|
if (!hGlobal)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
bUnicode = false;
|
|
}
|
|
|
|
pGlobal = GlobalLock(hGlobal);
|
|
|
|
if (bUnicode)
|
|
{
|
|
wchar_t *pString = (wchar_t *)pGlobal;
|
|
wchar_t pWString[2048];
|
|
wchar_t *p = pWString;
|
|
|
|
|
|
int iLength = 0;
|
|
|
|
for (int i = 0; (pString[i] != '\n') && (pString[i] != '\r') && (pString[i] != '\0'); i++)
|
|
{
|
|
if (CheckChar(pString[i]))
|
|
{
|
|
++iLength;
|
|
*p++ = pString[i];
|
|
}
|
|
}
|
|
|
|
*p = 0;
|
|
|
|
if (m_iMaxLength)
|
|
{
|
|
iLength = min(iLength, (m_iMaxLength - (int)m_szText.size()));
|
|
}
|
|
|
|
m_szText.insert(m_iCursorPos, pWString, iLength);
|
|
|
|
m_iCursorPos += iLength;
|
|
}
|
|
else
|
|
{
|
|
char *pString = (char *)pGlobal;
|
|
wchar_t pWString[2048];
|
|
wchar_t *p = pWString;
|
|
|
|
// convert char to wchar_t
|
|
|
|
int i = 0;
|
|
int iLength = 0;
|
|
for (; pString[i] != 0; i++)
|
|
{
|
|
if ((pString[i] == '\n') || (pString[i] == '\r'))
|
|
{
|
|
break;
|
|
}
|
|
|
|
if (CheckChar((wchar_t)((unsigned char)pString[i])))
|
|
{
|
|
++iLength;
|
|
*p++ = (unsigned char)pString[i];
|
|
}
|
|
}
|
|
|
|
*p = 0;
|
|
|
|
if (m_iMaxLength)
|
|
{
|
|
iLength = min(iLength, (m_iMaxLength - (int)m_szText.size()));
|
|
}
|
|
|
|
m_szText.insert(m_iCursorPos, pWString, iLength);
|
|
|
|
m_iCursorPos += i;
|
|
}
|
|
|
|
GlobalUnlock(hGlobal);
|
|
CloseClipboard();
|
|
|
|
OnChanged();
|
|
#endif
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetSelectionStart()
|
|
{
|
|
return m_iSelectionStart;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetSelectedCount()
|
|
{
|
|
return m_iSelectionCount;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SetText(const wstring &szText)
|
|
{
|
|
m_szText.resize(0);
|
|
|
|
const wchar_t *pString = szText.c_str();
|
|
|
|
for (int i = 0; (pString[i] != '\n') && (pString[i] != '\r') && (pString[i] != '\0'); i++)
|
|
{
|
|
if (CheckChar(pString[i]))
|
|
{
|
|
m_szText.push_back(pString[i]);
|
|
|
|
if (m_iMaxLength && ((int)m_szText.size() >= m_iMaxLength))
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
m_iCursorPos = m_szText.size();
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetText(wstring &szText)
|
|
{
|
|
szText = m_szText;
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetText(string &szText)
|
|
{
|
|
m_pUISystem->ConvertToString(szText, m_szText);
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::DrawCursor(const UIRect &pTextRect, IFFont *pFont, float fX, float fY, float fHeight)
|
|
{
|
|
m_pUISystem->GetIRenderer()->SetMaterialColor(m_cCursorColor.v[0], m_cCursorColor.v[1], m_cCursorColor.v[2], m_cCursorColor.v[3]);
|
|
m_pUISystem->GetIRenderer()->Draw2dLine(fX, fY, fX, fY + fHeight);
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::DrawSelection(int iStart, int iCount, IFFont *pFont, const UIRect &pTextRect)
|
|
{
|
|
wstring pSelectedStr;
|
|
wstring pPreSelectionStr;
|
|
|
|
float fX, fY;
|
|
|
|
if (m_iStyle & UISTYLE_PASSWORD)
|
|
{
|
|
wstring szwPassword;
|
|
int i = m_szText.size();
|
|
|
|
szwPassword.reserve(i);
|
|
while(--i >= 0)
|
|
szwPassword.insert(0, L"*");
|
|
|
|
m_pUISystem->GetAlignedTextXY(&fX, &fY, pFont, pTextRect, szwPassword.c_str(), m_iHAlignment, m_iVAlignment);
|
|
|
|
pSelectedStr = szwPassword.substr(iStart, iCount);
|
|
pPreSelectionStr = szwPassword.substr(0, iStart);
|
|
}
|
|
else
|
|
{
|
|
m_pUISystem->GetAlignedTextXY(&fX, &fY, pFont, pTextRect, m_szText.c_str(), m_iHAlignment, m_iVAlignment);
|
|
|
|
pSelectedStr = m_szText.substr(iStart, iCount);
|
|
pPreSelectionStr = m_szText.substr(0, iStart);
|
|
}
|
|
|
|
// get text sizes
|
|
vector2f vPreSelectionSize = pFont->GetTextSizeW(pPreSelectionStr.c_str());
|
|
vector2f vSelectionSize = pFont->GetTextSizeW(pSelectedStr.c_str());
|
|
|
|
float fRcpScaleX = 1.0f / m_pUISystem->GetIRenderer()->ScaleCoordX(1);
|
|
float fRcpScaleY = 1.0f / m_pUISystem->GetIRenderer()->ScaleCoordY(1);
|
|
|
|
vPreSelectionSize.x *= fRcpScaleX;
|
|
vPreSelectionSize.y *= fRcpScaleY;
|
|
|
|
vSelectionSize.x *= fRcpScaleX;
|
|
vSelectionSize.y *= fRcpScaleY;
|
|
|
|
fX += vPreSelectionSize.x;
|
|
|
|
UIRect pRect(fX, fY, (float)vSelectionSize.x, (float)vSelectionSize.y);
|
|
|
|
m_pUISystem->DrawQuad(pRect, m_cSelectionColor);
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SelectLeft()
|
|
{
|
|
int iOldCursor = m_iCursorPos;
|
|
|
|
Left();
|
|
|
|
int iDelta = iOldCursor - m_iCursorPos;
|
|
|
|
if (iDelta)
|
|
{
|
|
if (m_iSelectionCount)
|
|
{
|
|
if (m_iSelectionStart < iOldCursor)
|
|
{
|
|
m_iSelectionCount -= iDelta;
|
|
}
|
|
else
|
|
{
|
|
m_iSelectionStart -= iDelta;
|
|
m_iSelectionCount += iDelta;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_iSelectionStart = m_iCursorPos;
|
|
m_iSelectionCount = iDelta;
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SelectRight()
|
|
{
|
|
int iOldCursor = m_iCursorPos;
|
|
|
|
Right();
|
|
|
|
int iDelta = m_iCursorPos - iOldCursor;
|
|
|
|
if (iDelta)
|
|
{
|
|
if (m_iSelectionCount)
|
|
{
|
|
if (m_iSelectionStart < iOldCursor)
|
|
{
|
|
m_iSelectionCount += iDelta;
|
|
}
|
|
else
|
|
{
|
|
m_iSelectionStart += iDelta;
|
|
m_iSelectionCount -= iDelta;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_iSelectionStart = iOldCursor;
|
|
m_iSelectionCount = iDelta;
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::Backspace()
|
|
{
|
|
if (m_iSelectionCount)
|
|
{
|
|
Cut();
|
|
|
|
return 1;
|
|
}
|
|
|
|
if (m_iCursorPos > 0)
|
|
{
|
|
if ((m_iCursorPos - 1 > 0) && ((m_iStyle & UISTYLE_PASSWORD) == 0))
|
|
{
|
|
if (m_szText[m_iCursorPos-2] == '$')
|
|
{
|
|
m_szText.erase(m_iCursorPos-1, 1);
|
|
m_iCursorPos--;
|
|
}
|
|
}
|
|
|
|
m_szText.erase(m_iCursorPos-1, 1);
|
|
|
|
m_iCursorPos--;
|
|
|
|
OnChanged();
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
int CUIEditBox::Delete()
|
|
{
|
|
if (m_iSelectionCount)
|
|
{
|
|
Cut();
|
|
}
|
|
else
|
|
{
|
|
if (m_iCursorPos < (int)m_szText.size())
|
|
{
|
|
if ((m_szText[m_iCursorPos] == '$') && (m_iCursorPos < (int)m_szText.size()-1) && ((m_iStyle & UISTYLE_PASSWORD) == 0))
|
|
{
|
|
m_szText.erase(m_iCursorPos, 1);
|
|
}
|
|
m_szText.erase(m_iCursorPos, 1);
|
|
|
|
OnChanged();
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::Left()
|
|
{
|
|
if ((m_iCursorPos > 1) && ((m_iStyle & UISTYLE_PASSWORD) == 0))
|
|
{
|
|
if (m_szText[m_iCursorPos-2] == '$')
|
|
{
|
|
m_iCursorPos -= 2;
|
|
}
|
|
else
|
|
{
|
|
m_iCursorPos--;
|
|
}
|
|
}
|
|
else if (m_iCursorPos > 0)
|
|
{
|
|
m_iCursorPos--;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::Right()
|
|
{
|
|
if ((m_iCursorPos + 1 < (int)m_szText.size()) && ((m_iStyle & UISTYLE_PASSWORD) == 0))
|
|
{
|
|
if (m_szText[m_iCursorPos] == '$')
|
|
{
|
|
m_iCursorPos += 2;
|
|
}
|
|
else
|
|
{
|
|
m_iCursorPos++;
|
|
}
|
|
}
|
|
else if (m_iCursorPos < (int)m_szText.size())
|
|
{
|
|
m_iCursorPos++;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::InsertChar(wchar_t cChar)
|
|
{
|
|
if (((m_iMaxLength) && ((int)m_szText.size() < m_iMaxLength)) || (!m_iMaxLength))
|
|
{
|
|
m_szText.insert(m_iCursorPos, &cChar, 1);
|
|
|
|
m_iCursorPos++;
|
|
|
|
OnChanged();
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::ProcessInput(unsigned int iMessage, int iKeyCode, char *szKeyName)
|
|
{
|
|
bool bProcess = 1;
|
|
// selection stuff
|
|
if (SHIFTDOWN || CONTROLDOWN)
|
|
{
|
|
if (SHIFTDOWN)
|
|
{
|
|
switch(iKeyCode)
|
|
{
|
|
case XKEY_LEFT:
|
|
SelectLeft();
|
|
break;
|
|
case XKEY_RIGHT:
|
|
SelectRight();
|
|
break;
|
|
case XKEY_HOME:
|
|
m_iSelectionStart = 0;
|
|
m_iSelectionCount = m_iCursorPos;
|
|
m_iCursorPos = 0;
|
|
break;
|
|
case XKEY_END:
|
|
if (!m_iSelectionCount)
|
|
{
|
|
m_iSelectionStart = m_iCursorPos;
|
|
}
|
|
|
|
m_iSelectionCount = m_szText.size() - m_iSelectionStart;
|
|
m_iCursorPos = (int)m_szText.size();
|
|
break;
|
|
case XKEY_INSERT:
|
|
PasteFromClipboard();
|
|
break;
|
|
case XKEY_DELETE:
|
|
CutToClipboard();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
if (CONTROLDOWN)
|
|
{
|
|
switch (iKeyCode)
|
|
{
|
|
case XKEY_C:
|
|
CopyToClipboard();
|
|
bProcess = 0;
|
|
break;
|
|
case XKEY_X:
|
|
CutToClipboard();
|
|
bProcess = 0;
|
|
break;
|
|
case XKEY_V:
|
|
PasteFromClipboard();
|
|
bProcess = 0;
|
|
break;
|
|
case XKEY_INSERT:
|
|
CopyToClipboard();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (iKeyCode)
|
|
{
|
|
case XKEY_LEFT:
|
|
Left();
|
|
m_iSelectionStart = 0;
|
|
m_iSelectionCount = 0;
|
|
m_bMouseSelecting = 0;
|
|
break;
|
|
case XKEY_RIGHT:
|
|
Right();
|
|
m_iSelectionStart = 0;
|
|
m_iSelectionCount = 0;
|
|
m_bMouseSelecting = 0;
|
|
break;
|
|
case XKEY_BACKSPACE:
|
|
Backspace();
|
|
break;
|
|
case XKEY_DELETE:
|
|
Delete();
|
|
break;
|
|
case XKEY_HOME:
|
|
m_iCursorPos = 0;
|
|
m_iSelectionCount = 0;
|
|
m_iSelectionStart = 0;
|
|
m_bMouseSelecting = 0;
|
|
break;
|
|
case XKEY_END:
|
|
m_iCursorPos = (int)m_szText.size();
|
|
m_iSelectionCount = 0;
|
|
m_iSelectionStart = 0;
|
|
m_bMouseSelecting = 0;
|
|
break;
|
|
case XKEY_RETURN:
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (bProcess && ((szKeyName) && (*szKeyName) && (szKeyName[1] == 0)) || (iKeyCode == XKEY_SPACE))
|
|
{
|
|
if (m_iSelectionCount)
|
|
{
|
|
Delete();
|
|
}
|
|
|
|
if (CheckChar((unsigned char)*szKeyName))
|
|
{
|
|
//InsertChar((iKeyCode == XKEY_SPACE ? L' ' : (unsigned char)*szKeyName));
|
|
if (iKeyCode == XKEY_SPACE)
|
|
{
|
|
InsertChar( L' ' );
|
|
}
|
|
else
|
|
{
|
|
wchar_t szwStr[256];
|
|
int iLength = strlen(szKeyName);
|
|
#if defined(LINUX)
|
|
mbstowcs(szwStr, szKeyName, iLength);
|
|
szwStr[iLength] = 0;
|
|
#else
|
|
MultiByteToWideChar(CP_ACP, 0, szKeyName, -1, szwStr, 256);
|
|
#endif
|
|
InsertChar(szwStr[0] );
|
|
}
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::CheckChar(wchar_t cChar)
|
|
{
|
|
char cAsciiChar = (char)cChar;
|
|
|
|
if (cAsciiChar == 0)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if (!m_szAllow.empty())
|
|
{
|
|
if (m_szAllow.find(cAsciiChar) == m_szAllow.npos)
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
if (!m_szDisallow.empty())
|
|
{
|
|
if (m_szDisallow.find(cAsciiChar) != m_szDisallow.npos)
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
if (m_iNumeric)
|
|
{
|
|
if (!isdigit(cChar) && (cChar != '.'))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if ((cChar == '.') && (m_szText.find('.') != m_szText.npos))
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
if (m_iPathSafe)
|
|
{
|
|
switch(cChar)
|
|
{
|
|
// chars that windows does not allow
|
|
case '\\':
|
|
case '/':
|
|
case ':':
|
|
case '*':
|
|
case '?':
|
|
case '\"':
|
|
case '<':
|
|
case '>':
|
|
case '|':
|
|
// chars that may cause problems with our game
|
|
case '@':
|
|
case '#':
|
|
case '%':
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
if (m_iNameSafe)
|
|
{
|
|
switch(cChar)
|
|
{
|
|
// chars that may cause problems with our game
|
|
case '@':
|
|
case '#':
|
|
case '%':
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
if (m_iUbiSafe)
|
|
{
|
|
if (isalnum(cChar))
|
|
{
|
|
return 1;
|
|
}
|
|
else if (cChar == '.' || cChar == '_' || cChar == '-')
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetCursorCoord(float *fX, float *fY, float *fHeight, const UIRect &pTextRect, IFFont *pFont)
|
|
{
|
|
m_pUISystem->GetAlignedTextXY(fX, fY, pFont, pTextRect, m_szText.c_str(), m_iHAlignment, m_iVAlignment);
|
|
|
|
vector2f vTextSize;
|
|
|
|
if (m_iStyle & UISTYLE_PASSWORD)
|
|
{
|
|
wstring szwPassword;
|
|
int i = m_iCursorPos;
|
|
|
|
szwPassword.reserve(i);
|
|
while(--i >= 0)
|
|
szwPassword.insert(0, L"*");
|
|
|
|
vTextSize = pFont->GetTextSizeW(szwPassword.c_str());
|
|
}
|
|
else
|
|
{
|
|
wstring pStr(m_szText.substr(0, m_iCursorPos));
|
|
vTextSize = pFont->GetTextSizeW(pStr.c_str());
|
|
}
|
|
|
|
|
|
vTextSize.x /= m_pUISystem->GetIRenderer()->ScaleCoordX(1.0f);
|
|
vTextSize.y /= m_pUISystem->GetIRenderer()->ScaleCoordY(1.0f);
|
|
|
|
*fX += vTextSize.x;
|
|
*fHeight = (float)vTextSize.y;
|
|
|
|
return 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetCursorPosition(float fAtX, float fAtY, const UIRect &pTextRect, IFFont *pFont)
|
|
{
|
|
if (m_pUISystem->PointInRect(pTextRect, fAtX, fAtY))
|
|
{
|
|
float fX, fY, fCharWidth;
|
|
float fRcpScaleX = 1.0f / m_pUISystem->GetIRenderer()->ScaleCoordX(1.0);
|
|
wchar_t pChar[2] = {0, 0};
|
|
|
|
m_pUISystem->GetAlignedTextXY(&fX, &fY, pFont, pTextRect, m_szText.c_str(), m_iHAlignment, m_iVAlignment);
|
|
|
|
for (int i = 0; i < (int)m_szText.size(); i++)
|
|
{
|
|
pChar[0] = m_szText[i];
|
|
|
|
if (pChar[0] == L'$')
|
|
{
|
|
++i;
|
|
if (m_szText[i] != '$')
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
fCharWidth = pFont->GetTextSizeW(pChar).x * fRcpScaleX;
|
|
|
|
if (fAtX >= fX && fAtX < fX + fCharWidth)
|
|
{
|
|
return i;
|
|
}
|
|
|
|
fX += fCharWidth;
|
|
}
|
|
|
|
if (fAtX > fX)
|
|
{
|
|
m_iCursorPos = m_szText.size();
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetStringLength(const wchar_t *pString)
|
|
{
|
|
int iStringSize = 0;
|
|
|
|
for (; pString[iStringSize] != 0; iStringSize++);
|
|
|
|
return iStringSize;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
// Script Functions
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SetText(IFunctionHandler *pH)
|
|
{
|
|
CHECK_SCRIPT_FUNCTION_PARAMCOUNT(m_pScriptSystem, GetName().c_str(), SetText, 1);
|
|
CHECK_SCRIPT_FUNCTION_PARAMTYPE2(m_pScriptSystem, GetName().c_str(), SetText, 1, svtString, svtNumber);
|
|
|
|
wstring szText;
|
|
|
|
m_pUISystem->ConvertToWString(szText, pH, 1);
|
|
|
|
SetText(szText);
|
|
|
|
return pH->EndFunctionNull();
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetText(IFunctionHandler *pH)
|
|
{
|
|
CHECK_SCRIPT_FUNCTION_PARAMCOUNT(m_pScriptSystem, GetName().c_str(), GetText, 0);
|
|
|
|
if (m_szText.empty())
|
|
{
|
|
return pH->EndFunctionNull();
|
|
}
|
|
|
|
char szString[1024] = {0,0};
|
|
m_pUISystem->ConvertToString(szString, m_szText, 1024);
|
|
|
|
return pH->EndFunction(szString);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::Clear(IFunctionHandler *pH)
|
|
{
|
|
m_szText.clear();
|
|
|
|
m_iCursorPos = 0;
|
|
m_iSelectionCount = 0;
|
|
m_iSelectionStart = 0;
|
|
|
|
return pH->EndFunctionNull();
|
|
}
|
|
//-------------------------------------------------------------------------------------------------
|
|
UIRect CUIEditBox::GetTextRect()
|
|
{
|
|
UIRect pTextRect(0, 0, m_pRect.fWidth, m_pRect.fHeight);
|
|
|
|
if (m_pBorder.fSize > 0.125f)
|
|
{
|
|
m_pUISystem->AdjustRect(&pTextRect, pTextRect, m_pBorder.fSize);
|
|
}
|
|
|
|
pTextRect.fLeft += m_fLeftSpacing;
|
|
pTextRect.fWidth -= m_fRightSpacing + m_fLeftSpacing;
|
|
|
|
m_pUISystem->AdjustRect(&pTextRect, pTextRect, UI_DEFAULT_TEXT_BORDER_SIZE);
|
|
|
|
return pTextRect;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SetMaxLength(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_FROM_SCRIPT(m_pScriptSystem, GetName().c_str(), SetMaxLength, m_iMaxLength);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetMaxLength(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_TO_SCRIPT(m_pScriptSystem, GetName().c_str(), GetMaxLength, m_iMaxLength);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetTextLength(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_TO_SCRIPT(m_pScriptSystem, GetName().c_str(), GetTextLength, int(m_szText.size()));
|
|
}
|
|
|
|
int CUIEditBox::SetVAlign(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_FROM_SCRIPT(m_pScriptSystem, GetName().c_str(), SetVAlign, m_iVAlignment);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetVAlign(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_TO_SCRIPT(m_pScriptSystem, GetName().c_str(), GetVAlign, m_iVAlignment);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SetHAlign(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_FROM_SCRIPT(m_pScriptSystem, GetName().c_str(), SetHAlign, m_iHAlignment);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetHAlign(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_TO_SCRIPT(m_pScriptSystem, GetName().c_str(), GetHAlign, m_iHAlignment);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SetSelectionStart(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_TO_SCRIPT(m_pScriptSystem, GetName().c_str(), SetSelectionStart, m_iSelectionStart);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetSelectionStart(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_FROM_SCRIPT(m_pScriptSystem, GetName().c_str(), GetSelectionStart, m_iSelectionStart);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SetSelectionCount(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_TO_SCRIPT(m_pScriptSystem, GetName().c_str(), SetSelectionCount, m_iSelectionCount);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetSelectionCount(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_FROM_SCRIPT(m_pScriptSystem, GetName().c_str(), GetSelectionCount, m_iSelectionCount);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SelectAll(IFunctionHandler *pH)
|
|
{
|
|
CHECK_SCRIPT_FUNCTION_PARAMCOUNT(m_pScriptSystem, GetName().c_str(), SelectAll, 0);
|
|
|
|
m_iSelectionStart = 0;
|
|
m_iSelectionCount = m_szText.size();
|
|
|
|
return pH->EndFunctionNull();
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::DeselectAll(IFunctionHandler *pH)
|
|
{
|
|
CHECK_SCRIPT_FUNCTION_PARAMCOUNT(m_pScriptSystem, GetName().c_str(), DeselectAll, 0);
|
|
|
|
m_iSelectionStart = 0;
|
|
m_iSelectionCount = 0;
|
|
|
|
return pH->EndFunctionNull();
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SetCursorPosition(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_FROM_SCRIPT(m_pScriptSystem, GetName().c_str(), GetCursorPosition, m_iCursorPos);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetCursorPosition(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_TO_SCRIPT(m_pScriptSystem, GetName().c_str(), GetCursorPosition, m_iCursorPos);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::Cut(IFunctionHandler *pH)
|
|
{
|
|
CHECK_SCRIPT_FUNCTION_PARAMCOUNT(m_pScriptSystem, GetName().c_str(), Cut, 0);
|
|
|
|
Cut();
|
|
|
|
return pH->EndFunctionNull();
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::CopyToClipboard(IFunctionHandler *pH)
|
|
{
|
|
CHECK_SCRIPT_FUNCTION_PARAMCOUNT(m_pScriptSystem, GetName().c_str(), CopyToClipboard, 0);
|
|
|
|
CopyToClipboard();
|
|
|
|
return pH->EndFunctionNull();
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::CutToClipboard(IFunctionHandler *pH)
|
|
{
|
|
CHECK_SCRIPT_FUNCTION_PARAMCOUNT(m_pScriptSystem, GetName().c_str(), CutToClipboard, 0);
|
|
|
|
CutToClipboard();
|
|
|
|
return pH->EndFunctionNull();
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::PasteFromClipboard(IFunctionHandler *pH)
|
|
{
|
|
CHECK_SCRIPT_FUNCTION_PARAMCOUNT(m_pScriptSystem, GetName().c_str(), PasteFromClipboard, 0);
|
|
|
|
PasteFromClipboard();
|
|
|
|
return pH->EndFunctionNull();
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SetTexture(IFunctionHandler *pH)
|
|
{
|
|
RETURN_TEXTURE_FROM_SCRIPT(m_pScriptSystem, GetName().c_str(), SetTexture, m_pTexture.iTextureID);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetTexture(IFunctionHandler *pH)
|
|
{
|
|
RETURN_TEXTURE_TO_SCRIPT(m_pScriptSystem, GetName().c_str(), GetTexture, m_pTexture.iTextureID);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SetCursorColor(IFunctionHandler *pH)
|
|
{
|
|
RETURN_COLOR_FROM_SCRIPT(m_pScriptSystem, GetName().c_str(), SetCursorColor, m_cCursorColor);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::GetCursorColor(IFunctionHandler *pH)
|
|
{
|
|
RETURN_COLOR_TO_SCRIPT(m_pScriptSystem, GetName().c_str(), GetCursorColor, m_cCursorColor);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SetNumeric(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_FROM_SCRIPT(m_pScriptSystem, GetName().c_str(), SetNumeric, m_iNumeric);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SetPathSafe(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_FROM_SCRIPT(m_pScriptSystem, GetName().c_str(), SetPathSafe, m_iPathSafe);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SetNameSafe(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_FROM_SCRIPT(m_pScriptSystem, GetName().c_str(), SetNameSafe, m_iNameSafe);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SetUbiSafe(IFunctionHandler *pH)
|
|
{
|
|
RETURN_INT_FROM_SCRIPT(m_pScriptSystem, GetName().c_str(), SetUbiSafe, m_iUbiSafe);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SetPassword(IFunctionHandler *pH)
|
|
{
|
|
CHECK_SCRIPT_FUNCTION_PARAMCOUNT(m_pScriptSystem, GetName().c_str(), SetPassword, 1);
|
|
CHECK_SCRIPT_FUNCTION_PARAMTYPE(m_pScriptSystem, GetName().c_str(), SetPassword, 1, svtNumber);
|
|
|
|
int iPassword = 0;
|
|
|
|
pH->GetParam(1, iPassword);
|
|
|
|
if (iPassword)
|
|
{
|
|
m_iStyle |= UISTYLE_PASSWORD;
|
|
}
|
|
else
|
|
{
|
|
m_iStyle &= ~UISTYLE_PASSWORD;
|
|
}
|
|
|
|
return pH->EndFunction();
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SetAllow(IFunctionHandler *pH)
|
|
{
|
|
CHECK_SCRIPT_FUNCTION_PARAMCOUNT(m_pScriptSystem, GetName().c_str(), SetAllow, 1);
|
|
CHECK_SCRIPT_FUNCTION_PARAMTYPE(m_pScriptSystem, GetName().c_str(), SetAllow, 1, svtString);
|
|
|
|
char *szAllow = 0;
|
|
|
|
if (pH->GetParam(1, szAllow))
|
|
{
|
|
m_szAllow = szAllow;
|
|
}
|
|
|
|
return pH->EndFunction();
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
int CUIEditBox::SetDisallow(IFunctionHandler *pH)
|
|
{
|
|
CHECK_SCRIPT_FUNCTION_PARAMCOUNT(m_pScriptSystem, GetName().c_str(), SetDisallow, 1);
|
|
CHECK_SCRIPT_FUNCTION_PARAMTYPE(m_pScriptSystem, GetName().c_str(), SetDisallow, 1, svtString);
|
|
|
|
char *szDisallow = 0;
|
|
|
|
if (pH->GetParam(1, szDisallow))
|
|
{
|
|
m_szDisallow = szDisallow;
|
|
}
|
|
|
|
return pH->EndFunction();
|
|
}
|