mirror of
				https://projects.vdr-developer.org/git/vdr-plugin-tvguide.git
				synced 2023-10-05 13:01:48 +00:00 
			
		
		
		
	Compare commits
	
		
			48 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 435a74d9cf | ||
|  | fc47c35bea | ||
|  | 4d80c6900d | ||
|  | 78d6e980ee | ||
|  | 69356e9c43 | ||
|  | bf3a8a430b | ||
|  | 52c41ff5af | ||
|  | 5870b1ae4c | ||
|  | 69b851c9ed | ||
|  | 8335ab0e41 | ||
|  | 240cbe87e0 | ||
|  | ee68d2eb2f | ||
|  | eb3a4113be | ||
|  | 7ec89bf12b | ||
|  | f653594c4a | ||
|  | 8129d116fb | ||
|  | 874f5cd9d5 | ||
|  | 9044e092f8 | ||
|  | b96f800240 | ||
|  | 5d9ed1439a | ||
|  | 66a0c15aea | ||
|  | 8db88c2556 | ||
|  | 509b64d78f | ||
|  | 15b7074b4e | ||
|  | 3fee6ab13f | ||
|  | ffd3e2c79f | ||
|  | c77f74321f | ||
|  | efe06b8e98 | ||
|  | 6540e21444 | ||
|  | 2e4a43133e | ||
|  | bcf2ce757c | ||
|  | 263a734a0d | ||
|  | 7300fdf91c | ||
|  | 89e9086943 | ||
|  | e236d9e571 | ||
|  | 8794891599 | ||
|  | cd62a9bd6b | ||
|  | 3f0bd75011 | ||
|  | a711aed160 | ||
|  | cdb5a46145 | ||
|  | fc784f34e5 | ||
|  | b707292485 | ||
|  | 587fbe1f44 | ||
|  | 9173d14b10 | ||
|  | 3386c05e91 | ||
|  | a1eaf7a865 | ||
|  | 41eb32389d | ||
|  | f4369c0772 | 
							
								
								
									
										72
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										72
									
								
								HISTORY
									
									
									
									
									
								
							| @@ -210,3 +210,75 @@ Version 1.2.10 | ||||
