mirror of
				https://github.com/rofafor/vdr-plugin-femon.git
				synced 2023-10-10 11:36:53 +00:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | e2fb9e994a | 
							
								
								
									
										7
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								HISTORY
									
									
									
									
									
								
							| @@ -176,3 +176,10 @@ VDR Plugin 'femon' Revision History | ||||
|  | ||||
| - Updated for vdr-1.3.31. | ||||
| - Added preliminary svdrp and service support. | ||||
|  | ||||
| 2005-10-04: Version 0.9.4 | ||||
|  | ||||
| - Updated for vdr-1.3.34. | ||||
| - Added Enigma theme (Thanks to Rolf Hoverath). | ||||
| - Added EgalsTry theme (Thanks to Uwe Hanke). | ||||
| - Added option to disable rounded corners. | ||||
|   | ||||
							
								
								
									
										12
									
								
								femon.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								femon.c
									
									
									
									
									
								
							| @@ -14,8 +14,8 @@ | ||||
| #include "femontools.h" | ||||
| #include "femon.h" | ||||
|  | ||||
| #if VDRVERSNUM && VDRVERSNUM < 10331 | ||||
| #error "You don't exist! Go away!" | ||||
| #if defined(VDRVERSNUM) && VDRVERSNUM < 10334 | ||||
| #error "You don't exist! Go away! Upgrade yourself!" | ||||
| #endif | ||||
|  | ||||
| cPluginFemon::cPluginFemon(void) | ||||
| @@ -80,6 +80,7 @@ bool cPluginFemon::SetupParse(const char *Name, const char *Value) | ||||
|   else if (!strcasecmp(Name, "Position"))       femonConfig.position       = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "OSDHeight"))      femonConfig.osdheight      = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "OSDOffset"))      femonConfig.osdoffset      = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "Skin"))           femonConfig.skin           = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "Theme"))          femonConfig.theme          = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "ShowCASystem"))   femonConfig.showcasystem   = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "RedLimit"))       femonConfig.redlimit       = atoi(Value); | ||||
| @@ -173,10 +174,15 @@ cMenuFemonSetup::cMenuFemonSetup(void) | ||||
|   dispmodes[eFemonModeStream]      = tr("stream"); | ||||
|   dispmodes[eFemonModeAC3]         = tr("AC-3"); | ||||
|  | ||||
|   skins[eFemonSkinClassic]         = tr("Classic"); | ||||
|   skins[eFemonSkinElchi]           = tr("Elchi"); | ||||
|  | ||||
|   themes[eFemonThemeClassic]       = tr("Classic"); | ||||
|   themes[eFemonThemeElchi]         = tr("Elchi"); | ||||
|   themes[eFemonThemeDeepBlue]      = tr("DeepBlue"); | ||||
|   themes[eFemonThemeMoronimo]      = tr("Moronimo"); | ||||
|   themes[eFemonThemeEnigma]        = tr("Enigma"); | ||||
|   themes[eFemonThemeEgalsTry]      = tr("EgalsTry"); | ||||
|  | ||||
|   Setup(); | ||||
| } | ||||
| @@ -189,6 +195,7 @@ void cMenuFemonSetup::Setup(void) | ||||
|   Add(new cMenuEditBoolItem(  tr("Hide main menu entry"),        &femonConfig.hidemenu,       tr("no"),            tr("yes"))); | ||||
|   Add(new cMenuEditBoolItem(  tr("Use syslog output"),           &femonConfig.syslogoutput,   tr("no"),            tr("yes"))); | ||||
|   Add(new cMenuEditStraItem(  tr("Default display mode"),        &femonConfig.displaymode,    eFemonModeMaxNumber, dispmodes)); | ||||
|   Add(new cMenuEditStraItem(  tr("Skin"),                        &femonConfig.skin,           eFemonSkinMaxNumber, skins)); | ||||
|   Add(new cMenuEditStraItem(  tr("Theme"),                       &femonConfig.theme,          eFemonThemeMaxNumber,themes)); | ||||
|   Add(new cMenuEditBoolItem(  tr("Position"),                    &femonConfig.position,       tr("bottom"),        tr("top"))); | ||||
|   Add(new cMenuEditIntItem(   tr("Height"),                      &femonConfig.osdheight,      400,                 500)); | ||||
| @@ -210,6 +217,7 @@ void cMenuFemonSetup::Store(void) | ||||
|   SetupStore("HideMenu",       femonConfig.hidemenu); | ||||
|   SetupStore("SyslogOutput",   femonConfig.syslogoutput); | ||||
|   SetupStore("DisplayMode",    femonConfig.displaymode); | ||||
|   SetupStore("Skin",           femonConfig.skin); | ||||
|   SetupStore("Theme",          femonConfig.theme); | ||||
|   SetupStore("Position",       femonConfig.position); | ||||
|   SetupStore("OSDHeight",      femonConfig.osdheight); | ||||
|   | ||||
							
								
								
									
										3
									
								
								femon.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								femon.h
									
									
									
									
									
								
							| @@ -11,7 +11,7 @@ | ||||
