//------------------------------------------------------------------------
// CMovieButton
//------------------------------------------------------------------------
// simulating a real windows-button
CMovieButton::CMovieButton (const CRect &size,
CControlListener *listener,
long tag, // identifier tag (ID)
long heightOfOneImage, // height of one image in pixel
CBitmap *background,
CPoint &offset)
: CControl (size, listener, tag, background), offset (offset),
heightOfOneImage (heightOfOneImage), buttonState (value)
{}
//------------------------------------------------------------------------
CMovieButton::~CMovieButton ()
{}
//------------------------------------------------------------------------
void CMovieButton::draw (CDrawContext *pContext)
{
CPoint where;
where.h = 0;
bounceValue ();
if (value)
where.v = heightOfOneImage;
else
where.v = 0;
if (pBackground)
{
if (bTransparencyEnabled)
pBackground->drawTransparent (pContext, size, where);
else
pBackground->draw (pContext, size, where);
}
buttonState = value;
setDirty (false);
}
//------------------------------------------------------------------------
void CMovieButton::mouse (CDrawContext *pContext, CPoint &where)
{
if (!bMouseEnabled)
return;
long button = pContext->getMouseButtons ();
if (!(button & kLButton))
return;
// this simulates a real windows button
float fEntryState = value;
if (pContext->getMouseButtons ())
{
// begin of edit parameter
getParent ()->beginEdit (tag);
do
{
if (where.h >= size.left &&
where.v >= size.top &&
where.h <= size.right &&
where.v <= size.bottom)
value = !fEntryState;
else
value = fEntryState;
if (isDirty () && listener)
listener->valueChanged (pContext, this);
pContext->getMouseLocation (where);
doIdleStuff ();
}
while (pContext->getMouseButtons () == button);
// end of edit parameter
getParent ()->endEdit (tag);
}
else
{
value = !value;
if (listener)
listener->valueChanged (pContext, this);
}
buttonState = value;
}