Files
haiku-beta6/src/apps/cdplayer/TwoStateDrawButton.cpp
T
Adrien Destugues 26c424b68f 80-column limit for cdplayer
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39837 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-13 21:37:20 +00:00

167 lines
3.1 KiB
C++

/*
* Copyright (c) 2006-2007, Haiku, Inc.
* Distributed under the terms of the MIT license.
*
* Author:
* DarkWyrm, [email protected]
*/
#include "TwoStateDrawButton.h"
TwoStateDrawButton::TwoStateDrawButton(BRect frame, const char *name,
BBitmap *upone, BBitmap *downone, BBitmap *uptwo, BBitmap *downtwo,
BMessage *msg, const int32 &resize, const int32 &flags)
: BButton(frame, name, "", msg, resize, flags),
fUpOne(upone),
fDownOne(downone),
fUpTwo(uptwo),
fDownTwo(downtwo),
fDisabledOne(NULL),
fDisabledTwo(NULL),
fButtonState(true)
{
fButtonState = false;
}
TwoStateDrawButton::~TwoStateDrawButton()
{
delete fUpOne;
delete fDownOne;
delete fUpTwo;
delete fDownTwo;
delete fDisabledOne;
delete fDisabledTwo;
}
void
TwoStateDrawButton::ResizeToPreferred()
{
if (fUpOne)
ResizeTo(fUpOne->Bounds().Width(), fUpOne->Bounds().Height());
else if (fDownOne)
ResizeTo(fDownOne->Bounds().Width(), fDownOne->Bounds().Height());
else if (fUpTwo)
ResizeTo(fUpTwo->Bounds().Width(),fUpTwo->Bounds().Height());
else if (fDownTwo)
ResizeTo(fDownTwo->Bounds().Width(), fDownTwo->Bounds().Height());
else if (fDisabledOne)
ResizeTo(fDisabledOne->Bounds().Width(), fDisabledOne->Bounds().Height());
else if(fDisabledTwo)
ResizeTo(fDisabledTwo->Bounds().Width(), fDisabledTwo->Bounds().Height());
}
void
TwoStateDrawButton::SetBitmaps(BBitmap *upone, BBitmap *downone, BBitmap *uptwo,
BBitmap *downtwo)
{
delete fUpOne;
delete fDownOne;
delete fUpTwo;
delete fDownTwo;
fUpOne = upone;
fDownOne = downone;
fUpTwo = uptwo;
fDownTwo = downtwo;
}
void
TwoStateDrawButton::SetBitmaps(const int32 state, BBitmap *up, BBitmap *down)
{
if (state == 0) {
delete fUpOne;
delete fDownOne;
fUpOne = up;
fDownOne = down;
} else {
delete fUpTwo;
delete fDownTwo;
fUpTwo = up;
fDownTwo = down;
}
}
void
TwoStateDrawButton::SetDisabled(BBitmap *disabledone, BBitmap *disabledtwo)
{
delete fDisabledOne;
delete fDisabledTwo;
fDisabledOne = disabledone;
fDisabledTwo = disabledtwo;
}
void
TwoStateDrawButton::MouseUp(BPoint pt)
{
BButton::MouseUp(pt);
fButtonState = fButtonState ? false : true;
Invalidate();
}
void
TwoStateDrawButton::SetState(int32 value)
{
if (fButtonState != value) {
fButtonState = (value == 0) ? false : true;
Invalidate();
}
}
void
TwoStateDrawButton::Draw(BRect update)
{
if (fButtonState) {
if (!IsEnabled()) {
if (fDisabledTwo)
DrawBitmap(fDisabledTwo, BPoint(0,0));
else
StrokeRect(Bounds());
return;
}
if (Value() == B_CONTROL_ON) {
if (fDownTwo)
DrawBitmap(fDownTwo, BPoint(0,0));
else
StrokeRect(Bounds());
} else {
if (fUpTwo)
DrawBitmap(fUpTwo, BPoint(0,0));
else
StrokeRect(Bounds());
}
} else {
if (!IsEnabled()) {
if (fDisabledOne)
DrawBitmap(fDisabledOne, BPoint(0,0));
else
StrokeRect(Bounds());
return;
}
if (Value() == B_CONTROL_ON) {
if (fDownOne)
DrawBitmap(fDownOne, BPoint(0,0));
else
StrokeRect(Bounds());
} else {
if (fUpOne)
DrawBitmap(fUpOne, BPoint(0,0));
else
StrokeRect(Bounds());
}
}
}