summaryrefslogtreecommitdiff
path: root/browserGrid.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'browserGrid.cpp')
-rw-r--r--browserGrid.cpp203
1 files changed, 138 insertions, 65 deletions
diff --git a/browserGrid.cpp b/browserGrid.cpp
index 2b990e8..e336fee 100644
--- a/browserGrid.cpp
+++ b/browserGrid.cpp
@@ -9,17 +9,18 @@
cBrowserGrid::cBrowserGrid(skindesignerapi::cOsdView* rootView) : cViewGridNavigator(rootView, rootView->GetViewGrid(eViewGrids::vgBrowser) )
{
m_pBackground = std::shared_ptr<skindesignerapi::cViewElement>(rootView->GetViewElement(eViewElementsRoot::verBackground));
- m_pViewHeader = std::shared_ptr<cViewHeader>( new cViewHeader(rootView->GetViewElement(eViewElementsRoot::verHeader)));
+ //m_pViewHeader = std::shared_ptr<cViewHeader>( new cViewHeader(rootView->GetViewElement(eViewElementsRoot::verHeader)));
+ m_pHeader = std::shared_ptr<skindesignerapi::cViewElement>(rootView->GetViewElement(eViewElementsRoot::verHeader));
m_pfooter = std::shared_ptr<skindesignerapi::cViewElement>(rootView->GetViewElement(eViewElementsRoot::verFooter));
m_pInfopane = std::shared_ptr<skindesignerapi::cViewElement>(rootView->GetViewElement(eViewElementsRoot::verInfopane));
m_pWatch = std::shared_ptr<skindesignerapi::cViewElement>(rootView->GetViewElement(eViewElementsRoot::verWatch));
m_lastsecond = 0;
- m_rows = Config::GetInstance().GridRows;
- m_columns = Config::GetInstance().GridColumns;
m_pService = NULL;
m_pContainer = NULL;
- SwitchGrid(m_pViewHeader->CurrentTab());
+ m_viewEntryIndex = 0;
+ SwitchGrid(m_viewEntryIndex);
+ SwitchView();
}
cBrowserGrid::~cBrowserGrid()
@@ -37,8 +38,8 @@ void cBrowserGrid::Clear()
m_pGrid->Clear();
}
-void cBrowserGrid::Flush()
-{
+void cBrowserGrid::Flush()
+{
cMutexLock MutexLock(&cPlexSdOsd::RedrawMutex);
m_pBackground->Display();
m_pInfopane->Display();
@@ -46,31 +47,73 @@ void cBrowserGrid::Flush()
m_pRootView->Display();
}
-void cBrowserGrid::SwitchGrid(ePlexMenuTab currentTab)
+void cBrowserGrid::SwitchView(ViewMode mode)
+{
+ Config *conf = &Config::GetInstance();
+ conf->DefaultViewMode = mode;
+ if(conf->DefaultViewMode == ViewMode::Cover) {
+ SetGridDimensions(conf->CoverGridRows, conf->CoverGridColumns);
+ } else if(conf->DefaultViewMode == ViewMode::Detail) {
+ SetGridDimensions(conf->DetailGridRows, conf->DetailGridColumns);
+ } else if(conf->DefaultViewMode == ViewMode::List) {
+ SetGridDimensions(conf->ListGridRows, conf->ListGridColumns);
+ }
+
+ int activePos = SelectedObject()->AbsolutePosition;
+ //ProcessData();
+
+ for(std::vector<cGridElement*>::iterator it = m_vElements.begin(); it != m_vElements.end(); ++it) {
+ cGridElement *elem = *it;
+ elem->Position = -1;
+ elem->Dirty();
+ elem->SetPosition(-1,-1);
+ }
+
+ m_pGrid->Clear();
+ m_firstElementIter = m_vElements.begin() + activePos;
+ m_setIterator = true;
+ FilterElements(0);
+}
+
+void cBrowserGrid::NextViewMode()
+{
+ ViewMode mode = Config::GetInstance().DefaultViewMode;
+ if(mode == ViewMode::Cover) {
+ mode = ViewMode::Detail;
+ } else if(mode == ViewMode::Detail) {
+ mode = ViewMode::List;
+ } else if(mode == ViewMode::List) {
+ mode = ViewMode::Cover;
+ }
+ SwitchView(mode);
+}
+
+void cBrowserGrid::SwitchGrid(int index)
{
cPictureCache::GetInstance().RemoveAll();
- if(currentTab == ePlexMenuTab::pmtOnDeck) {
- m_pService = std::shared_ptr<plexclient::Plexservice>(new plexclient::Plexservice( plexclient::plexgdm::GetInstance().GetFirstServer(), "/library/onDeck" ) );
- m_pContainer = m_pService->GetSection(m_pService->StartUri);
- m_bServersAreRoot = false;
- m_vServerElements.clear();
- ProcessData();
- } else if(currentTab == ePlexMenuTab::pmtRecentlyAdded) {
- m_pService = std::shared_ptr<plexclient::Plexservice>(new plexclient::Plexservice( plexclient::plexgdm::GetInstance().GetFirstServer(), "/library/recentlyAdded" ) );
+ m_pHeader->Clear();
+ m_pHeader->ClearTokens();
+
+ if(m_viewEntryIndex < Config::GetInstance().m_viewentries.size()) {
+ ViewEntry entry = Config::GetInstance().m_viewentries[index];
+ m_pHeader->AddStringToken("tabname", tr(entry.Name.c_str()));
+ m_pService = std::shared_ptr<plexclient::Plexservice>(new plexclient::Plexservice( plexclient::plexgdm::GetInstance().GetFirstServer(), entry.PlexPath ) );
m_pContainer = m_pService->GetSection(m_pService->StartUri);
m_bServersAreRoot = false;
m_vServerElements.clear();
- ProcessData();
-
- } else if(currentTab == ePlexMenuTab::pmtLibrary) {
+ } else {
//Server View
+ m_pHeader->AddStringToken("tabname", tr("Library"));
m_pService = NULL;
m_pContainer = NULL;
m_bServersAreRoot = true;
SetServerElements();
- ProcessData();
}
+
+ ProcessData();
+
+ SelectedObject()->AddTokens(m_pHeader, false);
}
void cBrowserGrid::SetServerElements()
@@ -78,8 +121,9 @@ void cBrowserGrid::SetServerElements()
m_vServerElements.clear();
for(std::vector<plexclient::PlexServer>::iterator it = plexclient::plexgdm::GetInstance().GetPlexservers().begin(); it != plexclient::plexgdm::GetInstance().GetPlexservers().end(); ++it) {
- m_vServerElements.push_back(cServerElement(&(*it), "/library/sections", "Bibliothek"));
- m_vServerElements.push_back(cServerElement(&(*it), "/video", "Video Channels"));
+ for(std::vector<ViewEntry>::iterator vEntry = Config::GetInstance().m_serverViewentries.begin(); vEntry != Config::GetInstance().m_serverViewentries.end(); ++vEntry) {
+ m_vServerElements.push_back(cServerElement(&(*it), vEntry->PlexPath, vEntry->Name));
+ }
}
}
@@ -111,7 +155,13 @@ void cBrowserGrid::ProcessData()
}
}
}
-
+
+ int pos = 0;
+ for(std::vector<cGridElement*>::iterator it = m_vElements.begin(); it != m_vElements.end(); ++it) {
+ cGridElement *elem = *it;
+ elem->AbsolutePosition = pos++;
+ }
+
m_firstElementIter = m_vElements.begin();
m_pGrid->Clear();
@@ -164,7 +214,7 @@ eOSState cBrowserGrid::NavigateBack()
void cBrowserGrid::DrawGrid()
{
DrawBackground();
- m_pViewHeader->Draw(SelectedObject());
+ m_pHeader->Display();
DrawInfopane();
DrawFooter();
}
@@ -172,8 +222,9 @@ void cBrowserGrid::DrawGrid()
void cBrowserGrid::DrawBackground()
{
m_pBackground->ClearTokens();
-
- if(auto video = dynamic_cast<plexclient::Video*>(SelectedObject()) ) {
+
+ auto video = dynamic_cast<plexclient::Video*>(SelectedObject());
+ if(video) {
bool cached = false;
std::string path = cPictureCache::GetInstance().GetPath(video->ArtUri(), 1920, 1080, cached);
m_pBackground->AddStringToken("selecteditembackground", path);
@@ -181,6 +232,7 @@ void cBrowserGrid::DrawBackground()
m_pBackground->AddIntToken("isdirectory", 1);
m_pBackground->AddStringToken("currentdirectorybackground", "/path");
+ m_pBackground->AddIntToken("viewmode", Config::GetInstance().DefaultViewMode);
}
void cBrowserGrid::DrawInfopane()
@@ -193,11 +245,21 @@ void cBrowserGrid::DrawFooter()
{
//if (!active)
// return;
+ cString nextTab = "Library";
+ if(m_viewEntryIndex + 1 < Config::GetInstance().m_viewentries.size()) {
+ nextTab = Config::GetInstance().m_viewentries[m_viewEntryIndex + 1].Name.c_str();
+ } else if(m_viewEntryIndex + 1 == Config::GetInstance().m_viewentries.size() + 1) {
+ nextTab = Config::GetInstance().m_viewentries[0].Name.c_str();
+ }
+ cString prevTab = "Library";
+ if(m_viewEntryIndex - 1 >= 0) {
+ prevTab = Config::GetInstance().m_viewentries[m_viewEntryIndex - 1].Name.c_str();
+ }
- string textGreen = tr("Prev. Tab");
- string textYellow = tr("Next Tab");
+ string textGreen = tr(prevTab);
+ string textYellow = tr(nextTab);
string textRed = "";
- string textBlue = "";
+ string textBlue = tr("Switch View");
if(auto vid = dynamic_cast<plexclient::Video*>(SelectedObject()) ) {
if(vid->m_iViewCount > 0) textRed = tr("Unscrobble");
@@ -251,49 +313,58 @@ void cBrowserGrid::DrawFooter()
void cBrowserGrid::NextTab()
{
- SwitchGrid(m_pViewHeader->NextTab());
+ m_viewEntryIndex++;
+ if(m_viewEntryIndex > Config::GetInstance().m_viewentries.size()) {
+ m_viewEntryIndex = 0;
+ }
+ SwitchGrid(m_viewEntryIndex);
}
void cBrowserGrid::PrevTab()
{
- SwitchGrid(m_pViewHeader->PrevTab());
+ m_viewEntryIndex--;
+ if(m_viewEntryIndex < 0) {
+ m_viewEntryIndex = Config::GetInstance().m_viewentries.size();
+ }
+ SwitchGrid(m_viewEntryIndex);
}
-bool cBrowserGrid::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("sec", sec);
- m_pWatch->AddIntToken("min", min);
- m_pWatch->AddIntToken("hour", hour);
- m_pWatch->AddIntToken("hmins", hourMinutes);
- m_pWatch->AddIntToken("year", now->tm_year + 1900);
- m_pWatch->AddIntToken("day", now->tm_mday);
- m_pWatch->AddStringToken("time", *TimeString(t));
- m_pWatch->AddStringToken("monthname", monthname);
- m_pWatch->AddStringToken("monthnameshort", monthshort);
- m_pWatch->AddStringToken("month", *cString::sprintf("%02d", now->tm_mon + 1));
- m_pWatch->AddStringToken("dayleadingzero", *cString::sprintf("%02d", now->tm_mday));
- m_pWatch->AddStringToken("dayname", *WeekDayNameFull(now->tm_wday));
- m_pWatch->AddStringToken("daynameshort", *WeekDayName(now->tm_wday));
- m_pWatch->Display();
-
- m_lastsecond = sec;
- return true;
+bool cBrowserGrid::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("sec", sec);
+ m_pWatch->AddIntToken("min", min);
+ m_pWatch->AddIntToken("hour", hour);
+ m_pWatch->AddIntToken("hmins", hourMinutes);
+ m_pWatch->AddIntToken("year", now->tm_year + 1900);
+ m_pWatch->AddIntToken("day", now->tm_mday);
+ m_pWatch->AddStringToken("time", *TimeString(t));
+ m_pWatch->AddStringToken("monthname", monthname);
+ m_pWatch->AddStringToken("monthnameshort", monthshort);
+ m_pWatch->AddStringToken("month", *cString::sprintf("%02d", now->tm_mon + 1));
+ m_pWatch->AddStringToken("dayleadingzero", *cString::sprintf("%02d", now->tm_mday));
+ m_pWatch->AddStringToken("dayname", *WeekDayNameFull(now->tm_wday));
+ m_pWatch->AddStringToken("daynameshort", *WeekDayName(now->tm_wday));
+ m_pWatch->Display();
+
+ m_lastsecond = sec;
+ return true;
}
/*
@@ -305,6 +376,7 @@ void cDummyElement::AddTokens(std::shared_ptr<skindesignerapi::cOsdElement> grid
if(clear) grid->ClearTokens();
grid->AddIntToken("isdummy", 1);
grid->AddStringToken("title", "../");
+ grid->AddIntToken("viewmode", Config::GetInstance().DefaultViewMode);
}
std::string cDummyElement::GetTitle()
@@ -332,6 +404,7 @@ void cServerElement::AddTokens(std::shared_ptr<skindesignerapi::cOsdElement> gri
grid->AddStringToken("serverip", m_pServer->GetIpAdress());
grid->AddIntToken("serverport", m_pServer->GetPort());
grid->AddStringToken("serverversion", m_pServer->GetVersion());
+ grid->AddIntToken("viewmode", Config::GetInstance().DefaultViewMode);
}
std::string cServerElement::GetTitle()