diff options
Diffstat (limited to 'displaymenu.c')
-rw-r--r-- | displaymenu.c | 306 |
1 files changed, 162 insertions, 144 deletions
diff --git a/displaymenu.c b/displaymenu.c index 9ecec20..902d4d4 100644 --- a/displaymenu.c +++ b/displaymenu.c @@ -2,11 +2,8 @@ #include <string> cNopacityDisplayMenu::cNopacityDisplayMenu(void) { - int start = cTimeMs::Now(); config.setDynamicValues(); menuCategoryLast = mcUndefined; - menuSubCategory = mcSubUndefined; - menuSubCategoryLast = mcSubUndefined; FrameTime = config.menuFrameTime; FadeTime = config.menuFadeTime; initial = true; @@ -17,7 +14,6 @@ cNopacityDisplayMenu::cNopacityDisplayMenu(void) { lastTimersState = -1; menuItemIndexLast = -1; currentNumItems = 0; - menuHasIcons = true; detailView = NULL; contentNarrow = true; contentNarrowLast = true; @@ -30,7 +26,6 @@ cNopacityDisplayMenu::cNopacityDisplayMenu(void) { menuView->CreateBackgroundImages(handleBackgrounds, handleButtons); menuView->DrawHeaderLogo(); menuView->DrawBorderDecoration(); - dsyslog("nopacity: Construktor needed %d ms", int(cTimeMs::Now()-start)); } cNopacityDisplayMenu::~cNopacityDisplayMenu() { @@ -106,11 +101,17 @@ void cNopacityDisplayMenu::Scroll(bool Up, bool Page) { int cNopacityDisplayMenu::MaxItems(void) { int maxItems = 0; - if (((MenuCategory() == mcChannel) && (menuSubCategory == mcSubChannelEdit) && (menuSubCategoryLast != mcSubChannelEdit)) - || (menuSubCategory == mcSubScheduleTimer)){ - maxItems = config.numDefaultMenuItems; - } else { - maxItems = menuView->GetMaxItems(MenuCategory()); + switch (MenuCategory()) { + case mcMain: + case mcSetup: + case mcSchedule: + case mcScheduleNow: + case mcScheduleNext: + case mcChannel: + maxItems = menuView->GetMaxItems(MenuCategory()); + break; + default: + maxItems = config.numDefaultMenuItems; } currentNumItems = maxItems; return maxItems; @@ -127,24 +128,52 @@ void cNopacityDisplayMenu::Clear(void) { } void cNopacityDisplayMenu::SetMenuCategory(eMenuCategory MenuCategory) { - /* Categories: - mcUndefined = -1, - mcUnknown = 0, - mcMain = 1, - mcSchedule = 2, - mcChannel = 3, - mcTimer = 4, - mcRecording = 5, - mcPlugin = 6, - mcSetup = 7, - mcCommand = 8, - mcEvent = 9, - mcText = 10, - mcFolder = 11, - mcCam = 12 - */ + /* Categories: + mcUndefined = -1, + mcUnknown = 0, + 1 mcMain, + 2 mcSchedule, + 3 mcScheduleNow, + 4 mcScheduleNext, + 5 mcChannel, + 6 mcChannelEdit, + 7 mcTimer, + 8 mcTimerEdit, + 9 mcRecording, + 10 mcRecordingInfo, + 11 mcPlugin, + 12 mcPluginSetup, + 13 mcSetup, + 14 mcSetupOsd, + 15 mcSetupEpg, + 16 mcSetupDvb, + 17 mcSetupLnb, + 18 mcSetupCam, + 19 mcSetupRecord, + 20 mcSetupReplay, + 21 mcSetupMisc, + 22 mcSetupPlugins, + 23 mcCommand, + 24 mcEvent, + 25 mcText, + 26 mcFolder, + 27 mcCam + */ menuCategoryLast = this->MenuCategory(); + contentNarrowLast = contentNarrow; cSkinDisplayMenu::SetMenuCategory(MenuCategory); + switch (MenuCategory) { + case mcMain: + case mcSchedule: + case mcScheduleNow: + case mcScheduleNext: + case mcChannel: + case mcSetup: + contentNarrow = true; + break; + default: + contentNarrow = false; + } if ((menuCategoryLast == mcMain) && (MenuCategory != mcMain)) { if (config.showDiscUsage) { menuView->ShowDiskUsage(false); @@ -157,95 +186,26 @@ void cNopacityDisplayMenu::SetMenuCategory(eMenuCategory MenuCategory) { timersDrawn = false; } } + esyslog("nopacity: menuCat %d", MenuCategory); } void cNopacityDisplayMenu::SetTitle(const char *Title) { - contentNarrowLast = contentNarrow; - menuSubCategoryLast = menuSubCategory; int left = 5; menuView->DestroyHeaderIcon(); if (Title) { cString title = Title; - if (MenuCategory() == mcMain) { - title = cString::sprintf("%s %s", Title, VDRVERSION); - left += menuView->ShowHeaderLogo(true); - contentNarrow = true; - menuHasIcons = true; - } else { - std::string strTitle = Title; - menuView->ShowHeaderLogo(false); - if (MenuCategory() == mcSchedule) { - //Main Schedule - if (startswith(Title, trVDR("Schedule"))) { - menuSubCategory = mcSubSchedule; - left += menuView->ShowHeaderIconChannelLogo(Title); - menuHasIcons = false; - contentNarrow = true; - //What's on now - } else if ( (strTitle.find(trVDR("Button$Now")) != std::string::npos) - || (strTitle.find(trVDR("What's on now?")) != std::string::npos) ) { - menuSubCategory = mcSubScheduleWhatsOnNow; - left += menuView->DrawHeaderIcon(mcSchedule); - menuHasIcons = true; - contentNarrow = true; - //What's on next - } else if ( (strTitle.find(trVDR("Button$Next")) != std::string::npos) - || (strTitle.find(trVDR("What's on next?")) != std::string::npos) ) { - menuSubCategory = mcSubScheduleWhatsOnNext; - left += menuView->DrawHeaderIcon(mcSchedule); - menuHasIcons = true; - contentNarrow = true; - //EPGSearch search results - } else if ((strTitle.length() > 0) && isdigit(strTitle.at(0))) { - menuSubCategory = mcSubScheduleSearchResults; - left += menuView->DrawHeaderIcon(mcSchedule); - menuHasIcons = true; - contentNarrow = true; - //What's on else - } else if ( ((config.epgSearchConf->UserSet[0]) && (strTitle.find(config.epgSearchConf->User[0]) != std::string::npos)) - ||((config.epgSearchConf->UserSet[1]) && (strTitle.find(config.epgSearchConf->User[1]) != std::string::npos)) - ||((config.epgSearchConf->UserSet[2]) && (strTitle.find(config.epgSearchConf->User[2]) != std::string::npos)) - ||((config.epgSearchConf->UserSet[3]) && (strTitle.find(config.epgSearchConf->User[3]) != std::string::npos))) - { - menuSubCategory = mcSubScheduleWhatsOnElse; - left += menuView->DrawHeaderIcon(mcSchedule); - menuHasIcons = true; - contentNarrow = true; - //hack for epgsearch timer conflict view - } else if (endswith(Title, "%")) { - menuSubCategory = mcSubScheduleTimer; - menuHasIcons = false; - contentNarrow = false; - currentNumItems = config.numDefaultMenuItems; - //EPGSearch Favorites - } else if (strTitle.find(":") != std::string::npos) { - menuSubCategory = mcSubScheduleFavorites; - left += menuView->DrawHeaderIcon(mcSchedule); - menuHasIcons = true; - contentNarrow = true; - - } else { - menuSubCategory = mcSubScheduleTimerconflict; - left += menuView->DrawHeaderIcon(mcSchedule); - menuHasIcons = true; - contentNarrow = true; - } - } else if (MenuCategory() == mcChannel) { - left += menuView->DrawHeaderIcon(mcChannel); - if (startswith(Title, trVDR("Channels"))) { - contentNarrow = true; - menuSubCategory = mcSubChannels; - menuHasIcons = true; - } else { - contentNarrow = false; - menuSubCategory = mcSubChannelEdit; - menuHasIcons = false; - } - } else { + switch (MenuCategory()) { + case mcMain: + title = cString::sprintf("%s %s", Title, VDRVERSION); + left += menuView->ShowHeaderLogo(true); + break; + case mcSchedule: + menuView->ShowHeaderLogo(false); + left += menuView->ShowHeaderIconChannelLogo(Title); + break; + default: + menuView->ShowHeaderLogo(false); left += menuView->DrawHeaderIcon(MenuCategory()); - contentNarrow = false; - menuHasIcons = false; - } } menuView->AdjustContentBackground(contentNarrow, contentNarrowLast); menuView->DrawHeaderLabel(left, title); @@ -283,9 +243,89 @@ void cNopacityDisplayMenu::SetMessage(eMessageType Type, const char *Text) { } } +bool cNopacityDisplayMenu::SetItemEvent(const cEvent *Event, int Index, bool Current, + bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch) { + if ((initMenu)&&(Index > menuItemIndexLast)) { + cNopacityMenuItem *item = new cNopacityScheduleMenuItem(osd, Event, Channel, TimerMatch, Selectable, MenuCategory()); + cPoint itemSize; + menuView->GetMenuItemSize(MenuCategory(), &itemSize); + item->SetFont(menuView->GetMenuItemFont(mcSchedule)); + item->SetFontSmall(menuView->GetMenuItemFontSmall()); + item->SetFontEPGWindow(menuView->GetEPGWindowFont()); + int spaceTop = menuView->GetMenuTop(currentNumItems, itemSize.Y()); + item->SetGeometry(Index, spaceTop, menuView->spaceMenu, itemSize.X(), itemSize.Y()); + item->SetTextWindow(menuView->GetDescriptionTextWindowSize()); + item->SetCurrent(Current); + item->SetBackgrounds(handleBackgrounds); + item->CreateText(); + int textWidth = item->CheckScrollable((Channel)?true:false); + item->CreatePixmap(); + item->CreatePixmapIcon(); + item->CreatePixmapTextScroller(textWidth); + menuItems.Add(item); + item->Render(); + menuItemIndexLast = Index; + if (initial) { + if (FadeTime) { + item->SetAlpha(0); + item->SetAlphaIcon(0); + item->SetAlphaText(0); + } + } + } else { + cNopacityMenuItem *item = menuItems.Get(Index); + item->SetCurrent(Current); + item->Render(); + } + return true; +} + +bool cNopacityDisplayMenu::SetItemTimer(const cTimer *Timer, int Index, bool Current, bool Selectable) { + return false; +} + +bool cNopacityDisplayMenu::SetItemChannel(const cChannel *Channel, int Index, bool Current, bool Selectable, bool WithProvider) { + if ((initMenu)&&(Index > menuItemIndexLast)) { + cNopacityMenuItem *item = new cNopacityChannelMenuItem(osd, Channel, Selectable); + cPoint itemSize; + menuView->GetMenuItemSize(MenuCategory(), &itemSize); + item->SetFont(menuView->GetMenuItemFont(mcChannel)); + item->SetFontSmall(menuView->GetMenuItemFontSmall()); + int spaceTop = menuView->GetMenuTop(currentNumItems, itemSize.Y()); + item->SetGeometry(Index, spaceTop, menuView->spaceMenu, itemSize.X(), itemSize.Y()); + item->SetCurrent(Current); + item->SetBackgrounds(handleBackgrounds); + item->CreateText(); + int textWidth = item->CheckScrollable(true); + item->CreatePixmap(); + item->CreatePixmapIcon(); + item->CreatePixmapTextScroller(textWidth); + menuItems.Add(item); + item->Render(); + menuItemIndexLast = Index; + if (initial) { + if (FadeTime) { + item->SetAlpha(0); + item->SetAlphaIcon(0); + item->SetAlphaText(0); + } + } + } else { + cNopacityMenuItem *item = menuItems.Get(Index); + item->SetCurrent(Current); + item->Render(); + } + return true; +} + +bool cNopacityDisplayMenu::SetItemRecording(const cRecording *Recording, int Index, bool Current, bool Selectable, + int Level, int Total, int New) { + return false; +} + + void cNopacityDisplayMenu::SetItem(const char *Text, int Index, bool Current, bool Selectable) { - int menuIconWidth = 0; - int menuIconHeight = 0; + bool hasIcons = false; cString *strItems = new cString[MaxTabs]; int *tabItems = new int[2*MaxTabs]; for (int i=0; i<MaxTabs; i++) { @@ -298,41 +338,18 @@ void cNopacityDisplayMenu::SetItem(const char *Text, int Index, bool Current, bo if (Index > menuItemIndexLast) { cNopacityMenuItem *item; cPoint itemSize; - if (MenuCategory() == mcMain) { - item = new cNopacityMainMenuItem(osd, Text, Selectable); - menuView->GetMenuItemSize(mcMain, &itemSize); - item->SetFont(menuView->GetMenuItemFont(mcMain)); - menuIconWidth = menuIconHeight = config.iconHeight; - } else if (MenuCategory() == mcSchedule) { - if (menuSubCategory == mcSubScheduleTimer) { + switch (MenuCategory()) { + case mcMain: + case mcSetup: + item = new cNopacityMainMenuItem(osd, Text, Selectable); + menuView->GetMenuItemSize(mcMain, &itemSize); + item->SetFont(menuView->GetMenuItemFont(mcMain)); + hasIcons = true; + break; + default: item = new cNopacityDefaultMenuItem(osd, Text, Selectable); menuView->GetMenuItemSize(mcUnknown, &itemSize); item->SetFont(menuView->GetMenuItemFont(mcUnknown)); - } else { - item = new cNopacityScheduleMenuItem(osd, Text, Selectable, menuSubCategory); - menuView->GetMenuItemSize(mcSchedule, &itemSize); - item->SetFont(menuView->GetMenuItemFont(mcSchedule)); - item->SetFontSmall(menuView->GetMenuItemFontSmall()); - item->SetDisplayMode(); - menuIconWidth = config.menuItemLogoWidth; - menuIconHeight = config.menuItemLogoHeight; - } - } else if (MenuCategory() == mcChannel) { - if (menuSubCategory == mcSubChannels) { - item = new cNopacityChannelMenuItem(osd, Text, Selectable); - menuView->GetMenuItemSize(mcChannel, &itemSize); - item->SetFont(menuView->GetMenuItemFont(mcChannel)); - menuIconWidth = config.menuItemLogoWidth; - menuIconHeight = config.menuItemLogoHeight; - } else { - item = new cNopacityDefaultMenuItem(osd, Text, Selectable); - menuView->GetMenuItemSize(mcUnknown, &itemSize); - item->SetFont(menuView->GetMenuItemFont(mcUnknown)); - } - } else { - item = new cNopacityDefaultMenuItem(osd, Text, Selectable); - menuView->GetMenuItemSize(mcUnknown, &itemSize); - item->SetFont(menuView->GetMenuItemFont(mcUnknown)); } int spaceTop = menuView->GetMenuTop(currentNumItems, itemSize.Y()); item->SetGeometry(Index, spaceTop, menuView->spaceMenu, itemSize.X(), itemSize.Y()); @@ -340,10 +357,11 @@ void cNopacityDisplayMenu::SetItem(const char *Text, int Index, bool Current, bo item->SetBackgrounds(handleBackgrounds); item->SetTabs(strItems, tabItems, MaxTabs); item->CreateText(); - int textWidth = item->CheckScrollable(menuHasIcons); + int textWidth = item->CheckScrollable(hasIcons); item->CreatePixmap(); - if (menuHasIcons) - item->CreatePixmapIcon(menuIconWidth, menuIconHeight); + if (hasIcons) { + item->CreatePixmapIcon(); + } if (textWidth > 0) item->CreatePixmapTextScroller(textWidth); menuItems.Add(item); |