// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "TextSpinnerBox.hpp" namespace gui { TextSpinnerBox::TextSpinnerBox(Item *parent, std::vector data, Boundaries boundaries) : HBox(parent) { setEdges(RectangleEdge::Bottom); leftArrow = new gui::ImageBox(this, new Image("arrow_left_24px_W_G")); leftArrow->setMinimumSizeToFitImage(); leftArrow->setVisible(false); spinner = new StringSpinner(std::move(data), boundaries, Orientation::Horizontal); spinner->setFont(style::window::font::medium); spinner->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center)); spinner->setEdges(RectangleEdge::All); spinner->setVisible(true); addWidget(spinner); rightArrow = new gui::ImageBox(this, new Image("arrow_right_24px_W_G")); rightArrow->setMinimumSizeToFitImage(); rightArrow->setVisible(false); inputCallback = [&](Item &item, const InputEvent &event) { return spinner->onInput(event); }; focusChangedCallback = [&](gui::Item &item) { if (focus && spinner->size() != 1) { leftArrow->setVisible(true); rightArrow->setVisible(true); spinner->setFont(style::window::font::mediumbold); setPenWidth(style::window::default_border_focus_w); } else if (focus && spinner->size() == 1) { leftArrow->setVisible(false); rightArrow->setVisible(false); spinner->setFont(style::window::font::mediumbold); setPenWidth(style::window::default_border_focus_w); } else { leftArrow->setVisible(false); rightArrow->setVisible(false); spinner->setFont(style::window::font::medium); setPenWidth(style::window::default_border_rect_no_focus); } resizeItems(); return true; }; dimensionChangedCallback = [&](gui::Item &, const BoundingBox &newDim) -> bool { spinner->setMaximumSize(widgetArea.w, widgetArea.h); resizeItems(); return true; }; } void TextSpinnerBox::setData(const std::vector &data) { spinner->set_range(data); } UTF8 TextSpinnerBox::getCurrentValue() const noexcept { return spinner->value(); } void TextSpinnerBox::setCurrentValue(UTF8 val) { spinner->set_value(val); } void TextSpinnerBox::setOnValueChangeCallback(OnValueChanged callback) { if (spinner != nullptr) { spinner->onValueChanged = callback; } } } // namespace gui