git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39837 a95241bf-73f2-0310-859d-f6bbb57e9c96
167 lines
3.1 KiB
C++
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());
|
|
}
|
|
}
|
|
}
|