/*******************************************************************************
This file is Part of the Gewi GUI Library for ZEngine.
Gewi and ZEngine Copyright (C) 2002, 2003 James Turk
Licensed under a BSD-style license. (see licensing.txt)
The maintainer of this library is James Turk (james@conceptofzero.net)
this library is found at the home of ZEngine http://zengine.sourceforge.net
*******************************************************************************/
/*!
\file GewiTextField.cpp
\brief Implementation of GTextField.
Implementation of GTextField, text input area widget.
$Id: GewiTextField.cpp,v 1.7 2003/08/10 01:40:56 cozman Exp $
\author James Turk
**/
#include "GewiTextField.h"
namespace Gewi
{
GTextField::GTextField(GContainer *parent) :
GWidget(parent),
rFont(GewiEngine::InvalidID),
rBackground(GewiEngine::InvalidID),
rMaxChars(256),
rLeftPadding(0)
{}
void GTextField::Create(float x, float y, float width, float height, ResourceID font, ResourceID backgroundImg, int maxChars, int leftPad)
{
GWidget::Create(x,y,width,height);
rFont = font;
rBackground = backgroundImg;
rMaxChars = maxChars;
rLeftPadding = leftPad;
}
void GTextField::Message(SDL_Event *rawEvent, GewiEvent event, Uint16 mouseX, Uint16 mouseY, char ch)
{
if(event == GE_KDOWN)
{
//casted to avoid warning
if((isgraph(ch) || ch == ' ') && rText.length() < static_cast(rMaxChars)) //only add characters + spaces
rText += ch;
else if(ch == '\b')
rText = rText.length() ? rText.substr(0,rText.length()-1) : ""; //go back one character
rGewi->Font(rFont)->DrawText(rText.length() ? rText : "",rBuffer);
}
}
void GTextField::Show()
{
rGewi->Image(rBackground)->Resize(rBoundRect.Width(),rBoundRect.Height());
rGewi->Image(rBackground)->Draw(rBoundRect.X(),rBoundRect.Y());
if(rBuffer.IsLoaded()) //don't draw empty buffer image
rBuffer.Draw(rLeftPadding+rBoundRect.X(),rBoundRect.Y()+(rBoundRect.Height()-rBuffer.Height())/2);
}
void GTextField::SetText(std::string text)
{
rText = text;
rGewi->Font(rFont)->DrawText(rText,rBuffer);
}
std::string GTextField::GetText()
{
return rText;
}
}