|  | ||||
| #include <vdr/plugin.h> | ||||
|  | ||||
| static const char *VERSION        = "0.9.3"; | ||||
| static const char *VERSION        = "0.9.4"; | ||||
| static const char *DESCRIPTION    = "DVB Signal Information Monitor (OSD)"; | ||||
| static const char *MAINMENUENTRY  = "Signal Information"; | ||||
|  | ||||
| @@ -41,6 +41,7 @@ public: | ||||
| class cMenuFemonSetup : public cMenuSetupPage { | ||||
|   private: | ||||
|     const char *dispmodes[eFemonModeMaxNumber]; | ||||
|     const char *skins[eFemonSkinMaxNumber]; | ||||
|     const char *themes[eFemonThemeMaxNumber]; | ||||
|     virtual void Setup(void); | ||||
|   protected: | ||||
|   | ||||
							
								
								
									
										24
									
								
								femoncfg.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								femoncfg.c
									
									
									
									
									
								
							| @@ -14,6 +14,7 @@ cFemonConfig::cFemonConfig(void) | ||||
| { | ||||
|   hidemenu       = 0; | ||||
|   displaymode    = 0; | ||||
|   skin           = 0; | ||||
|   theme          = 0; | ||||
|   position       = 1; | ||||
|   redlimit       = 33; | ||||
| @@ -77,5 +78,26 @@ const cFemonTheme femonTheme[eFemonThemeMaxNumber] = | ||||
|     0xFFCE7B00, // clrYellow | ||||
|     0xFF336600, // clrGreen | ||||
|   }, | ||||
|   { | ||||
|     // eFemonThemeEnigma | ||||
|     0xB8DEE5FA, // clrBackground | ||||
|     0xB84158BC, // clrTitleBackground | ||||
|     0xFFFFFFFF, // clrTitleText | ||||
|     0xFF000000, // clrActiveText | ||||
|     0xFF000000, // clrInactiveText | ||||
|     0xB8C40000, // clrRed | ||||
|     0xB8C4C400, // clrYellow | ||||
|     0xB800C400, // clrGreen | ||||
|   }, | ||||
|   { | ||||
|     // eFemonThemeEgalsTry | ||||
|     0xCA2B1B9E, // clrBackground | ||||
|     0xDFBEBAC3, // clrTitleBackground | ||||
|     0xFF280249, // clrTitleText | ||||
|     0xFFD4D7DB, // clrActiveText | ||||
|     0xDFCFCFCF, // clrInactiveText | ||||
|     0xFFFF0000, // clrRed | ||||
|     0xFFFCC024, // clrYellow | ||||
|     0xFF20980B, // clrGreen | ||||
|   }, | ||||
| }; | ||||
|  | ||||
|   | ||||
							
								
								
									
										10
									
								
								femoncfg.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								femoncfg.h
									
									
									
									
									
								
							| @@ -24,6 +24,7 @@ public: | ||||
|   cFemonConfig(void); | ||||
|   int hidemenu; | ||||
|   int displaymode; | ||||
|   int skin; | ||||
|   int theme; | ||||
|   int position; | ||||
|   int redlimit; | ||||
| @@ -39,12 +40,21 @@ public: | ||||
|  | ||||
| extern cFemonConfig femonConfig; | ||||
|  | ||||
| enum eFemonSkins | ||||
| { | ||||
|   eFemonSkinClassic, | ||||
|   eFemonSkinElchi, | ||||
|   eFemonSkinMaxNumber | ||||
| }; | ||||
|  | ||||
| enum eFemonThemes | ||||
| { | ||||
|   eFemonThemeClassic, | ||||
|   eFemonThemeElchi, | ||||
|   eFemonThemeDeepBlue, | ||||
|   eFemonThemeMoronimo, | ||||
|   eFemonThemeEnigma, | ||||
|   eFemonThemeEgalsTry, | ||||
|   eFemonThemeMaxNumber | ||||
| }; | ||||
|  | ||||
|   | ||||
							
								
								
									
										162
									
								
								femoni18n.c
									
									
									
									
									
								
							
							
						
						
									
										162
									
								
								femoni18n.c
									
									
									
									
									
								
							| @@ -120,11 +120,11 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Modo di visualizzazione standard", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais  | ||||
