added everything
This commit is contained in:
215
engine/gui/controls/guiCheckBoxCtrl.cc
Executable file
215
engine/gui/controls/guiCheckBoxCtrl.cc
Executable file
@@ -0,0 +1,215 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// Torque Game Engine
|
||||
// Copyright (C) GarageGames.com, Inc.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "console/console.h"
|
||||
#include "dgl/dgl.h"
|
||||
#include "gui/core/guiCanvas.h"
|
||||
#include "gui/controls/guiCheckBoxCtrl.h"
|
||||
#include "console/consoleTypes.h"
|
||||
|
||||
IMPLEMENT_CONOBJECT(GuiCheckBoxCtrl);
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
GuiCheckBoxCtrl::GuiCheckBoxCtrl()
|
||||
{
|
||||
mBounds.extent.set(140, 30);
|
||||
mStateOn = false;
|
||||
mIndent = 0;
|
||||
mButtonType = ButtonTypeCheck;
|
||||
mUseInactiveState = false;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void GuiCheckBoxCtrl::initPersistFields()
|
||||
{
|
||||
Parent::initPersistFields();
|
||||
|
||||
addField("useInactiveState", TypeBool, Offset(mUseInactiveState, GuiCheckBoxCtrl));
|
||||
}
|
||||
|
||||
bool GuiCheckBoxCtrl::onWake()
|
||||
{
|
||||
if(!Parent::onWake())
|
||||
return false;
|
||||
|
||||
// make sure there is a bitmap array for this control type
|
||||
// if it is declared as such in the control
|
||||
mProfile->constructBitmapArray();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void GuiCheckBoxCtrl::onMouseDown(const GuiEvent& event)
|
||||
{
|
||||
if (!mUseInactiveState)
|
||||
{
|
||||
Parent::onMouseDown(event);
|
||||
return;
|
||||
}
|
||||
|
||||
if (mProfile->mCanKeyFocus)
|
||||
setFirstResponder();
|
||||
|
||||
if (mProfile->mSoundButtonDown)
|
||||
{
|
||||
F32 pan = (F32(event.mousePoint.x)/F32(Canvas->mBounds.extent.x)*2.0f-1.0f)*0.8f;
|
||||
AUDIOHANDLE handle = alxCreateSource(mProfile->mSoundButtonDown);
|
||||
alxPlay(handle);
|
||||
}
|
||||
|
||||
//lock the mouse
|
||||
mouseLock();
|
||||
mDepressed = true;
|
||||
|
||||
//update
|
||||
setUpdate();
|
||||
}
|
||||
|
||||
void GuiCheckBoxCtrl::onMouseUp(const GuiEvent& event)
|
||||
{
|
||||
if (!mUseInactiveState)
|
||||
{
|
||||
Parent::onMouseUp(event);
|
||||
return;
|
||||
}
|
||||
|
||||
mouseUnlock();
|
||||
|
||||
setUpdate();
|
||||
|
||||
//if we released the mouse within this control, perform the action
|
||||
if (mDepressed)
|
||||
onAction();
|
||||
|
||||
mDepressed = false;
|
||||
}
|
||||
|
||||
void GuiCheckBoxCtrl::onAction()
|
||||
{
|
||||
if (!mUseInactiveState)
|
||||
{
|
||||
Parent::onAction();
|
||||
return;
|
||||
}
|
||||
|
||||
if(mButtonType == ButtonTypeCheck)
|
||||
{
|
||||
if (!mActive)
|
||||
{
|
||||
mActive = true;
|
||||
mStateOn = true;
|
||||
}
|
||||
else if (mStateOn)
|
||||
mStateOn = false;
|
||||
else if (!mStateOn)
|
||||
mActive = false;
|
||||
|
||||
// Update the console variable:
|
||||
if ( mConsoleVariable[0] )
|
||||
Con::setBoolVariable( mConsoleVariable, mStateOn );
|
||||
// Execute the console command (if any)
|
||||
if( mConsoleCommand[0] )
|
||||
{
|
||||
char buf[16];
|
||||
dSprintf(buf, sizeof(buf), "%d", getId());
|
||||
Con::setVariable("$ThisControl", buf);
|
||||
Con::evaluate( mConsoleCommand, false );
|
||||
}
|
||||
}
|
||||
setUpdate();
|
||||
|
||||
// Provide and onClick script callback.
|
||||
if( isMethod("onClick") )
|
||||
Con::executef( this, 2, "onClick" );
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void GuiCheckBoxCtrl::onRender(Point2I offset, const RectI &updateRect)
|
||||
{
|
||||
ColorI backColor = mActive ? mProfile->mFillColor : mProfile->mFillColorNA;
|
||||
ColorI fontColor = mMouseOver ? mProfile->mFontColorHL : mProfile->mFontColor;
|
||||
ColorI insideBorderColor = isFirstResponder() ? mProfile->mBorderColorHL : mProfile->mBorderColor;
|
||||
|
||||
// just draw the check box and the text:
|
||||
S32 xOffset = 0;
|
||||
dglClearBitmapModulation();
|
||||
if(mProfile->mBitmapArrayRects.size() >= 4)
|
||||
{
|
||||
S32 index = mStateOn;
|
||||
if(!mActive)
|
||||
index = 2;
|
||||
else if(mDepressed)
|
||||
index += 2;
|
||||
xOffset = mProfile->mBitmapArrayRects[0].extent.x + 2 + mIndent;
|
||||
S32 y = (mBounds.extent.y - mProfile->mBitmapArrayRects[0].extent.y) / 2;
|
||||
dglDrawBitmapSR(mProfile->mTextureHandle, offset + Point2I(mIndent, y), mProfile->mBitmapArrayRects[index]);
|
||||
}
|
||||
|
||||
if(mButtonText[0] != NULL)
|
||||
{
|
||||
dglSetBitmapModulation( fontColor );
|
||||
renderJustifiedText(Point2I(offset.x + xOffset, offset.y),
|
||||
Point2I(mBounds.extent.x - mBounds.extent.y, mBounds.extent.y),
|
||||
mButtonText);
|
||||
}
|
||||
//render the children
|
||||
renderChildControls(offset, updateRect);
|
||||
}
|
||||
|
||||
ConsoleMethod(GuiCheckBoxCtrl, setStateOn, void, 3, 3, "(state)")
|
||||
{
|
||||
if (dStricmp(argv[2], "true") == 0)
|
||||
object->setStateOn(1);
|
||||
else if (dStricmp(argv[2], "false") == 0)
|
||||
object->setStateOn(0);
|
||||
else
|
||||
object->setStateOn(dAtoi(argv[2]));
|
||||
}
|
||||
|
||||
void GuiCheckBoxCtrl::setStateOn(S32 state)
|
||||
{
|
||||
if (mUseInactiveState)
|
||||
{
|
||||
if (state < 0)
|
||||
{
|
||||
setActive(false);
|
||||
Parent::setStateOn(false);
|
||||
}
|
||||
else if (state == 0)
|
||||
{
|
||||
setActive(true);
|
||||
Parent::setStateOn(false);
|
||||
}
|
||||
else if (state > 0)
|
||||
{
|
||||
setActive(true);
|
||||
Parent::setStateOn(true);
|
||||
}
|
||||
}
|
||||
else
|
||||
Parent::setStateOn((bool)state);
|
||||
}
|
||||
|
||||
const char* GuiCheckBoxCtrl::getScriptValue()
|
||||
{
|
||||
if (mUseInactiveState)
|
||||
{
|
||||
if (isActive())
|
||||
if (mStateOn)
|
||||
return "1";
|
||||
else
|
||||
return "0";
|
||||
else
|
||||
return "-1";
|
||||
}
|
||||
else
|
||||
return Parent::getScriptValue();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// EOF //
|
||||
|
||||
|
||||
Reference in New Issue
Block a user