// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "NavBar.hpp" #include "Label.hpp" #include "Margins.hpp" #include "utf8/UTF8.hpp" #include #include namespace gui::nav_bar { NavBar::NavBar() { Padding margins{style::window::navBar::leftMargin, 0, style::window::navBar::rightMargin, 0}; left = prepareLabel(Side::Left); center = prepareLabel(Side::Center); right = prepareLabel(Side::Right); left->setPadding(margins); center->setPadding(margins); right->setPadding(margins); addWidget(left); addWidget(center); addWidget(right); setFillColor(ColorFullWhite); setBorderColor(ColorNoColor); setFilled(true); setSize(style::window::navBar::w, style::window::navBar::h); } NavBar::NavBar(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h) : Rect{parent, x, y, w, h} { Padding margins{style::window::navBar::leftMargin, 0, style::window::navBar::rightMargin, 0}; left = prepareLabel(Side::Left); center = prepareLabel(Side::Center); right = prepareLabel(Side::Right); left->setPadding(margins); center->setPadding(margins); right->setPadding(margins); addWidget(left); addWidget(center); addWidget(right); setFillColor(ColorFullWhite); setBorderColor(ColorNoColor); setFilled(true); setSize(style::window::navBar::w, style::window::navBar::h); updateDrawArea(); } NavBar::~NavBar() {} gui::Label *NavBar::prepareLabel(nav_bar::Side side) { Label *label = new Label(this, 0, 0, 0, 0); label->setBorderColor(Color{15, 15}); switch (side) { case Side::Left: label->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center)); label->setFont(style::footer::font::medium); break; case Side::Center: label->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center)); label->setFont(style::footer::font::bold); break; case Side::Right: label->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Right, gui::Alignment::Vertical::Center)); label->setFont(style::footer::font::medium); break; }; label->setFilled(false); return label; } Label *NavBar::getSide(nav_bar::Side side) { switch (side) { case Side::Left: return left; case Side::Center: return center; case Side::Right: return right; }; return nullptr; } void NavBar::setActive(nav_bar::Side side, bool active) { getSide(side)->setVisible(active); } bool NavBar::isActive(nav_bar::Side side) { return getSide(side)->visible; } void NavBar::setText(nav_bar::Side side, const UTF8 &str, bool active) { getSide(side)->setText(str); setActive(side, active); } UTF8 NavBar::getText(nav_bar::Side side) { return getSide(side)->getText(); } bool NavBar::onDimensionChanged(const BoundingBox &oldDim, const BoundingBox &newDim) { Rect::onDimensionChanged(oldDim, newDim); left->setSize(newDim.w, newDim.h); center->setSize(newDim.w, newDim.h); right->setSize(newDim.w, newDim.h); return true; } void NavBar::store() { store(Side::Left); store(Side::Center); store(Side::Right); } void NavBar::store(Side side) { auto &el = cache.get(side); if (!el.stored) { el.text = getSide(side)->getText(); el.isVisible = getSide(side)->visible; el.stored = true; } } void NavBar::restore() { restore(Side::Left); restore(Side::Center); restore(Side::Right); } void NavBar::restore(nav_bar::Side side) { auto &el = cache.get(side); if (el.stored) { setText(side, el.text, el.isVisible); el.stored = false; } } void NavBar::setFont(Side side, const UTF8 &fontName) { switch (side) { case Side::Left: left->setFont(fontName); break; case Side::Center: center->setFont(fontName); break; case Side::Right: right->setFont(fontName); break; } } void NavBar::accept(GuiVisitor &visitor) { visitor.visit(*this); } } // namespace gui::nav_bar