// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "MusicPlayerAllSongsWindow.hpp" #include "application-music-player/ApplicationMusicPlayer.hpp" #include #include #include #include #include namespace gui { MusicPlayerAllSongsWindow::MusicPlayerAllSongsWindow(app::Application *app) : AppWindow(app, gui::name::window::all_songs_window), songsModel{ std::make_shared(this->application)} { buildInterface(); } void MusicPlayerAllSongsWindow::rebuild() { destroyInterface(); buildInterface(); } auto MusicPlayerAllSongsWindow::setCurrentVolume(const std::function &successCallback, const std::function &errCallback) -> bool { audio::Volume volume; const auto ret = application->getCurrentVolume(volume); if (ret == audio::RetCode::Success) { if (successCallback != nullptr) { successCallback(volume); } } else { if (errCallback != nullptr) { errCallback(volume); } } return ret == audio::RetCode::Success; } void MusicPlayerAllSongsWindow::buildInterface() { AppWindow::buildInterface(); setTitle(utils::localize.get("app_music_player_all_songs")); bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get("app_music_player_play")); bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back)); topBar->setActive(TopBar::Elements::TIME, true); songsList = new gui::ListView(this, musicPlayerStyle::allSongsWindow::x, musicPlayerStyle::allSongsWindow::y, musicPlayerStyle::allSongsWindow::w, musicPlayerStyle::allSongsWindow::h, songsModel); auto successCallback = [this](const audio::Volume &volume) { auto volumeText = audio::GetVolumeText(volume); soundLabel = new gui::Label(this, musicPlayerStyle::volumeLabel::x, musicPlayerStyle::volumeLabel::y, musicPlayerStyle::volumeLabel::w, musicPlayerStyle::volumeLabel::h, volumeText); }; auto errCallback = [this](const audio::Volume &volume) { soundLabel = new gui::Label(this, musicPlayerStyle::volumeLabel::x, musicPlayerStyle::volumeLabel::y, musicPlayerStyle::volumeLabel::w, musicPlayerStyle::volumeLabel::h, musicPlayerStyle::volumeLabel::defaultVolumeLabelText); }; setCurrentVolume(successCallback, errCallback); soundLabel->setMargins(gui::Margins(musicPlayerStyle::volumeLabel::leftMargin, musicPlayerStyle::volumeLabel::topMargin, musicPlayerStyle::volumeLabel::rightMargin, musicPlayerStyle::volumeLabel::bottomMargin)); soundLabel->setFilled(false); soundLabel->setPenFocusWidth(style::window::default_border_focus_w); soundLabel->setPenWidth(style::window::default_border_no_focus_w); soundLabel->setFont(style::window::font::medium); soundLabel->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Top)); setFocusItem(songsList); } void MusicPlayerAllSongsWindow::destroyInterface() { erase(); } void MusicPlayerAllSongsWindow::onBeforeShow(ShowMode mode, SwitchData *data) { auto app = dynamic_cast(application); assert(app); songsModel->createData(app->getMusicFilesList(), [app](const std::string &fileName) { return app->play(fileName); }); } bool MusicPlayerAllSongsWindow::onDatabaseMessage(sys::Message *msgl) { return false; } bool MusicPlayerAllSongsWindow::onInput(const InputEvent &inputEvent) { auto ret = AppWindow::onInput(inputEvent); const auto keyCode = inputEvent.keyCode; if (keyCode == KeyCode::KEY_VOLUP || keyCode == KeyCode::KEY_VOLDN || keyCode == KeyCode::KEY_ENTER) { auto successCallback = [this](const audio::Volume &volume) { auto volumeText = audio::GetVolumeText(volume); soundLabel->setText(volumeText); }; return setCurrentVolume(successCallback, nullptr); } return ret; } } /* namespace gui */