1/* 2 * Copyright (c) 2006-2007, Haiku, Inc. 3 * Distributed under the terms of the MIT license. 4 * 5 * Author: 6 * DarkWyrm, bpmagic@columbus.rr.com 7 */ 8 9 10#include "TwoStateDrawButton.h" 11 12 13TwoStateDrawButton::TwoStateDrawButton(BRect frame, const char *name, 14 BBitmap *upone, BBitmap *downone, BBitmap *uptwo, BBitmap *downtwo, 15 BMessage *msg, const int32 &resize, const int32 &flags) 16 : BButton(frame, name, "", msg, resize, flags), 17 fUpOne(upone), 18 fDownOne(downone), 19 fUpTwo(uptwo), 20 fDownTwo(downtwo), 21 fDisabledOne(NULL), 22 fDisabledTwo(NULL), 23 fButtonState(true) 24 25{ 26 fButtonState = false; 27} 28 29 30TwoStateDrawButton::~TwoStateDrawButton() 31{ 32 delete fUpOne; 33 delete fDownOne; 34 delete fUpTwo; 35 delete fDownTwo; 36 delete fDisabledOne; 37 delete fDisabledTwo; 38} 39 40 41void 42TwoStateDrawButton::ResizeToPreferred() 43{ 44 if (fUpOne) 45 ResizeTo(fUpOne->Bounds().Width(), fUpOne->Bounds().Height()); 46 else if (fDownOne) 47 ResizeTo(fDownOne->Bounds().Width(), fDownOne->Bounds().Height()); 48 else if (fUpTwo) 49 ResizeTo(fUpTwo->Bounds().Width(),fUpTwo->Bounds().Height()); 50 else if (fDownTwo) 51 ResizeTo(fDownTwo->Bounds().Width(), fDownTwo->Bounds().Height()); 52 else if (fDisabledOne) 53 ResizeTo(fDisabledOne->Bounds().Width(), fDisabledOne->Bounds().Height()); 54 else if(fDisabledTwo) 55 ResizeTo(fDisabledTwo->Bounds().Width(), fDisabledTwo->Bounds().Height()); 56} 57 58 59void 60TwoStateDrawButton::SetBitmaps(BBitmap *upone, BBitmap *downone, BBitmap *uptwo, 61 BBitmap *downtwo) 62{ 63 delete fUpOne; 64 delete fDownOne; 65 delete fUpTwo; 66 delete fDownTwo; 67 68 fUpOne = upone; 69 fDownOne = downone; 70 fUpTwo = uptwo; 71 fDownTwo = downtwo; 72} 73 74 75void 76TwoStateDrawButton::SetBitmaps(const int32 state, BBitmap *up, BBitmap *down) 77{ 78 if (state == 0) { 79 delete fUpOne; 80 delete fDownOne; 81 fUpOne = up; 82 fDownOne = down; 83 } else { 84 delete fUpTwo; 85 delete fDownTwo; 86 fUpTwo = up; 87 fDownTwo = down; 88 } 89} 90 91 92void 93TwoStateDrawButton::SetDisabled(BBitmap *disabledone, BBitmap *disabledtwo) 94{ 95 delete fDisabledOne; 96 delete fDisabledTwo; 97 98 fDisabledOne = disabledone; 99 fDisabledTwo = disabledtwo; 100} 101 102 103void 104TwoStateDrawButton::MouseUp(BPoint pt) 105{ 106 BButton::MouseUp(pt); 107 fButtonState = fButtonState ? false : true; 108 Invalidate(); 109} 110 111 112void 113TwoStateDrawButton::SetState(int32 value) 114{ 115 if (fButtonState != value) { 116 fButtonState = (value == 0) ? false : true; 117 Invalidate(); 118 } 119} 120 121 122void 123TwoStateDrawButton::Draw(BRect update) 124{ 125 if (fButtonState) { 126 if (!IsEnabled()) { 127 if (fDisabledTwo) 128 DrawBitmap(fDisabledTwo, BPoint(0,0)); 129 else 130 StrokeRect(Bounds()); 131 return; 132 } 133 134 if (Value() == B_CONTROL_ON) { 135 if (fDownTwo) 136 DrawBitmap(fDownTwo, BPoint(0,0)); 137 else 138 StrokeRect(Bounds()); 139 } else { 140 if (fUpTwo) 141 DrawBitmap(fUpTwo, BPoint(0,0)); 142 else 143 StrokeRect(Bounds()); 144 } 145 } else { 146 if (!IsEnabled()) { 147 if (fDisabledOne) 148 DrawBitmap(fDisabledOne, BPoint(0,0)); 149 else 150 StrokeRect(Bounds()); 151 return; 152 } 153 154 if (Value() == B_CONTROL_ON) { 155 if (fDownOne) 156 DrawBitmap(fDownOne, BPoint(0,0)); 157 else 158 StrokeRect(Bounds()); 159 } else { 160 if (fUpOne) 161 DrawBitmap(fUpOne, BPoint(0,0)); 162 else 163 StrokeRect(Bounds()); 164 } 165 } 166} 167