|     "", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Oletusn<EFBFBD>ytt<EFBFBD>tila", // suomi | ||||
|     "", // Polski    | ||||
|     "", // Espa<70>ol   | ||||
|     "", // Polski | ||||
|     "", // Espa<70>ol | ||||
|     "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "", // Svenska | ||||
|     "", // Romaneste | ||||
| @@ -141,11 +141,11 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais  | ||||
|     "", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "perus", // suomi | ||||
|     "", // Polski    | ||||
|     "", // Espa<70>ol   | ||||
|     "", // Polski | ||||
|     "", // Espa<70>ol | ||||
|     "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "", // Svenska | ||||
|     "", // Romaneste | ||||
| @@ -162,11 +162,11 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais  | ||||
|     "", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "transponderi", // suomi | ||||
|     "", // Polski    | ||||
|     "", // Espa<70>ol   | ||||
|     "", // Polski | ||||
|     "", // Espa<70>ol | ||||
|     "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "", // Svenska | ||||
|     "", // Romaneste | ||||
| @@ -183,11 +183,11 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais  | ||||
|     "", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "l<EFBFBD>hete", // suomi | ||||
|     "", // Polski    | ||||
|     "", // Espa<70>ol   | ||||
|     "", // Polski | ||||
|     "", // Espa<70>ol | ||||
|     "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "", // Svenska | ||||
|     "", // Romaneste | ||||
| @@ -198,17 +198,38 @@ const tI18nPhrase Phrases[] = { | ||||
|     "voog", // Eesti | ||||
|     "", // Dansk | ||||
|   }, | ||||
|   { "Skin", // English | ||||
|     "Oberfl<EFBFBD>che", // Deutsch | ||||
|     "", // Slovenski | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Ulkoasu", // suomi | ||||
|     "", // Polski | ||||
|     "", // Espa<70>ol   | ||||
|     "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "", // Svenska | ||||
|     "", // Romaneste | ||||
|     "", // Magyar | ||||
|     "", // Catal<61>  | ||||
|     "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian) | ||||
|     "", // Hrvatski (Croatian) | ||||
|     "Kest", // Eesti | ||||
|     "", // Dansk  | ||||
|   }, | ||||
|   { "Theme", // English | ||||
|     "Thema", // Deutsch | ||||
|     "", // Slovenski | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais  | ||||
|     "", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Teema", // suomi | ||||
|     "", // Polski    | ||||
|     "", // Espa<70>ol   | ||||
|     "", // Polski | ||||
|     "", // Espa<70>ol | ||||
|     "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "", // Svenska | ||||
|     "", // Romaneste | ||||
| @@ -225,16 +246,16 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Italiano | ||||
|     "", // Nederlands | ||||
|     "", // Portugu<67>s | ||||
|     "", // Fran<61>ais  | ||||
|     "", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "Klassinen", // suomi | ||||
|     "", // Polski    | ||||
|     "", // Espa<70>ol   | ||||
|     "", // Polski | ||||
|     "", // Espa<70>ol | ||||
|     "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "", // Svenska | ||||
|     "", // Romaneste | ||||
|     "", // Magyar   | ||||
|     "", // Catal<61>   | ||||
|     "", // Magyar | ||||
|     "", // Catal<61> | ||||
|     "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian) | ||||
|     "", // Hrvatski (Croatian) | ||||
|     "Klassikaline", // Eesti | ||||
| @@ -246,16 +267,16 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Elchi", // Italiano | ||||
|     "Elchi", // Nederlands | ||||
|     "Elchi", // Portugu<67>s | ||||
|     "Elchi", // Fran<61>ais  | ||||
|     "Elchi", // Fran<61>ais | ||||
|     "Elchi", // Norsk | ||||
|     "Elchi", // suomi | ||||
|     "Elchi", // Polski    | ||||
|     "Elchi", // Espa<70>ol   | ||||
|     "Elchi", // Polski | ||||
|     "Elchi", // Espa<70>ol | ||||
|     "Elchi", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "Elchi", // Svenska | ||||
|     "Elchi", // Romaneste | ||||
|     "Elchi", // Magyar   | ||||
|     "Elchi", // Catal<61>   | ||||
|     "Elchi", // Magyar | ||||
|     "Elchi", // Catal<61> | ||||
|     "Elchi", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian) | ||||
|     "Elchi", // Hrvatski (Croatian) | ||||
|     "Elchi", // Eesti | ||||
| @@ -267,16 +288,16 @@ const tI18nPhrase Phrases[] = { | ||||
|     "DeepBlue", // Italiano | ||||
|     "DeepBlue", // Nederlands | ||||
|     "DeepBlue", // Portugu<67>s | ||||
|     "DeepBlue", // Fran<61>ais  | ||||
|     "DeepBlue", // Fran<61>ais | ||||
|     "DeepBlue", // Norsk | ||||
|     "DeepBlue", // suomi | ||||
|     "DeepBlue", // Polski    | ||||
|     "DeepBlue", // Espa<70>ol   | ||||
|     "DeepBlue", // Polski | ||||
|     "DeepBlue", // Espa<70>ol | ||||
|     "DeepBlue", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "DeepBlue", // Svenska | ||||
|     "DeepBlue", // Romaneste | ||||
|     "DeepBlue", // Magyar   | ||||
|     "DeepBlue", // Catal<61>   | ||||
|     "DeepBlue", // Magyar | ||||
|     "DeepBlue", // Catal<61> | ||||
|     "DeepBlue", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian) | ||||
|     "DeepBlue", // Hrvatski (Croatian) | ||||
|     "DeepBlue", // Eesti | ||||
| @@ -288,21 +309,63 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Moronimo", // Italiano | ||||
|     "Moronimo", // Nederlands | ||||
|     "Moronimo", // Portugu<67>s | ||||
|     "Moronimo", // Fran<61>ais  | ||||
|     "Moronimo", // Fran<61>ais | ||||
|     "Moronimo", // Norsk | ||||
|     "Moronimo", // suomi | ||||
|     "Moronimo", // Polski    | ||||
|     "Moronimo", // Espa<70>ol   | ||||
|     "Moronimo", // Polski | ||||
|     "Moronimo", // Espa<70>ol | ||||
|     "Moronimo", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "Moronimo", // Svenska | ||||
|     "Moronimo", // Romaneste | ||||
|     "Moronimo", // Magyar   | ||||
|     "Moronimo", // Catal<61>   | ||||
|     "Moronimo", // Magyar | ||||
|     "Moronimo", // Catal<61> | ||||
|     "Moronimo", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian) | ||||
|     "Moronimo", // Hrvatski (Croatian) | ||||
|     "Moronimo", // Eesti | ||||
|     "Moronimo", // Dansk | ||||
|   }, | ||||
|   { "Enigma", // English | ||||
|     "Enigma", // Deutsch | ||||
|     "Enigma", // Slovenski | ||||
|     "Enigma", // Italiano | ||||
|     "Enigma", // Nederlands | ||||
|     "Enigma", // Portugu<67>s | ||||
|     "Enigma", // Fran<61>ais | ||||
|     "Enigma", // Norsk | ||||
|     "Enigma", // suomi | ||||
|     "Enigma", // Polski | ||||
|     "Enigma", // Espa<70>ol | ||||
|     "Enigma", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "Enigma", // Svenska | ||||
|     "Enigma", // Romaneste | ||||
|     "Enigma", // Magyar | ||||
|     "Enigma", // Catal<61> | ||||
|     "Enigma", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian) | ||||
|     "Enigma", // Hrvatski (Croatian) | ||||
|     "Enigma", // Eesti | ||||
|     "Enigma", // Dansk | ||||
|   }, | ||||
|   { "EgalsTry", // English | ||||
|     "EgalsTry", // Deutsch | ||||
|     "EgalsTry", // Slovenski | ||||
|     "EgalsTry", // Italiano | ||||
|     "EgalsTry", // Nederlands | ||||
|     "EgalsTry", // Portugu<67>s | ||||
|     "EgalsTry", // Fran<61>ais | ||||
|     "EgalsTry", // Norsk | ||||
|     "EgalsTry", // suomi | ||||
|     "EgalsTry", // Polski | ||||
|     "EgalsTry", // Espa<70>ol | ||||
|     "EgalsTry", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "EgalsTry", // Svenska | ||||
|     "EgalsTry", // Romaneste | ||||
|     "EgalsTry", // Magyar | ||||
|     "EgalsTry", // Catal<61> | ||||
|     "EgalsTry", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian) | ||||
|     "EgalsTry", // Hrvatski (Croatian) | ||||
|     "EgalsTry", // Eesti | ||||
|     "EgalsTry", // Dansk | ||||
|   }, | ||||
|   { "Hide main menu entry", // English | ||||
|     "Hauptmen<EFBFBD>eintrag verstecken", // Deutsch | ||||
|     "", // Slovenski | ||||
| @@ -438,7 +501,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Fran<61>ais | ||||
|     "", // Norsk    | ||||
|     "Transponderin tiedot", // suomi | ||||
|     "", // Polski    | ||||
|     "", // Polski | ||||
|     "", // Espa<70>ol | ||||
|     "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "", // Svenska | ||||
| @@ -900,7 +963,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "", // Fran<61>ais | ||||
|     "", // Norsk | ||||
|     "vapaa", // suomi | ||||
|     "", // Polski    | ||||
|     "", // Polski | ||||
|     "", // Espa<70>ol | ||||
|     "", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "", // Svenska | ||||
| @@ -1068,7 +1131,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "kHz", // Fran<61>ais | ||||
|     "kHz", // Norsk | ||||
|     "kHz", // suomi | ||||
|     "kHz", // Polski    | ||||
|     "kHz", // Polski | ||||
|     "kHz", // Espa<70>ol | ||||
|     "kHz", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "kHz", // Svenska | ||||
| @@ -1185,6 +1248,27 @@ const tI18nPhrase Phrases[] = { | ||||
|     "Rid", // Eesti | ||||
|     "Rid", // Dansk | ||||
|   }, | ||||
|   { "Coderate", // English | ||||
|     "Coderate", // Deutsch | ||||
|     "Coderate", // Slovenski | ||||
|     "Coderate", // Italiano | ||||
|     "Coderate", // Nederlands | ||||
|     "Coderate", // Portugu<67>s | ||||
|     "Coderate", // Fran<61>ais | ||||
|     "Coderate", // Norsk | ||||
|     "Suojaustaso", // suomi | ||||
|     "Coderate", // Polski | ||||
|     "Coderate", // Espa<70>ol | ||||
|     "Coderate", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "Coderate", // Svenska | ||||
|     "Coderate", // Romaneste | ||||
|     "Coderate", // Magyar | ||||
|     "Coderate", // Catal<61> | ||||
|     "Coderate", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Russian) | ||||
|     "Coderate", // Hrvatski (Croatian) | ||||
|     "Coderate", // Eesti | ||||
|     "Coderate", // Dansk | ||||
|   }, | ||||
|   { "dB", // English | ||||
|     "dB", // Deutsch | ||||
|     "dB", // Slovenski | ||||
| @@ -1194,7 +1278,7 @@ const tI18nPhrase Phrases[] = { | ||||
|     "dB", // Fran<61>ais | ||||
|     "dB", // Norsk | ||||
|     "dB", // suomi | ||||
|     "dB", // Polski    | ||||
|     "dB", // Polski | ||||
|     "dB", // Espa<70>ol | ||||
|     "dB", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Greek) | ||||
|     "dB", // Svenska | ||||
|   | ||||
							
								
								
									
										91
									
								
								femonosd.c
									
									
									
									
									
								
							
							
						
						
									
										91
									
								
								femonosd.c
									
									
									
									
									
								
							| @@ -47,6 +47,7 @@ | ||||
| #define OSDSTATUSHEIGHT           (OSDROWHEIGHT * 6)      // in pixels (6 rows) | ||||
| #define OSDSPACING                5 | ||||
| #define OSDCORNERING              10 | ||||
| #define IS_OSDCORNERING           (femonConfig.skin == eFemonSkinElchi) | ||||
|  | ||||
| #define OSDINFOWIN_Y(offset)      (femonConfig.position ? (OSDHEIGHT - OSDINFOHEIGHT + offset) : offset) | ||||
| #define OSDINFOWIN_X(col)         ((col == 4) ? 455 : (col == 3) ? 305 : (col == 2) ? 155 : 15) | ||||
| @@ -136,8 +137,10 @@ void cFemonOsd::DrawStatusWindow(void) | ||||
|      snprintf(buf, sizeof(buf), "%d%s %s", m_Number ? m_Number : channel->Number(), m_Number ? "-" : "", channel->ShortName(true)); | ||||
|      m_Osd->DrawRectangle(0, OSDSTATUSWIN_Y(offset), OSDWIDTH, OSDSTATUSWIN_Y(offset+OSDROWHEIGHT-1), femonTheme[femonConfig.theme].clrTitleBackground); | ||||
|      m_Osd->DrawText(OSDSTATUSWIN_X(1), OSDSTATUSWIN_Y(offset), buf, femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground, m_Font); | ||||
|      m_Osd->DrawEllipse(0, OSDSTATUSWIN_Y(0), OSDCORNERING, OSDSTATUSWIN_Y(OSDCORNERING), clrTransparent, -2); | ||||
|      m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDSTATUSWIN_Y(0), OSDWIDTH, OSDSTATUSWIN_Y(OSDCORNERING), clrTransparent, -1); | ||||
|      if (IS_OSDCORNERING) { | ||||
|         m_Osd->DrawEllipse(0, OSDSTATUSWIN_Y(0), OSDCORNERING, OSDSTATUSWIN_Y(OSDCORNERING), clrTransparent, -2); | ||||
|         m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDSTATUSWIN_Y(0), OSDWIDTH, OSDSTATUSWIN_Y(OSDCORNERING), clrTransparent, -1); | ||||
|         } | ||||
|      if (m_Receiver) { | ||||
|         value = cDevice::ActualDevice()->CardIndex(); | ||||
|         if (value == 1) { | ||||
| @@ -343,8 +346,10 @@ void cFemonOsd::DrawStatusWindow(void) | ||||
|      m_Osd->DrawBitmap(OSDSTATUSWIN_XSYMBOL(3, x), OSDSTATUSWIN_Y(offset + y), bmCarrier, (m_FrontendStatus & FE_HAS_CARRIER) ? femonTheme[femonConfig.theme].clrActiveText : femonTheme[femonConfig.theme].clrRed, femonTheme[femonConfig.theme].clrBackground); | ||||
|      m_Osd->DrawBitmap(OSDSTATUSWIN_XSYMBOL(4, x), OSDSTATUSWIN_Y(offset + y), bmViterbi, (m_FrontendStatus & FE_HAS_VITERBI) ? femonTheme[femonConfig.theme].clrActiveText : femonTheme[femonConfig.theme].clrRed, femonTheme[femonConfig.theme].clrBackground); | ||||
|      m_Osd->DrawBitmap(OSDSTATUSWIN_XSYMBOL(5, x), OSDSTATUSWIN_Y(offset + y), bmSync, (m_FrontendStatus & FE_HAS_SYNC) ? femonTheme[femonConfig.theme].clrActiveText : femonTheme[femonConfig.theme].clrRed, femonTheme[femonConfig.theme].clrBackground); | ||||
|      m_Osd->DrawEllipse(0, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT-OSDCORNERING), OSDCORNERING, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT), clrTransparent, -3); | ||||
|      m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDSTATUSWIN_Y(OSDSTATUSHEIGHT-OSDCORNERING), OSDWIDTH, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT), clrTransparent, -4); | ||||
|      if (IS_OSDCORNERING) { | ||||
|         m_Osd->DrawEllipse(0, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT-OSDCORNERING), OSDCORNERING, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT), clrTransparent, -3); | ||||
|         m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDSTATUSWIN_Y(OSDSTATUSHEIGHT-OSDCORNERING), OSDWIDTH, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT), clrTransparent, -4); | ||||
|         } | ||||
|      m_Osd->Flush(); | ||||
|      } | ||||
| } | ||||
| @@ -365,8 +370,10 @@ void cFemonOsd::DrawInfoWindow(void) | ||||
|         m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), femonTheme[femonConfig.theme].clrBackground); | ||||
|         m_Osd->DrawRectangle(0, OSDINFOWIN_Y(offset), OSDWIDTH, OSDINFOWIN_Y(offset+OSDROWHEIGHT-1), femonTheme[femonConfig.theme].clrTitleBackground); | ||||
|         m_Osd->DrawText( OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Transponder Information"), femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground, m_Font); | ||||
|         m_Osd->DrawEllipse(0, OSDINFOWIN_Y(0), OSDCORNERING, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -2); | ||||
|         m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -1); | ||||
|         if (IS_OSDCORNERING) { | ||||
|            m_Osd->DrawEllipse(0, OSDINFOWIN_Y(0), OSDCORNERING, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -2); | ||||
|            m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -1); | ||||
|            } | ||||
|         offset += OSDROWHEIGHT; | ||||
|         m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Vpid"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); | ||||
|         snprintf(buf, sizeof(buf), "%d", channel->Vpid()); | ||||
| @@ -614,29 +621,29 @@ void cFemonOsd::DrawInfoWindow(void) | ||||
|                else if (value == INVERSION_ON)    snprintf(buf, sizeof(buf), tr("On")); | ||||
|                else            /*INVERSION_AUTO*/ snprintf(buf, sizeof(buf), tr("Auto")); | ||||
|                m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), buf, femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); | ||||
|                m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("CoderateH"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); | ||||
|                m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Coderate"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); | ||||
|                value = channel->CoderateH(); | ||||
|                if      (value == FEC_NONE)  snprintf(buf, sizeof(buf), tr("None")); | ||||
|                else if (value == FEC_1_2)   snprintf(buf, sizeof(buf), "1/2"); | ||||
|                else if (value == FEC_2_3)   snprintf(buf, sizeof(buf), "2/3"); | ||||
|                else if (value == FEC_3_4)   snprintf(buf, sizeof(buf), "3/4"); | ||||
|                else if (value == FEC_4_5)   snprintf(buf, sizeof(buf), "4/5"); | ||||
|                else if (value == FEC_5_6)   snprintf(buf, sizeof(buf), "5/6"); | ||||
|                else if (value == FEC_6_7)   snprintf(buf, sizeof(buf), "6/7"); | ||||
|                else if (value == FEC_7_8)   snprintf(buf, sizeof(buf), "7/8"); | ||||
|                else if (value == FEC_8_9)   snprintf(buf, sizeof(buf), "8/9"); | ||||
|                else            /*FEC_AUTO*/ snprintf(buf, sizeof(buf), tr("Auto")); | ||||
|                if      (value == FEC_NONE)  snprintf(buf, sizeof(buf), "%s (H)", tr("None")); | ||||
|                else if (value == FEC_1_2)   snprintf(buf, sizeof(buf), "1/2 (H)"); | ||||
|                else if (value == FEC_2_3)   snprintf(buf, sizeof(buf), "2/3 (H)"); | ||||
|                else if (value == FEC_3_4)   snprintf(buf, sizeof(buf), "3/4 (H)"); | ||||
|                else if (value == FEC_4_5)   snprintf(buf, sizeof(buf), "4/5 (H)"); | ||||
|                else if (value == FEC_5_6)   snprintf(buf, sizeof(buf), "5/6 (H)"); | ||||
|                else if (value == FEC_6_7)   snprintf(buf, sizeof(buf), "6/7 (H)"); | ||||
|                else if (value == FEC_7_8)   snprintf(buf, sizeof(buf), "7/8 (H)"); | ||||
|                else if (value == FEC_8_9)   snprintf(buf, sizeof(buf), "8/9 (H)"); | ||||
|                else            /*FEC_AUTO*/ snprintf(buf, sizeof(buf), "%s (H)", tr("Auto")); | ||||
|                value = channel->CoderateL(); | ||||
|                if      (value == FEC_NONE)  snprintf(buf2, sizeof(buf2), " - %s", tr("None")); | ||||
|                else if (value == FEC_1_2)   snprintf(buf2, sizeof(buf2), " - 1/2"); | ||||
|                else if (value == FEC_2_3)   snprintf(buf2, sizeof(buf2), " - 2/3"); | ||||
|                else if (value == FEC_3_4)   snprintf(buf2, sizeof(buf2), " - 3/4"); | ||||
|                else if (value == FEC_4_5)   snprintf(buf2, sizeof(buf2), " - 4/5"); | ||||
|                else if (value == FEC_5_6)   snprintf(buf2, sizeof(buf2), " - 5/6"); | ||||
|                else if (value == FEC_6_7)   snprintf(buf2, sizeof(buf2), " - 6/7"); | ||||
|                else if (value == FEC_7_8)   snprintf(buf2, sizeof(buf2), " - 7/8"); | ||||
|                else if (value == FEC_8_9)   snprintf(buf2, sizeof(buf2), " - 8/9"); | ||||
|                else            /*FEC_AUTO*/ snprintf(buf2, sizeof(buf2), " - %s", tr("Auto")); | ||||
|                if      (value == FEC_NONE)  snprintf(buf2, sizeof(buf2), " %s (L)", tr("None")); | ||||
|                else if (value == FEC_1_2)   snprintf(buf2, sizeof(buf2), " 1/2 (L)"); | ||||
|                else if (value == FEC_2_3)   snprintf(buf2, sizeof(buf2), " 2/3 (L)"); | ||||
|                else if (value == FEC_3_4)   snprintf(buf2, sizeof(buf2), " 3/4 (L)"); | ||||
|                else if (value == FEC_4_5)   snprintf(buf2, sizeof(buf2), " 4/5 (L)"); | ||||
|                else if (value == FEC_5_6)   snprintf(buf2, sizeof(buf2), " 5/6 (L)"); | ||||
|                else if (value == FEC_6_7)   snprintf(buf2, sizeof(buf2), " 6/7 (L)"); | ||||
|                else if (value == FEC_7_8)   snprintf(buf2, sizeof(buf2), " 7/8 (L)"); | ||||
|                else if (value == FEC_8_9)   snprintf(buf2, sizeof(buf2), " 8/9 (L)"); | ||||
|                else            /*FEC_AUTO*/ snprintf(buf2, sizeof(buf2), " %s (L)", tr("Auto")); | ||||
|                strncat(buf, buf2, sizeof(buf)); | ||||
|                m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); | ||||
|                offset += OSDROWHEIGHT; | ||||
| @@ -658,15 +665,19 @@ void cFemonOsd::DrawInfoWindow(void) | ||||
|                m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), buf, femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); | ||||
|                break; | ||||
|           } | ||||
|         m_Osd->DrawEllipse(0, OSDINFOWIN_Y(OSDINFOHEIGHT-OSDCORNERING), OSDCORNERING, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent, -3); | ||||
|         m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(OSDINFOHEIGHT-OSDCORNERING), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent, -4); | ||||
|         if (IS_OSDCORNERING) { | ||||
|            m_Osd->DrawEllipse(0, OSDINFOWIN_Y(OSDINFOHEIGHT-OSDCORNERING), OSDCORNERING, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent, -3); | ||||
|            m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(OSDINFOHEIGHT-OSDCORNERING), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent, -4); | ||||
|            } | ||||
|         } | ||||
|      else if (m_DisplayMode == eFemonModeStream) { | ||||
|         m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), femonTheme[femonConfig.theme].clrBackground); | ||||
|         m_Osd->DrawRectangle(0, OSDINFOWIN_Y(offset), OSDWIDTH, OSDINFOWIN_Y(offset+OSDROWHEIGHT-1), femonTheme[femonConfig.theme].clrTitleBackground); | ||||
|         m_Osd->DrawText( OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Stream Information"), femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground, m_Font); | ||||
|         m_Osd->DrawEllipse(0, OSDINFOWIN_Y(0), OSDCORNERING, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -2); | ||||
|         m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -1); | ||||
|         if (IS_OSDCORNERING) { | ||||
|            m_Osd->DrawEllipse(0, OSDINFOWIN_Y(0), OSDCORNERING, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -2); | ||||
|            m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -1); | ||||
|            } | ||||
|         offset += OSDROWHEIGHT; | ||||
|         m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Video Stream"), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); | ||||
|         snprintf(buf, sizeof(buf), "#%d", channel->Vpid()); | ||||
| @@ -736,16 +747,20 @@ void cFemonOsd::DrawInfoWindow(void) | ||||
|            } | ||||
|         else                         snprintf(buf, sizeof(buf), "---"); | ||||
|         m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); | ||||
|         m_Osd->DrawEllipse(0, OSDINFOWIN_Y(OSDINFOHEIGHT-OSDCORNERING), OSDCORNERING, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent, -3); | ||||
|         m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(OSDINFOHEIGHT-OSDCORNERING), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent, -4); | ||||
|         if (IS_OSDCORNERING) { | ||||
|            m_Osd->DrawEllipse(0, OSDINFOWIN_Y(OSDINFOHEIGHT-OSDCORNERING), OSDCORNERING, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent, -3); | ||||
|            m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(OSDINFOHEIGHT-OSDCORNERING), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent, -4); | ||||
|            } | ||||
|         } | ||||
|      else if (m_DisplayMode == eFemonModeAC3) { | ||||
|         m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), femonTheme[femonConfig.theme].clrBackground); | ||||
|         m_Osd->DrawRectangle(0, OSDINFOWIN_Y(offset), OSDWIDTH, OSDINFOWIN_Y(offset+OSDROWHEIGHT-1), femonTheme[femonConfig.theme].clrTitleBackground); | ||||
|         snprintf(buf, sizeof(buf), "%s - %s #%d %s", tr("Stream Information"), tr("AC-3 Stream"), IS_DOLBY_TRACK(track) ? channel->Dpid(int(track - ttDolbyFirst)) : channel->Dpid(0), IS_DOLBY_TRACK(track) ? channel->Dlang(int(track - ttDolbyFirst)) : channel->Dlang(0)); | ||||
|         m_Osd->DrawText( OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), buf, femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground, m_Font); | ||||
|         m_Osd->DrawEllipse(0, OSDINFOWIN_Y(0), OSDCORNERING, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -2); | ||||
|         m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -1); | ||||
|         if (IS_OSDCORNERING) { | ||||
|            m_Osd->DrawEllipse(0, OSDINFOWIN_Y(0), OSDCORNERING, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -2); | ||||
|            m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -1); | ||||
|            } | ||||
|         offset += OSDROWHEIGHT; | ||||
|         if (m_Receiver && m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) { | ||||
|            m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Bitrate"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); | ||||
| @@ -831,8 +846,10 @@ void cFemonOsd::DrawInfoWindow(void) | ||||
|            else           snprintf(buf, sizeof(buf), "---"); | ||||
|            m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), buf, femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); | ||||
|            } | ||||
|         m_Osd->DrawEllipse(0, OSDINFOWIN_Y(OSDINFOHEIGHT-OSDCORNERING), OSDCORNERING, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent, -3); | ||||
|         m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(OSDINFOHEIGHT-OSDCORNERING), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent, -4); | ||||
|         if (IS_OSDCORNERING) { | ||||
|            m_Osd->DrawEllipse(0, OSDINFOWIN_Y(OSDINFOHEIGHT-OSDCORNERING), OSDCORNERING, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent, -3); | ||||
|            m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(OSDINFOHEIGHT-OSDCORNERING), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent, -4); | ||||
|            } | ||||
|         } | ||||
|      else /* eFemonModeBasic */ { | ||||
|         m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user