/* * @file PowerOff.cpp * @author Robert Borzecki (robert.borzecki@mudita.com) * @date 4 lip 2019 * @brief * @copyright Copyright (C) 2019 mudita.com * @details */ #include "log/log.hpp" #include "gui/widgets/BottomBar.hpp" #include "gui/widgets/TopBar.hpp" //module-utils #include "i18/i18.hpp" #include "PowerOffWindow.hpp" #include "../ApplicationDesktop.hpp" //services #include "service-appmgr/ApplicationManager.hpp" #include "service-cellular/ServiceCellular.hpp" #include namespace gui { PowerOffWindow::PowerOffWindow( app::Application* app ) : AppWindow(app, "PowerOffWindow"){ setSize( 480, 600 ); buildInterface(); } void PowerOffWindow::rebuild() { //find which widget has focus uint32_t index = 0; for( uint32_t i=0; isetActive( BottomBar::Side::CENTER, true ); bottomBar->setActive( BottomBar::Side::RIGHT, true ); bottomBar->setText( BottomBar::Side::CENTER, utils::localize.get("common_confirm")); bottomBar->setText( BottomBar::Side::RIGHT, utils::localize.get("common_back")); powerImage = new gui::Image( this, 177,132,0,0, "pin_lock_info" ); powerDownImage = new gui::Image( this, 0,0 ,0,0, "logo" ); powerDownImage->setVisible(false); //title label titleLabel = new gui::Label(this, 0, 60, 480, 40); titleLabel->setFilled( false ); titleLabel->setBorderColor( gui::ColorFullBlack ); titleLabel->setFont(style::header::font::title); titleLabel->setText(utils::localize.get("app_desktop_poweroff_title")); titleLabel->setEdges( RectangleEdgeFlags::GUI_RECT_EDGE_NO_EDGES ); titleLabel->setAlignement( gui::Alignment(gui::Alignment::ALIGN_HORIZONTAL_CENTER, gui::Alignment::ALIGN_VERTICAL_BOTTOM)); //label with question for powering down infoLabel = new gui::Label(this, 0, 294, 480, 30); infoLabel->setFilled( false ); infoLabel->setBorderColor( gui::ColorNoColor ); infoLabel->setFont(style::window::font::medium); infoLabel->setAlignement( gui::Alignment(gui::Alignment::ALIGN_HORIZONTAL_CENTER, gui::Alignment::ALIGN_VERTICAL_BOTTOM)); infoLabel->setText( utils::localize.get("app_desktop_poweroff_question") ); uint32_t pinLabelX = 46; //TODO change this to 397 after power manager is finished uint32_t pinLabelY = 350; for( uint32_t i=0; i<4; i++ ){ gui::Label* label = new gui::Label(this, pinLabelX, pinLabelY, 193, 75); label->setFilled( false ); label->setBorderColor( gui::ColorFullBlack ); label->setPenWidth(0); label->setPenFocusWidth(2); label->setRadius(5); label->setFont(style::window::font::medium); label->setEdges( RectangleEdgeFlags::GUI_RECT_ALL_EDGES ); label->setAlignement( gui::Alignment(gui::Alignment::ALIGN_HORIZONTAL_CENTER, gui::Alignment::ALIGN_VERTICAL_CENTER)); selectionLabels.push_back( label ); pinLabelX += 193; } selectionLabels[0]->setText( utils::localize.get("common_no") ); selectionLabels[1]->setText( utils::localize.get("common_yes") ); pinLabelX = 46; pinLabelY += 75; eventMgrLabel = new gui::Label(this, pinLabelX, pinLabelY, 193*2, 75); eventMgrLabel->setFilled( false ); eventMgrLabel->setBorderColor( gui::ColorFullBlack ); eventMgrLabel->setPenWidth(0); eventMgrLabel->setPenFocusWidth(2); eventMgrLabel->setRadius(5); eventMgrLabel->setFont(style::window::font::bigbold); eventMgrLabel->setText( "TURN PWR MGR OFF" ); eventMgrLabel->setEdges( RectangleEdgeFlags::GUI_RECT_ALL_EDGES ); eventMgrLabel->setAlignement( gui::Alignment(gui::Alignment::ALIGN_HORIZONTAL_CENTER, gui::Alignment::ALIGN_VERTICAL_CENTER)); //define navigation between labels selectionLabels[0]->setNavigationItem( NavigationDirection::LEFT, selectionLabels[1] ); selectionLabels[0]->setNavigationItem( NavigationDirection::RIGHT, selectionLabels[1] ); selectionLabels[0]->setNavigationItem( NavigationDirection::DOWN, eventMgrLabel ); selectionLabels[1]->setNavigationItem( NavigationDirection::LEFT, selectionLabels[0] ); selectionLabels[1]->setNavigationItem( NavigationDirection::RIGHT, selectionLabels[0] ); selectionLabels[1]->setNavigationItem( NavigationDirection::DOWN, eventMgrLabel ); eventMgrLabel->setNavigationItem( NavigationDirection::UP, selectionLabels[0]); //callbacks for getting focus selectionLabels[0]->focusChangedCallback = [=] (gui::Item& item) { if( item.focus ) this->state = State::Return; return true; }; selectionLabels[1]->focusChangedCallback = [=] (gui::Item& item) { if( item.focus ) this->state = State::PowerDown; return true; }; selectionLabels[1]->activatedCallback = [=] (gui::Item& item) { LOG_INFO("Closing system"); application->setShutdownFlag(); bottomBar->setVisible(false); topBar->setVisible(false); selectionLabels[0]->setVisible(false); selectionLabels[1]->setVisible(false); eventMgrLabel->setVisible(false); powerImage->setVisible(false); powerDownImage->setVisible(true); titleLabel->setVisible(false); infoLabel->setVisible(false); application->refreshWindow( RefreshModes::GUI_REFRESH_DEEP ); return true; }; //TODO Mati pisze tutaj. eventMgrLabel->activatedCallback = [=] (gui::Item& item) { static bool state = false; if(state == false){ //sys::SystemManager::DestroyService(ServiceCellular::serviceName,application); sys::SystemManager::SuspendSystem(application); LOG_INFO("SUSPEND SYSTEM"); state = true; } else{ sys::SystemManager::ResumeSystem(application); LOG_INFO("RESUME SYSTEM"); state = false; } return true; }; } void PowerOffWindow::destroyInterface() { AppWindow::destroyInterface(); if( titleLabel ) { removeWidget(titleLabel); delete titleLabel; titleLabel = nullptr; }; if( infoLabel ) { removeWidget(infoLabel); delete infoLabel; infoLabel = nullptr; }; for( uint32_t i=0; iswitchWindow( "MainWindow" ); } } return false; } } /* namespace gui */