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