// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md #include "CheckBox.hpp" #include "Style.hpp" #include #include namespace gui { CheckBox::CheckBox(Item *parent, const uint32_t &x, const uint32_t &y, const uint32_t &w, const uint32_t &h, const std::function &navBarTemporaryMode, const std::function &navBarRestoreFromTemporaryMode, nav_bar::Side navBarSide) : HBox(parent, x, y, w, h), navBarTemporaryMode(navBarTemporaryMode), navBarRestoreFromTemporaryMode(navBarRestoreFromTemporaryMode), navBarSide(navBarSide) { setEdges(RectangleEdge::Bottom); setAlignment(gui::Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center)); image = new Image(this, "small_tick_32px_W_M"); image->setVisible(false); applyCallbacks(); } void CheckBox::applyCallbacks() { focusChangedCallback = [&](Item &item) { if (focus) { if (isChecked()) { if (navBarTemporaryMode) { navBarTemporaryMode(utils::translate("common_uncheck")); } } else { if (navBarTemporaryMode) { navBarTemporaryMode(utils::translate("common_check")); } } } else { setFocusItem(nullptr); if (navBarRestoreFromTemporaryMode) { navBarRestoreFromTemporaryMode(); } } return true; }; inputCallback = [&](gui::Item &item, const gui::InputEvent &event) { if (!event.isShortRelease()) { return false; } if ((navBarSide == nav_bar::Side::Left && event.is(gui::KeyCode::KEY_LF)) || (navBarSide == nav_bar::Side::Center && event.is(gui::KeyCode::KEY_ENTER))) { setCheck(!isChecked()); if (isChecked()) { if (navBarTemporaryMode) { navBarTemporaryMode(utils::translate("common_uncheck")); } } else { if (navBarTemporaryMode) { navBarTemporaryMode(utils::translate("common_check")); } } return true; } return false; }; } void CheckBox::setCheck(bool state) { checkState = state; image->setVisible(state); resizeItems(); } bool CheckBox::isChecked() { return checkState; } } /* namespace gui */