-
Notifications
You must be signed in to change notification settings - Fork 45
/
MultiStateButton.cpp
75 lines (60 loc) · 2.15 KB
/
MultiStateButton.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// MultiStateButton.cpp: implementation of the CMultiStateButton class.
//
//////////////////////////////////////////////////////////////////////
#include "MultiStateButton.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMultiStateButton::CMultiStateButton(const CRect& size, IControlListener* listener, long tag,
CBitmap* background, long nStates, long heightOfOneState)
: CControl(size, listener, tag, background)
, nStates(nStates)
, heightOfOneState(heightOfOneState)
{
state = 0;
}
//------------------------------------------------------------------------
CMultiStateButton::~CMultiStateButton()
{
}
//------------------------------------------------------------------------
void CMultiStateButton::draw(CDrawContext* pContext)
{
long off;
if (getBackground())
off = (long)(nStates * heightOfOneState * value);
else
off = 0;
if (getBackground()) {
if (getTransparency())
getBackground()->draw(pContext, getViewSize(), CPoint(0, off), 0.f);
else
getBackground()->draw(pContext, getViewSize(), CPoint(0, off));
} else {
if (value)
pContext->setFillColor(kRedCColor);
else
pContext->setFillColor(kGreenCColor);
pContext->drawRect(getViewSize());
pContext->setFrameColor(kWhiteCColor);
if (value)
pContext->drawString("on", getViewSize());
else
pContext->drawString("off", getViewSize());
}
setDirty(false);
}
//------------------------------------------------------------------------
CMouseEventResult CMultiStateButton::onMouseDown(CPoint& where, const CButtonState& buttons)
{
if (!getMouseEnabled())
return CMouseEventResult::kMouseEventNotHandled;
if (!(buttons.isLeftButton()))
return CMouseEventResult::kMouseEventNotHandled;
value = (float)(value + 1.0 / (double)(nStates));
if (value >= 1.0)
value = 0.0;
if (listener)
listener->valueChanged(this);
return CMouseEventResult::kMouseEventHandled;
}