From eef71c613bdd5b6c5b2e944a49ba43c314b73b0f Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 30 Mar 2016 22:30:50 +0200 Subject: New viewelement "time" for detailview --- detailView.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ detailView.h | 3 +++ plex.cpp | 4 ++++ plexSdOsd.cpp | 7 +++++-- templates/plug-plex-detail.xml | 18 +++++++++++++++++- tokendefinitions.h | 3 ++- 6 files changed, 72 insertions(+), 4 deletions(-) diff --git a/detailView.cpp b/detailView.cpp index 397247e..83152b0 100644 --- a/detailView.cpp +++ b/detailView.cpp @@ -8,6 +8,7 @@ cDetailView::cDetailView(std::shared_ptr detailView, m_pfooter = std::shared_ptr(detailView->GetViewElement((int)eViewElementsDetail::footer)); m_pInfo = std::shared_ptr(detailView->GetViewElement((int)eViewElementsDetail::info)); m_pScrollbar = std::shared_ptr(detailView->GetViewElement((int)eViewElementsDetail::scrollbar)); + m_pWatch = std::shared_ptr(detailView->GetViewElement((int)eViewElementsDetail::watch)); m_pVideo = video; m_drawall = true; @@ -53,6 +54,7 @@ void cDetailView::Draw() DrawFooter(); DrawInfo(); DrawScrollbar(); + DrawTime(); } void cDetailView::Clear() @@ -62,6 +64,7 @@ void cDetailView::Clear() m_pScrollbar->Clear(); m_pfooter->Clear(); m_pGrid->Clear(); + m_pWatch->Clear(); } void cDetailView::DrawBackground() @@ -158,6 +161,44 @@ void cDetailView::DrawScrollbar() m_pScrollbar->Display(); } +bool cDetailView::DrawTime() +{ + time_t t = time(0); // get time now + struct tm * now = localtime(&t); + int sec = now->tm_sec; + if (sec == m_lastsecond) + return false; + + int min = now->tm_min; + int hour = now->tm_hour; + int hourMinutes = hour%12 * 5 + min / 12; + + char monthname[20]; + char monthshort[10]; + strftime(monthshort, sizeof(monthshort), "%b", now); + strftime(monthname, sizeof(monthname), "%B", now); + + m_pWatch->Clear(); + m_pWatch->ClearTokens(); + m_pWatch->AddIntToken((int)eTokenTimeInt::sec, sec); + m_pWatch->AddIntToken((int)eTokenTimeInt::min, min); + m_pWatch->AddIntToken((int)eTokenTimeInt::hour, hour); + m_pWatch->AddIntToken((int)eTokenTimeInt::hmins, hourMinutes); + m_pWatch->AddIntToken((int)eTokenTimeInt::year, now->tm_year + 1900); + m_pWatch->AddIntToken((int)eTokenTimeInt::day, now->tm_mday); + m_pWatch->AddStringToken((int)eTokenTimeStr::time, *TimeString(t)); + m_pWatch->AddStringToken((int)eTokenTimeStr::monthname, monthname); + m_pWatch->AddStringToken((int)eTokenTimeStr::monthnameshort, monthshort); + m_pWatch->AddStringToken((int)eTokenTimeStr::month, *cString::sprintf("%02d", now->tm_mon + 1)); + m_pWatch->AddStringToken((int)eTokenTimeStr::dayleadingzero, *cString::sprintf("%02d", now->tm_mday)); + m_pWatch->AddStringToken((int)eTokenTimeStr::dayname, *WeekDayNameFull(now->tm_wday)); + m_pWatch->AddStringToken((int)eTokenTimeStr::daynameshort, *WeekDayName(now->tm_wday)); + m_pWatch->Display(); + + m_lastsecond = sec; + return true; +} + eOSState cDetailView::NavigateSelect() { if(m_setIterator) return eOSState::osContinue; diff --git a/detailView.h b/detailView.h index 38cbdba..9398fc2 100644 --- a/detailView.h +++ b/detailView.h @@ -19,15 +19,18 @@ public: virtual eOSState NavigateBack(); plexclient::Video* GetVideo() { return m_pVideo; }; virtual void Clear(); + bool DrawTime(); private: std::shared_ptr m_pBackground; std::shared_ptr m_pfooter; std::shared_ptr m_pInfo; std::shared_ptr m_pScrollbar; + std::shared_ptr m_pWatch; plexclient::Video *m_pVideo; bool m_drawall; + int m_lastsecond; void DrawBackground(); void DrawFooter(); diff --git a/plex.cpp b/plex.cpp index 7aff066..9eb47ee 100644 --- a/plex.cpp +++ b/plex.cpp @@ -135,6 +135,10 @@ bool cMyPlugin::Start(void) skindesignerapi::cTokenContainer *tkDetailExtraGrid = new skindesignerapi::cTokenContainer(); cPlexSdOsd::DefineGridTokens(tkDetailExtraGrid); m_pPlugStruct->RegisterViewGrid((int)eViews::detailView, (int)eViewDetailViewGrids::extras, "extragrid", tkDetailExtraGrid); + + skindesignerapi::cTokenContainer *tkDetailWatch = new skindesignerapi::cTokenContainer(); + cPlexSdOsd::DefineWatchTokens(tkDetailWatch); + m_pPlugStruct->RegisterViewElement((int)eViews::detailView, (int)eViewElementsDetail::watch, "time", tkDetailWatch); if (!skindesignerapi::SkindesignerAPI::RegisterPlugin(m_pPlugStruct)) { diff --git a/plexSdOsd.cpp b/plexSdOsd.cpp index 67ab462..5e93b1b 100644 --- a/plexSdOsd.cpp +++ b/plexSdOsd.cpp @@ -86,7 +86,6 @@ eOSState cPlexSdOsd::ProcessKey(eKeys Key) return eOSState::osContinue; } } - if (m_pBrowserGrid->DrawTime()) m_pBrowserGrid->Flush(); state = ProcessKeyBrowserView(Key); } @@ -98,7 +97,7 @@ eOSState cPlexSdOsd::ProcessKeyDetailView(eKeys Key) { eOSState state = eOSState::osContinue; plexclient::Video* vid = NULL; - + switch (Key & ~k_Repeat) { case kUp: if(m_pDetailGrid->NavigateUp()) Flush(); @@ -154,6 +153,8 @@ eOSState cPlexSdOsd::ProcessKeyDetailView(eKeys Key) state = eOSState::osEnd; } + if (state != osEnd && m_pDetailGrid->DrawTime()) m_pDetailGrid->Flush(); + return state; } @@ -221,6 +222,8 @@ eOSState cPlexSdOsd::ProcessKeyBrowserView(eKeys Key) state = eOSState::osEnd; } + if (state != osEnd && m_pBrowserGrid->DrawTime()) m_pBrowserGrid->Flush(); + return state; } diff --git a/templates/plug-plex-detail.xml b/templates/plug-plex-detail.xml index f48a81d..d63c2e8 100644 --- a/templates/plug-plex-detail.xml +++ b/templates/plug-plex-detail.xml @@ -2,7 +2,23 @@ - + + +