| - Simplify cRecMenuSearchTimerEdit::GetSearchTimer | ||||
| - Fixed cRecMenuItemSelectDirectory::DrawValue | ||||
| - Some rework | ||||
|  | ||||
| Version 1.2.11 | ||||
|  | ||||
| - Fixed a segfault with graphicsmagick > 1.3.31 | ||||
| - Fixed a possible deadlock in detailview | ||||
| - Optical changes in cMenuSetupImageCache | ||||
|  | ||||
| Version 1.2.12 | ||||
|  | ||||
| - Fixed updating current time | ||||
| - Fixed updating current TimeBase | ||||
| - Diplay the current TimeBase throughout the whole timeline | ||||
|  | ||||
| Version 1.2.13 | ||||
|  | ||||
| - Revert "Diplay the current TimeBase throughout the whole timeline" | ||||
|  | ||||
| Version 1.2.14 | ||||
|  | ||||
| - Diplay the current TimeBase throughout the whole timeline | ||||
| - Can switch off and optimize diplay time in epggrid "displayMode == Vertical" | ||||
| - Fixed a error while changing a Theme | ||||
|  | ||||
| Version 1.2.15 | ||||
|  | ||||
| - Workaround for HWAccelerated OSD | ||||
|  | ||||
| Version 1.2.16 | ||||
|  | ||||
| - Fixed a timer changed message | ||||
| - Extend keys kFastRew, kFastFwd, kPrev, kNext for TimeJump | ||||
|   (if you use the numeric keys for "Jump to specific channel", | ||||
|   you can now use the keys kFastRew, kFastFwd, kPrev, kNext for TimeJump. | ||||
|   Note: if you use the permashift-plugin then the key kFastRew doesnt work for TimeJump) | ||||
| - Fixed a possible deadlook in cEPGView::cEPGView | ||||
| - Refactor Timeline | ||||
| - Refactor CutText in horizontal epgview | ||||
| - Optimize display "REC" sign in epgview | ||||
| - Separate "displayTime" for horizontal and vertical view | ||||
| - RecMenu "Timer Timeline" displays now sorted active timer | ||||
|  | ||||
| Version 1.2.17 | ||||
|  | ||||
| - Final fix for utf8 CutText | ||||
| - Fixed a remote timer problem | ||||
| - Add episode to manual timer | ||||
|  | ||||
| Version 1.3.0 | ||||
|  | ||||
| - last version with <VDR-2.3.1 compatibility | ||||
| - Fixed a possible seqfault in DisplayTimerConflict | ||||
| - Show numTimersToday in timeline | ||||
| - Fixed stopIndex in cRecMenu::JumpBegin | ||||
| - Fixed horizontal alignment in timeline | ||||
| - Fixed messages in DisplayTimerConflict | ||||
|  | ||||
| Version 1.3.1 | ||||
|  | ||||
| - Fixes for <VDR-2.3.1 compatibility | ||||
| - Fixed a segfault while starting tvguide | ||||
|  | ||||
| Version 1.3.2 | ||||
|  | ||||
| - Fixed display groupname in cChannelGroupGrid::DrawHorizontal | ||||
| - Center some channel logos | ||||
| - Add "Timer On/Off" to recmenu | ||||
| - Wrap title in detailview header | ||||
| - Optional deactivation of the timer confirmation messages | ||||
|  | ||||
| Version 1.3.3 | ||||
|  | ||||
| - Bugfix | ||||
|   | ||||
| @@ -130,9 +130,11 @@ int cChannelEpg::getY() { | ||||
|     return geoManager.statusHeaderHeight +  geoManager.timeLineHeight + num*geoManager.rowHeight; | ||||
| } | ||||
|  | ||||
| cGridElement *cChannelEpg::getActive() { | ||||
| cGridElement *cChannelEpg::getActive(bool last) { | ||||
|     cTimeManager t; | ||||
|     t.Now(); | ||||
|     if (last) | ||||
|         return grids.Last(); | ||||
|     for (cGridElement *grid = grids.First(); grid; grid = grids.Next(grid)) { | ||||
|         if (grid->Match(t.Get())) | ||||
|             return grid; | ||||
|   | ||||
| @@ -42,7 +42,7 @@ public: | ||||
|     int Stop()  { return timeManager->GetEnd(); }; | ||||
|     const char* Name() { return channel->Name(); }; | ||||
|     const cChannel *getChannel() {return channel;} | ||||
|     cGridElement *getActive(); | ||||
|     cGridElement *getActive(bool last = false); | ||||
|     cGridElement *getNext(cGridElement *activeGrid); | ||||
|     cGridElement *getPrev(cGridElement *activeGrid); | ||||
|     cGridElement *getNeighbor(cGridElement *activeGrid); | ||||
|   | ||||
| @@ -68,29 +68,28 @@ void cChannelGroupGrid::Draw(void) { | ||||
|  | ||||
| void cChannelGroupGrid::DrawVertical(tColor colorText, tColor colorTextBack) { | ||||
|     int textY = (Height() - fontManager.FontChannelGroups->Height()) / 2; | ||||
|     cString text = CutText(name, Width() - 4, fontManager.FontChannelGroups).c_str(); | ||||
|     cString text = cString::sprintf("%s", CutText(name, Width() - 4, fontManager.FontChannelGroups).c_str()); | ||||
|     int textWidth = fontManager.FontChannelGroups->Width(*text); | ||||
|     int x = (Width() - textWidth) / 2; | ||||
|     pixmap->DrawText(cPoint(x, textY), *text, colorText, colorTextBack, fontManager.FontChannelGroups); | ||||
| } | ||||
|  | ||||
| void cChannelGroupGrid::DrawHorizontal(tColor colorText, tColor colorTextBack) { | ||||
|     std::string nameUpper = name; | ||||
|     std::transform(nameUpper.begin(), nameUpper.end(),nameUpper.begin(), ::toupper); | ||||
|     int numChars = nameUpper.length(); | ||||
|     std::string groupName = name; | ||||
|     int numChars = groupName.length(); | ||||
|     int charHeight = fontManager.FontChannelGroupsHorizontal->Height(); | ||||
|     int textHeight = numChars * charHeight; | ||||
|     int y = 5; | ||||
|     if ((textHeight +5) < Height()) { | ||||
|     if ((textHeight + 5) < Height()) { | ||||
|         y = (Height() - textHeight) / 2; | ||||
|     } | ||||
|     for (int i=0; i < numChars; i++) { | ||||
|         if (((y + 2*charHeight) > Height()) && ((i+1)<numChars)) { | ||||
|     for (int i = 0; i < numChars; i++) { | ||||
|         if (((y + 2 * charHeight) > Height()) && ((i + 1) < numChars)) { | ||||
|             int x = (Width() - fontManager.FontChannelGroupsHorizontal->Width("...")) / 2; | ||||
|             pixmap->DrawText(cPoint(x, y), "...", colorText, colorTextBack, fontManager.FontChannelGroupsHorizontal); | ||||
|             break; | ||||
|         } | ||||
|         cString currentChar = cString::sprintf("%c", nameUpper.at(i)); | ||||
|         cString currentChar = cString::sprintf("%s", utf8_substr(groupName.c_str(), i, 1).c_str()); | ||||
|         int x = (Width() - fontManager.FontChannelGroupsHorizontal->Width(*currentChar)) / 2; | ||||
|         pixmap->DrawText(cPoint(x, y), *currentChar, colorText, colorTextBack, fontManager.FontChannelGroupsHorizontal); | ||||
|         y += fontManager.FontChannelGroupsHorizontal->Height(); | ||||
|   | ||||
							
								
								
									
										19
									
								
								config.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								config.c
									
									
									
									
									
								
							| @@ -2,6 +2,7 @@ | ||||
| #include "config.h" | ||||
|  | ||||
| cTVGuideConfig::cTVGuideConfig() { | ||||
|     useHWAccel = false; | ||||
|     debugImageLoading = 0; | ||||
|     showMainMenuEntry = 1; | ||||
|     replaceOriginalSchedule = 0; | ||||
| @@ -9,8 +10,8 @@ cTVGuideConfig::cTVGuideConfig() { | ||||
|     showTimeInGrid = 1; | ||||
|     channelCols = 5; | ||||
|     channelRows = 10; | ||||
|     displayTime = 160; | ||||
|     displayHorizontalTime = 160; | ||||
|     displayTime = 180; | ||||
|     displayHorizontalTime = 180; | ||||
|     displayStatusHeader = 1; | ||||
|     displayChannelGroups = 1; | ||||
|     displayTimeBase = 1; | ||||
| @@ -27,10 +28,14 @@ cTVGuideConfig::cTVGuideConfig() { | ||||
|     footerHeightPercent = 7; | ||||
|     stepMinutes = 30; | ||||
|     bigStepHours = 3; | ||||
|     bigStepHoursHorizontal = 3; | ||||
|     hugeStepHours = 24; | ||||
|     hugeStepHoursHorizontal = 24; | ||||
|     channelJumpMode = eNumJump; | ||||
|     jumpChannels = 0; | ||||
|     blueKeyMode = 2; | ||||
|     addSubtitleToTimer = 1; | ||||
|     timerMessage = 1; | ||||
|     closeOnSwitch = 1; | ||||
|     numkeyMode = 0; | ||||
|     useRemoteTimers = 0; | ||||
| @@ -95,6 +100,7 @@ cTVGuideConfig::cTVGuideConfig() { | ||||
|     FontRecMenuItemLargeDelta = 0; | ||||
|     timeFormat = 1; | ||||
|     useNopacityTheme = 1; | ||||
|     useNopacityThemeCurrent = -1; | ||||
|     themeIndex = -1; | ||||
|     themeIndexCurrent = -1; | ||||
|     themeName = ""; | ||||
| @@ -124,13 +130,14 @@ bool cTVGuideConfig::LoadTheme() { | ||||
|     //is correct theme already loaded? | ||||
|     if (nOpacityTheme.size() == 0) | ||||
|         nOpacityTheme = Setup.OSDTheme; | ||||
|     if ((themeIndex > -1) && (themeIndex == themeIndexCurrent)) { | ||||
|     if ((themeIndex > -1) && (themeIndex == themeIndexCurrent) && (useNopacityTheme == useNopacityThemeCurrent)) { | ||||
|         if (!nOpacityTheme.compare(Setup.OSDTheme)) { | ||||
|             return false; | ||||
|         } else { | ||||
|             nOpacityTheme = Setup.OSDTheme; | ||||
|         } | ||||
|     } | ||||
|     esyslog("tvguide: loading new Theme"); | ||||
|     //Load available Themes | ||||
|     cThemes themes; | ||||
|     themes.Load(*cString("tvguide")); | ||||
| @@ -167,6 +174,7 @@ bool cTVGuideConfig::LoadTheme() { | ||||
|         themeIndex = 0; | ||||
|  | ||||
|     themeIndexCurrent = themeIndex; | ||||
|     useNopacityThemeCurrent = useNopacityTheme; | ||||
|  | ||||
|     const char *themePath = themes.FileName(themeIndex); | ||||
|     if (access(themePath, F_OK) == 0) { | ||||
| @@ -240,6 +248,7 @@ cString cTVGuideConfig::checkSlashAtEnd(std::string path) { | ||||
| bool cTVGuideConfig::SetupParse(const char *Name, const char *Value) { | ||||
|     if      (strcmp(Name, "timeFormat") == 0)               timeFormat = atoi(Value); | ||||
|     else if (strcmp(Name, "debugImageLoading") == 0)        debugImageLoading = atoi(Value); | ||||
|     else if (strcmp(Name, "useHWAccel") == 0)               useHWAccel = atoi(Value); | ||||
|     else if (strcmp(Name, "showMainMenuEntry") == 0)        showMainMenuEntry = atoi(Value); | ||||
|     else if (strcmp(Name, "replaceOriginalSchedule") == 0)  replaceOriginalSchedule = atoi(Value); | ||||
|     else if (strcmp(Name, "useNopacityTheme") == 0)         useNopacityTheme = atoi(Value);    | ||||
| @@ -264,7 +273,9 @@ bool cTVGuideConfig::SetupParse(const char *Name, const char *Value) { | ||||
|     else if (strcmp(Name, "logoWidthRatio") == 0)           logoWidthRatio = atoi(Value); | ||||
|     else if (strcmp(Name, "logoHeightRatio") == 0)          logoHeightRatio = atoi(Value); | ||||
|     else if (strcmp(Name, "bigStepHours") == 0)             bigStepHours = atoi(Value); | ||||
|     else if (strcmp(Name, "bigStepHoursHorizontal") == 0)   bigStepHoursHorizontal = atoi(Value); | ||||
|     else if (strcmp(Name, "hugeStepHours") == 0)            hugeStepHours = atoi(Value); | ||||
|     else if (strcmp(Name, "hugeStepHoursHorizontal") == 0)  hugeStepHoursHorizontal = atoi(Value); | ||||
|     else if (strcmp(Name, "channelJumpMode") == 0)          channelJumpMode = atoi(Value); | ||||
|     else if (strcmp(Name, "blueKeyMode") == 0)              blueKeyMode = atoi(Value); | ||||
|     else if (strcmp(Name, "numkeyMode") == 0)               numkeyMode = atoi(Value); | ||||
| @@ -286,6 +297,8 @@ bool cTVGuideConfig::SetupParse(const char *Name, const char *Value) { | ||||
|     else if (strcmp(Name, "footerHeightPercent") == 0)      footerHeightPercent = atoi(Value); | ||||
|     else if (strcmp(Name, "instRecFolderMode") == 0)        instRecFolderMode = atoi(Value); | ||||
|     else if (strcmp(Name, "instRecFixedFolder") == 0)       instRecFixedFolder = Value; | ||||
|     else if (strcmp(Name, "addSubtitleToTimer") == 0)       addSubtitleToTimer = atoi(Value); | ||||
|     else if (strcmp(Name, "timerMessage") == 0)             timerMessage = atoi(Value); | ||||
|     else if (strcmp(Name, "favWhatsOnNow") == 0)            favWhatsOnNow = atoi(Value); | ||||
|     else if (strcmp(Name, "favWhatsOnNext") == 0)           favWhatsOnNext = atoi(Value); | ||||
|     else if (strcmp(Name, "favUseTime1") == 0)              favUseTime1 = atoi(Value); | ||||
|   | ||||
							
								
								
									
										14
									
								
								config.h
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								config.h
									
									
									
									
									
								
							| @@ -8,7 +8,7 @@ | ||||
| #include "fontmanager.h" | ||||
| #include "imagecache.h" | ||||
|  | ||||
| enum { | ||||
| enum eTimeFormat { | ||||
|     e12Hours, | ||||
|     e24Hours | ||||
| }; | ||||
| @@ -43,12 +43,19 @@ enum eInstRecFolderMode { | ||||
|     eFolderFixed | ||||
| }; | ||||
|  | ||||
| typedef enum { | ||||
|     addSubtitleNever = 0, | ||||
|     addSubtitleSmart, | ||||
|     addSubtitleAlways | ||||
| } addSubtitleToTimerMode; | ||||
|  | ||||
| class cTVGuideConfig { | ||||
|     private: | ||||
|         cString checkSlashAtEnd(std::string path); | ||||
|     public: | ||||
|         cTVGuideConfig(); | ||||
|         ~cTVGuideConfig(); | ||||
|         int useHWAccel; | ||||
|         int debugImageLoading; | ||||
|         int showMainMenuEntry; | ||||
|         int replaceOriginalSchedule; | ||||
| @@ -75,10 +82,14 @@ class cTVGuideConfig { | ||||
|         int footerHeightPercent; | ||||
|         int stepMinutes; | ||||
|         int bigStepHours; | ||||
|         int bigStepHoursHorizontal; | ||||
|         int hugeStepHours; | ||||
|         int hugeStepHoursHorizontal; | ||||
|         int channelJumpMode; | ||||
|         int jumpChannels; | ||||
|         int blueKeyMode; | ||||
|         int timerMessage; | ||||
|         int addSubtitleToTimer; | ||||
|         int closeOnSwitch; | ||||
|         int numkeyMode; | ||||
|         int useRemoteTimers; | ||||
| @@ -149,6 +160,7 @@ class cTVGuideConfig { | ||||
|         int FontRecMenuItemLargeDelta; | ||||
|         int timeFormat; | ||||
|         int useNopacityTheme; | ||||
| 	int useNopacityThemeCurrent; | ||||
|         int themeIndex; | ||||
|         int themeIndexCurrent; | ||||
|         cString themeName; | ||||
|   | ||||
| @@ -1,12 +1,12 @@ | ||||
| #include "detailview.h" | ||||
|  | ||||
| cDetailView::cDetailView(const cEvent *event, cFooter *footer) { | ||||
| cDetailView::cDetailView(const cEvent *event, cFooter *footer) : cThread("DetailView") { | ||||
|     this->event = event; | ||||
|     this->footer = footer; | ||||
| } | ||||
|  | ||||
| cDetailView::~cDetailView(void){ | ||||
|     Cancel(-1); | ||||
|     Cancel(3); | ||||
|     while (Active()) | ||||
|         cCondWait::SleepMs(10); | ||||
| #if VDRVERSNUM >= 20301 | ||||
|   | ||||
							
								
								
									
										67
									
								
								epggrid.c
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								epggrid.c
									
									
									
									
									
								
							| @@ -92,53 +92,52 @@ void cEpgGrid::SetSwitchTimer() { | ||||
|  | ||||
| void cEpgGrid::setText() { | ||||
|     if (config.displayMode == eVertical) { | ||||
|         cString strText; | ||||
|         strText = cString::sprintf("%s - %s:\n%s", *(event->GetTimeString()), *(event->GetEndTimeString()), event->Title()); | ||||
|         text->Set(*(strText), fontManager.FontGrid, geoManager.colWidth-2*borderWidth); | ||||
|         extText->Set(event->ShortText(), fontManager.FontGridSmall, geoManager.colWidth-2*borderWidth); | ||||
|     } else if (config.displayMode == eHorizontal) { | ||||
|         timeString = cString::sprintf("%s - %s", *(event->GetTimeString()), *(event->GetEndTimeString())); | ||||
|         text->Set(event->Title(), fontManager.FontGrid, geoManager.colWidth - 2 * borderWidth); | ||||
|         extText->Set(event->ShortText(), fontManager.FontGridSmall, geoManager.colWidth - 2 * borderWidth); | ||||
|     } | ||||
|     if (config.showTimeInGrid) { | ||||
|         timeString = cString::sprintf("%s - %s:", *(event->GetTimeString()), *(event->GetEndTimeString())); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void cEpgGrid::drawText() { | ||||
|     tColor colorText = (active)?theme.Color(clrFontActive):theme.Color(clrFont); | ||||
|     tColor colorText = (active) ? theme.Color(clrFontActive) : theme.Color(clrFont); | ||||
|     tColor colorTextBack; | ||||
|     if (config.style == eStyleFlat) | ||||
|         colorTextBack = color; | ||||
|     else if (config.style == eStyleGraphical) | ||||
|         colorTextBack = (active)?theme.Color(clrGridActiveFontBack):theme.Color(clrGridFontBack); | ||||
|         colorTextBack = (active) ? theme.Color(clrGridActiveFontBack) : theme.Color(clrGridFontBack); | ||||
|     else | ||||
|         colorTextBack = clrTransparent; | ||||
|     if (config.displayMode == eVertical) { | ||||
|         if (Height()/geoManager.minutePixel < 6) | ||||
|         if (Height() / geoManager.minutePixel < 6) | ||||
|             return; | ||||
|         int textHeight = fontManager.FontGrid->Height(); | ||||
|         int textHeightSmall = fontManager.FontGridSmall->Height(); | ||||
|         int textLines = text->Lines(); | ||||
|         for (int i=0; i<textLines; i++) { | ||||
|             pixmap->DrawText(cPoint(borderWidth, borderWidth + i*textHeight), text->GetLine(i), colorText, colorTextBack, fontManager.FontGrid); | ||||
|         int titleY = borderWidth; | ||||
|         if (config.showTimeInGrid) { // mit Zeitangabe im Grid | ||||
|             pixmap->DrawText(cPoint(borderWidth, borderWidth), *timeString, colorText, colorTextBack, fontManager.FontGridSmall); | ||||
|             titleY += textHeightSmall; | ||||
|         } | ||||
|         for (int i = 0; i < textLines; i++) { | ||||
|             pixmap->DrawText(cPoint(borderWidth, titleY + i * textHeight), text->GetLine(i), colorText, colorTextBack, fontManager.FontGrid); | ||||
|         } | ||||
|         int extTextLines = extText->Lines(); | ||||
|         int offset = (textLines+1)*textHeight - 0.5*textHeight; | ||||
|         textHeight = fontManager.FontGridSmall->Height(); | ||||
|         if ((Height()-textHeight-10) > offset) { | ||||
|             for (int i=0; i<extTextLines; i++) { | ||||
|                 pixmap->DrawText(cPoint(borderWidth, borderWidth + offset + i*textHeight), extText->GetLine(i), colorText, colorTextBack, fontManager.FontGridSmall); | ||||
|         int offset = titleY + (textLines + 0.5) * textHeight; | ||||
|         if ((Height() - textHeightSmall - 10) > offset) { | ||||
|             for (int i = 0; i < extTextLines; i++) { | ||||
|                 pixmap->DrawText(cPoint(borderWidth, offset + i * textHeightSmall), extText->GetLine(i), colorText, colorTextBack, fontManager.FontGridSmall); | ||||
|             } | ||||
|         } | ||||
|     } else if (config.displayMode == eHorizontal) { | ||||
|         if (Width()/geoManager.minutePixel < 10) { | ||||
|             int titleY = (geoManager.rowHeight - fontManager.FontGridHorizontal->Height())/2; | ||||
|             pixmap->DrawText(cPoint(borderWidth - 2, titleY), "...", colorText, colorTextBack, fontManager.FontGridHorizontal); | ||||
|             return; | ||||
|         } | ||||
|         cString strTitle = CutText(event->Title(), viewportHeight, fontManager.FontGridHorizontal).c_str(); | ||||
|         cString strTitle = CutText(event->Title(), viewportHeight - borderWidth, fontManager.FontGridHorizontal).c_str(); | ||||
|         int titleY = 0; | ||||
|         if (config.showTimeInGrid) { | ||||
|         if (config.showTimeInGrid) { // mit Zeitangabe im Grid | ||||
|             pixmap->DrawText(cPoint(borderWidth, borderWidth), *timeString, colorText, colorTextBack, fontManager.FontGridHorizontalSmall); | ||||
|             titleY = fontManager.FontGridHorizontalSmall->Height() + (geoManager.rowHeight - fontManager.FontGridHorizontalSmall->Height() - fontManager.FontGridHorizontal->Height())/2; | ||||
|             titleY = fontManager.FontGridHorizontalSmall->Height() + (geoManager.rowHeight - fontManager.FontGridHorizontalSmall->Height() - fontManager.FontGridHorizontal->Height()) / 2; | ||||
|         } else { | ||||
|             titleY = (geoManager.rowHeight - fontManager.FontGridHorizontal->Height())/2; | ||||
|             titleY = (geoManager.rowHeight - fontManager.FontGridHorizontal->Height()) / 2; | ||||
|         } | ||||
|         pixmap->DrawText(cPoint(borderWidth, titleY), *strTitle, colorText, colorTextBack, fontManager.FontGridHorizontal); | ||||
|     } | ||||
| @@ -170,13 +169,17 @@ void cEpgGrid::drawText() { | ||||
|  | ||||
| void cEpgGrid::drawIcon(cString iconText, tColor color) { | ||||
|  | ||||
|     const cFont *font = (config.displayMode == eVertical) | ||||
|                         ?fontManager.FontGrid | ||||
|                         :fontManager.FontGridHorizontalSmall; | ||||
|     int textWidth = font->Width(*iconText)+2*borderWidth; | ||||
|     int textHeight = font->Height()+10; | ||||
|     pixmap->DrawRectangle( cRect(Width() - textWidth - borderWidth, Height() - textHeight - borderWidth, textWidth, textHeight), color); | ||||
|     pixmap->DrawText(cPoint(Width() - textWidth, Height() - textHeight - borderWidth/2), *iconText, theme.Color(clrFont), color, font); | ||||
|     const cFont *font = (config.displayMode == eVertical) ? fontManager.FontGrid : fontManager.FontGridHorizontalSmall; | ||||
|     int textWidth = font->Width(*iconText) + 2 * borderWidth; | ||||
|     int textHeight = font->Height() + 10; | ||||
|     if ((config.displayMode == eHorizontal) && ((Width() - 2 * textWidth) < 0)) | ||||
|         pixmap->DrawEllipse( cRect(Width() - textHeight / 2 - borderWidth, Height() - textHeight - borderWidth, textHeight / 2, textHeight / 2), color); | ||||
|     else if ((config.displayMode == eVertical) && ((Height() - 2 * textHeight) < 0)) | ||||
|         pixmap->DrawEllipse( cRect(Width() - textHeight / 2 - borderWidth, borderWidth, textHeight / 2, textHeight / 2), color); | ||||
|     else { | ||||
|         pixmap->DrawEllipse( cRect(Width() - textWidth - borderWidth, Height() - textHeight - borderWidth, textWidth, textHeight), color); | ||||
|         pixmap->DrawText(cPoint(Width() - textWidth, Height() - textHeight - borderWidth / 2), *iconText, theme.Color(clrFont), clrTransparent, font); | ||||
|     } | ||||
| } | ||||
|  | ||||
| cString cEpgGrid::getTimeString(void) { | ||||
|   | ||||
| @@ -35,7 +35,7 @@ bool cGeometryManager::SetGeometry(int osdWidth, int osdHeight, bool force) { | ||||
|     if (config.displayMode == eVertical) { | ||||
|         colWidth = (osdWidth - timeLineWidth) / config.channelCols; | ||||
|         rowHeight = 0; | ||||
|         minutePixel = (osdHeight - statusHeaderHeight - channelGroupsHeight - channelHeaderHeight - footerHeight) / config.displayTime; | ||||
|         minutePixel = (double)(osdHeight - statusHeaderHeight - channelGroupsHeight - channelHeaderHeight - footerHeight) / (double)config.displayTime; | ||||
|         channelLogoWidth = colWidth; | ||||
|         channelLogoHeight = channelHeaderHeight; | ||||
|         logoWidth = channelLogoWidth / 2 - 15; | ||||
| @@ -49,7 +49,7 @@ bool cGeometryManager::SetGeometry(int osdWidth, int osdHeight, bool force) { | ||||
|     } else if (config.displayMode == eHorizontal) { | ||||
|         colWidth = 0; | ||||
|         rowHeight = (osdHeight - statusHeaderHeight - timeLineHeight - footerHeight) / config.channelRows; | ||||
|         minutePixel = (osdWidth - channelHeaderWidth - channelGroupsWidth) / config.displayHorizontalTime; | ||||
|         minutePixel = (double)(osdWidth - channelHeaderWidth - channelGroupsWidth) / (double)config.displayHorizontalTime; | ||||
|         channelLogoWidth = channelHeaderWidth; | ||||
|         channelLogoHeight = rowHeight; | ||||
|         logoWidth = channelLogoHeight * config.logoWidthRatio / config.logoHeightRatio; | ||||
|   | ||||
| @@ -24,7 +24,7 @@ public: | ||||
|     //Content | ||||
|     int colWidth; | ||||
|     int rowHeight; | ||||
|     int minutePixel; | ||||
|     double minutePixel; | ||||
|     int channelLogoWidth; | ||||
|     int channelLogoHeight; | ||||
|     //Timeline | ||||
|   | ||||
| @@ -11,7 +11,6 @@ | ||||
| using namespace Magick; | ||||
|  | ||||
| cImageLoader::cImageLoader() { | ||||
|     InitializeMagick(NULL); | ||||
| } | ||||
|  | ||||
| cImageLoader::~cImageLoader() { | ||||
|   | ||||
| @@ -5,7 +5,6 @@ | ||||
| #include "imagescaler.h" | ||||
|  | ||||
| cImageMagickWrapper::cImageMagickWrapper() { | ||||
|     InitializeMagick(NULL); | ||||
| } | ||||
|  | ||||
| cImageMagickWrapper::~cImageMagickWrapper() { | ||||
|   | ||||
| @@ -7,7 +7,7 @@ cOsdManager::cOsdManager(void) { | ||||
| bool cOsdManager::setOsd() { | ||||
|     osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop()); | ||||
|     if (osd) { | ||||
|         tArea Area = { 0, 0, cOsd::OsdWidth(), cOsd::OsdHeight(),  32 }; | ||||
|         tArea Area = { 0, 0, cOsd::OsdWidth() - 1, cOsd::OsdHeight() - 1,  32 }; | ||||
|         if (osd->SetAreas(&Area, 1) == oeOk) {   | ||||
|             return true; | ||||
|         } | ||||
|   | ||||
							
								
								
									
										53
									
								
								po/ca_ES.po
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								po/ca_ES.po
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: vdr-tvguide 0.0.1\n" | ||||
| "Report-Msgid-Bugs-To: <see README>\n" | ||||
| "POT-Creation-Date: 2019-04-22 14:34+0200\n" | ||||
| "POT-Creation-Date: 2020-08-04 14:15+0200\n" | ||||
| "PO-Revision-Date: 2013-09-21 17:49+0200\n" | ||||
| "Last-Translator: My friend <Sampep> Thanks David <Gabychan> <gbonich@gmail.com>\n" | ||||
| "Language-Team: \n" | ||||
| @@ -25,7 +25,7 @@ msgid "min" | ||||
| msgstr "min" | ||||
|  | ||||
| msgid "Reruns of " | ||||
| msgstr "" | ||||
| msgstr "Reemissions " | ||||
|  | ||||
| msgid "No reruns found" | ||||
| msgstr "" | ||||
| @@ -57,6 +57,9 @@ msgstr "" | ||||
| msgid "images" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "tvguide: RemoteTimerModifications failed" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "root video folder" | ||||
| msgstr "Directori principal per a vídeo" | ||||
|  | ||||
| @@ -99,21 +102,18 @@ msgstr "" | ||||
| msgid "recordings done" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "What's on now" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "What's on next" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Instant Record" | ||||
| msgstr "Enregistra a l'instant" | ||||
|  | ||||
| msgid "Delete Timer" | ||||
| msgstr "Esborra temporitzador" | ||||
| msgid "Timer On/Off" | ||||
| msgstr "Temporitzador On/Off" | ||||
|  | ||||
| msgid "Edit Timer" | ||||
| msgstr "Edita temporitzador" | ||||
|  | ||||
| msgid "Delete Timer" | ||||
| msgstr "Esborra temporitzador" | ||||
|  | ||||
| msgid "Timer Timeline" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -144,6 +144,9 @@ msgstr "Cerca a les gravacions" | ||||
| msgid "Set Folder for" | ||||
| msgstr "Programa carpeta per" | ||||
|  | ||||
| msgid "Timer changed" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Timer created" | ||||
| msgstr "Temporitzador creat" | ||||
|  | ||||
| @@ -567,6 +570,12 @@ msgstr "No s'han trobat gravacions per" | ||||
| msgid "No Favorites available" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "What's on now" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "What's on next" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "whole term must appear" | ||||
| msgstr "expressió completa" | ||||
|  | ||||
| @@ -675,6 +684,9 @@ msgstr "si existeix" | ||||
| msgid "always" | ||||
| msgstr "sempre" | ||||
|  | ||||
| msgid "Use workaround for HWAccelerated OSD" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Show Main Menu Entry" | ||||
| msgstr "Mostra entrada del menú principal" | ||||
|  | ||||
| @@ -751,7 +763,7 @@ msgid "Display time in EPG Grids" | ||||
| msgstr "Mostra el temps a l'EPG" | ||||
|  | ||||
| msgid "Height of Headers (Status Header and EPG View, Perc. of osd height)" | ||||
| msgstr "" | ||||
| msgstr "Alçada capçalera d'estat (% alçada OSD)" | ||||
|  | ||||
| msgid "Height of Footer (Perc. of osd height)" | ||||
| msgstr "" | ||||
| @@ -882,15 +894,30 @@ msgstr "" | ||||
| msgid "Use fixed folder" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Folder for instant Recordings" | ||||
| msgid "smart" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Instant recording:" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Folder for instant Recordings" | ||||
| msgstr "Utilitza carpetes per gravacions a l'instant" | ||||
|  | ||||
| msgid "Folder" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Add episode to manual timers" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Use Remotetimers" | ||||
| msgstr "Utilitza temporitzadors remots" | ||||
|  | ||||
| msgid "Show timer confirmation messages" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Favorites:" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Limit channels in favorites" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -976,7 +1003,7 @@ msgid "EPG Info" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Reruns" | ||||
| msgstr "" | ||||
| msgstr "Reemissions" | ||||
|  | ||||
| msgid "Recording Information" | ||||
| msgstr "" | ||||
|   | ||||
							
								
								
									
										47
									
								
								po/de_DE.po
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								po/de_DE.po
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: vdr-tvguide 0.0.1\n" | ||||
| "Report-Msgid-Bugs-To: <see README>\n" | ||||
| "POT-Creation-Date: 2019-04-22 14:34+0200\n" | ||||
| "POT-Creation-Date: 2020-08-04 14:15+0200\n" | ||||
| "PO-Revision-Date: 2012-08-25 17:49+0200\n" | ||||
| "Last-Translator: Horst\n" | ||||
| "Language-Team: \n" | ||||
| @@ -54,6 +54,9 @@ msgstr "Favoriten" | ||||
| msgid "images" | ||||
| msgstr "Bilder" | ||||
|  | ||||
| msgid "tvguide: RemoteTimerModifications failed" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "root video folder" | ||||
| msgstr "Video Hauptverzeichnis" | ||||
|  | ||||
| @@ -96,21 +99,18 @@ msgstr "aktive Timer" | ||||
| msgid "recordings done" | ||||
| msgstr "erledigte Aufnahmen" | ||||
|  | ||||
| msgid "What's on now" | ||||
| msgstr "Was läuft jetzt?" | ||||
|  | ||||
| msgid "What's on next" | ||||
| msgstr "Was läuft als nächstes?" | ||||
|  | ||||
| msgid "Instant Record" | ||||
| msgstr "Aufnahme" | ||||
|  | ||||
| msgid "Delete Timer" | ||||
| msgstr "Timer löschen" | ||||
| msgid "Timer On/Off" | ||||
| msgstr "Timer Ein/Aus" | ||||
|  | ||||
| msgid "Edit Timer" | ||||
| msgstr "Timer bearbeiten" | ||||
|  | ||||
| msgid "Delete Timer" | ||||
| msgstr "Timer löschen" | ||||
|  | ||||
| msgid "Timer Timeline" | ||||
| msgstr "Timer Tagesübersicht" | ||||
|  | ||||
| @@ -141,6 +141,9 @@ msgstr "In Aufnahmen suchen" | ||||
| msgid "Set Folder for" | ||||
| msgstr "Verzeichnis festlegen für" | ||||
|  | ||||
| msgid "Timer changed" | ||||
| msgstr "Timer geändert" | ||||
|  | ||||
| msgid "Timer created" | ||||
| msgstr "Timer angelegt" | ||||
|  | ||||
| @@ -564,6 +567,12 @@ msgstr "Keine Aufnahmen gefunden für" | ||||
| msgid "No Favorites available" | ||||
| msgstr "Keine Favoriten verfügbar" | ||||
|  | ||||
| msgid "What's on now" | ||||
| msgstr "Was läuft jetzt?" | ||||
|  | ||||
| msgid "What's on next" | ||||
| msgstr "Was läuft als nächstes?" | ||||
|  | ||||
| msgid "whole term must appear" | ||||
| msgstr "vollständiger Ausdruck" | ||||
|  | ||||
| @@ -672,6 +681,9 @@ msgstr "falls vorhanden" | ||||
| msgid "always" | ||||
| msgstr "immer" | ||||
|  | ||||
| msgid "Use workaround for HWAccelerated OSD" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Show Main Menu Entry" | ||||
| msgstr "Hauptmenüeintrag anzeigen" | ||||
|  | ||||
| @@ -879,15 +891,30 @@ msgstr "Verzeichnis aus Liste auswählen" | ||||
| msgid "Use fixed folder" | ||||
| msgstr "Festes Verzeichnis benutzen" | ||||
|  | ||||
| msgid "smart" | ||||
| msgstr "intelligent" | ||||
|  | ||||
| msgid "Instant recording:" | ||||
| msgstr "Sofortaufnahmen:" | ||||
|  | ||||
| msgid "Folder for instant Recordings" | ||||
| msgstr "Verzeichnis für Sofortaufnahmen" | ||||
|  | ||||
| msgid "Folder" | ||||
| msgstr "Verzeichnis" | ||||
|  | ||||
| msgid "Add episode to manual timers" | ||||
| msgstr "Untertitel in manuellen Timern" | ||||
|  | ||||
| msgid "Use Remotetimers" | ||||
| msgstr "RemoteTimers benutzen" | ||||
|  | ||||
| msgid "Show timer confirmation messages" | ||||
| msgstr "Timer Bestätigungsmeldungen anzeigen" | ||||
|  | ||||
| msgid "Favorites:" | ||||
| msgstr "Favoriten:" | ||||
|  | ||||
| msgid "Limit channels in favorites" | ||||
| msgstr "Kanäle in Favoriten beschränken" | ||||
|  | ||||
| @@ -976,7 +1003,7 @@ msgid "Reruns" | ||||
| msgstr "Wiederholungen" | ||||
|  | ||||
| msgid "Recording Information" | ||||
| msgstr "" | ||||
| msgstr "Aufnahme Information" | ||||
|  | ||||
| msgid "Image Galery" | ||||
| msgstr "Bildergalerie" | ||||
|   | ||||
							
								
								
									
										45
									
								
								po/it_IT.po
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								po/it_IT.po
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: vdr-tvguide 0.0.1\n" | ||||
| "Report-Msgid-Bugs-To: <see README>\n" | ||||
| "POT-Creation-Date: 2019-04-22 14:34+0200\n" | ||||
| "POT-Creation-Date: 2020-08-04 14:15+0200\n" | ||||
| "PO-Revision-Date: 2012-08-25 17:49+0200\n" | ||||
| "Last-Translator: fiveten_59\n" | ||||
| "Language-Team: \n" | ||||
| @@ -54,6 +54,9 @@ msgstr "Favoriti" | ||||
| msgid "images" | ||||
| msgstr "Immagini" | ||||
|  | ||||
| msgid "tvguide: RemoteTimerModifications failed" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "root video folder" | ||||
| msgstr "cartella video di root" | ||||
|  | ||||
| @@ -96,21 +99,18 @@ msgstr "Timers attivi" | ||||
| msgid "recordings done" | ||||
| msgstr "registrazione eseguita" | ||||
|  | ||||
| msgid "What's on now" | ||||
| msgstr "Was läuft jetzt?" | ||||
|  | ||||
| msgid "What's on next" | ||||
| msgstr "Was läuft als nächstes?" | ||||
|  | ||||
| msgid "Instant Record" | ||||
| msgstr "Registrazione immediata" | ||||
|  | ||||
| msgid "Delete Timer" | ||||
| msgstr "Cancella il Timer" | ||||
| msgid "Timer On/Off" | ||||
| msgstr "Timer On/Off" | ||||
|  | ||||
| msgid "Edit Timer" | ||||
| msgstr "Edita il Timer" | ||||
|  | ||||
| msgid "Delete Timer" | ||||
| msgstr "Cancella il Timer" | ||||
|  | ||||
| msgid "Timer Timeline" | ||||
| msgstr "Scadenza del Timer" | ||||
|  | ||||
| @@ -141,6 +141,9 @@ msgstr "Cerca nelle registrazioni" | ||||
| msgid "Set Folder for" | ||||
| msgstr "Crea cartella per" | ||||
|  | ||||
| msgid "Timer changed" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Timer created" | ||||
| msgstr "Timer creato" | ||||
|  | ||||
| @@ -564,6 +567,12 @@ msgstr "Nessuna registrazione trovata per" | ||||
| msgid "No Favorites available" | ||||
| msgstr "Nessun Favoriti disponibile" | ||||
|  | ||||
| msgid "What's on now" | ||||
| msgstr "Was läuft jetzt?" | ||||
|  | ||||
| msgid "What's on next" | ||||
| msgstr "Was läuft als nächstes?" | ||||
|  | ||||
| msgid "whole term must appear" | ||||
| msgstr "vollständiger Ausdruck" | ||||
|  | ||||
| @@ -672,6 +681,9 @@ msgstr "se esiste" | ||||
| msgid "always" | ||||
| msgstr "sempre" | ||||
|  | ||||
| msgid "Use workaround for HWAccelerated OSD" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Show Main Menu Entry" | ||||
| msgstr "Hauptmenüeintrag anzeigen" | ||||
|  | ||||
| @@ -879,15 +891,30 @@ msgstr "Scegli dall'elenco cartelle" | ||||
| msgid "Use fixed folder" | ||||
| msgstr "Usa cartella fissa" | ||||
|  | ||||
| msgid "smart" | ||||
| msgstr "intelligente" | ||||
|  | ||||
| msgid "Instant recording:" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Folder for instant Recordings" | ||||
| msgstr "Cartella per la registrazione immediata" | ||||
|  | ||||
| msgid "Folder" | ||||
| msgstr "Cartella" | ||||
|  | ||||
| msgid "Add episode to manual timers" | ||||
| msgstr "Aggiungi episodi ai timer manuali" | ||||
|  | ||||
| msgid "Use Remotetimers" | ||||
| msgstr "Usa Remotetimers" | ||||
|  | ||||
| msgid "Show timer confirmation messages" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Favorites:" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Limit channels in favorites" | ||||
| msgstr "Limite dei canali nei favoriti" | ||||
|  | ||||
|   | ||||
							
								
								
									
										55
									
								
								po/ru_RU.po
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								po/ru_RU.po
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: vdr-tvguide 1.0.0\n" | ||||
| "Report-Msgid-Bugs-To: <see README>\n" | ||||
| "POT-Creation-Date: 2019-04-22 14:34+0200\n" | ||||
| "POT-Creation-Date: 2020-08-04 14:15+0200\n" | ||||
| "PO-Revision-Date: 2013-09-25 17:49+0400\n" | ||||
| "Last-Translator: AmiD, ilya\n" | ||||
| "Language-Team: Russia-Cherepovets(wm.amid@gmail.com)\n" | ||||
| @@ -22,7 +22,7 @@ msgid "min" | ||||
| msgstr "мин" | ||||
|  | ||||
| msgid "Reruns of " | ||||
| msgstr "" | ||||
| msgstr "ПОВТОРЫ ЭТОЙ " | ||||
|  | ||||
| msgid "No reruns found" | ||||
| msgstr "" | ||||
| @@ -54,6 +54,9 @@ msgstr "" | ||||
| msgid "images" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "tvguide: RemoteTimerModifications failed" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "root video folder" | ||||
| msgstr "Главная видео директория" | ||||
|  | ||||
| @@ -96,21 +99,18 @@ msgstr "" | ||||
| msgid "recordings done" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "What's on now" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "What's on next" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Instant Record" | ||||
| msgstr "Записать" | ||||
|  | ||||
| msgid "Delete Timer" | ||||
| msgstr "Удалить таймер" | ||||
| msgid "Timer On/Off" | ||||
| msgstr "таймер Вкл/Выкл" | ||||
|  | ||||
| msgid "Edit Timer" | ||||
| msgstr "Редактировать таймер" | ||||
|  | ||||
| msgid "Delete Timer" | ||||
| msgstr "Удалить таймер" | ||||
|  | ||||
| msgid "Timer Timeline" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -141,6 +141,9 @@ msgstr "Искать в записях" | ||||
| msgid "Set Folder for" | ||||
| msgstr "Укажите каталог для" | ||||
|  | ||||
| msgid "Timer changed" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Timer created" | ||||
| msgstr "Таймер создан" | ||||
|  | ||||
| @@ -295,7 +298,7 @@ msgid "No Search Timers Configured" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Configure Search Timer Options" | ||||
| msgstr "" | ||||
| msgstr "Настроить параметры таймера" | ||||
|  | ||||
| msgid "Save Search Timer" | ||||
| msgstr "" | ||||
| @@ -564,6 +567,12 @@ msgstr "Не найдено записей:" | ||||
| msgid "No Favorites available" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "What's on now" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "What's on next" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "whole term must appear" | ||||
| msgstr "фраза" | ||||
|  | ||||
| @@ -672,6 +681,9 @@ msgstr "если существует" | ||||
| msgid "always" | ||||
| msgstr "всегда" | ||||
|  | ||||
| msgid "Use workaround for HWAccelerated OSD" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Show Main Menu Entry" | ||||
| msgstr "Показывать пункт в главном меню" | ||||
|  | ||||
| @@ -748,7 +760,7 @@ msgid "Display time in EPG Grids" | ||||
| msgstr "Показывать время в сетке EPG" | ||||
|  | ||||
| msgid "Height of Headers (Status Header and EPG View, Perc. of osd height)" | ||||
| msgstr "" | ||||
| msgstr "Высота верхней панели (% от высоты OSD)" | ||||
|  | ||||
| msgid "Height of Footer (Perc. of osd height)" | ||||
| msgstr "" | ||||
| @@ -879,15 +891,30 @@ msgstr "" | ||||
| msgid "Use fixed folder" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Folder for instant Recordings" | ||||
| msgid "smart" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Instant recording:" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Folder for instant Recordings" | ||||
| msgstr "Использовать директории для быстрой записи" | ||||
|  | ||||
| msgid "Folder" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Add episode to manual timers" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Use Remotetimers" | ||||
| msgstr "RemoteTimers benutzen" | ||||
|  | ||||
| msgid "Show timer confirmation messages" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Favorites:" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Limit channels in favorites" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -973,7 +1000,7 @@ msgid "EPG Info" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Reruns" | ||||
| msgstr "" | ||||
| msgstr "ПОВТОРЫ" | ||||
|  | ||||
| msgid "Recording Information" | ||||
| msgstr "" | ||||
|   | ||||
							
								
								
									
										53
									
								
								po/sk_SK.po
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								po/sk_SK.po
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: vdr-tvguide 1.1.0\n" | ||||
| "Report-Msgid-Bugs-To: <see README>\n" | ||||
| "POT-Creation-Date: 2019-04-22 14:34+0200\n" | ||||
| "POT-Creation-Date: 2020-08-04 14:15+0200\n" | ||||
| "PO-Revision-Date: 2013-09-15 00:12+0100\n" | ||||
| "Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n" | ||||
| "Language-Team: \n" | ||||
| @@ -22,7 +22,7 @@ msgid "min" | ||||
| msgstr "min" | ||||
|  | ||||
| msgid "Reruns of " | ||||
| msgstr "" | ||||
| msgstr "Repr<EFBFBD>za tohto " | ||||
|  | ||||
| msgid "No reruns found" | ||||
| msgstr "" | ||||
| @@ -54,6 +54,9 @@ msgstr "" | ||||
| msgid "images" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "tvguide: RemoteTimerModifications failed" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "root video folder" | ||||
| msgstr "Hlavn<76> video adres<65>r" | ||||
|  | ||||
| @@ -96,21 +99,18 @@ msgstr "" | ||||
| msgid "recordings done" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "What's on now" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "What's on next" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Instant Record" | ||||
| msgstr "Okam<61>ite nahra<72>" | ||||
|  | ||||
| msgid "Delete Timer" | ||||
| msgstr "Vymaza<EFBFBD> pl<70>n nahr<68>vania" | ||||
| msgid "Timer On/Off" | ||||
| msgstr "Zap./Vyp. pl<70>n nahr<68>vania" | ||||
|  | ||||
| msgid "Edit Timer" | ||||
| msgstr "Upravi<76> pl<70>n nahr<68>vania" | ||||
|  | ||||
| msgid "Delete Timer" | ||||
| msgstr "Vymaza<7A> pl<70>n nahr<68>vania" | ||||
|  | ||||
| msgid "Timer Timeline" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -141,6 +141,9 @@ msgstr "Vyh | ||||
| msgid "Set Folder for" | ||||
| msgstr "Nastavi<76> adres<65>r pre" | ||||
|  | ||||
| msgid "Timer changed" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Timer created" | ||||
| msgstr "Pl<50>n vytvoren<65>" | ||||
|  | ||||
| @@ -564,6 +567,12 @@ msgstr "Nena | ||||
| msgid "No Favorites available" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "What's on now" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "What's on next" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "whole term must appear" | ||||
| msgstr "kompletn<74> v<>raz" | ||||
|  | ||||
| @@ -672,6 +681,9 @@ msgstr "ak s | ||||
| msgid "always" | ||||
| msgstr "v<>dy" | ||||
|  | ||||
| msgid "Use workaround for HWAccelerated OSD" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Show Main Menu Entry" | ||||
| msgstr "Zobrazi<7A> v hlavnom menu" | ||||
|  | ||||
| @@ -748,7 +760,7 @@ msgid "Display time in EPG Grids" | ||||
| msgstr "Zobrazi<7A> <20>as v EPG mrie<69>ke" | ||||
|  | ||||
| msgid "Height of Headers (Status Header and EPG View, Perc. of osd height)" | ||||
| msgstr "" | ||||
| msgstr "V<EFBFBD><EFBFBD>ka stavovej hlavi<76>ky (% z OSD v<><76>ky)" | ||||
|  | ||||
| msgid "Height of Footer (Perc. of osd height)" | ||||
| msgstr "" | ||||
| @@ -879,15 +891,30 @@ msgstr "" | ||||
| msgid "Use fixed folder" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Folder for instant Recordings" | ||||
| msgid "smart" | ||||
| msgstr "chytr<74>" | ||||
|  | ||||
| msgid "Instant recording:" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Folder for instant Recordings" | ||||
| msgstr "Pou<6F>i<EFBFBD> adres<65>re pre okam<61>it<69> nahr<68>vky" | ||||
|  | ||||
| msgid "Folder" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Add episode to manual timers" | ||||
| msgstr "Prida<64> epiz<69>dy do ru<72>n<EFBFBD>ho <20>asova<76>a" | ||||
|  | ||||
| msgid "Use Remotetimers" | ||||
| msgstr "Pou<6F>i<EFBFBD> vzdialen<65> pl<70>nova<76>" | ||||
|  | ||||
| msgid "Show timer confirmation messages" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Favorites:" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Limit channels in favorites" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -973,7 +1000,7 @@ msgid "EPG Info" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Reruns" | ||||
| msgstr "" | ||||
| msgstr "Repr<EFBFBD>za" | ||||
|  | ||||
| msgid "Recording Information" | ||||
| msgstr "" | ||||
|   | ||||
							
								
								
									
										135
									
								
								recmanager.c
									
									
									
									
									
								
							
							
						
						
									
										135
									
								
								recmanager.c
									
									
									
									
									
								
							| @@ -96,10 +96,11 @@ cTimer *cRecManager::createTimer(const cEvent *event, std::string path) { | ||||
| cTimer *cRecManager::createLocalTimer(const cEvent *event, std::string path) { | ||||
|     cTimer *timer = new cTimer(event); | ||||
| #if VDRVERSNUM >= 20301 | ||||
|     if (Setup.SVDRPPeering && *Setup.SVDRPDefaultHost) | ||||
|         ((cTimer*)timer)->SetRemote(Setup.SVDRPDefaultHost); | ||||
|     LOCK_TIMERS_WRITE; | ||||
|     cTimers* timers = Timers; | ||||
|     timers->SetExplicitModify(); | ||||
|     if (Setup.SVDRPPeering && *Setup.SVDRPDefaultHost) | ||||
|         timer->SetRemote(Setup.SVDRPDefaultHost); | ||||
| #else | ||||
|     cTimers* timers = &Timers; | ||||
| #endif | ||||
| @@ -115,12 +116,21 @@ cTimer *cRecManager::createLocalTimer(const cEvent *event, std::string path) { | ||||
|         timer = t; | ||||
|         isyslog("timer %s reactivated", *t->ToDescr()); | ||||
|     } else { | ||||
|         SetTimerPath(timer, event, path); | ||||
|         timers->Add(timer); | ||||
|         timers->SetModified(); | ||||
| #if VDRVERSNUM >= 20301 | ||||
|         if (!HandleRemoteTimerModifications(timer)) { | ||||
|            timers->Del(timer); | ||||
|            esyslog(tr("tvguide: RemoteTimerModifications failed")); | ||||
|         } else { | ||||
|            isyslog("timer %s added (active)", *timer->ToDescr()); | ||||
|         } | ||||
| #else | ||||
|         isyslog("timer %s added (active)", *timer->ToDescr()); | ||||
| #endif | ||||
|     } | ||||
|     SetTimerPath(timer, event, path); | ||||
|     timers->SetModified(); | ||||
|     return timer; | ||||
|     return timers->GetTimer(timer); | ||||
| } | ||||
|  | ||||
| cTimer *cRecManager::createRemoteTimer(const cEvent *event, std::string path) { | ||||
| @@ -165,31 +175,29 @@ void cRecManager::SetTimerPath(cTimer *timer, const cEvent *event, std::string p | ||||
|         return; | ||||
|     } | ||||
|     //Set choosen path | ||||
|     bool addSubtitle = false; | ||||
|     if (!isempty(event->ShortText())) { // add subtitle if present | ||||
|         addSubtitle = (config.addSubtitleToTimer != addSubtitleNever); | ||||
|         if (config.addSubtitleToTimer == addSubtitleSmart) | ||||
|             if (event->Duration() > 80 * 60) | ||||
|                 addSubtitle = false; | ||||
|     } | ||||
|     cString newFileName; | ||||
|     if (path.size() > 0) { | ||||
|         std::replace(path.begin(), path.end(), '/', '~'); | ||||
|         newFileName = cString::sprintf("%s~%s", path.c_str(), timer->File()); | ||||
|         if (addSubtitle) | ||||
|            newFileName = cString::sprintf("%s~%s~%s", path.c_str(), event->Title(), event->ShortText()); | ||||
|         else | ||||
|            newFileName = cString::sprintf("%s~%s", path.c_str(), timer->File()); | ||||
|     } else { | ||||
|         newFileName = event->Title(); | ||||
|         if (addSubtitle) | ||||
|            newFileName = cString::sprintf("%s~%s", event->Title(), event->ShortText()); | ||||
|         else | ||||
|            newFileName = event->Title(); | ||||
|     } | ||||
|     timer->SetFile(*newFileName); | ||||
| } | ||||
|  | ||||
| void cRecManager::DeleteTimer(int timerID) { | ||||
|     const cTimer *t; | ||||
| #if VDRVERSNUM >= 20301 | ||||
|     { | ||||
|     LOCK_TIMERS_READ; | ||||
|     t = Timers->Get(timerID); | ||||
|     } | ||||
| #else | ||||
|     t = Timers.Get(timerID); | ||||
| #endif | ||||
|     if (!t) | ||||
|         return; | ||||
|     DeleteTimer(t); | ||||
| } | ||||
|  | ||||
| void cRecManager::DeleteTimer(const cEvent *event) { | ||||
|     if (!event) | ||||
|         return; | ||||
| @@ -219,6 +227,12 @@ void cRecManager::DeleteTimer(const cTimer *timer) { | ||||
| #if VDRVERSNUM >= 20301 | ||||
|     LOCK_TIMERS_WRITE; | ||||
|     cTimers* timers = Timers; | ||||
|     if (timer && timer->Remote() && !timer->Recording()) { | ||||
|        if (HandleRemoteTimerModifications(NULL, (cTimer*)timer)) { | ||||
|           timers->Del((cTimer*)timer); | ||||
|        } | ||||
|        timers->SetModified(); | ||||
|     } | ||||
|     cTimer* t = timers->GetTimer(timer); | ||||
| #else | ||||
|     cTimers* timers = &Timers; | ||||
| @@ -253,36 +267,67 @@ void cRecManager::DeleteRemoteTimer(const cEvent *event) { | ||||
|     } | ||||
| } | ||||
|  | ||||
| void cRecManager::SaveTimer(const cTimer *t, cTimer newTimerSettings) { | ||||
| void cRecManager::OnOffTimer(const cEvent *event) { | ||||
|     const cTimer *t; | ||||
| #if VDRVERSNUM >= 20301 | ||||
|     { | ||||
|     LOCK_TIMERS_READ; | ||||
|     t = Timers->GetMatch(event); | ||||
|     } | ||||
| #else | ||||
|     t = Timers.GetMatch(event); | ||||
| #endif | ||||
|     if (!t) | ||||
|         return; | ||||
|     SaveTimer(t); | ||||
| } | ||||
|  | ||||
| void cRecManager::SaveTimer(const cTimer *t, cTimer *newTimerSettings) { | ||||
|     if (!t) | ||||
|         return; | ||||
|  | ||||
| #if VDRVERSNUM >= 20301 | ||||
|     LOCK_TIMERS_WRITE; | ||||
|     cTimer *timer = Timers->GetTimer(t); | ||||
|     cTimers* timers = Timers; | ||||
|     timers->SetExplicitModify(); | ||||
|     if (t && t->Remote()) { | ||||
|        if (!HandleRemoteTimerModifications(newTimerSettings, (cTimer *)t)) { | ||||
|           esyslog(tr("tvguide: RemoteTimerModifications failed")); | ||||
|        } | ||||
|     } | ||||
|     cTimer *timer = timers->GetTimer(t); | ||||
| #else | ||||
|     cTimer *timer = Timers.GetTimer((cTimer*)t); | ||||
|     cTimers* timers = &Timers; | ||||
|     cTimer *timer = timers->GetTimer((cTimer *)t); | ||||
| #endif | ||||
|     if (!timer) { | ||||
|        return; | ||||
|     } | ||||
|  | ||||
|     bool active = newTimerSettings.HasFlags(tfActive); | ||||
|     int prio = newTimerSettings.Priority(); | ||||
|     int lifetime = newTimerSettings.Lifetime(); | ||||
|     time_t day = newTimerSettings.Day(); | ||||
|     int start = newTimerSettings.Start(); | ||||
|     int stop = newTimerSettings.Stop(); | ||||
|     std::string fileName = newTimerSettings.File(); | ||||
|     bool active = true; | ||||
|     if (newTimerSettings) { | ||||
|        int prio = newTimerSettings->Priority(); | ||||
|        int lifetime = newTimerSettings->Lifetime(); | ||||
|        time_t day = newTimerSettings->Day(); | ||||
|        int start = newTimerSettings->Start(); | ||||
|        int stop = newTimerSettings->Stop(); | ||||
|        std::string fileName = newTimerSettings->File(); | ||||
|  | ||||
|     timer->SetDay(day); | ||||
|     timer->SetStart(start); | ||||
|     timer->SetStop(stop); | ||||
|     timer->SetPriority(prio); | ||||
|     timer->SetLifetime(lifetime); | ||||
|     timer->SetFile(fileName.c_str()); | ||||
|        timer->SetDay(day); | ||||
|        timer->SetStart(start); | ||||
|        timer->SetStop(stop); | ||||
|        timer->SetPriority(prio); | ||||
|        timer->SetLifetime(lifetime); | ||||
|        timer->SetFile(fileName.c_str()); | ||||
|  | ||||
|     if (timer->HasFlags(tfActive) && !active) | ||||
|         timer->ClrFlags(tfActive); | ||||
|     else if (!timer->HasFlags(tfActive) && active) | ||||
|         timer->SetFlags(tfActive); | ||||
|        active = newTimerSettings->HasFlags(tfActive); | ||||
|     } else | ||||
|        active = !timer->HasFlags(tfActive); | ||||
|  | ||||
|     if (active) | ||||
|        timer->SetFlags(tfActive); | ||||
|     else | ||||
|        timer->ClrFlags(tfActive); | ||||
|  | ||||
| #if VDRVERSNUM < 20300 | ||||
|     timer->SetEventFromSchedule(); | ||||
| @@ -294,11 +339,7 @@ void cRecManager::SaveTimer(const cTimer *t, cTimer newTimerSettings) { | ||||
|             rt.timer = NULL; | ||||
|         RefreshRemoteTimers(); | ||||
|     } else { | ||||
| #if VDRVERSNUM >= 20301 | ||||
|         Timers->SetModified(); | ||||
| #else | ||||
|         Timers.SetModified(); | ||||
| #endif | ||||
|         timers->SetModified(); | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -33,12 +33,12 @@ public: | ||||
|     cTimer *createLocalTimer(const cEvent *event, std::string path); | ||||
|     cTimer *createRemoteTimer(const cEvent *event, std::string path); | ||||
|     void SetTimerPath(cTimer *timer, const cEvent *event, std::string path); | ||||
|     void OnOffTimer(const cEvent *event); | ||||
|     void DeleteTimer(const cTimer *timer); | ||||
|     void DeleteTimer(int timerID); | ||||
|     void DeleteTimer(const cEvent *event); | ||||
|     void DeleteLocalTimer(const cEvent *event); | ||||
|     void DeleteRemoteTimer(const cEvent *event); | ||||
|     void SaveTimer(const cTimer *timer, cTimer newTimerSettings); | ||||
|     void SaveTimer(const cTimer *timer, cTimer *newTimerSettings = NULL); | ||||
|     bool IsRecorded(const cEvent *event); | ||||
|     cTVGuideTimerConflicts *CheckTimerConflict(void); | ||||
|     void CreateSeriesTimer(cTimer *seriesTimer); | ||||
|   | ||||
| @@ -441,7 +441,7 @@ void cRecMenu::JumpBegin(void) { | ||||
|             CreatePixmap(); | ||||
|         Arrange(false); | ||||
|         startIndex = 0; | ||||
|         stopIndex = numItems - 1; | ||||
|         stopIndex = currentItem; | ||||
|         cRecMenuItem *first = menuItems.front(); | ||||
|         first->setActive(); | ||||
|         first->setBackground(); | ||||
| @@ -589,10 +589,14 @@ void cRecMenu::UpdateActiveMenuItem(void) { | ||||
|  | ||||
|  | ||||
| void cRecMenu::DrawScrollBar(void) { | ||||
|     if (!pixmapScrollBar) | ||||
|        return; | ||||
|     pixmapScrollBar->Fill(theme.Color(clrBorder)); | ||||
|     pixmapScrollBar->DrawRectangle(cRect(2,2,pixmapScrollBar->ViewPort().Width()-4, pixmapScrollBar->ViewPort().Height() - 4), theme.Color(clrBackground)); | ||||
|      | ||||
|     int totalNumItems = GetTotalNumMenuItems(); | ||||
|     if (!totalNumItems) | ||||
|        return; | ||||
|     if (imgScrollBar == NULL) { | ||||
|         int scrollBarImgHeight = (pixmapScrollBar->ViewPort().Height() - 8) * numItems / totalNumItems; | ||||
|         imgScrollBar = createScrollbar(pixmapScrollBar->ViewPort().Width()-8, scrollBarImgHeight, theme.Color(clrHighlight), theme.Color(clrHighlightBlending)); | ||||
|   | ||||
| @@ -1548,6 +1548,7 @@ cRecMenuItemTimer::cRecMenuItemTimer(const cTimer *timer, | ||||
|     this->overlapStop = overlapStop; | ||||
|     this->active = active; | ||||
|     height = 3 * font->Height(); | ||||
|     pixmapStatus = NULL; | ||||
|     pixmapIcons = NULL; | ||||
| } | ||||
|  | ||||
| @@ -1585,6 +1586,8 @@ void cRecMenuItemTimer::Show(void) { | ||||
| } | ||||
|  | ||||
| void cRecMenuItemTimer::Draw(void) { | ||||
|     if (!timer) | ||||
|        return; | ||||
|     const cChannel *channel = timer->Channel(); | ||||
|     int channelTransponder = 0; | ||||
|     cString channelName = ""; | ||||
| @@ -1598,7 +1601,7 @@ void cRecMenuItemTimer::Draw(void) { | ||||
|     if (!config.hideChannelLogos) { | ||||
|         if (imgLoader.LoadLogo(channel, logoWidth, height)) { | ||||
|             cImage logo = imgLoader.GetImage(); | ||||
|             pixmapIcons->DrawImage(cPoint(logoX, 0), logo); | ||||
|             pixmapIcons->DrawImage(cPoint(logoX, (height - logo.Height()) / 2), logo); | ||||
|             logoX += logoWidth + 5; | ||||
|         } | ||||
|     } | ||||
| @@ -1740,8 +1743,13 @@ cRecMenuItemTimerConflictHeader::~cRecMenuItemTimerConflictHeader(void) { | ||||
| } | ||||
|  | ||||
| void cRecMenuItemTimerConflictHeader::SetPixmaps(void) { | ||||
|     pixmap = osdManager.requestPixmap(4, cRect(x, y, width, height)); | ||||
|     pixmapStatus = osdManager.requestPixmap(5, cRect(x, y, width, height)); | ||||
|     if (!pixmap) { | ||||
|        pixmap = osdManager.requestPixmap(4, cRect(x, y, width, height)); | ||||
|        pixmapStatus = osdManager.requestPixmap(5, cRect(x, y, width, height)); | ||||
|     } else { | ||||
|        pixmap->SetViewPort(cRect(x, y, width, height)); | ||||
|        pixmapStatus->SetViewPort(cRect(x, y, width, height)); | ||||
|     } | ||||
|     pixmapStatus->Fill(clrTransparent); | ||||
| } | ||||
|  | ||||
| @@ -2005,7 +2013,7 @@ void cRecMenuItemChannelChooser::DrawValue(void) { | ||||
|         cImageLoader imgLoader; | ||||
|         if (imgLoader.LoadLogo(channel, logoWidth, height - 10)) { | ||||
|             cImage logo = imgLoader.GetImage(); | ||||
|             pixmapChannel->DrawImage(cPoint(logoX, 5), logo); | ||||
|             pixmapChannel->DrawImage(cPoint(logoX, (height - logo.Height()) / 2), logo); | ||||
|         } | ||||
|     } else { | ||||
|         cString textVal = tr("all Channels"); | ||||
| @@ -2304,13 +2312,14 @@ void cRecMenuItemRecording::Show(void) { | ||||
| } | ||||
|  | ||||
| // --- cRecMenuItemTimelineHeader  ------------------------------------------------------- | ||||
| cRecMenuItemTimelineHeader::cRecMenuItemTimelineHeader(time_t day, std::vector<cTVGuideTimerConflict*> conflictsToday) { | ||||
| cRecMenuItemTimelineHeader::cRecMenuItemTimelineHeader(time_t day, int numTimersToday, std::vector<cTVGuideTimerConflict*> conflictsToday) { | ||||
|     conflicts = conflictsToday; | ||||
|     pixmapTimeline = NULL; | ||||
|     pixmapTimerInfo = NULL; | ||||
|     pixmapTimerConflicts = NULL; | ||||
|     timer = NULL; | ||||
|     this->day = day; | ||||
|     this->numTimersToday = numTimersToday; | ||||
|     selectable = false; | ||||
|     active = false; | ||||
|     height = 5 * font->Height(); | ||||
| @@ -2359,7 +2368,7 @@ void cRecMenuItemTimelineHeader::Draw(void) { | ||||
|     } | ||||
|     DrawTimerConflicts(); | ||||
|     pixmap->Fill(clrTransparent); | ||||
|     cString headerText = tr("Timers for"); | ||||
|     cString headerText = cString::sprintf("%i %s", numTimersToday, tr("Timers for")); | ||||
|     cString dateText = DateString(day); | ||||
|     cString header = cString::sprintf("%s: %s", *headerText, *dateText); | ||||
|     int xText = (width - fontLarge->Width(*header)) / 2; | ||||
| @@ -2384,7 +2393,7 @@ void cRecMenuItemTimelineHeader::DrawCurrentTimer(void) { | ||||
|         if (!config.hideChannelLogos) { | ||||
|             if (imgLoader.LoadLogo(channel, logoWidth, infoHeight)) { | ||||
|                 cImage logo = imgLoader.GetImage(); | ||||
|                 pixmapTimerInfo->DrawImage(cPoint(0, 0), logo); | ||||
|                 pixmapTimerInfo->DrawImage(cPoint(0, (infoHeight - logo.Height()) / 2), logo); | ||||
|                 x += logoWidth + 10; | ||||
|                 logoDrawn = true; | ||||
|             } | ||||
| @@ -2421,7 +2430,7 @@ void cRecMenuItemTimelineHeader::DrawTimeline(void) { | ||||
|     pixmapTimeline->Fill(clrTransparent); | ||||
|     width5Mins = (float)width * 5.0 / 24.0 / 60.0; | ||||
|     int widthHour = 12 * width5Mins; | ||||
|     x0 = (width - 24*widthHour)/2; | ||||
|     x0 = (width - (24 * widthHour)) / 2; | ||||
|     int barHeight = fontSmall->Height(); | ||||
|     int y = height - barHeight; | ||||
|     tColor col1 = theme.Color(clrTimeline1); | ||||
| @@ -2526,7 +2535,8 @@ void cRecMenuItemTimelineTimer::SetPixmaps(void) { | ||||
|              | ||||
|     } | ||||
|     width5Mins = (float)width * 5.0 / 24.0 / 60.0; | ||||
|     x0 = (width - 24*12*width5Mins)/2; | ||||
|     int widthHour = 12 * width5Mins; | ||||
|     x0 = (width - (24 * widthHour)) / 2; | ||||
| } | ||||
|  | ||||
| void cRecMenuItemTimelineTimer::Draw(void) { | ||||
|   | ||||
| @@ -25,6 +25,7 @@ enum eRecMenuState { | ||||
|     rmsSearchRerunsTimerConflictMenu, | ||||
|     rmsSaveTimerConflictMenu, | ||||
|     rmsTimerConflictShowInfo, | ||||
|     rmsOnOffTimer, | ||||
|     rmsDeleteTimer, | ||||
|     rmsDeleteTimerConfirmation, | ||||
|     rmsEditTimer, | ||||
| @@ -573,19 +574,21 @@ private: | ||||
|     cPixmap *pixmapTimeline; | ||||
|     cPixmap *pixmapTimerInfo; | ||||
|     cPixmap *pixmapTimerConflicts; | ||||
|     int width5Mins; | ||||
|     float width5Mins; | ||||
|     int x0; | ||||
|     int numTimersToday; | ||||
|     bool timelineDrawn; | ||||
|     void DrawTimeline(void); | ||||
|     void DrawTimerConflicts(void); | ||||
|     void DrawCurrentTimer(void); | ||||
| public: | ||||
|     cRecMenuItemTimelineHeader(time_t day, std::vector<cTVGuideTimerConflict*> conflictsToday); | ||||
|     cRecMenuItemTimelineHeader(time_t day, int numTimersToday, std::vector<cTVGuideTimerConflict*> conflictsToday); | ||||
|     virtual ~cRecMenuItemTimelineHeader(void); | ||||
|     void SetDay(time_t day) { this->day = day; }; | ||||
|     void SetPixmaps(void); | ||||
|     void SetCurrentTimer(const cTimer *timer) { this->timer = timer; }; | ||||
|     void UnsetCurrentTimer(void) { timer = NULL; }; | ||||
|     void SetNumTimersToday(int numTimersToday) { this->numTimersToday = numTimersToday; }; | ||||
|     void RefreshTimerDisplay(void); | ||||
|     void Hide(void); | ||||
|     void Show(void);  | ||||
| @@ -601,7 +604,7 @@ private: | ||||
|     cPixmap *pixmapTimerConflicts; | ||||
|     cRecMenuItemTimelineHeader *header; | ||||
|     int x0; | ||||
|     int width5Mins; | ||||
|     float width5Mins; | ||||
|     time_t start; | ||||
|     time_t stop; | ||||
|     void DrawBackground(void); | ||||
|   | ||||
							
								
								
									
										99
									
								
								recmenus.c
									
									
									
									
									
								
							
							
						
						
									
										99
									
								
								recmenus.c
									
									
									
									
									
								
							| @@ -11,8 +11,9 @@ cRecMenuMain::cRecMenuMain(bool epgSearchAvailable, bool timerActive, bool switc | ||||
|             action = rmsInstantRecordFolder; | ||||
|         AddMenuItem(new cRecMenuItemButton(tr("Instant Record"), action, true, false, false, true)); | ||||
|     } else { | ||||
|         AddMenuItem(new cRecMenuItemButton(tr("Delete Timer"), rmsDeleteTimer, true, false, false, true)); | ||||
|         AddMenuItem(new cRecMenuItemButton(tr("Timer On/Off"), rmsOnOffTimer, true, false, false, true)); | ||||
|         AddMenuItem(new cRecMenuItemButton(tr("Edit Timer"), rmsEditTimer, false, false, false, true)); | ||||
|         AddMenuItem(new cRecMenuItemButton(tr("Delete Timer"), rmsDeleteTimer, false, false, false, true)); | ||||
|     } | ||||
|  | ||||
|     AddMenuItem(new cRecMenuItemButton(tr("Timer Timeline"), rmsTimeline, false, false, false, true)); | ||||
| @@ -103,7 +104,7 @@ std::string cRecMenuAskFolder::GetFolder(void) { | ||||
| } | ||||
|  | ||||
| // --- cRecMenuConfirmTimer  --------------------------------------------------------- | ||||
| cRecMenuConfirmTimer::cRecMenuConfirmTimer(const cEvent *event) { | ||||
| cRecMenuConfirmTimer::cRecMenuConfirmTimer(const cEvent *event, bool timerChanged) { | ||||
|     SetWidthPercent(50); | ||||
| #if VDRVERSNUM >= 20301 | ||||
|     LOCK_CHANNELS_READ; | ||||
| @@ -111,7 +112,6 @@ cRecMenuConfirmTimer::cRecMenuConfirmTimer(const cEvent *event) { | ||||
| #else | ||||
|     const cString channelName = Channels.GetByChannelID(event->ChannelID())->Name(); | ||||
| #endif | ||||
|     cString message; | ||||
|     bool eventHasTimer = false; | ||||
|     if (config.useRemoteTimers && pRemoteTimers) { | ||||
|         RemoteTimers_GetMatch_v1_0 rtMatch; | ||||
| @@ -123,11 +123,9 @@ cRecMenuConfirmTimer::cRecMenuConfirmTimer(const cEvent *event) { | ||||
|     } else { | ||||
|         eventHasTimer = event->HasTimer(); | ||||
|     } | ||||
|     if (eventHasTimer) { | ||||
|         message = tr("Timer created"); | ||||
|     } else { | ||||
|         message = tr("Timer NOT created"); | ||||
|     } | ||||
|     const cString message = (eventHasTimer) ? (timerChanged) ? tr("Timer changed") | ||||
|                                                              : tr("Timer created") | ||||
|                                             : tr("Timer NOT created"); | ||||
|     cString text = cString::sprintf("%s\n%s\n%s %s - %s\n%s",  | ||||
|                                     *message,  | ||||
|                                     *channelName, | ||||
| @@ -197,8 +195,9 @@ cRecMenuAskDeleteTimer::cRecMenuAskDeleteTimer(const cEvent *event) { | ||||
|  | ||||
| // --- cRecMenuTimerConflicts  --------------------------------------------------------- | ||||
| cRecMenuTimerConflicts::cRecMenuTimerConflicts(cTVGuideTimerConflicts *conflicts) { | ||||
|     int numConflicts = conflicts->NumConflicts(); | ||||
|      | ||||
|     SetWidthPercent(50); | ||||
|  | ||||
|     int numConflicts = (conflicts) ? conflicts->NumConflicts() : 0; | ||||
|     cString text; | ||||
|     if (numConflicts == 1) { | ||||
|         text = cString::sprintf("%s %s %s", tr("One"), tr("Timer Conflict"), tr("detected")); | ||||
| @@ -233,19 +232,21 @@ int cRecMenuTimerConflicts::GetTimerConflict(void) { | ||||
| } | ||||
|  | ||||
| // --- cRecMenuTimerConflict  --------------------------------------------------------- | ||||
| cRecMenuTimerConflict::cRecMenuTimerConflict(cTVGuideTimerConflict *conflict) { | ||||
| cRecMenuTimerConflict::cRecMenuTimerConflict(cTVGuideTimerConflict *conflict, eRecMenuState nextAction) { | ||||
|     SetWidthPercent(95); | ||||
|     this->conflict = conflict; | ||||
|     SetHeader(new cRecMenuItemTimerConflictHeader(conflict->timeStart,  | ||||
|                                                   conflict->timeStop,  | ||||
|                                                   conflict->overlapStart,  | ||||
|     totalNumMenuItems = (int)conflict->timerIDs.size(); | ||||
|  | ||||
|     SetHeader(new cRecMenuItemTimerConflictHeader(conflict->timeStart, | ||||
|                                                   conflict->timeStop, | ||||
|                                                   conflict->overlapStart, | ||||
|                                                   conflict->overlapStop)); | ||||
|     SetFooter(new cRecMenuItemButton(tr("Ignore Conflict"), rmsIgnoreTimerConflict, false, true)); | ||||
|     SetFooter(new cRecMenuItemButton(tr("Ignore Conflict"), nextAction, false, true)); | ||||
|     int i=0; | ||||
|     for(std::vector<int>::iterator it = conflict->timerIDs.begin(); it != conflict->timerIDs.end(); it++) { | ||||
| #if VDRVERSNUM >= 20301 | ||||
|         LOCK_TIMERS_READ; | ||||
|         const cTimer *timer = Timers->Get(*it); | ||||
|         const cTimer *timer = Timers->GetById(*it + 1); | ||||
| #else | ||||
|         const cTimer *timer = Timers.Get(*it); | ||||
| #endif | ||||
| @@ -271,7 +272,7 @@ cRecMenuTimerConflict::cRecMenuTimerConflict(cTVGuideTimerConflict *conflict) { | ||||
| } | ||||
|      | ||||
| cRecMenuItem *cRecMenuTimerConflict::GetMenuItem(int number) {  | ||||
|     if ((number >= 0) && (number < (int)conflict->timerIDs.size())) { | ||||
|     if ((number >= 0) && (number < totalNumMenuItems)) { | ||||
| #if VDRVERSNUM >= 20301 | ||||
|         LOCK_TIMERS_READ; | ||||
|         const cTimer *timer = Timers->Get(conflict->timerIDs[number]); | ||||
| @@ -293,8 +294,8 @@ cRecMenuItem *cRecMenuTimerConflict::GetMenuItem(int number) { | ||||
|     return NULL; | ||||
| } | ||||
|  | ||||
| int cRecMenuTimerConflict::GetTotalNumMenuItems(void) {  | ||||
|     return conflict->timerIDs.size();  | ||||
| int cRecMenuTimerConflict::GetTotalNumMenuItems(void) { | ||||
|     return totalNumMenuItems;  | ||||
| } | ||||
|  | ||||
| int cRecMenuTimerConflict::GetTimerConflictIndex(void) { | ||||
| @@ -470,17 +471,17 @@ const cTimer *cRecMenuEditTimer::GetOriginalTimer(void) { | ||||
|     return originalTimer; | ||||
| } | ||||
|  | ||||
| cTimer cRecMenuEditTimer::GetTimer(void) { | ||||
|     cTimer t; | ||||
| cTimer *cRecMenuEditTimer::GetTimer(void) { | ||||
|     cTimer *t = (cTimer *)originalTimer; | ||||
|     if (timerActive) | ||||
|         t.SetFlags(tfActive); | ||||
|         t->SetFlags(tfActive); | ||||
|     else  | ||||
|         t.SetFlags(tfNone); | ||||
|     t.SetDay(day); | ||||
|     t.SetStart(start); | ||||
|     t.SetStop(stop); | ||||
|     t.SetPriority(prio); | ||||
|     t.SetLifetime(lifetime); | ||||
|         t->ClrFlags(tfActive); | ||||
|     t->SetDay(day); | ||||
|     t->SetStart(start); | ||||
|     t->SetStop(stop); | ||||
|     t->SetPriority(prio); | ||||
|     t->SetLifetime(lifetime); | ||||
|     std::string newFolder(folder); | ||||
|     std::string newFile = originalTimer->File(); | ||||
|     size_t found = newFile.find_last_of('~'); | ||||
| @@ -495,7 +496,7 @@ cTimer cRecMenuEditTimer::GetTimer(void) { | ||||
|             newFile = *cString::sprintf("%s~%s", newFolder.c_str(), newFile.c_str()); | ||||
|     } | ||||
|     std::replace(newFile.begin(), newFile.end(), '/', '~'); | ||||
|     t.SetFile(newFile.c_str()); | ||||
|     t->SetFile(newFile.c_str()); | ||||
|     return t; | ||||
| } | ||||
|  | ||||
| @@ -1413,8 +1414,8 @@ cRecMenuTimeline::cRecMenuTimeline(cTVGuideTimerConflicts *timerConflicts) { | ||||
|     SetStartStop(); | ||||
|     conflictsToday = timerConflicts->GetConflictsBetween(timeStart, timeStop); | ||||
|     GetTimersForDay(); | ||||
|     SetWidthPercent(95); | ||||
|     header = new cRecMenuItemTimelineHeader(timeStart, conflictsToday); | ||||
|     SetWidthPercent(90); | ||||
|     header = new cRecMenuItemTimelineHeader(timeStart, numTimersToday, conflictsToday); | ||||
|     SetHeader(header); | ||||
|     cRecMenuItem *footer = new cRecMenuItemButton(tr("Close"), rmsClose, false, true); | ||||
|     SetFooter(footer); | ||||
| @@ -1434,26 +1435,40 @@ void cRecMenuTimeline::GetTimersForDay(void) { | ||||
|     timersToday.clear(); | ||||
| #if VDRVERSNUM >= 20301 | ||||
|     LOCK_TIMERS_READ; | ||||
| //    const cTimers* timers = Timers; | ||||
|     for (const cTimer *t = Timers->First(); t; t = Timers->Next(t)) { | ||||
|     const cTimers* timers = Timers; | ||||
|     cSortedTimers SortedTimers(timers); | ||||
|     int i = 0; | ||||
|     while (i < SortedTimers.Size()) { | ||||
|         const cTimer *t = SortedTimers[i]; | ||||
|         if (((t->StartTime() > timeStart) && (t->StartTime() <= timeStop)) || ((t->StopTime() > timeStart) && (t->StopTime() <= timeStop))) { | ||||
|             if (t->HasFlags(tfActive)) | ||||
|                 timersToday.push_back(t); | ||||
|         } | ||||
|         i++; | ||||
|     } | ||||
| #else | ||||
|     for (const cTimer *t = Timers.First(); t; t = Timers.Next(t)) { | ||||
| #endif | ||||
|         if (((t->StartTime() > timeStart) && (t->StartTime() <= timeStop)) || ((t->StopTime() > timeStart) && (t->StopTime() <= timeStop))) { | ||||
|             timersToday.push_back(t); | ||||
|         } | ||||
|     } | ||||
| #endif | ||||
|     numTimersToday = timersToday.size(); | ||||
| } | ||||
|  | ||||
| void cRecMenuTimeline::SetTimers(void) { | ||||
|     ClearMenu(); | ||||
|     GetTimersForDay(); | ||||
|     conflictsToday = timerConflicts->GetConflictsBetween(timeStart, timeStop); | ||||
|     header->UnsetCurrentTimer(); | ||||
|     header->SetDay(timeStart); | ||||
|     header->RefreshTimerDisplay(); | ||||
|     header->SetNumTimersToday(numTimersToday); | ||||
|     if (numTimersToday == 0) { | ||||
|         AddMenuItem(new cRecMenuItemTimelineTimer(NULL, 0, 0, conflictsToday, header, false)); | ||||
|         header->UnsetCurrentTimer(); | ||||
|         footer->setActive(); | ||||
|     } else { | ||||
|         for (int i=0; i<numTimersToday; i++) { | ||||
|         for (int i = 0; i<numTimersToday; i++) { | ||||
|             cRecMenuItemTimelineTimer *item = new cRecMenuItemTimelineTimer(timersToday[i], timeStart, timeStop, conflictsToday, header, false); | ||||
|             if (i==0) | ||||
|                 item->setActive(); | ||||
| @@ -1472,12 +1487,6 @@ void cRecMenuTimeline::PrevDay(void) { | ||||
|         return; | ||||
|     timeStart -= 3600*24; | ||||
|     timeStop -= 3600*24; | ||||
|     conflictsToday = timerConflicts->GetConflictsBetween(timeStart, timeStop); | ||||
|     SetWidthPercent(95); | ||||
|     header->SetDay(timeStart); | ||||
|     header->UnsetCurrentTimer(); | ||||
|     header->RefreshTimerDisplay(); | ||||
|     GetTimersForDay(); | ||||
|     SetTimers(); | ||||
|     Display(); | ||||
| } | ||||
| @@ -1485,12 +1494,6 @@ void cRecMenuTimeline::PrevDay(void) { | ||||
| void cRecMenuTimeline::NextDay(void) { | ||||
|     timeStart += 3600*24; | ||||
|     timeStop += 3600*24; | ||||
|     conflictsToday = timerConflicts->GetConflictsBetween(timeStart, timeStop); | ||||
|     SetWidthPercent(95); | ||||
|     header->SetDay(timeStart); | ||||
|     header->UnsetCurrentTimer(); | ||||
|     header->RefreshTimerDisplay(); | ||||
|     GetTimersForDay(); | ||||
|     SetTimers(); | ||||
|     Display(); | ||||
| } | ||||
|   | ||||
| @@ -47,7 +47,7 @@ public: | ||||
| // --- cRecMenuConfirmTimer  --------------------------------------------------------- | ||||
| class cRecMenuConfirmTimer: public cRecMenu { | ||||
| public: | ||||
|     cRecMenuConfirmTimer(const cEvent *event); | ||||
|     cRecMenuConfirmTimer(const cEvent *event, bool timerChanged = false); | ||||
|     virtual ~cRecMenuConfirmTimer(void) {}; | ||||
| }; | ||||
|  | ||||
| @@ -77,11 +77,12 @@ public: | ||||
| class cRecMenuTimerConflict: public cRecMenu { | ||||
| private: | ||||
|     cTVGuideTimerConflict *conflict; | ||||
|     int totalNumMenuItems; | ||||
| public: | ||||
|     cRecMenuTimerConflict(cTVGuideTimerConflict *conflict); | ||||
|     cRecMenuTimerConflict(cTVGuideTimerConflict *conflict, eRecMenuState nextAction = rmsClose); | ||||
|     virtual ~cRecMenuTimerConflict(void) {}; | ||||
|     cRecMenuItem *GetMenuItem(int number); | ||||
|     int GetTotalNumMenuItems(void); | ||||
|     virtual ~cRecMenuTimerConflict(void) {}; | ||||
|     int GetTimerConflictIndex(void); | ||||
| }; | ||||
|  | ||||
| @@ -136,7 +137,7 @@ public: | ||||
|     cRecMenuEditTimer(const cTimer *timer, eRecMenuState nextState); | ||||
|     const cTimer *GetOriginalTimer(void); | ||||
|     virtual ~cRecMenuEditTimer(void) {}; | ||||
|     cTimer GetTimer(void); | ||||
|     cTimer *GetTimer(void); | ||||
| }; | ||||
|  | ||||
| /****************************************************************************************** | ||||
|   | ||||
							
								
								
									
										157
									
								
								recmenuview.c
									
									
									
									
									
								
							
							
						
						
									
										157
									
								
								recmenuview.c
									
									
									
									
									
								
							| @@ -93,16 +93,18 @@ void cRecMenuView::DisplaySearchTimerList(void) { | ||||
| } | ||||
|  | ||||
| bool cRecMenuView::DisplayTimerConflict(const cTimer *timer) { | ||||
|     int timerID = 0; | ||||
| #if VDRVERSNUM >= 20301 | ||||
|     LOCK_TIMERS_READ; | ||||
|     for (const cTimer *t = Timers->First(); t; t = Timers->Next(t)) { | ||||
|         if (t == timer) | ||||
|             return DisplayTimerConflict(timer->Id() - 1); | ||||
| #else | ||||
|     int timerID = 0; | ||||
|     for (const cTimer *t = Timers.First(); t; t = Timers.Next(t)) { | ||||
| #endif | ||||
|         if (t == timer) | ||||
|             return DisplayTimerConflict(timerID); | ||||
|         timerID++; | ||||
| #endif | ||||
|     } | ||||
|     return false; | ||||
| } | ||||
| @@ -119,7 +121,8 @@ bool cRecMenuView::DisplayTimerConflict(int timerID) { | ||||
|         cTVGuideTimerConflict *conflict = timerConflicts->GetCurrentConflict(); | ||||
|         if (!conflict) | ||||
|             return false; | ||||
|         activeMenu = new cRecMenuTimerConflict(conflict); | ||||
|         delete activeMenu; | ||||
|         activeMenu = new cRecMenuTimerConflict(conflict, rmsIgnoreTimerConflict); | ||||
|         activeMenu->Display(); | ||||
|         return true; | ||||
|     } | ||||
| @@ -161,11 +164,16 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) { | ||||
|             if (cRecMenuAskFolder *menu = dynamic_cast<cRecMenuAskFolder*>(activeMenu)) { | ||||
|                 recFolder = menu->GetFolder(); | ||||
|             } | ||||
|             delete activeMenu; | ||||
|             cTimer *timer = recManager->createTimer(event, recFolder); | ||||
|             if (!DisplayTimerConflict(timer)) { | ||||
|                 activeMenu = new cRecMenuConfirmTimer(event); | ||||
|                 activeMenu->Display(); | ||||
|                 if (config.timerMessage) { | ||||
|                     delete activeMenu; | ||||
|                     activeMenu = new cRecMenuConfirmTimer(event); | ||||
|                     activeMenu->Display(); | ||||
|                 } else { | ||||
|                     Close(); | ||||
|                     state = osEnd; | ||||
|                 } | ||||
|             } | ||||
|             break; } | ||||
|         case rmsInstantRecordFolder: | ||||
| @@ -175,24 +183,49 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) { | ||||
|             activeMenu = new cRecMenuAskFolder(event, rmsInstantRecord); | ||||
|             activeMenu->Display(); | ||||
|             break; | ||||
|         case rmsOnOffTimer: { | ||||
|             //caller: main menu | ||||
|             //De/Activate timer for active event | ||||
|             recManager->OnOffTimer(event); | ||||
|             if (config.timerMessage) { | ||||
|                 delete activeMenu; | ||||
|                 activeMenu = new cRecMenuConfirmTimer(event, true); | ||||
|                 activeMenu->Display(); | ||||
|             } else { | ||||
|                 Close(); | ||||
|                 state = osEnd; | ||||
|             } | ||||
|             break; } | ||||
|         case rmsDeleteTimer: { | ||||
|             //caller: main menu | ||||
|             //delete timer for active event | ||||
|             delete activeMenu; | ||||
|             if (recManager->IsRecorded(event)) { | ||||
|                 delete activeMenu; | ||||
|                 activeMenu = new cRecMenuAskDeleteTimer(event); | ||||
|                 activeMenu->Display(); | ||||
|             } else { | ||||
|                 recManager->DeleteTimer(event); | ||||
|                 activeMenu = new cRecMenuConfirmDeleteTimer(event); | ||||
|                 if (config.timerMessage) { | ||||
|                     delete activeMenu; | ||||
|                     activeMenu = new cRecMenuConfirmDeleteTimer(event); | ||||
|                     activeMenu->Display(); | ||||
|                 } else { | ||||
|                     Close(); | ||||
|                     state = osEnd; | ||||
|                 } | ||||
|             } | ||||
|             activeMenu->Display(); | ||||
|             break; } | ||||
|         case rmsDeleteTimerConfirmation: { | ||||
|             //delete running timer for active event | ||||
|             recManager->DeleteTimer(event); | ||||
|             delete activeMenu; | ||||
|             activeMenu = new cRecMenuConfirmDeleteTimer(event); | ||||
|             activeMenu->Display(); | ||||
|             if (config.timerMessage) { | ||||
|                 delete activeMenu; | ||||
|                 activeMenu = new cRecMenuConfirmDeleteTimer(event); | ||||
|                 activeMenu->Display(); | ||||
|             } else { | ||||
|                 Close(); | ||||
|                 state = osEnd; | ||||
|             } | ||||
|             break; } | ||||
|         case rmsEditTimer: { | ||||
|             //edit timer for active event | ||||
| @@ -206,7 +239,7 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) { | ||||
|         case rmsSaveTimer: { | ||||
|             //caller: cRecMenuEditTimer | ||||
|             //save timer for active event | ||||
|             cTimer timerModified; | ||||
|             cTimer *timerModified; | ||||
|             const cTimer *originalTimer; | ||||
|             if (cRecMenuEditTimer *menu = dynamic_cast<cRecMenuEditTimer*>(activeMenu)) { | ||||
|                 timerModified = menu->GetTimer(); | ||||
| @@ -219,9 +252,14 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) { | ||||
|         case rmsIgnoreTimerConflict: | ||||
|         //caller: cRecMenuTimerConflict | ||||
|         //Confirming created Timer | ||||
|             delete activeMenu; | ||||
|             activeMenu = new cRecMenuConfirmTimer(event); | ||||
|             activeMenu->Display(); | ||||
|             if (config.timerMessage) { | ||||
|                 delete activeMenu; | ||||
|                 activeMenu = new cRecMenuConfirmTimer(event); | ||||
|                 activeMenu->Display(); | ||||
|             } else { | ||||
|                 Close(); | ||||
|                 state = osEnd; | ||||
|             } | ||||
|             break; | ||||
|         case rmsTimerConflictShowInfo: { | ||||
|             //caller: cRecMenuTimerConflict | ||||
| @@ -229,12 +267,18 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) { | ||||
|             if (cRecMenuTimerConflict *menu = dynamic_cast<cRecMenuTimerConflict*>(activeMenu)) { | ||||
|                 timerIndex = menu->GetTimerConflictIndex(); | ||||
|             } else break; | ||||
|             int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex); | ||||
|             const cTimers* timers; | ||||
| #if VDRVERSNUM >= 20301 | ||||
|             int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex) + 1; | ||||
|             { | ||||
|             LOCK_TIMERS_READ; | ||||
|             const cTimer *t = Timers->Get(timerID); | ||||
|             timers = Timers; | ||||
|             } | ||||
|             const cTimer *t = timers->GetById(timerID); | ||||
| #else | ||||
|             cTimer *t = Timers.Get(timerID); | ||||
|             int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex); | ||||
|             timers = &Timers; | ||||
|             const cTimer *t = timers->Get(timerID); | ||||
| #endif | ||||
|             if (t) { | ||||
|                 const cEvent *ev = t->Event(); | ||||
| @@ -250,12 +294,30 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) { | ||||
|             if (cRecMenuTimerConflict *menu = dynamic_cast<cRecMenuTimerConflict*>(activeMenu)) { | ||||
|                 timerIndex = menu->GetTimerConflictIndex(); | ||||
|             } else break; | ||||
|             const cTimers* timers; | ||||
|             const cEvent *event; | ||||
| #if VDRVERSNUM >= 20301 | ||||
|             int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex) + 1; | ||||
|             { | ||||
|             LOCK_TIMERS_READ; | ||||
|             timers = Timers; | ||||
|             } | ||||
|             event = timers->GetById(timerID)->Event(); | ||||
| #else | ||||
|             int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex); | ||||
|             recManager->DeleteTimer(timerID); | ||||
|             delete activeMenu; | ||||
|             timers = &Timers; | ||||
|             event = timers->Get(timerID)->Event(); | ||||
| #endif | ||||
|             recManager->DeleteTimer(event); | ||||
|             if (!DisplayTimerConflict(timerID)) { | ||||
|                 activeMenu = new cRecMenuConfirmTimer(event); | ||||
|                 activeMenu->Display(); | ||||
|                 if (config.timerMessage) { | ||||
|                     delete activeMenu; | ||||
|                     activeMenu = new cRecMenuConfirmDeleteTimer(event); | ||||
|                     activeMenu->Display(); | ||||
|                 } else { | ||||
|                     Close(); | ||||
|                     state = osEnd; | ||||
|                 } | ||||
|             } | ||||
|             break; } | ||||
|         case rmsEditTimerConflictMenu: { | ||||
| @@ -265,12 +327,18 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) { | ||||
|             if (cRecMenuTimerConflict *menu = dynamic_cast<cRecMenuTimerConflict*>(activeMenu)) { | ||||
|                 timerIndex = menu->GetTimerConflictIndex(); | ||||
|             } else break; | ||||
|             int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex); | ||||
|             const cTimers* timers; | ||||
| #if VDRVERSNUM >= 20301 | ||||
|             int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex) + 1; | ||||
|             { | ||||
|             LOCK_TIMERS_READ; | ||||
|             const cTimer *timer = Timers->Get(timerID); | ||||
|             timers = Timers; | ||||
|             } | ||||
|             const cTimer *timer = timers->GetById(timerID); | ||||
| #else | ||||
|             const cTimer *timer = Timers.Get(timerID); | ||||
|             int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex); | ||||
|             timers = &Timers; | ||||
|             const cTimer *timer = timers->Get(timerID); | ||||
| #endif | ||||
|             if (timer) { | ||||
|                 delete activeMenu; | ||||
| @@ -281,17 +349,22 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) { | ||||
|         case rmsSaveTimerConflictMenu: { | ||||
|             //caller: cRecMenuEditTimer | ||||
|             //save timer from current timer conflict | ||||
|             cTimer timerModified; | ||||
|             cTimer *timerModified; | ||||
|             const cTimer *originalTimer; | ||||
|             if (cRecMenuEditTimer *menu = dynamic_cast<cRecMenuEditTimer*>(activeMenu)) { | ||||
|                 timerModified = menu->GetTimer(); | ||||
|                 originalTimer = menu->GetOriginalTimer(); | ||||
|             } else break; | ||||
|             recManager->SaveTimer(originalTimer, timerModified); | ||||
|             delete activeMenu; | ||||
|             if (!DisplayTimerConflict(originalTimer)) { | ||||
|                 activeMenu = new cRecMenuConfirmTimer(event); | ||||
|                 activeMenu->Display(); | ||||
|                 if (config.timerMessage) { | ||||
|                     delete activeMenu; | ||||
|                     activeMenu = new cRecMenuConfirmTimer(originalTimer->Event(), true); | ||||
|                     activeMenu->Display(); | ||||
|                 } else { | ||||
|                     Close(); | ||||
|                     state = osEnd; | ||||
|                 } | ||||
|             } | ||||
|             break; } | ||||
| /*************************************************************************************** | ||||
| @@ -639,7 +712,7 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) { | ||||
|             } else break; | ||||
|             timerConflicts->SetCurrentConflict(timerConflict); | ||||
|             delete activeMenu; | ||||
|             activeMenu = new cRecMenuTimerConflict(timerConflicts->GetCurrentConflict()); | ||||
|             activeMenu = new cRecMenuTimerConflict(timerConflicts->GetCurrentConflict(), rmsTimerConflicts); | ||||
|             activeMenu->Display(); | ||||
|             break; } | ||||
|         case rmsSearchRerunsTimerConflictMenu: { | ||||
| @@ -651,12 +724,18 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) { | ||||
|             if (cRecMenuTimerConflict *menu = dynamic_cast<cRecMenuTimerConflict*>(activeMenu)) { | ||||
|                 timerConflict = menu->GetTimerConflictIndex(); | ||||
|             } else break; | ||||
|             int timerID = timerConflicts->GetCurrentConflictTimerID(timerConflict); | ||||
|             const cTimers* timers; | ||||
| #if VDRVERSNUM >= 20301 | ||||
|             int timerID = timerConflicts->GetCurrentConflictTimerID(timerConflict) + 1; | ||||
|             { | ||||
|             LOCK_TIMERS_READ; | ||||
|             const cTimer *timer = Timers->Get(timerID); | ||||
|             timers = Timers; | ||||
|             } | ||||
|             const cTimer *timer = timers->GetById(timerID); | ||||
| #else | ||||
|             cTimer *timer = Timers.Get(timerID); | ||||
|             int timerID = timerConflicts->GetCurrentConflictTimerID(timerConflict); | ||||
|             timers = &Timers; | ||||
|             const cTimer *timer = timers->Get(timerID); | ||||
| #endif | ||||
|             if (timer) { | ||||
|                 const cEvent *event = timer->Event(); | ||||
| @@ -698,12 +777,16 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) { | ||||
|                 originalConflictIndex = menu->GetTimerConflictIndex(); | ||||
|             } else break; | ||||
|             int originalTimerID = timerConflicts->GetCurrentConflictTimerID(originalConflictIndex); | ||||
|             const cTimers* timers; | ||||
| #if VDRVERSNUM >= 20301 | ||||
|             { | ||||
|             LOCK_TIMERS_READ; | ||||
|             const cTimer *timerOriginal = Timers->Get(originalTimerID); | ||||
|             timers = Timers; | ||||
|             } | ||||
| #else | ||||
|             cTimer *timerOriginal = Timers.Get(originalTimerID); | ||||
|             timers = &Timers; | ||||
| #endif | ||||
|             const cTimer *timerOriginal = timers->Get(originalTimerID); | ||||
|             if (replace && timerOriginal) { | ||||
|                 recManager->DeleteTimer(timerOriginal->Event()); | ||||
|                 recManager->createTimer(replace); | ||||
| @@ -740,7 +823,7 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) { | ||||
|             } | ||||
|             break;} | ||||
|         case rmsTimelineTimerSave: { | ||||
|             cTimer timerModified; | ||||
|             cTimer *timerModified; | ||||
|             const cTimer *originalTimer; | ||||
|             if (cRecMenuEditTimer *menu = dynamic_cast<cRecMenuEditTimer*>(activeMenu)) { | ||||
|                 timerModified = menu->GetTimer(); | ||||
|   | ||||
							
								
								
									
										37
									
								
								setup.c
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								setup.c
									
									
									
									
									
								
							| @@ -60,6 +60,7 @@ void cTvguideSetup::Store(void) { | ||||
|     SetupStore("debugImageLoading", config.debugImageLoading); | ||||
|     SetupStore("useNopacityTheme", config.useNopacityTheme); | ||||
|     SetupStore("themeIndex", config.themeIndex); | ||||
|     SetupStore("useHWAccel", config.useHWAccel); | ||||
|     SetupStore("showMainMenuEntry", config.showMainMenuEntry); | ||||
|     SetupStore("replaceOriginalSchedule", config.replaceOriginalSchedule); | ||||
|     SetupStore("displayMode", config.displayMode); | ||||
| @@ -79,7 +80,9 @@ void cTvguideSetup::Store(void) { | ||||
|     SetupStore("displayTime", config.displayTime); | ||||
|     SetupStore("displayHorizontalTime", config.displayHorizontalTime); | ||||
|     SetupStore("bigStepHours", config.bigStepHours); | ||||
|     SetupStore("bigStepHoursHorizontal", config.bigStepHoursHorizontal); | ||||
|     SetupStore("hugeStepHours", config.hugeStepHours); | ||||
|     SetupStore("hugeStepHoursHorizontal", config.hugeStepHoursHorizontal); | ||||
|     SetupStore("channelJumpMode", config.channelJumpMode); | ||||
|     SetupStore("blueKeyMode", config.blueKeyMode); | ||||
|     SetupStore("numkeyMode", config.numkeyMode); | ||||
| @@ -105,6 +108,8 @@ void cTvguideSetup::Store(void) { | ||||
|     SetupStore("footerHeightPercent", config.footerHeightPercent); | ||||
|     SetupStore("instRecFolderMode", config.instRecFolderMode); | ||||
|     SetupStore("instRecFixedFolder", config.instRecFixedFolder.c_str()); | ||||
|     SetupStore("addSubtitleToTimer", config.addSubtitleToTimer); | ||||
|     SetupStore("timerMessage", config.timerMessage); | ||||
|     SetupStore("favWhatsOnNow", config.favWhatsOnNow); | ||||
|     SetupStore("favWhatsOnNext", config.favWhatsOnNext); | ||||
|     SetupStore("favUseTime1", config.favUseTime1); | ||||
| @@ -203,6 +208,7 @@ cMenuSetupGeneral::cMenuSetupGeneral(cTVGuideConfig* data)  : cMenuSetupSubMenu( | ||||
| void cMenuSetupGeneral::Set(void) { | ||||
|     int currentItem = Current(); | ||||
|     Clear(); | ||||
|     Add(new cMenuEditBoolItem(tr("Use workaround for HWAccelerated OSD"), &tmpConfig->useHWAccel)); | ||||
|     Add(new cMenuEditBoolItem(tr("Show Main Menu Entry"), &tmpConfig->showMainMenuEntry)); | ||||
|     Add(new cMenuEditBoolItem(tr("Replace VDR Schedules Menu"), &tmpConfig->replaceOriginalSchedule)); | ||||
|     Add(new cMenuEditBoolItem(tr("Use appropriate nOpacity Theme"), &tmpConfig->useNopacityTheme)); | ||||
| @@ -222,8 +228,13 @@ void cMenuSetupGeneral::Set(void) { | ||||
|     Add(new cMenuEditBoolItem(tr("Close TVGuide after channel switch"), &tmpConfig->closeOnSwitch)); | ||||
|     Add(new cMenuEditStraItem(tr("Functionality of numeric Keys"), &tmpConfig->numkeyMode, 2,  numMode)); | ||||
|     Add(new cMenuEditBoolItem(tr("Hide last Channel Group"), &tmpConfig->hideLastGroup)); | ||||
|     Add(new cMenuEditIntItem(tr("Big Step (Keys 1 / 3) in hours"), &tmpConfig->bigStepHours, 1, 12)); | ||||
|     Add(new cMenuEditIntItem(tr("Huge Step (Keys 4 / 6) in hours"), &tmpConfig->hugeStepHours, 13, 48)); | ||||
|     if (tmpConfig->displayMode == eVertical) { | ||||
|         Add(new cMenuEditIntItem(tr("Big Step (Keys 1 / 3) in hours"), &tmpConfig->bigStepHours, 1, 12)); | ||||
|         Add(new cMenuEditIntItem(tr("Huge Step (Keys 4 / 6) in hours"), &tmpConfig->hugeStepHours, 13, 48)); | ||||
|     } else if (tmpConfig->displayMode == eHorizontal) { | ||||
|         Add(new cMenuEditIntItem(tr("Big Step (Keys 1 / 3) in hours"), &tmpConfig->bigStepHoursHorizontal, 1, 12)); | ||||
|         Add(new cMenuEditIntItem(tr("Huge Step (Keys 4 / 6) in hours"), &tmpConfig->hugeStepHoursHorizontal, 13, 48)); | ||||
|     } | ||||
|     Add(new cMenuEditStraItem(tr("Time Format (12h/24h)"), &tmpConfig->timeFormat, 2,  timeFormatItems)); | ||||
|     Add(new cMenuEditIntItem(tr("EPG Window Text Scrolling Speed"), &tmpConfig->detailedViewScrollStep, 1, 30)); | ||||
|     Add(new cMenuEditBoolItem(tr("Display Reruns in detailed EPG View"), &tmpConfig->displayRerunsDetailEPGView)); | ||||
| @@ -275,8 +286,8 @@ void cMenuSetupScreenLayout::Set(void) { | ||||
|         Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Width of Channel Header (Perc. of osd width)")), &tmpConfig->channelHeaderWidthPercent, 5, 30)); | ||||
|         Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Height of Timeline (Perc. of osd height)")), &tmpConfig->timeLineHeightPercent, 5, 30)); | ||||
|         Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Number of Channels to display")), &tmpConfig->channelRows, 3, 12)); | ||||
|         Add(new cMenuEditBoolItem(*cString::sprintf("%s%s", *indent, tr("Display time in EPG Grids")), &tmpConfig->showTimeInGrid)); | ||||
|     } | ||||
|     Add(new cMenuEditBoolItem(tr("Display time in EPG Grids"), &tmpConfig->showTimeInGrid)); | ||||
|     Add(new cMenuEditIntItem(tr("Height of Headers (Status Header and EPG View, Perc. of osd height)"), &tmpConfig->headerHeightPercent, 10, 50)); | ||||
|     Add(new cMenuEditIntItem(tr("Height of Footer (Perc. of osd height)"), &tmpConfig->footerHeightPercent, 3, 20)); | ||||
|      | ||||
| @@ -401,6 +412,9 @@ cMenuSetupFavorites::cMenuSetupFavorites(cTVGuideConfig* data)  : cMenuSetupSubM | ||||
|     recFolderMode[1] = tr("Select from folder list"); | ||||
|     recFolderMode[2] = tr("Use fixed folder"); | ||||
|     strn0cpy(fixedFolder, data->instRecFixedFolder.c_str(), sizeof(fixedFolder)); | ||||
|     addSubtitleMode[0] = tr("never"); | ||||
|     addSubtitleMode[1] = tr("smart"); | ||||
|     addSubtitleMode[2] = tr("always"); | ||||
|     switchModeItems[0] = (tr("switch")); | ||||
|     switchModeItems[1] = (tr("announce only")); | ||||
|     switchModeItems[2] = (tr("ask for switch")); | ||||
| @@ -411,13 +425,16 @@ void cMenuSetupFavorites::Set(void) { | ||||
|     int currentItem = Current(); | ||||
|     Clear(); | ||||
|  | ||||
|     Add(new cMenuEditStraItem(tr("Folder for instant Recordings"), &tmpConfig->instRecFolderMode, 3,  recFolderMode)); | ||||
|     Add(new cOsdItem(tr("Instant recording:"), osUnknown, false)); | ||||
|     Add(new cMenuEditStraItem(tr("Folder for instant Recordings"), &tmpConfig->instRecFolderMode, 3, recFolderMode)); | ||||
|     if (tmpConfig->instRecFolderMode == eFolderFixed) { | ||||
|         Add(new cMenuEditStrItem(cString::sprintf("%s%s", *indent, tr("Folder")), fixedFolder, sizeof(fixedFolder), trVDR(FileNameChars))); | ||||
|     } | ||||
|     Add(new cMenuEditStraItem(tr("Add episode to manual timers"), &tmpConfig->addSubtitleToTimer, 3, addSubtitleMode)); | ||||
|     if (pRemoteTimers) | ||||
|         Add(new cMenuEditBoolItem(tr("Use Remotetimers"), &tmpConfig->useRemoteTimers)); | ||||
|  | ||||
|     Add(new cMenuEditBoolItem(tr("Show timer confirmation messages"), &tmpConfig->timerMessage)); | ||||
|     Add(new cOsdItem(tr("Favorites:"), osUnknown, false)); | ||||
|     Add(new cMenuEditBoolItem(tr("Limit channels in favorites"), &tmpConfig->favLimitChannels)); | ||||
|     if (tmpConfig->favLimitChannels) { | ||||
|         Add(new cMenuEditChanItem(tr("Start Channel"), &tmpConfig->favStartChannel)); | ||||
| @@ -508,11 +525,11 @@ void cMenuSetupImageCache::Set(void) { | ||||
|     Add(new cMenuEditIntItem(tr("Number of  logos to cache at start"), &tmpConfig->numLogosInitial, 0, 9999)); | ||||
|  | ||||
|     Add(InfoItem(tr("Cache Sizes"), "")); | ||||
|     Add(InfoItem(tr("OSD Element Cache"), (imgCache.GetCacheSize(ctOsdElement)).c_str())); | ||||
|     Add(InfoItem(tr("Logo cache"), (imgCache.GetCacheSize(ctLogo)).c_str())); | ||||
|     Add(InfoItem(tr("EPG Grid Cache"), (imgCache.GetCacheSize(ctGrid)).c_str())); | ||||
|     Add(InfoItem(tr("Channel Groups Cache"), (imgCache.GetCacheSize(ctChannelGroup)).c_str())); | ||||
|     Add(InfoItem(tr("Recording Menus Icon Cache"), (imgCache.GetCacheSize(ctIcon)).c_str())); | ||||
|     Add(InfoItem(tr("OSD Element Cache"), cString::sprintf("\t%s", (imgCache.GetCacheSize(ctOsdElement)).c_str()))); | ||||
|     Add(InfoItem(tr("Logo cache"), cString::sprintf("\t%s", (imgCache.GetCacheSize(ctLogo)).c_str()))); | ||||
|     Add(InfoItem(tr("EPG Grid Cache"), cString::sprintf("\t%s", (imgCache.GetCacheSize(ctGrid)).c_str()))); | ||||
|     Add(InfoItem(tr("Channel Groups Cache"), cString::sprintf("\t%s", (imgCache.GetCacheSize(ctChannelGroup)).c_str()))); | ||||
|     Add(InfoItem(tr("Recording Menus Icon Cache"), cString::sprintf("\t%s", (imgCache.GetCacheSize(ctIcon)).c_str()))); | ||||
|  | ||||
|     SetCurrent(Get(currentItem)); | ||||
|     Display(); | ||||
|   | ||||
							
								
								
									
										1
									
								
								setup.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								setup.h
									
									
									
									
									
								
							| @@ -70,6 +70,7 @@ class cMenuSetupFavorites : public cMenuSetupSubMenu { | ||||
|         char description3[256]; | ||||
|         char description4[256]; | ||||
|         const char * recFolderMode[3]; | ||||
|         const char * addSubtitleMode[3]; | ||||
|         const char * switchModeItems[3]; | ||||
|         char fixedFolder[256]; | ||||
|         void Set(void); | ||||
|   | ||||
							
								
								
									
										214
									
								
								timeline.c
									
									
									
									
									
								
							
							
						
						
									
										214
									
								
								timeline.c
									
									
									
									
									
								
							| @@ -3,66 +3,46 @@ | ||||
|  | ||||
| cTimeLine::cTimeLine(cTimeManager *timeManager) { | ||||
|     this->timeManager = timeManager; | ||||
|     lastClock = ""; | ||||
|     timeBase = NULL; | ||||
|     int x11, x21, y11, y21, x12, x22, y12, y22; | ||||
|     if (config.displayMode == eVertical) { | ||||
|         dateViewer = new cStyledPixmap(osdManager.requestPixmap(1, cRect(0,  | ||||
|                                                                          geoManager.statusHeaderHeight + geoManager.clockHeight,  | ||||
|                                                                          geoManager.dateVieverWidth,  | ||||
|                                                                          geoManager.dateVieverHeight))); | ||||
|         timeline = osdManager.requestPixmap(2, cRect(0,  | ||||
|                                                      geoManager.statusHeaderHeight + geoManager.channelHeaderHeight + geoManager.channelGroupsHeight,  | ||||
|                                                      geoManager.timeLineWidth,  | ||||
|                                                      geoManager.osdHeight - geoManager.statusHeaderHeight - geoManager.channelHeaderHeight - geoManager.channelGroupsHeight - geoManager.footerHeight) | ||||
|                                              , cRect(0, | ||||
|                                                      0,  | ||||
|                                                      geoManager.timeLineWidth,  | ||||
|                                                      1440*geoManager.minutePixel)); | ||||
|         timeBase = osdManager.requestPixmap(3, cRect(0,  | ||||
|                                                      geoManager.statusHeaderHeight + geoManager.channelGroupsHeight + geoManager.channelHeaderHeight,  | ||||
|                                                      geoManager.osdWidth,  | ||||
|                                                      geoManager.timeLineGridHeight)); | ||||
|         x11 = 0; | ||||
|         x21 = geoManager.dateVieverWidth; | ||||
|         y11 = geoManager.statusHeaderHeight + geoManager.clockHeight; | ||||
|         y21 = geoManager.dateVieverHeight; | ||||
|         x12 = 0; | ||||
|         x22 = geoManager.timeLineWidth; | ||||
|         y12 = geoManager.statusHeaderHeight + geoManager.channelHeaderHeight + geoManager.channelGroupsHeight; | ||||
|         y22 = geoManager.osdHeight - geoManager.statusHeaderHeight - geoManager.channelHeaderHeight - geoManager.channelGroupsHeight - geoManager.footerHeight; | ||||
|     } else if (config.displayMode == eHorizontal) { | ||||
|         dateViewer = new cStyledPixmap(osdManager.requestPixmap(1, cRect(geoManager.clockWidth,  | ||||
|                                                                          geoManager.statusHeaderHeight,  | ||||
|                                                                          geoManager.dateVieverWidth, | ||||
|                                                                          geoManager.dateVieverHeight))); | ||||
|         timeline = osdManager.requestPixmap(2, cRect(geoManager.channelHeaderWidth + geoManager.channelGroupsWidth,  | ||||
|                                                      geoManager.statusHeaderHeight,  | ||||
|                                                      geoManager.osdWidth - geoManager.channelHeaderWidth - geoManager.channelGroupsWidth, | ||||
|                                                      geoManager.timeLineHeight) | ||||
|                                              , cRect(0, | ||||
|                                                      0,  | ||||
|                                                      1440*geoManager.minutePixel,  | ||||
|                                                      geoManager.timeLineHeight)); | ||||
|         timeBase = osdManager.requestPixmap(3, cRect(geoManager.channelGroupsWidth + geoManager.channelHeaderWidth,  | ||||
|                                                      geoManager.statusHeaderHeight,  | ||||
|                                                      geoManager.timeLineGridWidth,  | ||||
|                                                      geoManager.timeLineHeight + config.channelRows * geoManager.rowHeight)); | ||||
|         x11 = geoManager.clockWidth; | ||||
|         x21 = geoManager.dateVieverWidth; | ||||
|         y11 = geoManager.statusHeaderHeight; | ||||
|         y21 = geoManager.dateVieverHeight; | ||||
|         x12 = geoManager.channelHeaderWidth + geoManager.channelGroupsWidth; | ||||
|         x22 = geoManager.osdWidth - geoManager.channelHeaderWidth - geoManager.channelGroupsWidth; | ||||
|         y12 = geoManager.statusHeaderHeight; | ||||
|         y22 = geoManager.timeLineHeight; | ||||
|     } | ||||
|     timeBase->Fill(clrTransparent); | ||||
|     int clockY; | ||||
|     int clockX; | ||||
|     if (config.displayMode == eVertical) { | ||||
|        clockY = geoManager.statusHeaderHeight; | ||||
|        clockX = 0; | ||||
|        } | ||||
|     else { | ||||
|        clockY = geoManager.statusHeaderHeight; | ||||
|        clockX = 0; | ||||
|        } | ||||
|     clock = new cStyledPixmap(osdManager.requestPixmap(3, cRect(clockX,  | ||||
|                                                                 clockY,  | ||||
|     dateViewer = new cStyledPixmap(osdManager.requestPixmap(1, cRect(x11, y11, x21, y21))); | ||||
|     timeline = osdManager.requestPixmap(2, cRect(x12, y12, x22, y22)); | ||||
|     clock = new cStyledPixmap(osdManager.requestPixmap(3, cRect(0,  | ||||
|                                                                 geoManager.statusHeaderHeight,  | ||||
|                                                                 geoManager.clockWidth,  | ||||
|                                                                 geoManager.clockHeight))); | ||||
| } | ||||
|  | ||||
| cTimeLine::~cTimeLine(void) { | ||||
|     delete dateViewer; | ||||
|     osdManager.releasePixmap(timeline); | ||||
|     if (clock) | ||||
|        delete clock; | ||||
|     osdManager.releasePixmap(timeBase); | ||||
|     osdManager.releasePixmap(timeline); | ||||
|     if (dateViewer) | ||||
|         delete dateViewer; | ||||
| } | ||||
|  | ||||
| void cTimeLine::drawDateViewer() { | ||||
| void cTimeLine::DrawDateViewer(void) { | ||||
|     cString weekDay = timeManager->GetWeekday(); | ||||
|     cString date = timeManager->GetDate();    | ||||
|     if (config.style != eStyleGraphical) { | ||||
| @@ -96,8 +76,8 @@ void cTimeLine::drawDateViewer() { | ||||
|     } | ||||
| } | ||||
|  | ||||
| void cTimeLine::drawTimeline() { | ||||
|     timeline->SetTile(true); | ||||
| void cTimeLine::DrawTimeline(void) { | ||||
| //    timeline->SetTile(true); | ||||
|     timeline->Fill(clrTransparent); | ||||
|     tColor colorFont, colorBackground; | ||||
|      | ||||
| @@ -109,8 +89,8 @@ void cTimeLine::drawTimeline() { | ||||
|         img1 = imgCache.GetOsdElement(oeTimeline1); | ||||
|         img2 = imgCache.GetOsdElement(oeTimeline2); | ||||
|     } else { | ||||
|         img1 = createBackgroundImage(imgWidth, imgHeight, theme.Color(clrTimeline1), theme.Color(clrTimeline1Blending)); | ||||
|         img2 = createBackgroundImage(imgWidth, imgHeight, theme.Color(clrTimeline2), theme.Color(clrTimeline2Blending)); | ||||
|         img1 = CreateBackgroundImage(imgWidth, imgHeight, theme.Color(clrTimeline1), theme.Color(clrTimeline1Blending)); | ||||
|         img2 = CreateBackgroundImage(imgWidth, imgHeight, theme.Color(clrTimeline2), theme.Color(clrTimeline2Blending)); | ||||
|     } | ||||
|     const cImage *img = NULL; | ||||
|     if (!img1 || !img2) | ||||
| @@ -118,8 +98,19 @@ void cTimeLine::drawTimeline() { | ||||
|     int textWidth, posX, posY; | ||||
|     char timetext[10]; | ||||
|      | ||||
|     for (int i=0; i<48; i++) { | ||||
|         if (i%2==0) { | ||||
|     int halfHours; | ||||
|     if (config.displayMode == eVertical) | ||||
|         halfHours = config.displayTime / 30 + 1; | ||||
|     else | ||||
|         halfHours = config.displayHorizontalTime / 30 + 1; | ||||
|  | ||||
|     time_t tStart = timeManager->GetStart(); | ||||
|     tm *t = localtime ( &tStart ); | ||||
|  | ||||
|     int x = 2 * t->tm_hour + ((t->tm_min == 0) ? 0 : 1); | ||||
|     for (int j = x; j < (x + halfHours); j++) { | ||||
|         int i = (j >= 48) ? (j - 48) : j; | ||||
|         if (i % 2 == 0) { | ||||
|             img = img1; | ||||
|             colorFont = theme.Color(clrTimeline2); | ||||
|             colorBackground = (config.style == eStyleFlat)?theme.Color(clrTimeline1):clrTransparent; | ||||
| @@ -127,11 +118,11 @@ void cTimeLine::drawTimeline() { | ||||
|                 if (i == 0) | ||||
|                     sprintf(timetext, "12:00 PM"); | ||||
|                 else if (i/2 < 13) | ||||
|                     sprintf(timetext, "%d:00 AM", i/2); | ||||
|                     sprintf(timetext, "%d:00 AM", i / 2); | ||||
|                 else  | ||||
|                     sprintf(timetext, "%d:00 PM", i/2-12); | ||||
|                     sprintf(timetext, "%d:00 PM", i / 2 - 12); | ||||
|             } else { | ||||
|                 sprintf(timetext, "%d:00", i/2); | ||||
|                 sprintf(timetext, "%d:00", i / 2); | ||||
|             } | ||||
|         } else { | ||||
|             img = img2; | ||||
| @@ -141,38 +132,38 @@ void cTimeLine::drawTimeline() { | ||||
|                 if (i == 1) | ||||
|                     sprintf(timetext, "12:30 PM"); | ||||
|                 else if (i/2 < 13) | ||||
|                     sprintf(timetext, "%d:30 AM", i/2); | ||||
|                     sprintf(timetext, "%d:30 AM", i / 2); | ||||
|                 else  | ||||
|                     sprintf(timetext, "%d:30 PM", i/2-12); | ||||
|                     sprintf(timetext, "%d:30 PM", i / 2 - 12); | ||||
|             } else { | ||||
|                 sprintf(timetext, "%d:30", i/2); | ||||
|                 sprintf(timetext, "%d:30", i / 2); | ||||
|             } | ||||
|         } | ||||
|         if (config.displayMode == eVertical) { | ||||
|             posY = i*geoManager.minutePixel*30; | ||||
|             posY = (j - x) * geoManager.minutePixel * 30; | ||||
|             timeline->DrawImage(cPoint(0, posY), *img); | ||||
|             if (config.style != eStyleGraphical) { | ||||
|                 decorateTile(0, posY, imgWidth+2, imgHeight); | ||||
|                 DecorateTile(0, posY, imgWidth + 2, imgHeight); | ||||
|             } | ||||
|             textWidth = fontManager.FontTimeLineTime->Width(timetext); | ||||
|             timeline->DrawText(cPoint((geoManager.timeLineWidth-textWidth)/2, posY + 5), timetext, colorFont, colorBackground, fontManager.FontTimeLineTime); | ||||
|             timeline->DrawText(cPoint((geoManager.timeLineWidth-textWidth) / 2, posY + 5), timetext, colorFont, colorBackground, fontManager.FontTimeLineTime); | ||||
|         } else if (config.displayMode == eHorizontal) { | ||||
|             posX = i*geoManager.minutePixel*30; | ||||
|             posX = (j - x) * geoManager.minutePixel * 30; | ||||
|             timeline->DrawImage(cPoint(posX, 0), *img); | ||||
|             if (config.style != eStyleGraphical) { | ||||
|                 decorateTile(posX, 0, imgWidth, imgHeight+2); | ||||
|                 DecorateTile(posX, 0, imgWidth, imgHeight + 2); | ||||
|             } | ||||
|             timeline->DrawText(cPoint(posX + 15, (dateViewer->Height() - fontManager.FontTimeLineTimeHorizontal->Height())/2), timetext, colorFont, colorBackground, fontManager.FontTimeLineTimeHorizontal); | ||||
|             timeline->DrawText(cPoint(posX + 15, (dateViewer->Height() - fontManager.FontTimeLineTimeHorizontal->Height()) / 2), timetext, colorFont, colorBackground, fontManager.FontTimeLineTimeHorizontal); | ||||
|        } | ||||
|     } | ||||
|     setTimeline(); | ||||
|     DrawTimeIndicator(); | ||||
|     if (config.style != eStyleGraphical) { | ||||
|         delete img1; | ||||
|         delete img2; | ||||
|     } | ||||
| } | ||||
|  | ||||
| void cTimeLine::decorateTile(int posX, int posY, int tileWidth, int tileHeight) { | ||||
| void cTimeLine::DecorateTile(int posX, int posY, int tileWidth, int tileHeight) { | ||||
|     timeline->DrawRectangle(cRect(posX,posY,tileWidth,2), clrTransparent);          //top | ||||
|     timeline->DrawRectangle(cRect(posX,posY,2,tileHeight), clrTransparent);         //left | ||||
|     timeline->DrawRectangle(cRect(posX,posY + tileHeight-2,tileWidth,2), clrTransparent);   //bottom | ||||
| @@ -185,11 +176,11 @@ void cTimeLine::decorateTile(int posX, int posY, int tileWidth, int tileHeight) | ||||
|      | ||||
|     if (config.roundedCorners) { | ||||
|         int borderRadius = 12; | ||||
|         drawRoundedCorners(posX, posY, tileWidth, tileHeight, borderRadius); | ||||
|         DrawRoundedCorners(posX, posY, tileWidth, tileHeight, borderRadius); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void cTimeLine::drawRoundedCorners(int posX, int posY, int width, int height, int radius) { | ||||
| void cTimeLine::DrawRoundedCorners(int posX, int posY, int width, int height, int radius) { | ||||
|     timeline->DrawEllipse(cRect(posX+2,posY+2,radius,radius), theme.Color(clrBorder), -2); | ||||
|     timeline->DrawEllipse(cRect(posX+1,posY+1,radius,radius), clrTransparent, -2); | ||||
|  | ||||
| @@ -205,21 +196,34 @@ void cTimeLine::drawRoundedCorners(int posX, int posY, int width, int height, in | ||||
|     } | ||||
| } | ||||
|  | ||||
| void cTimeLine::drawCurrentTimeBase(void) { | ||||
|     timeBase->Fill(clrTransparent); | ||||
|     bool nowVisible = timeManager->NowVisible(); | ||||
|     if (!nowVisible) | ||||
| void cTimeLine::DrawTimeIndicator(void) { | ||||
|     if (!config.displayTimeBase) | ||||
|         return; | ||||
|     int deltaTime = (timeManager->GetNow() - timeManager->GetStart()) / 60 * geoManager.minutePixel; | ||||
|     if (config.displayMode == eVertical) { | ||||
|         timeBase->DrawRectangle(cRect(0, deltaTime - 2, timeBase->ViewPort().Width(), 4), theme.Color(clrTimeBase)); | ||||
|     } else { | ||||
|         timeBase->DrawRectangle(cRect(deltaTime-2, 0, 4, timeBase->ViewPort().Height()), theme.Color(clrTimeBase)); | ||||
|     if (!timeManager->NowVisible()) { | ||||
|        if (timeBase) | ||||
|           timeBase->Fill(clrTransparent); | ||||
|        return; | ||||
|     } | ||||
|     int deltaTime = (time(0) - timeManager->GetStart()) / 60 * geoManager.minutePixel; | ||||
|     osdManager.releasePixmap(timeBase); | ||||
|     int x1, x2, y1, y2; | ||||
|     if (config.displayMode == eVertical) { | ||||
|        x1 = 0; | ||||
|        y1 = geoManager.statusHeaderHeight + geoManager.channelGroupsHeight + geoManager.channelHeaderHeight + deltaTime - 2; | ||||
|        x2 = geoManager.osdWidth; | ||||
|        y2 = 4; | ||||
|     } else { | ||||
|        x1 = geoManager.channelGroupsWidth + geoManager.channelHeaderWidth + deltaTime - 2; | ||||
|        y1 = geoManager.statusHeaderHeight; | ||||
|        x2 = 4; | ||||
|        y2 = geoManager.timeLineHeight + config.channelRows * geoManager.rowHeight; | ||||
|     } | ||||
|     timeBase = osdManager.requestPixmap(3, cRect(x1, y1, x2, y2)); | ||||
|     timeBase->Fill(clrTransparent); | ||||
|     timeBase->DrawRectangle(cRect(0, 0, timeBase->ViewPort().Width(), timeBase->ViewPort().Height()), theme.Color(clrTimeBase)); | ||||
| } | ||||
|  | ||||
|  | ||||
| cImage *cTimeLine::createBackgroundImage(int width, int height, tColor clrBgr, tColor clrBlend) { | ||||
| cImage *cTimeLine::CreateBackgroundImage(int width, int height, tColor clrBgr, tColor clrBlend) { | ||||
|     cImage *image = NULL; | ||||
|     if (config.style == eStyleBlendingDefault) { | ||||
|         image = new cImage(cSize(width, height)); | ||||
| @@ -248,35 +252,25 @@ cImage *cTimeLine::createBackgroundImage(int width, int height, tColor clrBgr, t | ||||
|     return image; | ||||
| } | ||||
|  | ||||
| void cTimeLine::setTimeline() { | ||||
|     int offset = timeManager->GetTimelineOffset(); | ||||
|     int xNew, yNew; | ||||
|     if (config.displayMode == eVertical) { | ||||
|         xNew = 0; | ||||
|         yNew = -offset*geoManager.minutePixel; | ||||
|     } else if (config.displayMode == eHorizontal) { | ||||
|         xNew = -offset*geoManager.minutePixel; | ||||
|         yNew = 0; | ||||
|     } | ||||
|     timeline->SetDrawPortPoint(cPoint(xNew, yNew)); | ||||
|     if (config.displayTimeBase) | ||||
|         drawCurrentTimeBase(); | ||||
| } | ||||
|  | ||||
| void cTimeLine::drawClock() { | ||||
|     if (config.displayMode == eVertical) | ||||
|        clock->Fill(clrTransparent); | ||||
| bool cTimeLine::DrawClock(void) { | ||||
|     cString currentTime = timeManager->GetCurrentTime(); | ||||
|     const cFont *font = (config.displayMode == eVertical)?fontManager.FontTimeLineTime:fontManager.FontTimeLineTimeHorizontal; | ||||
|     int textHeight = font->Height(); | ||||
|     int clockTextWidth = font->Width(*currentTime); | ||||
|     tColor colorFontBack = (config.style == eStyleFlat)?theme.Color(clrHeader):clrTransparent; | ||||
|     if (config.style == eStyleGraphical) { | ||||
|        clock->drawBackgroundGraphical(bgClock); | ||||
|     } else { | ||||
|        clock->setColor(theme.Color(clrHeader), theme.Color(clrHeaderBlending)); | ||||
|        clock->drawBackground(); | ||||
|        clock->drawBorder(); | ||||
|     if (strcmp(currentTime, lastClock)) { | ||||
|        clock->Fill(clrTransparent); | ||||
|        const cFont *font = (config.displayMode == eVertical) ? fontManager.FontTimeLineTime : fontManager.FontTimeLineTimeHorizontal; | ||||
|        int textHeight = font->Height(); | ||||
|        int clockTextWidth = font->Width(*currentTime); | ||||
|        tColor colorFontBack = (config.style == eStyleFlat) ? theme.Color(clrHeader) : clrTransparent; | ||||
|        if (config.style == eStyleGraphical) { | ||||
|           clock->drawBackgroundGraphical(bgClock); | ||||
|        } else { | ||||
|           clock->setColor(theme.Color(clrHeader), theme.Color(clrHeaderBlending)); | ||||
|           clock->drawBackground(); | ||||
|           clock->drawBorder(); | ||||
|        } | ||||
|        clock->DrawText(cPoint((geoManager.clockWidth - clockTextWidth) / 2, (geoManager.clockHeight - textHeight) / 2), *currentTime, theme.Color(clrFont), colorFontBack, font); | ||||
|        lastClock = currentTime; | ||||
|        DrawTimeIndicator(); | ||||
|        return true; | ||||
|     } | ||||
|     clock->DrawText(cPoint((geoManager.clockWidth-clockTextWidth)/2, (geoManager.clockHeight-textHeight)/2), *currentTime, theme.Color(clrFont), colorFontBack, font); | ||||
|     return false; | ||||
| } | ||||
|   | ||||
							
								
								
									
										16
									
								
								timeline.h
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								timeline.h
									
									
									
									
									
								
							| @@ -13,17 +13,17 @@ private: | ||||
|     cPixmap *timeline; | ||||
|     cStyledPixmap *clock; | ||||
|     cPixmap *timeBase; | ||||
|     void decorateTile(int posX, int posY, int tileWidth, int tileHeight); | ||||
|     void drawRoundedCorners(int posX, int posY, int width, int height, int radius); | ||||
|     cImage *createBackgroundImage(int width, int height, tColor clrBgr, tColor clrBlend); | ||||
|     void drawCurrentTimeBase(void); | ||||
|     cString lastClock; | ||||
|     void DecorateTile(int posX, int posY, int tileWidth, int tileHeight); | ||||
|     void DrawRoundedCorners(int posX, int posY, int width, int height, int radius); | ||||
|     cImage *CreateBackgroundImage(int width, int height, tColor clrBgr, tColor clrBlend); | ||||
| public: | ||||
|     cTimeLine(cTimeManager *timeManager); | ||||
|     virtual ~cTimeLine(void); | ||||
|     void setTimeline(); | ||||
|     void drawDateViewer(); | ||||
|     void drawTimeline(); | ||||
|     void drawClock(); | ||||
|     void DrawDateViewer(void); | ||||
|     void DrawTimeline(void); | ||||
|     void DrawTimeIndicator(void); | ||||
|     bool DrawClock(void); | ||||
| }; | ||||
|  | ||||
| #endif //__TVGUIDE_TIMELINE_H | ||||
|   | ||||
| @@ -3,6 +3,14 @@ | ||||
| #include "config.h" | ||||
| #include "timemanager.h" | ||||
|  | ||||
| cTimeManager::cTimeManager(void) { | ||||
|     if (config.displayMode == eVertical) { | ||||
|         displaySeconds = (geoManager.osdHeight - geoManager.statusHeaderHeight - geoManager.channelHeaderHeight - geoManager.channelGroupsHeight - geoManager.footerHeight) / geoManager.minutePixel * 60; | ||||
|     } else if (config.displayMode == eHorizontal) { | ||||
|         displaySeconds = (geoManager.osdWidth - geoManager.channelHeaderWidth - geoManager.channelGroupsWidth) / geoManager.minutePixel * 60; | ||||
|     } | ||||
| } | ||||
|  | ||||
| cTimeManager::~cTimeManager(void) { | ||||
| } | ||||
|  | ||||
| @@ -18,40 +26,32 @@ void cTimeManager::Now() { | ||||
|     t = time(0); | ||||
|     tStart = t; | ||||
|     tStart = GetRounded(); | ||||
|     if (config.displayMode == eVertical) { | ||||
|         tEnd = tStart + (geoManager.osdHeight - geoManager.statusHeaderHeight - geoManager.channelHeaderHeight - geoManager.channelGroupsHeight - geoManager.footerHeight)/geoManager.minutePixel*60; | ||||
|     } else if (config.displayMode == eHorizontal) { | ||||
|         tEnd = tStart + (geoManager.osdWidth - geoManager.channelHeaderWidth - geoManager.channelGroupsWidth)/geoManager.minutePixel*60; | ||||
|     } | ||||
|     tEnd   = tStart + displaySeconds; | ||||
| } | ||||
|  | ||||
| void cTimeManager::AddStep(int step) { | ||||
|     tStart += step*60; | ||||
|     tEnd  += step*60; | ||||
|     tStart += step * 60; | ||||
|     tEnd    = tStart + displaySeconds; | ||||
| } | ||||
|  | ||||
| bool cTimeManager::DelStep(int step) { | ||||
|     if ((tStart - step*60)+30*60 < t) { | ||||
|         return true; | ||||
| void cTimeManager::DelStep(int step) { | ||||
|     if ((tStart - step * 60) + 30 * 60 < t) { | ||||
|         Now(); | ||||
|     } else { | ||||
|         tStart -= step * 60; | ||||
|         tEnd    = tStart + displaySeconds; | ||||
|     } | ||||
|     tStart -= step*60; | ||||
|     tEnd -= step*60; | ||||
|     return false; | ||||
| } | ||||
|  | ||||
| void cTimeManager::SetTime(time_t newTime) { | ||||
|     tStart = newTime; | ||||
|     if (config.displayMode == eVertical) { | ||||
|         tEnd = tStart + (geoManager.osdHeight - geoManager.statusHeaderHeight - geoManager.channelHeaderHeight - geoManager.channelGroupsHeight - geoManager.footerHeight)/geoManager.minutePixel*60; | ||||
|     } else if (config.displayMode == eHorizontal) { | ||||
|         tEnd = tStart + (geoManager.osdWidth - geoManager.channelHeaderWidth - geoManager.channelGroupsWidth)/geoManager.minutePixel*60; | ||||
|     } | ||||
|     tEnd   = tStart + displaySeconds; | ||||
| } | ||||
|  | ||||
| time_t cTimeManager::getPrevPrimetime(time_t current) { | ||||
|     tm *st = localtime(¤t); | ||||
|     if (st->tm_hour < 21) { | ||||
|         current -= 24 * 60* 60; | ||||
|         current -= 24 * 60 * 60; | ||||
|         st = localtime(¤t); | ||||
|     } | ||||
|     st->tm_hour = 20; | ||||
| @@ -63,7 +63,7 @@ time_t cTimeManager::getPrevPrimetime(time_t current) { | ||||
| time_t cTimeManager::getNextPrimetime(time_t current){ | ||||
|     tm *st = localtime(¤t); | ||||
|     if (st->tm_hour > 19) { | ||||
|         current += 24 * 60* 60; | ||||
|         current += 24 * 60 * 60; | ||||
|         st = localtime(¤t); | ||||
|     } | ||||
|     st->tm_hour = 20; | ||||
|   | ||||
| @@ -2,6 +2,7 @@ | ||||
| #define __TVGUIDE_TIMEMANAGER_H | ||||
|  | ||||
| #include <vdr/tools.h> | ||||
| #include "config.h" | ||||
|  | ||||
| // --- cTimeManager -------------------------------------------------------------  | ||||
|  | ||||
| @@ -10,14 +11,16 @@ class cTimeManager { | ||||
|         time_t t; | ||||
|         time_t tStart; | ||||
|         time_t tEnd; | ||||
|         int displaySeconds; | ||||
|         eTimeFormat timeFormat; | ||||
|     public: | ||||
|         cTimeManager(){}; | ||||
|         cTimeManager(); | ||||
|         virtual ~cTimeManager(void); | ||||
|         static cString printTime(time_t displayTime); | ||||
|         void Now(); | ||||
|         time_t GetNow() { return t; }; | ||||
|         void AddStep(int step); | ||||
|         bool DelStep(int step); | ||||
|         void DelStep(int step); | ||||
|         void SetTime(time_t newTime); | ||||
|         time_t Get() {return t;}; | ||||
|         time_t GetStart() {return tStart;}; | ||||
| @@ -31,6 +34,7 @@ class cTimeManager { | ||||
|         int GetTimelineOffset(); | ||||
|         time_t GetRounded(); | ||||
|         bool NowVisible(void); | ||||
|         int GetDisplaySeconds(void) { return displaySeconds; }; | ||||
|         void debug(); | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -16,12 +16,11 @@ cTVGuideTimerConflict::cTVGuideTimerConflict(void) { | ||||
| } | ||||
|  | ||||
| cTVGuideTimerConflict::~cTVGuideTimerConflict(void) { | ||||
|  | ||||
| } | ||||
|  | ||||
| bool cTVGuideTimerConflict::timerInvolved(int involvedID) { | ||||
|     int numConflicts = timerIDs.size(); | ||||
|     for (int i=0; i<numConflicts; i++) { | ||||
|     for (int i = 0; i < numConflicts; i++) { | ||||
|         if (timerIDs[i] == involvedID) | ||||
|             return true; | ||||
|     } | ||||
| @@ -44,13 +43,12 @@ cTVGuideTimerConflicts::~cTVGuideTimerConflicts(void) { | ||||
| } | ||||
|  | ||||
| void cTVGuideTimerConflicts::AddConflict(std::string epgSearchConflictLine) { | ||||
| 	/* TIMERCONFLICT FORMAT: | ||||
|     /* TIMERCONFLICT FORMAT: | ||||
|     The result list looks like this for example when we have 2 timer conflicts at one time: | ||||
|     1190232780:152|30|50#152#45:45|10|50#152#45 | ||||
|     '1190232780' is the time of the conflict in seconds since 1970-01-01.  | ||||
|     It's followed by list of timers that have a conflict at this time: | ||||
|     '152|30|50#1    int editTimer(cTimer *timer, bool active, int prio, int start, int stop); | ||||
|     52#45' is the description of the first conflicting timer. Here: | ||||
|     '152|30|50#152#45' is the description of the first conflicting timer. Here: | ||||
|     '152' is VDR's timer id of this timer as returned from VDR's LSTT command | ||||
|     '30' is the percentage of recording that would be done (0...100) | ||||
|     '50#152#45' is the list of concurrent timers at this conflict | ||||
| @@ -86,11 +84,13 @@ void cTVGuideTimerConflicts::CalculateConflicts(void) { | ||||
| #if VDRVERSNUM >= 20301 | ||||
|         LOCK_TIMERS_READ; | ||||
|         const cTimers* timers = Timers; | ||||
|         for (int j=0; j < numTimers; j++) { | ||||
|             const cTimer *timer = timers->GetById(conflicts[i]->timerIDs[j] + 1); | ||||
| #else | ||||
|         const cTimers* timers = &Timers; | ||||
| #endif | ||||
|         for (int j=0; j < numTimers; j++) { | ||||
|             const cTimer *timer = timers->Get(conflicts[i]->timerIDs[j]); | ||||
| #endif | ||||
|             if (timer) { | ||||
|                 if (!unionSet) { | ||||
|                     unionSet = new cTimeInterval(timer->StartTime(), timer->StopTime()); | ||||
| @@ -109,7 +109,11 @@ void cTVGuideTimerConflicts::CalculateConflicts(void) { | ||||
|          | ||||
|         cTimeInterval *intersect = NULL; | ||||
|         for (int j=0; j < numTimers; j++) { | ||||
| #if VDRVERSNUM >= 20301 | ||||
|             const cTimer *timer = timers->GetById(conflicts[i]->timerIDs[j] + 1); | ||||
| #else | ||||
|             const cTimer *timer = timers->Get(conflicts[i]->timerIDs[j]); | ||||
| #endif | ||||
|             if (timer) { | ||||
|                 if (!intersect) { | ||||
|                     intersect = new cTimeInterval(timer->StartTime(), timer->StopTime()); | ||||
| @@ -152,7 +156,7 @@ int cTVGuideTimerConflicts::GetCurrentConflictTimerID(int timerIndex) { | ||||
| int cTVGuideTimerConflicts::GetCorrespondingConflict(int timerID) { | ||||
|     int conflictIndex = -1; | ||||
|     if (numConflicts > 0) { | ||||
|         for (int i=0; i<numConflicts; i++) { | ||||
|         for (int i = 0; i < numConflicts; i++) { | ||||
|             if (conflicts[i]->timerInvolved(timerID)) { | ||||
|                 conflictIndex = i; | ||||
|                 break; | ||||
| @@ -172,7 +176,7 @@ cTVGuideTimerConflict *cTVGuideTimerConflicts::GetConflict(int conflictIndex) { | ||||
|  | ||||
| std::vector<cTVGuideTimerConflict*> cTVGuideTimerConflicts::GetConflictsBetween(time_t start, time_t stop) { | ||||
|     std::vector<cTVGuideTimerConflict*> conflictsFound; | ||||
|     for (int i=0; i < numConflicts; i++) { | ||||
|     for (int i = 0; i < numConflicts; i++) { | ||||
|         if ((conflicts[i]->timeStart > start) && (conflicts[i]->timeStart < stop)|| | ||||
|             (conflicts[i]->timeStop  > start) && (conflicts[i]->timeStop < stop)) | ||||
|             conflictsFound.push_back(conflicts[i]); | ||||
|   | ||||
							
								
								
									
										69
									
								
								tools.c
									
									
									
									
									
								
							
							
						
						
									
										69
									
								
								tools.c
									
									
									
									
									
								
							| @@ -10,7 +10,6 @@ | ||||
| #include <vdr/plugin.h> | ||||
| #include <vdr/skins.h> | ||||
| #include "services/epgsearch.h" | ||||
|  | ||||
| #include "tools.h" | ||||
|  | ||||
| cPlugin *GetScraperPlugin(void) { | ||||
| @@ -23,32 +22,49 @@ cPlugin *GetScraperPlugin(void) { | ||||
| /**************************************************************************************** | ||||
| *            CUTTEXT | ||||
| ****************************************************************************************/ | ||||
| std::string CutText(std::string text, int width, const cFont *font) { | ||||
|     if (width <= font->Size()) | ||||
|         return text.c_str(); | ||||
|     if (font->Width(text.c_str()) < width) | ||||
|         return text.c_str(); | ||||
|     cTextWrapper twText; | ||||
|     twText.Set(text.c_str(), font, width); | ||||
|     std::string cuttedTextNative = twText.GetLine(0); | ||||
|     std::stringstream sstrText; | ||||
|     sstrText << cuttedTextNative << "..."; | ||||
|     std::string cuttedText = sstrText.str(); | ||||
|     int actWidth = font->Width(cuttedText.c_str()); | ||||
|     if (actWidth > width) { | ||||
|         int overlap = actWidth - width; | ||||
|         int charWidth = font->Width("."); | ||||
|         if (charWidth == 0) | ||||
|             charWidth = 1; | ||||
|         int cutChars = overlap / charWidth; | ||||
|         if (cutChars > 0) { | ||||
|             cuttedTextNative = cuttedTextNative.substr(0, cuttedTextNative.length() - cutChars); | ||||
|             std::stringstream sstrText2; | ||||
|             sstrText2 << cuttedTextNative << "..."; | ||||
|             cuttedText = sstrText2.str(); | ||||
|         } | ||||
| std::string utf8_substr(const std::string& str, unsigned int start, long unsigned int leng) { | ||||
|     if (leng==0) { return ""; } | ||||
|     unsigned int c, i, ix, q; | ||||
|     long unsigned int min=std::string::npos, max=std::string::npos; | ||||
|     for (q=0, i=0, ix=str.length(); i < ix; i++, q++) { | ||||
|         if (q==start){ min=i; } | ||||
|         if (q<=start+leng || leng==std::string::npos){ max=i; } | ||||
|  | ||||
|         c = (unsigned char) str[i]; | ||||
|         if      (c>=0   && c<=127) i+=0; | ||||
|         else if ((c & 0xE0) == 0xC0) i+=1; | ||||
|         else if ((c & 0xF0) == 0xE0) i+=2; | ||||
|         else if ((c & 0xF8) == 0xF0) i+=3; | ||||
|         //else if (($c & 0xFC) == 0xF8) i+=4; // 111110bb //byte 5, unnecessary in 4 byte UTF-8 | ||||
|         //else if (($c & 0xFE) == 0xFC) i+=5; // 1111110b //byte 6, unnecessary in 4 byte UTF-8 | ||||
|         else return "";//invalid utf8 | ||||
|     } | ||||
|     if (q<=start+leng || leng==std::string::npos){ max=i; } | ||||
|     if (min==std::string::npos || max==std::string::npos) { return ""; } | ||||
|     return str.substr(min,max-min); | ||||
| } | ||||
|  | ||||
| std::string CutText(std::string text, int width, const cFont *font) { | ||||
|     int actWidth = font->Width(text.c_str()); | ||||
|     if (actWidth <= width) { | ||||
|         return text.c_str(); | ||||
|     } else { | ||||
|         int i = std::max(width / font->Size(), 1) - 1; | ||||
|         std::string cuttext, oldtext; | ||||
|         cuttext = utf8_substr(text, 0, i); | ||||
|         do { | ||||
|             oldtext = cuttext; | ||||
|             i++; | ||||
|             cuttext = utf8_substr(text, 0, i); | ||||
|             std::stringstream sstrText; | ||||
|             sstrText << cuttext << "..."; | ||||
|             actWidth = font->Width(sstrText.str().c_str()); | ||||
|         } | ||||
|         while (actWidth < width); | ||||
|         std::stringstream sstrText2; | ||||
|         sstrText2 << oldtext << "..."; | ||||
|         return sstrText2.str(); | ||||
|     } | ||||
|     return cuttedText; | ||||
| } | ||||
|  | ||||
| /**************************************************************************************** | ||||
| @@ -113,7 +129,6 @@ void ReadRecordingDirectories(std::vector<std::string> *folders, cList<cNestedIt | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| /**************************************************************************************** | ||||
| *            DrawRoundedCorners | ||||
| ****************************************************************************************/ | ||||
|   | ||||
							
								
								
									
										1
									
								
								tools.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								tools.h
									
									
									
									
									
								
							| @@ -9,6 +9,7 @@ | ||||
|  | ||||
| cPlugin *GetScraperPlugin(void); | ||||
|  | ||||
| std::string utf8_substr(const std::string& str, unsigned int start=0, long unsigned int leng=std::string::npos); | ||||
| std::string CutText(std::string text, int width, const cFont *font); | ||||
| std::string StrToLowerCase(std::string str); | ||||
| std::string GetDirectoryFromTimer(std::string file); | ||||
|   | ||||
| @@ -12,6 +12,7 @@ | ||||
| #include <vdr/plugin.h> | ||||
| #include <vdr/device.h> | ||||
| #include <vdr/menu.h> | ||||
| #include <Magick++.h> | ||||
|  | ||||
| #define DEFINE_CONFIG 1 | ||||
| #include "geometrymanager.h" | ||||
| @@ -26,7 +27,7 @@ | ||||
| #error "VDR-2.0.0 API version or greater is required!" | ||||
| #endif | ||||
|  | ||||
| static const char *VERSION        = "1.2.10"; | ||||
| static const char *VERSION        = "1.3.3"; | ||||
| static const char *DESCRIPTION    = tr("A fancy 2d EPG Viewer"); | ||||
| static const char *MAINMENUENTRY  = "Tvguide"; | ||||
|  | ||||
| @@ -93,6 +94,10 @@ bool cPluginTvguide::ProcessArgs(int argc, char *argv[]) { | ||||
|   return true; | ||||
| } | ||||
|  | ||||
| __attribute__((constructor)) static void init(void) { | ||||
|    Magick::InitializeMagick(NULL); | ||||
| } | ||||
|  | ||||
| bool cPluginTvguide::Initialize(void) { | ||||
|     config.SetDefaultPathes(); | ||||
|     config.LoadTheme(); | ||||
|   | ||||
							
								
								
									
										99
									
								
								tvguideosd.c
									
									
									
									
									
								
							
							
						
						
									
										99
									
								
								tvguideosd.c
									
									
									
									
									
								
							| @@ -112,9 +112,9 @@ void cTvGuideOsd::drawOsd() { | ||||
|         statusHeader->ScaleVideo(); | ||||
|     } | ||||
|     timeLine = new cTimeLine(timeManager); | ||||
|     timeLine->drawDateViewer(); | ||||
|     timeLine->drawTimeline(); | ||||
|     timeLine->drawClock(); | ||||
|     timeLine->DrawDateViewer(); | ||||
|     timeLine->DrawTimeline(); | ||||
|     timeLine->DrawClock(); | ||||
|     channelGroups = new cChannelGroups(); | ||||
|     channelGroups->ReadChannelGroups(); | ||||
|     footer = new cFooter(channelGroups); | ||||
| @@ -195,7 +195,7 @@ void cTvGuideOsd::drawGridsChannelJump(int offset) { | ||||
|     } | ||||
| } | ||||
|  | ||||
| void cTvGuideOsd::drawGridsTimeJump() { | ||||
| void cTvGuideOsd::drawGridsTimeJump(bool last) { | ||||
|     if (columns.Count() == 0) | ||||
|         return; | ||||
|     cChannelEpg *colActive = NULL; | ||||
| @@ -209,7 +209,7 @@ void cTvGuideOsd::drawGridsTimeJump() { | ||||
|         column->readGrids(); | ||||
|         column->drawGrids(); | ||||
|     } | ||||
|     activeGrid = colActive->getActive(); | ||||
|     activeGrid = colActive->getActive(last); | ||||
|     if (activeGrid) { | ||||
|         activeGrid->SetActive(); | ||||
|         activeGrid->Draw(); | ||||
| @@ -352,7 +352,7 @@ void cTvGuideOsd::channelBack() { | ||||
|  | ||||
| void cTvGuideOsd::timeForward() { | ||||
|     bool actionDone = false; | ||||
|     if ( (timeManager->GetEnd() - activeGrid->EndTime())/60 < 30 ) { | ||||
|     if ((timeManager->GetEnd() - activeGrid->EndTime())/60 < 30 ) { | ||||
|         ScrollForward(); | ||||
|         actionDone = true; | ||||
|     } | ||||
| @@ -372,19 +372,25 @@ void cTvGuideOsd::timeForward() { | ||||
|  | ||||
| void cTvGuideOsd::ScrollForward() { | ||||
|     timeManager->AddStep(config.stepMinutes); | ||||
|     timeLine->drawDateViewer(); | ||||
|     timeLine->drawClock(); | ||||
|     timeLine->setTimeline(); | ||||
|     for (cChannelEpg *column = columns.First(); column; column = columns.Next(column)) { | ||||
|         column->AddNewGridsAtEnd(); | ||||
|         column->ClearOutdatedStart(); | ||||
|         column->drawGrids(); | ||||
|     if (config.useHWAccel) { | ||||
|         drawGridsTimeJump(true); | ||||
|         timeLine->DrawDateViewer(); | ||||
|         timeLine->DrawClock(); | ||||
|         timeLine->DrawTimeline(); | ||||
|     } else { | ||||
|         timeLine->DrawDateViewer(); | ||||
|         timeLine->DrawTimeline(); | ||||
|         for (cChannelEpg *column = columns.First(); column; column = columns.Next(column)) { | ||||
|             column->AddNewGridsAtEnd(); | ||||
|             column->ClearOutdatedStart(); | ||||
|             column->drawGrids(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| void cTvGuideOsd::timeBack() { | ||||
|     bool actionDone = false; | ||||
|     if ( (activeGrid->StartTime() - timeManager->GetStart())/60 < 30 ) { | ||||
|     if ((activeGrid->StartTime() - timeManager->GetStart())/60 < 30 ) { | ||||
|         ScrollBack(); | ||||
|         actionDone = true; | ||||
|     } | ||||
| @@ -404,17 +410,21 @@ void cTvGuideOsd::timeBack() { | ||||
| } | ||||
|  | ||||
| void cTvGuideOsd::ScrollBack() { | ||||
|     bool tooFarInPast = timeManager->DelStep(config.stepMinutes); | ||||
|     if (tooFarInPast) | ||||
|         return; | ||||
|     timeLine->drawDateViewer(); | ||||
|     timeLine->drawClock(); | ||||
|     timeLine->setTimeline(); | ||||
|     for (cChannelEpg *column = columns.First(); column; column = columns.Next(column)) { | ||||
|         column->AddNewGridsAtStart(); | ||||
|         column->ClearOutdatedEnd(); | ||||
|         column->drawGrids(); | ||||
|     }    | ||||
|     timeManager->DelStep(config.stepMinutes); | ||||
|     if (config.useHWAccel) { | ||||
|         drawGridsTimeJump(); | ||||
|         timeLine->DrawDateViewer(); | ||||
|         timeLine->DrawClock(); | ||||
|         timeLine->DrawTimeline(); | ||||
|     } else { | ||||
|         timeLine->DrawDateViewer(); | ||||
|         timeLine->DrawTimeline(); | ||||
|         for (cChannelEpg *column = columns.First(); column; column = columns.Next(column)) { | ||||
|             column->AddNewGridsAtStart(); | ||||
|             column->ClearOutdatedEnd(); | ||||
|             column->drawGrids(); | ||||
|         }    | ||||
|     } | ||||
| } | ||||
|  | ||||
| void cTvGuideOsd::processKeyUp() { | ||||
| @@ -628,24 +638,20 @@ void cTvGuideOsd::processNumKey(int numKey) { | ||||
| void cTvGuideOsd::TimeJump(int mode) { | ||||
|     switch (mode) { | ||||
|         case 1: { | ||||
|             bool tooFarInPast = timeManager->DelStep(config.bigStepHours*60); | ||||
|             if (tooFarInPast) | ||||
|                 return; | ||||
|         } | ||||
|             timeManager->DelStep(((config.displayMode == eVertical) ? config.bigStepHours : config.bigStepHoursHorizontal) * 60); | ||||
|             } | ||||
|             break; | ||||
|         case 3: { | ||||
|             timeManager->AddStep(config.bigStepHours*60); | ||||
|         } | ||||
|             timeManager->AddStep(((config.displayMode == eVertical) ? config.bigStepHours : config.bigStepHoursHorizontal) * 60); | ||||
|             } | ||||
|             break; | ||||
|         case 4: { | ||||
|             bool tooFarInPast = timeManager->DelStep(config.hugeStepHours*60); | ||||
|             if (tooFarInPast) | ||||
|                 return; | ||||
|         } | ||||
|             timeManager->DelStep(((config.displayMode == eVertical) ? config.hugeStepHours : config.hugeStepHoursHorizontal) * 60); | ||||
|             } | ||||
|             break; | ||||
|         case 6: { | ||||
|             timeManager->AddStep(config.hugeStepHours*60); | ||||
|         } | ||||
|             timeManager->AddStep(((config.displayMode == eVertical) ? config.hugeStepHours : config.hugeStepHoursHorizontal) * 60); | ||||
|             } | ||||
|             break; | ||||
|         case 7: { | ||||
|             cTimeManager primeChecker; | ||||
| @@ -654,21 +660,21 @@ void cTvGuideOsd::TimeJump(int mode) { | ||||
|             if (primeChecker.tooFarInPast(prevPrime)) | ||||
|                 return; | ||||
|             timeManager->SetTime(prevPrime); | ||||
|         } | ||||
|             } | ||||
|             break; | ||||
|         case 9: { | ||||
|             cTimeManager primeChecker; | ||||
|             time_t nextPrime = primeChecker.getNextPrimetime(timeManager->GetStart()); | ||||
|             timeManager->SetTime(nextPrime); | ||||
|         } | ||||
|             } | ||||
|             break; | ||||
|         default: | ||||
|             return; | ||||
|     } | ||||
|     drawGridsTimeJump(); | ||||
|     timeLine->drawDateViewer(); | ||||
|     timeLine->drawClock(); | ||||
|     timeLine->setTimeline(); | ||||
|     timeLine->DrawDateViewer(); | ||||
|     timeLine->DrawClock(); | ||||
|     timeLine->DrawTimeline(); | ||||
|     osdManager.flush(); | ||||
| } | ||||
|  | ||||
| @@ -771,11 +777,18 @@ eOSState cTvGuideOsd::ProcessKey(eKeys Key) { | ||||
|             case kYellow:   processKeyYellow(); break; | ||||
|             case kBlue:     state = processKeyBlue(&alreadyUnlocked); break; | ||||
|             case kOk:       state = processKeyOk(&alreadyUnlocked); break; | ||||
|             case kBack:     state=osEnd; break;     | ||||
|             case kBack:     state = osEnd; break;     | ||||
|             case k0 ... k9: processNumKey(Key - k0); break; | ||||
|             case kFastRew:  TimeJump(1); break; // Doesnt work, if used from timeshiftmode | ||||
|             case kFastFwd:  TimeJump(3); break; | ||||
|             case kPrev:     TimeJump(4); break; | ||||
|             case kNext:     TimeJump(6); break; | ||||
|             case kNone:     if (channelJumper) CheckTimeout(); break; | ||||
|             default:        break; | ||||
|         } | ||||
|         if (timeLine->DrawClock()) { | ||||
|             osdManager.flush(); | ||||
|         } | ||||
|     } | ||||
|     if (!alreadyUnlocked) { | ||||
|         cPixmap::Unlock(); | ||||
|   | ||||
| @@ -31,7 +31,7 @@ private: | ||||
|   void drawOsd(); | ||||
|   void readChannels(const cChannel *channelStart); | ||||
|   void drawGridsChannelJump(int offset = 0); | ||||
|   void drawGridsTimeJump(); | ||||
|   void drawGridsTimeJump(bool last = false); | ||||
|   void processKeyUp(); | ||||
|   void processKeyDown(); | ||||
|   void processKeyLeft(); | ||||
|   | ||||
							
								
								
									
										21
									
								
								view.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								view.c
									
									
									
									
									
								
							| @@ -5,7 +5,7 @@ | ||||
| * cView | ||||
| ********************************************************************************************/ | ||||
|  | ||||
| cView::cView(void) { | ||||
| cView::cView(void) : cThread("View") { | ||||
|     activeView = 0; | ||||
|     scrollable = false; | ||||
|     tabbed = false; | ||||
| @@ -113,12 +113,18 @@ void cView::DrawHeader(void) { | ||||
|         } | ||||
|     } | ||||
|     //Date and Time, Title, Subtitle | ||||
|     int textWidthMax = headerWidth - xText - border / 2; | ||||
|     wrapper.Set(title.c_str(), fontHeaderLarge, textWidthMax); | ||||
|     int lineHeight = fontHeaderLarge->Height(); | ||||
|     int textLines = wrapper.Lines(); | ||||
|     int yDateTime = border / 2; | ||||
|     int yTitle = (headerHeight - fontHeaderLarge->Height()) / 2; | ||||
|     int yTitle = (headerHeight - textLines * lineHeight) / 2; | ||||
|     int ySubtitle = headerHeight - fontHeader->Height() - border / 3; | ||||
|     int textWidthMax = headerWidth - xText; | ||||
|  | ||||
|     pixmapHeader->DrawText(cPoint(xText, yDateTime), CutText(dateTime, textWidthMax, fontHeader).c_str(), theme.Color(clrFont), theme.Color(clrStatusHeader), fontHeader); | ||||
|     pixmapHeader->DrawText(cPoint(xText, yTitle), CutText(title, textWidthMax, fontHeaderLarge).c_str(), theme.Color(clrFont), theme.Color(clrStatusHeader), fontHeaderLarge); | ||||
|     for (int i = 0; i < textLines; i++) { | ||||
|         pixmapHeader->DrawText(cPoint(xText, yTitle + i * lineHeight), wrapper.GetLine(i), theme.Color(clrFont), theme.Color(clrStatusHeader), fontHeaderLarge); | ||||
|     } | ||||
|     pixmapHeader->DrawText(cPoint(xText, ySubtitle), CutText(subTitle, textWidthMax, fontHeader).c_str(), theme.Color(clrFont), theme.Color(clrStatusHeader), fontHeader); | ||||
|     //REC Icon | ||||
|     eTimerMatch timerMatch = tmNone;  | ||||
| @@ -481,7 +487,6 @@ bool cView::KeyUp(void) { | ||||
|     if (!scrollable) | ||||
|         return false; | ||||
|     int aktHeight = pixmapContent->DrawPort().Point().Y(); | ||||
| //    int lineHeight = font->Height(); | ||||
|     if (aktHeight >= 0) { | ||||
|         return false; | ||||
|     } | ||||
| @@ -522,7 +527,7 @@ cEPGView::cEPGView(void) : cView() { | ||||
| } | ||||
|  | ||||
| cEPGView::~cEPGView(void) { | ||||
|     Cancel(-1); | ||||
|     Cancel(2); | ||||
|     while (Active()) | ||||
|         cCondWait::SleepMs(10); | ||||
| } | ||||
| @@ -641,7 +646,7 @@ cSeriesView::cSeriesView(int seriesId, int episodeId) : cView() { | ||||
| } | ||||
|  | ||||
| cSeriesView::~cSeriesView(void) { | ||||
|     Cancel(-1); | ||||
|     Cancel(3); | ||||
|     while (Active()) | ||||
|         cCondWait::SleepMs(10); | ||||
| } | ||||
| @@ -863,7 +868,7 @@ cMovieView::cMovieView(int movieId) : cView() { | ||||
| } | ||||
|  | ||||
| cMovieView::~cMovieView(void) { | ||||
|     Cancel(-1); | ||||
|     Cancel(3); | ||||
|     while (Active()) | ||||
|         cCondWait::SleepMs(10); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user