summaryrefslogtreecommitdiff
path: root/displaymenu.c
diff options
context:
space:
mode:
Diffstat (limited to 'displaymenu.c')
-rw-r--r--displaymenu.c882
1 files changed, 441 insertions, 441 deletions
diff --git a/displaymenu.c b/displaymenu.c
index 34f8af3..8e3ea24 100644
--- a/displaymenu.c
+++ b/displaymenu.c
@@ -2,514 +2,514 @@
#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;
- initMenu = true;
- diskUsageDrawn = false;
- timersDrawn = false;
- lastDiskUsageState = -1;
- lastTimersState = -1;
- menuItemIndexLast = -1;
- currentNumItems = 0;
- menuHasIcons = true;
- detailView = NULL;
- contentNarrow = true;
- contentNarrowLast = true;
- menuView = new cNopacityDisplayMenuView();
- osd = menuView->createOsd();
- menuView->SetGeometry();
- menuView->CreatePixmaps();
- menuView->CreateFonts();
- menuView->SetAvrgFontWidth();
- menuView->CreateBackgroundImages(handleBackgrounds, handleButtons);
- menuView->DrawHeaderLogo();
- menuView->DrawBorderDecoration();
- dsyslog("nopacity: Construktor needed %d ms", int(cTimeMs::Now()-start));
+ int start = cTimeMs::Now();
+ config.setDynamicValues();
+ menuCategoryLast = mcUndefined;
+ menuSubCategory = mcSubUndefined;
+ menuSubCategoryLast = mcSubUndefined;
+ FrameTime = config.menuFrameTime;
+ FadeTime = config.menuFadeTime;
+ initial = true;
+ initMenu = true;
+ diskUsageDrawn = false;
+ timersDrawn = false;
+ lastDiskUsageState = -1;
+ lastTimersState = -1;
+ menuItemIndexLast = -1;
+ currentNumItems = 0;
+ menuHasIcons = true;
+ detailView = NULL;
+ contentNarrow = true;
+ contentNarrowLast = true;
+ menuView = new cNopacityDisplayMenuView();
+ osd = menuView->createOsd();
+ menuView->SetGeometry();
+ menuView->CreatePixmaps();
+ menuView->CreateFonts();
+ menuView->SetAvrgFontWidth();
+ menuView->CreateBackgroundImages(handleBackgrounds, handleButtons);
+ menuView->DrawHeaderLogo();
+ menuView->DrawBorderDecoration();
+ dsyslog("nopacity: Construktor needed %d ms", int(cTimeMs::Now()-start));
}
cNopacityDisplayMenu::~cNopacityDisplayMenu() {
- Cancel(-1);
- while (Active())
- cCondWait::SleepMs(10);
- delete menuView;
- menuItems.Clear();
- if (detailView) {
- delete detailView;
- }
- timers.Clear();
- for (int i=0; i<6; i++)
- cOsdProvider::DropImage(handleBackgrounds[i]);
- for (int i=0; i<4; i++)
- cOsdProvider::DropImage(handleButtons[i]);
+ Cancel(-1);
+ while (Active())
+ cCondWait::SleepMs(10);
+ delete menuView;
+ menuItems.Clear();
+ if (detailView) {
+ delete detailView;
+ }
+ timers.Clear();
+ for (int i=0; i<6; i++)
+ cOsdProvider::DropImage(handleBackgrounds[i]);
+ for (int i=0; i<4; i++)
+ cOsdProvider::DropImage(handleButtons[i]);
- delete osd;
+ delete osd;
}
void cNopacityDisplayMenu::DrawDisk(void) {
- if (initial || ((menuCategoryLast!=mcMain)&&(MenuCategory()==mcMain)&&!diskUsageDrawn)) {
- if (cVideoDiskUsage::HasChanged(lastDiskUsageState)) {
- menuView->DrawDiskUsage();
- } else {
- menuView->ShowDiskUsage(true);
- }
- diskUsageDrawn = true;
- }
+ if (initial || ((menuCategoryLast!=mcMain)&&(MenuCategory()==mcMain)&&!diskUsageDrawn)) {
+ if (cVideoDiskUsage::HasChanged(lastDiskUsageState)) {
+ menuView->DrawDiskUsage();
+ } else {
+ menuView->ShowDiskUsage(true);
+ }
+ diskUsageDrawn = true;
+ }
}
void cNopacityDisplayMenu::DrawTimers(void) {
- int maxTimersHeight = menuView->GetTimersMaxHeight();
- if (initial || ((menuCategoryLast!=mcMain)&&(MenuCategory()==mcMain)&&!timersDrawn)) {
- if (Timers.Modified(lastTimersState)) {
- timers.Clear();
- cSortedTimers SortedTimers;
- int numTimers = SortedTimers.Size();
- int currentHeight = menuView->GetTimersInitHeight();
- for (int i = 0; i < numTimers; i++) {
- if (const cTimer *Timer = SortedTimers[i]) {
- cNopacityTimer *t = menuView->DrawTimer(Timer, currentHeight);
- if (initial)
- if (FadeTime)
- t->SetAlpha(0);
- currentHeight += t->pixmap->ViewPort().Height() + menuView->spaceMenu;
- if (currentHeight < maxTimersHeight) {
- timers.Add(t);
- } else {
- delete t;
- break;
- }
- }
- }
- } else {
- for (cNopacityTimer *t = timers.First(); t; t = timers.Next(t)) {
- t->SetLayer(2);
- }
- }
- timersDrawn = true;
- }
+ int maxTimersHeight = menuView->GetTimersMaxHeight();
+ if (initial || ((menuCategoryLast!=mcMain)&&(MenuCategory()==mcMain)&&!timersDrawn)) {
+ if (Timers.Modified(lastTimersState)) {
+ timers.Clear();
+ cSortedTimers SortedTimers;
+ int numTimers = SortedTimers.Size();
+ int currentHeight = menuView->GetTimersInitHeight();
+ for (int i = 0; i < numTimers; i++) {
+ if (const cTimer *Timer = SortedTimers[i]) {
+ cNopacityTimer *t = menuView->DrawTimer(Timer, currentHeight);
+ if (initial)
+ if (FadeTime)
+ t->SetAlpha(0);
+ currentHeight += t->pixmap->ViewPort().Height() + menuView->spaceMenu;
+ if (currentHeight < maxTimersHeight) {
+ timers.Add(t);
+ } else {
+ delete t;
+ break;
+ }
+ }
+ }
+ } else {
+ for (cNopacityTimer *t = timers.First(); t; t = timers.Next(t)) {
+ t->SetLayer(2);
+ }
+ }
+ timersDrawn = true;
+ }
}
void cNopacityDisplayMenu::Scroll(bool Up, bool Page) {
- bool scrolled;
- scrolled = detailView->Scroll(Up, Page);
- if (scrolled) {
- double height = detailView->ScrollbarSize();
- double offset = detailView->Offset();
- menuView->DrawScrollbar(height, offset);
- }
+ bool scrolled;
+ scrolled = detailView->Scroll(Up, Page);
+ if (scrolled) {
+ double height = detailView->ScrollbarSize();
+ double offset = detailView->Offset();
+ menuView->DrawScrollbar(height, offset);
+ }
}
int cNopacityDisplayMenu::MaxItems(void) {
- int maxItems = 0;
- if (((MenuCategory() == mcChannel) && (menuSubCategory == mcSubChannelEdit) && (menuSubCategoryLast != mcSubChannelEdit))
- || (menuSubCategory == mcSubScheduleTimer)){
- maxItems = config.numDefaultMenuItems;
- } else {
- maxItems = menuView->GetMaxItems(MenuCategory());
- }
- currentNumItems = maxItems;
- return maxItems;
+ int maxItems = 0;
+ if (((MenuCategory() == mcChannel) && (menuSubCategory == mcSubChannelEdit) && (menuSubCategoryLast != mcSubChannelEdit))
+ || (menuSubCategory == mcSubScheduleTimer)){
+ maxItems = config.numDefaultMenuItems;
+ } else {
+ maxItems = menuView->GetMaxItems(MenuCategory());
+ }
+ currentNumItems = maxItems;
+ return maxItems;
}
void cNopacityDisplayMenu::Clear(void) {
- if (detailView) {
- delete detailView;
- detailView = NULL;
- }
- menuItemIndexLast = -1;
- initMenu = true;
- menuItems.Clear();
+ if (detailView) {
+ delete detailView;
+ detailView = NULL;
+ }
+ menuItemIndexLast = -1;
+ initMenu = true;
+ menuItems.Clear();
}
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
- */
- menuCategoryLast = this->MenuCategory();
- cSkinDisplayMenu::SetMenuCategory(MenuCategory);
- if ((menuCategoryLast == mcMain) && (MenuCategory != mcMain)) {
- menuView->ShowDiskUsage(false);
- for (cNopacityTimer *t = timers.First(); t; t = timers.Next(t)) {
- t->SetLayer(-1);
- }
- diskUsageDrawn = false;
- timersDrawn = false;
- }
+ /* 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
+ */
+ menuCategoryLast = this->MenuCategory();
+ cSkinDisplayMenu::SetMenuCategory(MenuCategory);
+ if ((menuCategoryLast == mcMain) && (MenuCategory != mcMain)) {
+ menuView->ShowDiskUsage(false);
+ for (cNopacityTimer *t = timers.First(); t; t = timers.Next(t)) {
+ t->SetLayer(-1);
+ }
+ diskUsageDrawn = false;
+ timersDrawn = false;
+ }
}
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 {
- left += menuView->DrawHeaderIcon(MenuCategory());
- contentNarrow = false;
- menuHasIcons = false;
- }
- }
- menuView->AdjustContentBackground(contentNarrow, contentNarrowLast);
- menuView->DrawHeaderLabel(left, 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 {
+ left += menuView->DrawHeaderIcon(MenuCategory());
+ contentNarrow = false;
+ menuHasIcons = false;
+ }
+ }
+ menuView->AdjustContentBackground(contentNarrow, contentNarrowLast);
+ menuView->DrawHeaderLabel(left, title);
+ }
}
void cNopacityDisplayMenu::SetButtons(const char *Red, const char *Green, const char *Yellow, const char *Blue) {
- tColor lutBg[] = { Theme.Color(clrButtonRedBorder), Theme.Color(clrButtonGreenBorder), Theme.Color(clrButtonYellowBorder), Theme.Color(clrButtonBlueBorder) };
- if (Red) {
- menuView->DrawButton(Red, handleButtons[0], lutBg[Setup.ColorKey0], 0);
- } else
- menuView->ClearButton(0);
-
- if (Green) {
- menuView->DrawButton(Green, handleButtons[1], lutBg[Setup.ColorKey1], 1);
- } else
- menuView->ClearButton(1);
-
- if (Yellow) {
- menuView->DrawButton(Yellow, handleButtons[2], lutBg[Setup.ColorKey2], 2);
- } else
- menuView->ClearButton(2);
-
- if (Blue) {
- menuView->DrawButton(Blue, handleButtons[3], lutBg[Setup.ColorKey3], 3);
- } else
- menuView->ClearButton(3);
+ tColor lutBg[] = { Theme.Color(clrButtonRedBorder), Theme.Color(clrButtonGreenBorder), Theme.Color(clrButtonYellowBorder), Theme.Color(clrButtonBlueBorder) };
+ if (Red) {
+ menuView->DrawButton(Red, handleButtons[0], lutBg[Setup.ColorKey0], 0);
+ } else
+ menuView->ClearButton(0);
+
+ if (Green) {
+ menuView->DrawButton(Green, handleButtons[1], lutBg[Setup.ColorKey1], 1);
+ } else
+ menuView->ClearButton(1);
+
+ if (Yellow) {
+ menuView->DrawButton(Yellow, handleButtons[2], lutBg[Setup.ColorKey2], 2);
+ } else
+ menuView->ClearButton(2);
+
+ if (Blue) {
+ menuView->DrawButton(Blue, handleButtons[3], lutBg[Setup.ColorKey3], 3);
+ } else
+ menuView->ClearButton(3);
}
void cNopacityDisplayMenu::SetMessage(eMessageType Type, const char *Text) {
- if (Text) {
- menuView->DrawMessage(Type, Text);
+ if (Text) {
+ menuView->DrawMessage(Type, Text);
} else {
- menuView->ClearMessage();
- }
+ menuView->ClearMessage();
+ }
}
void cNopacityDisplayMenu::SetItem(const char *Text, int Index, bool Current, bool Selectable) {
- int menuIconWidth = 0;
- int menuIconHeight = 0;
- cString *strItems = new cString[MaxTabs];
- int *tabItems = new int[2*MaxTabs];
- for (int i=0; i<MaxTabs; i++) {
- strItems[i] = "";
- tabItems[i] = 0;
- tabItems[i+MaxTabs] = 0;
- }
- SplitItem(Text, strItems, tabItems);
- if (initMenu) {
- 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) {
- 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());
- item->SetCurrent(Current);
- item->SetBackgrounds(handleBackgrounds);
- item->SetTabs(strItems, tabItems, MaxTabs);
- item->CreateText();
- int textWidth = item->CheckScrollable(menuHasIcons);
- item->CreatePixmap();
- if (menuHasIcons)
- item->CreatePixmapIcon(menuIconWidth, menuIconHeight);
- if (textWidth > 0)
- item->CreatePixmapTextScroller(textWidth);
- menuItems.Add(item);
- item->Render();
- menuItemIndexLast = Index;
- if (initial) {
- if (FadeTime) {
- item->SetAlpha(0);
- item->SetAlphaIcon(0);
- item->SetAlphaText(0);
- }
- }
- } else {
- //adjust Current if item was added twice
- cNopacityMenuItem *item = menuItems.Get(Index);
- item->SetCurrent(Current);
- item->Render();
- }
- } else {
- //redraw item when switching through menu
- cNopacityMenuItem *item = menuItems.Get(Index);
- item->SetTabs(strItems, tabItems, MaxTabs);
- item->SetCurrent(Current);
- item->Render();
- }
- SetEditableWidth(menuView->GetEditableWidth());
+ int menuIconWidth = 0;
+ int menuIconHeight = 0;
+ cString *strItems = new cString[MaxTabs];
+ int *tabItems = new int[2*MaxTabs];
+ for (int i=0; i<MaxTabs; i++) {
+ strItems[i] = "";
+ tabItems[i] = 0;
+ tabItems[i+MaxTabs] = 0;
+ }
+ SplitItem(Text, strItems, tabItems);
+ if (initMenu) {
+ 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) {
+ 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());
+ item->SetCurrent(Current);
+ item->SetBackgrounds(handleBackgrounds);
+ item->SetTabs(strItems, tabItems, MaxTabs);
+ item->CreateText();
+ int textWidth = item->CheckScrollable(menuHasIcons);
+ item->CreatePixmap();
+ if (menuHasIcons)
+ item->CreatePixmapIcon(menuIconWidth, menuIconHeight);
+ if (textWidth > 0)
+ item->CreatePixmapTextScroller(textWidth);
+ menuItems.Add(item);
+ item->Render();
+ menuItemIndexLast = Index;
+ if (initial) {
+ if (FadeTime) {
+ item->SetAlpha(0);
+ item->SetAlphaIcon(0);
+ item->SetAlphaText(0);
+ }
+ }
+ } else {
+ //adjust Current if item was added twice
+ cNopacityMenuItem *item = menuItems.Get(Index);
+ item->SetCurrent(Current);
+ item->Render();
+ }
+ } else {
+ //redraw item when switching through menu
+ cNopacityMenuItem *item = menuItems.Get(Index);
+ item->SetTabs(strItems, tabItems, MaxTabs);
+ item->SetCurrent(Current);
+ item->Render();
+ }
+ SetEditableWidth(menuView->GetEditableWidth());
}
void cNopacityDisplayMenu::SplitItem(const char *Text, cString *strItems, int *tabItems) {
- int x = 0;
- for (int i = 0; i < MaxTabs; i++) {
- const char *s = GetTabbedText(Text, i);
- if (s) {
- strItems[i] = s;
+ int x = 0;
+ for (int i = 0; i < MaxTabs; i++) {
+ const char *s = GetTabbedText(Text, i);
+ if (s) {
+ strItems[i] = s;
+ }
+ tabItems[i] = Tab(i);
+ if (i>0) {
+ tabItems[(i-1) + MaxTabs] = Tab(i) - x;
+ x += Tab(i) - x;
}
- tabItems[i] = Tab(i);
- if (i>0) {
- tabItems[(i-1) + MaxTabs] = Tab(i) - x;
- x += Tab(i) - x;
- }
- if (!Tab(i + 1)) {
- if (s)
- tabItems[i + MaxTabs] = menuView->GetWidthDefaultMenu() - x;
- else if (i==1) {
- tabItems[MaxTabs] = menuView->GetWidthDefaultMenu() - 1;
- tabItems[1] = 0;
- tabItems[MaxTabs+1] = 0;
- }
- break;
- }
- }
+ if (!Tab(i + 1)) {
+ if (s)
+ tabItems[i + MaxTabs] = menuView->GetWidthDefaultMenu() - x;
+ else if (i==1) {
+ tabItems[MaxTabs] = menuView->GetWidthDefaultMenu() - 1;
+ tabItems[1] = 0;
+ tabItems[MaxTabs+1] = 0;
+ }
+ break;
+ }
+ }
}
int cNopacityDisplayMenu::Tab(int n) {
- return (n >= 0 && n < MaxTabs) ? menuView->mytabs[n] : 0;
+ return (n >= 0 && n < MaxTabs) ? menuView->mytabs[n] : 0;
}
void cNopacityDisplayMenu::SetTabs(int Tab1, int Tab2, int Tab3, int Tab4, int Tab5) {
- menuView->SetTabs(Tab1, Tab2, Tab3, Tab4, Tab5);
+ menuView->SetTabs(Tab1, Tab2, Tab3, Tab4, Tab5);
}
int cNopacityDisplayMenu::GetTextAreaWidth(void) const {
- return menuView->GetTextAreaWidth();
+ return menuView->GetTextAreaWidth();
}
const cFont *cNopacityDisplayMenu::GetTextAreaFont(bool FixedFont) const {
- return menuView->GetTextAreaFont(FixedFont);
+ return menuView->GetTextAreaFont(FixedFont);
}
void cNopacityDisplayMenu::SetScrollbar(int Total, int Offset) {
- if (MaxItems() >= Total) {
- menuView->ClearScrollbar();
- return;
- }
- double height = (double)MaxItems()/(double)Total;
- double offset = (double)Offset/(double)Total;
-
- menuView->DrawScrollbar(height, offset);
+ if (MaxItems() >= Total) {
+ menuView->ClearScrollbar();
+ return;
+ }
+ double height = (double)MaxItems()/(double)Total;
+ double offset = (double)Offset/(double)Total;
+
+ menuView->DrawScrollbar(height, offset);
}
void cNopacityDisplayMenu::SetEvent(const cEvent *Event) {
- if (!Event)
- return;
- menuView->AdjustContentBackground(false, contentNarrowLast);
- detailView = new cNopacityMenuDetailEventView(osd, Event);
- menuView->SetDetailViewSize(dvEvent, detailView);
- detailView->SetFonts();
- if (config.displayRerunsDetailEPGView)
- detailView->LoadReruns(Event);
- detailView->SetContent(Event->Description());
- detailView->CreatePixmaps();
- detailView->Render();
- if (detailView->Scrollable()) {
- double height = detailView->ScrollbarSize();
- double offset = 0.0;
- menuView->DrawScrollbar(height, offset);
- }
+ if (!Event)
+ return;
+ menuView->AdjustContentBackground(false, contentNarrowLast);
+ detailView = new cNopacityMenuDetailEventView(osd, Event);
+ menuView->SetDetailViewSize(dvEvent, detailView);
+ detailView->SetFonts();
+ if (config.displayRerunsDetailEPGView)
+ detailView->LoadReruns(Event);
+ detailView->SetContent(Event->Description());
+ detailView->CreatePixmaps();
+ detailView->Render();
+ if (detailView->Scrollable()) {
+ double height = detailView->ScrollbarSize();
+ double offset = 0.0;
+ menuView->DrawScrollbar(height, offset);
+ }
}
void cNopacityDisplayMenu::SetRecording(const cRecording *Recording) {
- if (!Recording)
- return;
- menuView->AdjustContentBackground(false, contentNarrowLast);
- detailView = new cNopacityMenuDetailRecordingView(osd, Recording);
- menuView->SetDetailViewSize(dvRecording, detailView);
- detailView->SetFonts();
- detailView->SetContent(Recording->Info()->Description());
- detailView->CreatePixmaps();
- detailView->Render();
- if (detailView->Scrollable()) {
- double height = detailView->ScrollbarSize();
- double offset = 0.0;
- menuView->DrawScrollbar(height, offset);
- }
+ if (!Recording)
+ return;
+ menuView->AdjustContentBackground(false, contentNarrowLast);
+ detailView = new cNopacityMenuDetailRecordingView(osd, Recording);
+ menuView->SetDetailViewSize(dvRecording, detailView);
+ detailView->SetFonts();
+ detailView->SetContent(Recording->Info()->Description());
+ detailView->CreatePixmaps();
+ detailView->Render();
+ if (detailView->Scrollable()) {
+ double height = detailView->ScrollbarSize();
+ double offset = 0.0;
+ menuView->DrawScrollbar(height, offset);
+ }
}
void cNopacityDisplayMenu::SetText(const char *Text, bool FixedFont) {
- if (!Text)
- return;
- menuView->AdjustContentBackground(false, contentNarrowLast);
- detailView = new cNopacityMenuDetailTextView(osd);
- menuView->SetDetailViewSize(dvText, detailView);
- detailView->SetFonts();
- detailView->SetContent(Text);
- detailView->CreatePixmaps();
- detailView->Render();
- if (detailView->Scrollable()) {
- double height = detailView->ScrollbarSize();
- double offset = 0.0;
- menuView->DrawScrollbar(height, offset);
- }
+ if (!Text)
+ return;
+ menuView->AdjustContentBackground(false, contentNarrowLast);
+ detailView = new cNopacityMenuDetailTextView(osd);
+ menuView->SetDetailViewSize(dvText, detailView);
+ detailView->SetFonts();
+ detailView->SetContent(Text);
+ detailView->CreatePixmaps();
+ detailView->Render();
+ if (detailView->Scrollable()) {
+ double height = detailView->ScrollbarSize();
+ double offset = 0.0;
+ menuView->DrawScrollbar(height, offset);
+ }
}
void cNopacityDisplayMenu::Flush(void) {
- menuView->DrawDate(initial);
- if (MenuCategory() == mcMain) {
- DrawDisk();
- DrawTimers();
- }
- if (initial) {
- if (config.menuFadeTime)
- Start();
- }
- initMenu = false;
- initial = false;
- osd->Flush();
+ menuView->DrawDate(initial);
+ if (MenuCategory() == mcMain) {
+ DrawDisk();
+ DrawTimers();
+ }
+ if (initial) {
+ if (config.menuFadeTime)
+ Start();
+ }
+ initMenu = false;
+ initial = false;
+ osd->Flush();
}
void cNopacityDisplayMenu::Action(void) {
- uint64_t Start = cTimeMs::Now();
- while (Running()) {
- uint64_t Now = cTimeMs::Now();
- cPixmap::Lock();
- double t = min(double(Now - Start) / FadeTime, 1.0);
- int Alpha = t * ALPHA_OPAQUE;
- menuView->SetPixmapAlpha(Alpha);
- for (cNopacityMenuItem *item = menuItems.First(); Running() && item; item = menuItems.Next(item)) {
- item->SetAlpha(Alpha);
- item->SetAlphaIcon(Alpha);
- item->SetAlphaText(Alpha);
- }
- for (cNopacityTimer *t = timers.First(); Running() && t; t = timers.Next(t))
- t->SetAlpha(Alpha);
- if (Running())
- osd->Flush();
- cPixmap::Unlock();
- int Delta = cTimeMs::Now() - Now;
- if (Running() && (Delta < FrameTime))
- cCondWait::SleepMs(FrameTime - Delta);
- if ((int)(Now - Start) > FadeTime)
- break;
- }
+ uint64_t Start = cTimeMs::Now();
+ while (Running()) {
+ uint64_t Now = cTimeMs::Now();
+ cPixmap::Lock();
+ double t = min(double(Now - Start) / FadeTime, 1.0);
+ int Alpha = t * ALPHA_OPAQUE;
+ menuView->SetPixmapAlpha(Alpha);
+ for (cNopacityMenuItem *item = menuItems.First(); Running() && item; item = menuItems.Next(item)) {
+ item->SetAlpha(Alpha);
+ item->SetAlphaIcon(Alpha);
+ item->SetAlphaText(Alpha);
+ }
+ for (cNopacityTimer *t = timers.First(); Running() && t; t = timers.Next(t))
+ t->SetAlpha(Alpha);
+ if (Running())
+ osd->Flush();
+ cPixmap::Unlock();
+ int Delta = cTimeMs::Now() - Now;
+ if (Running() && (Delta < FrameTime))
+ cCondWait::SleepMs(FrameTime - Delta);
+ if ((int)(Now - Start) > FadeTime)
+ break;
+ }
}