/* * @file ApplicationClock.cpp * @author Robert Borzecki (robert.borzecki@mudita.com) * @date 1 cze 2019 * @brief * @copyright Copyright (C) 2019 mudita.com * @details */ //module-gui #include "gui/widgets/Window.hpp" #include "gui/widgets/Item.hpp" #include "gui/widgets/Label.hpp" #include "gui/widgets/BoxLayout.hpp" //module-utils #include "log/log.hpp" //module-services #include "service-kbd/EventManager.hpp" //MessageType #include "MessageType.hpp" //this module #include "ApplicationClock.hpp" namespace app { ApplicationClock::ApplicationClock(std::string name,uint32_t stackDepth,sys::ServicePriority priority) : Application( name, stackDepth, priority ) { timer_id = CreateTimer(1000,true); ReloadTimer(timer_id); } ApplicationClock::~ApplicationClock() { // TODO Auto-generated destructor stub } // Invoked upon receiving data message sys::Message_t ApplicationClock::DataReceivedHandler(sys::DataMessage* msgl) { //if keyboard message received if(msgl->messageType == static_cast(MessageType::KBDKeyEvent) ) { KbdMessage* msg = static_cast(msgl); LOG_INFO("Clock key received %d", static_cast(msg->keyCode)); if( msg->keyState == KeyboardEvents::keyReleasedShort ) { if( msg->keyCode == bsp::KeyCodes::NumericKeyAst ) { incrementHour(); updateLabels(); //render(gui::RefreshModes::GUI_REFRESH_FAST ); } if( msg->keyCode == bsp::KeyCodes::NumericKeyPnd ) { incrementMinute(); updateLabels(); //render(gui::RefreshModes::GUI_REFRESH_FAST ); } } } return std::make_shared( ); } void ApplicationClock::updateLabels() { std::string h; if( hour<10 ) { h += "0"; } h += std::to_string(hour); hourLabel->setText( h ); std::string m; if( minute < 10 ) { m+= "0"; } m += std::to_string(minute); minuteLabel->setText( m ); } // Invoked when timer ticked void ApplicationClock::TickHandler(uint32_t id) { incrementSecond(); updateLabels(); render(gui::RefreshModes::GUI_REFRESH_FAST ); } // Invoked during initialization sys::ReturnCodes ApplicationClock::InitHandler() { createUserInterface(); setActiveWindow("Main"); render(gui::RefreshModes::GUI_REFRESH_FAST ); return sys::ReturnCodes::Success; } sys::ReturnCodes ApplicationClock::DeinitHandler() { return sys::ReturnCodes::Success; } sys::ReturnCodes ApplicationClock::WakeUpHandler() { return sys::ReturnCodes::Success; } sys::ReturnCodes ApplicationClock::SleepHandler() { return sys::ReturnCodes::Success; } void ApplicationClock::createUserInterface() { gui::Window* clockWin = new gui::Window("Main"); clockWin->setSize( 480, 600 ); uint32_t xOffset = 0; uint32_t yOffset = 0; hourLabel = new gui::Label(clockWin, 100+xOffset,300-160+yOffset,280,150); hourLabel->setFilled( false ); hourLabel->setBorderColor( gui::ColorNoColor ); hourLabel->setFont("gt_pressura_regular_140"); hourLabel->setText("00"); hourLabel->setAlignement( gui::Alignment(gui::Alignment::ALIGN_HORIZONTAL_CENTER, gui::Alignment::ALIGN_VERTICAL_CENTER)); minuteLabel = new gui::Label(clockWin, 100+xOffset,310+yOffset,280,150); minuteLabel->setFilled( false ); minuteLabel->setBorderColor( gui::ColorNoColor ); minuteLabel->setFont("gt_pressura_regular_140"); minuteLabel->setText("00"); minuteLabel->setAlignement( gui::Alignment(gui::Alignment::ALIGN_HORIZONTAL_CENTER, gui::Alignment::ALIGN_VERTICAL_CENTER)); progressBar = new gui::Progress(clockWin, 480/2-90+xOffset, 300-6+yOffset, 180, 12 ); progressBar->setTotalProgress(59); progressBar->setCurrentProgress(0); /* gui::Rect* rect = new gui::Rect( clockWin, 480/2-30, 300-4, 60, 8 ); rect->setFillColor( gui::ColorFullBlack ); rect->setFilled( true );*/ gui::Rect* rectCircle = new gui::Rect( clockWin, 0, 70+yOffset, 480, 480 ); rectCircle->setRadius(230); rectCircle->setBorderColor( gui::ColorFullWhite ); rectCircle->setFilled( false ); windows.insert(std::pair(clockWin->getName(), clockWin)); } bool ApplicationClock::incrementHour() { hour++; if( hour > 23 ) { hour = 0; return true; } return false; } bool ApplicationClock::incrementMinute() { minute++; if( minute > 59 ) { incrementHour(); minute = 0; return true; } return false; } bool ApplicationClock::incrementSecond(){ bool ret = false; seconds++; if( seconds > 59 ) { incrementMinute(); seconds = 0; ret = true; } progressBar->setCurrentProgress(seconds); return ret; } void ApplicationClock::destroyUserInterface() { } } /* namespace app */