summaryrefslogtreecommitdiff
path: root/detailView.cpp
diff options
context:
space:
mode:
authorChristian <zerov83@gmail.com>2016-03-08 22:14:49 +0100
committerChristian <zerov83@gmail.com>2016-03-08 22:14:49 +0100
commite63b1337cb98ddfa136de78628f5048b682276ff (patch)
treef164267d8b4171a21a8a264cc41226e53f4ef056 /detailView.cpp
parent662171f45281deacdf2db255909be11ec869122c (diff)
downloadvdr-plugin-plex-e63b1337cb98ddfa136de78628f5048b682276ff.tar.gz
vdr-plugin-plex-e63b1337cb98ddfa136de78628f5048b682276ff.tar.bz2
Skindesigner "DetailView" in development
Diffstat (limited to 'detailView.cpp')
-rw-r--r--detailView.cpp166
1 files changed, 164 insertions, 2 deletions
diff --git a/detailView.cpp b/detailView.cpp
index ec7aee3..ef84179 100644
--- a/detailView.cpp
+++ b/detailView.cpp
@@ -1,10 +1,172 @@
#include "detailView.h"
+#include "Config.h"
-cDetailView::cDetailView(skindesignerapi::cOsdView *detailView, const cGridElement *element)
+cDetailView::cDetailView(std::shared_ptr<skindesignerapi::cOsdView> detailView, plexclient::Video *video)
+ : cViewGridNavigator(detailView)
{
+ m_pBackground = std::shared_ptr<skindesignerapi::cViewElement>(detailView->GetViewElement((int)eViewElementsDetail::background));
+ m_pfooter = std::shared_ptr<skindesignerapi::cViewElement>(detailView->GetViewElement((int)eViewElementsDetail::footer));
+ m_pInfo = std::shared_ptr<skindesignerapi::cViewElement>(detailView->GetViewElement((int)eViewElementsDetail::info));
+ m_pScrollbar = std::shared_ptr<skindesignerapi::cViewElement>(detailView->GetViewElement((int)eViewElementsDetail::scrollbar));
+
+ m_pVideo = video;
+ m_drawall = true;
+
+ m_pGrid = NULL;
+ SetViewGrid(std::shared_ptr<skindesignerapi::cViewGrid>(detailView->GetViewGrid((int)eViewDetailViewGrids::extras)));
+ SetGridDimensions(Config::GetInstance().ExtrasGridColumns, Config::GetInstance().ExtrasGridRows);
+}
+
+void cDetailView::Flush()
+{
+ if (m_drawall) {
+ m_pBackground->Display();
+ m_pInfo->Display();
+ m_drawall = false;
+ }
+ m_pfooter->Display();
+ m_pGrid->Display();
+ m_pScrollbar->Display();
+}
+
+void cDetailView::Draw()
+{
+ // Draw Grid
+ m_vElements.clear();
+
+ int pos = 0;
+ for(auto it = m_pVideo->m_vExtras.begin(); it != m_pVideo->m_vExtras.end(); ++it) {
+ plexclient::Video *elem = &(*it);
+ elem->AbsolutePosition = pos++;;
+ m_vElements.push_back(elem);
+ }
+
+ m_startIndex = 0;
+
+// m_pGrid->Clear();
+ m_setIterator = true;
+ FilterElements(0);
+
+ DrawBackground();
+ DrawFooter();
+ DrawInfo();
+ DrawScrollbar();
+}
+
+void cDetailView::Clear()
+{
+ m_pBackground->Clear();
+ m_pInfo->Clear();
+ m_pScrollbar->Clear();
+ m_pfooter->Clear();
+ m_pGrid->Clear();
+}
+
+void cDetailView::DrawBackground()
+{
+ m_pBackground->ClearTokens();
+ bool art = m_pVideo->m_sArt.empty() == false;
+ m_pBackground->AddIntToken((int)eTokenDetailBackgroundInt::hasfanart, art);
+ if(art) m_pBackground->AddStringToken((int)eTokenDetailBackgroundStr::fanartpath, m_pVideo->m_sArt.c_str());
+
+ bool cover = m_pVideo->m_sThumb.empty() == false;
+ m_pBackground->AddIntToken((int)eTokenDetailBackgroundInt::hascover, cover);
+ if(Cover) m_pBackground->AddStringToken((int)eTokenDetailBackgroundStr::coverpath, m_pVideo->m_sThumb.c_str());
+}
+
+void cDetailView::DrawFooter()
+{
+ string textGreen = "";
+ string textYellow = "";
+ string textRed = "";
+ string textBlue = "Play";
+
+ if(auto vid = dynamic_cast<plexclient::Video*>(SelectedObject()) ) {
+ if(vid->m_iViewCount > 0) textRed = tr("Unscrobble");
+ else textRed = tr("Scrobble");
+ }
+
+
+ int colorKeys[4] = { Setup.ColorKey0, Setup.ColorKey1, Setup.ColorKey2, Setup.ColorKey3 };
+
+ m_pfooter->Clear();
+ m_pfooter->ClearTokens();
+
+ m_pfooter->AddStringToken((int)eTokenFooterStr::red, textRed.c_str());
+ m_pfooter->AddStringToken((int)eTokenFooterStr::green, textGreen.c_str());
+ m_pfooter->AddStringToken((int)eTokenFooterStr::yellow, textYellow.c_str());
+ m_pfooter->AddStringToken((int)eTokenFooterStr::blue, textBlue.c_str());
+
+ for (int button = 0; button < 4; button++) {
+ bool isRed = false;
+ bool isGreen = false;
+ bool isYellow = false;
+ bool isBlue = false;
+ switch (colorKeys[button]) {
+ case 0:
+ isRed = true;
+ break;
+ case 1:
+ isGreen = true;
+ break;
+ case 2:
+ isYellow = true;
+ break;
+ case 3:
+ isBlue = true;
+ break;
+ default:
+ break;
+ }
+ m_pfooter->AddIntToken(0 + button, isRed);
+ m_pfooter->AddIntToken(4 + button, isGreen);
+ m_pfooter->AddIntToken(8 + button, isYellow);
+ m_pfooter->AddIntToken(12 + button, isBlue);
+ }
+
+ m_pfooter->Display();
}
-cDetailView::~cDetailView()
+void cDetailView::DrawInfo()
{
+ m_pInfo->Clear();
+ m_pVideo->AddTokens(m_pInfo, true);
+ m_pInfo->Display();
}
+void cDetailView::DrawScrollbar()
+{
+ if (m_vElements.size() == 0)
+ return;
+
+ int currentRow = SelectedObject()->AbsolutePosition / m_columns;
+ int totalRows = m_vElements.size() / m_columns;
+
+ int scrollBarHeight = 100.0 / totalRows * m_rows;
+
+ int offset = 100.0 / totalRows * currentRow;
+ if(offset >= 100 - scrollBarHeight) {
+ offset = 100.0 - scrollBarHeight;
+ }
+ m_pScrollbar->Clear();
+ m_pScrollbar->ClearTokens();
+
+ m_pScrollbar->AddIntToken((int)eTokenScrollbarInt::height, scrollBarHeight);
+ m_pScrollbar->AddIntToken((int)eTokenScrollbarInt::offset, offset);
+ m_pScrollbar->Display();
+}
+
+eOSState cDetailView::NavigateSelect()
+{
+ if(m_setIterator) return eOSState::osContinue;
+
+ if(dynamic_cast<plexclient::Video*>(SelectedObject())) {
+ return eOSState::osUser1;
+ } else return eOSState::osBack;
+}
+
+eOSState cDetailView::NavigateBack()
+{
+ if(m_setIterator) return eOSState::osContinue;;
+ return eOSState::osBack;
+}