Foundation classes for a basic GUI implementing simple widgets and events
Dependents: TouchScreenGUIDemo
Widgets/SpinnerWidget.cpp
- Committer:
- duncanFrance
- Date:
- 2016-05-21
- Revision:
- 13:6714534e7974
- Parent:
- 12:63db16fea709
- Child:
- 17:5184762fda6c
File content as of revision 13:6714534e7974:
#include "SpinnerWidget.h" #include"resources/BlueButtonLeft_50x64_bmp.h" #include"resources/BlueButtonRight_50x64_bmp.h" SpinnerWidget::SpinnerWidget(GraphicsContext *context) : ContainerWidget(context), _upArrow(context), _text(context), _downArrow(context), _min(0), _max(0), _increment(0.5), _value(0), _format(""), _buf("") { setLayout(FIXED); setBorder(1, White); setPadding(1); _upArrow.setBitmap(BlueButtonLeft_50x64_bmp, 50, 64); _downArrow.setBitmap(BlueButtonRight_50x64_bmp, 50, 64); // Calculate these here to take account of border and margin settings // since BitmapWidgets resize themselves rather than clip (!) setSize( context->display()->width(), _upArrow.height() + 2*(_borderWidth+_padding) ); _upArrow.setLocation( _borderWidth + _padding, _borderWidth + _padding ); _downArrow.setLocation( width() - _downArrow.width() - (_borderWidth + _padding), _borderWidth + _padding ); int textWidth = width() - _upArrow.width() - 2*(_borderWidth + _padding) - _downArrow.width() - 2*(_borderWidth + _padding) ; int textHeight = height() - 2*(_borderWidth + _padding +1); _text.setSize(textWidth, textHeight); _text.setLocation(_downArrow.width() + _borderWidth + _padding, _borderWidth + _padding); _text.setForeground(White); _text.setBackground(Black); EventHandler* up = new EventHandler(TOUCH_TAP, this, &SpinnerWidget::_onUpClick); EventHandler* down = new EventHandler(TOUCH_TAP, this, &SpinnerWidget::_onDownClick); attach(&_upArrow); attach(&_text); attach(&_downArrow); _upArrow.setEventHandler(up); _downArrow.setEventHandler(down); } void SpinnerWidget::setMin(float min) { if(_min != min) { _min = min; dirty(); } } void SpinnerWidget::setMax(float max) { if(_max != max) { _max = max; dirty(); } } void SpinnerWidget::setIncrement(float increment) { if(_increment != increment) { _increment = increment; dirty(); } } void SpinnerWidget::setValue(float value) { if(_value != value) { _value = value; dirty(); } } void SpinnerWidget::setFormat(const char* format) { _format = format; dirty(); } float SpinnerWidget::getMin() { return _min; } float SpinnerWidget::getMax() { return _max; } float SpinnerWidget::getIncrement() { return _increment; } float SpinnerWidget::getValue() { return _value; } const char* SpinnerWidget::getFormat() { return _format; } template<typename T> void SpinnerWidget::onChange(T* tptr, void (T::*mptr)(Event)) { _onChange.attach(tptr, mptr); } void SpinnerWidget::setSize(int width, int height) { ContainerWidget::setSize(width, height); } void SpinnerWidget::_dirty() { sprintf(_buf, _format, _value); _text.setText(_buf); ContainerWidget::_dirty(); } void SpinnerWidget::_onUpClick(Event e) { _value += _increment; if(_value > _max) { _value = _max; } dirty(); } void SpinnerWidget::_onDownClick(Event e) { _value -= _increment; if(_value < _min) { _value = _min; } dirty(); }