92 lines
1.8 KiB
C++
92 lines
1.8 KiB
C++
|
|
#include "widgets/checkboxlabel/checkboxlabel.h"
|
|
|
|
CheckboxLabel::CheckboxLabel(Widget* parent) : Widget(parent)
|
|
{
|
|
}
|
|
|
|
void CheckboxLabel::SetText(const std::string& value)
|
|
{
|
|
if (text != value)
|
|
{
|
|
text = value;
|
|
Update();
|
|
}
|
|
}
|
|
|
|
const std::string& CheckboxLabel::GetText() const
|
|
{
|
|
return text;
|
|
}
|
|
|
|
void CheckboxLabel::SetChecked(bool value)
|
|
{
|
|
if (value != checked)
|
|
{
|
|
checked = value;
|
|
Update();
|
|
}
|
|
}
|
|
|
|
bool CheckboxLabel::GetChecked() const
|
|
{
|
|
return checked;
|
|
}
|
|
|
|
double CheckboxLabel::GetPreferredHeight() const
|
|
{
|
|
return 20.0;
|
|
}
|
|
|
|
void CheckboxLabel::OnPaint(Canvas* canvas)
|
|
{
|
|
if (checked)
|
|
{
|
|
canvas->fillRect(Rect::xywh(0.0, GetHeight() * 0.5 - 6.0, 10.0, 10.0), Colorf::fromRgba8(100, 100, 100));
|
|
canvas->fillRect(Rect::xywh(1.0, GetHeight() * 0.5 - 5.0, 8.0, 8.0), Colorf::fromRgba8(51, 51, 51));
|
|
canvas->fillRect(Rect::xywh(2.0, GetHeight() * 0.5 - 4.0, 6.0, 6.0), Colorf::fromRgba8(226, 223, 219));
|
|
}
|
|
else
|
|
{
|
|
canvas->fillRect(Rect::xywh(0.0, GetHeight() * 0.5 - 6.0, 10.0, 10.0), Colorf::fromRgba8(99, 99, 99));
|
|
canvas->fillRect(Rect::xywh(1.0, GetHeight() * 0.5 - 5.0, 8.0, 8.0), Colorf::fromRgba8(51, 51, 51));
|
|
}
|
|
|
|
canvas->drawText(Point(14.0, GetHeight() - 5.0), Colorf::fromRgba8(255, 255, 255), text);
|
|
}
|
|
|
|
bool CheckboxLabel::OnMouseDown(const Point& pos, InputKey key)
|
|
{
|
|
mouseDownActive = true;
|
|
SetFocus();
|
|
return true;
|
|
}
|
|
|
|
bool CheckboxLabel::OnMouseUp(const Point& pos, InputKey key)
|
|
{
|
|
if (mouseDownActive)
|
|
{
|
|
Toggle();
|
|
}
|
|
mouseDownActive = false;
|
|
return true;
|
|
}
|
|
|
|
void CheckboxLabel::OnMouseLeave()
|
|
{
|
|
mouseDownActive = false;
|
|
}
|
|
|
|
void CheckboxLabel::OnKeyUp(InputKey key)
|
|
{
|
|
if (key == InputKey::Space)
|
|
Toggle();
|
|
}
|
|
|
|
void CheckboxLabel::Toggle()
|
|
{
|
|
bool oldchecked = checked;
|
|
checked = radiostyle? true : !checked;
|
|
Update();
|
|
if (checked != oldchecked && FuncChanged) FuncChanged(checked);
|
|
}
|